@@ -509,7 +509,6 @@ var Tokenizer_1 = class Tokenizer {
509509 let raw = cap [ 0 ] ;
510510 const bull = cap [ 2 ] ;
511511 const isordered = bull . length > 1 ;
512- const isparen = bull [ bull . length - 1 ] === ')' ;
513512
514513 const list = {
515514 type : 'list' ,
@@ -526,17 +525,45 @@ var Tokenizer_1 = class Tokenizer {
526525 let next = false ,
527526 item ,
528527 space ,
529- b ,
528+ bcurr ,
529+ bnext ,
530530 addBack ,
531531 loose ,
532532 istask ,
533533 ischecked ;
534534
535- const l = itemMatch . length ;
535+ let l = itemMatch . length ;
536+ bcurr = this . rules . block . listItemStart . exec ( itemMatch [ 0 ] ) ;
536537 for ( let i = 0 ; i < l ; i ++ ) {
537538 item = itemMatch [ i ] ;
538539 raw = item ;
539540
541+ // Determine whether the next list item belongs here.
542+ // Backpedal if it does not belong in this list.
543+ if ( i !== l - 1 ) {
544+ bnext = this . rules . block . listItemStart . exec ( itemMatch [ i + 1 ] ) ;
545+
546+ if ( bnext [ 1 ] . length > bcurr [ 0 ] . length || bnext [ 1 ] . length > 3 ) {
547+ // nested list
548+ itemMatch . splice ( i , 2 , itemMatch [ i ] + '\n' + itemMatch [ i + 1 ] ) ;
549+ i -- ;
550+ l -- ;
551+ continue ;
552+ } else {
553+ if (
554+ // different bullet style
555+ ! this . options . pedantic || this . options . smartLists
556+ ? bnext [ 2 ] [ bnext [ 2 ] . length - 1 ] !== bull [ bull . length - 1 ]
557+ : isordered === ( bnext [ 2 ] . length === 1 )
558+ ) {
559+ addBack = itemMatch . slice ( i + 1 ) . join ( '\n' ) ;
560+ list . raw = list . raw . substring ( 0 , list . raw . length - addBack . length ) ;
561+ i = l - 1 ;
562+ }
563+ }
564+ bcurr = bnext ;
565+ }
566+
540567 // Remove the list item's bullet
541568 // so it is seen as the next token.
542569 space = item . length ;
@@ -551,18 +578,6 @@ var Tokenizer_1 = class Tokenizer {
551578 : item . replace ( / ^ { 1 , 4 } / gm, '' ) ;
552579 }
553580
554- // Determine whether the next list item belongs here.
555- // Backpedal if it does not belong in this list.
556- if ( i !== l - 1 ) {
557- b = this . rules . block . bullet . exec ( itemMatch [ i + 1 ] ) [ 0 ] ;
558- if ( isordered ? b . length === 1 || ( ! isparen && b [ b . length - 1 ] === ')' )
559- : ( b . length > 1 || ( this . options . smartLists && b !== bull ) ) ) {
560- addBack = itemMatch . slice ( i + 1 ) . join ( '\n' ) ;
561- list . raw = list . raw . substring ( 0 , list . raw . length - addBack . length ) ;
562- i = l - 1 ;
563- }
564- }
565-
566581 // Determine whether item is loose or not.
567582 // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
568583 // for discount behavior.
@@ -988,7 +1003,7 @@ const block = {
9881003 hr : / ^ { 0 , 3 } ( (?: - * ) { 3 , } | (?: _ * ) { 3 , } | (?: \* * ) { 3 , } ) (?: \n + | $ ) / ,
9891004 heading : / ^ { 0 , 3 } ( # { 1 , 6 } ) + ( [ ^ \n ] * ?) (?: + # + ) ? * (?: \n + | $ ) / ,
9901005 blockquote : / ^ ( { 0 , 3 } > ? ( p a r a g r a p h | [ ^ \n ] * ) (?: \n | $ ) ) + / ,
991- list : / ^ ( { 0 , 3 } ) ( b u l l ) [ \s \S ] + ?(?: h r | d e f | \n { 2 , } (? ! ) (? ! \1 b u l l ) \n * | \s * $ ) / ,
1006+ list : / ^ ( { 0 , 3 } ) ( b u l l ) [ \s \S ] + ?(?: h r | d e f | \n { 2 , } (? ! ) (? ! { 0 , 3 } b u l l ) \n * | \s * $ ) / ,
9921007 html : '^ {0,3}(?:' // optional indentation
9931008 + '<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1)
9941009 + '|comment[^\\n]*(\\n+|$)' // (2)
@@ -1017,11 +1032,15 @@ block.def = edit$1(block.def)
10171032 . getRegex ( ) ;
10181033
10191034block . bullet = / (?: [ * + - ] | \d { 1 , 9 } [ . ) ] ) / ;
1020- block . item = / ^ ( * ) ( b u l l ) ? [ ^ \n ] * (?: \n (? ! \1 b u l l ? ) [ ^ \n ] * ) * / ;
1035+ block . item = / ^ ( * ) ( b u l l ) ? [ ^ \n ] * (?: \n (? ! * b u l l ? ) [ ^ \n ] * ) * / ;
10211036block . item = edit$1 ( block . item , 'gm' )
10221037 . replace ( / b u l l / g, block . bullet )
10231038 . getRegex ( ) ;
10241039
1040+ block . listItemStart = edit$1 ( / ^ ( * ) ( b u l l ) / )
1041+ . replace ( 'bull' , block . bullet )
1042+ . getRegex ( ) ;
1043+
10251044block . list = edit$1 ( block . list )
10261045 . replace ( / b u l l / g, block . bullet )
10271046 . replace ( 'hr' , '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))' )
0 commit comments