|
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | 16 | import SyntaxBase from '@/core/SyntaxBase'; |
17 | | -import { |
18 | | - compileRegExp, |
19 | | - DO_NOT_STARTS_AND_END_WITH_SPACES_MULTILINE_ALLOW_EMPTY, |
20 | | - ALLOW_WHITESPACE_MULTILINE, |
21 | | - UNDERSCORE_EMPHASIS_BOUNDARY, |
22 | | -} from '@/utils/regexp'; |
| 17 | +import { compileRegExp, ALLOW_WHITESPACE_MULTILINE, UNDERSCORE_EMPHASIS_BOUNDARY } from '@/utils/regexp'; |
23 | 18 |
|
24 | 19 | export default class Emphasis extends SyntaxBase { |
25 | 20 | static HOOK_NAME = 'fontEmphasis'; |
@@ -94,19 +89,20 @@ export default class Emphasis extends SyntaxBase { |
94 | 89 | */ |
95 | 90 | rule({ config } = { config: undefined }) { |
96 | 91 | const allowWhitespace = config ? !!config.allowWhitespace : false; |
97 | | - const REGEX = allowWhitespace |
98 | | - ? ALLOW_WHITESPACE_MULTILINE |
99 | | - : DO_NOT_STARTS_AND_END_WITH_SPACES_MULTILINE_ALLOW_EMPTY; |
| 92 | + const emRegexp = (allowWhitespace, symbol) => { |
| 93 | + const char = `[^${symbol}\\s]`; |
| 94 | + return allowWhitespace ? ALLOW_WHITESPACE_MULTILINE : `(${char}|${char}(.*?(\n${char}.*)*)${char})`; |
| 95 | + }; |
100 | 96 | const asterisk = { |
101 | | - begin: '(^|[^\\\\])(\\*+)', // ?<leading>, ?<symbol> |
102 | | - content: `(${REGEX})`, // ?<text> |
| 97 | + begin: '(^|[^\\\\])([*]+)', // ?<leading>, ?<symbol> |
| 98 | + content: `(${emRegexp(allowWhitespace, '*')})`, // ?<text> |
103 | 99 | end: '\\2', |
104 | 100 | }; |
105 | 101 |
|
106 | 102 | // UNDERSCORE_EMPHASIS_BORDER:允许除下划线以外的「标点符号」和空格出现,使用[^\w\S \t]或[\W\s]会有性能问题 |
107 | 103 | const underscore = { |
108 | 104 | begin: `(^|${UNDERSCORE_EMPHASIS_BOUNDARY})(_+)`, // ?<leading>, ?<symbol> |
109 | | - content: `(${REGEX})`, // ?<text> |
| 105 | + content: `(${emRegexp(allowWhitespace, '_')})`, // ?<text> |
110 | 106 | end: `\\2(?=${UNDERSCORE_EMPHASIS_BOUNDARY}|$)`, |
111 | 107 | }; |
112 | 108 |
|
|
0 commit comments