-
Notifications
You must be signed in to change notification settings - Fork 292
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Wrong SourceSpan with lazy continuation lines #337
Comments
Yeah, this is a bug with lazy continuation lines, thanks for reporting. I'm planning to look into it before the next release, but if you want to help speed things up you could write a few test cases here: commonmark-java/commonmark/src/test/java/org/commonmark/test/SourceSpansTest.java Line 14 in 6bebfe2
|
Hi Robin, thank you for your answer. Please found the test cases. // From https://spec.commonmark.org/0.31.2/#example-250
// Wrong source span for the inner block quote for the second line.
Node document = PARSER.parse("> > > foo\nbar\n");
BlockQuote blockQuote1 = (BlockQuote) document.getLastChild();
assertEquals(List.of(SourceSpan.of(0, 0, 9), SourceSpan.of(1, 0, 3)), blockQuote1.getSourceSpans());
BlockQuote blockQuote2 = (BlockQuote) blockQuote1.getLastChild();
assertEquals(List.of(SourceSpan.of(0, 2, 7), SourceSpan.of(1, 0, 3)), blockQuote2.getSourceSpans());
BlockQuote blockQuote3 = (BlockQuote) blockQuote2.getLastChild();
assertEquals(List.of(SourceSpan.of(0, 4, 5), SourceSpan.of(1, 0, 3)), blockQuote3.getSourceSpans());
Paragraph paragraph = (Paragraph) blockQuote3.getLastChild();
assertEquals(List.of(SourceSpan.of(0, 6, 3), SourceSpan.of(1, 0, 3)), paragraph.getSourceSpans()); // Adding one character to the last line remove blockQuote3 source for the second line
Node document = PARSER.parse("> > > foo\nbars\n");
BlockQuote blockQuote1 = (BlockQuote) document.getLastChild();
assertEquals(List.of(SourceSpan.of(0, 0, 9), SourceSpan.of(1, 0, 4)), blockQuote1.getSourceSpans());
BlockQuote blockQuote2 = (BlockQuote) blockQuote1.getLastChild();
assertEquals(List.of(SourceSpan.of(0, 2, 7), SourceSpan.of(1, 0, 4)), blockQuote2.getSourceSpans());
BlockQuote blockQuote3 = (BlockQuote) blockQuote2.getLastChild();
assertEquals(List.of(SourceSpan.of(0, 4, 5), SourceSpan.of(1, 0, 4)), blockQuote3.getSourceSpans());
Paragraph paragraph = (Paragraph) blockQuote3.getLastChild();
assertEquals(List.of(SourceSpan.of(0, 6, 3), SourceSpan.of(1, 0, 4)), paragraph.getSourceSpans()); // From https://spec.commonmark.org/0.31.2/#example-292
Node document = PARSER.parse("> 1. > Blockquote\ncontinued here.");
BlockQuote blockQuote1 = (BlockQuote) document.getLastChild();
assertEquals(List.of(SourceSpan.of(0, 0, 17), SourceSpan.of(1, 0, 15)), blockQuote1.getSourceSpans());
OrderedList orderedList = (OrderedList) blockQuote1.getLastChild();
assertEquals(List.of(SourceSpan.of(0, 2, 15), SourceSpan.of(1, 0, 15)), orderedList.getSourceSpans());
ListItem listItem = (ListItem) orderedList.getLastChild();
assertEquals(List.of(SourceSpan.of(0, 2, 15), SourceSpan.of(1, 0, 15)), listItem.getSourceSpans());
BlockQuote blockQuote2 = (BlockQuote) listItem.getLastChild();
assertEquals(List.of(SourceSpan.of(0, 5, 12), SourceSpan.of(1, 0, 15)), blockQuote2.getSourceSpans());
Paragraph paragraph = (Paragraph) blockQuote2.getLastChild();
assertEquals(List.of(SourceSpan.of(0, 7, 10), SourceSpan.of(1, 0, 15)), paragraph.getSourceSpans()); |
Thanks for these! I've raised a fix for it here: #339 |
Thank you, @robinst ! |
This has been released in 0.23.0, see full changelog here: https://github.com/commonmark/commonmark-java/blob/main/CHANGELOG.md#0230---2024-09-16 |
Hi !
I'm using
commonmark-java
to highlight delimiters in a RichTextFX editor, and using SourceSpan to compute positions.I have an issue with 2 examples given by commonmark specification.
Example 292
Actual behavior (printing SourceSpan in visitChildren)
I don't understand sourceSpans or the second line. It seems to me that BlockQuote/ListItem/OrderedList should start at column 0 for line 1.
Example 250
I don't understand sourceSpan for the 3 BlockQuotes, some of them have negative length. It seems to me that all BlockQuotes should start at column 0 for line 1.
And If I add a character after bar
In this case, I lose the deepest BlockQuote sourceSpan for line 1
Thank you for your help.
The text was updated successfully, but these errors were encountered: