/// <summary>Returns a new TagCollection containing all nodes contained in a given XML node.</summary> /// <param name="node">The XML node whose children should be parsed.</param> /// <returns>A new TagCollection containing the results of calling Tag.Parse to construct child nodes from the XML node's children.</returns> public static TemplateElementCollection FromXml(XmlNode node, AimlLoader loader) { var tagList = new List <TemplateNode>(); foreach (XmlNode node2 in node.ChildNodes) { switch (node2.NodeType) { case XmlNodeType.Whitespace: tagList.Add(new TemplateText(" ")); break; case XmlNodeType.Text: tagList.Add(new TemplateText(node2.InnerText)); break; case XmlNodeType.SignificantWhitespace: tagList.Add(new TemplateText(node2.InnerText, false)); break; case XmlNodeType.Element: tagList.Add(loader.ParseElement(node2)); break; } } return(new TemplateElementCollection(tagList.ToArray())); }
public static Test FromXml(XmlNode node, AimlLoader loader) { // Search for XML attributes. XmlAttribute attribute; TemplateElementCollection?expected = null; List <TemplateNode> children = new List <TemplateNode>(); attribute = node.Attributes["name"]; if (attribute == null) { throw new AimlException("<test> tag must have a 'name' attribute."); } var name = attribute.Value; attribute = node.Attributes["expected"]; if (attribute != null) { expected = new TemplateElementCollection(attribute.Value); } // Search for properties in elements. foreach (XmlNode node2 in node.ChildNodes) { if (node2.NodeType == XmlNodeType.Whitespace) { children.Add(new TemplateText(" ")); } else if (node2.NodeType == XmlNodeType.Text || node2.NodeType == XmlNodeType.SignificantWhitespace) { children.Add(new TemplateText(node2.InnerText)); } else if (node2.NodeType == XmlNodeType.Element) { if (node2.Name.Equals("name", StringComparison.InvariantCultureIgnoreCase)) { throw new AimlException("<test> name may not be specified in a subtag."); } else if (node2.Name.Equals("expected", StringComparison.InvariantCultureIgnoreCase)) { expected = TemplateElementCollection.FromXml(node2, loader); } else { children.Add(loader.ParseElement(node2)); } } } if (expected == null) { throw new AimlException("<test> tag must have an 'expected' property."); } return(new Test(name, expected, new TemplateElementCollection(children.ToArray()))); }
public static Map FromXml(XmlNode node, AimlLoader loader) { // Search for XML attributes. XmlAttribute attribute; TemplateElementCollection name = null; List <TemplateNode> children = new List <TemplateNode>(); attribute = node.Attributes["name"]; if (attribute != null) { name = new TemplateElementCollection(attribute.Value); } // Search for properties in elements. foreach (XmlNode node2 in node.ChildNodes) { if (node2.NodeType == XmlNodeType.Whitespace) { children.Add(new TemplateText(" ")); } else if (node2.NodeType == XmlNodeType.Text || node2.NodeType == XmlNodeType.SignificantWhitespace) { children.Add(new TemplateText(node2.InnerText)); } else if (node2.NodeType == XmlNodeType.Element) { if (node2.Name.Equals("name", StringComparison.InvariantCultureIgnoreCase)) { name = TemplateElementCollection.FromXml(node2, loader); } else { children.Add(loader.ParseElement(node2)); } } } if (name == null) { throw new AimlException("map tag is missing a name property."); } return(new Map(name, new TemplateElementCollection(children.ToArray()))); }
public static TemplateNode.Condition.li Parse(XmlNode node, AimlLoader loader) { // Search for XML attributes. XmlAttribute attribute; TemplateElementCollection name = null; TemplateElementCollection value = null; bool localVar = false; List <TemplateNode> children = new List <TemplateNode>(); attribute = node.Attributes["name"]; if (attribute != null) { name = new TemplateElementCollection(attribute.Value); } attribute = node.Attributes["var"]; if (attribute != null) { name = new TemplateElementCollection(attribute.Value); localVar = true; } attribute = node.Attributes["value"]; if (attribute != null) { value = new TemplateElementCollection(attribute.Value); } // Search for properties in elements. foreach (XmlNode node2 in node.ChildNodes) { if (node2.NodeType == XmlNodeType.Whitespace) { children.Add(new TemplateText(" ")); } else if (node2.NodeType == XmlNodeType.Text || node2.NodeType == XmlNodeType.SignificantWhitespace) { children.Add(new TemplateText(node2.InnerText)); } else if (node2.NodeType == XmlNodeType.Element) { if (node2.Name.Equals("name", StringComparison.InvariantCultureIgnoreCase)) { name = TemplateElementCollection.FromXml(node2, loader); localVar = false; } else if (node2.Name.Equals("var", StringComparison.InvariantCultureIgnoreCase)) { name = TemplateElementCollection.FromXml(node2, loader); localVar = true; } else if (node2.Name.Equals("value", StringComparison.InvariantCultureIgnoreCase)) { value = TemplateElementCollection.FromXml(node2, loader); } else { children.Add(loader.ParseElement(node2)); } } } return(new li(name, localVar, value, new TemplateElementCollection(children.ToArray()))); }
public static Condition FromXml(XmlNode node, AimlLoader loader) { // Search for XML attributes. XmlAttribute attribute; TemplateElementCollection?name = null; TemplateElementCollection?value = null; bool localVar = false; List <TemplateNode> children = new List <TemplateNode>(); List <li> items = new List <li>(); attribute = node.Attributes["name"]; if (attribute != null) { name = new TemplateElementCollection(attribute.Value); } attribute = node.Attributes["var"]; if (attribute != null) { name = new TemplateElementCollection(attribute.Value); localVar = true; } attribute = node.Attributes["value"]; if (attribute != null) { value = new TemplateElementCollection(attribute.Value); } // Search for properties in elements. foreach (XmlNode node2 in node.ChildNodes) { if (node2.NodeType == XmlNodeType.Whitespace) { children.Add(new TemplateText(" ")); } else if (node2.NodeType == XmlNodeType.Text || node2.NodeType == XmlNodeType.SignificantWhitespace) { children.Add(new TemplateText(node2.InnerText)); } else if (node2.NodeType == XmlNodeType.Element) { if (node2.Name.Equals("name", StringComparison.InvariantCultureIgnoreCase)) { name = TemplateElementCollection.FromXml(node2, loader); localVar = false; } else if (node2.Name.Equals("var", StringComparison.InvariantCultureIgnoreCase)) { name = TemplateElementCollection.FromXml(node2, loader); localVar = true; } else if (node2.Name.Equals("value", StringComparison.InvariantCultureIgnoreCase)) { value = TemplateElementCollection.FromXml(node2, loader); } else if (node2.Name.Equals("li", StringComparison.InvariantCultureIgnoreCase)) { items.Add(li.Parse(node2, loader)); } else { children.Add(loader.ParseElement(node2)); } } } if (items.Count == 0) { if (name == null || value == null) { throw new AimlException("<condition> tag is missing attributes or <li> tags."); } return(new Condition(name, localVar, value, new TemplateElementCollection(children.ToArray()))); } if (items.Any(i => i.Value == null)) { bool infiniteLoop = true; foreach (var item in items) { if (item.Children == null || !item.Children.Loop) { infiniteLoop = false; break; } } if (infiniteLoop) { throw new AimlException("Infinite loop: every <li> has a loop (and there is a default <li>)."); } } return(new Condition(name, localVar, items.ToArray())); }