diff --git a/src/Markdig.Tests/TestNormalize.cs b/src/Markdig.Tests/TestNormalize.cs index 3622e6c4..c33954d5 100644 --- a/src/Markdig.Tests/TestNormalize.cs +++ b/src/Markdig.Tests/TestNormalize.cs @@ -396,6 +396,21 @@ This is a last line"; AssertNormalizeNoTrim(input); } + [Test] + public void TaskLists() + { + AssertNormalizeNoTrim("- [X] This is done"); + AssertNormalizeNoTrim("- [x] This is done", + "- [X] This is done"); + AssertNormalizeNoTrim("- [ ] This is not done"); + + // ignore + AssertNormalizeNoTrim("[x] This is not a task list"); + AssertNormalizeNoTrim("[ ] This is not a task list"); + } + + + private static void AssertSyntax(string expected, MarkdownObject syntax) { var writer = new StringWriter(); @@ -425,7 +440,11 @@ This is a last line"; input = NormText(input, trim); expected = NormText(expected, trim); - var result = Markdown.Normalize(input, options); + var pipeline = new MarkdownPipelineBuilder() + .UseTaskLists() + .Build(); + + var result = Markdown.Normalize(input, options, pipeline: pipeline); result = NormText(result, trim); Console.WriteLine("```````````````````Source"); diff --git a/src/Markdig/Extensions/TaskLists/NormalizeTaskListRenderer.cs b/src/Markdig/Extensions/TaskLists/NormalizeTaskListRenderer.cs new file mode 100644 index 00000000..73b757ff --- /dev/null +++ b/src/Markdig/Extensions/TaskLists/NormalizeTaskListRenderer.cs @@ -0,0 +1,14 @@ +using Markdig.Renderers.Normalize; + +namespace Markdig.Extensions.TaskLists +{ + public class NormalizeTaskListRenderer : NormalizeObjectRenderer + { + protected override void Write(NormalizeRenderer renderer, TaskList obj) + { + renderer.Write("["); + renderer.Write(obj.Checked ? "X" : " "); + renderer.Write("]"); + } + } +} diff --git a/src/Markdig/Extensions/TaskLists/TaskListExtension.cs b/src/Markdig/Extensions/TaskLists/TaskListExtension.cs index 3d770e49..caf81934 100644 --- a/src/Markdig/Extensions/TaskLists/TaskListExtension.cs +++ b/src/Markdig/Extensions/TaskLists/TaskListExtension.cs @@ -1,9 +1,10 @@ -// Copyright (c) Alexandre Mutel. All rights reserved. +// Copyright (c) Alexandre Mutel. All rights reserved. // This file is licensed under the BSD-Clause 2 license. // See the license.txt file in the project root for more information. using Markdig.Parsers.Inlines; using Markdig.Renderers; +using Markdig.Renderers.Normalize; namespace Markdig.Extensions.TaskLists { @@ -28,6 +29,12 @@ namespace Markdig.Extensions.TaskLists { htmlRenderer.ObjectRenderers.AddIfNotAlready(); } + + var normalizeRenderer = renderer as NormalizeRenderer; + if (normalizeRenderer != null) + { + normalizeRenderer.ObjectRenderers.AddIfNotAlready(); + } } } } \ No newline at end of file