File tree Expand file tree Collapse file tree 2 files changed +15
-7
lines changed Expand file tree Collapse file tree 2 files changed +15
-7
lines changed Original file line number Diff line number Diff line change @@ -320,12 +320,10 @@ export class _Lexer<ParserOutput = string, RendererOutput = string> {
320320 }
321321
322322 // Mask out other blocks
323+ let offset ;
323324 while ( ( match = this . tokenizer . rules . inline . blockSkip . exec ( maskedSrc ) ) != null ) {
324- if ( match [ 2 ] ) {
325- maskedSrc = maskedSrc . slice ( 0 , match . indices ! [ 2 ] [ 0 ] ) + '[' + 'a' . repeat ( match [ 2 ] . length - 2 ) + ']' + maskedSrc . slice ( this . tokenizer . rules . inline . blockSkip . lastIndex ) ;
326- } else {
327- maskedSrc = maskedSrc . slice ( 0 , match . index ) + '[' + 'a' . repeat ( match [ 0 ] . length - 2 ) + ']' + maskedSrc . slice ( this . tokenizer . rules . inline . blockSkip . lastIndex ) ;
328- }
325+ offset = match [ 2 ] ? match [ 2 ] . length : 0 ;
326+ maskedSrc = maskedSrc . slice ( 0 , match . index + offset ) + '[' + 'a' . repeat ( match [ 0 ] . length - offset - 2 ) + ']' + maskedSrc . slice ( this . tokenizer . rules . inline . blockSkip . lastIndex ) ;
329327 }
330328
331329 // Mask out blocks from extensions
Original file line number Diff line number Diff line change @@ -16,6 +16,15 @@ function edit(regex: string | RegExp, opt = '') {
1616 return obj ;
1717}
1818
19+ const supportsLookbehind = ( ( ) => {
20+ try {
21+ // eslint-disable-next-line prefer-regex-literals
22+ return ! ! new RegExp ( '(?<=1)(?<!1)' ) ;
23+ } catch {
24+ return false ;
25+ }
26+ } ) ( ) ;
27+
1928export const other = {
2029 codeRemoveIndent : / ^ (?: { 1 , 4 } | { 0 , 3 } \t ) / gm,
2130 outputLinkReplace : / \\ ( [ \[ \] ] ) / g,
@@ -267,9 +276,10 @@ const _punctuationOrSpaceGfmStrongEm = /(?!~)[\s\p{P}\p{S}]/u;
267276const _notPunctuationOrSpaceGfmStrongEm = / (?: [ ^ \s \p{ P} \p{ S} ] | ~ ) / u;
268277
269278// sequences em should skip over [title](link), `code`, <html>
270- const blockSkip = edit ( / l i n k | c o d e | h t m l / , 'dg ' )
279+ const blockSkip = edit ( / l i n k | p r e c o d e - c o d e | h t m l / , 'g ' )
271280 . replace ( 'link' , / \[ (?: [ ^ \[ \] ` ] | (?< a > ` + ) [ ^ ` ] + \k<a > (? ! ` ) ) * ?\] \( (?: \\ [ \s \S ] | [ ^ \\ \( \) ] | \( (?: \\ [ \s \S ] | [ ^ \\ \( \) ] ) * \) ) * \) / )
272- . replace ( 'code' , / (?: ^ ^ | [ ^ ` ] ) ( (?< b > ` + ) [ ^ ` ] + \k<b > (? ! ` ) ) / )
281+ . replace ( 'precode-' , supportsLookbehind ? '(?<!`)()' : '(^^|[^`])' )
282+ . replace ( 'code' , / (?< b > ` + ) [ ^ ` ] + \k<b > (? ! ` ) / )
273283 . replace ( 'html' , / < (? ! ) [ ^ < > ] * ?> / )
274284 . getRegex ( ) ;
275285
You can’t perform that action at this time.
0 commit comments