private static void WriteElement()

in Sample Applications/HtmlToXamlDemo/HtmlFromXamlConverter.cs [417:506]


        private static void WriteElement(XmlTextReader xamlReader, XmlTextWriter htmlWriter, StringBuilder inlineStyle)
        {
            Debug.Assert(xamlReader.NodeType == XmlNodeType.Element);

            if (htmlWriter == null)
            {
                // Skipping mode; recurse into the xaml element without any output
                WriteElementContent(xamlReader, /*htmlWriter:*/null, null);
            }
            else
            {
                string htmlElementName = null;

                switch (xamlReader.Name)
                {
                    case "Run":
                    case "Span":
                        htmlElementName = "span";
                        break;
                    case "InlineUIContainer":
                        htmlElementName = "span";
                        break;
                    case "Bold":
                        htmlElementName = "b";
                        break;
                    case "Italic":
                        htmlElementName = "i";
                        break;
                    case "Paragraph":
                        htmlElementName = "p";
                        break;
                    case "BlockUIContainer":
                        htmlElementName = "div";
                        break;
                    case "Section":
                        htmlElementName = "div";
                        break;
                    case "Table":
                        htmlElementName = "table";
                        break;
                    case "TableColumn":
                        htmlElementName = "col";
                        break;
                    case "TableRowGroup":
                        htmlElementName = "tbody";
                        break;
                    case "TableRow":
                        htmlElementName = "tr";
                        break;
                    case "TableCell":
                        htmlElementName = "td";
                        break;
                    case "List":
                        var marker = xamlReader.GetAttribute("MarkerStyle");
                        if (marker == null || marker == "None" || marker == "Disc" || marker == "Circle" ||
                            marker == "Square" ||
                            marker == "Box")
                        {
                            htmlElementName = "ul";
                        }
                        else
                        {
                            htmlElementName = "ol";
                        }
                        break;
                    case "ListItem":
                        htmlElementName = "li";
                        break;
                    default:
                        htmlElementName = null; // Ignore the element
                        break;
                }

                if (htmlWriter != null && htmlElementName != null)
                {
                    htmlWriter.WriteStartElement(htmlElementName);

                    WriteFormattingProperties(xamlReader, htmlWriter, inlineStyle);

                    WriteElementContent(xamlReader, htmlWriter, inlineStyle);

                    htmlWriter.WriteEndElement();
                }
                else
                {
                    // Skip this unrecognized xaml element
                    WriteElementContent(xamlReader, /*htmlWriter:*/null, null);
                }
            }
        }