void Render(WikiElement parent, StringBuilder sb, IWikiParser parser) { WikiNode prev = null; foreach (WikiNode cur in parent.Children) { try { if (cur is WikiTextNode) { sb.Append (ReplaceInline ((cur as WikiTextNode).Text, parser)); continue; } WikiElement element = (WikiElement)cur; string element_name = null; if (element is WikiHeadingElement) { element_name = "h" + (element as WikiHeadingElement).Indent.ToString (); } else if (element is WikiParagraphElement) { element_name = "p"; } else if (element is WikiListContainer) { switch ((element as WikiListContainer).ListType) { case WikiListType.Itemizing: element_name = "ul"; break; case WikiListType.Enumerating: element_name = "ol"; break; case WikiListType.Description: element_name = "dl"; break; } } else if (element is WikiListItemElement) { element_name = "li"; } if (element_name == null) throw new Exception (); sb.Append ('<'); sb.Append (element_name); sb.Append ('>'); Render (element, sb, parser); sb.Append ("</"); sb.Append (element_name); sb.Append ('>'); } finally { prev = cur; } } }
public DefinitionProviderWiki(IHttpClientFactory clientFactory, IWikiParser wikiParser) { this.clientFactory = clientFactory; this.wikiParser = wikiParser; }
public string Render(WikiRootElement root, IWikiParser parser) { StringBuilder sb = new StringBuilder (); Render (root, sb, parser); return sb.ToString (); }
string ReplaceInline(string text, IWikiParser parser) { // Escape text = _escapeRegex.Replace (text, EscapeRegexMatchEvaluator); WikiInlineMarkupInfo[] markups = parser.InlineMarkups; for (int i = 0; i < markups.Length; i++) { Regex r = markups[i].Regex; switch (markups[i].Type) { case WikiInlineMarkupType.Bold: text = r.Replace (text, delegate (Match m) { return "<span class=\"bold\">" + m.Groups["text"].Value + "</span>"; }); break; case WikiInlineMarkupType.Italic: text = r.Replace (text, delegate (Match m) { return "<span class=\"italic\">" + m.Groups["text"].Value + "</span>"; }); break; case WikiInlineMarkupType.BoldItalic: text = r.Replace (text, delegate (Match m) { return "<span class=\"italic bold\">" + m.Groups["text"].Value + "</span>"; }); break; case WikiInlineMarkupType.WikiName: text = r.Replace (text, delegate (Match m) { return "<a href=\"" + WikiWebApp.WikiTitleToUrl (Unescape (m.Groups["name"].Value)) + "\">" + m.Groups["name"].Value + "</a>"; }); break; } } return text; }