stream-markdown-parser 0.0.19 → 0.0.20

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":";;;UAaiB,cAAA,SAAuB;sBAClB;;EADL,gBAAA,CAAe,EAAA,OAAA;;;;ECXf,CAAA;AAQjB;;;UARiB,QAAA;;EDWA,GAAA,EAAA,MAAA;;;;ACXjB;AAQiB,UAAA,QAAA,SAAiB,QAAQ,CAAA;EAMzB,IAAA,EAAA,MAAA;EAOA,OAAA,EAAA,MAAA;EAMA,MAAA,CAAA,EAAA,OAAW;AAM5B;AAQiB,UA3BA,WAAA,SAAoB,QA2BC,CAAA;EAKrB,IAAA,EAAA,SAAA;EAiBA,KAAA,EAAA,MAAA;EAOA,IAAA,EAAA,MAAA;EAMA,QAAA,EA1DL,UA0DoB,EAAA;AAKhC;AAQiB,UApEA,aAAA,SAAsB,QAoEI,CAAA;EAO1B,IAAA,EAAA,WAAA;EAIA,QAAA,EA7EL,UA6EqB,EAAA;EASrB,aAAA,CAAA,EAAA,OAAc;AAS1B;AAKiB,UAhGA,UAAA,SAAmB,QAgGT,CAAA;EAEjB,IAAA,EAAA,QAAA;EACF,QAAA,EAjGI,UAiGJ,EAAA;EAH2B,OAAA,CAAA,EAAA,MAAA;;AAMlB,UAhGA,QAAA,SAAiB,QAkGzB,CAAA;EAGQ,IAAA,EAAA,MAAA;EAMA,OAAA,EAAA,OAAA;EAKA,KAAA,CAAA,EAAA,MAAA;EAET,KAAA,EA7GC,YA6GD,EAAA;;AAFoC,UAxG3B,YAAA,SAAqB,QAwGM,CAAA;EAAQ,IAAA,EAAA,WAAA;EAMnC,QAAA,EA5GL,UA4GkB,EAAA;AAM9B;AAKiB,UApHA,aAAA,SAAsB,QAoHC,CAAA;EAOvB,IAAA,EAAA,YAAW;EAKX,QAAA,EAAA,MAAa;EAKb,IAAA,EAAA,MAAA;EAKA,SAAA,CAAA,EAAA,MAAc;EAKd,OAAA,CAAA,EAAA,MAAW;EAKX,OAAA,CAAA,EAAA,OAAc;EAKd,IAAA,CAAA,EAAA,OAAA;EAKA,YAAA,CAAA,EAAa,MAAA;EAKb,WAAA,CAAA,EAAA,MAAkB;EAKlB,GAAA,EAAA,MAAA;AAMjB;AAIiB,UAjKA,aAAA,SAAsB,QAiKS,CAAA;EAK/B,IAAA,EAAA,YAAc;EAKd,KAAA,CAAA,EAAA,CAAA,MAAA,EAAc,MAAA,CAAA,EAAA,GAAQ,IAAA;EAMtB,GAAA,EAAA,MAAA;EAkBL,OAAA,EAAA,MAAA;AAEZ;AACM,UA/LW,cAAA,SAAuB,QA+LlC,CAAA;EACA,IAAA,EAAA,aAAA;EACA,OAAA,EAAA,MAAA;EACA,QAAA,EA/LM,UA+LN,EAAA;;AAEA,UA9LW,cAAA,SAAuB,QA8LlC,CAAA;EACA,IAAA,EAAA,aAAA;EACA,IAAA,EAAA,MAAA;;AAEA,UA7LW,QAAA,SAAiB,QA6L5B,CAAA;EACA,IAAA,EAAA,MAAA;EACA,IAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,IAAA;EACA,IAAA,EAAA,MAAA;EACA,QAAA,EA7LM,UA6LN,EAAA;;AAEA,UA5LW,SAAA,SAAkB,QA4L7B,CAAA;EACA,IAAA,EAAA,OAAA;EACA,GAAA,EAAA,MAAA;EACA,GAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,IAAA;;AAEA,UA3LW,iBAAA,SAA0B,QA2LrC,CAAA;EACA,IAAA,EAAA,gBAAA;;AAEA,UA1LW,gBAAA,CA0LX;EACA,IAAA,EAAA;IACA,IAAA,EAAA,YAAA;IACA,QAAA,EAAA,MAAA;IACA,IAAA,EAAA,MAAA;IACA,OAAA,CAAA,EAAA,OAAA;EACA,CAAA;;AAEA,KAzLM,cAAA,GAyLN;EACA,OAAA,EAAA,MAAA;EAAM,KAAA,CAAA,EAAA,SAAA;AACZ,CAAA,GAAiB;EAkCL,OAAA,CAAA,EAAA,SAAA;EAEK,KAAA,EAxNN,QAwNkB,EAAA;AAK7B,CAAA;UA3NiB,cAAA,SAAuB;;YAE5B;ACjFZ;AAA0C,UDoFzB,SAAA,SAAkB,QCpFO,CAAA;EAA2C,IAAA,EAAA,OAAA;EAAgB,MAAA,EDsF3F,YCtF2F;EAAU,IAAA,EDuFvG,YCvFuG,EAAA;;UD0F9F,YAAA,SAAqB;;EEhHtB,KAAA,EFkHP,aElHO,EAAA;;AAGL,UFkHM,aAAA,SAAsB,QElH5B,CAAA;EACR,IAAA,EAAA,YAAA;EAAU,MAAA,EAAA,OAAA;EAuDG,QAAA,EF6DJ,UE7DiB,EAAA;;UFgEZ,kBAAA,SAA2B;;EGrI3B,KAAA,EHuIR,kBGvImB,EAAA;AAS5B;UHiIiB,kBAAA,SAA2B;;QAEpC;EIrJQ,UAAA,EJsJF,UItJmB,EAAA;;UJyJhB,YAAA,SAAqB;;EKrHtB,EAAA,EAAA,MAAA;YLwHJ;;UAGK,qBAAA,SAA8B;EM5J/B,IAAA,EAAA,oBAAe;;;UNiKd,cAAA,SAAuB;EOpK3B,IAAA,EAAA,YAAA;EAqBA,IAAA,EAAA,MAAA;EAuBG,KAAA,EAAA,MAAU;YP4Hd;;UAGK,UAAA,SAAmB;EQ1JvB,IAAA,EAAA,QAAA;EAuIG,QAAA,ERqBJ,UQrBI,EAAA;AA4ChB;URpBiB,YAAA,SAAqB;;YAE1B;AS9IZ;AACW,UTgJM,iBAAA,SAA0B,QShJhC,CAAA;EACU,IAAA,EAAA,eAAA;EAAX,QAAA,ETiJE,USjJF,EAAA;;AAFkC,UTsJ3B,aAAA,SAAsB,QStJK,CAAA;EAAc,IAAA,EAAA,WAAA;EAU1C,QAAA,ET8IJ,US9Ie,EAAA;;UTiJV,UAAA,SAAmB;;YAExB;;UAGK,aAAA,SAAsB;;YAE3B;;UAGK,eAAA,SAAwB;;YAE7B;;UAGK,YAAA,SAAqB;;;;UAKrB,iBAAA,SAA0B;;;;UAK1B,SAAA,SAAkB;;;;;UAMlB,aAAA,SAAsB;;;UAItB,cAAA,SAAuB;;;;UAKvB,aAAA,SAAsB;;;;UAKtB,aAAA,SAAsB;;;;UAMtB,iBAAA;;;;;;;;;;;;;aAaJ;;;;KAKD,aAAA,IAAiB;;;KAA+C;KAEhE,UAAA,GACN,WACA,cACA,gBACA,WACA,eACA,gBACA,iBACA,WACA,YACA,oBACA,iBACA,YACA,eACA,gBACA,aACA,eACA,oBACA,gBACA,aACA,gBACA,kBACA,eACA,oBACA,YACA,qBACA,qBACA,eACA,wBACA,iBACA,gBACA,iBACA,gBACA,gBACA,gBACA;UACW,gBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAkCL,mBAAA,YAA+B,oBAAoB;UAE9C,YAAA;uBACM;wBACC;;KAGZ,sBAAA,WAAiC,iBAAiB;;;iBC1S9C,iBAAA,SAA0B,2CAA2C,gBAAgB;;;AF5BpF,iBGMD,wBAAA,CHN8B,QAAA,EAAA,MAAA,EAAA,EAAA,EGQxC,YHRwC,EAAA,OAAA,CAAA,EGSnC,YHTmC,CAAA,EGU3C,UHV2C,EAAA;iBGiE9B,aAAA,SAAsB,kBAAkB;;;;;;AHjExD;;;;ACXA;AAQA;AAMiB,UGPA,WAAA,CHWL;EAGK;EAMA,QAAA,CAAA,EAAA,SAAW,MAEhB,EAAA;EAIK;EAQA,iBAAa,CAAA,EAAA,OAElB;AAGZ;AAiBiB,iBG/CD,qBAAA,CH+C+B,IAAA,EG/CH,WH+CG,GAAA,SAAA,CAAA,EAAA,IAAA;;;iBIjE/B,iBAAA;;;iBCoCA,eAAA,QAAuB,gBAAgB;;;iBCjCvC,eAAA,KAAoB;;;cCHvB;cAqBA;iBAuBG,UAAA;;;cC3BH;iBAuIG,6BAAA,mBAAgD;iBA4ChD,SAAA,KAAc,yBAAuB;;;ARjKpC,USCA,kBAAA,SAA2B,cTDF,CAAA;EAQzB,MAAA,CAAA,ESNN,KTMM,CAAa,OAAA,CAAA;EAKb,KAAA,CAAA,ESVP,KTUO,CAAA,CAAA,EAAc,ESVV,YTUkB,EAAA,GAAA,IAAQ,CAAA;EAiB9B;AAOjB;AAMA;AAKA;EAQiB,IAAA,CAAA,EAAA,CAAA,CAAA,GAAU,EAAA,MAAA,EAAA,GAAQ,MAAA,CAAA,GShDE,MTgDM,CAAA,MAAA,EAAA,MAAA,CAAA;AAO3C;AAIiB,iBSxDD,WAAA,CTwDiB,KAAA,CAAA,EAAA,MAAA,EAAA,OAAA,CAAA,ESxD4C,kBTwD5C,CAAA,ESxDmE,YTwDnE"}
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] ?? "";
@@ -360,7 +361,42 @@ function fixStrongTokens(tokens) {
360
361
  const token = tokens[i];
361
362
  const nextToken = tokens[i + 1];
362
363
  const tokenContent = String(token.content ?? "");
363
- if (token.type === "text" && tokenContent.endsWith("*") && nextToken.type === "em_open") {
364
+ if (token.type === "link_open" && tokens[i - 1].type === "em_open" && tokens[i - 2].type === "text" && tokens[i - 2].content?.endsWith("*")) {
365
+ const textContent = String(tokens[i - 2].content ?? "").slice(0, -1);
366
+ const replaceTokens = [
367
+ {
368
+ type: "strong_open",
369
+ tag: "strong",
370
+ attrs: null,
371
+ map: null,
372
+ children: null,
373
+ content: "",
374
+ markup: "**",
375
+ info: "",
376
+ meta: null
377
+ },
378
+ tokens[i],
379
+ tokens[i + 1],
380
+ tokens[i + 2],
381
+ {
382
+ type: "strong_close",
383
+ tag: "strong",
384
+ attrs: null,
385
+ map: null,
386
+ children: null,
387
+ content: "",
388
+ markup: "**",
389
+ info: "",
390
+ meta: null
391
+ }
392
+ ];
393
+ if (textContent) replaceTokens.unshift({
394
+ type: "text",
395
+ content: textContent,
396
+ raw: textContent
397
+ });
398
+ fixedTokens.splice(i - 2, 6, ...replaceTokens);
399
+ } else if (token.type === "text" && tokenContent.endsWith("*") && nextToken.type === "em_open") {
364
400
  const _nextToken = tokens[i + 2];
365
401
  const count = _nextToken?.type === "text" ? 4 : 3;
366
402
  const insert = [
@@ -713,6 +749,36 @@ const KATEX_COMMANDS = [
713
749
  ];
714
750
  const ESCAPED_KATEX_COMMANDS = KATEX_COMMANDS.slice().sort((a, b) => b.length - a.length).map((c) => c.replace(/[.*+?^${}()|[\\]\\\]/g, "\\$&")).join("|");
715
751
  const CONTROL_CHARS_CLASS = "[ \r\b\f\v]";
752
+ const SPAN_CURLY_RE = /span\{([^}]+)\}/;
753
+ const OPERATORNAME_SPAN_RE = /\\operatorname\{span\}\{((?:[^{}]|\{[^}]*\})+)\}/;
754
+ const SINGLE_BACKSLASH_NEWLINE_RE = /(^|[^\\])\\\r?\n/g;
755
+ const ENDING_SINGLE_BACKSLASH_RE = /(^|[^\\])\\$/g;
756
+ const DEFAULT_MATH_RE = new RegExp(`${CONTROL_CHARS_CLASS}|(?<!\\\\|\\w)(${ESCAPED_KATEX_COMMANDS})\\b`, "g");
757
+ const MATH_RE_CACHE = /* @__PURE__ */ new Map();
758
+ const BRACE_CMD_RE_CACHE = /* @__PURE__ */ new Map();
759
+ function getMathRegex(commands) {
760
+ if (!commands) return DEFAULT_MATH_RE;
761
+ const arr = [...commands];
762
+ arr.sort((a, b) => b.length - a.length);
763
+ const key = arr.join("");
764
+ const cached = MATH_RE_CACHE.get(key);
765
+ if (cached) return cached;
766
+ const commandPattern = `(?:${arr.map((c) => c.replace(/[.*+?^${}()|[\\]\\"\]/g, "\\$&")).join("|")})`;
767
+ const re = new RegExp(`${CONTROL_CHARS_CLASS}|(?<!\\\\|\\w)(${commandPattern})\\b`, "g");
768
+ MATH_RE_CACHE.set(key, re);
769
+ return re;
770
+ }
771
+ function getBraceCmdRegex(useDefault, commands) {
772
+ const arr = useDefault ? [] : [...commands ?? []];
773
+ if (!useDefault) arr.sort((a, b) => b.length - a.length);
774
+ const key = useDefault ? "__default__" : arr.join("");
775
+ const cached = BRACE_CMD_RE_CACHE.get(key);
776
+ if (cached) return cached;
777
+ 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("|");
778
+ const re = new RegExp(`(^|[^\\\\\\w])(${braceEscaped})\\s*\\{`, "g");
779
+ BRACE_CMD_RE_CACHE.set(key, re);
780
+ return re;
781
+ }
716
782
  const CONTROL_MAP = {
717
783
  " ": "t",
718
784
  "\r": "r",
@@ -730,27 +796,19 @@ function normalizeStandaloneBackslashT(s, opts) {
730
796
  const commands = opts?.commands ?? KATEX_COMMANDS;
731
797
  const escapeExclamation = opts?.escapeExclamation ?? true;
732
798
  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
- }
799
+ const re = getMathRegex(useDefault ? void 0 : commands);
739
800
  let out = s.replace(re, (m, cmd) => {
740
801
  if (CONTROL_MAP[m] !== void 0) return `\\${CONTROL_MAP[m]}`;
741
802
  if (cmd && commands.includes(cmd)) return `\\${cmd}`;
742
803
  return m;
743
804
  });
744
805
  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
806
  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\\\\");
807
+ const braceCmdRe = getBraceCmdRegex(useDefault, useDefault ? void 0 : commands);
808
+ result = result.replace(braceCmdRe, (_m, p1, p2) => `${p1}\\${p2}{`);
809
+ result = result.replace(SPAN_CURLY_RE, "span\\{$1\\}").replace(OPERATORNAME_SPAN_RE, "\\operatorname{span}\\{$1\\}");
810
+ result = result.replace(SINGLE_BACKSLASH_NEWLINE_RE, "$1\\\\\n");
811
+ result = result.replace(ENDING_SINGLE_BACKSLASH_RE, "$1\\\\");
754
812
  return result;
755
813
  }
756
814
  function applyMath(md, mathOpts) {
@@ -1103,14 +1161,23 @@ function parseEmphasisToken(tokens, startIndex) {
1103
1161
 
1104
1162
  //#endregion
1105
1163
  //#region src/parser/inline-parsers/fence-parser.ts
1164
+ const TRAILING_FENCE_LINE_RE = /\r?\n[ \t]*`+\s*$/;
1165
+ const DIFF_HEADER_PREFIXES = [
1166
+ "diff ",
1167
+ "index ",
1168
+ "--- ",
1169
+ "+++ ",
1170
+ "@@ "
1171
+ ];
1172
+ const NEWLINE_RE = /\r?\n/;
1106
1173
  function splitUnifiedDiff(content) {
1107
1174
  const orig = [];
1108
1175
  const updated = [];
1109
- for (const rawLine of content.split(/\r?\n/)) {
1176
+ for (const rawLine of content.split(NEWLINE_RE)) {
1110
1177
  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)}`);
1178
+ if (DIFF_HEADER_PREFIXES.some((p) => line.startsWith(p))) continue;
1179
+ if (line.length >= 2 && line[0] === "-" && line[1] === " ") orig.push(` ${line.slice(1)}`);
1180
+ else if (line.length >= 2 && line[0] === "+" && line[1] === " ") updated.push(` ${line.slice(1)}`);
1114
1181
  else {
1115
1182
  orig.push(line);
1116
1183
  updated.push(line);
@@ -1127,10 +1194,13 @@ function parseFenceToken(token) {
1127
1194
  const closed = typeof tokenMeta.closed === "boolean" ? tokenMeta.closed : void 0;
1128
1195
  const info = String(token.info ?? "");
1129
1196
  const diff = info.startsWith("diff");
1130
- const language = diff ? String(info.split(" ")[1] ?? "") : info;
1197
+ const language = diff ? (() => {
1198
+ const s = info;
1199
+ const sp = s.indexOf(" ");
1200
+ return sp === -1 ? "" : String(s.slice(sp + 1) ?? "");
1201
+ })() : info;
1131
1202
  let content = String(token.content ?? "");
1132
- const trailingFenceLine = /\r?\n[ \t]*`+\s*$/;
1133
- if (trailingFenceLine.test(content)) content = content.replace(trailingFenceLine, "");
1203
+ if (TRAILING_FENCE_LINE_RE.test(content)) content = content.replace(TRAILING_FENCE_LINE_RE, "");
1134
1204
  if (diff) {
1135
1205
  const { original, updated } = splitUnifiedDiff(content);
1136
1206
  return {
@@ -1333,11 +1403,12 @@ function parseLinkToken(tokens, startIndex) {
1333
1403
  const title = _title === null ? null : String(_title);
1334
1404
  let i = startIndex + 1;
1335
1405
  const linkTokens = [];
1336
- const loading = true;
1406
+ let loading = true;
1337
1407
  while (i < tokens.length && tokens[i].type !== "link_close") {
1338
1408
  linkTokens.push(tokens[i]);
1339
1409
  i++;
1340
1410
  }
1411
+ if (tokens[i]?.type === "link_close") loading = false;
1341
1412
  const children = parseInlineTokens(linkTokens);
1342
1413
  const linkText = children.map((node) => {
1343
1414
  const nodeAny = node;
@@ -1494,6 +1565,10 @@ function parseTextToken(token) {
1494
1565
 
1495
1566
  //#endregion
1496
1567
  //#region src/parser/inline-parsers/index.ts
1568
+ const STRONG_PAIR_RE = /\*\*([\s\S]*?)\*\*/;
1569
+ function escapeRegExp(str) {
1570
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1571
+ }
1497
1572
  const AUTOLINK_PROTOCOL_RE = /^(?:https?:\/\/|mailto:|ftp:\/\/)/i;
1498
1573
  const AUTOLINK_GENERIC_RE = /:\/\//;
1499
1574
  function isLikelyUrl(href) {
@@ -1563,7 +1638,7 @@ function parseInlineTokens(tokens, raw, pPreToken) {
1563
1638
  i++;
1564
1639
  return true;
1565
1640
  }
1566
- const exec = /\*\*([\s\S]*?)\*\*/.exec(content);
1641
+ const exec = STRONG_PAIR_RE.exec(content);
1567
1642
  let inner = "";
1568
1643
  let after = "";
1569
1644
  if (exec && typeof exec.index === "number") {
@@ -1932,9 +2007,6 @@ function parseInlineTokens(tokens, raw, pPreToken) {
1932
2007
  function handleLinkOpen(token) {
1933
2008
  resetCurrentTextNode();
1934
2009
  const href = token.attrs?.find(([name]) => name === "href")?.[1];
1935
- function escapeRegExp(str) {
1936
- return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1937
- }
1938
2010
  if (raw && tokens[i + 1].type === "text") {
1939
2011
  const text = String(tokens[i + 1]?.content ?? "");
1940
2012
  const escText = escapeRegExp(text);
@@ -2580,6 +2652,23 @@ function parseHardBreak() {
2580
2652
 
2581
2653
  //#endregion
2582
2654
  //#region src/parser/node-parsers/html-block-parser.ts
2655
+ const VOID_TAGS = new Set([
2656
+ "area",
2657
+ "base",
2658
+ "br",
2659
+ "col",
2660
+ "embed",
2661
+ "hr",
2662
+ "img",
2663
+ "input",
2664
+ "link",
2665
+ "meta",
2666
+ "param",
2667
+ "source",
2668
+ "track",
2669
+ "wbr"
2670
+ ]);
2671
+ const CLOSE_TAG_RE_CACHE = /* @__PURE__ */ new Map();
2583
2672
  function parseHtmlBlock(token) {
2584
2673
  const raw = String(token.content ?? "");
2585
2674
  if (/^\s*<!--/.test(raw) || /^\s*<!/.test(raw) || /^\s*<\?/.test(raw)) return {
@@ -2597,25 +2686,14 @@ function parseHtmlBlock(token) {
2597
2686
  tag: "",
2598
2687
  loading: false
2599
2688
  };
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
2689
  const selfClosing = /^\s*<[^>]*\/\s*>/.test(raw);
2617
2690
  const isVoid = VOID_TAGS.has(tag);
2618
- const hasClosing = new RegExp(`<\\/\\s*${tag}\\b`, "i").test(raw);
2691
+ let closeRe = CLOSE_TAG_RE_CACHE.get(tag);
2692
+ if (!closeRe) {
2693
+ closeRe = new RegExp(`<\\/\\s*${tag}\\b`, "i");
2694
+ CLOSE_TAG_RE_CACHE.set(tag, closeRe);
2695
+ }
2696
+ const hasClosing = closeRe.test(raw);
2619
2697
  const loading = !(isVoid || selfClosing || hasClosing);
2620
2698
  return {
2621
2699
  type: "html_block",
@@ -2849,10 +2927,11 @@ function getMarkdown(msgId = `editor-${Date.now()}`, options = {}) {
2849
2927
  <div class="code-editor"></div>
2850
2928
  </div>`;
2851
2929
  };
2930
+ const RE_REFERENCE = /^\[(\d+)\]/;
2852
2931
  const referenceInline = (state, silent) => {
2853
2932
  const s = state;
2854
2933
  if (s.src[s.pos] !== "[") return false;
2855
- const match = /^\[(\d+)\]/.exec(s.src.slice(s.pos));
2934
+ const match = RE_REFERENCE.exec(s.src.slice(s.pos));
2856
2935
  if (!match) return false;
2857
2936
  if (!silent) {
2858
2937
  const id = match[1];