public void RenderHeadings() { // arrange var markdown = new StringBuilder(); markdown.AppendLine("# heading 1"); markdown.AppendLine("## heading 2"); markdown.AppendLine("### heading 3"); markdown.AppendLine("Heading"); markdown.AppendLine("======="); markdown.AppendLine("Heading"); markdown.AppendLine("-------"); var expectedHtml = new StringBuilder(); expectedHtml.Append("<h1>heading 1</h1>"); expectedHtml.Append("<h2>heading 2</h2>"); expectedHtml.Append("<h3>heading 3</h3>"); expectedHtml.Append("<h1>Heading</h1>"); expectedHtml.Append("<h2>Heading</h2>"); var parser = new MarkdownParser(); var renderer = new MarkdownHtmlRenderer(); // act Document document = parser.Parse(markdown.ToString()); string html = renderer.Render(document).Replace("\r\n", ""); // assert html.ShouldBeEquivalentTo(expectedHtml.ToString()); }
public void RenderCodeblocksWithSyntaxName() { // arrange var markdown = new StringBuilder(); markdown.AppendLine("```cs"); markdown.AppendLine("string name = \"test\";"); markdown.AppendLine("```"); var expectedHtml = new StringBuilder(); // it looks like the syntax name is prefixed with 'lang' by convention expectedHtml.Append("<pre><code class=\"lang-cs\">"); expectedHtml.Append("string name = "test";\n"); expectedHtml.Append("</code></pre>"); var parser = new MarkdownParser(); var renderer = new MarkdownHtmlRenderer(); // act var document = parser.Parse(markdown.ToString()); string html = renderer.Render(document); // assert html.ShouldBeEquivalentTo(expectedHtml.ToString()); }
public override Article Parse(string fileName, string content) { var parser = new MarkdownParser(); string t = RemoveMetaData(content); var document = parser.Parse(t); var renderer = new MarkdownHtmlRenderer(); var article = new Article { FullFileName = fileName, Content = renderer.Render(document), MetaData = ParseMetaData(content) }; return article; }
private static void Main(string[] args) { if (args.Length != 1) { ShowHelp(); } var fileName = args[0]; if (!File.Exists(fileName)) { ShowHelp(); return; } var content = File.ReadAllText(fileName); var parser = new MarkdownParser(); var renderer = new MarkdownHtmlRenderer(); try { Console.WriteLine("Starting parsing of {0}", fileName); var stopwatch = Stopwatch.StartNew(); var document = parser.Parse(content); stopwatch.Stop(); Console.WriteLine("Finished parsing in {0} seconds", stopwatch.Elapsed.TotalSeconds); stopwatch.Reset(); stopwatch.Start(); var html = renderer.Render(document); stopwatch.Stop(); Console.WriteLine("Finished rendering in {0} seconds", stopwatch.Elapsed.TotalSeconds); var outputFile = Path.GetFileNameWithoutExtension(fileName) + ".html"; Console.WriteLine("Writing output to {0}", outputFile); File.WriteAllText(outputFile, html); } catch (Exception x) { Console.WriteLine(x.ToString()); } Console.ReadKey(); }
public void RenderCodeblocks() { // arrange var markdown = new StringBuilder(); markdown.Append("```\n"); markdown.Append("string name = \"test\";\n"); markdown.Append("```\n"); var expectedHtml = new StringBuilder(); expectedHtml.Append("<pre><code>"); expectedHtml.Append("string name = "test";\n"); expectedHtml.Append("</code></pre>"); var parser = new MarkdownParser(); var renderer = new MarkdownHtmlRenderer(); // act Document document = parser.Parse(markdown.ToString()); string html = renderer.Render(document).Replace("\r\n", ""); // assert html.ShouldBeEquivalentTo(expectedHtml.ToString()); }
public void RenderOrderedLists() { // arrange var markdown = new StringBuilder(); markdown.AppendLine("1. item"); markdown.AppendLine("2. item"); markdown.AppendLine(" this is item two"); markdown.AppendLine("3. item"); var expectedHtml = new StringBuilder(); expectedHtml.Append("<ol>"); expectedHtml.Append("<li><p>item</p></li>"); expectedHtml.Append("<li><p>item this is item two</p></li>"); expectedHtml.Append("<li><p>item</p></li>"); expectedHtml.Append("</ol>"); var parser = new MarkdownParser(); var renderer = new MarkdownHtmlRenderer(); // act Document document = parser.Parse(markdown.ToString()); string html = renderer.Render(document); // assert html.ShouldBeEquivalentTo(expectedHtml.ToString()); }
public void NoInlineHtmlPreventsInlineHtml() { var markdown = new StringBuilder(); markdown.AppendLine("Just a paragraph <img src=x />"); markdown.AppendLine(); markdown.AppendLine("* item 1 <img src=x />"); markdown.AppendLine("* item 2 <img src=x />"); markdown.AppendLine(); markdown.AppendLine("1. item 1 <img src=x />"); markdown.AppendLine("1. item 2 <img src=x />"); var parser = new MarkdownParser(); var renderer = new MarkdownHtmlRenderer(); // act Document document = parser.Parse(markdown.ToString()); var expectedHtml = new StringBuilder(); expectedHtml.Append("<p>").Append("Just a paragraph <img src=x />").Append("</p>"); expectedHtml.Append("<ul>"); expectedHtml.Append("<li>").Append("<p>").Append("item 1 <img src=x />").Append("</p>").Append("</li>"); expectedHtml.Append("<li>").Append("<p>").Append("item 2 <img src=x />").Append("</p>").Append("</li>"); expectedHtml.Append("</ul>"); expectedHtml.Append("<ol>"); expectedHtml.Append("<li>").Append("<p>").Append("item 1 <img src=x />").Append("</p>").Append("</li>"); expectedHtml.Append("<li>").Append("<p>").Append("item 2 <img src=x />").Append("</p>").Append("</li>"); expectedHtml.Append("</ol>"); string html = renderer.Render(document).Replace("\r\n", ""); // assert html.ShouldBeEquivalentTo(expectedHtml.ToString()); expectedHtml = new StringBuilder(); expectedHtml.Append("<p>").Append("Just a paragraph <img src=x />").Append("</p>"); expectedHtml.Append("<ul>"); expectedHtml.Append("<li>").Append("<p>").Append("item 1 <img src=x />").Append("</p>").Append("</li>"); expectedHtml.Append("<li>").Append("<p>").Append("item 2 <img src=x />").Append("</p>").Append("</li>"); expectedHtml.Append("</ul>"); expectedHtml.Append("<ol>"); expectedHtml.Append("<li>").Append("<p>").Append("item 1 <img src=x />").Append("</p>").Append("</li>"); expectedHtml.Append("<li>").Append("<p>").Append("item 2 <img src=x />").Append("</p>").Append("</li>"); expectedHtml.Append("</ol>"); var noInlineRenderer = new MarkdownHtmlRenderer(HtmlRendererOptions.NoInlineHtml); document = parser.Parse(markdown.ToString()); string noInlineHtml = noInlineRenderer.Render(document).Replace("\r\n", ""); // assert noInlineHtml.ShouldBeEquivalentTo(expectedHtml.ToString()); }
public void ThrowExceptionOnRenderingError() { // arrange var markdown = new StringBuilder(); markdown.AppendLine("Title"); markdown.AppendLine("======"); markdown.AppendLine(); markdown.Append("1234567890"); var parser = new MarkdownParser(); var renderer = new MarkdownHtmlRenderer(); renderer.Options.Renderers.Insert( 0, new ThrowErrorOnBlockRenderer(typeof(Paragraph))); // act Document document = parser.Parse(markdown.ToString()); var exception = Assert.Throws<RenderingException>( ()=>renderer.Render(document)); // assert exception.Block.Should().BeOfType<Paragraph>(); exception.Renderer.Should().BeOfType<ThrowErrorOnBlockRenderer>(); exception.InnerException.Should().BeOfType<ArgumentNullException>(); }
public void RenderEmpty() { // arrange var markdown = new StringBuilder(); var expectedHtml = new StringBuilder(); var parser = new MarkdownParser(); var renderer = new MarkdownHtmlRenderer(); // act Document document = parser.Parse(markdown.ToString()); string html = renderer.Render(document); // assert html.ShouldBeEquivalentTo(expectedHtml.ToString()); }
public void RenderParagraphWithOnlyStrongEmphasis() { // arrange var markdown = new StringBuilder(); markdown.Append("**text**"); var expectedHtml = new StringBuilder(); expectedHtml.Append("<p>"); expectedHtml.Append("<strong>text</strong>"); expectedHtml.Append("</p>"); var parser = new MarkdownParser(); var renderer = new MarkdownHtmlRenderer(); // act Document document = parser.Parse(markdown.ToString()); string html = renderer.Render(document).Replace("\r\n", ""); // assert html.ShouldBeEquivalentTo(expectedHtml.ToString()); }
public void FixParagraphDisappears() { // arrange var markdown = new StringBuilder(); markdown.Append("#### Paragraphs\n"); markdown.Append("\n"); markdown.Append("Paragraphs are lines of text followed by empty line.\n"); markdown.Append("\n"); markdown.Append("Second paragraph\n"); var expectedHtml = new StringBuilder(); expectedHtml.Append("<h4>Paragraphs</h4>"); expectedHtml.Append("<p>"); expectedHtml.Append("Paragraphs are lines of text followed by empty line."); expectedHtml.Append("</p>"); expectedHtml.Append("<p>"); expectedHtml.Append("Second paragraph"); expectedHtml.Append("</p>"); var parser = new MarkdownParser(); var renderer = new MarkdownHtmlRenderer(); // act Document document = parser.Parse(markdown.ToString()); string html = renderer.Render(document).Replace("\r\n", ""); // assert html.ShouldBeEquivalentTo(expectedHtml.ToString()); }
public void RenderParagraph() { // arrange var markdown = new StringBuilder(); markdown.AppendLine("some text here"); markdown.AppendLine("a link here [here](http://www.123.com)"); markdown.AppendLine("a inline image here ![alt text](/images/sample.jpg)"); markdown.AppendLine("emphasis of *text* or strong emphasis of **text**"); markdown.AppendLine("inline code block `var test = 123;` should be supported"); var expectedHtml = new StringBuilder(); expectedHtml.Append("<p>"); expectedHtml.Append("some text here "); expectedHtml.Append("a link here <a href=\"http://www.123.com\">here</a> "); expectedHtml.Append("a inline image here <img src=\"/images/sample.jpg\" alt=\"alt text\" /> "); expectedHtml.Append("emphasis of <em>text</em> or strong emphasis of <strong>text</strong> "); expectedHtml.Append("inline code block <code>var test = 123;</code> should be supported"); expectedHtml.Append("</p>"); var parser = new MarkdownParser(); var renderer = new MarkdownHtmlRenderer(); // act Document document = parser.Parse(markdown.ToString()); string html = renderer.Render(document).Replace("\r\n", ""); // assert html.ShouldBeEquivalentTo(expectedHtml.ToString()); }