|
1 | 1 | const noopTest = { exec: () => null } as unknown as RegExp; |
2 | 2 |
|
| 3 | +function cachedIndentRegex(createRegex: (indent: number) => RegExp) { |
| 4 | + const cache: RegExp[] = []; |
| 5 | + return (indent: number) => { |
| 6 | + const cacheIndex = Math.max(0, Math.min(3, indent - 1)); |
| 7 | + let regex = cache[cacheIndex]; |
| 8 | + if (!regex) { |
| 9 | + regex = createRegex(cacheIndex); |
| 10 | + cache[cacheIndex] = regex; |
| 11 | + } |
| 12 | + return regex; |
| 13 | + }; |
| 14 | +} |
| 15 | + |
3 | 16 | function edit(regex: string | RegExp, opt = '') { |
4 | 17 | let source = typeof regex === 'string' ? regex : regex.source; |
5 | 18 | const obj = { |
@@ -78,12 +91,12 @@ export const other = { |
78 | 91 | notSpaceStart: /^\S*/, |
79 | 92 | endingNewline: /\n$/, |
80 | 93 | listItemRegex: (bull: string) => new RegExp(`^( {0,3}${bull})((?:[\t ][^\\n]*)?(?:\\n|$))`), |
81 | | - nextBulletRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`), |
82 | | - hrRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`), |
83 | | - fencesBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\`\`\`|~~~)`), |
84 | | - headingBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`), |
85 | | - htmlBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, 'i'), |
86 | | - blockquoteBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}>`), |
| 94 | + nextBulletRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`)), |
| 95 | + hrRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`)), |
| 96 | + fencesBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}(?:\`\`\`|~~~)`)), |
| 97 | + headingBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}#`)), |
| 98 | + htmlBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}<(?:[a-z].*>|!--)`, 'i')), |
| 99 | + blockquoteBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}>`)), |
87 | 100 | }; |
88 | 101 |
|
89 | 102 | /** |
|
0 commit comments