Skip to content

Commit

Permalink
fix: fix list item with blank first line (#3351)
Browse files Browse the repository at this point in the history
* fix: fix list item with blank first line

* move blankline
  • Loading branch information
UziTech committed Jul 4, 2024
1 parent b17ff8b commit d28e4c6
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 7 deletions.
15 changes: 8 additions & 7 deletions src/Tokenizer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,12 +260,12 @@ export class _Tokenizer {

// Get next list item
const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\t ][^\\n]*)?(?:\\n|$))`);
let raw = '';
let itemContents = '';
let endsWithBlankLine = false;
// Check if current bullet point can start a new List Item
while (src) {
let endEarly = false;
let raw = '';
let itemContents = '';
if (!(cap = itemRegex.exec(src))) {
break;
}
Expand All @@ -279,21 +279,22 @@ export class _Tokenizer {

let line = cap[2].split('\n', 1)[0].replace(/^\t+/, (t: string) => ' '.repeat(3 * t.length));
let nextLine = src.split('\n', 1)[0];
let blankLine = !line.trim();

let indent = 0;
if (this.options.pedantic) {
indent = 2;
itemContents = line.trimStart();
} else if (blankLine) {
indent = cap[1].length + 1;
} else {
indent = cap[2].search(/[^ ]/); // Find first non-space char
indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent
itemContents = line.slice(indent);
indent += cap[1].length;
}

let blankLine = false;

if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line
if (blankLine && /^ *$/.test(nextLine)) { // Items begin with at most one blank line
raw += nextLine + '\n';
src = src.substring(nextLine.length + 1);
endEarly = true;
Expand Down Expand Up @@ -404,8 +405,8 @@ export class _Tokenizer {
}

// Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic
list.items[list.items.length - 1].raw = raw.trimEnd();
(list.items[list.items.length - 1]).text = itemContents.trimEnd();
list.items[list.items.length - 1].raw = list.items[list.items.length - 1].raw.trimEnd();
list.items[list.items.length - 1].text = list.items[list.items.length - 1].text.trimEnd();
list.raw = list.raw.trimEnd();

// Item child tokens handled here at end because we needed to have the final item to trim it first
Expand Down
8 changes: 8 additions & 0 deletions test/specs/new/list_with_line_break.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<ol>
<li></li>
</ol>
<p>Monday
2.
Tuesday
3.
Wednesday</p>
6 changes: 6 additions & 0 deletions test/specs/new/list_with_line_break.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
1.
Monday
2.
Tuesday
3.
Wednesday

0 comments on commit d28e4c6

Please sign in to comment.