@@ -16,8 +16,8 @@ var block = {
16
16
code : / ^ ( { 4 } [ ^ \n ] + \n * ) + / ,
17
17
fences : noop ,
18
18
hr : / ^ { 0 , 3 } ( (?: - * ) { 3 , } | (?: _ * ) { 3 , } | (?: \* * ) { 3 , } ) (?: \n + | $ ) / ,
19
- // TODO REDOS: Replace ' *([^\n]+?) *' with dedicated parsing .
20
- heading : / ^ * ( # { 1 , 6 } ) * ( [ ^ \n ] + ? ) * (?: # + * ) ? (?: \n + | $ ) / ,
19
+ // cap[2] might be ' HEADING # ' and must be trimmed appropriately .
20
+ heading : / ^ * ( # { 1 , 6 } ) ( [ ^ \n ] * ) (?: \n + | $ ) / ,
21
21
nptable : noop ,
22
22
blockquote : / ^ ( { 0 , 3 } > ? ( p a r a g r a p h | [ ^ \n ] * ) (?: \n | $ ) ) + / ,
23
23
list : / ^ ( * ) ( b u l l ) [ \s \S ] + ?(?: h r | d e f | \n { 2 , } (? ! ) (? ! \1b u l l ) \n * | \s * $ ) / ,
@@ -94,8 +94,8 @@ block.normal = merge({}, block);
94
94
block . gfm = merge ( { } , block . normal , {
95
95
fences : / ^ * ( ` { 3 , } | ~ { 3 , } ) [ \. ] * ( \S + ) ? * \n ( [ \s \S ] * ?) \n ? * \1 * (?: \n + | $ ) / ,
96
96
paragraph : / ^ / ,
97
- // TODO REDOS: Replace ' *([^\n]+?) *' with dedicated parsing .
98
- heading : / ^ * ( # { 1 , 6 } ) + ( [ ^ \n ] + ? ) * (?: # + * ) ? (?: \n + | $ ) /
97
+ // cap[2] might be ' HEADING # ' and must be trimmed appropriately .
98
+ heading : / ^ * ( # { 1 , 6 } ) ( [ ^ \n ] + ) (?: \n + | $ ) /
99
99
} ) ;
100
100
101
101
block . gfm . paragraph = edit ( block . paragraph )
@@ -237,10 +237,18 @@ Lexer.prototype.token = function(src, top) {
237
237
// heading
238
238
if ( cap = this . rules . heading . exec ( src ) ) {
239
239
src = src . substring ( cap [ 0 ] . length ) ;
240
+ // cap[2] might be ' HEADING # '
241
+ item = cap [ 2 ] . trim ( ) ;
242
+ if ( item . slice ( - 1 ) === '#' ) {
243
+ // NB replace(/#+$/) is quadratic on mismatch because it's unanchored,
244
+ // so we protect with if-check to ensure it won't mismatch.
245
+ item = item . replace ( / # + $ / , '' ) ;
246
+ }
247
+ item = item . trim ( )
240
248
this . tokens . push ( {
241
249
type : 'heading' ,
242
250
depth : cap [ 1 ] . length ,
243
- text : cap [ 2 ]
251
+ text : item
244
252
} ) ;
245
253
continue ;
246
254
}
0 commit comments