File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -315,25 +315,19 @@ export class Tokenizer {
315315 for ( i = 0 ; i < l ; i ++ ) {
316316 this . lexer . state . top = false ;
317317 list . items [ i ] . tokens = this . lexer . blockTokens ( list . items [ i ] . text , [ ] ) ;
318- const spacers = list . items [ i ] . tokens . filter ( t => t . type === 'space' ) ;
319- const hasMultipleLineBreaks = spacers . every ( t => {
320- const chars = t . raw . split ( '' ) ;
321- let lineBreaks = 0 ;
322- for ( const char of chars ) {
323- if ( char === '\n' ) {
324- lineBreaks += 1 ;
325- }
326- if ( lineBreaks > 1 ) {
327- return true ;
328- }
329- }
330318
331- return false ;
332- } ) ;
319+ if ( ! list . loose ) {
320+ // Check if list should be loose
321+ const spacers = list . items [ i ] . tokens . filter ( t => t . type === 'space' ) ;
322+ const hasMultipleLineBreaks = spacers . length > 0 && spacers . some ( t => / \n .* \n / . test ( t . raw ) ) ;
333323
334- if ( ! list . loose && spacers . length && hasMultipleLineBreaks ) {
335- // Having a single line break doesn't mean a list is loose. A single line break is terminating the last list item
336- list . loose = true ;
324+ list . loose = hasMultipleLineBreaks ;
325+ }
326+ }
327+
328+ // Set all items to loose if list is loose
329+ if ( list . loose ) {
330+ for ( i = 0 ; i < l ; i ++ ) {
337331 list . items [ i ] . loose = true ;
338332 }
339333 }
Original file line number Diff line number Diff line change 1+ < ul >
2+ < li >
3+ < p > item 1</ p >
4+ </ li >
5+ < li >
6+ < p > item 2</ p >
7+ < p > still item 2</ p >
8+ </ li >
9+ </ ul >
Original file line number Diff line number Diff line change 1+ - item 1
2+ -
3+ item 2
4+
5+ still item 2
Original file line number Diff line number Diff line change @@ -605,10 +605,49 @@ paragraph
605605 loose : true ,
606606 items : [
607607 jasmine . objectContaining ( {
608- raw : '- item 1\n\n'
608+ raw : '- item 1\n\n' ,
609+ loose : true
609610 } ) ,
610611 jasmine . objectContaining ( {
611- raw : '- item 2'
612+ raw : '- item 2' ,
613+ loose : true
614+ } )
615+ ]
616+ } )
617+ ] )
618+ } ) ;
619+ } ) ;
620+
621+ it ( 'end loose' , ( ) => {
622+ expectTokens ( {
623+ md : `
624+ - item 1
625+ - item 2
626+
627+ item 2a
628+ - item 3
629+ ` ,
630+ tokens : jasmine . arrayContaining ( [
631+ jasmine . objectContaining ( {
632+ type : 'space' ,
633+ raw : '\n'
634+ } ) ,
635+ jasmine . objectContaining ( {
636+ type : 'list' ,
637+ raw : '- item 1\n- item 2\n\n item 2a\n- item 3\n' ,
638+ loose : true ,
639+ items : [
640+ jasmine . objectContaining ( {
641+ raw : '- item 1\n' ,
642+ loose : true
643+ } ) ,
644+ jasmine . objectContaining ( {
645+ raw : '- item 2\n\n item 2a\n' ,
646+ loose : true
647+ } ) ,
648+ jasmine . objectContaining ( {
649+ raw : '- item 3' ,
650+ loose : true
612651 } )
613652 ]
614653 } )
@@ -634,6 +673,7 @@ paragraph
634673 items : [
635674 jasmine . objectContaining ( {
636675 raw : '- item 1\n - item 2' ,
676+ loose : false ,
637677 tokens : jasmine . arrayContaining ( [
638678 jasmine . objectContaining ( {
639679 raw : 'item 1\n'
You can’t perform that action at this time.
0 commit comments