diff --git a/commonmark/src/main/java/org/commonmark/internal/ListBlockParser.java b/commonmark/src/main/java/org/commonmark/internal/ListBlockParser.java index f160b10f..e6088c0a 100644 --- a/commonmark/src/main/java/org/commonmark/internal/ListBlockParser.java +++ b/commonmark/src/main/java/org/commonmark/internal/ListBlockParser.java @@ -211,7 +211,8 @@ public BlockStart tryStart(ParserState state, MatchedBlockParser matchedBlockPar } int markerIndex = state.getNextNonSpaceIndex(); int markerColumn = state.getColumn() + state.getIndent(); - boolean inParagraph = !matchedBlockParser.getParagraphLines().isEmpty(); + // A paragraph that only has link reference definitions so far is still open + boolean inParagraph = matched.getBlock() instanceof Paragraph; ListData listData = parseList(state.getLine().getContent(), markerIndex, markerColumn, inParagraph); if (listData == null) { diff --git a/commonmark/src/test/java/org/commonmark/test/SpecialInputTest.java b/commonmark/src/test/java/org/commonmark/test/SpecialInputTest.java index f8d03df9..59382b28 100644 --- a/commonmark/src/test/java/org/commonmark/test/SpecialInputTest.java +++ b/commonmark/src/test/java/org/commonmark/test/SpecialInputTest.java @@ -223,6 +223,20 @@ public void linkReferenceDefinitionWithUnbalancedParens() { "[foo]: a(b) \"t\"\n\n[foo]", "
\n"); } + @Test + public void listCanNotInterruptParagraphWithOnlyLinkReferenceDefinitions() { + // The paragraph is still open, so the same rules apply as for a paragraph with text: an + // ordered list must start with 1 and an empty list item can not interrupt it + assertRendering( + "[foo]: /url\n2. a\n\n[foo]", "2. a
\n\n"); + assertRendering("[foo]: /url\n-\n\n[foo]", "-
\n\n"); + assertRendering("[foo]: /url \"t\"\n2. a", "2. a
\n"); + assertRendering("> [foo]: /url\n> 2. a", "\n\n"); + // These can interrupt it + assertRendering("[foo]: /url\n1. a", "2. a
\n