Esempio n. 1
0
		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);
		}
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        /// <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;
        }