stream-markdown-parser 0.0.19 → 0.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/factory.ts","../src/types.ts","../src/parser/inline-parsers/index.ts","../src/parser/index.ts","../src/config.ts","../src/findMatchingClose.ts","../src/parser/inline-parsers/fence-parser.ts","../src/plugins/containers.ts","../src/plugins/isMathLike.ts","../src/plugins/math.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/factory.ts","../src/types.ts","../src/parser/inline-parsers/index.ts","../src/parser/index.ts","../src/config.ts","../src/findMatchingClose.ts","../src/parser/inline-parsers/fence-parser.ts","../src/plugins/containers.ts","../src/plugins/isMathLike.ts","../src/plugins/math.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -77,25 +77,25 @@ function applyContainers(md) {
77
77
 
78
78
  //#endregion
79
79
  //#region src/plugins/fixHtmlInline.ts
80
+ const VOID_TAGS$1 = new Set([
81
+ "area",
82
+ "base",
83
+ "br",
84
+ "col",
85
+ "embed",
86
+ "hr",
87
+ "img",
88
+ "input",
89
+ "link",
90
+ "meta",
91
+ "param",
92
+ "source",
93
+ "track",
94
+ "wbr"
95
+ ]);
80
96
  function applyFixHtmlInlineTokens(md) {
81
97
  md.core.ruler.push("fix_html_inline_tokens", (state) => {
82
98
  const toks = state.tokens ?? [];
83
- const VOID_TAGS = new Set([
84
- "area",
85
- "base",
86
- "br",
87
- "col",
88
- "embed",
89
- "hr",
90
- "img",
91
- "input",
92
- "link",
93
- "meta",
94
- "param",
95
- "source",
96
- "track",
97
- "wbr"
98
- ]);
99
99
  for (let i = 0; i < toks.length; i++) {
100
100
  const t = toks[i];
101
101
  if (!t || t.type !== "inline") continue;
@@ -116,7 +116,7 @@ function applyFixHtmlInlineTokens(md) {
116
116
  const raw = String(t.content);
117
117
  const tagName = raw.match(/<([^\s>/]+)/)?.[1]?.toLowerCase() ?? "";
118
118
  if (!tagName) continue;
119
- const isVoid = /\/\s*>\s*$/.test(raw) || VOID_TAGS.has(tagName);
119
+ const isVoid = /\/\s*>\s*$/.test(raw) || VOID_TAGS$1.has(tagName);
120
120
  const htmlToken = t;
121
121
  if (isVoid) {
122
122
  htmlToken.children = [{
@@ -132,6 +132,7 @@ function applyFixHtmlInlineTokens(md) {
132
132
 
133
133
  //#endregion
134
134
  //#region src/plugins/fixLinkInline.ts
135
+ const LINK_PREFIX_RE = /^\[([^\]]*)\]\(([^)\s]*)/;
135
136
  function applyFixLinkInline(md) {
136
137
  const rule = (state, silent) => {
137
138
  const s = state;
@@ -139,7 +140,7 @@ function applyFixLinkInline(md) {
139
140
  if (s.src[start] !== "[") return false;
140
141
  if (start > 0 && s.src[start - 1] === "!") return false;
141
142
  const rest = s.src.slice(start);
142
- const m = /^\[([^\]]*)\]\(([^)\s]*)?/.exec(rest);
143
+ const m = LINK_PREFIX_RE.exec(rest);
143
144
  if (!m) return false;
144
145
  if (silent) return true;
145
146
  const text = m[1] ?? "";
@@ -180,8 +181,8 @@ function isTextToken(t) {
180
181
  }
181
182
  function fixLinkToken(tokens) {
182
183
  const tokensAny = tokens;
183
- tokens = fixLinkToken4(fixLinkToken3(tokens));
184
- if (tokens.length < 5) return tokens;
184
+ tokens = fixLinkToken4(fixLinkToken6(tokens));
185
+ if (tokens.length < 5) return fixLinkToken3(tokens);
185
186
  const first = tokens[tokens.length - 5];
186
187
  const firstAny = first;
187
188
  const firstContent = String(firstAny.content ?? "");
@@ -256,7 +257,7 @@ function fixLinkToken3(tokens) {
256
257
  const preLast = tokens[tokens.length - 2];
257
258
  const fixedTokens = [...tokens];
258
259
  if (!last) return tokens;
259
- if (last.type !== "text" || !last.content?.startsWith(")")) return tokens;
260
+ if (last.type !== "text" || !last.content?.startsWith(")")) return fixLinkToken5(tokens);
260
261
  if (preLast.type !== "link_close") return tokens;
261
262
  if (isTextToken(tokens[tokens.length - 5]) && String(tokens[tokens.length - 5].content ?? "").endsWith("(")) {
262
263
  const a = tokensAny[tokens.length - 5];
@@ -315,6 +316,152 @@ function fixLinkToken4(tokens) {
315
316
  }
316
317
  return fixedTokens;
317
318
  }
319
+ function fixLinkToken5(tokens) {
320
+ const firstToken = tokens[0];
321
+ const nextToken = tokens[1];
322
+ if (firstToken.type === "text" && firstToken.content?.endsWith("(") && nextToken.type === "link_open") {
323
+ const linkText = firstToken.content.match(/\[([^\]]+)\]/)?.[1] || "";
324
+ const href = tokens[2]?.content || "";
325
+ const newTokens = [{
326
+ type: "link",
327
+ loading: true,
328
+ href,
329
+ title: "",
330
+ text: linkText,
331
+ children: [{
332
+ type: "text",
333
+ content: linkText,
334
+ raw: linkText
335
+ }],
336
+ raw: String(`[${linkText}](${href})`)
337
+ }];
338
+ tokens.splice(0, 4, ...newTokens);
339
+ }
340
+ return tokens;
341
+ }
342
+ function fixLinkToken6(tokens) {
343
+ if (tokens.length < 4) return tokens;
344
+ for (let i = 0; i <= tokens.length - 4; i++) if (tokens[i]?.type === "text" && tokens[i].content?.endsWith("(") && tokens[i + 1]?.type === "link_open") {
345
+ const match = tokens[i].content.match(/\[([^\]]+)\]/);
346
+ if (match) {
347
+ let beforeText = tokens[i].content.slice(0, match.index);
348
+ const emphasisMatch = beforeText.match(/(\*+)$/);
349
+ const replacerTokens = [];
350
+ if (emphasisMatch) {
351
+ beforeText = beforeText.slice(0, emphasisMatch.index);
352
+ if (beforeText) replacerTokens.push({
353
+ type: "text",
354
+ content: beforeText,
355
+ raw: beforeText
356
+ });
357
+ const text = match[1];
358
+ const type = emphasisMatch[1].length;
359
+ if (type === 1) replacerTokens.push({
360
+ type: "em_open",
361
+ tag: "em",
362
+ nesting: 1
363
+ });
364
+ else if (type === 2) replacerTokens.push({
365
+ type: "strong_open",
366
+ tag: "strong",
367
+ nesting: 1
368
+ });
369
+ else if (type === 3) {
370
+ replacerTokens.push({
371
+ type: "strong_open",
372
+ tag: "strong",
373
+ nesting: 1
374
+ });
375
+ replacerTokens.push({
376
+ type: "em_open",
377
+ tag: "em",
378
+ nesting: 1
379
+ });
380
+ }
381
+ let href = tokens[i + 2]?.content || "";
382
+ if (tokens[i + 4]?.type === "text" && !tokens[i + 4].content?.startsWith(")")) {
383
+ href += tokens[i + 4]?.content || "";
384
+ tokens[i + 4].content = "";
385
+ }
386
+ replacerTokens.push({
387
+ type: "link",
388
+ loading: !tokens[i + 4]?.content?.startsWith(")"),
389
+ href,
390
+ title: "",
391
+ text,
392
+ children: [{
393
+ type: "text",
394
+ content: text,
395
+ raw: text
396
+ }],
397
+ raw: String(`[${text}](${tokens[i + 2]?.content || ""})`)
398
+ });
399
+ if (type === 1) replacerTokens.push({
400
+ type: "em_close",
401
+ tag: "em",
402
+ nesting: -1
403
+ });
404
+ else if (type === 2) replacerTokens.push({
405
+ type: "strong_close",
406
+ tag: "strong",
407
+ nesting: -1
408
+ });
409
+ else if (type === 3) {
410
+ replacerTokens.push({
411
+ type: "em_close",
412
+ tag: "em",
413
+ nesting: -1
414
+ });
415
+ replacerTokens.push({
416
+ type: "strong_close",
417
+ tag: "strong",
418
+ nesting: -1
419
+ });
420
+ }
421
+ if (tokens[i + 4]?.type === "text") {
422
+ const afterText = tokens[i + 4].content?.replace(/^\)\**/, "");
423
+ if (afterText) replacerTokens.push({
424
+ type: "text",
425
+ content: afterText,
426
+ raw: afterText
427
+ });
428
+ tokens.splice(i, 5, ...replacerTokens);
429
+ } else tokens.splice(i, 4, ...replacerTokens);
430
+ } else {
431
+ if (beforeText) replacerTokens.push({
432
+ type: "text",
433
+ content: beforeText,
434
+ raw: beforeText
435
+ });
436
+ const text = match[1];
437
+ replacerTokens.push(...[{
438
+ type: "link",
439
+ loading: true,
440
+ href: tokens[i + 2]?.content || "",
441
+ title: "",
442
+ text,
443
+ children: [{
444
+ type: "text",
445
+ content: text,
446
+ raw: text
447
+ }],
448
+ raw: String(`[${text}](${tokens[i + 2]?.content || ""})`)
449
+ }]);
450
+ if (tokens[i + 4]?.type === "text") {
451
+ const afterText = tokens[i + 4].content?.replace(/^\)/, "");
452
+ if (afterText) replacerTokens.push({
453
+ type: "text",
454
+ content: afterText,
455
+ raw: afterText
456
+ });
457
+ tokens.splice(i, 5, ...replacerTokens);
458
+ } else tokens.splice(i, 4, ...replacerTokens);
459
+ }
460
+ i -= replacerTokens.length - 1;
461
+ }
462
+ }
463
+ return tokens;
464
+ }
318
465
 
319
466
  //#endregion
320
467
  //#region src/plugins/fixListItem.ts
@@ -360,7 +507,42 @@ function fixStrongTokens(tokens) {
360
507
  const token = tokens[i];
361
508
  const nextToken = tokens[i + 1];
362
509
  const tokenContent = String(token.content ?? "");
363
- if (token.type === "text" && tokenContent.endsWith("*") && nextToken.type === "em_open") {
510
+ if (token.type === "link_open" && tokens[i - 1].type === "em_open" && tokens[i - 2].type === "text" && tokens[i - 2].content?.endsWith("*")) {
511
+ const textContent = String(tokens[i - 2].content ?? "").slice(0, -1);
512
+ const replaceTokens = [
513
+ {
514
+ type: "strong_open",
515
+ tag: "strong",
516
+ attrs: null,
517
+ map: null,
518
+ children: null,
519
+ content: "",
520
+ markup: "**",
521
+ info: "",
522
+ meta: null
523
+ },
524
+ tokens[i],
525
+ tokens[i + 1],
526
+ tokens[i + 2],
527
+ {
528
+ type: "strong_close",
529
+ tag: "strong",
530
+ attrs: null,
531
+ map: null,
532
+ children: null,
533
+ content: "",
534
+ markup: "**",
535
+ info: "",
536
+ meta: null
537
+ }
538
+ ];
539
+ if (textContent) replaceTokens.unshift({
540
+ type: "text",
541
+ content: textContent,
542
+ raw: textContent
543
+ });
544
+ fixedTokens.splice(i - 2, 6, ...replaceTokens);
545
+ } else if (token.type === "text" && tokenContent.endsWith("*") && nextToken.type === "em_open") {
364
546
  const _nextToken = tokens[i + 2];
365
547
  const count = _nextToken?.type === "text" ? 4 : 3;
366
548
  const insert = [
@@ -713,6 +895,36 @@ const KATEX_COMMANDS = [
713
895
  ];
714
896
  const ESCAPED_KATEX_COMMANDS = KATEX_COMMANDS.slice().sort((a, b) => b.length - a.length).map((c) => c.replace(/[.*+?^${}()|[\\]\\\]/g, "\\$&")).join("|");
715
897
  const CONTROL_CHARS_CLASS = "[ \r\b\f\v]";
898
+ const SPAN_CURLY_RE = /span\{([^}]+)\}/;
899
+ const OPERATORNAME_SPAN_RE = /\\operatorname\{span\}\{((?:[^{}]|\{[^}]*\})+)\}/;
900
+ const SINGLE_BACKSLASH_NEWLINE_RE = /(^|[^\\])\\\r?\n/g;
901
+ const ENDING_SINGLE_BACKSLASH_RE = /(^|[^\\])\\$/g;
902
+ const DEFAULT_MATH_RE = new RegExp(`${CONTROL_CHARS_CLASS}|(?<!\\\\|\\w)(${ESCAPED_KATEX_COMMANDS})\\b`, "g");
903
+ const MATH_RE_CACHE = /* @__PURE__ */ new Map();
904
+ const BRACE_CMD_RE_CACHE = /* @__PURE__ */ new Map();
905
+ function getMathRegex(commands) {
906
+ if (!commands) return DEFAULT_MATH_RE;
907
+ const arr = [...commands];
908
+ arr.sort((a, b) => b.length - a.length);
909
+ const key = arr.join("");
910
+ const cached = MATH_RE_CACHE.get(key);
911
+ if (cached) return cached;
912
+ const commandPattern = `(?:${arr.map((c) => c.replace(/[.*+?^${}()|[\\]\\"\]/g, "\\$&")).join("|")})`;
913
+ const re = new RegExp(`${CONTROL_CHARS_CLASS}|(?<!\\\\|\\w)(${commandPattern})\\b`, "g");
914
+ MATH_RE_CACHE.set(key, re);
915
+ return re;
916
+ }
917
+ function getBraceCmdRegex(useDefault, commands) {
918
+ const arr = useDefault ? [] : [...commands ?? []];
919
+ if (!useDefault) arr.sort((a, b) => b.length - a.length);
920
+ const key = useDefault ? "__default__" : arr.join("");
921
+ const cached = BRACE_CMD_RE_CACHE.get(key);
922
+ if (cached) return cached;
923
+ const braceEscaped = useDefault ? [ESCAPED_TEX_BRACE_COMMANDS, ESCAPED_KATEX_COMMANDS].filter(Boolean).join("|") : [arr.map((c) => c.replace(/[.*+?^${}()|[\\]\\\]/g, "\\$&")).join("|"), ESCAPED_TEX_BRACE_COMMANDS].filter(Boolean).join("|");
924
+ const re = new RegExp(`(^|[^\\\\\\w])(${braceEscaped})\\s*\\{`, "g");
925
+ BRACE_CMD_RE_CACHE.set(key, re);
926
+ return re;
927
+ }
716
928
  const CONTROL_MAP = {
717
929
  " ": "t",
718
930
  "\r": "r",
@@ -730,27 +942,19 @@ function normalizeStandaloneBackslashT(s, opts) {
730
942
  const commands = opts?.commands ?? KATEX_COMMANDS;
731
943
  const escapeExclamation = opts?.escapeExclamation ?? true;
732
944
  const useDefault = opts?.commands == null;
733
- let re;
734
- if (useDefault) re = new RegExp(`${CONTROL_CHARS_CLASS}|(?<!\\\\|\\w)(${ESCAPED_KATEX_COMMANDS})\\b`, "g");
735
- else {
736
- const commandPattern = `(?:${commands.slice().sort((a, b) => b.length - a.length).map((c) => c.replace(/[.*+?^${}()|[\\]\\"\]/g, "\\$&")).join("|")})`;
737
- re = new RegExp(`${CONTROL_CHARS_CLASS}|(?<!\\\\|\\w)(${commandPattern})\\b`, "g");
738
- }
945
+ const re = getMathRegex(useDefault ? void 0 : commands);
739
946
  let out = s.replace(re, (m, cmd) => {
740
947
  if (CONTROL_MAP[m] !== void 0) return `\\${CONTROL_MAP[m]}`;
741
948
  if (cmd && commands.includes(cmd)) return `\\${cmd}`;
742
949
  return m;
743
950
  });
744
951
  if (escapeExclamation) out = out.replace(/(^|[^\\])!/g, "$1\\!");
745
- const braceEscaped = useDefault ? [ESCAPED_TEX_BRACE_COMMANDS, ESCAPED_KATEX_COMMANDS].filter(Boolean).join("|") : [commands.map((c) => c.replace(/[.*+?^${}()|[\\]\\\]/g, "\\$&")).join("|"), ESCAPED_TEX_BRACE_COMMANDS].filter(Boolean).join("|");
746
952
  let result = out;
747
- if (braceEscaped) {
748
- const braceCmdRe = new RegExp(`(^|[^\\\\\\w])(${braceEscaped})\\s*\\{`, "g");
749
- result = result.replace(braceCmdRe, (_m, p1, p2) => `${p1}\\${p2}{`);
750
- }
751
- result = result.replace(/span\{([^}]+)\}/, "span\\{$1\\}").replace(/\\operatorname\{span\}\{((?:[^{}]|\{[^}]*\})+)\}/, "\\operatorname{span}\\{$1\\}");
752
- result = result.replace(/(^|[^\\])\\\r?\n/g, "$1\\\\\n");
753
- result = result.replace(/(^|[^\\])\\$/g, "$1\\\\");
953
+ const braceCmdRe = getBraceCmdRegex(useDefault, useDefault ? void 0 : commands);
954
+ result = result.replace(braceCmdRe, (_m, p1, p2) => `${p1}\\${p2}{`);
955
+ result = result.replace(SPAN_CURLY_RE, "span\\{$1\\}").replace(OPERATORNAME_SPAN_RE, "\\operatorname{span}\\{$1\\}");
956
+ result = result.replace(SINGLE_BACKSLASH_NEWLINE_RE, "$1\\\\\n");
957
+ result = result.replace(ENDING_SINGLE_BACKSLASH_RE, "$1\\\\");
754
958
  return result;
755
959
  }
756
960
  function applyMath(md, mathOpts) {
@@ -1103,14 +1307,23 @@ function parseEmphasisToken(tokens, startIndex) {
1103
1307
 
1104
1308
  //#endregion
1105
1309
  //#region src/parser/inline-parsers/fence-parser.ts
1310
+ const TRAILING_FENCE_LINE_RE = /\r?\n[ \t]*`+\s*$/;
1311
+ const DIFF_HEADER_PREFIXES = [
1312
+ "diff ",
1313
+ "index ",
1314
+ "--- ",
1315
+ "+++ ",
1316
+ "@@ "
1317
+ ];
1318
+ const NEWLINE_RE = /\r?\n/;
1106
1319
  function splitUnifiedDiff(content) {
1107
1320
  const orig = [];
1108
1321
  const updated = [];
1109
- for (const rawLine of content.split(/\r?\n/)) {
1322
+ for (const rawLine of content.split(NEWLINE_RE)) {
1110
1323
  const line = rawLine;
1111
- if (/^(?:diff |index |--- |\+\+\+ |@@ )/.test(line)) continue;
1112
- if (line.startsWith("- ")) orig.push(` ${line.slice(1)}`);
1113
- else if (line.startsWith("+ ")) updated.push(` ${line.slice(1)}`);
1324
+ if (DIFF_HEADER_PREFIXES.some((p) => line.startsWith(p))) continue;
1325
+ if (line.length >= 2 && line[0] === "-" && line[1] === " ") orig.push(` ${line.slice(1)}`);
1326
+ else if (line.length >= 2 && line[0] === "+" && line[1] === " ") updated.push(` ${line.slice(1)}`);
1114
1327
  else {
1115
1328
  orig.push(line);
1116
1329
  updated.push(line);
@@ -1127,10 +1340,13 @@ function parseFenceToken(token) {
1127
1340
  const closed = typeof tokenMeta.closed === "boolean" ? tokenMeta.closed : void 0;
1128
1341
  const info = String(token.info ?? "");
1129
1342
  const diff = info.startsWith("diff");
1130
- const language = diff ? String(info.split(" ")[1] ?? "") : info;
1343
+ const language = diff ? (() => {
1344
+ const s = info;
1345
+ const sp = s.indexOf(" ");
1346
+ return sp === -1 ? "" : String(s.slice(sp + 1) ?? "");
1347
+ })() : info;
1131
1348
  let content = String(token.content ?? "");
1132
- const trailingFenceLine = /\r?\n[ \t]*`+\s*$/;
1133
- if (trailingFenceLine.test(content)) content = content.replace(trailingFenceLine, "");
1349
+ if (TRAILING_FENCE_LINE_RE.test(content)) content = content.replace(TRAILING_FENCE_LINE_RE, "");
1134
1350
  if (diff) {
1135
1351
  const { original, updated } = splitUnifiedDiff(content);
1136
1352
  return {
@@ -1333,11 +1549,12 @@ function parseLinkToken(tokens, startIndex) {
1333
1549
  const title = _title === null ? null : String(_title);
1334
1550
  let i = startIndex + 1;
1335
1551
  const linkTokens = [];
1336
- const loading = true;
1552
+ let loading = true;
1337
1553
  while (i < tokens.length && tokens[i].type !== "link_close") {
1338
1554
  linkTokens.push(tokens[i]);
1339
1555
  i++;
1340
1556
  }
1557
+ if (tokens[i]?.type === "link_close") loading = false;
1341
1558
  const children = parseInlineTokens(linkTokens);
1342
1559
  const linkText = children.map((node) => {
1343
1560
  const nodeAny = node;
@@ -1494,6 +1711,10 @@ function parseTextToken(token) {
1494
1711
 
1495
1712
  //#endregion
1496
1713
  //#region src/parser/inline-parsers/index.ts
1714
+ const STRONG_PAIR_RE = /\*\*([\s\S]*?)\*\*/;
1715
+ function escapeRegExp(str) {
1716
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1717
+ }
1497
1718
  const AUTOLINK_PROTOCOL_RE = /^(?:https?:\/\/|mailto:|ftp:\/\/)/i;
1498
1719
  const AUTOLINK_GENERIC_RE = /:\/\//;
1499
1720
  function isLikelyUrl(href) {
@@ -1563,7 +1784,7 @@ function parseInlineTokens(tokens, raw, pPreToken) {
1563
1784
  i++;
1564
1785
  return true;
1565
1786
  }
1566
- const exec = /\*\*([\s\S]*?)\*\*/.exec(content);
1787
+ const exec = STRONG_PAIR_RE.exec(content);
1567
1788
  let inner = "";
1568
1789
  let after = "";
1569
1790
  if (exec && typeof exec.index === "number") {
@@ -1932,9 +2153,6 @@ function parseInlineTokens(tokens, raw, pPreToken) {
1932
2153
  function handleLinkOpen(token) {
1933
2154
  resetCurrentTextNode();
1934
2155
  const href = token.attrs?.find(([name]) => name === "href")?.[1];
1935
- function escapeRegExp(str) {
1936
- return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1937
- }
1938
2156
  if (raw && tokens[i + 1].type === "text") {
1939
2157
  const text = String(tokens[i + 1]?.content ?? "");
1940
2158
  const escText = escapeRegExp(text);
@@ -2580,6 +2798,23 @@ function parseHardBreak() {
2580
2798
 
2581
2799
  //#endregion
2582
2800
  //#region src/parser/node-parsers/html-block-parser.ts
2801
+ const VOID_TAGS = new Set([
2802
+ "area",
2803
+ "base",
2804
+ "br",
2805
+ "col",
2806
+ "embed",
2807
+ "hr",
2808
+ "img",
2809
+ "input",
2810
+ "link",
2811
+ "meta",
2812
+ "param",
2813
+ "source",
2814
+ "track",
2815
+ "wbr"
2816
+ ]);
2817
+ const CLOSE_TAG_RE_CACHE = /* @__PURE__ */ new Map();
2583
2818
  function parseHtmlBlock(token) {
2584
2819
  const raw = String(token.content ?? "");
2585
2820
  if (/^\s*<!--/.test(raw) || /^\s*<!/.test(raw) || /^\s*<\?/.test(raw)) return {
@@ -2597,25 +2832,14 @@ function parseHtmlBlock(token) {
2597
2832
  tag: "",
2598
2833
  loading: false
2599
2834
  };
2600
- const VOID_TAGS = new Set([
2601
- "area",
2602
- "base",
2603
- "br",
2604
- "col",
2605
- "embed",
2606
- "hr",
2607
- "img",
2608
- "input",
2609
- "link",
2610
- "meta",
2611
- "param",
2612
- "source",
2613
- "track",
2614
- "wbr"
2615
- ]);
2616
2835
  const selfClosing = /^\s*<[^>]*\/\s*>/.test(raw);
2617
2836
  const isVoid = VOID_TAGS.has(tag);
2618
- const hasClosing = new RegExp(`<\\/\\s*${tag}\\b`, "i").test(raw);
2837
+ let closeRe = CLOSE_TAG_RE_CACHE.get(tag);
2838
+ if (!closeRe) {
2839
+ closeRe = new RegExp(`<\\/\\s*${tag}\\b`, "i");
2840
+ CLOSE_TAG_RE_CACHE.set(tag, closeRe);
2841
+ }
2842
+ const hasClosing = closeRe.test(raw);
2619
2843
  const loading = !(isVoid || selfClosing || hasClosing);
2620
2844
  return {
2621
2845
  type: "html_block",
@@ -2849,10 +3073,11 @@ function getMarkdown(msgId = `editor-${Date.now()}`, options = {}) {
2849
3073
  <div class="code-editor"></div>
2850
3074
  </div>`;
2851
3075
  };
3076
+ const RE_REFERENCE = /^\[(\d+)\]/;
2852
3077
  const referenceInline = (state, silent) => {
2853
3078
  const s = state;
2854
3079
  if (s.src[s.pos] !== "[") return false;
2855
- const match = /^\[(\d+)\]/.exec(s.src.slice(s.pos));
3080
+ const match = RE_REFERENCE.exec(s.src.slice(s.pos));
2856
3081
  if (!match) return false;
2857
3082
  if (!silent) {
2858
3083
  const id = match[1];