private static bool WriteFlowDocument(XmlTextReader xamlReader, XmlTextWriter htmlWriter) { if (!HtmlFromXamlConverter.ReadNextToken(xamlReader)) { return(false); } if (xamlReader.NodeType != XmlNodeType.Element || xamlReader.Name != "FlowDocument") { return(false); } StringBuilder inlineStyle = new StringBuilder(); htmlWriter.WriteStartElement("HTML"); htmlWriter.WriteStartElement("BODY"); HtmlFromXamlConverter.WriteFormattingProperties(xamlReader, htmlWriter, inlineStyle, "BODY"); HtmlFromXamlConverter.WriteElementContent(xamlReader, htmlWriter, inlineStyle, new List <string>(), new List <string>()); htmlWriter.WriteEndElement(); htmlWriter.WriteEndElement(); return(true); }
private static void WriteElement(XmlTextReader xamlReader, XmlTextWriter htmlWriter, StringBuilder inlineStyle, List <string> xamlAncestors, List <string> htmlAncestors) { if (htmlWriter == null) { if (inlineStyle != null && xamlReader.Name == "TextDecoration") { string attribute = xamlReader.GetAttribute("Location"); string a; if ((a = attribute) != null) { if (!(a == "Underline")) { if (!(a == "OverLine")) { if (a == "Strikethrough") { inlineStyle.Append("text-decoration:line-through;"); } } else { inlineStyle.Append("text-decoration:overline;"); } } else { inlineStyle.Append("text-decoration:underline;"); } } } HtmlFromXamlConverter.WriteElementContent(xamlReader, null, null, xamlAncestors, htmlAncestors); return; } string name; string text; switch (name = xamlReader.Name) { case "Run": case "Span": text = "SPAN"; goto IL_38A; case "InlineUIContainer": text = "SPAN"; goto IL_38A; case "Bold": text = "B"; goto IL_38A; case "Italic": text = "I"; goto IL_38A; case "Paragraph": if (xamlAncestors.Count > 0 && xamlAncestors[xamlAncestors.Count - 1] == "ListItem") { text = "SPAN"; goto IL_38A; } text = "P"; goto IL_38A; case "BlockUIContainer": text = "DIV"; goto IL_38A; case "Section": text = "DIV"; goto IL_38A; case "Table": text = "TABLE"; goto IL_38A; case "Table.Columns": text = "COLGROUP"; goto IL_38A; case "TableColumn": text = "COL"; goto IL_38A; case "TableRowGroup": text = "TBODY"; goto IL_38A; case "TableRow": text = "TR"; goto IL_38A; case "TableCell": text = "TD"; goto IL_38A; case "List": { string attribute2 = xamlReader.GetAttribute("MarkerStyle"); if (attribute2 == null || attribute2 == "Disc" || attribute2 == "Circle" || attribute2 == "Square" || attribute2 == "Box") { text = "UL"; goto IL_38A; } if (attribute2 == null || attribute2 == "None") { text = "DL"; goto IL_38A; } text = "OL"; goto IL_38A; } case "ListItem": if (htmlAncestors.Count > 0 && htmlAncestors[htmlAncestors.Count - 1] == "DL") { text = "DD"; goto IL_38A; } text = "LI"; goto IL_38A; case "LineBreak": text = "BR"; goto IL_38A; case "Hyperlink": text = "A"; goto IL_38A; case "Image": text = "IMG"; goto IL_38A; } text = null; IL_38A: xamlAncestors.Add(xamlReader.Name); if (text != null) { htmlAncestors.Add(text); } if (htmlWriter != null && text != null) { htmlWriter.WriteStartElement(text); HtmlFromXamlConverter.WriteFormattingProperties(xamlReader, htmlWriter, inlineStyle, text); if (text == "IMG") { string attribute3 = xamlReader.GetAttribute("Width"); if (!string.IsNullOrEmpty(attribute3)) { htmlWriter.WriteAttributeString("WIDTH", attribute3); } string attribute4 = xamlReader.GetAttribute("Height"); if (!string.IsNullOrEmpty(attribute4)) { htmlWriter.WriteAttributeString("HEIGHT", attribute4); } } else { if (text == "COL") { inlineStyle.Length = 0; string attribute5 = xamlReader.GetAttribute("Width"); if (!string.IsNullOrEmpty(attribute5)) { htmlWriter.WriteAttributeString("WIDTH", attribute5); } } } HtmlFromXamlConverter.WriteElementContent(xamlReader, htmlWriter, inlineStyle, xamlAncestors, htmlAncestors); htmlWriter.WriteEndElement(); } else { HtmlFromXamlConverter.WriteElementContent(xamlReader, null, null, xamlAncestors, htmlAncestors); } xamlAncestors.RemoveAt(xamlAncestors.Count - 1); if (text != null) { htmlAncestors.RemoveAt(htmlAncestors.Count - 1); } }