stream-markdown-parser 0.0.44 → 0.0.46
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.
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +91 -9
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -24,6 +24,12 @@ interface BaseNode {
|
|
|
24
24
|
code?: string;
|
|
25
25
|
diff?: boolean;
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* A catch‑all node type for user extensions.
|
|
29
|
+
* Must still satisfy the renderer contract (`type` + `raw`), but may carry
|
|
30
|
+
* arbitrary extra fields.
|
|
31
|
+
*/
|
|
32
|
+
type UnknownNode = BaseNode & Record<string, unknown>;
|
|
27
33
|
interface TextNode extends BaseNode {
|
|
28
34
|
type: 'text';
|
|
29
35
|
content: string;
|
|
@@ -262,7 +268,7 @@ type MarkdownToken = (Token & {
|
|
|
262
268
|
loading?: boolean;
|
|
263
269
|
raw?: string;
|
|
264
270
|
}) | MarkdownTokenLite;
|
|
265
|
-
type ParsedNode = TextNode | HeadingNode | ParagraphNode | ListNode | ListItemNode | CodeBlockNode | InlineCodeNode | LinkNode | ImageNode | ThematicBreakNode | BlockquoteNode | TableNode | TableRowNode | TableCellNode | StrongNode | EmphasisNode | StrikethroughNode | HighlightNode | InsertNode | SubscriptNode | SuperscriptNode | CheckboxNode | CheckboxInputNode | EmojiNode | DefinitionListNode | DefinitionItemNode | FootnoteNode | FootnoteReferenceNode | AdmonitionNode | HardBreakNode | MathInlineNode | MathBlockNode | ReferenceNode | HtmlBlockNode | HtmlInlineNode | CustomComponentNode |
|
|
271
|
+
type ParsedNode = TextNode | HeadingNode | ParagraphNode | ListNode | ListItemNode | CodeBlockNode | InlineCodeNode | LinkNode | ImageNode | ThematicBreakNode | BlockquoteNode | TableNode | TableRowNode | TableCellNode | StrongNode | EmphasisNode | StrikethroughNode | HighlightNode | InsertNode | SubscriptNode | SuperscriptNode | CheckboxNode | CheckboxInputNode | EmojiNode | DefinitionListNode | DefinitionItemNode | FootnoteNode | FootnoteReferenceNode | AdmonitionNode | HardBreakNode | MathInlineNode | MathBlockNode | ReferenceNode | HtmlBlockNode | HtmlInlineNode | CustomComponentNode | UnknownNode;
|
|
266
272
|
interface CustomComponents {
|
|
267
273
|
text: unknown;
|
|
268
274
|
paragraph: unknown;
|
|
@@ -385,5 +391,5 @@ interface GetMarkdownOptions extends FactoryOptions {
|
|
|
385
391
|
}
|
|
386
392
|
declare function getMarkdown(msgId?: string, options?: GetMarkdownOptions): MarkdownIt;
|
|
387
393
|
//#endregion
|
|
388
|
-
export { AdmonitionNode, BaseNode, BlockquoteNode, CheckboxInputNode, CheckboxNode, CodeBlockNode, CustomComponentAttrs, CustomComponentNode, CustomComponents, DefinitionItemNode, DefinitionListNode, ESCAPED_TEX_BRACE_COMMANDS, EmojiNode, EmphasisNode, FootnoteAnchorNode, FootnoteNode, FootnoteReferenceNode, GetMarkdownOptions, HardBreakNode, HeadingNode, HighlightNode, HtmlBlockNode, HtmlInlineNode, ImageNode, InlineCodeNode, InlineNode, InsertNode, KATEX_COMMANDS, LinkNode, ListItemNode, ListNode, type MarkdownIt, MarkdownRender, MarkdownToken, MarkdownTokenLite, MathBlockNode, MathInlineNode, type MathOptions, MermaidBlockNode, ParagraphNode, ParseOptions, ParsedNode, PostTransformNodesHook, ReferenceNode, StrikethroughNode, StrongNode, SubscriptNode, SuperscriptNode, TEX_BRACE_COMMANDS, TableCellNode, TableNode, TableRowNode, TextNode, ThematicBreakNode, TransformTokensHook, applyContainers, applyMath, clearRegisteredMarkdownPlugins, findMatchingClose, getMarkdown, isMathLike, normalizeStandaloneBackslashT, parseFenceToken, parseInlineTokens, parseMarkdownToStructure, processTokens, registerMarkdownPlugin, setDefaultMathOptions };
|
|
394
|
+
export { AdmonitionNode, BaseNode, BlockquoteNode, CheckboxInputNode, CheckboxNode, CodeBlockNode, CustomComponentAttrs, CustomComponentNode, CustomComponents, DefinitionItemNode, DefinitionListNode, ESCAPED_TEX_BRACE_COMMANDS, EmojiNode, EmphasisNode, FootnoteAnchorNode, FootnoteNode, FootnoteReferenceNode, GetMarkdownOptions, HardBreakNode, HeadingNode, HighlightNode, HtmlBlockNode, HtmlInlineNode, ImageNode, InlineCodeNode, InlineNode, InsertNode, KATEX_COMMANDS, LinkNode, ListItemNode, ListNode, type MarkdownIt, MarkdownRender, MarkdownToken, MarkdownTokenLite, MathBlockNode, MathInlineNode, type MathOptions, MermaidBlockNode, ParagraphNode, ParseOptions, ParsedNode, PostTransformNodesHook, ReferenceNode, StrikethroughNode, StrongNode, SubscriptNode, SuperscriptNode, TEX_BRACE_COMMANDS, TableCellNode, TableNode, TableRowNode, TextNode, ThematicBreakNode, TransformTokensHook, UnknownNode, applyContainers, applyMath, clearRegisteredMarkdownPlugins, findMatchingClose, getMarkdown, isMathLike, normalizeStandaloneBackslashT, parseFenceToken, parseInlineTokens, parseMarkdownToStructure, processTokens, registerMarkdownPlugin, setDefaultMathOptions };
|
|
389
395
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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":";;;UAYiB,cAAA,SAAuB;sBAClB;;EADL,gBAAA,CAAe,EAAA,OAAA;;;;ECVf,CAAA;
|
|
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":";;;UAYiB,cAAA,SAAuB;sBAClB;;EADL,gBAAA,CAAe,EAAA,OAAA;;;;ECVf,CAAA;EAaL;AAEZ;AAMA;AAOA;EAMiB,cAAW,CAAA,EAAA,SAEhB,MAAA,EAAA;AAIZ;;;UAxCiB,QAAA;;EDUA,GAAA,EAAA,MAAA;;;;ACVjB;AAaA;AAEA;AAMA;AAOA;AAMA;AAMiB,KA3BL,WAAA,GAAc,QAgCjB,GAhC4B,MA2BH,CAAA,MAAQ,EAAA,OAAA,CAAA;AAQzB,UAjCA,QAAA,SAAiB,QAmCtB,CAF0B;EAKrB,IAAA,EAAA,MAAA;EAiBA,OAAA,EAAA,MAAA;EAOA,MAAA,CAAA,EAAA,OAAA;AAYjB;AAYiB,UAhFA,WAAA,SAAoB,QAgFA,CAAA;EAK3B,IAAA,EAAA,SAAA;EACG,KAAA,EAAA,MAAA;EANgC,IAAA,EAAA,MAAA;EAAQ,QAAA,EA5EzC,UA4EyC,EAAA;AAUrD;AAKiB,UAxFA,aAAA,SAAsB,QAwFL,CAAQ;EAQzB,IAAA,EAAA,WAAU;EAOV,QAAA,EArGL,UAqGuB,EAAA;EAIlB,aAAA,CAAA,EAAA,OAAgB;AASjC;AASiB,UAvHA,UAAA,SAAmB,QAyHxB,CAF4B;EAKvB,IAAA,EAAA,QAAU;EAEjB,QAAA,EA5HE,UA4HF,EAAA;EACF,OAAA,CAAA,EAAA,MAAA;;AAHmC,UAtH1B,QAAA,SAAiB,QAsHS,CAAA;EAM1B,IAAA,EAAA,MAAA;EAKA,OAAA,EAAA,OAAc;EAOd,KAAA,CAAA,EAAA,MAAA;EAKA,KAAA,EAxIR,YAwIQ,EAAmB;;AAGtB,UAxIG,YAAA,SAAqB,QAwIxB,CAAA;EAH8B,IAAA,EAAA,WAAA;EAAQ,QAAA,EAnIxC,UAmIwC,EAAA;AAMpD;AAMiB,UA5IA,aAAA,SAAsB,QA4IQ,CAAA;EAK9B,IAAA,EAAA,YAAA;EAKA,QAAA,EAAA,MAAA;EAOA,IAAA,EAAA,MAAA;EAKA,SAAA,CAAA,EAAA,MAAa;EAKb,OAAA,CAAA,EAAA,MAAA;EAKA,OAAA,CAAA,EAAA,OAAc;EAKd,IAAA,CAAA,EAAA,OAAW;EAKX,YAAA,CAAA,EAAA,MAAc;EAKd,WAAA,CAAA,EAAA,MAAgB;EAKhB,GAAA,EAAA,MAAA;AAKjB;AAKiB,UAzLA,aAAA,SAAsB,QAyLI,CAAA;EAM1B,IAAA,EAAA,YAAc;EAId,KAAA,CAAA,EAAA,CAAA,MAAA,EAAe,MAAA,CAAA,EAAA,GAAQ,IAAA;EAKvB,GAAA,EAAA,MAAA;EAKA,OAAA,EAAA,MAAA;AAMjB;AAkBY,UA9NK,cAAA,SAAuB,QA8NoC,CAAA;EAEhE,IAAA,EAAA,aAAU;EAChB,GAAA,CAAA,EAAA,MAAA;EACA,OAAA,EAAA,MAAA;EACA,QAAA,EA/NM,UA+NN,EAAA;EACA;;;;EAIA,UAAA,CAAA,EAAA,OAAA;;AAEA,KA9NM,oBAAA,GA8NN,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,GA5NA,MA4NA,CAAA,MAAA,EAAA,MAAA,GAAA,OAAA,CAAA,GA3NA,KA2NA,CAAA;EACA,IAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,OAAA;CACA,CAAA,GAAA,IAAA;;;;;;;AAOA,UA5NW,mBAAA,SAA4B,QA4NvC,CAAA;EACA;EACA,IAAA,EAAA,MAAA;EACA,GAAA,EAAA,MAAA;EACA,OAAA,EAAA,MAAA;EACA,KAAA,CAAA,EA5NI,oBA4NJ;EACA,QAAA,CAAA,EA5NO,UA4NP,EAAA;EACA,UAAA,CAAA,EAAA,OAAA;;AAEA,UA3NW,cAAA,SAAuB,QA2NlC,CAAA;EACA,IAAA,EAAA,aAAA;EACA,IAAA,EAAA,MAAA;;AAEA,UA1NW,QAAA,SAAiB,QA0N5B,CAAA;EACA,IAAA,EAAA,MAAA;EACA,IAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,IAAA;EACA,IAAA,EAAA,MAAA;EAAW,QAAA,EAzNL,UAyNK,EAAA;AACjB;AAmCY,UA1PK,SAAA,SAAkB,QA0PQ,CAAA;EAE1B,IAAA,EAAA,OAAA;EAgBL,GAAA,EAAA,MAAA;;;;ACjWI,UD4FC,iBAAA,SAA0B,QC5FV,CAAA;EACvB,IAAA,EAAA,gBAAA;;AAIP,UD2Fc,gBAAA,CC3Fd;EAAU,IAAA,EAAA;;;;ICoEG,OAAA,CAAA,EAAA,OAAA;EAEV,CAAA;;AAEH,KF4BS,cAAA,GE5BT;EAAU,OAAA,EAAA,MAAA;EAkIG,KAAA,CAAA,EAAA,SAAa;CAAS,GAAA;EAA2B,OAAA,CAAA,EAAA,SAAA;EAAe,KAAA,EF/FrE,QE+FqE,EAAA;CAAU;UF7FzE,cAAA,SAAuB;;YAE5B;AGpJZ;AAqBgB,UHkIC,SAAA,SAAkB,QGlIS,CAAA;;UHoIlC;QACF;AInKR;UJsKiB,YAAA,SAAqB;;SAE7B;AKpIT;ULuIiB,aAAA,SAAsB;;;EMxKvB,QAAA,EN2KJ,UM3KmB,EAAA;;;UN+Kd,kBAAA,SAA2B;EOlL/B,IAAA,EAAA,iBAkBZ;EAEY,KAAA,EPgKJ,kBOhKI,EAAA;AA6Bb;UPsIiB,kBAAA,SAA2B;;QAEpC;EQxKK,UAAA,ERyKC,UQ7Gb,EAAA;AA6GD;AA2EgB,URxEC,YAAA,SAAqB,QQwEe,CAAA;;;YRrEzC;AS3KZ;AAIgB,UT0KC,qBAAA,SAA8B,QS1KD,CAAA;EAwB7B,IAAA,EAAA,oBAAmB;EACzB,EAAA,EAAA,MAAA;;AACD,UTqJO,kBAAA,SAA2B,QSrJlC,CAAA;EAK2B,IAAA,EAAA,iBAAA;EAPO,EAAA,EAAA,MAAA;;AAU5B,UTkJC,cAAA,SAAuB,QSlJqC,CAAuB;;;;YTsJxF;;UAGK,UAAA,SAAmB;;YAExB;;UAGK,YAAA,SAAqB;;YAE1B;;UAGK,iBAAA,SAA0B;;YAE/B;;UAGK,aAAA,SAAsB;;YAE3B;;UAGK,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,iBACA,sBACA;UACW,gBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAmCL,mBAAA,YAA+B,oBAAoB;UAE9C,YAAA;uBACM;wBACC;;;;;;;;;;;KAcZ,sBAAA,WAAiC,iBAAiB;;;iBCjW9C,iBAAA,SACN,2CAEI;EFhCG,oBAAe,CAAA,EAAA,OACV;;IEiCnB;;;AFlCc,iBGsGD,wBAAA,CHtG8B,QAAA,EAAA,MAAA,EAAA,EAAA,EGwGxC,YHxGwC,EAAA,OAAA,CAAA,EGyGnC,YHzGmC,CAAA,EG0G3C,UH1G2C,EAAA;iBG4O9B,aAAA,SAAsB,2BAA2B,eAAe;;;;;;AH5OhF;;;;ACVA;AAaA;AAEiB,UGRA,WAAA,CHQiB;EAMjB;EAOA,QAAA,CAAA,EAAA,SAAc,MAAA,EAEnB;EAIK;EAMA,iBAAS,CAAA,EAAA,OAKjB;EAGQ;AAKjB;AAiBA;AAOA;AAYA;AAYA;;;;;AAUA;EAKiB,gBAAS,CAAA,EAAA,OAKd;AAGZ;AAOiB,iBGvGD,qBAAA,CHuGmC,IAAA,EGvGP,WHuGO,GAAA,SAAA,CAAA,EAAA,IAAA;;;iBIrInC,iBAAA;;;iBCoCA,eAAA,QAAuB,gBAAgB;;;iBCjCvC,eAAA,KAAoB;;;cCHvB;cAoBA;iBA6BG,UAAA;;;cChCH;iBAyKG,6BAAA,mBAAgD;iBA2EhD,SAAA,KAAc,yBAAuB;;;ATzPpC,iBUSD,sBAAA,CVTwB,MAAM,EAAA,OAAA,CAAA,EAAA,IAAA;iBUa9B,8BAAA,CAAA;AT8BC,USNA,kBAAA,SAA2B,cTMG,CAAA;EAiB9B,MAAA,CAAA,EStBN,KTsBM,CAAA,OAAc,CAAA;EAOd,KAAA,CAAA,ES5BP,KT4BO,CAAA,CAAA,EAAe,ES5BX,UTgCT,EAAA,GAAA,IAAA,CAAA;EAQA;AAYZ;;;EAA6C,IAAA,CAAA,EAAA,CAAA,CAAA,GAAA,EAAA,MAAA,EAAA,GAAA,MAAA,CAAA,GS/CR,MT+CQ,CAAA,MAAA,EAAA,MAAA,CAAA;;AAU5B,iBStDD,WAAA,CTsDwB,KAAQ,CAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EStD6B,kBTsD7B,CAAA,EStDoD,UTsDpD"}
|
package/dist/index.js
CHANGED
|
@@ -8428,6 +8428,16 @@ function countUnescapedStrong(s) {
|
|
|
8428
8428
|
while (re.exec(s) !== null) c++;
|
|
8429
8429
|
return c;
|
|
8430
8430
|
}
|
|
8431
|
+
function findLastUnescapedStrongMarker(s) {
|
|
8432
|
+
const re = /(^|[^\\])(__|\*\*)/g;
|
|
8433
|
+
let m;
|
|
8434
|
+
let last = null;
|
|
8435
|
+
while ((m = re.exec(s)) !== null) last = {
|
|
8436
|
+
marker: m[2],
|
|
8437
|
+
index: m.index + (m[1]?.length ?? 0)
|
|
8438
|
+
};
|
|
8439
|
+
return last;
|
|
8440
|
+
}
|
|
8431
8441
|
function normalizeStandaloneBackslashT(s, opts) {
|
|
8432
8442
|
const commands = opts?.commands ?? KATEX_COMMANDS;
|
|
8433
8443
|
const escapeExclamation = opts?.escapeExclamation ?? true;
|
|
@@ -8512,7 +8522,8 @@ function applyMath(md, mathOpts) {
|
|
|
8512
8522
|
foundAny = true;
|
|
8513
8523
|
if (!silent) {
|
|
8514
8524
|
s.pending = "";
|
|
8515
|
-
const
|
|
8525
|
+
const toPushBefore = preMathPos ? src.slice(preMathPos, searchPos) : src.slice(0, searchPos);
|
|
8526
|
+
const isStrongPrefix = countUnescapedStrong(toPushBefore) % 2 === 1;
|
|
8516
8527
|
if (preMathPos) pushText(src.slice(preMathPos, searchPos));
|
|
8517
8528
|
else {
|
|
8518
8529
|
let text$1 = src.slice(0, searchPos);
|
|
@@ -8520,8 +8531,9 @@ function applyMath(md, mathOpts) {
|
|
|
8520
8531
|
pushText(text$1);
|
|
8521
8532
|
}
|
|
8522
8533
|
if (isStrongPrefix) {
|
|
8534
|
+
const strongMarker = findLastUnescapedStrongMarker(toPushBefore)?.marker ?? "**";
|
|
8523
8535
|
const strongToken = s.push("strong_open", "", 0);
|
|
8524
|
-
strongToken.markup =
|
|
8536
|
+
strongToken.markup = strongMarker;
|
|
8525
8537
|
const token = s.push("math_inline", "math", 0);
|
|
8526
8538
|
token.content = normalizeStandaloneBackslashT(content$1, mathOpts);
|
|
8527
8539
|
token.markup = open === "$$" ? "$$" : open === "\\(" ? "\\(\\)" : open === "$" ? "$" : "()";
|
|
@@ -8558,29 +8570,31 @@ function applyMath(md, mathOpts) {
|
|
|
8558
8570
|
let toPushBefore = src.slice(0, searchPos) ? src.slice(preMathPos, index) : before;
|
|
8559
8571
|
const isStrongPrefix = countUnescapedStrong(toPushBefore) % 2 === 1;
|
|
8560
8572
|
if (index !== s.pos && isStrongPrefix) toPushBefore = s.pending + src.slice(s.pos, index);
|
|
8573
|
+
const strongMarkerInfo = isStrongPrefix ? findLastUnescapedStrongMarker(toPushBefore) : null;
|
|
8574
|
+
const strongMarker = strongMarkerInfo?.marker ?? "**";
|
|
8561
8575
|
if (s.pending !== toPushBefore) {
|
|
8562
8576
|
s.pending = "";
|
|
8563
|
-
if (isStrongPrefix) {
|
|
8564
|
-
const
|
|
8565
|
-
|
|
8566
|
-
pushText(toPushBefore.slice(0, _match.index));
|
|
8577
|
+
if (isStrongPrefix) if (strongMarkerInfo) {
|
|
8578
|
+
const after = toPushBefore.slice(strongMarkerInfo.index + strongMarker.length);
|
|
8579
|
+
pushText(toPushBefore.slice(0, strongMarkerInfo.index));
|
|
8567
8580
|
const strongToken = s.push("strong_open", "", 0);
|
|
8568
|
-
strongToken.markup =
|
|
8581
|
+
strongToken.markup = strongMarker;
|
|
8569
8582
|
const textToken$1 = s.push("text", "", 0);
|
|
8570
8583
|
textToken$1.content = after;
|
|
8571
8584
|
s.push("strong_close", "", 0);
|
|
8572
8585
|
} else pushText(toPushBefore);
|
|
8586
|
+
else pushText(toPushBefore);
|
|
8573
8587
|
}
|
|
8574
8588
|
if (isStrongPrefix) {
|
|
8575
8589
|
const strongToken = s.push("strong_open", "", 0);
|
|
8576
|
-
strongToken.markup =
|
|
8590
|
+
strongToken.markup = strongMarker;
|
|
8577
8591
|
const token = s.push("math_inline", "math", 0);
|
|
8578
8592
|
token.content = normalizeStandaloneBackslashT(content, mathOpts);
|
|
8579
8593
|
token.markup = open === "$$" ? "$$" : open === "\\(" ? "\\(\\)" : open === "$" ? "$" : "()";
|
|
8580
8594
|
token.raw = `${open}${content}${close}`;
|
|
8581
8595
|
token.loading = false;
|
|
8582
8596
|
const raw = src.slice(endIdx + close.length);
|
|
8583
|
-
const isBeforeClose = raw.startsWith(
|
|
8597
|
+
const isBeforeClose = raw.startsWith(strongMarker);
|
|
8584
8598
|
if (isBeforeClose) s.push("strong_close", "", 0);
|
|
8585
8599
|
if (raw) {
|
|
8586
8600
|
s.pos = endIdx + close.length;
|
|
@@ -10944,9 +10958,77 @@ function parseParagraph(tokens, index, options) {
|
|
|
10944
10958
|
//#endregion
|
|
10945
10959
|
//#region src/parser/index.ts
|
|
10946
10960
|
function stripDanglingHtmlLikeTail(markdown) {
|
|
10961
|
+
const isInsideFencedCodeBlock = (src, pos) => {
|
|
10962
|
+
let inFence = false;
|
|
10963
|
+
let fenceChar = "";
|
|
10964
|
+
let fenceLen = 0;
|
|
10965
|
+
const isWs = (ch) => ch === " " || ch === " ";
|
|
10966
|
+
const parseFenceMarker = (line) => {
|
|
10967
|
+
let i = 0;
|
|
10968
|
+
while (i < line.length && isWs(line[i])) i++;
|
|
10969
|
+
const ch = line[i];
|
|
10970
|
+
if (ch !== "`" && ch !== "~") return null;
|
|
10971
|
+
let j = i;
|
|
10972
|
+
while (j < line.length && line[j] === ch) j++;
|
|
10973
|
+
const len = j - i;
|
|
10974
|
+
if (len < 3) return null;
|
|
10975
|
+
return {
|
|
10976
|
+
markerChar: ch,
|
|
10977
|
+
markerLen: len,
|
|
10978
|
+
rest: line.slice(j)
|
|
10979
|
+
};
|
|
10980
|
+
};
|
|
10981
|
+
const stripBlockquotePrefix = (line) => {
|
|
10982
|
+
let i = 0;
|
|
10983
|
+
while (i < line.length && isWs(line[i])) i++;
|
|
10984
|
+
let saw = false;
|
|
10985
|
+
while (i < line.length && line[i] === ">") {
|
|
10986
|
+
saw = true;
|
|
10987
|
+
i++;
|
|
10988
|
+
while (i < line.length && isWs(line[i])) i++;
|
|
10989
|
+
}
|
|
10990
|
+
return saw ? line.slice(i) : null;
|
|
10991
|
+
};
|
|
10992
|
+
const matchFence = (rawLine) => {
|
|
10993
|
+
const direct = parseFenceMarker(rawLine);
|
|
10994
|
+
if (direct) return direct;
|
|
10995
|
+
const afterQuote = stripBlockquotePrefix(rawLine);
|
|
10996
|
+
if (afterQuote == null) return null;
|
|
10997
|
+
return parseFenceMarker(afterQuote);
|
|
10998
|
+
};
|
|
10999
|
+
let offset = 0;
|
|
11000
|
+
const lines = src.split(/\r?\n/);
|
|
11001
|
+
for (const line of lines) {
|
|
11002
|
+
const lineStart = offset;
|
|
11003
|
+
const lineEnd = offset + line.length;
|
|
11004
|
+
if (pos < lineStart) break;
|
|
11005
|
+
const fenceMatch = matchFence(line);
|
|
11006
|
+
if (fenceMatch) {
|
|
11007
|
+
const markerChar = fenceMatch.markerChar;
|
|
11008
|
+
const markerLen = fenceMatch.markerLen;
|
|
11009
|
+
if (inFence) {
|
|
11010
|
+
if (markerChar === fenceChar && markerLen >= fenceLen) {
|
|
11011
|
+
if (/^\s*$/.test(fenceMatch.rest)) {
|
|
11012
|
+
inFence = false;
|
|
11013
|
+
fenceChar = "";
|
|
11014
|
+
fenceLen = 0;
|
|
11015
|
+
}
|
|
11016
|
+
}
|
|
11017
|
+
} else {
|
|
11018
|
+
inFence = true;
|
|
11019
|
+
fenceChar = markerChar;
|
|
11020
|
+
fenceLen = markerLen;
|
|
11021
|
+
}
|
|
11022
|
+
}
|
|
11023
|
+
if (pos <= lineEnd) break;
|
|
11024
|
+
offset = lineEnd + 1;
|
|
11025
|
+
}
|
|
11026
|
+
return inFence;
|
|
11027
|
+
};
|
|
10947
11028
|
const s = String(markdown ?? "");
|
|
10948
11029
|
const lastLt = s.lastIndexOf("<");
|
|
10949
11030
|
if (lastLt === -1) return s;
|
|
11031
|
+
if (isInsideFencedCodeBlock(s, lastLt)) return s;
|
|
10950
11032
|
const tail = s.slice(lastLt);
|
|
10951
11033
|
if (tail.includes(">")) return s;
|
|
10952
11034
|
if (!/^<\s*(?:\/\s*)?[A-Z!][\s\S]*$/i.test(tail)) return s;
|