internal override IElement CreateElement(IElementFactory elementFactory, IElement parent, IRule rule, IdentifierCollection ruleIds) { // Create and return the IOneOf representing the current object IOneOf oneOf = elementFactory.CreateOneOf(parent, rule); foreach (GrammarBuilderBase item in Items) { ItemElement newItem = item as ItemElement ?? new ItemElement(item); IItem element = (IItem)newItem.CreateElement(elementFactory, oneOf, rule, ruleIds); element.PostParse(oneOf); elementFactory.AddItem(oneOf, element); } return(oneOf); }
internal override IElement CreateElement(IElementFactory elementFactory, IElement parent, IRule rule, IdentifierCollection ruleIds) { IOneOf oneOf = elementFactory.CreateOneOf(parent, rule); foreach (GrammarBuilderBase item2 in base.Items) { ItemElement itemElement = item2 as ItemElement; if (itemElement == null) { itemElement = new ItemElement(item2); } IItem item = (IItem)itemElement.CreateElement(elementFactory, oneOf, rule, ruleIds); item.PostParse(oneOf); elementFactory.AddItem(oneOf, item); } return(oneOf); }
private void ProcessChildNodes(SrgsElement srgsElement, IElement parent, IRule rule) { Type type = srgsElement.GetType(); IElement element = null; IRule rule2 = parent as IRule; IItem item = parent as IItem; if (type == typeof(SrgsRuleRef)) { element = ParseRuleRef((SrgsRuleRef)srgsElement, parent); } else if (type == typeof(SrgsOneOf)) { element = ParseOneOf((SrgsOneOf)srgsElement, parent, rule); } else if (type == typeof(SrgsItem)) { element = ParseItem((SrgsItem)srgsElement, parent, rule); } else if (type == typeof(SrgsToken)) { element = ParseToken((SrgsToken)srgsElement, parent); } else if (type == typeof(SrgsNameValueTag)) { element = ParseNameValueTag((SrgsNameValueTag)srgsElement, parent); } else if (type == typeof(SrgsSemanticInterpretationTag)) { element = ParseSemanticTag((SrgsSemanticInterpretationTag)srgsElement, parent); } else if (type == typeof(SrgsSubset)) { element = ParseSubset((SrgsSubset)srgsElement, parent); } else if (type == typeof(SrgsText)) { SrgsText srgsText = (SrgsText)srgsElement; string text = srgsText.Text; IElementText value = _parser.CreateText(parent, text); ParseText(parent, text, null, null, -1f); if (rule2 != null) { _parser.AddElement(rule2, value); } else if (item != null) { _parser.AddElement(item, value); } else { XmlParser.ThrowSrgsException(SRID.InvalidElement); } } else { XmlParser.ThrowSrgsException(SRID.InvalidElement); } IOneOf oneOf = parent as IOneOf; if (oneOf != null) { IItem item2 = element as IItem; if (item2 != null) { _parser.AddItem(oneOf, item2); } else { XmlParser.ThrowSrgsException(SRID.InvalidElement); } } else if (rule2 != null) { _parser.AddElement(rule2, element); } else if (item != null) { _parser.AddElement(item, element); } else { XmlParser.ThrowSrgsException(SRID.InvalidElement); } }