public string ConvertCreole(string c) { if (string.IsNullOrEmpty(c)) return string.Empty; var w = new Wiki.CreoleParser(); w.OnLink += (sender, e) => { if (e.Href.Contains("://")) { e.Target = Wiki.LinkEventArgs.TargetEnum.External; } else { e.Target = Wiki.LinkEventArgs.TargetEnum.Internal; e.Href = "wiki://" + e.Href; } }; return w.ToHTML(c); }
public string ConvertCreole(string c) { if (string.IsNullOrEmpty(c)) { return(string.Empty); } var w = new Wiki.CreoleParser(); w.OnLink += (sender, e) => { if (e.Href.Contains("://")) { e.Target = Wiki.LinkEventArgs.TargetEnum.External; } else { e.Target = Wiki.LinkEventArgs.TargetEnum.Internal; e.Href = "wiki://" + e.Href; } }; return(w.ToHTML(c)); }
/// <summary> /// Render WikiCreole markup string as HTML /// </summary> /// <param name="input"></param> /// <returns>HTML</returns> public string ew_renderstring(string input, bool processLayout) { //log("ew_renderstring " + processLayout.ToString() + " ::" + input); var engine = new Wiki.CreoleParser(); //Interwiki links //today be added in module settings one per line as alias:baseurl, e.g. //wikipedia:http://wikipedia.org/wiki/ // [[wikipedia:TOPIC]] -> http://wikipedia.org/wiki/TOPIC string Interwikimap = getmodulesetting("Interwikimap").ToString(); string[] maps = Interwikimap.Split('\n'); foreach (string map in maps) { int del = map.IndexOf(':'); if (del > 0) { engine.InterWiki.Add(map.Substring(0, map.Length - (map.Length - del)), map.Substring(del + 1)); } //aka engine.InterWiki.Add("wikipedia", "http://wikipedia.org/wiki/"); } // EasyWiki Link Handler engine.OnLink += new Wiki.LinkEventHandler(EasyWikiLinkHandler); // EasyWiki extensions handler EasyWikiExtensionHandler ew = new EasyWikiExtensionHandler(); ew.h = new Helper(transformer); ew.currentPage = (string)iif(request("page") != "", request("page"), "index"); // todo: carica da request o da nuovo parametro? if (processLayout == true) { //save current page markup x layout extension, replacing <<<layout>>> tag to avoid recursive rendering Regex regex = new Regex( @"(?:^|[^\{{3}][^\<pre\>])<{3}layout[\s]?(.+?)?>{3}", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.Compiled ); MatchCollection hasLayout = regex.Matches(input); if (hasLayout.Count > 0) { /* * EasyWiki Core Extension <<<layout page="PageName">>> * * page content placeholder in layout page: {{{$page$}}} * */ ew.currentPageMarkup = regex.Replace(input, ""); Match myLayout = hasLayout[0]; // only apply first <<<layout>>> tag List <EasyWikiExtensionParameter> pp = ew.EasyWikiExtensionParametersParse(myLayout.Groups[1].Value); string pageLayoutName = ew.EasyWikiExtensionParameterGetValue(pp, "page"); if (pageLayoutName.Trim() != string.Empty) { XPathNavigator navLayout = ew_readpagexml(pageLayoutName); if (navLayout == null) { return(""); } if (navLayout.SelectSingleNode("//error") == null) { string pageLayoutMarkup = navLayout.SelectSingleNode("//page/content").ToString(); ////pageLayoutMarkup = pageLayoutMarkup.Replace("{{{$page$}}}", ew_renderstringpartial(ew.currentPageMarkup)); //pageLayoutMarkup = pageLayoutMarkup.Replace("{{{$page$}}}", ew.currentPageMarkup); ////pageLayoutMarkup = ew_renderstringpartial(pageLayoutMarkup); ////pageLayoutMarkup = pageLayoutMarkup.Replace("{{{$page$}}}", " " + ew.currentPageMarkup); //input = ew_renderstring(pageLayoutMarkup); pageLayoutMarkup = pageLayoutMarkup.Replace("{{{$page$}}}", ew_renderstring(ew.currentPageMarkup, false)); input = pageLayoutMarkup;// ew_renderstring(pageLayoutMarkup); } else { if (iseditable()) { input = regex.Replace(input, "<span class='NormalRed'>" + navLayout.SelectSingleNode("//error").ToString() + "</span>"); } else { input = regex.Replace(input, ""); } } } } } // parse extensions MatchEvaluator myEvaluator = new MatchEvaluator(ew.EasyWikiExtensionParser); // matcha estensioni con sintassi <<<Extension>>> // esclude se prefisso no-wiki {{{ o <pre> input = Regex.Replace(input, @"(?:^|[^\{{3}][^\<pre\>])<{3}(\w+)[\s]?(.+?)?>{3}", myEvaluator, RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.Compiled); // DNN token-replace parser Regex dnnsafetokenreplace = new Regex( @"(\[([^: ]*):([^:/ ]*)\])", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled ); MatchEvaluator str = new MatchEvaluator(DNNTokenReplace); input = dnnsafetokenreplace.Replace(input, str); if (processLayout) { return(engine.ToHTML(input)); } else { return(input); } }
private string RequestAndSave(string page, bool forceInvalidation) { var wiki = Application.Client.Users[_user].Repositories[_slug].Wikis[page]; var d = wiki.GetInfo(forceInvalidation); var dataHtml = String.Empty; if (d.Markup.Equals("markdown")) { var markdown = new MarkdownSharp.Markdown(); dataHtml = markdown.Transform(d.Data); } else if (d.Markup.Equals("creole")) { var w = new Wiki.CreoleParser(); w.OnLink += HandleOnLink; dataHtml = w.ToHTML(d.Data); } else if (d.Markup.Equals("textile")) { dataHtml = Markup.Textile.Transform(d.Data); } else if (d.Markup.Equals("rest")) { //Need a parser for reStructuredText!!! dataHtml = d.Data; } else { dataHtml = d.Data; } //Generate the markup var markup = new System.Text.StringBuilder(); markup.Append("<html><head>"); markup.Append("<meta name=\"viewport\" content=\"width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0\"/>"); markup.Append("<title>"); markup.Append(page); markup.Append("</title></head><body>"); markup.Append(dataHtml); markup.Append("</body></html>"); var url = System.IO.Path.Combine(WikiCache, Uri.UnescapeDataString(page) + ".html"); using (var file = System.IO.File.Create(url)) { using (var writer = new System.IO.StreamWriter(file, System.Text.Encoding.UTF8)) { writer.Write(markup.ToString()); } } return url; }