@simon_he/vue-tui 1.1.11 → 1.1.13
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/{TAgentTerminalGraphic-B8-YZfuP.js → TAgentTerminalGraphic-BKDAoGoE.js} +1 -1
- package/dist/{TMermaidText-C1akgJPU.js → TMermaidText-DJmYNqhh.js} +1 -1
- package/dist/{TSelect-C-WzsLAD.js → TSelect-CnBJET_C.js} +3 -3
- package/dist/{TTree-1JP-PZ2T.js → TTree-DqyzDB0h.js} +16 -16
- package/dist/{TVideo-D9AOiyq2.js → TVideo-C3gnTlFD.js} +3 -3
- package/dist/agent.cjs +573 -263
- package/dist/agent.js +8 -8
- package/dist/{block-source-BhvdZomx.js → block-source-BGTRldY7.js} +2 -2
- package/dist/cli.cjs +18 -16
- package/dist/cli.js +18 -22
- package/dist/experimental/browser.js +4 -4
- package/dist/experimental.cjs +18 -5
- package/dist/experimental.js +6 -6
- package/dist/{frame-mailbox-DaTrfyaF.js → frame-mailbox-6XHw-P8Q.js} +1 -1
- package/dist/index.cjs +9 -7
- package/dist/index.js +5 -5
- package/dist/{linkify-CklfA1vp.js → linkify-DF96jKWy.js} +1 -1
- package/dist/markdown.cjs +568 -258
- package/dist/markdown.js +2 -2
- package/dist/{mermaid-D0ov4_A1.js → mermaid-qhG4TDdu.js} +2 -2
- package/dist/mermaid.js +3 -3
- package/dist/{rect-JzWMJxxc.js → rect-Dfevd15m.js} +30 -1
- package/dist/{tlog-theme-BnILsD3n.js → tlog-theme-DKq1YOQF.js} +8 -8
- package/dist/vue/utils/text.d.ts +13 -0
- package/dist/vue.cjs +9 -7
- package/dist/vue.js +6 -6
- package/package.json +2 -2
package/dist/agent.cjs
CHANGED
|
@@ -1009,6 +1009,19 @@ function sliceByCellsRange(text2, startCells, endCells, provider = currentTextWi
|
|
|
1009
1009
|
out.push(g), cells = next;
|
|
1010
1010
|
}), out.length ? out.join("") : "";
|
|
1011
1011
|
}
|
|
1012
|
+
function sliceByCellsRangeForSelection(text2, startCells, endCells, provider = currentTextWidthProvider()) {
|
|
1013
|
+
if (startCells = Math.max(0, Math.floor(startCells)), endCells = Math.max(0, Math.floor(endCells)), endCells <= startCells || !text2)
|
|
1014
|
+
return "";
|
|
1015
|
+
if (hasAsciiFastPath(provider) && isAscii(text2))
|
|
1016
|
+
return text2.slice(startCells, endCells);
|
|
1017
|
+
let out = [], cells = 0;
|
|
1018
|
+
return forEachGrapheme(text2, (g) => {
|
|
1019
|
+
let leadingCell = cells;
|
|
1020
|
+
if (cells += charCellWidth(g, provider), leadingCell >= endCells)
|
|
1021
|
+
return !1;
|
|
1022
|
+
leadingCell >= startCells && out.push(g);
|
|
1023
|
+
}), out.join("");
|
|
1024
|
+
}
|
|
1012
1025
|
function padEndByCells(text2, width, provider = currentTextWidthProvider()) {
|
|
1013
1026
|
width = Math.max(0, Math.floor(width));
|
|
1014
1027
|
let cells = text2 && hasAsciiFastPath(provider) && isAscii(text2) ? text2.length : textCellWidth(text2, provider);
|
|
@@ -8900,7 +8913,7 @@ var virtualListInstanceSeq = 0, TVirtualList = (0, import_vue21.defineComponent)
|
|
|
8900
8913
|
function textForSelectionRange(range) {
|
|
8901
8914
|
let cols = Math.max(1, Math.floor(props.w));
|
|
8902
8915
|
return terminalSelectionRowSpans(range, cols, itemCount.value).map((span) => {
|
|
8903
|
-
let text2 =
|
|
8916
|
+
let text2 = sliceByCellsRangeForSelection(itemText(span.y), span.x0, span.x1);
|
|
8904
8917
|
return span.x1 >= cols ? text2.trimEnd() : text2;
|
|
8905
8918
|
}).join(`
|
|
8906
8919
|
`);
|
|
@@ -9587,7 +9600,7 @@ var virtualRowsInstanceSeq = 0, EMPTY_RECT2 = Object.freeze({ x: 0, y: 0, w: 0,
|
|
|
9587
9600
|
x1: span.x1,
|
|
9588
9601
|
cols
|
|
9589
9602
|
}) ?? ""
|
|
9590
|
-
) :
|
|
9603
|
+
) : sliceByCellsRangeForSelection(itemText(span.y), span.x0, span.x1);
|
|
9591
9604
|
return span.x1 >= cols ? text2.trimEnd() : text2;
|
|
9592
9605
|
}).join(`
|
|
9593
9606
|
`);
|
|
@@ -10325,7 +10338,7 @@ var TTranscriptView = (0, import_vue23.defineComponent)({
|
|
|
10325
10338
|
let text2 = "";
|
|
10326
10339
|
for (let segment of segments) {
|
|
10327
10340
|
let start = Math.max(x0, segment.x0), end = Math.min(x1, segment.x1);
|
|
10328
|
-
end <= start || !segment.selectable || (text2 +=
|
|
10341
|
+
end <= start || !segment.selectable || (text2 += sliceByCellsRangeForSelection(segment.text, start - segment.x0, end - segment.x0));
|
|
10329
10342
|
}
|
|
10330
10343
|
return text2;
|
|
10331
10344
|
}
|
|
@@ -10354,7 +10367,7 @@ var TTranscriptView = (0, import_vue23.defineComponent)({
|
|
|
10354
10367
|
}
|
|
10355
10368
|
function selectionTextForVisualRowSpan(ctx) {
|
|
10356
10369
|
let visualRow = ctx.item;
|
|
10357
|
-
return visualRow ? visualRow.selectionSegments.length ? textForSelectionSegments(visualRow.selectionSegments, ctx.x0, ctx.x1) :
|
|
10370
|
+
return visualRow ? visualRow.selectionSegments.length ? textForSelectionSegments(visualRow.selectionSegments, ctx.x0, ctx.x1) : sliceByCellsRangeForSelection(selectionTextForVisualRow(visualRow), ctx.x0, ctx.x1) : "";
|
|
10358
10371
|
}
|
|
10359
10372
|
return () => (0, import_vue23.h)(TVirtualRows, {
|
|
10360
10373
|
ref: rowsRef,
|
|
@@ -12613,7 +12626,7 @@ var TLogView = (0, import_vue24.defineComponent)({
|
|
|
12613
12626
|
function textForSelectionRange(range) {
|
|
12614
12627
|
let cols = currentWrapWidth(), rows = estimatedVisualRowCount();
|
|
12615
12628
|
return terminalSelectionRowSpans(range, cols, rows).map((span) => {
|
|
12616
|
-
let text2 =
|
|
12629
|
+
let text2 = sliceByCellsRangeForSelection(textForVisualRow(span.y), span.x0, span.x1);
|
|
12617
12630
|
return span.x1 >= cols ? text2.trimEnd() : text2;
|
|
12618
12631
|
}).join(`
|
|
12619
12632
|
`);
|
|
@@ -15157,7 +15170,7 @@ function loadBuiltinMathRasterizer() {
|
|
|
15157
15170
|
})()), builtinRasterizerLoad;
|
|
15158
15171
|
}
|
|
15159
15172
|
|
|
15160
|
-
// node_modules/.pnpm/stream-markdown-parser@1.2.
|
|
15173
|
+
// node_modules/.pnpm/stream-markdown-parser@1.2.19/node_modules/stream-markdown-parser/dist/index.js
|
|
15161
15174
|
var __create2 = Object.create, __defProp$1 = Object.defineProperty, __getOwnPropDesc2 = Object.getOwnPropertyDescriptor, __getOwnPropNames2 = Object.getOwnPropertyNames, __getProtoOf2 = Object.getPrototypeOf, __hasOwnProp2 = Object.prototype.hasOwnProperty, __commonJS = (cb, mod) => function() {
|
|
15162
15175
|
return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
15163
15176
|
}, __export$1 = (all) => {
|
|
@@ -18484,6 +18497,30 @@ function inline(state) {
|
|
|
18484
18497
|
}
|
|
18485
18498
|
}
|
|
18486
18499
|
var CJK_CHAR_RE = /[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]/u, ASCII_DOMAIN_START_RE = /[0-9a-z]/i;
|
|
18500
|
+
function hasLinkifySeed(text$1) {
|
|
18501
|
+
return text$1.includes(".") || text$1.includes("@") || text$1.includes(":");
|
|
18502
|
+
}
|
|
18503
|
+
var linkifySeedSafety = /* @__PURE__ */ new WeakMap();
|
|
18504
|
+
function isLinkifySeedSafe(linkify$2) {
|
|
18505
|
+
let schemaSearch = linkify$2.re?.get_schema_search?.();
|
|
18506
|
+
if (!schemaSearch)
|
|
18507
|
+
return !1;
|
|
18508
|
+
let cached = linkifySeedSafety.get(linkify$2);
|
|
18509
|
+
if (cached && cached.schemaSearch === schemaSearch)
|
|
18510
|
+
return cached.safe;
|
|
18511
|
+
let schemas = linkify$2.__schemas__, safe = !0;
|
|
18512
|
+
if (schemas) {
|
|
18513
|
+
for (let name in schemas)
|
|
18514
|
+
if (name.charCodeAt(name.length - 1) !== 58) {
|
|
18515
|
+
safe = !1;
|
|
18516
|
+
break;
|
|
18517
|
+
}
|
|
18518
|
+
}
|
|
18519
|
+
return linkifySeedSafety.set(linkify$2, {
|
|
18520
|
+
schemaSearch,
|
|
18521
|
+
safe
|
|
18522
|
+
}), safe;
|
|
18523
|
+
}
|
|
18487
18524
|
function isLinkOpen(str) {
|
|
18488
18525
|
return /^<a[>\s]/i.test(str);
|
|
18489
18526
|
}
|
|
@@ -18509,55 +18546,57 @@ function trimCjkPrefixFromFuzzyLink(linkify$2, link$1) {
|
|
|
18509
18546
|
}
|
|
18510
18547
|
function linkify(state) {
|
|
18511
18548
|
let blockTokens = state.tokens;
|
|
18512
|
-
if (state.md?.options?.linkify)
|
|
18513
|
-
|
|
18514
|
-
|
|
18515
|
-
|
|
18549
|
+
if (!state.md?.options?.linkify)
|
|
18550
|
+
return;
|
|
18551
|
+
let seedSafe = isLinkifySeedSafe(state.md.linkify), mayMatch = (text$1) => seedSafe ? hasLinkifySeed(text$1) : !0;
|
|
18552
|
+
for (let j = 0; j < blockTokens.length; j++) {
|
|
18553
|
+
let blockToken$1 = blockTokens[j];
|
|
18554
|
+
if (blockToken$1.type !== "inline" || !mayMatch(blockToken$1.content))
|
|
18555
|
+
continue;
|
|
18556
|
+
let tokens = blockToken$1.children;
|
|
18557
|
+
tokens || (tokens = [], blockToken$1.children = tokens);
|
|
18558
|
+
let htmlLinkLevel = 0;
|
|
18559
|
+
for (let i = tokens.length - 1; i >= 0; i--) {
|
|
18560
|
+
let currentToken = tokens[i];
|
|
18561
|
+
if (currentToken.type === "link_close") {
|
|
18562
|
+
for (i--; i >= 0 && tokens[i].level !== currentToken.level && tokens[i].type !== "link_open"; )
|
|
18563
|
+
i--;
|
|
18516
18564
|
continue;
|
|
18517
|
-
|
|
18518
|
-
|
|
18519
|
-
|
|
18520
|
-
|
|
18521
|
-
|
|
18522
|
-
|
|
18523
|
-
|
|
18524
|
-
|
|
18565
|
+
}
|
|
18566
|
+
if (currentToken.type === "html_inline" && (isLinkOpen(currentToken.content) && htmlLinkLevel > 0 && htmlLinkLevel--, isLinkClose(currentToken.content) && htmlLinkLevel++), htmlLinkLevel > 0 || currentToken.type !== "text" || !mayMatch(currentToken.content))
|
|
18567
|
+
continue;
|
|
18568
|
+
let text$1 = currentToken.content, links = (state.md.linkify.match(text$1) || []).map((link$1) => trimCjkPrefixFromFuzzyLink(state.md.linkify, link$1));
|
|
18569
|
+
if (links.length === 0)
|
|
18570
|
+
continue;
|
|
18571
|
+
let nodes = [], level = currentToken.level, lastPos = 0;
|
|
18572
|
+
links.length > 0 && links[0].index === 0 && i > 0 && tokens[i - 1].type === "text_special" && (links = links.slice(1));
|
|
18573
|
+
for (let ln = 0; ln < links.length; ln++) {
|
|
18574
|
+
let link$1 = links[ln], fullUrl = state.md.normalizeLink(link$1.url);
|
|
18575
|
+
if (!state.md.validateLink(fullUrl))
|
|
18525
18576
|
continue;
|
|
18577
|
+
let urlText = link$1.text;
|
|
18578
|
+
link$1.schema ? link$1.schema === "mailto:" && !/^mailto:/i.test(urlText) ? urlText = state.md.normalizeLinkText(`mailto:${urlText}`).replace(/^mailto:/, "") : urlText = state.md.normalizeLinkText(urlText) : urlText = state.md.normalizeLinkText(`http://${urlText}`).replace(/^http:\/\//, "");
|
|
18579
|
+
let pos = link$1.index;
|
|
18580
|
+
if (pos > lastPos) {
|
|
18581
|
+
let textToken$1 = new Token("text", "", 0);
|
|
18582
|
+
textToken$1.content = text$1.slice(lastPos, pos), textToken$1.level = level, nodes.push(textToken$1);
|
|
18526
18583
|
}
|
|
18527
|
-
|
|
18528
|
-
|
|
18529
|
-
let
|
|
18530
|
-
|
|
18531
|
-
|
|
18532
|
-
|
|
18533
|
-
|
|
18534
|
-
|
|
18535
|
-
|
|
18536
|
-
|
|
18537
|
-
|
|
18538
|
-
let urlText = link$1.text;
|
|
18539
|
-
link$1.schema ? link$1.schema === "mailto:" && !/^mailto:/i.test(urlText) ? urlText = state.md.normalizeLinkText(`mailto:${urlText}`).replace(/^mailto:/, "") : urlText = state.md.normalizeLinkText(urlText) : urlText = state.md.normalizeLinkText(`http://${urlText}`).replace(/^http:\/\//, "");
|
|
18540
|
-
let pos = link$1.index;
|
|
18541
|
-
if (pos > lastPos) {
|
|
18542
|
-
let textToken$1 = new Token("text", "", 0);
|
|
18543
|
-
textToken$1.content = text$1.slice(lastPos, pos), textToken$1.level = level, nodes.push(textToken$1);
|
|
18544
|
-
}
|
|
18545
|
-
let tokenOpen = new Token("link_open", "a", 1);
|
|
18546
|
-
tokenOpen.attrs = [["href", fullUrl]], tokenOpen.level = level++, tokenOpen.markup = "linkify", tokenOpen.info = "auto", nodes.push(tokenOpen);
|
|
18547
|
-
let tokenText = new Token("text", "", 0);
|
|
18548
|
-
tokenText.content = urlText, tokenText.level = level, nodes.push(tokenText);
|
|
18549
|
-
let tokenClose = new Token("link_close", "a", -1);
|
|
18550
|
-
tokenClose.level = --level, tokenClose.markup = "linkify", tokenClose.info = "auto", nodes.push(tokenClose), lastPos = link$1.lastIndex;
|
|
18551
|
-
}
|
|
18552
|
-
if (lastPos !== 0) {
|
|
18553
|
-
if (lastPos < text$1.length) {
|
|
18554
|
-
let textToken$1 = new Token("text", "", 0);
|
|
18555
|
-
textToken$1.content = text$1.slice(lastPos), textToken$1.level = level, nodes.push(textToken$1);
|
|
18556
|
-
}
|
|
18557
|
-
tokens.splice(i, 1, ...nodes);
|
|
18584
|
+
let tokenOpen = new Token("link_open", "a", 1);
|
|
18585
|
+
tokenOpen.attrs = [["href", fullUrl]], tokenOpen.level = level++, tokenOpen.markup = "linkify", tokenOpen.info = "auto", nodes.push(tokenOpen);
|
|
18586
|
+
let tokenText = new Token("text", "", 0);
|
|
18587
|
+
tokenText.content = urlText, tokenText.level = level, nodes.push(tokenText);
|
|
18588
|
+
let tokenClose = new Token("link_close", "a", -1);
|
|
18589
|
+
tokenClose.level = --level, tokenClose.markup = "linkify", tokenClose.info = "auto", nodes.push(tokenClose), lastPos = link$1.lastIndex;
|
|
18590
|
+
}
|
|
18591
|
+
if (lastPos !== 0) {
|
|
18592
|
+
if (lastPos < text$1.length) {
|
|
18593
|
+
let textToken$1 = new Token("text", "", 0);
|
|
18594
|
+
textToken$1.content = text$1.slice(lastPos), textToken$1.level = level, nodes.push(textToken$1);
|
|
18558
18595
|
}
|
|
18596
|
+
tokens.splice(i, 1, ...nodes);
|
|
18559
18597
|
}
|
|
18560
18598
|
}
|
|
18599
|
+
}
|
|
18561
18600
|
}
|
|
18562
18601
|
var NEWLINES_RE = /\r\n?|\n/g, NULL_RE = /\0/g;
|
|
18563
18602
|
function normalize(state) {
|
|
@@ -18733,7 +18772,7 @@ function process_inlines(tokens, state) {
|
|
|
18733
18772
|
nextChar = tokens[j].content.charCodeAt(0);
|
|
18734
18773
|
break;
|
|
18735
18774
|
}
|
|
18736
|
-
let isLastPunctChar =
|
|
18775
|
+
let isLastPunctChar = isPunctCode(lastChar2), isNextPunctChar = isPunctCode(nextChar), isLastWhiteSpace = isWhiteSpace(lastChar2), isNextWhiteSpace = isWhiteSpace(nextChar);
|
|
18737
18776
|
if (isNextWhiteSpace ? canOpen = !1 : isNextPunctChar && (isLastWhiteSpace || isLastPunctChar || (canOpen = !1)), isLastWhiteSpace ? canClose = !1 : isLastPunctChar && (isNextWhiteSpace || isNextPunctChar || (canClose = !1)), nextChar === 34 && t[0] === '"' && lastChar2 >= 48 && lastChar2 <= 57 && (canClose = canOpen = !1), canOpen && canClose && (canOpen = isLastPunctChar, canClose = isNextPunctChar), !canOpen && !canClose) {
|
|
18738
18777
|
isSingle && (token.content = replaceAt(token.content, t.index, APOSTROPHE));
|
|
18739
18778
|
continue;
|
|
@@ -18788,28 +18827,30 @@ var BAD_PROTO_RE = /^(?:vbscript|javascript|file|data):/, GOOD_DATA_RE = /^data:
|
|
|
18788
18827
|
"http:",
|
|
18789
18828
|
"https:",
|
|
18790
18829
|
"mailto:"
|
|
18791
|
-
];
|
|
18830
|
+
], NON_ASCII_RE = /[^\0-\x7F]/, PUNYCODE_LABEL_RE = /xn--/, ENCODE_IDENTITY_RE = /%(?![0-9a-f]{2})|[^\w;/?:@&=+$,\-.!~*'()#%]/i, DECODE_SCAN_RE = /%[0-9a-f]{2}/i;
|
|
18792
18831
|
function validateLink(url) {
|
|
18793
18832
|
let str = url.trim().toLowerCase();
|
|
18794
18833
|
return BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) : !0;
|
|
18795
18834
|
}
|
|
18796
18835
|
function normalizeLink(url) {
|
|
18797
18836
|
let parsed = parse_default(url, !0);
|
|
18798
|
-
if (parsed.hostname && (!parsed.protocol || RECODE_HOSTNAME_FOR.includes(parsed.protocol)))
|
|
18837
|
+
if (parsed.hostname && (!parsed.protocol || RECODE_HOSTNAME_FOR.includes(parsed.protocol)) && NON_ASCII_RE.test(parsed.hostname))
|
|
18799
18838
|
try {
|
|
18800
18839
|
parsed.hostname = import_punycode.default.toASCII(parsed.hostname);
|
|
18801
18840
|
} catch {
|
|
18802
18841
|
}
|
|
18803
|
-
|
|
18842
|
+
let formatted = format(parsed);
|
|
18843
|
+
return ENCODE_IDENTITY_RE.test(formatted) ? encode_default(formatted) : formatted;
|
|
18804
18844
|
}
|
|
18805
18845
|
function normalizeLinkText(url) {
|
|
18806
18846
|
let parsed = parse_default(url, !0);
|
|
18807
|
-
if (parsed.hostname && (!parsed.protocol || RECODE_HOSTNAME_FOR.includes(parsed.protocol)))
|
|
18847
|
+
if (parsed.hostname && (!parsed.protocol || RECODE_HOSTNAME_FOR.includes(parsed.protocol)) && (NON_ASCII_RE.test(parsed.hostname) || PUNYCODE_LABEL_RE.test(parsed.hostname)))
|
|
18808
18848
|
try {
|
|
18809
18849
|
parsed.hostname = import_punycode.default.toUnicode(parsed.hostname);
|
|
18810
18850
|
} catch {
|
|
18811
18851
|
}
|
|
18812
|
-
|
|
18852
|
+
let formatted = format(parsed);
|
|
18853
|
+
return DECODE_SCAN_RE.test(formatted) ? decode_default(formatted, `${decode_default.defaultChars}%`) : formatted;
|
|
18813
18854
|
}
|
|
18814
18855
|
function isSpace$7(code$1) {
|
|
18815
18856
|
switch (code$1) {
|
|
@@ -22208,6 +22249,37 @@ var Renderer = class {
|
|
|
22208
22249
|
return output;
|
|
22209
22250
|
}
|
|
22210
22251
|
}, renderer_default = Renderer, EMPTY_TOKENS = [], GLOBAL_STATE_APPEND_SCAN_WINDOW = 4096;
|
|
22252
|
+
function copyOptions(options) {
|
|
22253
|
+
let copy = { ...options };
|
|
22254
|
+
return Array.isArray(options.quotes) && (copy.quotes = [...options.quotes]), options.experimental && (copy.experimental = { ...options.experimental }), copy;
|
|
22255
|
+
}
|
|
22256
|
+
function optionsEqual(left, right) {
|
|
22257
|
+
let keys = Object.keys(right);
|
|
22258
|
+
return Object.keys(left).length !== keys.length ? !1 : keys.every((key) => {
|
|
22259
|
+
if (!Object.hasOwn(left, key))
|
|
22260
|
+
return !1;
|
|
22261
|
+
let leftValue = left[key], rightValue = right[key];
|
|
22262
|
+
if (Array.isArray(leftValue) && Array.isArray(rightValue))
|
|
22263
|
+
return leftValue.length === rightValue.length && leftValue.every((value, index) => Object.is(value, rightValue[index]));
|
|
22264
|
+
if (key === "experimental" && leftValue && rightValue) {
|
|
22265
|
+
let leftExperimental = leftValue, rightExperimental = rightValue, experimentalKeys = Object.keys(rightExperimental);
|
|
22266
|
+
return Object.keys(leftExperimental).length === experimentalKeys.length && experimentalKeys.every((option) => Object.hasOwn(leftExperimental, option) && Object.is(leftExperimental[option], rightExperimental[option]));
|
|
22267
|
+
}
|
|
22268
|
+
return Object.is(leftValue, rightValue);
|
|
22269
|
+
});
|
|
22270
|
+
}
|
|
22271
|
+
function copyParserConfig(md) {
|
|
22272
|
+
return {
|
|
22273
|
+
options: copyOptions(md.options),
|
|
22274
|
+
coreVersion: md.core.ruler.version,
|
|
22275
|
+
blockVersion: md.block.ruler.version,
|
|
22276
|
+
inlineVersion: md.inline.ruler.version,
|
|
22277
|
+
inline2Version: md.inline.ruler2.version
|
|
22278
|
+
};
|
|
22279
|
+
}
|
|
22280
|
+
function parserConfigEqual(config$1, md) {
|
|
22281
|
+
return optionsEqual(config$1.options, md.options) && config$1.coreVersion === md.core.ruler.version && config$1.blockVersion === md.block.ruler.version && config$1.inlineVersion === md.inline.ruler.version && config$1.inline2Version === md.inline.ruler2.version;
|
|
22282
|
+
}
|
|
22211
22283
|
function appendedHasBlockConstructs(s) {
|
|
22212
22284
|
let len = s.length, lineStart = 0;
|
|
22213
22285
|
for (; lineStart <= len; ) {
|
|
@@ -22350,9 +22422,9 @@ var StreamParser = class {
|
|
|
22350
22422
|
__publicField(this, "core");
|
|
22351
22423
|
__publicField(this, "anchorBlock", new ParserBlock());
|
|
22352
22424
|
__publicField(this, "cache", null);
|
|
22425
|
+
__publicField(this, "snapshots", /* @__PURE__ */ new WeakSet());
|
|
22353
22426
|
__publicField(this, "stats", makeEmptyStats());
|
|
22354
22427
|
__publicField(this, "normalizeLineEndings", !0);
|
|
22355
|
-
__publicField(this, "coreRulerVersion", -1);
|
|
22356
22428
|
__publicField(this, "tokenMapsTrusted", !0);
|
|
22357
22429
|
__publicField(this, "allowUntrustedTailReuse", !1);
|
|
22358
22430
|
__publicField(this, "MIN_SIZE_FOR_OPTIMIZATION", 1e3);
|
|
@@ -22375,19 +22447,46 @@ var StreamParser = class {
|
|
|
22375
22447
|
let { resets } = this.stats;
|
|
22376
22448
|
this.stats = makeEmptyStats(), this.stats.resets = resets;
|
|
22377
22449
|
}
|
|
22378
|
-
|
|
22379
|
-
let
|
|
22380
|
-
|
|
22381
|
-
|
|
22450
|
+
snapshot() {
|
|
22451
|
+
let cache = this.cache;
|
|
22452
|
+
if (!cache)
|
|
22453
|
+
return null;
|
|
22454
|
+
let state = cache.snapshotState ?? { cache };
|
|
22455
|
+
cache.snapshotState = state;
|
|
22456
|
+
let snapshot = {
|
|
22457
|
+
state,
|
|
22458
|
+
get sourceLength() {
|
|
22459
|
+
return this.state.cache.src.length;
|
|
22460
|
+
},
|
|
22461
|
+
get tokenCount() {
|
|
22462
|
+
return this.state.cache.tokens.length;
|
|
22463
|
+
}
|
|
22464
|
+
};
|
|
22465
|
+
return this.snapshots.add(snapshot), snapshot;
|
|
22466
|
+
}
|
|
22467
|
+
restore(snapshot, md) {
|
|
22468
|
+
if (!this.snapshots.has(snapshot))
|
|
22469
|
+
throw new TypeError("Invalid stream snapshot");
|
|
22470
|
+
let cache = snapshot.state.cache;
|
|
22471
|
+
return this.cache = cache, parserConfigEqual(cache.config, md) ? cache.tokens : this.parse(cache.src, cache.env, md);
|
|
22472
|
+
}
|
|
22473
|
+
append(segment, env, md) {
|
|
22474
|
+
let cached = this.cache;
|
|
22475
|
+
if (!cached)
|
|
22476
|
+
throw new Error("Stream append requires cached history; call stream.parse(fullSource) first");
|
|
22477
|
+
return this.ensureBoundaryState(cached), this.parse(cached.src + segment, env, md, segment);
|
|
22478
|
+
}
|
|
22479
|
+
parse(src, env, md, knownAppend) {
|
|
22480
|
+
let previousCache = this.cache, priorEnv = previousCache?.env, coreRules = md.core.ruler.getNamedRules(""), lineNormalizerIndex = coreRules.findIndex((rule) => rule.fn === normalize), blockRuleIndex = coreRules.findIndex((rule) => rule.fn === block), namedNormalizeRule = coreRules.find((rule) => rule.name === "normalize");
|
|
22382
22481
|
this.normalizeLineEndings = lineNormalizerIndex >= 0 && blockRuleIndex >= 0 && lineNormalizerIndex < blockRuleIndex;
|
|
22383
|
-
let envProvided = env,
|
|
22482
|
+
let envProvided = env, configChanged = !!previousCache && !parserConfigEqual(previousCache.config, md), customNormalize = namedNormalizeRule && namedNormalizeRule.fn !== normalize, nonstandardBuiltinNormalize = namedNormalizeRule && !this.normalizeLineEndings && src.includes("\r"), unknownPreBlockRule = blockRuleIndex < 0 || coreRules.slice(0, blockRuleIndex).some((rule) => rule.fn !== normalize);
|
|
22384
22483
|
this.tokenMapsTrusted = !(blockRuleIndex < 0 || coreRules.slice(blockRuleIndex + 1).some((rule) => rule.fn !== inline && rule.fn !== linkify && rule.fn !== replacements && rule.fn !== smartquotes && rule.fn !== text_join)), this.allowUntrustedTailReuse = this.tokenMapsTrusted || md.options?.streamTailLocalPostBlockRules === !0;
|
|
22385
|
-
let cached = customNormalize || nonstandardBuiltinNormalize || unknownPreBlockRule ? null : previousCache;
|
|
22484
|
+
let cached = configChanged || customNormalize || nonstandardBuiltinNormalize || unknownPreBlockRule ? null : previousCache;
|
|
22386
22485
|
if (beginParseDiagnostics(envProvided ?? previousCache?.env ?? priorEnv), !cached || envProvided && envProvided !== cached.env) {
|
|
22387
22486
|
let workingEnv = envProvided ?? previousCache?.env ?? priorEnv ?? {}, explicitChunkFallbackSetting$1 = !!md.__explicitStreamChunkFallbackSetting, canImplicitLargeInput$1 = typeof md.__canUseImplicitLargeInputStrategy == "function" ? md.__canUseImplicitLargeInputStrategy() : !0, wantsChunking$1 = !!md.options?.streamChunkedFallback, allowImplicitChunk$1 = !explicitChunkFallbackSetting$1 && canImplicitLargeInput$1, chunkedEnabled$1 = wantsChunking$1 || allowImplicitChunk$1, chunkAdaptive$1 = md.options?.streamChunkAdaptive !== !1, targetChunks$1 = md.options?.streamChunkTargetChunks ?? 8, chunkSizeCharsCfg$1 = md.options?.streamChunkSizeChars, chunkSizeLinesCfg$1 = md.options?.streamChunkSizeLines, chunkMaxChunksCfg$1 = md.options?.streamChunkMaxChunks, explicitChunkConfig$1 = !!md.__explicitStreamChunkConfig, auto$1 = md.options?.autoTuneChunks !== !1, chunkFenceAware$1 = md.options?.streamChunkFenceAware ?? !0, largeCachePolicy = md.options?.streamLargeCachePolicy ?? "retain", skipCacheChars = md.options?.streamSkipCacheAboveChars ?? this.DEFAULT_SKIP_CACHE_CHARS, skipCacheLines = md.options?.streamSkipCacheAboveLines ?? this.DEFAULT_SKIP_CACHE_LINES, srcLineCount, shouldSkipLargeCache = !1;
|
|
22388
|
-
if (largeCachePolicy === "skip" && (shouldSkipLargeCache = src.length >= skipCacheChars, !shouldSkipLargeCache && skipCacheLines !== void 0 && (srcLineCount = countLines(src), shouldSkipLargeCache = srcLineCount >= skipCacheLines)), shouldSkipLargeCache) {
|
|
22487
|
+
if (largeCachePolicy === "skip" && (shouldSkipLargeCache = src.length >= skipCacheChars, !shouldSkipLargeCache && skipCacheLines !== void 0 && (srcLineCount = countLines(src), shouldSkipLargeCache = srcLineCount >= skipCacheLines)), shouldSkipLargeCache && knownAppend === void 0 && !previousCache?.snapshotState) {
|
|
22389
22488
|
let parsed$2 = this.parseFullDocument(src, workingEnv, md, srcLineCount, !1);
|
|
22390
|
-
return this.stats.total += 1, this.stats.fullParses += 1, this.stats.lastMode = "full", setStrategyDiagnostics(workingEnv, {
|
|
22489
|
+
return this.cache = null, this.stats.total += 1, this.stats.fullParses += 1, this.stats.lastMode = "full", setStrategyDiagnostics(workingEnv, {
|
|
22391
22490
|
area: "stream",
|
|
22392
22491
|
path: "stream-full",
|
|
22393
22492
|
reason: "skip-cache-large-one-shot",
|
|
@@ -22403,26 +22502,28 @@ var StreamParser = class {
|
|
|
22403
22502
|
maxChunkLines: useLines,
|
|
22404
22503
|
fenceAware: recommendation?.fenceAware ?? chunkFenceAware$1,
|
|
22405
22504
|
maxChunks: useMaxChunks
|
|
22406
|
-
})
|
|
22407
|
-
return this.cache = {
|
|
22505
|
+
}), globalStateReason = getParseDiagnostics(workingEnv)?.chunk?.globalStateDetected ?? null, cache$2 = this.setCache({
|
|
22408
22506
|
src,
|
|
22409
22507
|
tokens,
|
|
22410
22508
|
env: workingEnv,
|
|
22411
22509
|
lineCount: srcLineCount,
|
|
22412
22510
|
lastSegment: void 0,
|
|
22413
|
-
globalStateReason
|
|
22414
|
-
},
|
|
22511
|
+
globalStateReason
|
|
22512
|
+
}, md);
|
|
22513
|
+
return this.updateCacheLineCount(cache$2, srcLineCount), this.recordChunkedParseResult(workingEnv, wantsChunking$1 ? "explicit-initial-large-doc" : "default-initial-large-doc"), tokens;
|
|
22415
22514
|
}
|
|
22416
22515
|
}
|
|
22417
22516
|
let parsed$1 = this.parseFullDocument(src, workingEnv, md, srcLineCount);
|
|
22418
|
-
|
|
22517
|
+
srcLineCount = parsed$1.lineCount;
|
|
22518
|
+
let cache$1 = this.setCache({
|
|
22419
22519
|
src,
|
|
22420
22520
|
tokens: parsed$1.tokens,
|
|
22421
22521
|
env: workingEnv,
|
|
22422
22522
|
lineCount: srcLineCount,
|
|
22423
22523
|
lastSegment: void 0,
|
|
22424
|
-
globalStateReason:
|
|
22425
|
-
},
|
|
22524
|
+
globalStateReason: parsed$1.globalStateReason
|
|
22525
|
+
}, md);
|
|
22526
|
+
return this.updateCacheLineCount(cache$1, srcLineCount), this.stats.total += 1, this.stats.fullParses += 1, this.stats.lastMode = "full", setStrategyDiagnostics(workingEnv, {
|
|
22426
22527
|
area: "stream",
|
|
22427
22528
|
path: "stream-full",
|
|
22428
22529
|
reason: "initial-parse",
|
|
@@ -22435,21 +22536,21 @@ var StreamParser = class {
|
|
|
22435
22536
|
path: "stream-cache",
|
|
22436
22537
|
reason: "same-source"
|
|
22437
22538
|
}), cached.tokens;
|
|
22438
|
-
let appendDelta = src.startsWith(cached.src) ? src.slice(cached.src.length) : null, cachedGlobalStateReason = cached.globalStateReason;
|
|
22539
|
+
let appendDelta = knownAppend !== void 0 ? knownAppend : src.startsWith(cached.src) ? src.slice(cached.src.length) : null, cachedGlobalStateReason = cached.globalStateReason;
|
|
22439
22540
|
cachedGlobalStateReason === void 0 && (cachedGlobalStateReason = detectGlobalMarkdownState(cached.src), cached.globalStateReason = cachedGlobalStateReason);
|
|
22440
22541
|
let currentGlobalStateReason = cachedGlobalStateReason ? null : appendDelta !== null ? this.detectGlobalStateForAppend(cached, appendDelta) : detectGlobalMarkdownState(src), nextGlobalStateReason = cachedGlobalStateReason || currentGlobalStateReason;
|
|
22441
22542
|
if (nextGlobalStateReason) {
|
|
22442
22543
|
let fallbackEnv$1 = envProvided ?? cached.env;
|
|
22443
22544
|
resetKnownGlobalMarkdownState(fallbackEnv$1);
|
|
22444
|
-
let
|
|
22445
|
-
return this.cache = {
|
|
22545
|
+
let parsed$1 = this.parseFullDocument(src, fallbackEnv$1, md), nextTokens$1 = parsed$1.tokens, lineCount = parsed$1.lineCount, cache$1 = this.setCache({
|
|
22446
22546
|
src,
|
|
22447
22547
|
tokens: nextTokens$1,
|
|
22448
22548
|
env: fallbackEnv$1,
|
|
22449
22549
|
lineCount,
|
|
22450
22550
|
lastSegment: void 0,
|
|
22451
|
-
globalStateReason:
|
|
22452
|
-
},
|
|
22551
|
+
globalStateReason: parsed$1.globalStateReason
|
|
22552
|
+
}, md);
|
|
22553
|
+
return this.updateCacheLineCount(cache$1, lineCount), this.stats.total += 1, this.stats.fullParses += 1, this.stats.lastMode = "full", setStrategyDiagnostics(fallbackEnv$1, {
|
|
22453
22554
|
area: "stream",
|
|
22454
22555
|
path: "stream-full",
|
|
22455
22556
|
reason: `global-state:${nextGlobalStateReason}`,
|
|
@@ -22457,23 +22558,23 @@ var StreamParser = class {
|
|
|
22457
22558
|
}), nextTokens$1;
|
|
22458
22559
|
}
|
|
22459
22560
|
let threshold = md.options?.streamOptimizationMinSize ?? this.MIN_SIZE_FOR_OPTIMIZATION;
|
|
22460
|
-
if (cached.src.length < threshold && src.length < threshold * 1.5 &&
|
|
22461
|
-
let fallbackEnv$1 = envProvided ?? cached.env, parsed$1 = this.parseFullDocument(src, fallbackEnv$1, md), nextTokens$1 = parsed$1.tokens, lineCount = parsed$1.lineCount
|
|
22462
|
-
return this.cache = {
|
|
22561
|
+
if (cached.src.length < threshold && src.length < threshold * 1.5 && appendDelta === null) {
|
|
22562
|
+
let fallbackEnv$1 = envProvided ?? cached.env, parsed$1 = this.parseFullDocument(src, fallbackEnv$1, md), nextTokens$1 = parsed$1.tokens, lineCount = parsed$1.lineCount, cache$1 = this.setCache({
|
|
22463
22563
|
src,
|
|
22464
22564
|
tokens: nextTokens$1,
|
|
22465
22565
|
env: fallbackEnv$1,
|
|
22466
22566
|
lineCount,
|
|
22467
22567
|
lastSegment: void 0,
|
|
22468
|
-
globalStateReason:
|
|
22469
|
-
},
|
|
22568
|
+
globalStateReason: parsed$1.globalStateReason
|
|
22569
|
+
}, md);
|
|
22570
|
+
return this.updateCacheLineCount(cache$1, lineCount), this.stats.total += 1, this.stats.fullParses += 1, this.stats.lastMode = "full", setStrategyDiagnostics(fallbackEnv$1, {
|
|
22470
22571
|
area: "stream",
|
|
22471
22572
|
path: "stream-full",
|
|
22472
22573
|
reason: "small-non-append",
|
|
22473
22574
|
unbounded: !!getParseDiagnostics(fallbackEnv$1)?.unbounded
|
|
22474
22575
|
}), nextTokens$1;
|
|
22475
22576
|
}
|
|
22476
|
-
let cachedLastSegment = this.ensureLastSegment(cached), verifiedUntrustedTail = this.tokenMapsTrusted || this.allowUntrustedTailReuse && (cached.lastSegmentVerified === !0 || !!(cachedLastSegment && this.hasVerifiedSegmentAnchor(cached, cachedLastSegment, md))), appended = appendDelta !== null && this.shouldPreferTailReparseForAppend(cached, verifiedUntrustedTail) || !this.tokenMapsTrusted ? null : this.getAppendedSegment(cached, src, appendDelta);
|
|
22577
|
+
let cachedLastSegment = this.ensureLastSegment(cached, knownAppend !== void 0), verifiedUntrustedTail = this.tokenMapsTrusted || this.allowUntrustedTailReuse && (cached.lastSegmentVerified === !0 || !!(cachedLastSegment && this.hasVerifiedSegmentAnchor(cached, cachedLastSegment, md))), appended = appendDelta !== null && this.shouldPreferTailReparseForAppend(cached, verifiedUntrustedTail) || !this.tokenMapsTrusted ? null : this.getAppendedSegment(cached, src, appendDelta);
|
|
22477
22578
|
if (appended) {
|
|
22478
22579
|
let cachedLineCount = cached.lineCount ?? countLines(cached.src), ctxLines = 3;
|
|
22479
22580
|
appended.length > 5e3 ? ctxLines = 8 : appended.length > 1e3 ? ctxLines = 6 : appended.length > 200 && (ctxLines = 4), ctxLines = Math.min(ctxLines, cachedLineCount);
|
|
@@ -22548,11 +22649,16 @@ var StreamParser = class {
|
|
|
22548
22649
|
}
|
|
22549
22650
|
dup > 0 && (appendedTokenStart += dup), a.length > appendedTokenStart && this.appendTokens(cached.tokens, a, appendedTokenStart);
|
|
22550
22651
|
}
|
|
22551
|
-
if (this.updateFenceMarkerCacheForAppend(cached, appended), cached.src = src, cached.globalStateReason = null, cached.lineCount = cachedLineCount + (appendedLineCount ?? countAppendedLines()), cached.tokens.length > appendStart) {
|
|
22652
|
+
if (cached.boundary ? this.updateBoundaryStateForAppend(cached, appended) : this.updateFenceMarkerCacheForAppend(cached, appended), cached.src = src, cached.globalStateReason = null, cached.lineCount = cachedLineCount + (appendedLineCount ?? countAppendedLines()), cached.tokens.length > appendStart) {
|
|
22552
22653
|
let appendedLastSegment = this.getLastSegment(cached.tokens, src, appendStart, cached.tokens.length, src.length - appended.length, cachedLineCount);
|
|
22553
|
-
|
|
22654
|
+
if (appendedLastSegment) {
|
|
22655
|
+
cached.lastSegment = appendedLastSegment;
|
|
22656
|
+
let appendedOffset = src.length - appended.length;
|
|
22657
|
+
cached.lastSegmentSource = appended.slice(Math.max(0, appendedLastSegment.srcOffset - appendedOffset));
|
|
22658
|
+
} else
|
|
22659
|
+
cached.lastSegment = void 0, cached.lastSegmentSource = void 0;
|
|
22554
22660
|
} else
|
|
22555
|
-
cached.lastSegment = void 0;
|
|
22661
|
+
cached.lastSegment = void 0, cached.lastSegmentSource = void 0;
|
|
22556
22662
|
return cached.lastSegmentVerified = void 0, this.stats.total += 1, this.stats.appendHits += 1, useUnboundedAppend && (this.stats.unboundedAppendHits = (this.stats.unboundedAppendHits || 0) + 1), this.stats.lastMode = "append", setStrategyDiagnostics(cached.env, {
|
|
22557
22663
|
area: "stream",
|
|
22558
22664
|
path: useUnboundedAppend ? "stream-unbounded-append" : "stream-append",
|
|
@@ -22560,7 +22666,7 @@ var StreamParser = class {
|
|
|
22560
22666
|
unbounded: useUnboundedAppend
|
|
22561
22667
|
}), cached.tokens;
|
|
22562
22668
|
}
|
|
22563
|
-
let fallbackEnv = envProvided ?? cached.env, tailReparsed = verifiedUntrustedTail ? this.tryTailSegmentReparse(src, cached, fallbackEnv, md, cachedLastSegment ?? void 0) : this.allowUntrustedTailReuse ? this.tryUntrustedParagraphTailReparse(src, cached, fallbackEnv, md) : null;
|
|
22669
|
+
let fallbackEnv = envProvided ?? cached.env, tailReparsed = verifiedUntrustedTail ? this.tryTailSegmentReparse(src, cached, fallbackEnv, md, cachedLastSegment ?? void 0, appendDelta ?? void 0) : this.allowUntrustedTailReuse ? this.tryUntrustedParagraphTailReparse(src, cached, fallbackEnv, md) : null;
|
|
22564
22670
|
if (tailReparsed)
|
|
22565
22671
|
return this.stats.total += 1, this.stats.tailHits += 1, this.stats.lastMode = "tail", setStrategyDiagnostics(fallbackEnv, {
|
|
22566
22672
|
area: "stream",
|
|
@@ -22577,26 +22683,28 @@ var StreamParser = class {
|
|
|
22577
22683
|
maxChunkLines: useLines,
|
|
22578
22684
|
fenceAware: recommendation?.fenceAware ?? chunkFenceAware,
|
|
22579
22685
|
maxChunks: useMaxChunks
|
|
22580
|
-
})
|
|
22581
|
-
return this.cache = {
|
|
22686
|
+
}), globalStateReason = getParseDiagnostics(fallbackEnv)?.chunk?.globalStateDetected ?? null, cache$1 = this.setCache({
|
|
22582
22687
|
src,
|
|
22583
22688
|
tokens,
|
|
22584
22689
|
env: fallbackEnv,
|
|
22585
22690
|
lineCount: srcLineCount2,
|
|
22586
22691
|
lastSegment: void 0,
|
|
22587
|
-
globalStateReason
|
|
22588
|
-
},
|
|
22692
|
+
globalStateReason
|
|
22693
|
+
}, md);
|
|
22694
|
+
return this.updateCacheLineCount(cache$1, srcLineCount2), this.recordChunkedParseResult(fallbackEnv, wantsChunking ? "explicit-fallback-large-doc" : "default-fallback-large-doc"), tokens;
|
|
22589
22695
|
}
|
|
22590
22696
|
}
|
|
22591
22697
|
let parsed = this.parseFullDocument(src, fallbackEnv, md, srcLineCount2), nextTokens = parsed.tokens;
|
|
22592
|
-
|
|
22698
|
+
srcLineCount2 = parsed.lineCount;
|
|
22699
|
+
let cache = this.setCache({
|
|
22593
22700
|
src,
|
|
22594
22701
|
tokens: nextTokens,
|
|
22595
22702
|
env: fallbackEnv,
|
|
22596
22703
|
lineCount: srcLineCount2,
|
|
22597
22704
|
lastSegment: void 0,
|
|
22598
|
-
globalStateReason:
|
|
22599
|
-
},
|
|
22705
|
+
globalStateReason: parsed.globalStateReason
|
|
22706
|
+
}, md);
|
|
22707
|
+
return this.updateCacheLineCount(cache, srcLineCount2), this.stats.total += 1, this.stats.fullParses += 1, this.stats.lastMode = "full", setStrategyDiagnostics(fallbackEnv, {
|
|
22600
22708
|
area: "stream",
|
|
22601
22709
|
path: "stream-full",
|
|
22602
22710
|
reason: "fallback-full",
|
|
@@ -22622,11 +22730,10 @@ var StreamParser = class {
|
|
|
22622
22730
|
});
|
|
22623
22731
|
}
|
|
22624
22732
|
parseFullDocument(src, env, md, knownLineCount, needLineCount = !0) {
|
|
22625
|
-
let currentGlobalStateReason = detectGlobalMarkdownState(src);
|
|
22626
22733
|
getKnownGlobalMarkdownState(env) && resetKnownGlobalMarkdownState(env);
|
|
22627
22734
|
let autoUnboundedDecision = typeof md.__canUseImplicitLargeInputStrategy != "function" || md.__canUseImplicitLargeInputStrategy() ? getAutoUnboundedDecision(md, src.length, knownLineCount) : "no";
|
|
22628
22735
|
if (autoUnboundedDecision === "yes") {
|
|
22629
|
-
let tokens = parseStringUnbounded(md, src, env);
|
|
22736
|
+
let tokens = parseStringUnbounded(md, src, env), globalStateReason = getParseDiagnostics(env)?.unbounded?.globalStateDetected ?? null;
|
|
22630
22737
|
return setStrategyDiagnostics(env, {
|
|
22631
22738
|
area: "stream",
|
|
22632
22739
|
path: "stream-full",
|
|
@@ -22634,12 +22741,13 @@ var StreamParser = class {
|
|
|
22634
22741
|
unbounded: !0
|
|
22635
22742
|
}), {
|
|
22636
22743
|
tokens,
|
|
22637
|
-
lineCount: knownLineCount ?? (needLineCount ? countLines(src) : 0)
|
|
22744
|
+
lineCount: knownLineCount ?? (needLineCount ? countLines(src) : 0),
|
|
22745
|
+
globalStateReason
|
|
22638
22746
|
};
|
|
22639
22747
|
}
|
|
22640
22748
|
let lineCount = knownLineCount;
|
|
22641
22749
|
if (autoUnboundedDecision === "need-lines" && (lineCount = countLines(src), shouldAutoUseUnbounded(md, src.length, lineCount))) {
|
|
22642
|
-
let tokens = parseStringUnbounded(md, src, env);
|
|
22750
|
+
let tokens = parseStringUnbounded(md, src, env), globalStateReason = getParseDiagnostics(env)?.unbounded?.globalStateDetected ?? null;
|
|
22643
22751
|
return setStrategyDiagnostics(env, {
|
|
22644
22752
|
area: "stream",
|
|
22645
22753
|
path: "stream-full",
|
|
@@ -22647,12 +22755,16 @@ var StreamParser = class {
|
|
|
22647
22755
|
unbounded: !0
|
|
22648
22756
|
}), {
|
|
22649
22757
|
tokens,
|
|
22650
|
-
lineCount
|
|
22758
|
+
lineCount,
|
|
22759
|
+
globalStateReason
|
|
22651
22760
|
};
|
|
22652
22761
|
}
|
|
22653
|
-
|
|
22762
|
+
lineCount === void 0 && (lineCount = needLineCount ? countLines(src) : 0);
|
|
22763
|
+
let currentGlobalStateReason = detectGlobalMarkdownState(src);
|
|
22764
|
+
return {
|
|
22654
22765
|
tokens: runWithKnownGlobalMarkdownState(env, currentGlobalStateReason, () => this.core.parse(src, env, md).tokens),
|
|
22655
|
-
lineCount
|
|
22766
|
+
lineCount,
|
|
22767
|
+
globalStateReason: currentGlobalStateReason
|
|
22656
22768
|
};
|
|
22657
22769
|
}
|
|
22658
22770
|
shouldUseUnboundedAppend(src, _cached, appended) {
|
|
@@ -22660,8 +22772,8 @@ var StreamParser = class {
|
|
|
22660
22772
|
}
|
|
22661
22773
|
getAppendedSegment(cache, next, knownAppend) {
|
|
22662
22774
|
let prev = cache.src;
|
|
22663
|
-
if (knownAppend === null || knownAppend === void 0 && !next.startsWith(prev) || !prev.endsWith(`
|
|
22664
|
-
`))
|
|
22775
|
+
if (knownAppend === null || knownAppend === void 0 && !next.startsWith(prev) || (knownAppend !== void 0 ? !this.ensureBoundaryState(cache).endsWithNewline : !prev.endsWith(`
|
|
22776
|
+
`)))
|
|
22665
22777
|
return null;
|
|
22666
22778
|
let segment = knownAppend ?? next.slice(prev.length);
|
|
22667
22779
|
if (!segment)
|
|
@@ -22678,47 +22790,69 @@ var StreamParser = class {
|
|
|
22678
22790
|
if (trimmedFirstLine.length === 0)
|
|
22679
22791
|
return null;
|
|
22680
22792
|
if (/^[-=]+$/.test(trimmedFirstLine)) {
|
|
22681
|
-
let
|
|
22793
|
+
let previousLineNonBlank;
|
|
22794
|
+
if (knownAppend !== void 0)
|
|
22795
|
+
previousLineNonBlank = this.ensureBoundaryState(cache).previousLineNonBlank;
|
|
22796
|
+
else {
|
|
22797
|
+
let prevWithoutTrailingNewline = prev.slice(0, -1), lastBreak = prevWithoutTrailingNewline.lastIndexOf(`
|
|
22682
22798
|
`);
|
|
22683
|
-
|
|
22799
|
+
previousLineNonBlank = prevWithoutTrailingNewline.slice(lastBreak + 1).trim().length > 0;
|
|
22800
|
+
}
|
|
22801
|
+
if (previousLineNonBlank)
|
|
22684
22802
|
return null;
|
|
22685
22803
|
}
|
|
22686
|
-
|
|
22687
|
-
|
|
22804
|
+
if (knownAppend !== void 0) {
|
|
22805
|
+
let lastSegment = this.ensureLastSegment(cache);
|
|
22806
|
+
if (lastSegment && this.segmentHasFence(cache, lastSegment)) {
|
|
22807
|
+
let scanStart = this.tokenMapsTrusted ? this.ensureSegmentSourceOffset(cache, lastSegment) : 0;
|
|
22808
|
+
if (this.endsInsideOpenFence(prev, scanStart))
|
|
22809
|
+
return null;
|
|
22810
|
+
}
|
|
22811
|
+
} else {
|
|
22812
|
+
let scanStart = this.tokenMapsTrusted ? this.ensureLastSegment(cache)?.srcOffset ?? 0 : 0;
|
|
22813
|
+
if ((this.tokenMapsTrusted || this.cacheHasFenceMarker(cache)) && this.endsInsideOpenFence(prev, scanStart))
|
|
22814
|
+
return null;
|
|
22815
|
+
}
|
|
22816
|
+
return this.mayContainReferenceDefinition(segment) ? null : segment;
|
|
22688
22817
|
}
|
|
22689
|
-
tryTailSegmentReparse(src, cached, env, md, segmentOverride) {
|
|
22818
|
+
tryTailSegmentReparse(src, cached, env, md, segmentOverride, knownAppend) {
|
|
22690
22819
|
let lastSegment = segmentOverride ?? this.ensureLastSegment(cached);
|
|
22691
|
-
if (!lastSegment
|
|
22820
|
+
if (!lastSegment)
|
|
22692
22821
|
return null;
|
|
22693
|
-
let
|
|
22694
|
-
if (
|
|
22822
|
+
let directAppend = knownAppend !== void 0;
|
|
22823
|
+
if (directAppend && this.ensureSegmentSourceOffset(cached, lastSegment), lastSegment.srcOffset <= 0 && lastSegment.tokenStart <= 0)
|
|
22695
22824
|
return null;
|
|
22696
|
-
|
|
22825
|
+
if (!directAppend) {
|
|
22826
|
+
let stablePrefix = cached.src.slice(0, lastSegment.srcOffset);
|
|
22827
|
+
if (!src.startsWith(stablePrefix))
|
|
22828
|
+
return null;
|
|
22829
|
+
}
|
|
22830
|
+
let prevTail = directAppend ? cached.lastSegmentSource ?? cached.src.slice(lastSegment.srcOffset) : cached.src.slice(lastSegment.srcOffset), nextTail = directAppend ? prevTail + knownAppend : src.slice(lastSegment.srcOffset);
|
|
22697
22831
|
if (nextTail === prevTail)
|
|
22698
22832
|
return null;
|
|
22699
|
-
let appended = src.startsWith(cached.src) ? src.slice(cached.src.length) : null, postBlockSrc = this.getNormalizedUpdatedSource(cached, src);
|
|
22833
|
+
let appended = directAppend ? knownAppend : src.startsWith(cached.src) ? src.slice(cached.src.length) : null, postBlockSrc = directAppend && this.tokenMapsTrusted ? src : this.getNormalizedUpdatedSource(cached, src, knownAppend);
|
|
22700
22834
|
if (appended) {
|
|
22701
22835
|
let merged = this.tryContainerTailAppendMerge(src, cached, env, md, lastSegment, appended, postBlockSrc);
|
|
22702
22836
|
if (merged)
|
|
22703
|
-
return merged;
|
|
22837
|
+
return cached.lastSegmentSource = directAppend ? nextTail : void 0, merged;
|
|
22704
22838
|
}
|
|
22705
22839
|
if (this.mayContainReferenceDefinition(prevTail) || this.mayContainReferenceDefinition(nextTail))
|
|
22706
22840
|
return null;
|
|
22707
22841
|
try {
|
|
22708
22842
|
let parsedTail = this.parseAtLineOffset(nextTail, env, md, lastSegment.lineStart, postBlockSrc), tailState = parsedTail.state, localLastSegment = this.getLastSegment(tailState.tokens, nextTail, 0, tailState.tokens.length, parsedTail.mapsShifted ? 0 : void 0, parsedTail.mapsShifted ? lastSegment.lineStart : void 0);
|
|
22709
|
-
return lastSegment.lineStart > 0 && !parsedTail.mapsShifted && this.shiftTokenLines(tailState.tokens, lastSegment.lineStart), appended ? this.updateFenceMarkerCacheForAppend(cached, appended) : cached.hasFenceMarker = void 0, cached.src = src, cached.normalizedSrc = postBlockSrc, cached.env = env, cached.globalStateReason = null, cached.globalStateCarry = void 0, cached.tokens.length = lastSegment.tokenStart, this.appendTokens(cached.tokens, tailState.tokens), cached.lineCount = lastSegment.lineStart + countLines(nextTail), localLastSegment ? cached.lastSegment = {
|
|
22843
|
+
return lastSegment.lineStart > 0 && !parsedTail.mapsShifted && this.shiftTokenLines(tailState.tokens, lastSegment.lineStart), appended ? directAppend ? this.updateBoundaryStateForAppend(cached, appended) : this.updateFenceMarkerCacheForAppend(cached, appended) : (cached.boundary = void 0, cached.hasFenceMarker = void 0), cached.src = src, cached.normalizedSrc = postBlockSrc, cached.env = env, cached.globalStateReason = null, (!directAppend || !appended) && (cached.globalStateCarry = void 0), cached.tokens.length = lastSegment.tokenStart, this.appendTokens(cached.tokens, tailState.tokens), cached.lineCount = lastSegment.lineStart + countLines(nextTail), localLastSegment ? (cached.lastSegment = {
|
|
22710
22844
|
tokenStart: lastSegment.tokenStart + localLastSegment.tokenStart,
|
|
22711
22845
|
tokenEnd: lastSegment.tokenStart + localLastSegment.tokenEnd,
|
|
22712
22846
|
lineStart: parsedTail.mapsShifted ? localLastSegment.lineStart : lastSegment.lineStart + localLastSegment.lineStart,
|
|
22713
22847
|
lineEnd: parsedTail.mapsShifted ? localLastSegment.lineEnd : lastSegment.lineStart + localLastSegment.lineEnd,
|
|
22714
22848
|
srcOffset: lastSegment.srcOffset + localLastSegment.srcOffset
|
|
22715
|
-
} : cached.lastSegment = null, cached.lastSegmentVerified = void 0, cached.tokens;
|
|
22849
|
+
}, cached.lastSegmentSource = directAppend ? nextTail.slice(localLastSegment.srcOffset) : void 0) : (cached.lastSegment = null, cached.lastSegmentSource = void 0), cached.lastSegmentVerified = void 0, cached.tokens;
|
|
22716
22850
|
} catch {
|
|
22717
22851
|
return null;
|
|
22718
22852
|
}
|
|
22719
22853
|
}
|
|
22720
22854
|
tryUntrustedParagraphTailReparse(src, cached, env, md) {
|
|
22721
|
-
if (this.endsWithBlankLine(cached.src))
|
|
22855
|
+
if (cached.boundary ? cached.boundary.endsWithBlankLine : this.endsWithBlankLine(cached.src))
|
|
22722
22856
|
return null;
|
|
22723
22857
|
let lastSegment = this.ensureLastSegment(cached);
|
|
22724
22858
|
if (!lastSegment || cached.tokens[lastSegment.tokenStart]?.type !== "paragraph_open")
|
|
@@ -22749,6 +22883,7 @@ var StreamParser = class {
|
|
|
22749
22883
|
return count;
|
|
22750
22884
|
}
|
|
22751
22885
|
hasVerifiedSegmentAnchor(cache, segment, md) {
|
|
22886
|
+
segment.srcOffset < 0 && this.ensureSegmentSourceOffset(cache, segment);
|
|
22752
22887
|
let lineCount = cache.lineCount ?? countLines(cache.src), docLineCount = this.getDocLineCount(cache.src, lineCount);
|
|
22753
22888
|
if (!(segment.lineStart >= 0 && segment.lineStart <= segment.lineEnd && segment.lineEnd <= docLineCount && segment.srcOffset < cache.src.length))
|
|
22754
22889
|
return !1;
|
|
@@ -22775,6 +22910,10 @@ var StreamParser = class {
|
|
|
22775
22910
|
return !1;
|
|
22776
22911
|
}
|
|
22777
22912
|
}
|
|
22913
|
+
normalizeSource(src) {
|
|
22914
|
+
return src.replace(/\r\n?/g, `
|
|
22915
|
+
`).replace(/\0/g, "\uFFFD");
|
|
22916
|
+
}
|
|
22778
22917
|
cacheHasFenceMarker(cache) {
|
|
22779
22918
|
return cache.hasFenceMarker === void 0 && (cache.hasFenceMarker = cache.src.includes("```") || cache.src.includes("~~~")), cache.hasFenceMarker;
|
|
22780
22919
|
}
|
|
@@ -22784,16 +22923,12 @@ var StreamParser = class {
|
|
|
22784
22923
|
let boundary = cache.src.slice(-2) + appended;
|
|
22785
22924
|
cache.hasFenceMarker = boundary.includes("```") || boundary.includes("~~~");
|
|
22786
22925
|
}
|
|
22787
|
-
|
|
22788
|
-
return src.replace(/\r\n?/g, `
|
|
22789
|
-
`).replace(/\0/g, "\uFFFD");
|
|
22790
|
-
}
|
|
22791
|
-
getNormalizedUpdatedSource(cache, next) {
|
|
22926
|
+
getNormalizedUpdatedSource(cache, next, knownAppend) {
|
|
22792
22927
|
if (!this.normalizeLineEndings)
|
|
22793
22928
|
return next;
|
|
22794
|
-
if (!next.startsWith(cache.src))
|
|
22929
|
+
if (knownAppend === void 0 && !next.startsWith(cache.src))
|
|
22795
22930
|
return this.normalizeSource(next);
|
|
22796
|
-
let normalizedCached = cache.normalizedSrc ?? this.normalizeSource(cache.src), appended = next.slice(cache.src.length), normalizedAppend = this.normalizeSource(appended);
|
|
22931
|
+
let normalizedCached = cache.normalizedSrc ?? this.normalizeSource(cache.src), appended = knownAppend ?? next.slice(cache.src.length), normalizedAppend = this.normalizeSource(appended);
|
|
22797
22932
|
return cache.src.endsWith("\r") && appended.startsWith(`
|
|
22798
22933
|
`) && (normalizedAppend = normalizedAppend.slice(1)), normalizedCached + normalizedAppend;
|
|
22799
22934
|
}
|
|
@@ -22880,15 +23015,26 @@ var StreamParser = class {
|
|
|
22880
23015
|
peek() {
|
|
22881
23016
|
return this.cache?.tokens ?? EMPTY_TOKENS;
|
|
22882
23017
|
}
|
|
23018
|
+
hasCache() {
|
|
23019
|
+
return this.cache !== null;
|
|
23020
|
+
}
|
|
22883
23021
|
getStats() {
|
|
22884
23022
|
return { ...this.stats };
|
|
22885
23023
|
}
|
|
23024
|
+
setCache(cache, md) {
|
|
23025
|
+
let snapshotState = this.cache?.snapshotState, nextCache = {
|
|
23026
|
+
...cache,
|
|
23027
|
+
config: copyParserConfig(md),
|
|
23028
|
+
snapshotState
|
|
23029
|
+
};
|
|
23030
|
+
return snapshotState && (snapshotState.cache = nextCache), this.cache = nextCache, nextCache;
|
|
23031
|
+
}
|
|
22886
23032
|
appendTokens(target, source, start = 0, end = source.length) {
|
|
22887
23033
|
for (let i = start; i < end; i++)
|
|
22888
23034
|
target.push(source[i]);
|
|
22889
23035
|
}
|
|
22890
23036
|
updateCacheLineCount(cache, lineCount) {
|
|
22891
|
-
cache.lineCount = lineCount ?? countLines(cache.src), cache.lastSegment = void 0, cache.lastSegmentVerified = void 0, cache.normalizedSrc = void 0, cache.globalStateCarry = void 0;
|
|
23037
|
+
cache.lineCount = lineCount ?? countLines(cache.src), cache.lastSegment = void 0, cache.lastSegmentVerified = void 0, cache.normalizedSrc = void 0, cache.globalStateCarry = cache.src.slice(-GLOBAL_STATE_APPEND_SCAN_WINDOW), cache.boundary = void 0, cache.lastSegmentSource = void 0;
|
|
22892
23038
|
}
|
|
22893
23039
|
detectGlobalStateForAppend(cache, appended) {
|
|
22894
23040
|
if (cache.globalStateReason)
|
|
@@ -22896,10 +23042,10 @@ var StreamParser = class {
|
|
|
22896
23042
|
let text$1 = (cache.globalStateCarry ?? cache.src.slice(-GLOBAL_STATE_APPEND_SCAN_WINDOW)) + appended, reason = detectGlobalMarkdownState(text$1);
|
|
22897
23043
|
return cache.globalStateCarry = text$1.length > GLOBAL_STATE_APPEND_SCAN_WINDOW ? text$1.slice(text$1.length - GLOBAL_STATE_APPEND_SCAN_WINDOW) : text$1, reason && (cache.globalStateReason = reason), reason;
|
|
22898
23044
|
}
|
|
22899
|
-
ensureLastSegment(cache) {
|
|
22900
|
-
return cache.lastSegment !== void 0 || (cache.lastSegment = this.getLastSegment(cache.tokens, cache.src)), cache.lastSegment;
|
|
23045
|
+
ensureLastSegment(cache, skipSourceOffset = !1) {
|
|
23046
|
+
return cache.lastSegment !== void 0 || (cache.lastSegment = this.getLastSegment(cache.tokens, cache.src, 0, cache.tokens.length, void 0, void 0, skipSourceOffset)), cache.lastSegment;
|
|
22901
23047
|
}
|
|
22902
|
-
getLastSegment(tokens, src, tokenStart = 0, tokenEnd = tokens.length, knownSrcOffset, knownLineStart) {
|
|
23048
|
+
getLastSegment(tokens, src, tokenStart = 0, tokenEnd = tokens.length, knownSrcOffset, knownLineStart, skipSourceOffset = !1) {
|
|
22903
23049
|
if (tokenEnd <= tokenStart)
|
|
22904
23050
|
return null;
|
|
22905
23051
|
let lineStart = Number.POSITIVE_INFINITY, lineEnd$2 = -1, depth = 0;
|
|
@@ -22917,7 +23063,7 @@ var StreamParser = class {
|
|
|
22917
23063
|
tokenEnd,
|
|
22918
23064
|
lineStart: resolvedStart,
|
|
22919
23065
|
lineEnd: resolvedEnd,
|
|
22920
|
-
srcOffset: this.getLineStartOffset(src, resolvedStart, knownSrcOffset, knownLineStart)
|
|
23066
|
+
srcOffset: skipSourceOffset ? -1 : this.getLineStartOffset(src, resolvedStart, knownSrcOffset, knownLineStart)
|
|
22921
23067
|
};
|
|
22922
23068
|
}
|
|
22923
23069
|
continue;
|
|
@@ -22929,12 +23075,38 @@ var StreamParser = class {
|
|
|
22929
23075
|
tokenEnd,
|
|
22930
23076
|
lineStart: resolvedStart,
|
|
22931
23077
|
lineEnd: resolvedEnd,
|
|
22932
|
-
srcOffset: this.getLineStartOffset(src, resolvedStart, knownSrcOffset, knownLineStart)
|
|
23078
|
+
srcOffset: skipSourceOffset ? -1 : this.getLineStartOffset(src, resolvedStart, knownSrcOffset, knownLineStart)
|
|
22933
23079
|
};
|
|
22934
23080
|
}
|
|
22935
23081
|
}
|
|
22936
23082
|
return null;
|
|
22937
23083
|
}
|
|
23084
|
+
segmentHasFence(cache, segment) {
|
|
23085
|
+
let end = Math.min(segment.tokenEnd, cache.tokens.length);
|
|
23086
|
+
for (let i = segment.tokenStart; i < end; i++)
|
|
23087
|
+
if (cache.tokens[i].type === "fence")
|
|
23088
|
+
return !0;
|
|
23089
|
+
return !1;
|
|
23090
|
+
}
|
|
23091
|
+
ensureSegmentSourceOffset(cache, segment) {
|
|
23092
|
+
if (segment.srcOffset < 0) {
|
|
23093
|
+
let lineCount = cache.lineCount;
|
|
23094
|
+
segment.srcOffset = lineCount !== void 0 && segment.lineStart <= lineCount && segment.lineEnd <= lineCount + 1 ? this.getLineStartOffsetFromEnd(cache.src, segment.lineStart, lineCount) : this.getLineStartOffset(cache.src, segment.lineStart);
|
|
23095
|
+
}
|
|
23096
|
+
return segment.srcOffset;
|
|
23097
|
+
}
|
|
23098
|
+
getLineStartOffsetFromEnd(src, line, lineCount) {
|
|
23099
|
+
if (line <= 0)
|
|
23100
|
+
return 0;
|
|
23101
|
+
let remaining = lineCount - line + 1, pos = src.length;
|
|
23102
|
+
for (; remaining > 0; ) {
|
|
23103
|
+
if (pos = src.lastIndexOf(`
|
|
23104
|
+
`, pos - 1), pos < 0)
|
|
23105
|
+
return 0;
|
|
23106
|
+
remaining--;
|
|
23107
|
+
}
|
|
23108
|
+
return pos + 1;
|
|
23109
|
+
}
|
|
22938
23110
|
getLineStartOffset(src, line, knownSrcOffset, knownLineStart) {
|
|
22939
23111
|
return knownSrcOffset !== void 0 && knownLineStart !== void 0 && line >= knownLineStart ? this.getLineStartOffsetFrom(src, knownSrcOffset, line - knownLineStart) : this.getLineStartOffsetFrom(src, 0, line);
|
|
22940
23112
|
}
|
|
@@ -22961,7 +23133,7 @@ var StreamParser = class {
|
|
|
22961
23133
|
return src.includes("]:") ? /(?:^|\n)[ \t]{0,3}\[[^\]\n]+\]:/.test(src) : !1;
|
|
22962
23134
|
}
|
|
22963
23135
|
canDirectlyParseAppend(cache) {
|
|
22964
|
-
if (!this.tokenMapsTrusted || !this.endsWithBlankLine(cache.src))
|
|
23136
|
+
if (!this.tokenMapsTrusted || !(cache.boundary ? cache.boundary.endsWithBlankLine : this.endsWithBlankLine(cache.src)))
|
|
22965
23137
|
return !1;
|
|
22966
23138
|
let lastSegment = this.ensureLastSegment(cache);
|
|
22967
23139
|
if (!lastSegment)
|
|
@@ -22994,8 +23166,9 @@ var StreamParser = class {
|
|
|
22994
23166
|
}
|
|
22995
23167
|
}
|
|
22996
23168
|
tryListTailAppendMerge(src, cached, env, md, lastSegment, appended, listOpen, postBlockSrc) {
|
|
22997
|
-
if (cached.src.length === 0 || cached.src.charCodeAt(cached.src.length - 1)
|
|
23169
|
+
if (cached.src.length === 0 || !(cached.boundary ? cached.boundary.endsWithNewline : cached.src.charCodeAt(cached.src.length - 1) === 10))
|
|
22998
23170
|
return null;
|
|
23171
|
+
this.ensureSegmentSourceOffset(cached, lastSegment);
|
|
22999
23172
|
let segmentLineSpan = lastSegment.lineEnd - lastSegment.lineStart, segmentChars = cached.src.length - lastSegment.srcOffset;
|
|
23000
23173
|
if (segmentLineSpan < this.MIN_LIST_LINES_FOR_MERGE && segmentChars < this.MIN_LIST_CHARS_FOR_MERGE)
|
|
23001
23174
|
return null;
|
|
@@ -23013,10 +23186,10 @@ var StreamParser = class {
|
|
|
23013
23186
|
return null;
|
|
23014
23187
|
lineOffset > 0 && !mapsShifted && this.shiftTokenLines(inserted, lineOffset);
|
|
23015
23188
|
let existingMode = this.getListParagraphMode(cached.tokens, lastSegment.tokenStart, cached.tokens.length, listOpen.level), appendedMode = this.getListParagraphMode(parsed, 0, parsed.length, 0);
|
|
23016
|
-
(existingMode === "loose" || appendedMode === "loose" || this.endsWithBlankLine(cached.src) || (parsed[0]?.map?.[0] ?? 0) - (mapsShifted ? lineOffset : 0) > 0) && (this.setListParagraphVisibility(cached.tokens, lastSegment.tokenStart, cached.tokens.length, listOpen.level, !1), this.setListParagraphVisibility(inserted, 0, inserted.length, listOpen.level, !1)), cached.tokens.splice(cached.tokens.length - 1, 0, ...inserted), this.updateFenceMarkerCacheForAppend(cached, appended), cached.src = src, cached.normalizedSrc = postBlockSrc, cached.env = env, cached.globalStateReason = null;
|
|
23189
|
+
(existingMode === "loose" || appendedMode === "loose" || (cached.boundary ? cached.boundary.endsWithBlankLine : this.endsWithBlankLine(cached.src)) || (parsed[0]?.map?.[0] ?? 0) - (mapsShifted ? lineOffset : 0) > 0) && (this.setListParagraphVisibility(cached.tokens, lastSegment.tokenStart, cached.tokens.length, listOpen.level, !1), this.setListParagraphVisibility(inserted, 0, inserted.length, listOpen.level, !1)), cached.tokens.splice(cached.tokens.length - 1, 0, ...inserted), cached.boundary ? this.updateBoundaryStateForAppend(cached, appended) : this.updateFenceMarkerCacheForAppend(cached, appended), cached.src = src, cached.normalizedSrc = postBlockSrc, cached.env = env, cached.globalStateReason = null;
|
|
23017
23190
|
let nextLineCount = lineOffset + countLines(appended);
|
|
23018
23191
|
cached.lineCount = nextLineCount;
|
|
23019
|
-
let nextDocLineCount = this.
|
|
23192
|
+
let nextDocLineCount = this.getCachedDocLineCount(cached, nextLineCount);
|
|
23020
23193
|
return listOpen.map && (listOpen.map[1] = nextDocLineCount), cached.lastSegment = {
|
|
23021
23194
|
tokenStart: lastSegment.tokenStart,
|
|
23022
23195
|
tokenEnd: cached.tokens.length,
|
|
@@ -23026,8 +23199,9 @@ var StreamParser = class {
|
|
|
23026
23199
|
}, cached.lastSegmentVerified = !0, cached.tokens;
|
|
23027
23200
|
}
|
|
23028
23201
|
tryTableTailAppendMerge(src, cached, env, md, lastSegment, appended, tableOpen, postBlockSrc) {
|
|
23029
|
-
if (cached.src.length === 0 || cached.src.charCodeAt(cached.src.length - 1)
|
|
23202
|
+
if (cached.src.length === 0 || !(cached.boundary ? cached.boundary.endsWithNewline : cached.src.charCodeAt(cached.src.length - 1) === 10) || /(?:^|\n)[ \t]*\n/.test(appended))
|
|
23030
23203
|
return null;
|
|
23204
|
+
this.ensureSegmentSourceOffset(cached, lastSegment);
|
|
23031
23205
|
let segmentLineSpan = lastSegment.lineEnd - lastSegment.lineStart, segmentChars = cached.src.length - lastSegment.srcOffset;
|
|
23032
23206
|
if (segmentLineSpan < this.MIN_TABLE_LINES_FOR_MERGE && segmentChars < this.MIN_TABLE_CHARS_FOR_MERGE)
|
|
23033
23207
|
return null;
|
|
@@ -23051,10 +23225,10 @@ var StreamParser = class {
|
|
|
23051
23225
|
return null;
|
|
23052
23226
|
lineOffset !== 0 && !mapsShifted && this.shiftTokenLines(inserted, lineOffset);
|
|
23053
23227
|
let insertAt = cachedSection.tbodyCloseIndex >= 0 ? cachedSection.tbodyCloseIndex : cachedSection.tableCloseIndex, previousLineCount = cached.lineCount ?? countLines(cached.src);
|
|
23054
|
-
cached.tokens.splice(insertAt, 0, ...inserted), this.updateFenceMarkerCacheForAppend(cached, appended), cached.src = src, cached.normalizedSrc = postBlockSrc, cached.env = env, cached.globalStateReason = null;
|
|
23228
|
+
cached.tokens.splice(insertAt, 0, ...inserted), cached.boundary ? this.updateBoundaryStateForAppend(cached, appended) : this.updateFenceMarkerCacheForAppend(cached, appended), cached.src = src, cached.normalizedSrc = postBlockSrc, cached.env = env, cached.globalStateReason = null;
|
|
23055
23229
|
let nextLineCount = previousLineCount + countLines(appended);
|
|
23056
23230
|
cached.lineCount = nextLineCount;
|
|
23057
|
-
let nextDocLineCount = this.
|
|
23231
|
+
let nextDocLineCount = this.getCachedDocLineCount(cached, nextLineCount);
|
|
23058
23232
|
if (tableOpen.map && (tableOpen.map[1] = nextDocLineCount), cachedSection.tbodyOpenIndex >= 0) {
|
|
23059
23233
|
let tbodyOpen = cached.tokens[cachedSection.tbodyOpenIndex];
|
|
23060
23234
|
tbodyOpen?.map && (tbodyOpen.map[1] = nextDocLineCount);
|
|
@@ -23161,7 +23335,7 @@ var StreamParser = class {
|
|
|
23161
23335
|
case "paragraph_open":
|
|
23162
23336
|
case "code_block":
|
|
23163
23337
|
case "html_block":
|
|
23164
|
-
return !this.endsWithBlankLine(cache.src);
|
|
23338
|
+
return !(cache.boundary ? cache.boundary.endsWithBlankLine : this.endsWithBlankLine(cache.src));
|
|
23165
23339
|
default:
|
|
23166
23340
|
return lastToken?.nesting === 1;
|
|
23167
23341
|
}
|
|
@@ -23181,9 +23355,41 @@ var StreamParser = class {
|
|
|
23181
23355
|
}
|
|
23182
23356
|
return !0;
|
|
23183
23357
|
}
|
|
23358
|
+
ensureBoundaryState(cache) {
|
|
23359
|
+
if (cache.boundary)
|
|
23360
|
+
return cache.boundary;
|
|
23361
|
+
let src = cache.src, len = src.length, endsWithNewline = len > 0 && src.charCodeAt(len - 1) === 10, lineEnd$2 = endsWithNewline ? len - 1 : len, lineStart = lineEnd$2 - 1;
|
|
23362
|
+
for (; lineStart >= 0 && src.charCodeAt(lineStart) !== 10; )
|
|
23363
|
+
lineStart--;
|
|
23364
|
+
let lineNonBlank = !1;
|
|
23365
|
+
for (let i = lineStart + 1; i < lineEnd$2; i++) {
|
|
23366
|
+
let ch = src.charCodeAt(i);
|
|
23367
|
+
if (ch !== 32 && ch !== 9) {
|
|
23368
|
+
lineNonBlank = !0;
|
|
23369
|
+
break;
|
|
23370
|
+
}
|
|
23371
|
+
}
|
|
23372
|
+
return cache.boundary = {
|
|
23373
|
+
currentLineNonBlank: endsWithNewline ? !1 : lineNonBlank,
|
|
23374
|
+
previousLineNonBlank: endsWithNewline ? lineNonBlank : !1,
|
|
23375
|
+
endsWithNewline,
|
|
23376
|
+
endsWithBlankLine: this.endsWithBlankLine(src)
|
|
23377
|
+
}, cache.boundary;
|
|
23378
|
+
}
|
|
23379
|
+
updateBoundaryStateForAppend(cache, appended) {
|
|
23380
|
+
let boundary = this.ensureBoundaryState(cache), currentLineNonBlank = boundary.currentLineNonBlank, previousLineNonBlank = boundary.previousLineNonBlank;
|
|
23381
|
+
for (let i = 0; i < appended.length; i++) {
|
|
23382
|
+
let ch = appended.charCodeAt(i);
|
|
23383
|
+
ch === 10 ? (previousLineNonBlank = currentLineNonBlank, currentLineNonBlank = !1) : ch !== 32 && ch !== 9 && (currentLineNonBlank = !0);
|
|
23384
|
+
}
|
|
23385
|
+
boundary.currentLineNonBlank = currentLineNonBlank, boundary.previousLineNonBlank = previousLineNonBlank, boundary.endsWithNewline = appended.length > 0 ? appended.charCodeAt(appended.length - 1) === 10 : boundary.endsWithNewline, boundary.endsWithBlankLine = cache.src.length + appended.length >= 2 && boundary.endsWithNewline && !previousLineNonBlank;
|
|
23386
|
+
}
|
|
23184
23387
|
getDocLineCount(src, lineCount = countLines(src)) {
|
|
23185
23388
|
return src.length === 0 ? 0 : src.charCodeAt(src.length - 1) === 10 ? lineCount : lineCount + 1;
|
|
23186
23389
|
}
|
|
23390
|
+
getCachedDocLineCount(cache, lineCount) {
|
|
23391
|
+
return cache.src.length === 0 ? 0 : cache.boundary ? cache.boundary.endsWithNewline ? lineCount : lineCount + 1 : this.getDocLineCount(cache.src, lineCount);
|
|
23392
|
+
}
|
|
23187
23393
|
shiftTokenLines(tokens, offset) {
|
|
23188
23394
|
if (offset === 0)
|
|
23189
23395
|
return;
|
|
@@ -23570,9 +23776,25 @@ function markdownIt(presetName, options) {
|
|
|
23570
23776
|
parse(src, env) {
|
|
23571
23777
|
return md.stream.enabled ? getStreamParser().parse(src, env, md) : md.parse(src, env ?? {});
|
|
23572
23778
|
},
|
|
23779
|
+
append(segment, env) {
|
|
23780
|
+
if (!md.stream.enabled)
|
|
23781
|
+
throw new Error("Stream append requires stream mode");
|
|
23782
|
+
return getStreamParser().append(segment, env, md);
|
|
23783
|
+
},
|
|
23784
|
+
snapshot() {
|
|
23785
|
+
return streamParser ? streamParser.snapshot() : null;
|
|
23786
|
+
},
|
|
23787
|
+
restore(snapshot) {
|
|
23788
|
+
if (!md.stream.enabled)
|
|
23789
|
+
throw new Error("Stream restore requires stream mode");
|
|
23790
|
+
return getStreamParser().restore(snapshot, md);
|
|
23791
|
+
},
|
|
23573
23792
|
reset() {
|
|
23574
23793
|
getStreamParser().reset();
|
|
23575
23794
|
},
|
|
23795
|
+
hasCache() {
|
|
23796
|
+
return streamParser?.hasCache() ?? !1;
|
|
23797
|
+
},
|
|
23576
23798
|
peek() {
|
|
23577
23799
|
return streamParser ? streamParser.peek() : [];
|
|
23578
23800
|
},
|
|
@@ -24125,9 +24347,9 @@ function applyContainers(md) {
|
|
|
24125
24347
|
function escapeTagForRegExp(tag) {
|
|
24126
24348
|
return tag.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
24127
24349
|
}
|
|
24128
|
-
function findTagCloseIndexOutsideQuotes(input) {
|
|
24350
|
+
function findTagCloseIndexOutsideQuotes(input, start = 0) {
|
|
24129
24351
|
let inSingle = !1, inDouble = !1;
|
|
24130
|
-
for (let i =
|
|
24352
|
+
for (let i = start; i < input.length; i++) {
|
|
24131
24353
|
let ch = input[i];
|
|
24132
24354
|
if (ch === "\\") {
|
|
24133
24355
|
i++;
|
|
@@ -24998,7 +25220,7 @@ function createChildParseContext(parent, options = parent, overrides = {}) {
|
|
|
24998
25220
|
...overrides
|
|
24999
25221
|
});
|
|
25000
25222
|
}
|
|
25001
|
-
var FILENAMEISH_EXTENSION_RE = /\.([a-z0-9]{1,15})$/i, FILENAMEISH_SEGMENT_RE = /[_()[\]{}<>]/u, URL_PREFIX_HINT_RE = /^(?:https?:\/\/|ftp:\/\/|mailto:|www\.)/i, URL_QUERY_OR_AUTH_HINT_RE = /[?#@]/u, PATH_SEPARATOR_RE = /[\\/]/u, DOMAINISH_TEXT_RE = /^[\p{L}\p{N}./\\-]+$/u, DOMAIN_LABEL_RE = /^[A-Za-z0-9-]{1,63}$/u, PUNYCODE_TLD_RE = /^xn--[a-z0-9-]{2,59}$/i, MARKET_TICKER_SYMBOL_RE = /^(?:[A-Z]{1,6}|\d{1,8})$/u, MARKET_TICKER_CONTEXT_SYMBOL_RE = /^(?=.{1,12}$)[A-Z0-9]+(?:[-.][A-Z0-9]+)*$/iu, EXPLICIT_FILENAME_CONTEXT_RE = /文件名\s*[::]?|附件\s*[::]?|路径\s*[::]?|路徑\s*[::]?|文件列表\s*[::]?|文档列表\s*[::]?|文檔列表\s*[::]?|\bfile\s*names?\b\s*[::]?|\battachments?\b\s*[::]?|\bpaths?\b\s*[::]?|\bfile\s+lists?\b\s*[::]?|\bdocument\s+lists?\b\s*[::]?/iu, FILENAME_CONTEXT_RE = /文件名\s*[::]?|文件\s*[::]?|附件\s*[::]?|档案\s*[::]?|檔案\s*[::]?|文档\s*[::]?|文檔\s*[::]?|资料\s*[::]?|資料\s*[::]?|路径\s*[::]?|路徑\s*[::]?|\bfile\s*name\b\s*[::]?|\battachments?\b\s*[::]?|\bfiles?\b\s*[::]?|\bdocuments?\b\s*[::]?|\bdocs?\b\s*[::]?|\bpaths?\b\s*[::]?/iu, MARKET_TICKER_CONTEXT_RE = /股票代码|股票代碼|证券代码|證券代碼|(?:代码|代碼|交易所|后缀|後綴|市场|市場)(?=$|[\s::/|,,、()()])|\btickers?\b|\bsymbols?\b|\bexchanges?\b/iu, LINKIFY_DEMOTION_CONTEXT_CACHE_LIMIT = 2e3, LINKIFY_DEMOTION_CONTEXT_CACHE_MAX_TEXT_LENGTH = 512, EMPTY_LINKIFY_DEMOTION_CONTEXT = {}, AMBIGUOUS_BARE_DOMAIN_EXTENSIONS = /* @__PURE__ */ new Set([
|
|
25223
|
+
var FILENAMEISH_EXTENSION_RE = /\.([a-z0-9]{1,15})$/i, FILENAMEISH_SEGMENT_RE = /[_()[\]{}<>]/u, URL_PREFIX_HINT_RE = /^(?:https?:\/\/|ftp:\/\/|mailto:|www\.)/i, URL_QUERY_OR_AUTH_HINT_RE = /[?#@]/u, PATH_SEPARATOR_RE = /[\\/]/u, DOMAINISH_TEXT_RE = /^[\p{L}\p{N}./\\-]+$/u, DOMAIN_LABEL_RE = /^[A-Za-z0-9-]{1,63}$/u, PUNYCODE_TLD_RE = /^xn--[a-z0-9-]{2,59}$/i, MARKET_TICKER_SYMBOL_RE = /^(?:[A-Z]{1,6}|\d{1,8})$/u, MARKET_TICKER_CONTEXT_SYMBOL_RE = /^(?=.{1,12}$)[A-Z0-9]+(?:[-.][A-Z0-9]+)*$/iu, EXPLICIT_FILENAME_CONTEXT_RE = /文件名\s*[::]?|附件\s*[::]?|路径\s*[::]?|路徑\s*[::]?|文件列表\s*[::]?|文档列表\s*[::]?|文檔列表\s*[::]?|\bfile\s*names?\b\s*[::]?|\battachments?\b\s*[::]?|\bpaths?\b\s*[::]?|\bfile\s+lists?\b\s*[::]?|\bdocument\s+lists?\b\s*[::]?/iu, FILENAME_CONTEXT_RE = /文件名\s*[::]?|文件\s*[::]?|附件\s*[::]?|档案\s*[::]?|檔案\s*[::]?|文档\s*[::]?|文檔\s*[::]?|资料\s*[::]?|資料\s*[::]?|路径\s*[::]?|路徑\s*[::]?|\bfile\s*name\b\s*[::]?|\battachments?\b\s*[::]?|\bfiles?\b\s*[::]?|\bdocuments?\b\s*[::]?|\bdocs?\b\s*[::]?|\bpaths?\b\s*[::]?/iu, MARKET_TICKER_CONTEXT_RE = /股票代码|股票代碼|证券代码|證券代碼|(?:代码|代碼|交易所|后缀|後綴|市场|市場)(?=$|[\s::/|,,、()()])|\btickers?\b|\bsymbols?\b|\bexchanges?\b/iu, LINKIFY_DEMOTION_CONTEXT_CACHE_LIMIT = 2e3, LINKIFY_DEMOTION_CONTEXT_CACHE_MAX_TEXT_LENGTH = 16384, LINKIFY_DEMOTION_CONTEXT_CACHE_MAX_TOTAL_TEXT_LENGTH = 512 * LINKIFY_DEMOTION_CONTEXT_CACHE_LIMIT, EMPTY_LINKIFY_DEMOTION_CONTEXT = {}, AMBIGUOUS_BARE_DOMAIN_EXTENSIONS = /* @__PURE__ */ new Set([
|
|
25002
25224
|
"ai",
|
|
25003
25225
|
"md",
|
|
25004
25226
|
"py",
|
|
@@ -25118,15 +25340,15 @@ var FILENAMEISH_EXTENSION_RE = /\.([a-z0-9]{1,15})$/i, FILENAMEISH_SEGMENT_RE =
|
|
|
25118
25340
|
"yml",
|
|
25119
25341
|
"zip",
|
|
25120
25342
|
"zsh"
|
|
25121
|
-
]), linkifyDemotionContextCache = /* @__PURE__ */ new Map();
|
|
25343
|
+
]), linkifyDemotionContextCache = /* @__PURE__ */ new Map(), linkifyDemotionContextCacheTextLength = 0;
|
|
25122
25344
|
function rememberLinkifyDemotionContext(text$1, context) {
|
|
25123
25345
|
if (!text$1 || text$1.length > LINKIFY_DEMOTION_CONTEXT_CACHE_MAX_TEXT_LENGTH)
|
|
25124
25346
|
return context;
|
|
25125
|
-
for (linkifyDemotionContextCache.set(text$1, context); linkifyDemotionContextCache.size > LINKIFY_DEMOTION_CONTEXT_CACHE_LIMIT; ) {
|
|
25347
|
+
for (linkifyDemotionContextCache.has(text$1) || (linkifyDemotionContextCacheTextLength += text$1.length), linkifyDemotionContextCache.set(text$1, context); linkifyDemotionContextCache.size > LINKIFY_DEMOTION_CONTEXT_CACHE_LIMIT || linkifyDemotionContextCacheTextLength > LINKIFY_DEMOTION_CONTEXT_CACHE_MAX_TOTAL_TEXT_LENGTH; ) {
|
|
25126
25348
|
let oldestKey = linkifyDemotionContextCache.keys().next().value;
|
|
25127
25349
|
if (!oldestKey)
|
|
25128
25350
|
break;
|
|
25129
|
-
linkifyDemotionContextCache.delete(oldestKey);
|
|
25351
|
+
linkifyDemotionContextCache.delete(oldestKey), linkifyDemotionContextCacheTextLength -= oldestKey.length;
|
|
25130
25352
|
}
|
|
25131
25353
|
return context;
|
|
25132
25354
|
}
|
|
@@ -25174,7 +25396,7 @@ function inferContinuationLinkifyContext(raw, inherited) {
|
|
|
25174
25396
|
})) && (continuation.filename = !0), inherited?.explicitFilename && continuation.filename && (continuation.explicitFilename = !0), inherited?.marketTicker && parts.every((part) => shouldDemoteFilenameLikeLinkify(part, { marketTicker: !0 })) && (continuation.marketTicker = !0), hasLinkifyDemotionContext(continuation) ? continuation : void 0;
|
|
25175
25397
|
}
|
|
25176
25398
|
function createLinkifyDemotionContextTracker(options, sticky = !1) {
|
|
25177
|
-
let context;
|
|
25399
|
+
let context = ensureParseContext(options).linkifyDemotionSeedContext;
|
|
25178
25400
|
return {
|
|
25179
25401
|
options(raw) {
|
|
25180
25402
|
return sticky || raw == null ? withLinkifyDemotionContext(options, context) : withLinkifyDemotionContext(options, mergeLinkifyDemotionContext(inferNextBlockLinkifyContext(raw), inferContinuationLinkifyContext(raw, context)));
|
|
@@ -25185,6 +25407,9 @@ function createLinkifyDemotionContextTracker(options, sticky = !1) {
|
|
|
25185
25407
|
},
|
|
25186
25408
|
reset() {
|
|
25187
25409
|
context = void 0;
|
|
25410
|
+
},
|
|
25411
|
+
snapshot() {
|
|
25412
|
+
return context;
|
|
25188
25413
|
}
|
|
25189
25414
|
};
|
|
25190
25415
|
}
|
|
@@ -25221,11 +25446,11 @@ function mayContainLinkifyDemotionContext(text$1) {
|
|
|
25221
25446
|
}
|
|
25222
25447
|
function inferLinkifyDemotionContext(contextText) {
|
|
25223
25448
|
let text$1 = String(contextText ?? ""), cached = linkifyDemotionContextCache.get(text$1);
|
|
25224
|
-
return cached
|
|
25449
|
+
return cached || (mayContainLinkifyDemotionContext(text$1) ? rememberLinkifyDemotionContext(text$1, {
|
|
25225
25450
|
explicitFilename: EXPLICIT_FILENAME_CONTEXT_RE.test(text$1),
|
|
25226
25451
|
filename: FILENAME_CONTEXT_RE.test(text$1),
|
|
25227
25452
|
marketTicker: MARKET_TICKER_CONTEXT_RE.test(text$1)
|
|
25228
|
-
}) : rememberLinkifyDemotionContext(text$1, EMPTY_LINKIFY_DEMOTION_CONTEXT);
|
|
25453
|
+
}) : rememberLinkifyDemotionContext(text$1, EMPTY_LINKIFY_DEMOTION_CONTEXT));
|
|
25229
25454
|
}
|
|
25230
25455
|
function hasDomainAuthorityPrefix(text$1) {
|
|
25231
25456
|
return isPlausibleBareDomain(text$1.split(/[\\/]/)[0] ?? "");
|
|
@@ -25730,7 +25955,7 @@ function fixStrongTokens(tokens) {
|
|
|
25730
25955
|
for (; k < tokens.length && tokens[k].type === "text" && tokens[k].content === ""; )
|
|
25731
25956
|
k++;
|
|
25732
25957
|
let postToken = tokens[k];
|
|
25733
|
-
markup === "__" && (preToken?.content?.endsWith("_") || postToken?.content?.startsWith("_")
|
|
25958
|
+
markup === "__" && (preToken?.content?.endsWith("_") || postToken?.content?.startsWith("_")) && (t.type = "text", t.tag = "", t.content = markup, t.raw = markup, t.markup = "", t.attrs = null, t.map = null, t.info = "", t.meta = null, cleansStrong.add(strongIndex));
|
|
25734
25959
|
} else if (type === "strong_close")
|
|
25735
25960
|
cleansStrong.has(strongIndex) && t.markup === "__" && (t.type = "text", t.content = t.markup, t.raw = String(t.markup ?? ""), t.tag = "", t.markup = "", t.attrs = null, t.map = null, t.info = "", t.meta = null), strongIndex--, strongIndex < 0 && (strongIndex = 0);
|
|
25736
25961
|
else if (type === "em_open") {
|
|
@@ -25742,7 +25967,7 @@ function fixStrongTokens(tokens) {
|
|
|
25742
25967
|
for (; k < tokens.length && tokens[k].type === "text" && tokens[k].content === ""; )
|
|
25743
25968
|
k++;
|
|
25744
25969
|
let postToken = tokens[k];
|
|
25745
|
-
markup === "_" && (preToken?.content?.endsWith("_") || postToken?.content?.startsWith("_")
|
|
25970
|
+
markup === "_" && (preToken?.content?.endsWith("_") || postToken?.content?.startsWith("_")) && (t.type = "text", t.tag = "", t.content = markup, t.raw = markup, t.markup = "", t.attrs = null, t.map = null, t.info = "", t.meta = null, cleansEm.add(emIndex));
|
|
25746
25971
|
} else
|
|
25747
25972
|
type === "em_close" && (cleansEm.has(emIndex) && t.markup === "_" && (t.type = "text", t.content = t.markup, t.raw = String(t.markup ?? ""), t.tag = "", t.markup = "", t.attrs = null, t.map = null, t.info = "", t.meta = null), emIndex--, emIndex < 0 && (emIndex = 0));
|
|
25748
25973
|
}
|
|
@@ -26051,36 +26276,35 @@ function hasTrailingPipeHeaderRowWithoutColon(line) {
|
|
|
26051
26276
|
return cells !== null && cells.every((cell) => !cell.includes(":"));
|
|
26052
26277
|
}
|
|
26053
26278
|
function fixTableTokens(tokens, final = !1, source = "") {
|
|
26054
|
-
let fixedTokens = [...tokens];
|
|
26055
26279
|
if (tokens.length < 3)
|
|
26056
|
-
return
|
|
26280
|
+
return tokens;
|
|
26057
26281
|
let i = tokens.length - 2, token = tokens[i];
|
|
26058
|
-
if (token.type
|
|
26059
|
-
|
|
26282
|
+
if (token.type !== "inline")
|
|
26283
|
+
return tokens;
|
|
26284
|
+
let sourceMap = tokens[i - 1]?.map, tcontent = String(token.content ?? ""), headerContent = tcontent.split(`
|
|
26060
26285
|
`)[0] ?? "", [headerLine = "", separatorLine = "", ...rest] = tcontent.split(`
|
|
26061
26286
|
`), hasTrailingNewlineSeparatorStart = !final && !tcontent.includes(`
|
|
26062
|
-
`) && /\r?\n$/.test(source) && hasTrailingPipeHeaderRow(tcontent);
|
|
26063
|
-
|
|
26287
|
+
`) && /\r?\n$/.test(source) && hasTrailingPipeHeaderRow(tcontent), fixedTokens = null;
|
|
26288
|
+
if (!final && (tcontent.includes(`
|
|
26064
26289
|
`) && rest.length === 0 && hasTrailingPipeHeaderRow(headerLine) && isTableSeparatorRowWithPartialTail(separatorLine) || hasTrailingNewlineSeparatorStart)) {
|
|
26065
|
-
|
|
26066
|
-
|
|
26067
|
-
|
|
26068
|
-
|
|
26069
|
-
|
|
26070
|
-
|
|
26071
|
-
|
|
26290
|
+
let body = headerContent.slice(1, -1).split("|").map((i$1) => i$1.trim()).flatMap((i$1) => createTh(i$1)), insert = [
|
|
26291
|
+
...createStart(sourceMap),
|
|
26292
|
+
...body,
|
|
26293
|
+
...createEnd()
|
|
26294
|
+
];
|
|
26295
|
+
fixedTokens = [...tokens], fixedTokens.splice(i - 1, 3, ...insert);
|
|
26296
|
+
} else if (tcontent.includes(`
|
|
26072
26297
|
`) && rest.length === 0 && hasTrailingPipeHeaderRow(headerLine) && isTableSeparatorRow(separatorLine)) {
|
|
26073
|
-
|
|
26074
|
-
|
|
26075
|
-
|
|
26076
|
-
|
|
26077
|
-
|
|
26078
|
-
|
|
26079
|
-
|
|
26080
|
-
|
|
26081
|
-
|
|
26082
|
-
|
|
26083
|
-
return fixedTokens;
|
|
26298
|
+
let body = headerContent.slice(1, -1).split("|").map((i$1) => i$1.trim()).flatMap((i$1) => createTh(i$1)), insert = [
|
|
26299
|
+
...createStart(sourceMap),
|
|
26300
|
+
...body,
|
|
26301
|
+
...createEnd()
|
|
26302
|
+
];
|
|
26303
|
+
fixedTokens = [...tokens], fixedTokens.splice(i - 1, 3, ...insert);
|
|
26304
|
+
} else if (tcontent.includes(`
|
|
26305
|
+
`) && rest.length === 0 && hasTrailingPipeHeaderRowWithoutColon(headerLine) && isTruncatedSeparatorRow(separatorLine))
|
|
26306
|
+
return token.content = tcontent.slice(0, -2), token.children.splice(2, 1), tokens;
|
|
26307
|
+
return fixedTokens ?? tokens;
|
|
26084
26308
|
}
|
|
26085
26309
|
function findMatchingClose(src, startIdx, open, close) {
|
|
26086
26310
|
let len = src.length;
|
|
@@ -26571,27 +26795,36 @@ function hashTolerantBoundaryContent(content) {
|
|
|
26571
26795
|
hash = hash * 31 + content.charCodeAt(index) | 0;
|
|
26572
26796
|
return hash.toString(36);
|
|
26573
26797
|
}
|
|
26574
|
-
function getTolerantBoundaryScanWindow(source) {
|
|
26798
|
+
function getTolerantBoundaryScanWindow(source, cache) {
|
|
26575
26799
|
if (source.length <= TOLERANT_BOUNDARY_SCAN_TAIL_CHARS)
|
|
26576
26800
|
return {
|
|
26577
26801
|
source,
|
|
26578
26802
|
lineOffset: 0
|
|
26579
26803
|
};
|
|
26804
|
+
if (cache) {
|
|
26805
|
+
let cut = source.length - TOLERANT_BOUNDARY_SCAN_TAIL_CHARS, start$1 = source.indexOf(`
|
|
26806
|
+
`, cut);
|
|
26807
|
+
start$1 = start$1 === -1 ? source.length : start$1 + 1;
|
|
26808
|
+
let lineOffset$1 = cache.lineOffset + countLineBreaks(source.slice(cache.windowStart, start$1));
|
|
26809
|
+
return cache.lineOffset = lineOffset$1, cache.windowStart = start$1, {
|
|
26810
|
+
source: source.slice(start$1),
|
|
26811
|
+
lineOffset: lineOffset$1
|
|
26812
|
+
};
|
|
26813
|
+
}
|
|
26580
26814
|
let start = source.length - TOLERANT_BOUNDARY_SCAN_TAIL_CHARS, nextLineBreak = source.indexOf(`
|
|
26581
26815
|
`, start);
|
|
26582
|
-
|
|
26583
|
-
|
|
26584
|
-
|
|
26585
|
-
} : (start = nextLineBreak + 1, {
|
|
26816
|
+
start = nextLineBreak === -1 ? source.length : nextLineBreak + 1;
|
|
26817
|
+
let lineOffset = countLineBreaks(source.slice(0, start));
|
|
26818
|
+
return {
|
|
26586
26819
|
source: source.slice(start),
|
|
26587
|
-
lineOffset
|
|
26588
|
-
}
|
|
26820
|
+
lineOffset
|
|
26821
|
+
};
|
|
26589
26822
|
}
|
|
26590
|
-
function mayContainTolerantMathBlockBoundaryOpener(markdown) {
|
|
26823
|
+
function mayContainTolerantMathBlockBoundaryOpener(markdown, scanWindowCache) {
|
|
26591
26824
|
let fullSource = String(markdown ?? "");
|
|
26592
26825
|
if (!fullSource || !fullSource.includes("$$") && !fullSource.includes("\\["))
|
|
26593
26826
|
return !1;
|
|
26594
|
-
let { source } = getTolerantBoundaryScanWindow(fullSource);
|
|
26827
|
+
let { source } = getTolerantBoundaryScanWindow(fullSource, scanWindowCache);
|
|
26595
26828
|
if (!source)
|
|
26596
26829
|
return !1;
|
|
26597
26830
|
let lines = source.split(/\r?\n/), startLine = Math.max(0, lines.length - TOLERANT_BOUNDARY_SCAN_MAX_LINES - 2), delimiters = [["$$", "$$"], ["\\[", "\\]"]];
|
|
@@ -26605,11 +26838,11 @@ function mayContainTolerantMathBlockBoundaryOpener(markdown) {
|
|
|
26605
26838
|
}
|
|
26606
26839
|
return !1;
|
|
26607
26840
|
}
|
|
26608
|
-
function getTolerantMathBlockBoundaryStreamKey(markdown) {
|
|
26841
|
+
function getTolerantMathBlockBoundaryStreamKey(markdown, scanWindowCache) {
|
|
26609
26842
|
let fullSource = String(markdown ?? "");
|
|
26610
26843
|
if (!fullSource || !fullSource.includes("$$") && !fullSource.includes("\\["))
|
|
26611
26844
|
return null;
|
|
26612
|
-
let { source, lineOffset } = getTolerantBoundaryScanWindow(fullSource);
|
|
26845
|
+
let { source, lineOffset } = getTolerantBoundaryScanWindow(fullSource, scanWindowCache);
|
|
26613
26846
|
if (!source)
|
|
26614
26847
|
return null;
|
|
26615
26848
|
let lines = source.split(/\r?\n/), startLine = Math.max(0, lines.length - TOLERANT_BOUNDARY_SCAN_MAX_LINES - 2), delimiters = [["$$", "$$"], ["\\[", "\\]"]];
|
|
@@ -27103,7 +27336,7 @@ function applyRenderRules(md) {
|
|
|
27103
27336
|
return `<pre class="${info ? `language-${md.utils.escapeHtml(info.split(/\s+/g)[0])}` : ""}"><code>${md.utils.escapeHtml(String(tokenShape.content ?? ""))}</code></pre>`;
|
|
27104
27337
|
});
|
|
27105
27338
|
}
|
|
27106
|
-
var HTML_LINK_OPEN_RE = /^<a[>\s]/i, HTML_LINK_CLOSE_RE = /^<\/a\s*>/i
|
|
27339
|
+
var HTML_LINK_OPEN_RE = /^<a[>\s]/i, HTML_LINK_CLOSE_RE = /^<\/a\s*>/i, LINKIFY_SEED_RE = /[@:]|\/\/|\.\S/;
|
|
27107
27340
|
function inlineTokenMayNeedLinkify(token, linkify$2) {
|
|
27108
27341
|
if (token?.type !== "inline")
|
|
27109
27342
|
return !1;
|
|
@@ -27129,13 +27362,33 @@ function inlineTokenMayNeedLinkify(token, linkify$2) {
|
|
|
27129
27362
|
}
|
|
27130
27363
|
function applyLinkifyCandidateFilter(md) {
|
|
27131
27364
|
let ruler = md.core?.ruler, original = ruler.getNamedRules?.().find((rule) => rule.name === "linkify")?.fn;
|
|
27132
|
-
typeof original
|
|
27365
|
+
if (typeof original != "function")
|
|
27366
|
+
return;
|
|
27367
|
+
let nativeLinkify = md.options.linkify ? md.linkify : void 0, nativeTest = nativeLinkify?.test, nativeMatch = nativeLinkify?.match, nativeBuilderPrototype = nativeLinkify?.re && Object.getPrototypeOf(nativeLinkify.re), screenedCache, seedSafe = !1;
|
|
27368
|
+
ruler.at("linkify", (state) => {
|
|
27133
27369
|
if (!state.md?.options?.linkify)
|
|
27134
27370
|
return;
|
|
27135
27371
|
let tokens = Array.isArray(state.tokens) ? state.tokens : [], linkify$2 = state.md.linkify;
|
|
27136
|
-
if (!linkify$2)
|
|
27372
|
+
if (!linkify$2 || !tokens.some((token) => token?.type === "inline"))
|
|
27137
27373
|
return;
|
|
27138
|
-
let
|
|
27374
|
+
let re = linkify$2.re, nativeBuilder = re && Object.getPrototypeOf(re) === nativeBuilderPrototype && !Object.values(re).some((value) => typeof value == "function"), nativeMethods = linkify$2.test === nativeTest && linkify$2.match === nativeMatch;
|
|
27375
|
+
if (nativeMethods && nativeBuilder && screenedCache !== re.cache) {
|
|
27376
|
+
screenedCache = re.cache;
|
|
27377
|
+
let { schema_names: schemas = [], tlds = [] } = re.opts;
|
|
27378
|
+
seedSafe = schemas.every((name) => name === "//" || name.endsWith(":")) && tlds.every((tld) => /^[\p{L}\p{N}-]+$/u.test(tld));
|
|
27379
|
+
}
|
|
27380
|
+
let canScreen = !!nativeMethods && !!nativeBuilder && seedSafe && (state.env?.__markstreamFinal !== !1 || !!re?.cache.link_fuzzy_search), candidates = tokens.filter((token) => {
|
|
27381
|
+
if (canScreen && token?.type === "inline") {
|
|
27382
|
+
let children = token.children;
|
|
27383
|
+
if (Array.isArray(children) && children.length > 0) {
|
|
27384
|
+
if (!children.some((child) => child?.type === "text" && LINKIFY_SEED_RE.test(String(child.content ?? ""))))
|
|
27385
|
+
return !1;
|
|
27386
|
+
} else if (!LINKIFY_SEED_RE.test(String(token.content ?? "")))
|
|
27387
|
+
return !1;
|
|
27388
|
+
canScreen = !1;
|
|
27389
|
+
}
|
|
27390
|
+
return inlineTokenMayNeedLinkify(token, linkify$2);
|
|
27391
|
+
});
|
|
27139
27392
|
if (candidates.length)
|
|
27140
27393
|
return original(Object.assign(Object.create(Object.getPrototypeOf(state)), state, { tokens: candidates }));
|
|
27141
27394
|
});
|
|
@@ -27192,7 +27445,17 @@ function factory(opts = {}) {
|
|
|
27192
27445
|
...opts.mathOptions ?? {}
|
|
27193
27446
|
}), (opts.enableContainers ?? !0) && applyContainers(md), opts.enableFixIndentedCodeBlock !== !1 && applyFixIndentedCodeBlock(md), applyFixLinkTokens(md), applyFixStrongTokens(md), applyFixListItem(md), applyFixTableTokens(md), applyRenderRules(md), applyFixHtmlInlineTokens(md, { customHtmlTags: opts.customHtmlTags }), md;
|
|
27194
27447
|
}
|
|
27195
|
-
var
|
|
27448
|
+
var regexCache = /* @__PURE__ */ new Map();
|
|
27449
|
+
function getCachedRegex(pattern, flags) {
|
|
27450
|
+
let key = flags ? `${pattern}:::${flags}` : pattern, regex = regexCache.get(key);
|
|
27451
|
+
if (!regex && (regex = new RegExp(pattern, flags), regexCache.set(key, regex), regexCache.size > 200)) {
|
|
27452
|
+
let keysToDelete = Array.from(regexCache.keys()).slice(0, 50);
|
|
27453
|
+
for (let keyToDelete of keysToDelete)
|
|
27454
|
+
regexCache.delete(keyToDelete);
|
|
27455
|
+
}
|
|
27456
|
+
return regex.lastIndex = 0, regex;
|
|
27457
|
+
}
|
|
27458
|
+
var NOT_WHITESPACE = /\S/, STARTS_LIKE_HTML_DOCUMENT_RE = /^(?:<!doctype\s+html[^>]*>\s*)?<html(?:\s[^>]*)?>/i, ENDS_WITH_HTML_CLOSE_RE = /<\/html>\s*$/i, NON_ELEMENT_MARKUP_START_RE = /^<\s*[!?]/, MARKUP_TAG_NAME_RE = /^([A-Z][\w:-]*)/i, SELF_CLOSING_END_RE$1 = /\/\s*>$/;
|
|
27196
27459
|
function parseStandaloneHtmlDocument(markdown) {
|
|
27197
27460
|
let firstNonWhitespace = markdown.search(NOT_WHITESPACE);
|
|
27198
27461
|
if (firstNonWhitespace === -1 || markdown.charCodeAt(firstNonWhitespace) !== 60)
|
|
@@ -27200,7 +27463,7 @@ function parseStandaloneHtmlDocument(markdown) {
|
|
|
27200
27463
|
let trimmed = markdown.trim();
|
|
27201
27464
|
if (!trimmed)
|
|
27202
27465
|
return null;
|
|
27203
|
-
let startsLikeHtmlDocument =
|
|
27466
|
+
let startsLikeHtmlDocument = STARTS_LIKE_HTML_DOCUMENT_RE.test(trimmed), endsWithHtmlClose = ENDS_WITH_HTML_CLOSE_RE.test(trimmed);
|
|
27204
27467
|
return !startsLikeHtmlDocument || !endsWithHtmlClose ? null : [{
|
|
27205
27468
|
type: "html_block",
|
|
27206
27469
|
tag: "html",
|
|
@@ -27220,7 +27483,7 @@ function isCloseOnlyHtmlBlockForTag(node, tag) {
|
|
|
27220
27483
|
if (node.type !== "html_block" || !tag)
|
|
27221
27484
|
return !1;
|
|
27222
27485
|
let raw = String(node.raw ?? node.content ?? "");
|
|
27223
|
-
return
|
|
27486
|
+
return getCachedRegex(String.raw`^\s*<\s*\/\s*${escapeTagForRegExp(tag)}\s*>\s*$`, "i").test(raw);
|
|
27224
27487
|
}
|
|
27225
27488
|
var RAW_TEXT_HTML_TAGS = /* @__PURE__ */ new Set([
|
|
27226
27489
|
"iframe",
|
|
@@ -27251,11 +27514,11 @@ function findNextHtmlBlockFromSource(source, tag, startIndex) {
|
|
|
27251
27514
|
tag: ""
|
|
27252
27515
|
};
|
|
27253
27516
|
}
|
|
27254
|
-
let
|
|
27255
|
-
if (
|
|
27517
|
+
let closeIndex = findTagCloseIndexOutsideQuotes(source, start$1);
|
|
27518
|
+
if (closeIndex === -1)
|
|
27256
27519
|
return null;
|
|
27257
|
-
let end =
|
|
27258
|
-
if (
|
|
27520
|
+
let end = closeIndex + 1, raw = source.slice(start$1, end);
|
|
27521
|
+
if (NON_ELEMENT_MARKUP_START_RE.test(raw))
|
|
27259
27522
|
return {
|
|
27260
27523
|
closing: !1,
|
|
27261
27524
|
end,
|
|
@@ -27264,11 +27527,11 @@ function findNextHtmlBlockFromSource(source, tag, startIndex) {
|
|
|
27264
27527
|
};
|
|
27265
27528
|
let body = raw.slice(1).trimStart(), closing = body.startsWith("/");
|
|
27266
27529
|
closing && (body = body.slice(1).trimStart());
|
|
27267
|
-
let tagMatch = body.match(
|
|
27530
|
+
let tagMatch = body.match(MARKUP_TAG_NAME_RE);
|
|
27268
27531
|
return tagMatch?.[1] ? {
|
|
27269
27532
|
closing,
|
|
27270
27533
|
end,
|
|
27271
|
-
selfClosing:
|
|
27534
|
+
selfClosing: SELF_CLOSING_END_RE$1.test(raw),
|
|
27272
27535
|
tag: tagMatch[1].toLowerCase()
|
|
27273
27536
|
} : {
|
|
27274
27537
|
closing: !1,
|
|
@@ -27277,7 +27540,7 @@ function findNextHtmlBlockFromSource(source, tag, startIndex) {
|
|
|
27277
27540
|
tag: ""
|
|
27278
27541
|
};
|
|
27279
27542
|
}, findRawTextClose = (rawTextTag, from) => {
|
|
27280
|
-
let closeRe =
|
|
27543
|
+
let closeRe = getCachedRegex(String.raw`<\s*\/\s*${escapeTagForRegExp(rawTextTag)}(?=\s|>)`, "gi");
|
|
27281
27544
|
closeRe.lastIndex = from;
|
|
27282
27545
|
let match = closeRe.exec(source);
|
|
27283
27546
|
if (!match || match.index == null)
|
|
@@ -27308,7 +27571,7 @@ function findNextHtmlBlockFromSource(source, tag, startIndex) {
|
|
|
27308
27571
|
if (start === -1 || openEnd === -1)
|
|
27309
27572
|
return null;
|
|
27310
27573
|
let openTag = source.slice(start, openEnd + 1);
|
|
27311
|
-
if (VOID_HTML_TAGS.has(lowerTag) ||
|
|
27574
|
+
if (VOID_HTML_TAGS.has(lowerTag) || SELF_CLOSING_END_RE$1.test(openTag))
|
|
27312
27575
|
return {
|
|
27313
27576
|
raw: openTag,
|
|
27314
27577
|
start,
|
|
@@ -27412,13 +27675,14 @@ function extendHtmlBlockCloseToLineEnding(source, startIndex) {
|
|
|
27412
27675
|
` ? end + 1 : startIndex;
|
|
27413
27676
|
}
|
|
27414
27677
|
function findLastClosingTagStart(raw, tag) {
|
|
27415
|
-
let closeRe =
|
|
27678
|
+
let closeRe = getCachedRegex(String.raw`<\s*\/\s*${escapeTagForRegExp(tag)}(?=\s|>)`, "gi"), last = -1, match;
|
|
27416
27679
|
for (; (match = closeRe.exec(raw)) !== null; )
|
|
27417
27680
|
last = match.index;
|
|
27418
27681
|
return last;
|
|
27419
27682
|
}
|
|
27683
|
+
var NON_ELEMENT_HTML_BLOCK_START_RE = /^\s*(?:<!--|<!|<\?)/, FIRST_TAG_NAME_RE = /^\s*<([A-Z][\w:-]*)/i, SELF_CLOSING_END_RE = /\/\s*>$/, TRAILING_UNCLOSED_TAG_RE = /<[^>]*$/;
|
|
27420
27684
|
function findMatchingCloseTagEnd(rawHtml, tag, startIndex) {
|
|
27421
|
-
let lowerTag = tag.toLowerCase(), openTagRe =
|
|
27685
|
+
let lowerTag = tag.toLowerCase(), openTagRe = getCachedRegex(String.raw`^<\s*${lowerTag}(?=\s|>|/)`, "i"), closeTagRe = getCachedRegex(String.raw`^<\s*\/\s*${lowerTag}(?=\s|>)`, "i"), depth = 0, index = Math.max(0, startIndex);
|
|
27422
27686
|
for (; index < rawHtml.length; ) {
|
|
27423
27687
|
let lt = rawHtml.indexOf("<", index);
|
|
27424
27688
|
if (lt === -1)
|
|
@@ -27438,7 +27702,7 @@ function findMatchingCloseTagEnd(rawHtml, tag, startIndex) {
|
|
|
27438
27702
|
if (endRel === -1)
|
|
27439
27703
|
return -1;
|
|
27440
27704
|
let rawTag = slice.slice(0, endRel + 1);
|
|
27441
|
-
|
|
27705
|
+
SELF_CLOSING_END_RE.test(rawTag) || depth++, index = lt + endRel + 1;
|
|
27442
27706
|
continue;
|
|
27443
27707
|
}
|
|
27444
27708
|
index = lt + 1;
|
|
@@ -27447,7 +27711,7 @@ function findMatchingCloseTagEnd(rawHtml, tag, startIndex) {
|
|
|
27447
27711
|
}
|
|
27448
27712
|
function parseHtmlBlock(token) {
|
|
27449
27713
|
let raw = String(token.content ?? "");
|
|
27450
|
-
if (
|
|
27714
|
+
if (NON_ELEMENT_HTML_BLOCK_START_RE.test(raw))
|
|
27451
27715
|
return {
|
|
27452
27716
|
type: "html_block",
|
|
27453
27717
|
content: raw,
|
|
@@ -27455,7 +27719,7 @@ function parseHtmlBlock(token) {
|
|
|
27455
27719
|
tag: "",
|
|
27456
27720
|
loading: !1
|
|
27457
27721
|
};
|
|
27458
|
-
let tag = (raw.match(
|
|
27722
|
+
let tag = (raw.match(FIRST_TAG_NAME_RE)?.[1] || "").toLowerCase();
|
|
27459
27723
|
if (!tag)
|
|
27460
27724
|
return {
|
|
27461
27725
|
type: "html_block",
|
|
@@ -27464,10 +27728,10 @@ function parseHtmlBlock(token) {
|
|
|
27464
27728
|
tag: "",
|
|
27465
27729
|
loading: !1
|
|
27466
27730
|
};
|
|
27467
|
-
let openEnd = findTagCloseIndexOutsideQuotes(raw), openTag = openEnd === -1 ? raw : raw.slice(0, openEnd + 1), selfClosing = openEnd !== -1 &&
|
|
27731
|
+
let openEnd = findTagCloseIndexOutsideQuotes(raw), openTag = openEnd === -1 ? raw : raw.slice(0, openEnd + 1), selfClosing = openEnd !== -1 && SELF_CLOSING_END_RE.test(openTag), isVoid = VOID_HTML_TAGS.has(tag), attrs = parseTagAttrs(openTag), hasClosing = (openEnd === -1 ? -1 : findMatchingCloseTagEnd(raw, tag, openEnd + 1)) !== -1, loading = !(isVoid || selfClosing || hasClosing);
|
|
27468
27732
|
return {
|
|
27469
27733
|
type: "html_block",
|
|
27470
|
-
content: loading ? `${raw.replace(
|
|
27734
|
+
content: loading ? `${raw.replace(TRAILING_UNCLOSED_TAG_RE, "")}
|
|
27471
27735
|
</${tag}>` : raw,
|
|
27472
27736
|
raw,
|
|
27473
27737
|
tag,
|
|
@@ -27821,12 +28085,16 @@ function createExplicitBracketMathContext() {
|
|
|
27821
28085
|
function cloneExplicitBracketMathContext(context) {
|
|
27822
28086
|
return { ...context };
|
|
27823
28087
|
}
|
|
27824
|
-
function setTolerantMathBoundaryStreamCache(runtime, source, key, explicitBracketMath = scanExplicitBracketMathStreamState(source).state
|
|
28088
|
+
function setTolerantMathBoundaryStreamCache(runtime, source, key, explicitBracketMath = scanExplicitBracketMathStreamState(source).state, scanWindow = {
|
|
28089
|
+
lineOffset: 0,
|
|
28090
|
+
windowStart: 0
|
|
28091
|
+
}) {
|
|
27825
28092
|
runtime.tolerantMathBoundary = {
|
|
27826
28093
|
explicitBracketMath,
|
|
27827
28094
|
source,
|
|
27828
28095
|
key,
|
|
27829
|
-
pendingCandidate: key === null && mayContainTolerantMathBlockBoundaryOpener(source)
|
|
28096
|
+
pendingCandidate: key === null && mayContainTolerantMathBlockBoundaryOpener(source, scanWindow),
|
|
28097
|
+
scanWindow
|
|
27830
28098
|
};
|
|
27831
28099
|
}
|
|
27832
28100
|
function sourceEndsWithSplitTolerantBoundaryPrefix(source) {
|
|
@@ -28075,7 +28343,7 @@ function stripPendingExplicitMathTail(markdown, runtime, useCache = !0) {
|
|
|
28075
28343
|
let md = runtime.markdownIt;
|
|
28076
28344
|
if (!hasMarkstreamMathPlugin(md))
|
|
28077
28345
|
return markdown;
|
|
28078
|
-
let previous = useCache ? runtime.pendingExplicitMathTail : void 0, state = previous?.source === markdown ? previous.state : previous &&
|
|
28346
|
+
let previous = useCache ? runtime.pendingExplicitMathTail : void 0, state = previous?.source === markdown ? previous.state : previous && runtime.sourceExtends(previous.source, markdown) ? updateExplicitBracketMathStreamState(previous.state, markdown.slice(previous.source.length), previous.source.length - previous.state.lineBuffer.length).state : scanExplicitBracketMathStreamState(markdown).state;
|
|
28079
28347
|
useCache && (runtime.pendingExplicitMathTail = {
|
|
28080
28348
|
source: markdown,
|
|
28081
28349
|
state
|
|
@@ -28135,13 +28403,16 @@ function syncTolerantMathBoundaryStreamCache(runtime, source) {
|
|
|
28135
28403
|
let previous = runtime.tolerantMathBoundary;
|
|
28136
28404
|
if (previous?.source === source)
|
|
28137
28405
|
return;
|
|
28138
|
-
let sourceExtendsPrevious = previous ?
|
|
28406
|
+
let sourceExtendsPrevious = previous ? runtime.sourceExtends(previous.source, source) : !1, appended = sourceExtendsPrevious && previous ? source.slice(previous.source.length) : "", explicitBracketMathUpdate = sourceExtendsPrevious && previous ? updateExplicitBracketMathStreamState(previous.explicitBracketMath, appended, previous.source.length - previous.explicitBracketMath.lineBuffer.length) : scanExplicitBracketMathStreamState(source), nextExplicitBracketMath = explicitBracketMathUpdate.state, completesExplicitBracketMathClose = sourceExtendsPrevious && previous ? explicitBracketMathUpdate.closedOpenMath : !1;
|
|
28139
28407
|
if (previous && sourceExtendsPrevious && previous.key === null && previous.pendingCandidate === !1 && !completesExplicitBracketMathClose && !appendedChunkMayAffectTolerantMathBoundary(previous.source, appended) && !sourceEndsWithSplitTolerantBoundaryPrefix(source)) {
|
|
28140
28408
|
previous.source = source, previous.explicitBracketMath = nextExplicitBracketMath;
|
|
28141
28409
|
return;
|
|
28142
28410
|
}
|
|
28143
|
-
let
|
|
28144
|
-
|
|
28411
|
+
let scanWindow = sourceExtendsPrevious && previous ? previous.scanWindow : {
|
|
28412
|
+
lineOffset: 0,
|
|
28413
|
+
windowStart: 0
|
|
28414
|
+
}, nextKey = getTolerantMathBlockBoundaryStreamKey(source, scanWindow);
|
|
28415
|
+
(previous && (previous && !sourceExtendsPrevious || previous.key !== nextKey || completesExplicitBracketMathClose) || !previous && nextKey) && runtime.resetStreamOnly(), setTolerantMathBoundaryStreamCache(runtime, source, nextKey, nextExplicitBracketMath, scanWindow);
|
|
28145
28416
|
}
|
|
28146
28417
|
function shouldUseSyncParseForPendingTolerantMathBoundary(runtime) {
|
|
28147
28418
|
let cache = runtime.tolerantMathBoundary;
|
|
@@ -28309,6 +28580,7 @@ var REUSABLE_INLINE_TOKEN_TYPES = /* @__PURE__ */ new Set([
|
|
|
28309
28580
|
"code_block",
|
|
28310
28581
|
"fence",
|
|
28311
28582
|
"hr",
|
|
28583
|
+
"html_block",
|
|
28312
28584
|
"inline",
|
|
28313
28585
|
"math_block"
|
|
28314
28586
|
]);
|
|
@@ -28411,7 +28683,7 @@ function sameTokenAttrs(left, right) {
|
|
|
28411
28683
|
function isSameTokenShapeForReuse(left, right) {
|
|
28412
28684
|
return !!left && !!right && left.type === right.type && left.tag === right.tag && left.nesting === right.nesting && left.level === right.level && left.markup === right.markup && left.content === right.content && left.info === right.info && sameTokenMap(left, right) && sameTokenAttrs(left, right);
|
|
28413
28685
|
}
|
|
28414
|
-
function updateStructuredStreamCache(runtime, source, tokens, groups, nodes, options,
|
|
28686
|
+
function updateStructuredStreamCache(runtime, source, tokens, groups, nodes, options, linkifyDemotionContexts, linkifyDemotionContextOffset = 0, fallbackLinkifyDemotionContext) {
|
|
28415
28687
|
let groupStarts = groups.starts;
|
|
28416
28688
|
if (groupStarts.length === 0 || nodes.length !== groupStarts.length) {
|
|
28417
28689
|
runtime.structuredStream = void 0;
|
|
@@ -28424,7 +28696,7 @@ function updateStructuredStreamCache(runtime, source, tokens, groups, nodes, opt
|
|
|
28424
28696
|
lastToken: tokens[end - 1],
|
|
28425
28697
|
tokenCount: end - start
|
|
28426
28698
|
};
|
|
28427
|
-
}), stableGroupCount = groups.mixed ? Math.max(0, groupStarts.length - 1) : sourceEndsWithBlankLine(source) ? groupStarts.length : Math.max(0, groupStarts.length - 1),
|
|
28699
|
+
}), stableGroupCount = groups.mixed ? Math.max(0, groupStarts.length - 1) : sourceEndsWithBlankLine(source) ? groupStarts.length : Math.max(0, groupStarts.length - 1), linkifyContextIndex = stableGroupCount - linkifyDemotionContextOffset - 1, linkifyDemotionContext = linkifyContextIndex >= 0 ? linkifyDemotionContexts?.[linkifyContextIndex] : fallbackLinkifyDemotionContext;
|
|
28428
28700
|
runtime.structuredStream = {
|
|
28429
28701
|
groupBoundaries,
|
|
28430
28702
|
groupStarts,
|
|
@@ -28433,7 +28705,7 @@ function updateStructuredStreamCache(runtime, source, tokens, groups, nodes, opt
|
|
|
28433
28705
|
mixed: groups.mixed,
|
|
28434
28706
|
source,
|
|
28435
28707
|
nodes,
|
|
28436
|
-
|
|
28708
|
+
linkifyDemotionContext,
|
|
28437
28709
|
stableGroupCount,
|
|
28438
28710
|
requireClosingStrong: options.requireClosingStrong,
|
|
28439
28711
|
validateLink: options.validateLink
|
|
@@ -28470,18 +28742,18 @@ function processTopLevelTokensWithReuse(runtime, source, tokens, options, callba
|
|
|
28470
28742
|
if (!groups)
|
|
28471
28743
|
return runtime.structuredStream = void 0, callbacks.processTokens(tokens, options);
|
|
28472
28744
|
let groupStarts = groups.starts, stableGroupCount = previous && groups.mixed ? Math.min(previous.stableGroupCount, Math.max(0, previous.groupBoundaries.length - 1)) : previous?.stableGroupCount ?? 0;
|
|
28473
|
-
if (previous && stableGroupCount > 0 && previous.requireClosingStrong === options.requireClosingStrong && previous.validateLink === options.validateLink &&
|
|
28474
|
-
let tailStart = groupStarts[stableGroupCount] ?? tokens.length,
|
|
28745
|
+
if (previous && stableGroupCount > 0 && previous.requireClosingStrong === options.requireClosingStrong && previous.validateLink === options.validateLink && runtime.sourceExtends(previous.source, source) && groupStarts.length >= stableGroupCount && (mode === "append" || mode === "tail") && hasStableStructuredStreamGroupBoundaries(previous, tokens, groupStarts, stableGroupCount)) {
|
|
28746
|
+
let tailStart = groupStarts[stableGroupCount] ?? tokens.length, tailOptions = {
|
|
28475
28747
|
...options,
|
|
28476
|
-
|
|
28477
|
-
}), expectedTailNodes = groupStarts.length - stableGroupCount;
|
|
28748
|
+
linkifyDemotionSeedContext: previous.linkifyDemotionContext
|
|
28749
|
+
}, tailNodes = callbacks.processTokens(tokens.slice(tailStart), tailOptions), expectedTailNodes = groupStarts.length - stableGroupCount;
|
|
28478
28750
|
if (tailNodes.length === expectedTailNodes) {
|
|
28479
28751
|
let result$1 = previous.nodes.slice(0, stableGroupCount).concat(tailNodes);
|
|
28480
|
-
return runtime.structuredReuseTailStart = stableGroupCount, callbacks.recordReusedTopLevelNodes?.(stableGroupCount), updateStructuredStreamCache(runtime, source, tokens, groups, result$1, options, previous.
|
|
28752
|
+
return runtime.structuredReuseTailStart = stableGroupCount, callbacks.recordReusedTopLevelNodes?.(stableGroupCount), updateStructuredStreamCache(runtime, source, tokens, groups, result$1, options, tailOptions.linkifyDemotionResultContexts, stableGroupCount, previous.linkifyDemotionContext), result$1;
|
|
28481
28753
|
}
|
|
28482
28754
|
}
|
|
28483
28755
|
let result = callbacks.processTokens(tokens, options);
|
|
28484
|
-
return updateStructuredStreamCache(runtime, source, tokens, groups, result, options), result;
|
|
28756
|
+
return updateStructuredStreamCache(runtime, source, tokens, groups, result, options, options.linkifyDemotionResultContexts), result;
|
|
28485
28757
|
}
|
|
28486
28758
|
function isDetailsOpenHtmlBlock(node) {
|
|
28487
28759
|
if (node.type !== "html_block" || String(node.tag ?? "").toLowerCase() !== "details")
|
|
@@ -28566,7 +28838,7 @@ function parseSiblingHtmlBlockChildren(blocks, context, options, final, useCache
|
|
|
28566
28838
|
validateLink: options.validateLink
|
|
28567
28839
|
}), children.flat();
|
|
28568
28840
|
}
|
|
28569
|
-
function structureGenericHtmlBlockChildren(nodes, context, options, final
|
|
28841
|
+
function structureGenericHtmlBlockChildren(nodes, context, options, final) {
|
|
28570
28842
|
let processNode = (node) => {
|
|
28571
28843
|
if (node?.type !== "html_block")
|
|
28572
28844
|
return node;
|
|
@@ -28583,12 +28855,9 @@ function structureGenericHtmlBlockChildren(nodes, context, options, final, tailS
|
|
|
28583
28855
|
if (!innerRaw.trim() || !hasStructuredHtmlWrapperMarkers(innerRaw))
|
|
28584
28856
|
return node;
|
|
28585
28857
|
let childOptions = buildDetailsChildParseOptions(options, final), siblingHtmlBlocks = hasClose ? null : splitSiblingHtmlBlockFragments(innerRaw), useSiblingCache = !options.isFragment && typeof options.preTransformTokens != "function" && typeof options.postTransformTokens != "function" && typeof options.postTransformNodes != "function" && context.markdownIt.__markstreamHasCustomParserExtensions === !1 && isCacheStableLinkValidator(options.validateLink), children = siblingHtmlBlocks ? parseSiblingHtmlBlockChildren(siblingHtmlBlocks, context, childOptions, final, useSiblingCache) : parseDetailsFragmentChildren(innerRaw, context, childOptions);
|
|
28586
|
-
return shouldStructureGenericHtmlBlockChildren(children)
|
|
28587
|
-
...node,
|
|
28588
|
-
children
|
|
28589
|
-
} : node;
|
|
28858
|
+
return shouldStructureGenericHtmlBlockChildren(children) && (fields.children = children), node;
|
|
28590
28859
|
};
|
|
28591
|
-
return
|
|
28860
|
+
return nodes.map(processNode);
|
|
28592
28861
|
}
|
|
28593
28862
|
function hasTopLevelHtmlBlock(nodes, start = 0) {
|
|
28594
28863
|
for (let i = start; i < nodes.length; i++)
|
|
@@ -28699,12 +28968,18 @@ function combineStructuredDetailsHtmlBlocks(nodes, source, context, options, fin
|
|
|
28699
28968
|
}
|
|
28700
28969
|
return [merged, cursor];
|
|
28701
28970
|
}
|
|
28702
|
-
function
|
|
28971
|
+
function findNodeRawPosition(node, nodeRaw, source, cursor, context) {
|
|
28972
|
+
if (!nodeRaw)
|
|
28973
|
+
return -1;
|
|
28974
|
+
let anchor = context.getInternalNodeSourceRange(node)?.start ?? -1, anchored = anchor >= cursor && source.startsWith(nodeRaw, anchor);
|
|
28975
|
+
return node?.type === "html_block" ? anchored && anchor === cursor ? anchor : source.indexOf(nodeRaw, cursor) : anchor < 0 ? source.indexOf(nodeRaw, cursor) : anchored ? anchor : -1;
|
|
28976
|
+
}
|
|
28977
|
+
function mergeSplitTopLevelHtmlBlocks(nodes, final, source, context, options, initialSourceCursor = 0) {
|
|
28703
28978
|
if (!source)
|
|
28704
28979
|
return nodes;
|
|
28705
|
-
let merged = nodes.slice(), sourceHtmlCursor =
|
|
28980
|
+
let merged = nodes.slice(), sourceHtmlCursor = initialSourceCursor;
|
|
28706
28981
|
for (let i = 0; i < merged.length; i++) {
|
|
28707
|
-
let node = merged[i], nodeRaw = getMergeableNodeRaw(node), nodePos = nodeRaw
|
|
28982
|
+
let node = merged[i], nodeRaw = getMergeableNodeRaw(node), nodePos = findNodeRawPosition(node, nodeRaw, source, sourceHtmlCursor, context);
|
|
28708
28983
|
if (node?.type !== "html_block") {
|
|
28709
28984
|
nodePos !== -1 && (sourceHtmlCursor = nodePos + nodeRaw.length);
|
|
28710
28985
|
continue;
|
|
@@ -28812,7 +29087,7 @@ function parseEmphasisToken(tokens, startIndex, parseInlineTokens$1, options) {
|
|
|
28812
29087
|
};
|
|
28813
29088
|
}
|
|
28814
29089
|
function TRAILING_OWN_FENCE_CANDIDATE_LINE_RE(marker) {
|
|
28815
|
-
return
|
|
29090
|
+
return getCachedRegex(`(?:^|\\r\\n|\\n|\\r) {0,3}${marker}+[ \\t]*$`);
|
|
28816
29091
|
}
|
|
28817
29092
|
var DIFF_HEADER_PREFIXES = [
|
|
28818
29093
|
"diff ",
|
|
@@ -30351,7 +30626,7 @@ function handleTextToken(state, token) {
|
|
|
30351
30626
|
}
|
|
30352
30627
|
trailingTextStart < state.result.length && (content.startsWith(trailingTextContent) ? (state.currentTextNode = null, state.result.length = trailingTextStart) : state.currentTextNode = state.result[state.result.length - 1]);
|
|
30353
30628
|
let nextToken = state.tokens[state.index + 1];
|
|
30354
|
-
if ((content === "`" || content === "|" || content === "$") && !hasEscapedMarkup(token, `\\${content}`) || /^\*+$/.test(content) && !hasEscapedMarkup(token, "\\*")) {
|
|
30629
|
+
if (state.options?.final !== !0 && ((content === "`" || content === "|" || content === "$") && !hasEscapedMarkup(token, `\\${content}`) || /^\*+$/.test(content) && !hasEscapedMarkup(token, "\\*"))) {
|
|
30355
30630
|
state.index++;
|
|
30356
30631
|
return;
|
|
30357
30632
|
}
|
|
@@ -30551,9 +30826,20 @@ function dispatchInlineToken(state, token) {
|
|
|
30551
30826
|
function handleReference(state, token) {
|
|
30552
30827
|
state.resetCurrentTextNode(), state.pushParsed(parseReferenceToken(token)), state.index++;
|
|
30553
30828
|
}
|
|
30829
|
+
var TEXT_RECOVERY_MARKER_RE = /[!$(*[\\\]_`|~]/;
|
|
30554
30830
|
function parseInlineTokens(tokens, raw, pPreToken, options) {
|
|
30555
30831
|
if (!tokens || tokens.length === 0)
|
|
30556
30832
|
return [];
|
|
30833
|
+
if (tokens.length === 1 && tokens[0].type === "text") {
|
|
30834
|
+
let content = tokens[0].content;
|
|
30835
|
+
if (typeof content == "string" && content && content !== "<" && !content.endsWith("undefined") && !TEXT_RECOVERY_MARKER_RE.test(content))
|
|
30836
|
+
return [{
|
|
30837
|
+
type: "text",
|
|
30838
|
+
content,
|
|
30839
|
+
raw: content,
|
|
30840
|
+
center: !1
|
|
30841
|
+
}];
|
|
30842
|
+
}
|
|
30557
30843
|
let parseContext = ensureParseContext(options), inheritedContext = parseContext.linkifyDemotionContext, inferredContext = inferLinkifyDemotionContext(raw), linkifyDemotionContext = {
|
|
30558
30844
|
filename: inheritedContext?.filename || inferredContext.filename,
|
|
30559
30845
|
explicitFilename: inheritedContext?.explicitFilename || inferredContext.explicitFilename,
|
|
@@ -31341,7 +31627,7 @@ function parseBasicBlockToken(tokens, index, options, parseInlineTokens$1) {
|
|
|
31341
31627
|
return includeSourceMap && applyNodeSourceMap(paragraphNode, token, options), [paragraphNode, index + 1];
|
|
31342
31628
|
}
|
|
31343
31629
|
if (htmlBlockNode.tag && tagSets?.customTagSet?.has(htmlBlockNode.tag)) {
|
|
31344
|
-
let tag = htmlBlockNode.tag, context = isParseContext(options) ? options : void 0, source = String(context?.sourceMarkdown ?? ""), cursor = Number(context?.customHtmlBlockCursor ?? 0), mappedLineStart = Array.isArray(token.map) ?
|
|
31630
|
+
let tag = htmlBlockNode.tag, context = isParseContext(options) ? options : void 0, source = String(context?.sourceMarkdown ?? ""), cursor = Number(context?.customHtmlBlockCursor ?? 0), mappedLine = Number(token.map?.[0] ?? 0), mappedLineStart = Array.isArray(token.map) ? context?.sourceLineOffsets?.[mappedLine] ?? lineToIndex(source, mappedLine) : 0, fromSource = findNextCustomHtmlBlockFromSource(source, tag, Math.max(clampNonNegative(cursor), clampNonNegative(mappedLineStart)));
|
|
31345
31631
|
fromSource && context && (context.customHtmlBlockCursor = fromSource.end);
|
|
31346
31632
|
let rawHtml = String(fromSource?.raw ?? htmlBlockNode.raw ?? ""), openEnd = findTagCloseIndexOutsideQuotes(rawHtml), openTag = openEnd !== -1 ? rawHtml.slice(0, openEnd + 1) : rawHtml, selfClosing = openEnd !== -1 && /\/\s*>\s*$/.test(openTag), closeRange = openEnd === -1 ? null : findMatchingCloseTagRange(rawHtml, tag, openEnd + 1), closeIndex = closeRange?.start ?? -1, inner = "";
|
|
31347
31633
|
openEnd !== -1 && (closeIndex !== -1 && openEnd < closeIndex ? inner = rawHtml.slice(openEnd + 1, closeIndex) : inner = rawHtml.slice(openEnd + 1)), closeIndex === -1 && (inner = stripTrailingPartialClosingTag(inner, tag));
|
|
@@ -31521,15 +31807,11 @@ function maybePromoteCustomNodeFromParagraph(node, options) {
|
|
|
31521
31807
|
function processTokensWithContext(tokens, options, parseInlineTokens$1) {
|
|
31522
31808
|
if (!tokens || !Array.isArray(tokens))
|
|
31523
31809
|
return [];
|
|
31524
|
-
let result = [], linkifyContext = createLinkifyDemotionContextTracker(options),
|
|
31525
|
-
if (Array.isArray(seedRaws) && seedRaws.length)
|
|
31526
|
-
for (let raw of seedRaws)
|
|
31527
|
-
linkifyContext.remember(String(raw ?? ""));
|
|
31528
|
-
let includeSourceMap = options?.includeSourceMap === !0, i = 0;
|
|
31810
|
+
let result = [], resultContexts = [], linkifyContext = createLinkifyDemotionContextTracker(options), includeSourceMap = options?.includeSourceMap === !0, i = 0;
|
|
31529
31811
|
for (; i < tokens.length; ) {
|
|
31530
31812
|
let handled = parseCommonBlockToken(tokens, i, linkifyContext.options(), containerTokenHandlers, parseInlineTokens$1);
|
|
31531
31813
|
if (handled) {
|
|
31532
|
-
recordInternalNodeSourceRange(handled[0], tokens[i], options), result.push(handled[0]), linkifyContext.remember(handled[0].raw), i = handled[1];
|
|
31814
|
+
recordInternalNodeSourceRange(handled[0], tokens[i], options), result.push(handled[0]), linkifyContext.remember(handled[0].raw), resultContexts.push(linkifyContext.snapshot()), i = handled[1];
|
|
31533
31815
|
continue;
|
|
31534
31816
|
}
|
|
31535
31817
|
let token = tokens[i];
|
|
@@ -31619,42 +31901,52 @@ function processTokensWithContext(tokens, options, parseInlineTokens$1) {
|
|
|
31619
31901
|
i += 1;
|
|
31620
31902
|
break;
|
|
31621
31903
|
}
|
|
31904
|
+
let context = linkifyContext.snapshot();
|
|
31905
|
+
for (; resultContexts.length < result.length; )
|
|
31906
|
+
resultContexts.push(context);
|
|
31622
31907
|
}
|
|
31623
|
-
return result;
|
|
31908
|
+
return options.linkifyDemotionResultContexts = resultContexts, result;
|
|
31624
31909
|
}
|
|
31625
31910
|
function getCachedSourceLineOffsets(runtime, source) {
|
|
31626
31911
|
let cached = runtime.sourceLineOffsets;
|
|
31627
|
-
if (cached
|
|
31912
|
+
if (cached?.source === source)
|
|
31628
31913
|
return cached.offsets;
|
|
31629
|
-
if (cached && source.length > cached.source.length &&
|
|
31914
|
+
if (cached && source.length > cached.source.length && runtime.sourceExtends(cached.source, source)) {
|
|
31630
31915
|
let offsets$1 = cached.offsets;
|
|
31631
31916
|
for (let i = cached.source.length; i < source.length; i++)
|
|
31632
31917
|
source.charCodeAt(i) === 10 && offsets$1.push(i + 1);
|
|
31633
31918
|
return cached.source = source, offsets$1;
|
|
31634
31919
|
}
|
|
31635
|
-
let offsets =
|
|
31636
|
-
for (let i = 0; i < source.length; i++)
|
|
31637
|
-
source.charCodeAt(i) === 10 && offsets.push(i + 1);
|
|
31920
|
+
let offsets = computeSourceLineOffsets(source);
|
|
31638
31921
|
return runtime.sourceLineOffsets = {
|
|
31639
31922
|
source,
|
|
31640
31923
|
offsets
|
|
31641
31924
|
}, offsets;
|
|
31642
31925
|
}
|
|
31926
|
+
function computeSourceLineOffsets(source) {
|
|
31927
|
+
let offsets = [0];
|
|
31928
|
+
for (let i = 0; i < source.length; i++)
|
|
31929
|
+
source.charCodeAt(i) === 10 && offsets.push(i + 1);
|
|
31930
|
+
return offsets;
|
|
31931
|
+
}
|
|
31643
31932
|
var parserRuntimes = /* @__PURE__ */ new WeakMap(), wrappedMarkdownItInstances = /* @__PURE__ */ new WeakSet(), wrappedStreamInstances = /* @__PURE__ */ new WeakSet();
|
|
31644
31933
|
function sameSemantics(left, right) {
|
|
31645
31934
|
return left.customHtmlTags === right.customHtmlTags && left.hasCustomParserExtensions === right.hasCustomParserExtensions && left.includeSourceMap === right.includeSourceMap && left.postTransformNodes === right.postTransformNodes && left.postTransformTokens === right.postTransformTokens && left.preTransformTokens === right.preTransformTokens && left.requireClosingStrong === right.requireClosingStrong && left.reuseStableTopLevelNodes === right.reuseStableTopLevelNodes && left.streamParse === right.streamParse && left.validateLink === right.validateLink;
|
|
31646
31935
|
}
|
|
31647
31936
|
var ParserRuntime = class {
|
|
31648
31937
|
constructor(markdownIt$1) {
|
|
31649
|
-
this.streamParseEnvs = /* @__PURE__ */ new Map(), this.detailsStitchCache = /* @__PURE__ */ new WeakMap(), this.nodeSourceRanges = /* @__PURE__ */ new WeakMap(), this.finalized = !1, this.resettingStream = !1, this.streamStateActive = !1, this.streamResetInCurrentRootParse = !1, this.markdownIt = markdownIt$1;
|
|
31938
|
+
this.streamParseEnvs = /* @__PURE__ */ new Map(), this.htmlPassIdentityPreserving = !1, this.detailsStitchCache = /* @__PURE__ */ new WeakMap(), this.nodeSourceRanges = /* @__PURE__ */ new WeakMap(), this.finalized = !1, this.resettingStream = !1, this.streamStateActive = !1, this.streamResetInCurrentRootParse = !1, this.markdownIt = markdownIt$1;
|
|
31939
|
+
}
|
|
31940
|
+
sourceExtends(previousSource, currentSource) {
|
|
31941
|
+
return this.sourceRelationPrevious === previousSource && this.sourceRelationCurrent === currentSource ? !0 : currentSource.startsWith(previousSource) ? (this.sourceRelationPrevious = previousSource, this.sourceRelationCurrent = currentSource, !0) : !1;
|
|
31650
31942
|
}
|
|
31651
31943
|
beginRootParse(source, semantics) {
|
|
31652
31944
|
this.streamResetInCurrentRootParse = !1;
|
|
31653
|
-
let sourceChangedNonAppend = this.documentSource !== void 0 && source !== this.documentSource && !
|
|
31945
|
+
let sourceChangedNonAppend = this.documentSource !== void 0 && source !== this.documentSource && !this.sourceExtends(this.documentSource, source), semanticsChanged = this.semantics !== void 0 && !sameSemantics(this.semantics, semantics);
|
|
31654
31946
|
(this.finalized || sourceChangedNonAppend || semanticsChanged) && this.resetDocument(this.streamStateActive), this.finalized = !1, this.documentSource = source, this.semantics = semantics;
|
|
31655
31947
|
}
|
|
31656
31948
|
finishRootParse(final) {
|
|
31657
|
-
final && (this.clearDocumentCaches(), this.documentSource = void 0, this.semantics = void 0, this.finalized = !0);
|
|
31949
|
+
this.sourceRelationPrevious = void 0, this.sourceRelationCurrent = void 0, final && (this.clearDocumentCaches(), this.documentSource = void 0, this.semantics = void 0, this.finalized = !0);
|
|
31658
31950
|
}
|
|
31659
31951
|
resetForFinalAutoParse() {
|
|
31660
31952
|
this.streamResetInCurrentRootParse || this.resetStreamOnly(), this.clearDocumentCaches();
|
|
@@ -31689,7 +31981,7 @@ var ParserRuntime = class {
|
|
|
31689
31981
|
this.resetDocument(!0), parserRuntimes.delete(this.markdownIt);
|
|
31690
31982
|
}
|
|
31691
31983
|
clearDocumentCaches() {
|
|
31692
|
-
this.safeMarkdown = void 0, this.tolerantMathBoundary = void 0, this.pendingExplicitMathTail = void 0, this.streamParseEnvs.clear(), this.topLevelStreamParseMode = void 0, this.structuredStream = void 0, this.siblingHtmlChildren = void 0, this.detailsStitchCache = /* @__PURE__ */ new WeakMap(), this.nodeSourceRanges = /* @__PURE__ */ new WeakMap(), this.sourceLineOffsets = void 0;
|
|
31984
|
+
this.safeMarkdown = void 0, this.tolerantMathBoundary = void 0, this.pendingExplicitMathTail = void 0, this.streamParseEnvs.clear(), this.topLevelStreamParseMode = void 0, this.structuredStream = void 0, this.htmlPassIdentityPreserving = !1, this.siblingHtmlChildren = void 0, this.detailsStitchCache = /* @__PURE__ */ new WeakMap(), this.nodeSourceRanges = /* @__PURE__ */ new WeakMap(), this.sourceLineOffsets = void 0, this.sourceRelationPrevious = void 0, this.sourceRelationCurrent = void 0;
|
|
31693
31985
|
}
|
|
31694
31986
|
};
|
|
31695
31987
|
function wrapMarkdownItBoundaries(md) {
|
|
@@ -31828,6 +32120,11 @@ function createSourceLineMapper(source, parsedSource) {
|
|
|
31828
32120
|
};
|
|
31829
32121
|
};
|
|
31830
32122
|
}
|
|
32123
|
+
var closingTagBlankLineReCache = /* @__PURE__ */ new Map();
|
|
32124
|
+
function getClosingTagBlankLineRe(tag) {
|
|
32125
|
+
let re = closingTagBlankLineReCache.get(tag);
|
|
32126
|
+
return re || (re = new RegExp(String.raw`(^[\t ]*<\s*\/\s*${tag}\s*>[\t ]*)(\r?\n)(?![\t ]*\r?\n|$)`, "gim"), closingTagBlankLineReCache.size >= 64 && closingTagBlankLineReCache.clear(), closingTagBlankLineReCache.set(tag, re)), re;
|
|
32127
|
+
}
|
|
31831
32128
|
function stripDanglingHtmlLikeTail(markdown) {
|
|
31832
32129
|
let isWs = (ch) => ch === " " || ch === " " || ch === `
|
|
31833
32130
|
` || ch === "\r", isLikelyHtmlTagPrefix = (tail$1) => {
|
|
@@ -31888,8 +32185,8 @@ function stripDanglingHtmlLikeTail(markdown) {
|
|
|
31888
32185
|
}
|
|
31889
32186
|
}
|
|
31890
32187
|
return !0;
|
|
31891
|
-
},
|
|
31892
|
-
if (lastLt === -1
|
|
32188
|
+
}, s = String(markdown ?? ""), lastLt = s.lastIndexOf("<");
|
|
32189
|
+
if (lastLt === -1)
|
|
31893
32190
|
return s;
|
|
31894
32191
|
if (lastLt > 0) {
|
|
31895
32192
|
let prev = s[lastLt - 1], prevIsWs = prev === " " || prev === " " || prev === `
|
|
@@ -31899,7 +32196,7 @@ function stripDanglingHtmlLikeTail(markdown) {
|
|
|
31899
32196
|
}
|
|
31900
32197
|
let tail = s.slice(lastLt);
|
|
31901
32198
|
return tail.includes(">") || tail.length > 1 && (tail[1] === " " || tail[1] === " " || tail[1] === `
|
|
31902
|
-
` || tail[1] === "\r") || !isLikelyHtmlTagPrefix(tail) ? s : s.slice(0, lastLt);
|
|
32199
|
+
` || tail[1] === "\r") || !isLikelyHtmlTagPrefix(tail) || isInsideOpenMarkdownFenceBeforeOffset(s, lastLt) ? s : s.slice(0, lastLt);
|
|
31903
32200
|
}
|
|
31904
32201
|
function ensureBlankLineBeforeInlineMultilineCustomHtmlBlocks(markdown, tags) {
|
|
31905
32202
|
if (!markdown || !tags.length)
|
|
@@ -32445,10 +32742,8 @@ function normalizeStreamingCustomHtmlSource(markdown, customHtmlTags, isFinal) {
|
|
|
32445
32742
|
if (customHtmlTags?.length && safeMarkdown.includes("<")) {
|
|
32446
32743
|
let tags = normalizeCustomHtmlTags(customHtmlTags);
|
|
32447
32744
|
if (tags.length && (safeMarkdown = ensureBlankLineBeforeInlineMultilineCustomHtmlBlocks(safeMarkdown, tags), safeMarkdown = normalizeCustomHtmlOpeningTagSameLine(safeMarkdown, tags), safeMarkdown = ensureBlankLineBeforeCustomHtmlBlocks(safeMarkdown, tags), safeMarkdown = ensureBlankLineAfterCustomHtmlCloseBeforeBlockMarkerSameLine(safeMarkdown, tags), safeMarkdown.includes("</")))
|
|
32448
|
-
for (let tag of tags)
|
|
32449
|
-
|
|
32450
|
-
safeMarkdown = safeMarkdown.replace(re, "$1$2$2");
|
|
32451
|
-
}
|
|
32745
|
+
for (let tag of tags)
|
|
32746
|
+
safeMarkdown = safeMarkdown.replace(getClosingTagBlankLineRe(tag), "$1$2$2");
|
|
32452
32747
|
}
|
|
32453
32748
|
return isFinal || (safeMarkdown = stripDanglingHtmlLikeTail(safeMarkdown)), safeMarkdown;
|
|
32454
32749
|
}
|
|
@@ -32475,7 +32770,7 @@ function transformStreamingSafeMarkdown(source, isFinal, options) {
|
|
|
32475
32770
|
}
|
|
32476
32771
|
function getSafeMarkdown(runtime, sourceMarkdown, isFinal, options) {
|
|
32477
32772
|
let mode = `${isFinal ? "final" : "stream"}:${(options.customHtmlTags ?? []).join(",")}`, previous = options.isFragment ? void 0 : runtime.safeMarkdown, safeMarkdown;
|
|
32478
|
-
if (!isFinal && !options.customHtmlTags?.length && previous && previous.mode === mode && sourceMarkdown.length >= previous.source.length &&
|
|
32773
|
+
if (!isFinal && !options.customHtmlTags?.length && previous && previous.mode === mode && sourceMarkdown.length >= previous.source.length && runtime.sourceExtends(previous.source, sourceMarkdown)) {
|
|
32479
32774
|
let windowStart = Math.max(0, previous.source.length - SAFE_MARKDOWN_WINDOW_MARGIN - SAFE_MARKDOWN_WINDOW_OVERLAP), transformed = transformStreamingSafeMarkdown(sourceMarkdown.slice(windowStart), isFinal, options), overlapLength = previous.source.length - windowStart;
|
|
32480
32775
|
safeMarkdown = transformed.length >= overlapLength && transformed.slice(0, overlapLength) === previous.safeMarkdown.slice(-overlapLength) ? previous.safeMarkdown.slice(0, previous.safeMarkdown.length - overlapLength) + transformed : transformStreamingSafeMarkdown(sourceMarkdown, isFinal, options);
|
|
32481
32776
|
} else
|
|
@@ -32546,7 +32841,7 @@ function parseMarkdownWithContext(markdown, inputContext) {
|
|
|
32546
32841
|
...options,
|
|
32547
32842
|
sourceLineMapper: options.includeSourceMap === !0 ? createSourceLineMapper(sourceMarkdown, safeMarkdown) : void 0,
|
|
32548
32843
|
sourceMarkdown: safeMarkdown,
|
|
32549
|
-
sourceLineOffsets: getCachedSourceLineOffsets(runtime, safeMarkdown),
|
|
32844
|
+
sourceLineOffsets: options.isFragment ? computeSourceLineOffsets(safeMarkdown) : getCachedSourceLineOffsets(runtime, safeMarkdown),
|
|
32550
32845
|
customHtmlBlockCursor: 0
|
|
32551
32846
|
}, result = processTopLevelTokensWithReuse(runtime, safeMarkdown, transformedTokens, internalOptions, {
|
|
32552
32847
|
processTokens: (nextTokens, nextOptions) => processTokensWithTiming(nextTokens, nextOptions, timing),
|
|
@@ -32568,9 +32863,18 @@ function parseMarkdownWithContext(markdown, inputContext) {
|
|
|
32568
32863
|
getInternalNodeSourceRange: (node) => getInternalNodeSourceRange(node, runtime),
|
|
32569
32864
|
markdownIt: md,
|
|
32570
32865
|
parseFragment: (fragment, fragmentOptions) => parseMarkdownWithContext(fragment, fragmentOptions)
|
|
32571
|
-
};
|
|
32572
|
-
|
|
32573
|
-
|
|
32866
|
+
}, canReuseHtmlPrefix = tailStart > 0 && runtime.htmlPassIdentityPreserving, tailSourceStart = canReuseHtmlPrefix ? getInternalNodeSourceRange(result[tailStart], runtime)?.start : void 0, hasDetailsInput = !1;
|
|
32867
|
+
for (let i = canReuseHtmlPrefix ? tailStart : 0; i < result.length; i++) {
|
|
32868
|
+
let node = result[i];
|
|
32869
|
+
if (node.type === "html_block" && String(node.tag ?? "").toLowerCase() === "details") {
|
|
32870
|
+
hasDetailsInput = !0;
|
|
32871
|
+
break;
|
|
32872
|
+
}
|
|
32873
|
+
}
|
|
32874
|
+
let useHtmlTail = canReuseHtmlPrefix && !hasDetailsInput && tailSourceStart != null, prefix = useHtmlTail ? result.slice(0, tailStart) : [], htmlInput = useHtmlTail ? result.slice(tailStart) : result, htmlSourceStart = useHtmlTail ? tailSourceStart : 0, htmlResult = mergeSplitTopLevelHtmlBlocks(htmlInput, isFinal, safeMarkdown, htmlStructureContext, internalOptions, htmlSourceStart), mergeIdentityPreserving = htmlResult.length === htmlInput.length && htmlResult.every((node, index) => node === htmlInput[index]);
|
|
32875
|
+
hasDetailsInput && (htmlResult = combineStructuredDetailsHtmlBlocks(htmlResult, safeMarkdown, htmlStructureContext, internalOptions, isFinal, htmlSourceStart)[0]), htmlResult = structureGenericHtmlBlockChildren(htmlResult, htmlStructureContext, internalOptions, isFinal), result = useHtmlTail ? prefix.concat(htmlResult) : htmlResult, runtime.htmlPassIdentityPreserving = !hasDetailsInput && mergeIdentityPreserving, timing && addTiming(timing, "htmlBlockPassesMs", getParserNow() - htmlPassesStartedAt);
|
|
32876
|
+
} else
|
|
32877
|
+
runtime.htmlPassIdentityPreserving = !0;
|
|
32574
32878
|
return isFinal && finalizeHtmlBlockLoading(result), result = applyPostTransformNodes(result, options), options.debug && console.log("Parsed Markdown Tree Structure:", result), finishTimedParse(result, timing, parseStartedAt);
|
|
32575
32879
|
}
|
|
32576
32880
|
function parseMarkdownToStructure(markdown, md, options = {}) {
|
|
@@ -32708,11 +33012,13 @@ function getMarkdown(msgId = `editor-${Date.now()}`, options = {}) {
|
|
|
32708
33012
|
md.use(applyInlinePairs), md.use(sup_plugin), md.use(ins_plugin$1);
|
|
32709
33013
|
let checkboxModule = import_markdown_it_task_checkbox, markdownItCheckboxPlugin = checkboxModule.default ?? checkboxModule;
|
|
32710
33014
|
md.use(markdownItCheckboxPlugin), md.use(ins_plugin), md.use(footnote_plugin), md.core.ruler.after("block", "mark_fence_closed", (state) => {
|
|
32711
|
-
let s = state, src = s.src, envFinal = !!s.env?.__markstreamFinal, lines
|
|
33015
|
+
let s = state, src = s.src, envFinal = !!s.env?.__markstreamFinal, lines;
|
|
32712
33016
|
for (let token of s.tokens) {
|
|
32713
33017
|
if (token.type !== "fence" || !token.map || !token.markup)
|
|
32714
33018
|
continue;
|
|
32715
|
-
let openLine = token.map[0], endLine = token.map[1], markup = token.markup, marker = markup[0], minLen = markup.length,
|
|
33019
|
+
let openLine = token.map[0], endLine = token.map[1], markup = token.markup, marker = markup[0], minLen = markup.length, lineIdx = Math.max(0, endLine - 1);
|
|
33020
|
+
lines ?? (lines = src.split(/\r?\n/));
|
|
33021
|
+
let line = lines[lineIdx] ?? "", i = 0;
|
|
32716
33022
|
for (; i < line.length && (line[i] === " " || line[i] === " "); )
|
|
32717
33023
|
i++;
|
|
32718
33024
|
let count = 0;
|
|
@@ -34981,7 +35287,11 @@ var TVirtualMarkdown = (0, import_vue33.defineComponent)({
|
|
|
34981
35287
|
return withTextWidthProvider(
|
|
34982
35288
|
widthProvider,
|
|
34983
35289
|
() => terminalSelectionRowSpans(range, cols, rows.value.length).map((span) => {
|
|
34984
|
-
let text2 =
|
|
35290
|
+
let text2 = sliceByCellsRangeForSelection(
|
|
35291
|
+
rows.value[span.y]?.plainText ?? "",
|
|
35292
|
+
span.x0,
|
|
35293
|
+
span.x1
|
|
35294
|
+
);
|
|
34985
35295
|
return span.x1 >= cols ? text2.trimEnd() : text2;
|
|
34986
35296
|
}).join(`
|
|
34987
35297
|
`)
|