コード例 #1
0
        public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            await base.ProcessAsync(context, output);

            string content = null;

            if (Markdown != null)
            {
                content = Markdown.Model?.ToString();
            }

            if (content == null)
            {
                content = (await output.GetChildContentAsync(NullHtmlEncoder.Default))
                          .GetContent(NullHtmlEncoder.Default);
            }

            if (string.IsNullOrEmpty(content))
            {
                return;
            }

            content = content.Trim('\n', '\r');

            //string markdown = NormalizeWhiteSpaceText(content);
            string markdown = (content);

            var parser = MarkdownParserFactory.GetParser();
            var html   = parser.Parse(markdown);

            output.TagName = null;  // Remove the <markdown> element
            output.Content.SetHtmlContent(html);
        }
コード例 #2
0
        public void ShouldReturnListOfParserNamesContainingTheDefaultParserNameWhenNoAddinsLoaded()
        {
            List <string> names = MarkdownParserFactory.GetParserNames();

            Assert.AreEqual(1, names.Count);
            Assert.AreEqual(MarkdownParserFactory.DefaultMarkdownParserName, names.First());
        }
コード例 #3
0
        public void ShouldFetchAddinParserByAddinId()
        {
            _loadAddin(new CustomParserAddin());
            var parser = MarkdownParserFactory.GetParser(parserAddinId: "CustomParserAddin");

            Assert.IsInstanceOfType(parser, typeof(CustomParser));
        }
コード例 #4
0
        public void ShouldReturnTheSpecifiedParser()
        {
            _loadAddin(new CustomParserAddin());

            var parser = MarkdownParserFactory.GetParser(parserAddinId: "CustomParser");

            Assert.IsInstanceOfType(parser, typeof(CustomParser));
        }
コード例 #5
0
        public void ShouldReturnTheSpecifiedParserWhenForceLoadArgIsTrue()
        {
            _loadAddin(new CustomParserAddin());

            MarkdownParserFactory.GetParser();
            var parser = MarkdownParserFactory.GetParser(forceLoad: true, addinId: "CustomParser");

            Assert.IsInstanceOfType(parser, typeof(CustomParser));
        }
コード例 #6
0
ファイル: MarkdownTests.cs プロジェクト: ikvm/MarkdownMonster
        public void TestStrikeOut()
        {
            string markdown = "This is **bold** and this is ~~strike out text~~ and this is ~~too~~. This ~~ is text \r\n that continues~~.";

            var    parser = MarkdownParserFactory.GetParser(true);
            string html   = parser.Parse(markdown);

            Console.WriteLine(html);
        }
コード例 #7
0
        public void ShouldReturnTheCachedParserWhenForceLoadArgIsFalse()
        {
            _loadAddin(new CustomParserAddin());

            MarkdownParserFactory.GetParser();
            var parser = MarkdownParserFactory.GetParser(forceLoad: false, parserAddinId: "CustomParser");

            Assert.IsInstanceOfType(parser, typeof(MarkdownParserMarkdig));
        }
コード例 #8
0
        /// <summary>
        /// Arranges the permuted markdown and acts to parse it into HTML.
        /// </summary>
        /// <param name="lead">The leading characters.</param>
        /// <param name="trail">The closing characters.</param>
        /// <returns>The generated HTML for the permutation</returns>
        private static string CreateMarkdownPermutation(string lead, string trail)
        {
            var markdown = PermutationMarkdown.Replace("{lead}", lead)
                           .Replace("{trail}", trail);
            var    parser = MarkdownParserFactory.GetParser(usePragmaLines: false, forceLoad: true);
            string html   = parser.Parse(markdown);

            return(html);
        }
コード例 #9
0
        public void HtmlLineBreakTest()
        {
            string markdown = "This is a test<br>Line 2";

            var    parser = MarkdownParserFactory.GetParser();
            string html   = parser.Parse(markdown);

            Console.WriteLine(markdown);
            Console.WriteLine(html);
        }
コード例 #10
0
        /// <summary>
        /// Renders raw markdown from string to HTML
        /// </summary>
        /// <param name="markdown">Markdown to Render</param>
        /// <param name="usePragmaLines">Generates line numbers as ids into headers and paragraphs. Useful for previewers to match line numbers to rendered output</param>
        /// <param name="forceReload">Forces the parser to be reloaded completely rather than using a cached instance</param>
        /// <param name="sanitizeHtml">Strips out scriptable tags and attributes for prevent XSS attacks. Minimal implementation.</param>
        /// <returns></returns>
        public static string Parse(string markdown, bool usePragmaLines = false, bool forceReload = false, bool sanitizeHtml = true)
        {
            if (string.IsNullOrEmpty(markdown))
            {
                return("");
            }

            var parser = MarkdownParserFactory.GetParser(usePragmaLines, forceReload);

            return(parser.Parse(markdown, sanitizeHtml));
        }
コード例 #11
0
        public void ShouldReturnListOfParserNamesLoaded()
        {
            _loadAddin(new CustomParserAddin());

            var names = MarkdownParserFactory.GetParserNames();

            Assert.AreEqual(2, names.Count);

            CollectionAssert.AreEqual(new List <string> {
                MarkdownParserFactory.DefaultMarkdownParserName, "CustomParser"
            }, names);
        }
コード例 #12
0
        public void FontAwesomeTest()
        {
            string markdown = @"
this @icon-gear<span>Text</span>

I can see that this is working @icon-warning";

            var    parser = MarkdownParserFactory.GetParser();
            string html   = parser.Parse(markdown);

            Console.WriteLine(html);

            Assert.IsTrue(html.Contains("fa-warning") && html.Contains("fa-gear"));
        }
コード例 #13
0
        /// <summary>
        /// Overrides the HTML rendering of content
        /// </summary>
        /// <param name="writer"></param>
        protected override void Render(HtmlTextWriter writer)
        {
            string markdown = null;

            if (!string.IsNullOrEmpty(Filename))
            {
                var file = Context.Server.MapPath(Filename);
                try
                {
                    markdown = File.ReadAllText(file);
                }
                catch
                {
                    return;
                }
            }
            else
            {
                if (string.IsNullOrEmpty(Text))
                {
                    return;
                }

                if (NormalizeWhiteSpace)
                {
                    markdown = NormalizeWhiteSpaceText(Text);
                }
                else
                {
                    markdown = Text;
                }
            }

            var parser = MarkdownParserFactory.GetParser(false, false);
            var html   = parser.Parse(markdown, SanitizeHtml);

            writer.Write(html);
        }
コード例 #14
0
        public void PragmaLinesTest()
        {
            string markdown = @"# Item 1
This is some Markdown text that is **bold**.

http://west-wind.com

## header 2 
This is ~~strike out text~~ and this is ~~too~~. This ~~is text \r\n that continues~~. 

* Item 1   
askdjlaks jdalksdjalskdj

asdkljaslkdjalskdjasd

<b>This is more text</b>";

            var    parser = MarkdownParserFactory.GetParser(usePragmaLines: true);
            string html   = parser.Parse(markdown);

            Console.WriteLine(html);

            Assert.IsTrue(html.Contains("pragma-line-13"));
        }
コード例 #15
0
        /// <summary>
        /// Takes the input collection and parses it into an HTML string. First row is considered to be the
        /// header of the table.
        /// </summary>
        /// <param name="tableData"></param>
        /// <returns></returns>
        public string ToTableHtml(TableData tableData = null)
        {
            if (tableData == null)
            {
                tableData = TableData;
            }

            if (tableData == null || tableData.Rows.Count < 1 && tableData.Headers.Count < 1)
            {
                return(string.Empty);
            }

            var mdParser   = MarkdownParserFactory.GetParser(usePragmaLines: false, forceLoad: true);
            var columnInfo = GetColumnInfo(tableData);

            StringBuilder sb = new StringBuilder();

            sb.Clear();

            sb.AppendLine("\n<table>");
            sb.AppendLine("<thead>");
            sb.AppendLine("\t<tr>");

            for (int i = 0; i < columnInfo.Count; i++)
            {
                var colInfo = columnInfo[i];

                var align = string.Empty;
                if (columnInfo[i].Justification == ColumnJustifications.Right)
                {
                    align = " style=\"text-align:right\"";
                }
                else if (columnInfo[i].Justification == ColumnJustifications.Center)
                {
                    align = " style=\"text-align:center\"";
                }

                sb.AppendLine($"\t\t<th{align}>{WebUtility.HtmlEncode(colInfo.Title.Trim(' ',':','\n','\r'))}</th>");
            }
            sb.AppendLine("\t</tr>");
            sb.AppendLine("</thead>");

            sb.AppendLine("<tbody>");
            foreach (var row in tableData.Rows)
            {
                sb.AppendLine("\t<tr>");
                for (int i = 0; i < columnInfo.Count; i++)
                {
                    var col = row[i];
                    if (string.IsNullOrEmpty(col))
                    {
                        col = string.Empty;
                    }
                    else
                    {
                        col = col.Replace("\n", "<br>")
                              .Replace("\r", "");
                    }


                    var align = string.Empty;
                    if (columnInfo[i].Justification == ColumnJustifications.Right)
                    {
                        align = " style=\"text-align: right\"";
                    }
                    else if (columnInfo[i].Justification == ColumnJustifications.Center)
                    {
                        align = " style=\"text-align: center\"";
                    }

                    var text = mdParser.Parse(col.Trim())
                               .Replace("<p>", "")
                               .Replace("</p>", "")
                               .Trim();
                    sb.AppendLine($"\t\t<td{align}>{text}</td>");
                }

                sb.AppendLine("\t</tr>");
            }

            sb.AppendLine("</tbody>");
            sb.AppendLine($"</table>{mmApp.NewLine}");

            return(sb.ToString());
        }
コード例 #16
0
        public void ShouldReturnTheDefaultMarkdownParserWhenUnkownParserNameGiven()
        {
            var parser = MarkdownParserFactory.GetParser(parserAddinId: "BogusParser");

            Assert.IsInstanceOfType(parser, typeof(MarkdownParserMarkdig));
        }
コード例 #17
0
        public void ShouldReturnTheDefaultParserWhenNoArgsGiven()
        {
            var parser = MarkdownParserFactory.GetParser();

            Assert.IsInstanceOfType(parser, typeof(MarkdownParserMarkdig));
        }