Ejemplo n.º 1
0
        /// <summary>
        /// Parses the ListXmlCodeElement in to its correct FlowDocument representation.
        /// </summary>
        /// <param name="assembly"></param>
        /// <param name="element"></param>
        /// <returns></returns>
        private static Block ParseList(AssemblyDef assembly, ListXmlCodeElement element)
        {
            Block parsedBlock = null;

            switch (element.ListType)
            {
            case Reflection.Comments.ListTypes.Bullet:
            case Reflection.Comments.ListTypes.Number:
                List list = new List();
                if (element.ListType == Reflection.Comments.ListTypes.Number)
                {
                    list.InternalList.MarkerStyle = System.Windows.TextMarkerStyle.Decimal;
                }
                else
                {
                    list.InternalList.MarkerStyle = System.Windows.TextMarkerStyle.Disc;
                }

                // only use list items, headers, even if defined, are not used in normal lists
                foreach (ListItemXmlCodeElement listItem in element.Elements.FindAll(e => e is ListItemXmlCodeElement))
                {
                    ListItem item = new ListItem();
                    item.Blocks.AddRange(Parser.Parse(assembly, listItem));
                    list.InternalList.ListItems.Add(item);
                }

                parsedBlock = list;
                break;

            case Reflection.Comments.ListTypes.Table:
                SummaryTable table;

                // find the header item and use the titles or use defaults
                ListHeaderXmlCodeElement headerElement = (ListHeaderXmlCodeElement)element.Elements.Find(e => e is ListHeaderXmlCodeElement);
                if (headerElement != null && headerElement.Elements.Count == 2)
                {
                    TermXmlCodeElement        termElement        = (TermXmlCodeElement)headerElement.Elements.Find(e => e is TermXmlCodeElement);
                    DescriptionXmlCodeElement descriptionElement = (DescriptionXmlCodeElement)headerElement.Elements.Find(e => e is DescriptionXmlCodeElement);

                    Section term        = new Section();
                    Section description = new Section();
                    term.Blocks.AddRange(Parser.Parse(assembly, termElement));
                    description.Blocks.AddRange(Parser.Parse(assembly, descriptionElement));

                    table = new SummaryTable(term, description, false);
                }
                else
                {
                    table = new SummaryTable("Term", "Description", false);
                }

                foreach (ListItemXmlCodeElement listItem in element.Elements.FindAll(e => e is ListItemXmlCodeElement))
                {
                    TermXmlCodeElement        termElement        = (TermXmlCodeElement)listItem.Elements.Find(e => e is TermXmlCodeElement);
                    DescriptionXmlCodeElement descriptionElement = (DescriptionXmlCodeElement)listItem.Elements.Find(e => e is DescriptionXmlCodeElement);

                    Section term        = new Section();
                    Section description = new Section();

                    if (termElement != null)
                    {
                        term.Blocks.AddRange(Parser.Parse(assembly, termElement));
                    }
                    else if (element.Elements != null && element.Elements.Count > 0)
                    {
                        term.Blocks.Add(new Paragraph(new Run(element.Elements[0].Text)));
                    }

                    if (descriptionElement != null)
                    {
                        description.Blocks.AddRange(Parser.Parse(assembly, descriptionElement));
                    }
                    else if (element.Elements != null && element.Elements.Count > 1)
                    {
                        term.Blocks.Add(new Paragraph(new Run(element.Elements[1].Text)));
                    }

                    table.AddItem(term, description);
                }

                parsedBlock = table;
                break;
            }
            return(parsedBlock);
        }
Ejemplo n.º 2
0
        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
        }