From ccb7e8edfaa3f7a8eb80f6519dafa5d09c9dadcc Mon Sep 17 00:00:00 2001 From: Ham Vocke Date: Fri, 28 Aug 2020 13:18:08 +0200 Subject: [PATCH] add failing test, partial fix for setext headings in blockquotes attempts to fix #465 --- .../Specs/CommonMark.generated.cs | 25 ++++++++++++++++++- src/Markdig.Tests/Specs/CommonMark.md | 14 +++++++++++ src/Markdig/Parsers/ParagraphBlockParser.cs | 2 +- src/Markdig/Parsers/ThematicBreakParser.cs | 2 +- 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/Markdig.Tests/Specs/CommonMark.generated.cs b/src/Markdig.Tests/Specs/CommonMark.generated.cs index a6a3a2ec..d23cc6a2 100644 --- a/src/Markdig.Tests/Specs/CommonMark.generated.cs +++ b/src/Markdig.Tests/Specs/CommonMark.generated.cs @@ -1,4 +1,4 @@ -// Generated: 2019-04-12 15:26:42 +// Generated: 2020-08-28 11:05:04 // -------------------------------- // CommonMark v. 0.29 @@ -14925,6 +14925,29 @@ namespace Markdig.Tests.Specs.CommonMarkV_0_29 Console.WriteLine("Example 649\nSection Inlines / Textual content\n"); TestParser.TestSpec("Multiple spaces", "

Multiple spaces

", ""); } + + // Within a blockquote a setext heading takes precedence + // over a thematic break: + [Test] + public void InlinesTextualContent_Example650() + { + // Example 650 + // Section: Inlines / Textual content + // + // The following Markdown: + // > Foo + // > --- + // > bar + // + // Should be rendered as: + //
+ //

Foo

+ //

bar

+ //
+ + Console.WriteLine("Example 650\nSection Inlines / Textual content\n"); + TestParser.TestSpec("> Foo\n> ---\n> bar", "
\n

Foo

\n

bar

\n
", ""); + } // // // # Appendix: A parsing strategy diff --git a/src/Markdig.Tests/Specs/CommonMark.md b/src/Markdig.Tests/Specs/CommonMark.md index e828e314..d393ae51 100644 --- a/src/Markdig.Tests/Specs/CommonMark.md +++ b/src/Markdig.Tests/Specs/CommonMark.md @@ -9368,6 +9368,20 @@ Multiple spaces

Multiple spaces

```````````````````````````````` +Within a blockquote a setext heading takes precedence +over a thematic break: + +```````````````````````````````` example +> Foo +> --- +> bar +. +
+

Foo

+

bar

+
+```````````````````````````````` + diff --git a/src/Markdig/Parsers/ParagraphBlockParser.cs b/src/Markdig/Parsers/ParagraphBlockParser.cs index 0c3ddcdc..d5f23c6a 100644 --- a/src/Markdig/Parsers/ParagraphBlockParser.cs +++ b/src/Markdig/Parsers/ParagraphBlockParser.cs @@ -38,7 +38,7 @@ namespace Markdig.Parsers return BlockState.BreakDiscard; } - if (ParseSetexHeadings && !processor.IsCodeIndent && !(block.Parent is QuoteBlock)) + if (ParseSetexHeadings && !processor.IsCodeIndent) { return TryParseSetexHeading(processor, block); } diff --git a/src/Markdig/Parsers/ThematicBreakParser.cs b/src/Markdig/Parsers/ThematicBreakParser.cs index 2457f322..f435fdd8 100644 --- a/src/Markdig/Parsers/ThematicBreakParser.cs +++ b/src/Markdig/Parsers/ThematicBreakParser.cs @@ -74,7 +74,7 @@ namespace Markdig.Parsers if (isSetexHeading) { var parent = previousParagraph.Parent; - if (parent is QuoteBlock || (parent is ListItemBlock && previousParagraph.Column != processor.Column)) + if ((parent is QuoteBlock && processor.CurrentLineStartPosition > parent.Span.End) || (parent is ListItemBlock && previousParagraph.Column != processor.Column)) { isSetexHeading = false; }