@@ -18,8 +18,10 @@ const UNORDERED_LIST_REGEX = /^(\s*)[-*+]\s/
18
18
const CHECK_LIST_REGEX = / ^ ( \s * ) (?: - \s ) ? \s ? ( \[ ( \s | x ) ? \] ) \s / i
19
19
const HEADING_REGEX = / ^ ( # { 1 , 6 } ) \s /
20
20
const QUOTE_REGEX = / ^ > \s /
21
- const CODE_START_REGEX = / ^ [ \t ] * ` ` ` ( \w + ) ? /
22
- const CODE_END_REGEX = / [ \t ] * ` ` ` $ /
21
+ // Match start of ``` or escaped \`\`\` code blocks
22
+ const CODE_START_REGEX = / ^ [ \t ] * ( \\ ` \\ ` \\ ` | ` ` ` ) ( \w + ) ? /
23
+ // Match end of ``` or escaped \`\`\` code blocks
24
+ const CODE_END_REGEX = / [ \t ] * ( \\ ` \\ ` \\ ` | ` ` ` ) $ /
23
25
const CODE_SINGLE_LINE_REGEX = / ^ [ \t ] * ` ` ` [ ^ ` ] + (?: (?: ` { 1 , 2 } | ` { 4 , } ) [ ^ ` ] + ) * ` ` ` (?: [ ^ ` ] | $ ) /
24
26
const TABLE_ROW_REG_EXP = / ^ \| ( .+ ) \| \s ? $ /
25
27
const TABLE_ROW_DIVIDER_REG_EXP = / ^ ( \| ? : ? - * : ? ? ) + \| \s ? $ /
@@ -41,15 +43,15 @@ export function normalizeMarkdown(input: string, shouldMergeAdjacentLines = fals
41
43
continue
42
44
}
43
45
44
- if (
45
- ( CODE_START_REGEX . test ( line ) && ! inCodeBlock ) ||
46
- ( CODE_END_REGEX . test ( line ) && inCodeBlock )
47
- ) {
48
- inCodeBlock = ! inCodeBlock
46
+ // Toggle inCodeBlock state when encountering start or end of a code block
47
+ if ( CODE_START_REGEX . test ( line ) ) {
48
+ inCodeBlock = true
49
+ sanitizedLines . push ( line )
50
+ continue
49
51
}
50
52
51
- // Detect the start or end of a code block
52
- if ( CODE_START_REGEX . test ( line ) || CODE_END_REGEX . test ( line ) ) {
53
+ if ( CODE_END_REGEX . test ( line ) ) {
54
+ inCodeBlock = false
53
55
sanitizedLines . push ( line )
54
56
continue
55
57
}
0 commit comments