diff --git a/src/Testamina.Markdig.Benchmarks/Program.cs b/src/Testamina.Markdig.Benchmarks/Program.cs index 62b5a789..a406d340 100644 --- a/src/Testamina.Markdig.Benchmarks/Program.cs +++ b/src/Testamina.Markdig.Benchmarks/Program.cs @@ -28,11 +28,11 @@ namespace Testamina.Markdig.Benchmarks public void TestMarkdig() { //var reader = new StreamReader(File.Open("spec.md", FileMode.Open)); - Markdown.ConvertToHtml(text); + Markdown.Convert(text); //File.WriteAllText("spec.html", writer.ToString()); } - [Benchmark] + //[Benchmark] public void TestCommonMark() { ////var reader = new StreamReader(File.Open("spec.md", FileMode.Open)); @@ -73,7 +73,7 @@ namespace Testamina.Markdig.Benchmarks { var clock = Stopwatch.StartNew(); var program = new Program(); - for (int i = 0; i < 500; i++) + for (int i = 0; i < 1000; i++) { if (markdig) { diff --git a/src/Textamina.Markdig.Tests/TestParser.cs b/src/Textamina.Markdig.Tests/TestParser.cs index 023993d5..b76cdd8d 100644 --- a/src/Textamina.Markdig.Tests/TestParser.cs +++ b/src/Textamina.Markdig.Tests/TestParser.cs @@ -28,7 +28,7 @@ namespace Textamina.Markdig.Tests // var reader = new StringReader(@"> > toto tata //> titi toto //"); - var result = Markdown.ConvertToHtml(reader); + var result = Markdown.Convert(reader); Console.WriteLine(result); } @@ -38,7 +38,7 @@ namespace Textamina.Markdig.Tests MarkdownParser.Log = Console.Out; var reader = new StringReader(inputText); var output = new StringWriter(); - Markdown.ConvertToHtml(reader, output); + Markdown.Convert(reader, output); var result = Compact(output.ToString()); expectedOutputText = Compact(expectedOutputText); diff --git a/src/Textamina.Markdig.Tests/TestTableParser.cs b/src/Textamina.Markdig.Tests/TestTableParser.cs index e284ee10..cbb43284 100644 --- a/src/Textamina.Markdig.Tests/TestTableParser.cs +++ b/src/Textamina.Markdig.Tests/TestTableParser.cs @@ -22,7 +22,7 @@ namespace Textamina.Markdig.Tests //> titi toto //"); - var result = Markdown.ConvertToHtml(reader); + var result = Markdown.Convert(reader); Console.WriteLine(result); } } diff --git a/src/Textamina.Markdig/Markdown.cs b/src/Textamina.Markdig/Markdown.cs index 174cabae..61bcf713 100644 --- a/src/Textamina.Markdig/Markdown.cs +++ b/src/Textamina.Markdig/Markdown.cs @@ -8,34 +8,40 @@ namespace Textamina.Markdig { public class Markdown { - public static string ConvertToHtml(string markdown) + public static string Convert(string markdown) { if (markdown == null) throw new ArgumentNullException(nameof(markdown)); var reader = new StringReader(markdown); - var writer = new StringWriter(); - ConvertToHtml(reader, writer); - return writer.ToString(); + return Convert(reader)?.ToString() ?? string.Empty; } - public static string ConvertToHtml(StringReader reader) + public static object Convert(TextReader reader, MarkdownPipeline pipeline = null) { if (reader == null) throw new ArgumentNullException(nameof(reader)); - var writer = new StringWriter(); - ConvertToHtml(reader, writer); - return writer.ToString(); + pipeline = pipeline ?? new MarkdownPipeline(); + + if (pipeline.Renderer == null) + { + pipeline.Renderer = new HtmlMarkdownRenderer(new StringWriter()); + } + + var document = Parse(reader, pipeline); + return pipeline.Renderer.WriteDocument(document); } - public static void ConvertToHtml(TextReader reader, TextWriter writer, MarkdownPipeline pipeline = null) + public static void Convert(TextReader reader, TextWriter writer, MarkdownPipeline pipeline = null) { if (reader == null) throw new ArgumentNullException(nameof(reader)); if (writer == null) throw new ArgumentNullException(nameof(writer)); pipeline = pipeline ?? new MarkdownPipeline(); + if (!(pipeline.Renderer is HtmlMarkdownRenderer)) { pipeline.Renderer = new HtmlMarkdownRenderer(writer); } - Convert(reader, writer, pipeline); + var document = Parse(reader, pipeline); + pipeline.Renderer.WriteChildren(document); writer.Flush(); } @@ -44,10 +50,10 @@ namespace Textamina.Markdig return Parse(new StringReader(markdown), new MarkdownPipeline()); } - public static Document Parse(TextReader input, MarkdownPipeline pipeline) + public static Document Parse(TextReader input, MarkdownPipeline pipeline = null) { if (input == null) throw new ArgumentNullException(nameof(input)); - if (pipeline == null) throw new ArgumentNullException(nameof(pipeline)); + pipeline = pipeline ?? new MarkdownPipeline(); BlockParserState blockParserState; InlineParserState inlineParserState; @@ -56,16 +62,5 @@ namespace Textamina.Markdig var markdownParser = new MarkdownParser(input, blockParserState, inlineParserState); return markdownParser.Parse(); } - - public static void Convert(TextReader reader, TextWriter writer, MarkdownPipeline pipeline) - { - if (reader == null) throw new ArgumentNullException(nameof(reader)); - if (writer == null) throw new ArgumentNullException(nameof(writer)); - if (pipeline == null) throw new ArgumentNullException(nameof(pipeline)); - - var document = Parse(reader, pipeline); - pipeline.Renderer.WriteChildren(document); - writer.Flush(); - } } } \ No newline at end of file diff --git a/src/Textamina.Markdig/Renderers/HtmlMarkdownRenderer.cs b/src/Textamina.Markdig/Renderers/HtmlMarkdownRenderer.cs index 1637bfd7..a0152496 100644 --- a/src/Textamina.Markdig/Renderers/HtmlMarkdownRenderer.cs +++ b/src/Textamina.Markdig/Renderers/HtmlMarkdownRenderer.cs @@ -283,5 +283,11 @@ namespace Textamina.Markdig.Renderers } return this; } + + public override object WriteDocument(Document document) + { + WriteChildren(document); + return textWriter; + } } } \ No newline at end of file diff --git a/src/Textamina.Markdig/Renderers/MarkdownRenderer.cs b/src/Textamina.Markdig/Renderers/MarkdownRenderer.cs index a4059b88..4a275f14 100644 --- a/src/Textamina.Markdig/Renderers/MarkdownRenderer.cs +++ b/src/Textamina.Markdig/Renderers/MarkdownRenderer.cs @@ -19,6 +19,8 @@ namespace Textamina.Markdig.Renderers public List Renderers { get; } + public abstract object WriteDocument(Document document); + public void WriteChildren(ContainerBlock containerBlock) { if (containerBlock == null)