File tree Expand file tree Collapse file tree 4 files changed +67
-19
lines changed Expand file tree Collapse file tree 4 files changed +67
-19
lines changed Original file line number Diff line number Diff line change @@ -315,25 +315,19 @@ export class Tokenizer {
315
315
for ( i = 0 ; i < l ; i ++ ) {
316
316
this . lexer . state . top = false ;
317
317
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
- }
330
318
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 ) ) ;
333
323
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 ++ ) {
337
331
list . items [ i ] . loose = true ;
338
332
}
339
333
}
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
605
605
loose : true ,
606
606
items : [
607
607
jasmine . objectContaining ( {
608
- raw : '- item 1\n\n'
608
+ raw : '- item 1\n\n' ,
609
+ loose : true
609
610
} ) ,
610
611
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
612
651
} )
613
652
]
614
653
} )
@@ -634,6 +673,7 @@ paragraph
634
673
items : [
635
674
jasmine . objectContaining ( {
636
675
raw : '- item 1\n - item 2' ,
676
+ loose : false ,
637
677
tokens : jasmine . arrayContaining ( [
638
678
jasmine . objectContaining ( {
639
679
raw : 'item 1\n'
You can’t perform that action at this time.
0 commit comments