private static List <Block> Parse(AssemblyDef assembly, XmlContainerCodeElement container, ParsingSession session) { List <Block> blocks = new List <Block>(); ExceptionList exceptions = new ExceptionList(); PermissionList permissions = new PermissionList(); Paragraph inlineContainer = null; if (session == null) { session = new ParsingSession(); } for (int counter = 0; counter < container.Elements.Count;) { if (container.Elements[counter].IsInline) { inlineContainer = new Paragraph(); while (counter < container.Elements.Count && container.Elements[counter].IsInline) { inlineContainer.Inlines.Add(Parser.ParseInline(assembly, container.Elements[counter], session)); counter++; } blocks.Add(inlineContainer); inlineContainer = null; } else { Block block = Parser.ParseBlock(assembly, container.Elements[counter], session); if (block != null) { if (block is ExceptionEntry) { exceptions.Add(block as ExceptionEntry); } else if (block is PermissionEntry) { permissions.Add(block as PermissionEntry); } else { blocks.Add(block); } } counter++; } } if (exceptions.ExceptionCount > 0) { blocks.Add(exceptions); } if (permissions.Count > 0) { blocks.Add(permissions); } return(blocks); }
private static List <Block> Parse(AssemblyDef assembly, XmlContainerCodeElement container) { return(Parser.Parse(assembly, container, null)); }
private void RenderTable(System.Xml.XmlWriter writer) { writer.WriteStartElement("table"); // create the table header ListHeaderXmlCodeElement header = (ListHeaderXmlCodeElement)_element.Elements.Find( e => e.Element == XmlCodeElements.ListHeader); writer.WriteStartElement("header"); if (header != null) { XmlContainerCodeElement description = (XmlContainerCodeElement)_element.Elements.Find( e => e.Element == XmlCodeElements.Description); XmlContainerCodeElement term = (XmlContainerCodeElement)_element.Elements.Find( e => e.Element == XmlCodeElements.Term); writer.WriteStartElement("cell"); if (term != null) { foreach (XmlCodeElement child in term.Elements) { // miss out the listitem and just focus on children this.Serialize(child, writer); } } else { writer.WriteElementString("text", "Term"); } writer.WriteEndElement(); // column writer.WriteStartElement("cell"); if (description != null) { foreach (XmlCodeElement child in description.Elements) { // miss out the listitem and just focus on children Serialize(child, writer); } } else { writer.WriteElementString("text", "Description"); } writer.WriteEndElement(); // column } else { writer.WriteStartElement("cell"); writer.WriteElementString("text", "Term"); writer.WriteEndElement(); // column writer.WriteStartElement("cell"); writer.WriteElementString("text", "Description"); writer.WriteEndElement(); // column } writer.WriteEndElement(); // header // rows List <XmlCodeElement> items = _element.Elements.FindAll(e => e.Element == XmlCodeElements.ListItem); foreach (ListItemXmlCodeElement currentItem in items) { if (currentItem.Elements.Count == 2) { writer.WriteStartElement("row"); XmlContainerCodeElement description = (XmlContainerCodeElement)currentItem.Elements.Find( e => e.Element == XmlCodeElements.Description); XmlContainerCodeElement term = (XmlContainerCodeElement)currentItem.Elements.Find( e => e.Element == XmlCodeElements.Term); writer.WriteStartElement("cell"); if (term != null) { foreach (XmlCodeElement child in term.Elements) { // miss out the listitem and just focus on children Serialize(child, writer); } } writer.WriteEndElement(); writer.WriteStartElement("cell"); if (description != null) { foreach (XmlCodeElement child in description.Elements) { // miss out the listitem and just focus on children Serialize(child, writer); } } writer.WriteEndElement(); writer.WriteEndElement(); // row } } writer.WriteEndElement(); // table }