@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/markdown.cjs
CHANGED
|
@@ -853,6 +853,19 @@ function sliceByCellsRange(text2, startCells, endCells, provider = currentTextWi
|
|
|
853
853
|
out.push(g), cells = next;
|
|
854
854
|
}), out.length ? out.join("") : "";
|
|
855
855
|
}
|
|
856
|
+
function sliceByCellsRangeForSelection(text2, startCells, endCells, provider = currentTextWidthProvider()) {
|
|
857
|
+
if (startCells = Math.max(0, Math.floor(startCells)), endCells = Math.max(0, Math.floor(endCells)), endCells <= startCells || !text2)
|
|
858
|
+
return "";
|
|
859
|
+
if (hasAsciiFastPath(provider) && isAscii(text2))
|
|
860
|
+
return text2.slice(startCells, endCells);
|
|
861
|
+
let out = [], cells = 0;
|
|
862
|
+
return forEachGrapheme(text2, (g) => {
|
|
863
|
+
let leadingCell = cells;
|
|
864
|
+
if (cells += charCellWidth(g, provider), leadingCell >= endCells)
|
|
865
|
+
return !1;
|
|
866
|
+
leadingCell >= startCells && out.push(g);
|
|
867
|
+
}), out.join("");
|
|
868
|
+
}
|
|
856
869
|
var textWidthCache = /* @__PURE__ */ new Map(), MAX_TEXT_WIDTH_CACHE = 1024;
|
|
857
870
|
function textWidthCacheGet(text2) {
|
|
858
871
|
let cached = textWidthCache.get(text2);
|
|
@@ -1279,7 +1292,7 @@ function loadBuiltinMathRasterizer() {
|
|
|
1279
1292
|
})()), builtinRasterizerLoad;
|
|
1280
1293
|
}
|
|
1281
1294
|
|
|
1282
|
-
// node_modules/.pnpm/stream-markdown-parser@1.2.
|
|
1295
|
+
// node_modules/.pnpm/stream-markdown-parser@1.2.19/node_modules/stream-markdown-parser/dist/index.js
|
|
1283
1296
|
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() {
|
|
1284
1297
|
return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
1285
1298
|
}, __export$1 = (all) => {
|
|
@@ -4606,6 +4619,30 @@ function inline(state) {
|
|
|
4606
4619
|
}
|
|
4607
4620
|
}
|
|
4608
4621
|
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;
|
|
4622
|
+
function hasLinkifySeed(text$1) {
|
|
4623
|
+
return text$1.includes(".") || text$1.includes("@") || text$1.includes(":");
|
|
4624
|
+
}
|
|
4625
|
+
var linkifySeedSafety = /* @__PURE__ */ new WeakMap();
|
|
4626
|
+
function isLinkifySeedSafe(linkify$2) {
|
|
4627
|
+
let schemaSearch = linkify$2.re?.get_schema_search?.();
|
|
4628
|
+
if (!schemaSearch)
|
|
4629
|
+
return !1;
|
|
4630
|
+
let cached = linkifySeedSafety.get(linkify$2);
|
|
4631
|
+
if (cached && cached.schemaSearch === schemaSearch)
|
|
4632
|
+
return cached.safe;
|
|
4633
|
+
let schemas = linkify$2.__schemas__, safe = !0;
|
|
4634
|
+
if (schemas) {
|
|
4635
|
+
for (let name in schemas)
|
|
4636
|
+
if (name.charCodeAt(name.length - 1) !== 58) {
|
|
4637
|
+
safe = !1;
|
|
4638
|
+
break;
|
|
4639
|
+
}
|
|
4640
|
+
}
|
|
4641
|
+
return linkifySeedSafety.set(linkify$2, {
|
|
4642
|
+
schemaSearch,
|
|
4643
|
+
safe
|
|
4644
|
+
}), safe;
|
|
4645
|
+
}
|
|
4609
4646
|
function isLinkOpen(str) {
|
|
4610
4647
|
return /^<a[>\s]/i.test(str);
|
|
4611
4648
|
}
|
|
@@ -4631,55 +4668,57 @@ function trimCjkPrefixFromFuzzyLink(linkify$2, link$1) {
|
|
|
4631
4668
|
}
|
|
4632
4669
|
function linkify(state) {
|
|
4633
4670
|
let blockTokens = state.tokens;
|
|
4634
|
-
if (state.md?.options?.linkify)
|
|
4635
|
-
|
|
4636
|
-
|
|
4637
|
-
|
|
4671
|
+
if (!state.md?.options?.linkify)
|
|
4672
|
+
return;
|
|
4673
|
+
let seedSafe = isLinkifySeedSafe(state.md.linkify), mayMatch = (text$1) => seedSafe ? hasLinkifySeed(text$1) : !0;
|
|
4674
|
+
for (let j = 0; j < blockTokens.length; j++) {
|
|
4675
|
+
let blockToken$1 = blockTokens[j];
|
|
4676
|
+
if (blockToken$1.type !== "inline" || !mayMatch(blockToken$1.content))
|
|
4677
|
+
continue;
|
|
4678
|
+
let tokens = blockToken$1.children;
|
|
4679
|
+
tokens || (tokens = [], blockToken$1.children = tokens);
|
|
4680
|
+
let htmlLinkLevel = 0;
|
|
4681
|
+
for (let i = tokens.length - 1; i >= 0; i--) {
|
|
4682
|
+
let currentToken = tokens[i];
|
|
4683
|
+
if (currentToken.type === "link_close") {
|
|
4684
|
+
for (i--; i >= 0 && tokens[i].level !== currentToken.level && tokens[i].type !== "link_open"; )
|
|
4685
|
+
i--;
|
|
4638
4686
|
continue;
|
|
4639
|
-
|
|
4640
|
-
|
|
4641
|
-
|
|
4642
|
-
|
|
4643
|
-
|
|
4644
|
-
|
|
4645
|
-
|
|
4646
|
-
|
|
4647
|
-
|
|
4648
|
-
|
|
4649
|
-
if (
|
|
4650
|
-
continue;
|
|
4651
|
-
let text$1 = currentToken.content, links = (state.md.linkify.match(text$1) || []).map((link$1) => trimCjkPrefixFromFuzzyLink(state.md.linkify, link$1));
|
|
4652
|
-
if (links.length === 0)
|
|
4687
|
+
}
|
|
4688
|
+
if (currentToken.type === "html_inline" && (isLinkOpen(currentToken.content) && htmlLinkLevel > 0 && htmlLinkLevel--, isLinkClose(currentToken.content) && htmlLinkLevel++), htmlLinkLevel > 0 || currentToken.type !== "text" || !mayMatch(currentToken.content))
|
|
4689
|
+
continue;
|
|
4690
|
+
let text$1 = currentToken.content, links = (state.md.linkify.match(text$1) || []).map((link$1) => trimCjkPrefixFromFuzzyLink(state.md.linkify, link$1));
|
|
4691
|
+
if (links.length === 0)
|
|
4692
|
+
continue;
|
|
4693
|
+
let nodes = [], level = currentToken.level, lastPos = 0;
|
|
4694
|
+
links.length > 0 && links[0].index === 0 && i > 0 && tokens[i - 1].type === "text_special" && (links = links.slice(1));
|
|
4695
|
+
for (let ln = 0; ln < links.length; ln++) {
|
|
4696
|
+
let link$1 = links[ln], fullUrl = state.md.normalizeLink(link$1.url);
|
|
4697
|
+
if (!state.md.validateLink(fullUrl))
|
|
4653
4698
|
continue;
|
|
4654
|
-
let
|
|
4655
|
-
|
|
4656
|
-
|
|
4657
|
-
|
|
4658
|
-
|
|
4659
|
-
|
|
4660
|
-
let urlText = link$1.text;
|
|
4661
|
-
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:\/\//, "");
|
|
4662
|
-
let pos = link$1.index;
|
|
4663
|
-
if (pos > lastPos) {
|
|
4664
|
-
let textToken$1 = new Token("text", "", 0);
|
|
4665
|
-
textToken$1.content = text$1.slice(lastPos, pos), textToken$1.level = level, nodes.push(textToken$1);
|
|
4666
|
-
}
|
|
4667
|
-
let tokenOpen = new Token("link_open", "a", 1);
|
|
4668
|
-
tokenOpen.attrs = [["href", fullUrl]], tokenOpen.level = level++, tokenOpen.markup = "linkify", tokenOpen.info = "auto", nodes.push(tokenOpen);
|
|
4669
|
-
let tokenText = new Token("text", "", 0);
|
|
4670
|
-
tokenText.content = urlText, tokenText.level = level, nodes.push(tokenText);
|
|
4671
|
-
let tokenClose = new Token("link_close", "a", -1);
|
|
4672
|
-
tokenClose.level = --level, tokenClose.markup = "linkify", tokenClose.info = "auto", nodes.push(tokenClose), lastPos = link$1.lastIndex;
|
|
4699
|
+
let urlText = link$1.text;
|
|
4700
|
+
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:\/\//, "");
|
|
4701
|
+
let pos = link$1.index;
|
|
4702
|
+
if (pos > lastPos) {
|
|
4703
|
+
let textToken$1 = new Token("text", "", 0);
|
|
4704
|
+
textToken$1.content = text$1.slice(lastPos, pos), textToken$1.level = level, nodes.push(textToken$1);
|
|
4673
4705
|
}
|
|
4674
|
-
|
|
4675
|
-
|
|
4676
|
-
|
|
4677
|
-
|
|
4678
|
-
|
|
4679
|
-
|
|
4706
|
+
let tokenOpen = new Token("link_open", "a", 1);
|
|
4707
|
+
tokenOpen.attrs = [["href", fullUrl]], tokenOpen.level = level++, tokenOpen.markup = "linkify", tokenOpen.info = "auto", nodes.push(tokenOpen);
|
|
4708
|
+
let tokenText = new Token("text", "", 0);
|
|
4709
|
+
tokenText.content = urlText, tokenText.level = level, nodes.push(tokenText);
|
|
4710
|
+
let tokenClose = new Token("link_close", "a", -1);
|
|
4711
|
+
tokenClose.level = --level, tokenClose.markup = "linkify", tokenClose.info = "auto", nodes.push(tokenClose), lastPos = link$1.lastIndex;
|
|
4712
|
+
}
|
|
4713
|
+
if (lastPos !== 0) {
|
|
4714
|
+
if (lastPos < text$1.length) {
|
|
4715
|
+
let textToken$1 = new Token("text", "", 0);
|
|
4716
|
+
textToken$1.content = text$1.slice(lastPos), textToken$1.level = level, nodes.push(textToken$1);
|
|
4680
4717
|
}
|
|
4718
|
+
tokens.splice(i, 1, ...nodes);
|
|
4681
4719
|
}
|
|
4682
4720
|
}
|
|
4721
|
+
}
|
|
4683
4722
|
}
|
|
4684
4723
|
var NEWLINES_RE = /\r\n?|\n/g, NULL_RE = /\0/g;
|
|
4685
4724
|
function normalize(state) {
|
|
@@ -4855,7 +4894,7 @@ function process_inlines(tokens, state) {
|
|
|
4855
4894
|
nextChar = tokens[j].content.charCodeAt(0);
|
|
4856
4895
|
break;
|
|
4857
4896
|
}
|
|
4858
|
-
let isLastPunctChar =
|
|
4897
|
+
let isLastPunctChar = isPunctCode(lastChar), isNextPunctChar = isPunctCode(nextChar), isLastWhiteSpace = isWhiteSpace(lastChar), isNextWhiteSpace = isWhiteSpace(nextChar);
|
|
4859
4898
|
if (isNextWhiteSpace ? canOpen = !1 : isNextPunctChar && (isLastWhiteSpace || isLastPunctChar || (canOpen = !1)), isLastWhiteSpace ? canClose = !1 : isLastPunctChar && (isNextWhiteSpace || isNextPunctChar || (canClose = !1)), nextChar === 34 && t[0] === '"' && lastChar >= 48 && lastChar <= 57 && (canClose = canOpen = !1), canOpen && canClose && (canOpen = isLastPunctChar, canClose = isNextPunctChar), !canOpen && !canClose) {
|
|
4860
4899
|
isSingle && (token.content = replaceAt(token.content, t.index, APOSTROPHE));
|
|
4861
4900
|
continue;
|
|
@@ -4910,28 +4949,30 @@ var BAD_PROTO_RE = /^(?:vbscript|javascript|file|data):/, GOOD_DATA_RE = /^data:
|
|
|
4910
4949
|
"http:",
|
|
4911
4950
|
"https:",
|
|
4912
4951
|
"mailto:"
|
|
4913
|
-
];
|
|
4952
|
+
], 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;
|
|
4914
4953
|
function validateLink(url) {
|
|
4915
4954
|
let str = url.trim().toLowerCase();
|
|
4916
4955
|
return BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) : !0;
|
|
4917
4956
|
}
|
|
4918
4957
|
function normalizeLink(url) {
|
|
4919
4958
|
let parsed = parse_default(url, !0);
|
|
4920
|
-
if (parsed.hostname && (!parsed.protocol || RECODE_HOSTNAME_FOR.includes(parsed.protocol)))
|
|
4959
|
+
if (parsed.hostname && (!parsed.protocol || RECODE_HOSTNAME_FOR.includes(parsed.protocol)) && NON_ASCII_RE.test(parsed.hostname))
|
|
4921
4960
|
try {
|
|
4922
4961
|
parsed.hostname = import_punycode.default.toASCII(parsed.hostname);
|
|
4923
4962
|
} catch {
|
|
4924
4963
|
}
|
|
4925
|
-
|
|
4964
|
+
let formatted = format(parsed);
|
|
4965
|
+
return ENCODE_IDENTITY_RE.test(formatted) ? encode_default(formatted) : formatted;
|
|
4926
4966
|
}
|
|
4927
4967
|
function normalizeLinkText(url) {
|
|
4928
4968
|
let parsed = parse_default(url, !0);
|
|
4929
|
-
if (parsed.hostname && (!parsed.protocol || RECODE_HOSTNAME_FOR.includes(parsed.protocol)))
|
|
4969
|
+
if (parsed.hostname && (!parsed.protocol || RECODE_HOSTNAME_FOR.includes(parsed.protocol)) && (NON_ASCII_RE.test(parsed.hostname) || PUNYCODE_LABEL_RE.test(parsed.hostname)))
|
|
4930
4970
|
try {
|
|
4931
4971
|
parsed.hostname = import_punycode.default.toUnicode(parsed.hostname);
|
|
4932
4972
|
} catch {
|
|
4933
4973
|
}
|
|
4934
|
-
|
|
4974
|
+
let formatted = format(parsed);
|
|
4975
|
+
return DECODE_SCAN_RE.test(formatted) ? decode_default(formatted, `${decode_default.defaultChars}%`) : formatted;
|
|
4935
4976
|
}
|
|
4936
4977
|
function isSpace$7(code$1) {
|
|
4937
4978
|
switch (code$1) {
|
|
@@ -8330,6 +8371,37 @@ var Renderer = class {
|
|
|
8330
8371
|
return output;
|
|
8331
8372
|
}
|
|
8332
8373
|
}, renderer_default = Renderer, EMPTY_TOKENS = [], GLOBAL_STATE_APPEND_SCAN_WINDOW = 4096;
|
|
8374
|
+
function copyOptions(options) {
|
|
8375
|
+
let copy = { ...options };
|
|
8376
|
+
return Array.isArray(options.quotes) && (copy.quotes = [...options.quotes]), options.experimental && (copy.experimental = { ...options.experimental }), copy;
|
|
8377
|
+
}
|
|
8378
|
+
function optionsEqual(left, right) {
|
|
8379
|
+
let keys = Object.keys(right);
|
|
8380
|
+
return Object.keys(left).length !== keys.length ? !1 : keys.every((key) => {
|
|
8381
|
+
if (!Object.hasOwn(left, key))
|
|
8382
|
+
return !1;
|
|
8383
|
+
let leftValue = left[key], rightValue = right[key];
|
|
8384
|
+
if (Array.isArray(leftValue) && Array.isArray(rightValue))
|
|
8385
|
+
return leftValue.length === rightValue.length && leftValue.every((value, index) => Object.is(value, rightValue[index]));
|
|
8386
|
+
if (key === "experimental" && leftValue && rightValue) {
|
|
8387
|
+
let leftExperimental = leftValue, rightExperimental = rightValue, experimentalKeys = Object.keys(rightExperimental);
|
|
8388
|
+
return Object.keys(leftExperimental).length === experimentalKeys.length && experimentalKeys.every((option) => Object.hasOwn(leftExperimental, option) && Object.is(leftExperimental[option], rightExperimental[option]));
|
|
8389
|
+
}
|
|
8390
|
+
return Object.is(leftValue, rightValue);
|
|
8391
|
+
});
|
|
8392
|
+
}
|
|
8393
|
+
function copyParserConfig(md) {
|
|
8394
|
+
return {
|
|
8395
|
+
options: copyOptions(md.options),
|
|
8396
|
+
coreVersion: md.core.ruler.version,
|
|
8397
|
+
blockVersion: md.block.ruler.version,
|
|
8398
|
+
inlineVersion: md.inline.ruler.version,
|
|
8399
|
+
inline2Version: md.inline.ruler2.version
|
|
8400
|
+
};
|
|
8401
|
+
}
|
|
8402
|
+
function parserConfigEqual(config$1, md) {
|
|
8403
|
+
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;
|
|
8404
|
+
}
|
|
8333
8405
|
function appendedHasBlockConstructs(s) {
|
|
8334
8406
|
let len = s.length, lineStart = 0;
|
|
8335
8407
|
for (; lineStart <= len; ) {
|
|
@@ -8472,9 +8544,9 @@ var StreamParser = class {
|
|
|
8472
8544
|
__publicField(this, "core");
|
|
8473
8545
|
__publicField(this, "anchorBlock", new ParserBlock());
|
|
8474
8546
|
__publicField(this, "cache", null);
|
|
8547
|
+
__publicField(this, "snapshots", /* @__PURE__ */ new WeakSet());
|
|
8475
8548
|
__publicField(this, "stats", makeEmptyStats());
|
|
8476
8549
|
__publicField(this, "normalizeLineEndings", !0);
|
|
8477
|
-
__publicField(this, "coreRulerVersion", -1);
|
|
8478
8550
|
__publicField(this, "tokenMapsTrusted", !0);
|
|
8479
8551
|
__publicField(this, "allowUntrustedTailReuse", !1);
|
|
8480
8552
|
__publicField(this, "MIN_SIZE_FOR_OPTIMIZATION", 1e3);
|
|
@@ -8497,19 +8569,46 @@ var StreamParser = class {
|
|
|
8497
8569
|
let { resets } = this.stats;
|
|
8498
8570
|
this.stats = makeEmptyStats(), this.stats.resets = resets;
|
|
8499
8571
|
}
|
|
8500
|
-
|
|
8501
|
-
let
|
|
8502
|
-
|
|
8503
|
-
|
|
8572
|
+
snapshot() {
|
|
8573
|
+
let cache = this.cache;
|
|
8574
|
+
if (!cache)
|
|
8575
|
+
return null;
|
|
8576
|
+
let state = cache.snapshotState ?? { cache };
|
|
8577
|
+
cache.snapshotState = state;
|
|
8578
|
+
let snapshot = {
|
|
8579
|
+
state,
|
|
8580
|
+
get sourceLength() {
|
|
8581
|
+
return this.state.cache.src.length;
|
|
8582
|
+
},
|
|
8583
|
+
get tokenCount() {
|
|
8584
|
+
return this.state.cache.tokens.length;
|
|
8585
|
+
}
|
|
8586
|
+
};
|
|
8587
|
+
return this.snapshots.add(snapshot), snapshot;
|
|
8588
|
+
}
|
|
8589
|
+
restore(snapshot, md) {
|
|
8590
|
+
if (!this.snapshots.has(snapshot))
|
|
8591
|
+
throw new TypeError("Invalid stream snapshot");
|
|
8592
|
+
let cache = snapshot.state.cache;
|
|
8593
|
+
return this.cache = cache, parserConfigEqual(cache.config, md) ? cache.tokens : this.parse(cache.src, cache.env, md);
|
|
8594
|
+
}
|
|
8595
|
+
append(segment, env, md) {
|
|
8596
|
+
let cached = this.cache;
|
|
8597
|
+
if (!cached)
|
|
8598
|
+
throw new Error("Stream append requires cached history; call stream.parse(fullSource) first");
|
|
8599
|
+
return this.ensureBoundaryState(cached), this.parse(cached.src + segment, env, md, segment);
|
|
8600
|
+
}
|
|
8601
|
+
parse(src, env, md, knownAppend) {
|
|
8602
|
+
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");
|
|
8504
8603
|
this.normalizeLineEndings = lineNormalizerIndex >= 0 && blockRuleIndex >= 0 && lineNormalizerIndex < blockRuleIndex;
|
|
8505
|
-
let envProvided = env,
|
|
8604
|
+
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);
|
|
8506
8605
|
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;
|
|
8507
|
-
let cached = customNormalize || nonstandardBuiltinNormalize || unknownPreBlockRule ? null : previousCache;
|
|
8606
|
+
let cached = configChanged || customNormalize || nonstandardBuiltinNormalize || unknownPreBlockRule ? null : previousCache;
|
|
8508
8607
|
if (beginParseDiagnostics(envProvided ?? previousCache?.env ?? priorEnv), !cached || envProvided && envProvided !== cached.env) {
|
|
8509
8608
|
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;
|
|
8510
|
-
if (largeCachePolicy === "skip" && (shouldSkipLargeCache = src.length >= skipCacheChars, !shouldSkipLargeCache && skipCacheLines !== void 0 && (srcLineCount = countLines(src), shouldSkipLargeCache = srcLineCount >= skipCacheLines)), shouldSkipLargeCache) {
|
|
8609
|
+
if (largeCachePolicy === "skip" && (shouldSkipLargeCache = src.length >= skipCacheChars, !shouldSkipLargeCache && skipCacheLines !== void 0 && (srcLineCount = countLines(src), shouldSkipLargeCache = srcLineCount >= skipCacheLines)), shouldSkipLargeCache && knownAppend === void 0 && !previousCache?.snapshotState) {
|
|
8511
8610
|
let parsed$2 = this.parseFullDocument(src, workingEnv, md, srcLineCount, !1);
|
|
8512
|
-
return this.stats.total += 1, this.stats.fullParses += 1, this.stats.lastMode = "full", setStrategyDiagnostics(workingEnv, {
|
|
8611
|
+
return this.cache = null, this.stats.total += 1, this.stats.fullParses += 1, this.stats.lastMode = "full", setStrategyDiagnostics(workingEnv, {
|
|
8513
8612
|
area: "stream",
|
|
8514
8613
|
path: "stream-full",
|
|
8515
8614
|
reason: "skip-cache-large-one-shot",
|
|
@@ -8525,26 +8624,28 @@ var StreamParser = class {
|
|
|
8525
8624
|
maxChunkLines: useLines,
|
|
8526
8625
|
fenceAware: recommendation?.fenceAware ?? chunkFenceAware$1,
|
|
8527
8626
|
maxChunks: useMaxChunks
|
|
8528
|
-
})
|
|
8529
|
-
return this.cache = {
|
|
8627
|
+
}), globalStateReason = getParseDiagnostics(workingEnv)?.chunk?.globalStateDetected ?? null, cache$2 = this.setCache({
|
|
8530
8628
|
src,
|
|
8531
8629
|
tokens,
|
|
8532
8630
|
env: workingEnv,
|
|
8533
8631
|
lineCount: srcLineCount,
|
|
8534
8632
|
lastSegment: void 0,
|
|
8535
|
-
globalStateReason
|
|
8536
|
-
},
|
|
8633
|
+
globalStateReason
|
|
8634
|
+
}, md);
|
|
8635
|
+
return this.updateCacheLineCount(cache$2, srcLineCount), this.recordChunkedParseResult(workingEnv, wantsChunking$1 ? "explicit-initial-large-doc" : "default-initial-large-doc"), tokens;
|
|
8537
8636
|
}
|
|
8538
8637
|
}
|
|
8539
8638
|
let parsed$1 = this.parseFullDocument(src, workingEnv, md, srcLineCount);
|
|
8540
|
-
|
|
8639
|
+
srcLineCount = parsed$1.lineCount;
|
|
8640
|
+
let cache$1 = this.setCache({
|
|
8541
8641
|
src,
|
|
8542
8642
|
tokens: parsed$1.tokens,
|
|
8543
8643
|
env: workingEnv,
|
|
8544
8644
|
lineCount: srcLineCount,
|
|
8545
8645
|
lastSegment: void 0,
|
|
8546
|
-
globalStateReason:
|
|
8547
|
-
},
|
|
8646
|
+
globalStateReason: parsed$1.globalStateReason
|
|
8647
|
+
}, md);
|
|
8648
|
+
return this.updateCacheLineCount(cache$1, srcLineCount), this.stats.total += 1, this.stats.fullParses += 1, this.stats.lastMode = "full", setStrategyDiagnostics(workingEnv, {
|
|
8548
8649
|
area: "stream",
|
|
8549
8650
|
path: "stream-full",
|
|
8550
8651
|
reason: "initial-parse",
|
|
@@ -8557,21 +8658,21 @@ var StreamParser = class {
|
|
|
8557
8658
|
path: "stream-cache",
|
|
8558
8659
|
reason: "same-source"
|
|
8559
8660
|
}), cached.tokens;
|
|
8560
|
-
let appendDelta = src.startsWith(cached.src) ? src.slice(cached.src.length) : null, cachedGlobalStateReason = cached.globalStateReason;
|
|
8661
|
+
let appendDelta = knownAppend !== void 0 ? knownAppend : src.startsWith(cached.src) ? src.slice(cached.src.length) : null, cachedGlobalStateReason = cached.globalStateReason;
|
|
8561
8662
|
cachedGlobalStateReason === void 0 && (cachedGlobalStateReason = detectGlobalMarkdownState(cached.src), cached.globalStateReason = cachedGlobalStateReason);
|
|
8562
8663
|
let currentGlobalStateReason = cachedGlobalStateReason ? null : appendDelta !== null ? this.detectGlobalStateForAppend(cached, appendDelta) : detectGlobalMarkdownState(src), nextGlobalStateReason = cachedGlobalStateReason || currentGlobalStateReason;
|
|
8563
8664
|
if (nextGlobalStateReason) {
|
|
8564
8665
|
let fallbackEnv$1 = envProvided ?? cached.env;
|
|
8565
8666
|
resetKnownGlobalMarkdownState(fallbackEnv$1);
|
|
8566
|
-
let
|
|
8567
|
-
return this.cache = {
|
|
8667
|
+
let parsed$1 = this.parseFullDocument(src, fallbackEnv$1, md), nextTokens$1 = parsed$1.tokens, lineCount = parsed$1.lineCount, cache$1 = this.setCache({
|
|
8568
8668
|
src,
|
|
8569
8669
|
tokens: nextTokens$1,
|
|
8570
8670
|
env: fallbackEnv$1,
|
|
8571
8671
|
lineCount,
|
|
8572
8672
|
lastSegment: void 0,
|
|
8573
|
-
globalStateReason:
|
|
8574
|
-
},
|
|
8673
|
+
globalStateReason: parsed$1.globalStateReason
|
|
8674
|
+
}, md);
|
|
8675
|
+
return this.updateCacheLineCount(cache$1, lineCount), this.stats.total += 1, this.stats.fullParses += 1, this.stats.lastMode = "full", setStrategyDiagnostics(fallbackEnv$1, {
|
|
8575
8676
|
area: "stream",
|
|
8576
8677
|
path: "stream-full",
|
|
8577
8678
|
reason: `global-state:${nextGlobalStateReason}`,
|
|
@@ -8579,23 +8680,23 @@ var StreamParser = class {
|
|
|
8579
8680
|
}), nextTokens$1;
|
|
8580
8681
|
}
|
|
8581
8682
|
let threshold = md.options?.streamOptimizationMinSize ?? this.MIN_SIZE_FOR_OPTIMIZATION;
|
|
8582
|
-
if (cached.src.length < threshold && src.length < threshold * 1.5 &&
|
|
8583
|
-
let fallbackEnv$1 = envProvided ?? cached.env, parsed$1 = this.parseFullDocument(src, fallbackEnv$1, md), nextTokens$1 = parsed$1.tokens, lineCount = parsed$1.lineCount
|
|
8584
|
-
return this.cache = {
|
|
8683
|
+
if (cached.src.length < threshold && src.length < threshold * 1.5 && appendDelta === null) {
|
|
8684
|
+
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({
|
|
8585
8685
|
src,
|
|
8586
8686
|
tokens: nextTokens$1,
|
|
8587
8687
|
env: fallbackEnv$1,
|
|
8588
8688
|
lineCount,
|
|
8589
8689
|
lastSegment: void 0,
|
|
8590
|
-
globalStateReason:
|
|
8591
|
-
},
|
|
8690
|
+
globalStateReason: parsed$1.globalStateReason
|
|
8691
|
+
}, md);
|
|
8692
|
+
return this.updateCacheLineCount(cache$1, lineCount), this.stats.total += 1, this.stats.fullParses += 1, this.stats.lastMode = "full", setStrategyDiagnostics(fallbackEnv$1, {
|
|
8592
8693
|
area: "stream",
|
|
8593
8694
|
path: "stream-full",
|
|
8594
8695
|
reason: "small-non-append",
|
|
8595
8696
|
unbounded: !!getParseDiagnostics(fallbackEnv$1)?.unbounded
|
|
8596
8697
|
}), nextTokens$1;
|
|
8597
8698
|
}
|
|
8598
|
-
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);
|
|
8699
|
+
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);
|
|
8599
8700
|
if (appended) {
|
|
8600
8701
|
let cachedLineCount = cached.lineCount ?? countLines(cached.src), ctxLines = 3;
|
|
8601
8702
|
appended.length > 5e3 ? ctxLines = 8 : appended.length > 1e3 ? ctxLines = 6 : appended.length > 200 && (ctxLines = 4), ctxLines = Math.min(ctxLines, cachedLineCount);
|
|
@@ -8670,11 +8771,16 @@ var StreamParser = class {
|
|
|
8670
8771
|
}
|
|
8671
8772
|
dup > 0 && (appendedTokenStart += dup), a.length > appendedTokenStart && this.appendTokens(cached.tokens, a, appendedTokenStart);
|
|
8672
8773
|
}
|
|
8673
|
-
if (this.updateFenceMarkerCacheForAppend(cached, appended), cached.src = src, cached.globalStateReason = null, cached.lineCount = cachedLineCount + (appendedLineCount ?? countAppendedLines()), cached.tokens.length > appendStart) {
|
|
8774
|
+
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) {
|
|
8674
8775
|
let appendedLastSegment = this.getLastSegment(cached.tokens, src, appendStart, cached.tokens.length, src.length - appended.length, cachedLineCount);
|
|
8675
|
-
|
|
8776
|
+
if (appendedLastSegment) {
|
|
8777
|
+
cached.lastSegment = appendedLastSegment;
|
|
8778
|
+
let appendedOffset = src.length - appended.length;
|
|
8779
|
+
cached.lastSegmentSource = appended.slice(Math.max(0, appendedLastSegment.srcOffset - appendedOffset));
|
|
8780
|
+
} else
|
|
8781
|
+
cached.lastSegment = void 0, cached.lastSegmentSource = void 0;
|
|
8676
8782
|
} else
|
|
8677
|
-
cached.lastSegment = void 0;
|
|
8783
|
+
cached.lastSegment = void 0, cached.lastSegmentSource = void 0;
|
|
8678
8784
|
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, {
|
|
8679
8785
|
area: "stream",
|
|
8680
8786
|
path: useUnboundedAppend ? "stream-unbounded-append" : "stream-append",
|
|
@@ -8682,7 +8788,7 @@ var StreamParser = class {
|
|
|
8682
8788
|
unbounded: useUnboundedAppend
|
|
8683
8789
|
}), cached.tokens;
|
|
8684
8790
|
}
|
|
8685
|
-
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;
|
|
8791
|
+
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;
|
|
8686
8792
|
if (tailReparsed)
|
|
8687
8793
|
return this.stats.total += 1, this.stats.tailHits += 1, this.stats.lastMode = "tail", setStrategyDiagnostics(fallbackEnv, {
|
|
8688
8794
|
area: "stream",
|
|
@@ -8699,26 +8805,28 @@ var StreamParser = class {
|
|
|
8699
8805
|
maxChunkLines: useLines,
|
|
8700
8806
|
fenceAware: recommendation?.fenceAware ?? chunkFenceAware,
|
|
8701
8807
|
maxChunks: useMaxChunks
|
|
8702
|
-
})
|
|
8703
|
-
return this.cache = {
|
|
8808
|
+
}), globalStateReason = getParseDiagnostics(fallbackEnv)?.chunk?.globalStateDetected ?? null, cache$1 = this.setCache({
|
|
8704
8809
|
src,
|
|
8705
8810
|
tokens,
|
|
8706
8811
|
env: fallbackEnv,
|
|
8707
8812
|
lineCount: srcLineCount2,
|
|
8708
8813
|
lastSegment: void 0,
|
|
8709
|
-
globalStateReason
|
|
8710
|
-
},
|
|
8814
|
+
globalStateReason
|
|
8815
|
+
}, md);
|
|
8816
|
+
return this.updateCacheLineCount(cache$1, srcLineCount2), this.recordChunkedParseResult(fallbackEnv, wantsChunking ? "explicit-fallback-large-doc" : "default-fallback-large-doc"), tokens;
|
|
8711
8817
|
}
|
|
8712
8818
|
}
|
|
8713
8819
|
let parsed = this.parseFullDocument(src, fallbackEnv, md, srcLineCount2), nextTokens = parsed.tokens;
|
|
8714
|
-
|
|
8820
|
+
srcLineCount2 = parsed.lineCount;
|
|
8821
|
+
let cache = this.setCache({
|
|
8715
8822
|
src,
|
|
8716
8823
|
tokens: nextTokens,
|
|
8717
8824
|
env: fallbackEnv,
|
|
8718
8825
|
lineCount: srcLineCount2,
|
|
8719
8826
|
lastSegment: void 0,
|
|
8720
|
-
globalStateReason:
|
|
8721
|
-
},
|
|
8827
|
+
globalStateReason: parsed.globalStateReason
|
|
8828
|
+
}, md);
|
|
8829
|
+
return this.updateCacheLineCount(cache, srcLineCount2), this.stats.total += 1, this.stats.fullParses += 1, this.stats.lastMode = "full", setStrategyDiagnostics(fallbackEnv, {
|
|
8722
8830
|
area: "stream",
|
|
8723
8831
|
path: "stream-full",
|
|
8724
8832
|
reason: "fallback-full",
|
|
@@ -8744,11 +8852,10 @@ var StreamParser = class {
|
|
|
8744
8852
|
});
|
|
8745
8853
|
}
|
|
8746
8854
|
parseFullDocument(src, env, md, knownLineCount, needLineCount = !0) {
|
|
8747
|
-
let currentGlobalStateReason = detectGlobalMarkdownState(src);
|
|
8748
8855
|
getKnownGlobalMarkdownState(env) && resetKnownGlobalMarkdownState(env);
|
|
8749
8856
|
let autoUnboundedDecision = typeof md.__canUseImplicitLargeInputStrategy != "function" || md.__canUseImplicitLargeInputStrategy() ? getAutoUnboundedDecision(md, src.length, knownLineCount) : "no";
|
|
8750
8857
|
if (autoUnboundedDecision === "yes") {
|
|
8751
|
-
let tokens = parseStringUnbounded(md, src, env);
|
|
8858
|
+
let tokens = parseStringUnbounded(md, src, env), globalStateReason = getParseDiagnostics(env)?.unbounded?.globalStateDetected ?? null;
|
|
8752
8859
|
return setStrategyDiagnostics(env, {
|
|
8753
8860
|
area: "stream",
|
|
8754
8861
|
path: "stream-full",
|
|
@@ -8756,12 +8863,13 @@ var StreamParser = class {
|
|
|
8756
8863
|
unbounded: !0
|
|
8757
8864
|
}), {
|
|
8758
8865
|
tokens,
|
|
8759
|
-
lineCount: knownLineCount ?? (needLineCount ? countLines(src) : 0)
|
|
8866
|
+
lineCount: knownLineCount ?? (needLineCount ? countLines(src) : 0),
|
|
8867
|
+
globalStateReason
|
|
8760
8868
|
};
|
|
8761
8869
|
}
|
|
8762
8870
|
let lineCount = knownLineCount;
|
|
8763
8871
|
if (autoUnboundedDecision === "need-lines" && (lineCount = countLines(src), shouldAutoUseUnbounded(md, src.length, lineCount))) {
|
|
8764
|
-
let tokens = parseStringUnbounded(md, src, env);
|
|
8872
|
+
let tokens = parseStringUnbounded(md, src, env), globalStateReason = getParseDiagnostics(env)?.unbounded?.globalStateDetected ?? null;
|
|
8765
8873
|
return setStrategyDiagnostics(env, {
|
|
8766
8874
|
area: "stream",
|
|
8767
8875
|
path: "stream-full",
|
|
@@ -8769,12 +8877,16 @@ var StreamParser = class {
|
|
|
8769
8877
|
unbounded: !0
|
|
8770
8878
|
}), {
|
|
8771
8879
|
tokens,
|
|
8772
|
-
lineCount
|
|
8880
|
+
lineCount,
|
|
8881
|
+
globalStateReason
|
|
8773
8882
|
};
|
|
8774
8883
|
}
|
|
8775
|
-
|
|
8884
|
+
lineCount === void 0 && (lineCount = needLineCount ? countLines(src) : 0);
|
|
8885
|
+
let currentGlobalStateReason = detectGlobalMarkdownState(src);
|
|
8886
|
+
return {
|
|
8776
8887
|
tokens: runWithKnownGlobalMarkdownState(env, currentGlobalStateReason, () => this.core.parse(src, env, md).tokens),
|
|
8777
|
-
lineCount
|
|
8888
|
+
lineCount,
|
|
8889
|
+
globalStateReason: currentGlobalStateReason
|
|
8778
8890
|
};
|
|
8779
8891
|
}
|
|
8780
8892
|
shouldUseUnboundedAppend(src, _cached, appended) {
|
|
@@ -8782,8 +8894,8 @@ var StreamParser = class {
|
|
|
8782
8894
|
}
|
|
8783
8895
|
getAppendedSegment(cache, next, knownAppend) {
|
|
8784
8896
|
let prev = cache.src;
|
|
8785
|
-
if (knownAppend === null || knownAppend === void 0 && !next.startsWith(prev) || !prev.endsWith(`
|
|
8786
|
-
`))
|
|
8897
|
+
if (knownAppend === null || knownAppend === void 0 && !next.startsWith(prev) || (knownAppend !== void 0 ? !this.ensureBoundaryState(cache).endsWithNewline : !prev.endsWith(`
|
|
8898
|
+
`)))
|
|
8787
8899
|
return null;
|
|
8788
8900
|
let segment = knownAppend ?? next.slice(prev.length);
|
|
8789
8901
|
if (!segment)
|
|
@@ -8800,47 +8912,69 @@ var StreamParser = class {
|
|
|
8800
8912
|
if (trimmedFirstLine.length === 0)
|
|
8801
8913
|
return null;
|
|
8802
8914
|
if (/^[-=]+$/.test(trimmedFirstLine)) {
|
|
8803
|
-
let
|
|
8915
|
+
let previousLineNonBlank;
|
|
8916
|
+
if (knownAppend !== void 0)
|
|
8917
|
+
previousLineNonBlank = this.ensureBoundaryState(cache).previousLineNonBlank;
|
|
8918
|
+
else {
|
|
8919
|
+
let prevWithoutTrailingNewline = prev.slice(0, -1), lastBreak = prevWithoutTrailingNewline.lastIndexOf(`
|
|
8804
8920
|
`);
|
|
8805
|
-
|
|
8921
|
+
previousLineNonBlank = prevWithoutTrailingNewline.slice(lastBreak + 1).trim().length > 0;
|
|
8922
|
+
}
|
|
8923
|
+
if (previousLineNonBlank)
|
|
8806
8924
|
return null;
|
|
8807
8925
|
}
|
|
8808
|
-
|
|
8809
|
-
|
|
8926
|
+
if (knownAppend !== void 0) {
|
|
8927
|
+
let lastSegment = this.ensureLastSegment(cache);
|
|
8928
|
+
if (lastSegment && this.segmentHasFence(cache, lastSegment)) {
|
|
8929
|
+
let scanStart = this.tokenMapsTrusted ? this.ensureSegmentSourceOffset(cache, lastSegment) : 0;
|
|
8930
|
+
if (this.endsInsideOpenFence(prev, scanStart))
|
|
8931
|
+
return null;
|
|
8932
|
+
}
|
|
8933
|
+
} else {
|
|
8934
|
+
let scanStart = this.tokenMapsTrusted ? this.ensureLastSegment(cache)?.srcOffset ?? 0 : 0;
|
|
8935
|
+
if ((this.tokenMapsTrusted || this.cacheHasFenceMarker(cache)) && this.endsInsideOpenFence(prev, scanStart))
|
|
8936
|
+
return null;
|
|
8937
|
+
}
|
|
8938
|
+
return this.mayContainReferenceDefinition(segment) ? null : segment;
|
|
8810
8939
|
}
|
|
8811
|
-
tryTailSegmentReparse(src, cached, env, md, segmentOverride) {
|
|
8940
|
+
tryTailSegmentReparse(src, cached, env, md, segmentOverride, knownAppend) {
|
|
8812
8941
|
let lastSegment = segmentOverride ?? this.ensureLastSegment(cached);
|
|
8813
|
-
if (!lastSegment
|
|
8942
|
+
if (!lastSegment)
|
|
8814
8943
|
return null;
|
|
8815
|
-
let
|
|
8816
|
-
if (
|
|
8944
|
+
let directAppend = knownAppend !== void 0;
|
|
8945
|
+
if (directAppend && this.ensureSegmentSourceOffset(cached, lastSegment), lastSegment.srcOffset <= 0 && lastSegment.tokenStart <= 0)
|
|
8817
8946
|
return null;
|
|
8818
|
-
|
|
8947
|
+
if (!directAppend) {
|
|
8948
|
+
let stablePrefix = cached.src.slice(0, lastSegment.srcOffset);
|
|
8949
|
+
if (!src.startsWith(stablePrefix))
|
|
8950
|
+
return null;
|
|
8951
|
+
}
|
|
8952
|
+
let prevTail = directAppend ? cached.lastSegmentSource ?? cached.src.slice(lastSegment.srcOffset) : cached.src.slice(lastSegment.srcOffset), nextTail = directAppend ? prevTail + knownAppend : src.slice(lastSegment.srcOffset);
|
|
8819
8953
|
if (nextTail === prevTail)
|
|
8820
8954
|
return null;
|
|
8821
|
-
let appended = src.startsWith(cached.src) ? src.slice(cached.src.length) : null, postBlockSrc = this.getNormalizedUpdatedSource(cached, src);
|
|
8955
|
+
let appended = directAppend ? knownAppend : src.startsWith(cached.src) ? src.slice(cached.src.length) : null, postBlockSrc = directAppend && this.tokenMapsTrusted ? src : this.getNormalizedUpdatedSource(cached, src, knownAppend);
|
|
8822
8956
|
if (appended) {
|
|
8823
8957
|
let merged = this.tryContainerTailAppendMerge(src, cached, env, md, lastSegment, appended, postBlockSrc);
|
|
8824
8958
|
if (merged)
|
|
8825
|
-
return merged;
|
|
8959
|
+
return cached.lastSegmentSource = directAppend ? nextTail : void 0, merged;
|
|
8826
8960
|
}
|
|
8827
8961
|
if (this.mayContainReferenceDefinition(prevTail) || this.mayContainReferenceDefinition(nextTail))
|
|
8828
8962
|
return null;
|
|
8829
8963
|
try {
|
|
8830
8964
|
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);
|
|
8831
|
-
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 = {
|
|
8965
|
+
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 = {
|
|
8832
8966
|
tokenStart: lastSegment.tokenStart + localLastSegment.tokenStart,
|
|
8833
8967
|
tokenEnd: lastSegment.tokenStart + localLastSegment.tokenEnd,
|
|
8834
8968
|
lineStart: parsedTail.mapsShifted ? localLastSegment.lineStart : lastSegment.lineStart + localLastSegment.lineStart,
|
|
8835
8969
|
lineEnd: parsedTail.mapsShifted ? localLastSegment.lineEnd : lastSegment.lineStart + localLastSegment.lineEnd,
|
|
8836
8970
|
srcOffset: lastSegment.srcOffset + localLastSegment.srcOffset
|
|
8837
|
-
} : cached.lastSegment = null, cached.lastSegmentVerified = void 0, cached.tokens;
|
|
8971
|
+
}, cached.lastSegmentSource = directAppend ? nextTail.slice(localLastSegment.srcOffset) : void 0) : (cached.lastSegment = null, cached.lastSegmentSource = void 0), cached.lastSegmentVerified = void 0, cached.tokens;
|
|
8838
8972
|
} catch {
|
|
8839
8973
|
return null;
|
|
8840
8974
|
}
|
|
8841
8975
|
}
|
|
8842
8976
|
tryUntrustedParagraphTailReparse(src, cached, env, md) {
|
|
8843
|
-
if (this.endsWithBlankLine(cached.src))
|
|
8977
|
+
if (cached.boundary ? cached.boundary.endsWithBlankLine : this.endsWithBlankLine(cached.src))
|
|
8844
8978
|
return null;
|
|
8845
8979
|
let lastSegment = this.ensureLastSegment(cached);
|
|
8846
8980
|
if (!lastSegment || cached.tokens[lastSegment.tokenStart]?.type !== "paragraph_open")
|
|
@@ -8871,6 +9005,7 @@ var StreamParser = class {
|
|
|
8871
9005
|
return count;
|
|
8872
9006
|
}
|
|
8873
9007
|
hasVerifiedSegmentAnchor(cache, segment, md) {
|
|
9008
|
+
segment.srcOffset < 0 && this.ensureSegmentSourceOffset(cache, segment);
|
|
8874
9009
|
let lineCount = cache.lineCount ?? countLines(cache.src), docLineCount = this.getDocLineCount(cache.src, lineCount);
|
|
8875
9010
|
if (!(segment.lineStart >= 0 && segment.lineStart <= segment.lineEnd && segment.lineEnd <= docLineCount && segment.srcOffset < cache.src.length))
|
|
8876
9011
|
return !1;
|
|
@@ -8897,6 +9032,10 @@ var StreamParser = class {
|
|
|
8897
9032
|
return !1;
|
|
8898
9033
|
}
|
|
8899
9034
|
}
|
|
9035
|
+
normalizeSource(src) {
|
|
9036
|
+
return src.replace(/\r\n?/g, `
|
|
9037
|
+
`).replace(/\0/g, "\uFFFD");
|
|
9038
|
+
}
|
|
8900
9039
|
cacheHasFenceMarker(cache) {
|
|
8901
9040
|
return cache.hasFenceMarker === void 0 && (cache.hasFenceMarker = cache.src.includes("```") || cache.src.includes("~~~")), cache.hasFenceMarker;
|
|
8902
9041
|
}
|
|
@@ -8906,16 +9045,12 @@ var StreamParser = class {
|
|
|
8906
9045
|
let boundary = cache.src.slice(-2) + appended;
|
|
8907
9046
|
cache.hasFenceMarker = boundary.includes("```") || boundary.includes("~~~");
|
|
8908
9047
|
}
|
|
8909
|
-
|
|
8910
|
-
return src.replace(/\r\n?/g, `
|
|
8911
|
-
`).replace(/\0/g, "\uFFFD");
|
|
8912
|
-
}
|
|
8913
|
-
getNormalizedUpdatedSource(cache, next) {
|
|
9048
|
+
getNormalizedUpdatedSource(cache, next, knownAppend) {
|
|
8914
9049
|
if (!this.normalizeLineEndings)
|
|
8915
9050
|
return next;
|
|
8916
|
-
if (!next.startsWith(cache.src))
|
|
9051
|
+
if (knownAppend === void 0 && !next.startsWith(cache.src))
|
|
8917
9052
|
return this.normalizeSource(next);
|
|
8918
|
-
let normalizedCached = cache.normalizedSrc ?? this.normalizeSource(cache.src), appended = next.slice(cache.src.length), normalizedAppend = this.normalizeSource(appended);
|
|
9053
|
+
let normalizedCached = cache.normalizedSrc ?? this.normalizeSource(cache.src), appended = knownAppend ?? next.slice(cache.src.length), normalizedAppend = this.normalizeSource(appended);
|
|
8919
9054
|
return cache.src.endsWith("\r") && appended.startsWith(`
|
|
8920
9055
|
`) && (normalizedAppend = normalizedAppend.slice(1)), normalizedCached + normalizedAppend;
|
|
8921
9056
|
}
|
|
@@ -9002,15 +9137,26 @@ var StreamParser = class {
|
|
|
9002
9137
|
peek() {
|
|
9003
9138
|
return this.cache?.tokens ?? EMPTY_TOKENS;
|
|
9004
9139
|
}
|
|
9140
|
+
hasCache() {
|
|
9141
|
+
return this.cache !== null;
|
|
9142
|
+
}
|
|
9005
9143
|
getStats() {
|
|
9006
9144
|
return { ...this.stats };
|
|
9007
9145
|
}
|
|
9146
|
+
setCache(cache, md) {
|
|
9147
|
+
let snapshotState = this.cache?.snapshotState, nextCache = {
|
|
9148
|
+
...cache,
|
|
9149
|
+
config: copyParserConfig(md),
|
|
9150
|
+
snapshotState
|
|
9151
|
+
};
|
|
9152
|
+
return snapshotState && (snapshotState.cache = nextCache), this.cache = nextCache, nextCache;
|
|
9153
|
+
}
|
|
9008
9154
|
appendTokens(target, source, start = 0, end = source.length) {
|
|
9009
9155
|
for (let i = start; i < end; i++)
|
|
9010
9156
|
target.push(source[i]);
|
|
9011
9157
|
}
|
|
9012
9158
|
updateCacheLineCount(cache, lineCount) {
|
|
9013
|
-
cache.lineCount = lineCount ?? countLines(cache.src), cache.lastSegment = void 0, cache.lastSegmentVerified = void 0, cache.normalizedSrc = void 0, cache.globalStateCarry = void 0;
|
|
9159
|
+
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;
|
|
9014
9160
|
}
|
|
9015
9161
|
detectGlobalStateForAppend(cache, appended) {
|
|
9016
9162
|
if (cache.globalStateReason)
|
|
@@ -9018,10 +9164,10 @@ var StreamParser = class {
|
|
|
9018
9164
|
let text$1 = (cache.globalStateCarry ?? cache.src.slice(-GLOBAL_STATE_APPEND_SCAN_WINDOW)) + appended, reason = detectGlobalMarkdownState(text$1);
|
|
9019
9165
|
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;
|
|
9020
9166
|
}
|
|
9021
|
-
ensureLastSegment(cache) {
|
|
9022
|
-
return cache.lastSegment !== void 0 || (cache.lastSegment = this.getLastSegment(cache.tokens, cache.src)), cache.lastSegment;
|
|
9167
|
+
ensureLastSegment(cache, skipSourceOffset = !1) {
|
|
9168
|
+
return cache.lastSegment !== void 0 || (cache.lastSegment = this.getLastSegment(cache.tokens, cache.src, 0, cache.tokens.length, void 0, void 0, skipSourceOffset)), cache.lastSegment;
|
|
9023
9169
|
}
|
|
9024
|
-
getLastSegment(tokens, src, tokenStart = 0, tokenEnd = tokens.length, knownSrcOffset, knownLineStart) {
|
|
9170
|
+
getLastSegment(tokens, src, tokenStart = 0, tokenEnd = tokens.length, knownSrcOffset, knownLineStart, skipSourceOffset = !1) {
|
|
9025
9171
|
if (tokenEnd <= tokenStart)
|
|
9026
9172
|
return null;
|
|
9027
9173
|
let lineStart = Number.POSITIVE_INFINITY, lineEnd$2 = -1, depth = 0;
|
|
@@ -9039,7 +9185,7 @@ var StreamParser = class {
|
|
|
9039
9185
|
tokenEnd,
|
|
9040
9186
|
lineStart: resolvedStart,
|
|
9041
9187
|
lineEnd: resolvedEnd,
|
|
9042
|
-
srcOffset: this.getLineStartOffset(src, resolvedStart, knownSrcOffset, knownLineStart)
|
|
9188
|
+
srcOffset: skipSourceOffset ? -1 : this.getLineStartOffset(src, resolvedStart, knownSrcOffset, knownLineStart)
|
|
9043
9189
|
};
|
|
9044
9190
|
}
|
|
9045
9191
|
continue;
|
|
@@ -9051,12 +9197,38 @@ var StreamParser = class {
|
|
|
9051
9197
|
tokenEnd,
|
|
9052
9198
|
lineStart: resolvedStart,
|
|
9053
9199
|
lineEnd: resolvedEnd,
|
|
9054
|
-
srcOffset: this.getLineStartOffset(src, resolvedStart, knownSrcOffset, knownLineStart)
|
|
9200
|
+
srcOffset: skipSourceOffset ? -1 : this.getLineStartOffset(src, resolvedStart, knownSrcOffset, knownLineStart)
|
|
9055
9201
|
};
|
|
9056
9202
|
}
|
|
9057
9203
|
}
|
|
9058
9204
|
return null;
|
|
9059
9205
|
}
|
|
9206
|
+
segmentHasFence(cache, segment) {
|
|
9207
|
+
let end = Math.min(segment.tokenEnd, cache.tokens.length);
|
|
9208
|
+
for (let i = segment.tokenStart; i < end; i++)
|
|
9209
|
+
if (cache.tokens[i].type === "fence")
|
|
9210
|
+
return !0;
|
|
9211
|
+
return !1;
|
|
9212
|
+
}
|
|
9213
|
+
ensureSegmentSourceOffset(cache, segment) {
|
|
9214
|
+
if (segment.srcOffset < 0) {
|
|
9215
|
+
let lineCount = cache.lineCount;
|
|
9216
|
+
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);
|
|
9217
|
+
}
|
|
9218
|
+
return segment.srcOffset;
|
|
9219
|
+
}
|
|
9220
|
+
getLineStartOffsetFromEnd(src, line, lineCount) {
|
|
9221
|
+
if (line <= 0)
|
|
9222
|
+
return 0;
|
|
9223
|
+
let remaining = lineCount - line + 1, pos = src.length;
|
|
9224
|
+
for (; remaining > 0; ) {
|
|
9225
|
+
if (pos = src.lastIndexOf(`
|
|
9226
|
+
`, pos - 1), pos < 0)
|
|
9227
|
+
return 0;
|
|
9228
|
+
remaining--;
|
|
9229
|
+
}
|
|
9230
|
+
return pos + 1;
|
|
9231
|
+
}
|
|
9060
9232
|
getLineStartOffset(src, line, knownSrcOffset, knownLineStart) {
|
|
9061
9233
|
return knownSrcOffset !== void 0 && knownLineStart !== void 0 && line >= knownLineStart ? this.getLineStartOffsetFrom(src, knownSrcOffset, line - knownLineStart) : this.getLineStartOffsetFrom(src, 0, line);
|
|
9062
9234
|
}
|
|
@@ -9083,7 +9255,7 @@ var StreamParser = class {
|
|
|
9083
9255
|
return src.includes("]:") ? /(?:^|\n)[ \t]{0,3}\[[^\]\n]+\]:/.test(src) : !1;
|
|
9084
9256
|
}
|
|
9085
9257
|
canDirectlyParseAppend(cache) {
|
|
9086
|
-
if (!this.tokenMapsTrusted || !this.endsWithBlankLine(cache.src))
|
|
9258
|
+
if (!this.tokenMapsTrusted || !(cache.boundary ? cache.boundary.endsWithBlankLine : this.endsWithBlankLine(cache.src)))
|
|
9087
9259
|
return !1;
|
|
9088
9260
|
let lastSegment = this.ensureLastSegment(cache);
|
|
9089
9261
|
if (!lastSegment)
|
|
@@ -9116,8 +9288,9 @@ var StreamParser = class {
|
|
|
9116
9288
|
}
|
|
9117
9289
|
}
|
|
9118
9290
|
tryListTailAppendMerge(src, cached, env, md, lastSegment, appended, listOpen, postBlockSrc) {
|
|
9119
|
-
if (cached.src.length === 0 || cached.src.charCodeAt(cached.src.length - 1)
|
|
9291
|
+
if (cached.src.length === 0 || !(cached.boundary ? cached.boundary.endsWithNewline : cached.src.charCodeAt(cached.src.length - 1) === 10))
|
|
9120
9292
|
return null;
|
|
9293
|
+
this.ensureSegmentSourceOffset(cached, lastSegment);
|
|
9121
9294
|
let segmentLineSpan = lastSegment.lineEnd - lastSegment.lineStart, segmentChars = cached.src.length - lastSegment.srcOffset;
|
|
9122
9295
|
if (segmentLineSpan < this.MIN_LIST_LINES_FOR_MERGE && segmentChars < this.MIN_LIST_CHARS_FOR_MERGE)
|
|
9123
9296
|
return null;
|
|
@@ -9135,10 +9308,10 @@ var StreamParser = class {
|
|
|
9135
9308
|
return null;
|
|
9136
9309
|
lineOffset > 0 && !mapsShifted && this.shiftTokenLines(inserted, lineOffset);
|
|
9137
9310
|
let existingMode = this.getListParagraphMode(cached.tokens, lastSegment.tokenStart, cached.tokens.length, listOpen.level), appendedMode = this.getListParagraphMode(parsed, 0, parsed.length, 0);
|
|
9138
|
-
(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;
|
|
9311
|
+
(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;
|
|
9139
9312
|
let nextLineCount = lineOffset + countLines(appended);
|
|
9140
9313
|
cached.lineCount = nextLineCount;
|
|
9141
|
-
let nextDocLineCount = this.
|
|
9314
|
+
let nextDocLineCount = this.getCachedDocLineCount(cached, nextLineCount);
|
|
9142
9315
|
return listOpen.map && (listOpen.map[1] = nextDocLineCount), cached.lastSegment = {
|
|
9143
9316
|
tokenStart: lastSegment.tokenStart,
|
|
9144
9317
|
tokenEnd: cached.tokens.length,
|
|
@@ -9148,8 +9321,9 @@ var StreamParser = class {
|
|
|
9148
9321
|
}, cached.lastSegmentVerified = !0, cached.tokens;
|
|
9149
9322
|
}
|
|
9150
9323
|
tryTableTailAppendMerge(src, cached, env, md, lastSegment, appended, tableOpen, postBlockSrc) {
|
|
9151
|
-
if (cached.src.length === 0 || cached.src.charCodeAt(cached.src.length - 1)
|
|
9324
|
+
if (cached.src.length === 0 || !(cached.boundary ? cached.boundary.endsWithNewline : cached.src.charCodeAt(cached.src.length - 1) === 10) || /(?:^|\n)[ \t]*\n/.test(appended))
|
|
9152
9325
|
return null;
|
|
9326
|
+
this.ensureSegmentSourceOffset(cached, lastSegment);
|
|
9153
9327
|
let segmentLineSpan = lastSegment.lineEnd - lastSegment.lineStart, segmentChars = cached.src.length - lastSegment.srcOffset;
|
|
9154
9328
|
if (segmentLineSpan < this.MIN_TABLE_LINES_FOR_MERGE && segmentChars < this.MIN_TABLE_CHARS_FOR_MERGE)
|
|
9155
9329
|
return null;
|
|
@@ -9173,10 +9347,10 @@ var StreamParser = class {
|
|
|
9173
9347
|
return null;
|
|
9174
9348
|
lineOffset !== 0 && !mapsShifted && this.shiftTokenLines(inserted, lineOffset);
|
|
9175
9349
|
let insertAt = cachedSection.tbodyCloseIndex >= 0 ? cachedSection.tbodyCloseIndex : cachedSection.tableCloseIndex, previousLineCount = cached.lineCount ?? countLines(cached.src);
|
|
9176
|
-
cached.tokens.splice(insertAt, 0, ...inserted), this.updateFenceMarkerCacheForAppend(cached, appended), cached.src = src, cached.normalizedSrc = postBlockSrc, cached.env = env, cached.globalStateReason = null;
|
|
9350
|
+
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;
|
|
9177
9351
|
let nextLineCount = previousLineCount + countLines(appended);
|
|
9178
9352
|
cached.lineCount = nextLineCount;
|
|
9179
|
-
let nextDocLineCount = this.
|
|
9353
|
+
let nextDocLineCount = this.getCachedDocLineCount(cached, nextLineCount);
|
|
9180
9354
|
if (tableOpen.map && (tableOpen.map[1] = nextDocLineCount), cachedSection.tbodyOpenIndex >= 0) {
|
|
9181
9355
|
let tbodyOpen = cached.tokens[cachedSection.tbodyOpenIndex];
|
|
9182
9356
|
tbodyOpen?.map && (tbodyOpen.map[1] = nextDocLineCount);
|
|
@@ -9283,7 +9457,7 @@ var StreamParser = class {
|
|
|
9283
9457
|
case "paragraph_open":
|
|
9284
9458
|
case "code_block":
|
|
9285
9459
|
case "html_block":
|
|
9286
|
-
return !this.endsWithBlankLine(cache.src);
|
|
9460
|
+
return !(cache.boundary ? cache.boundary.endsWithBlankLine : this.endsWithBlankLine(cache.src));
|
|
9287
9461
|
default:
|
|
9288
9462
|
return lastToken?.nesting === 1;
|
|
9289
9463
|
}
|
|
@@ -9303,9 +9477,41 @@ var StreamParser = class {
|
|
|
9303
9477
|
}
|
|
9304
9478
|
return !0;
|
|
9305
9479
|
}
|
|
9480
|
+
ensureBoundaryState(cache) {
|
|
9481
|
+
if (cache.boundary)
|
|
9482
|
+
return cache.boundary;
|
|
9483
|
+
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;
|
|
9484
|
+
for (; lineStart >= 0 && src.charCodeAt(lineStart) !== 10; )
|
|
9485
|
+
lineStart--;
|
|
9486
|
+
let lineNonBlank = !1;
|
|
9487
|
+
for (let i = lineStart + 1; i < lineEnd$2; i++) {
|
|
9488
|
+
let ch = src.charCodeAt(i);
|
|
9489
|
+
if (ch !== 32 && ch !== 9) {
|
|
9490
|
+
lineNonBlank = !0;
|
|
9491
|
+
break;
|
|
9492
|
+
}
|
|
9493
|
+
}
|
|
9494
|
+
return cache.boundary = {
|
|
9495
|
+
currentLineNonBlank: endsWithNewline ? !1 : lineNonBlank,
|
|
9496
|
+
previousLineNonBlank: endsWithNewline ? lineNonBlank : !1,
|
|
9497
|
+
endsWithNewline,
|
|
9498
|
+
endsWithBlankLine: this.endsWithBlankLine(src)
|
|
9499
|
+
}, cache.boundary;
|
|
9500
|
+
}
|
|
9501
|
+
updateBoundaryStateForAppend(cache, appended) {
|
|
9502
|
+
let boundary = this.ensureBoundaryState(cache), currentLineNonBlank = boundary.currentLineNonBlank, previousLineNonBlank = boundary.previousLineNonBlank;
|
|
9503
|
+
for (let i = 0; i < appended.length; i++) {
|
|
9504
|
+
let ch = appended.charCodeAt(i);
|
|
9505
|
+
ch === 10 ? (previousLineNonBlank = currentLineNonBlank, currentLineNonBlank = !1) : ch !== 32 && ch !== 9 && (currentLineNonBlank = !0);
|
|
9506
|
+
}
|
|
9507
|
+
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;
|
|
9508
|
+
}
|
|
9306
9509
|
getDocLineCount(src, lineCount = countLines(src)) {
|
|
9307
9510
|
return src.length === 0 ? 0 : src.charCodeAt(src.length - 1) === 10 ? lineCount : lineCount + 1;
|
|
9308
9511
|
}
|
|
9512
|
+
getCachedDocLineCount(cache, lineCount) {
|
|
9513
|
+
return cache.src.length === 0 ? 0 : cache.boundary ? cache.boundary.endsWithNewline ? lineCount : lineCount + 1 : this.getDocLineCount(cache.src, lineCount);
|
|
9514
|
+
}
|
|
9309
9515
|
shiftTokenLines(tokens, offset) {
|
|
9310
9516
|
if (offset === 0)
|
|
9311
9517
|
return;
|
|
@@ -9692,9 +9898,25 @@ function markdownIt(presetName, options) {
|
|
|
9692
9898
|
parse(src, env) {
|
|
9693
9899
|
return md.stream.enabled ? getStreamParser().parse(src, env, md) : md.parse(src, env ?? {});
|
|
9694
9900
|
},
|
|
9901
|
+
append(segment, env) {
|
|
9902
|
+
if (!md.stream.enabled)
|
|
9903
|
+
throw new Error("Stream append requires stream mode");
|
|
9904
|
+
return getStreamParser().append(segment, env, md);
|
|
9905
|
+
},
|
|
9906
|
+
snapshot() {
|
|
9907
|
+
return streamParser ? streamParser.snapshot() : null;
|
|
9908
|
+
},
|
|
9909
|
+
restore(snapshot) {
|
|
9910
|
+
if (!md.stream.enabled)
|
|
9911
|
+
throw new Error("Stream restore requires stream mode");
|
|
9912
|
+
return getStreamParser().restore(snapshot, md);
|
|
9913
|
+
},
|
|
9695
9914
|
reset() {
|
|
9696
9915
|
getStreamParser().reset();
|
|
9697
9916
|
},
|
|
9917
|
+
hasCache() {
|
|
9918
|
+
return streamParser?.hasCache() ?? !1;
|
|
9919
|
+
},
|
|
9698
9920
|
peek() {
|
|
9699
9921
|
return streamParser ? streamParser.peek() : [];
|
|
9700
9922
|
},
|
|
@@ -10247,9 +10469,9 @@ function applyContainers(md) {
|
|
|
10247
10469
|
function escapeTagForRegExp(tag) {
|
|
10248
10470
|
return tag.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
10249
10471
|
}
|
|
10250
|
-
function findTagCloseIndexOutsideQuotes(input) {
|
|
10472
|
+
function findTagCloseIndexOutsideQuotes(input, start = 0) {
|
|
10251
10473
|
let inSingle = !1, inDouble = !1;
|
|
10252
|
-
for (let i =
|
|
10474
|
+
for (let i = start; i < input.length; i++) {
|
|
10253
10475
|
let ch = input[i];
|
|
10254
10476
|
if (ch === "\\") {
|
|
10255
10477
|
i++;
|
|
@@ -11120,7 +11342,7 @@ function createChildParseContext(parent, options = parent, overrides = {}) {
|
|
|
11120
11342
|
...overrides
|
|
11121
11343
|
});
|
|
11122
11344
|
}
|
|
11123
|
-
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([
|
|
11345
|
+
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([
|
|
11124
11346
|
"ai",
|
|
11125
11347
|
"md",
|
|
11126
11348
|
"py",
|
|
@@ -11240,15 +11462,15 @@ var FILENAMEISH_EXTENSION_RE = /\.([a-z0-9]{1,15})$/i, FILENAMEISH_SEGMENT_RE =
|
|
|
11240
11462
|
"yml",
|
|
11241
11463
|
"zip",
|
|
11242
11464
|
"zsh"
|
|
11243
|
-
]), linkifyDemotionContextCache = /* @__PURE__ */ new Map();
|
|
11465
|
+
]), linkifyDemotionContextCache = /* @__PURE__ */ new Map(), linkifyDemotionContextCacheTextLength = 0;
|
|
11244
11466
|
function rememberLinkifyDemotionContext(text$1, context) {
|
|
11245
11467
|
if (!text$1 || text$1.length > LINKIFY_DEMOTION_CONTEXT_CACHE_MAX_TEXT_LENGTH)
|
|
11246
11468
|
return context;
|
|
11247
|
-
for (linkifyDemotionContextCache.set(text$1, context); linkifyDemotionContextCache.size > LINKIFY_DEMOTION_CONTEXT_CACHE_LIMIT; ) {
|
|
11469
|
+
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; ) {
|
|
11248
11470
|
let oldestKey = linkifyDemotionContextCache.keys().next().value;
|
|
11249
11471
|
if (!oldestKey)
|
|
11250
11472
|
break;
|
|
11251
|
-
linkifyDemotionContextCache.delete(oldestKey);
|
|
11473
|
+
linkifyDemotionContextCache.delete(oldestKey), linkifyDemotionContextCacheTextLength -= oldestKey.length;
|
|
11252
11474
|
}
|
|
11253
11475
|
return context;
|
|
11254
11476
|
}
|
|
@@ -11296,7 +11518,7 @@ function inferContinuationLinkifyContext(raw, inherited) {
|
|
|
11296
11518
|
})) && (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;
|
|
11297
11519
|
}
|
|
11298
11520
|
function createLinkifyDemotionContextTracker(options, sticky = !1) {
|
|
11299
|
-
let context;
|
|
11521
|
+
let context = ensureParseContext(options).linkifyDemotionSeedContext;
|
|
11300
11522
|
return {
|
|
11301
11523
|
options(raw) {
|
|
11302
11524
|
return sticky || raw == null ? withLinkifyDemotionContext(options, context) : withLinkifyDemotionContext(options, mergeLinkifyDemotionContext(inferNextBlockLinkifyContext(raw), inferContinuationLinkifyContext(raw, context)));
|
|
@@ -11307,6 +11529,9 @@ function createLinkifyDemotionContextTracker(options, sticky = !1) {
|
|
|
11307
11529
|
},
|
|
11308
11530
|
reset() {
|
|
11309
11531
|
context = void 0;
|
|
11532
|
+
},
|
|
11533
|
+
snapshot() {
|
|
11534
|
+
return context;
|
|
11310
11535
|
}
|
|
11311
11536
|
};
|
|
11312
11537
|
}
|
|
@@ -11343,11 +11568,11 @@ function mayContainLinkifyDemotionContext(text$1) {
|
|
|
11343
11568
|
}
|
|
11344
11569
|
function inferLinkifyDemotionContext(contextText) {
|
|
11345
11570
|
let text$1 = String(contextText ?? ""), cached = linkifyDemotionContextCache.get(text$1);
|
|
11346
|
-
return cached
|
|
11571
|
+
return cached || (mayContainLinkifyDemotionContext(text$1) ? rememberLinkifyDemotionContext(text$1, {
|
|
11347
11572
|
explicitFilename: EXPLICIT_FILENAME_CONTEXT_RE.test(text$1),
|
|
11348
11573
|
filename: FILENAME_CONTEXT_RE.test(text$1),
|
|
11349
11574
|
marketTicker: MARKET_TICKER_CONTEXT_RE.test(text$1)
|
|
11350
|
-
}) : rememberLinkifyDemotionContext(text$1, EMPTY_LINKIFY_DEMOTION_CONTEXT);
|
|
11575
|
+
}) : rememberLinkifyDemotionContext(text$1, EMPTY_LINKIFY_DEMOTION_CONTEXT));
|
|
11351
11576
|
}
|
|
11352
11577
|
function hasDomainAuthorityPrefix(text$1) {
|
|
11353
11578
|
return isPlausibleBareDomain(text$1.split(/[\\/]/)[0] ?? "");
|
|
@@ -11852,7 +12077,7 @@ function fixStrongTokens(tokens) {
|
|
|
11852
12077
|
for (; k < tokens.length && tokens[k].type === "text" && tokens[k].content === ""; )
|
|
11853
12078
|
k++;
|
|
11854
12079
|
let postToken = tokens[k];
|
|
11855
|
-
markup === "__" && (preToken?.content?.endsWith("_") || postToken?.content?.startsWith("_")
|
|
12080
|
+
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));
|
|
11856
12081
|
} else if (type === "strong_close")
|
|
11857
12082
|
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);
|
|
11858
12083
|
else if (type === "em_open") {
|
|
@@ -11864,7 +12089,7 @@ function fixStrongTokens(tokens) {
|
|
|
11864
12089
|
for (; k < tokens.length && tokens[k].type === "text" && tokens[k].content === ""; )
|
|
11865
12090
|
k++;
|
|
11866
12091
|
let postToken = tokens[k];
|
|
11867
|
-
markup === "_" && (preToken?.content?.endsWith("_") || postToken?.content?.startsWith("_")
|
|
12092
|
+
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));
|
|
11868
12093
|
} else
|
|
11869
12094
|
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));
|
|
11870
12095
|
}
|
|
@@ -12173,36 +12398,35 @@ function hasTrailingPipeHeaderRowWithoutColon(line) {
|
|
|
12173
12398
|
return cells !== null && cells.every((cell) => !cell.includes(":"));
|
|
12174
12399
|
}
|
|
12175
12400
|
function fixTableTokens(tokens, final = !1, source = "") {
|
|
12176
|
-
let fixedTokens = [...tokens];
|
|
12177
12401
|
if (tokens.length < 3)
|
|
12178
|
-
return
|
|
12402
|
+
return tokens;
|
|
12179
12403
|
let i = tokens.length - 2, token = tokens[i];
|
|
12180
|
-
if (token.type
|
|
12181
|
-
|
|
12404
|
+
if (token.type !== "inline")
|
|
12405
|
+
return tokens;
|
|
12406
|
+
let sourceMap = tokens[i - 1]?.map, tcontent = String(token.content ?? ""), headerContent = tcontent.split(`
|
|
12182
12407
|
`)[0] ?? "", [headerLine = "", separatorLine = "", ...rest] = tcontent.split(`
|
|
12183
12408
|
`), hasTrailingNewlineSeparatorStart = !final && !tcontent.includes(`
|
|
12184
|
-
`) && /\r?\n$/.test(source) && hasTrailingPipeHeaderRow(tcontent);
|
|
12185
|
-
|
|
12409
|
+
`) && /\r?\n$/.test(source) && hasTrailingPipeHeaderRow(tcontent), fixedTokens = null;
|
|
12410
|
+
if (!final && (tcontent.includes(`
|
|
12186
12411
|
`) && rest.length === 0 && hasTrailingPipeHeaderRow(headerLine) && isTableSeparatorRowWithPartialTail(separatorLine) || hasTrailingNewlineSeparatorStart)) {
|
|
12187
|
-
|
|
12188
|
-
|
|
12189
|
-
|
|
12190
|
-
|
|
12191
|
-
|
|
12192
|
-
|
|
12193
|
-
|
|
12412
|
+
let body = headerContent.slice(1, -1).split("|").map((i$1) => i$1.trim()).flatMap((i$1) => createTh(i$1)), insert = [
|
|
12413
|
+
...createStart(sourceMap),
|
|
12414
|
+
...body,
|
|
12415
|
+
...createEnd()
|
|
12416
|
+
];
|
|
12417
|
+
fixedTokens = [...tokens], fixedTokens.splice(i - 1, 3, ...insert);
|
|
12418
|
+
} else if (tcontent.includes(`
|
|
12194
12419
|
`) && rest.length === 0 && hasTrailingPipeHeaderRow(headerLine) && isTableSeparatorRow(separatorLine)) {
|
|
12195
|
-
|
|
12196
|
-
|
|
12197
|
-
|
|
12198
|
-
|
|
12199
|
-
|
|
12200
|
-
|
|
12201
|
-
|
|
12202
|
-
|
|
12203
|
-
|
|
12204
|
-
|
|
12205
|
-
return fixedTokens;
|
|
12420
|
+
let body = headerContent.slice(1, -1).split("|").map((i$1) => i$1.trim()).flatMap((i$1) => createTh(i$1)), insert = [
|
|
12421
|
+
...createStart(sourceMap),
|
|
12422
|
+
...body,
|
|
12423
|
+
...createEnd()
|
|
12424
|
+
];
|
|
12425
|
+
fixedTokens = [...tokens], fixedTokens.splice(i - 1, 3, ...insert);
|
|
12426
|
+
} else if (tcontent.includes(`
|
|
12427
|
+
`) && rest.length === 0 && hasTrailingPipeHeaderRowWithoutColon(headerLine) && isTruncatedSeparatorRow(separatorLine))
|
|
12428
|
+
return token.content = tcontent.slice(0, -2), token.children.splice(2, 1), tokens;
|
|
12429
|
+
return fixedTokens ?? tokens;
|
|
12206
12430
|
}
|
|
12207
12431
|
function findMatchingClose(src, startIdx, open, close) {
|
|
12208
12432
|
let len = src.length;
|
|
@@ -12693,27 +12917,36 @@ function hashTolerantBoundaryContent(content) {
|
|
|
12693
12917
|
hash = hash * 31 + content.charCodeAt(index) | 0;
|
|
12694
12918
|
return hash.toString(36);
|
|
12695
12919
|
}
|
|
12696
|
-
function getTolerantBoundaryScanWindow(source) {
|
|
12920
|
+
function getTolerantBoundaryScanWindow(source, cache) {
|
|
12697
12921
|
if (source.length <= TOLERANT_BOUNDARY_SCAN_TAIL_CHARS)
|
|
12698
12922
|
return {
|
|
12699
12923
|
source,
|
|
12700
12924
|
lineOffset: 0
|
|
12701
12925
|
};
|
|
12926
|
+
if (cache) {
|
|
12927
|
+
let cut = source.length - TOLERANT_BOUNDARY_SCAN_TAIL_CHARS, start$1 = source.indexOf(`
|
|
12928
|
+
`, cut);
|
|
12929
|
+
start$1 = start$1 === -1 ? source.length : start$1 + 1;
|
|
12930
|
+
let lineOffset$1 = cache.lineOffset + countLineBreaks(source.slice(cache.windowStart, start$1));
|
|
12931
|
+
return cache.lineOffset = lineOffset$1, cache.windowStart = start$1, {
|
|
12932
|
+
source: source.slice(start$1),
|
|
12933
|
+
lineOffset: lineOffset$1
|
|
12934
|
+
};
|
|
12935
|
+
}
|
|
12702
12936
|
let start = source.length - TOLERANT_BOUNDARY_SCAN_TAIL_CHARS, nextLineBreak = source.indexOf(`
|
|
12703
12937
|
`, start);
|
|
12704
|
-
|
|
12705
|
-
|
|
12706
|
-
|
|
12707
|
-
} : (start = nextLineBreak + 1, {
|
|
12938
|
+
start = nextLineBreak === -1 ? source.length : nextLineBreak + 1;
|
|
12939
|
+
let lineOffset = countLineBreaks(source.slice(0, start));
|
|
12940
|
+
return {
|
|
12708
12941
|
source: source.slice(start),
|
|
12709
|
-
lineOffset
|
|
12710
|
-
}
|
|
12942
|
+
lineOffset
|
|
12943
|
+
};
|
|
12711
12944
|
}
|
|
12712
|
-
function mayContainTolerantMathBlockBoundaryOpener(markdown) {
|
|
12945
|
+
function mayContainTolerantMathBlockBoundaryOpener(markdown, scanWindowCache) {
|
|
12713
12946
|
let fullSource = String(markdown ?? "");
|
|
12714
12947
|
if (!fullSource || !fullSource.includes("$$") && !fullSource.includes("\\["))
|
|
12715
12948
|
return !1;
|
|
12716
|
-
let { source } = getTolerantBoundaryScanWindow(fullSource);
|
|
12949
|
+
let { source } = getTolerantBoundaryScanWindow(fullSource, scanWindowCache);
|
|
12717
12950
|
if (!source)
|
|
12718
12951
|
return !1;
|
|
12719
12952
|
let lines = source.split(/\r?\n/), startLine = Math.max(0, lines.length - TOLERANT_BOUNDARY_SCAN_MAX_LINES - 2), delimiters = [["$$", "$$"], ["\\[", "\\]"]];
|
|
@@ -12727,11 +12960,11 @@ function mayContainTolerantMathBlockBoundaryOpener(markdown) {
|
|
|
12727
12960
|
}
|
|
12728
12961
|
return !1;
|
|
12729
12962
|
}
|
|
12730
|
-
function getTolerantMathBlockBoundaryStreamKey(markdown) {
|
|
12963
|
+
function getTolerantMathBlockBoundaryStreamKey(markdown, scanWindowCache) {
|
|
12731
12964
|
let fullSource = String(markdown ?? "");
|
|
12732
12965
|
if (!fullSource || !fullSource.includes("$$") && !fullSource.includes("\\["))
|
|
12733
12966
|
return null;
|
|
12734
|
-
let { source, lineOffset } = getTolerantBoundaryScanWindow(fullSource);
|
|
12967
|
+
let { source, lineOffset } = getTolerantBoundaryScanWindow(fullSource, scanWindowCache);
|
|
12735
12968
|
if (!source)
|
|
12736
12969
|
return null;
|
|
12737
12970
|
let lines = source.split(/\r?\n/), startLine = Math.max(0, lines.length - TOLERANT_BOUNDARY_SCAN_MAX_LINES - 2), delimiters = [["$$", "$$"], ["\\[", "\\]"]];
|
|
@@ -13225,7 +13458,7 @@ function applyRenderRules(md) {
|
|
|
13225
13458
|
return `<pre class="${info ? `language-${md.utils.escapeHtml(info.split(/\s+/g)[0])}` : ""}"><code>${md.utils.escapeHtml(String(tokenShape.content ?? ""))}</code></pre>`;
|
|
13226
13459
|
});
|
|
13227
13460
|
}
|
|
13228
|
-
var HTML_LINK_OPEN_RE = /^<a[>\s]/i, HTML_LINK_CLOSE_RE = /^<\/a\s*>/i
|
|
13461
|
+
var HTML_LINK_OPEN_RE = /^<a[>\s]/i, HTML_LINK_CLOSE_RE = /^<\/a\s*>/i, LINKIFY_SEED_RE = /[@:]|\/\/|\.\S/;
|
|
13229
13462
|
function inlineTokenMayNeedLinkify(token, linkify$2) {
|
|
13230
13463
|
if (token?.type !== "inline")
|
|
13231
13464
|
return !1;
|
|
@@ -13251,13 +13484,33 @@ function inlineTokenMayNeedLinkify(token, linkify$2) {
|
|
|
13251
13484
|
}
|
|
13252
13485
|
function applyLinkifyCandidateFilter(md) {
|
|
13253
13486
|
let ruler = md.core?.ruler, original = ruler.getNamedRules?.().find((rule) => rule.name === "linkify")?.fn;
|
|
13254
|
-
typeof original
|
|
13487
|
+
if (typeof original != "function")
|
|
13488
|
+
return;
|
|
13489
|
+
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;
|
|
13490
|
+
ruler.at("linkify", (state) => {
|
|
13255
13491
|
if (!state.md?.options?.linkify)
|
|
13256
13492
|
return;
|
|
13257
13493
|
let tokens = Array.isArray(state.tokens) ? state.tokens : [], linkify$2 = state.md.linkify;
|
|
13258
|
-
if (!linkify$2)
|
|
13494
|
+
if (!linkify$2 || !tokens.some((token) => token?.type === "inline"))
|
|
13259
13495
|
return;
|
|
13260
|
-
let
|
|
13496
|
+
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;
|
|
13497
|
+
if (nativeMethods && nativeBuilder && screenedCache !== re.cache) {
|
|
13498
|
+
screenedCache = re.cache;
|
|
13499
|
+
let { schema_names: schemas = [], tlds = [] } = re.opts;
|
|
13500
|
+
seedSafe = schemas.every((name) => name === "//" || name.endsWith(":")) && tlds.every((tld) => /^[\p{L}\p{N}-]+$/u.test(tld));
|
|
13501
|
+
}
|
|
13502
|
+
let canScreen = !!nativeMethods && !!nativeBuilder && seedSafe && (state.env?.__markstreamFinal !== !1 || !!re?.cache.link_fuzzy_search), candidates = tokens.filter((token) => {
|
|
13503
|
+
if (canScreen && token?.type === "inline") {
|
|
13504
|
+
let children = token.children;
|
|
13505
|
+
if (Array.isArray(children) && children.length > 0) {
|
|
13506
|
+
if (!children.some((child) => child?.type === "text" && LINKIFY_SEED_RE.test(String(child.content ?? ""))))
|
|
13507
|
+
return !1;
|
|
13508
|
+
} else if (!LINKIFY_SEED_RE.test(String(token.content ?? "")))
|
|
13509
|
+
return !1;
|
|
13510
|
+
canScreen = !1;
|
|
13511
|
+
}
|
|
13512
|
+
return inlineTokenMayNeedLinkify(token, linkify$2);
|
|
13513
|
+
});
|
|
13261
13514
|
if (candidates.length)
|
|
13262
13515
|
return original(Object.assign(Object.create(Object.getPrototypeOf(state)), state, { tokens: candidates }));
|
|
13263
13516
|
});
|
|
@@ -13314,7 +13567,17 @@ function factory(opts = {}) {
|
|
|
13314
13567
|
...opts.mathOptions ?? {}
|
|
13315
13568
|
}), (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;
|
|
13316
13569
|
}
|
|
13317
|
-
var
|
|
13570
|
+
var regexCache = /* @__PURE__ */ new Map();
|
|
13571
|
+
function getCachedRegex(pattern, flags) {
|
|
13572
|
+
let key = flags ? `${pattern}:::${flags}` : pattern, regex = regexCache.get(key);
|
|
13573
|
+
if (!regex && (regex = new RegExp(pattern, flags), regexCache.set(key, regex), regexCache.size > 200)) {
|
|
13574
|
+
let keysToDelete = Array.from(regexCache.keys()).slice(0, 50);
|
|
13575
|
+
for (let keyToDelete of keysToDelete)
|
|
13576
|
+
regexCache.delete(keyToDelete);
|
|
13577
|
+
}
|
|
13578
|
+
return regex.lastIndex = 0, regex;
|
|
13579
|
+
}
|
|
13580
|
+
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*>$/;
|
|
13318
13581
|
function parseStandaloneHtmlDocument(markdown) {
|
|
13319
13582
|
let firstNonWhitespace = markdown.search(NOT_WHITESPACE);
|
|
13320
13583
|
if (firstNonWhitespace === -1 || markdown.charCodeAt(firstNonWhitespace) !== 60)
|
|
@@ -13322,7 +13585,7 @@ function parseStandaloneHtmlDocument(markdown) {
|
|
|
13322
13585
|
let trimmed = markdown.trim();
|
|
13323
13586
|
if (!trimmed)
|
|
13324
13587
|
return null;
|
|
13325
|
-
let startsLikeHtmlDocument =
|
|
13588
|
+
let startsLikeHtmlDocument = STARTS_LIKE_HTML_DOCUMENT_RE.test(trimmed), endsWithHtmlClose = ENDS_WITH_HTML_CLOSE_RE.test(trimmed);
|
|
13326
13589
|
return !startsLikeHtmlDocument || !endsWithHtmlClose ? null : [{
|
|
13327
13590
|
type: "html_block",
|
|
13328
13591
|
tag: "html",
|
|
@@ -13342,7 +13605,7 @@ function isCloseOnlyHtmlBlockForTag(node, tag) {
|
|
|
13342
13605
|
if (node.type !== "html_block" || !tag)
|
|
13343
13606
|
return !1;
|
|
13344
13607
|
let raw = String(node.raw ?? node.content ?? "");
|
|
13345
|
-
return
|
|
13608
|
+
return getCachedRegex(String.raw`^\s*<\s*\/\s*${escapeTagForRegExp(tag)}\s*>\s*$`, "i").test(raw);
|
|
13346
13609
|
}
|
|
13347
13610
|
var RAW_TEXT_HTML_TAGS = /* @__PURE__ */ new Set([
|
|
13348
13611
|
"iframe",
|
|
@@ -13373,11 +13636,11 @@ function findNextHtmlBlockFromSource(source, tag, startIndex) {
|
|
|
13373
13636
|
tag: ""
|
|
13374
13637
|
};
|
|
13375
13638
|
}
|
|
13376
|
-
let
|
|
13377
|
-
if (
|
|
13639
|
+
let closeIndex = findTagCloseIndexOutsideQuotes(source, start$1);
|
|
13640
|
+
if (closeIndex === -1)
|
|
13378
13641
|
return null;
|
|
13379
|
-
let end =
|
|
13380
|
-
if (
|
|
13642
|
+
let end = closeIndex + 1, raw = source.slice(start$1, end);
|
|
13643
|
+
if (NON_ELEMENT_MARKUP_START_RE.test(raw))
|
|
13381
13644
|
return {
|
|
13382
13645
|
closing: !1,
|
|
13383
13646
|
end,
|
|
@@ -13386,11 +13649,11 @@ function findNextHtmlBlockFromSource(source, tag, startIndex) {
|
|
|
13386
13649
|
};
|
|
13387
13650
|
let body = raw.slice(1).trimStart(), closing = body.startsWith("/");
|
|
13388
13651
|
closing && (body = body.slice(1).trimStart());
|
|
13389
|
-
let tagMatch = body.match(
|
|
13652
|
+
let tagMatch = body.match(MARKUP_TAG_NAME_RE);
|
|
13390
13653
|
return tagMatch?.[1] ? {
|
|
13391
13654
|
closing,
|
|
13392
13655
|
end,
|
|
13393
|
-
selfClosing:
|
|
13656
|
+
selfClosing: SELF_CLOSING_END_RE$1.test(raw),
|
|
13394
13657
|
tag: tagMatch[1].toLowerCase()
|
|
13395
13658
|
} : {
|
|
13396
13659
|
closing: !1,
|
|
@@ -13399,7 +13662,7 @@ function findNextHtmlBlockFromSource(source, tag, startIndex) {
|
|
|
13399
13662
|
tag: ""
|
|
13400
13663
|
};
|
|
13401
13664
|
}, findRawTextClose = (rawTextTag, from) => {
|
|
13402
|
-
let closeRe =
|
|
13665
|
+
let closeRe = getCachedRegex(String.raw`<\s*\/\s*${escapeTagForRegExp(rawTextTag)}(?=\s|>)`, "gi");
|
|
13403
13666
|
closeRe.lastIndex = from;
|
|
13404
13667
|
let match = closeRe.exec(source);
|
|
13405
13668
|
if (!match || match.index == null)
|
|
@@ -13430,7 +13693,7 @@ function findNextHtmlBlockFromSource(source, tag, startIndex) {
|
|
|
13430
13693
|
if (start === -1 || openEnd === -1)
|
|
13431
13694
|
return null;
|
|
13432
13695
|
let openTag = source.slice(start, openEnd + 1);
|
|
13433
|
-
if (VOID_HTML_TAGS.has(lowerTag) ||
|
|
13696
|
+
if (VOID_HTML_TAGS.has(lowerTag) || SELF_CLOSING_END_RE$1.test(openTag))
|
|
13434
13697
|
return {
|
|
13435
13698
|
raw: openTag,
|
|
13436
13699
|
start,
|
|
@@ -13534,13 +13797,14 @@ function extendHtmlBlockCloseToLineEnding(source, startIndex) {
|
|
|
13534
13797
|
` ? end + 1 : startIndex;
|
|
13535
13798
|
}
|
|
13536
13799
|
function findLastClosingTagStart(raw, tag) {
|
|
13537
|
-
let closeRe =
|
|
13800
|
+
let closeRe = getCachedRegex(String.raw`<\s*\/\s*${escapeTagForRegExp(tag)}(?=\s|>)`, "gi"), last = -1, match;
|
|
13538
13801
|
for (; (match = closeRe.exec(raw)) !== null; )
|
|
13539
13802
|
last = match.index;
|
|
13540
13803
|
return last;
|
|
13541
13804
|
}
|
|
13805
|
+
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 = /<[^>]*$/;
|
|
13542
13806
|
function findMatchingCloseTagEnd(rawHtml, tag, startIndex) {
|
|
13543
|
-
let lowerTag = tag.toLowerCase(), openTagRe =
|
|
13807
|
+
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);
|
|
13544
13808
|
for (; index < rawHtml.length; ) {
|
|
13545
13809
|
let lt = rawHtml.indexOf("<", index);
|
|
13546
13810
|
if (lt === -1)
|
|
@@ -13560,7 +13824,7 @@ function findMatchingCloseTagEnd(rawHtml, tag, startIndex) {
|
|
|
13560
13824
|
if (endRel === -1)
|
|
13561
13825
|
return -1;
|
|
13562
13826
|
let rawTag = slice.slice(0, endRel + 1);
|
|
13563
|
-
|
|
13827
|
+
SELF_CLOSING_END_RE.test(rawTag) || depth++, index = lt + endRel + 1;
|
|
13564
13828
|
continue;
|
|
13565
13829
|
}
|
|
13566
13830
|
index = lt + 1;
|
|
@@ -13569,7 +13833,7 @@ function findMatchingCloseTagEnd(rawHtml, tag, startIndex) {
|
|
|
13569
13833
|
}
|
|
13570
13834
|
function parseHtmlBlock(token) {
|
|
13571
13835
|
let raw = String(token.content ?? "");
|
|
13572
|
-
if (
|
|
13836
|
+
if (NON_ELEMENT_HTML_BLOCK_START_RE.test(raw))
|
|
13573
13837
|
return {
|
|
13574
13838
|
type: "html_block",
|
|
13575
13839
|
content: raw,
|
|
@@ -13577,7 +13841,7 @@ function parseHtmlBlock(token) {
|
|
|
13577
13841
|
tag: "",
|
|
13578
13842
|
loading: !1
|
|
13579
13843
|
};
|
|
13580
|
-
let tag = (raw.match(
|
|
13844
|
+
let tag = (raw.match(FIRST_TAG_NAME_RE)?.[1] || "").toLowerCase();
|
|
13581
13845
|
if (!tag)
|
|
13582
13846
|
return {
|
|
13583
13847
|
type: "html_block",
|
|
@@ -13586,10 +13850,10 @@ function parseHtmlBlock(token) {
|
|
|
13586
13850
|
tag: "",
|
|
13587
13851
|
loading: !1
|
|
13588
13852
|
};
|
|
13589
|
-
let openEnd = findTagCloseIndexOutsideQuotes(raw), openTag = openEnd === -1 ? raw : raw.slice(0, openEnd + 1), selfClosing = openEnd !== -1 &&
|
|
13853
|
+
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);
|
|
13590
13854
|
return {
|
|
13591
13855
|
type: "html_block",
|
|
13592
|
-
content: loading ? `${raw.replace(
|
|
13856
|
+
content: loading ? `${raw.replace(TRAILING_UNCLOSED_TAG_RE, "")}
|
|
13593
13857
|
</${tag}>` : raw,
|
|
13594
13858
|
raw,
|
|
13595
13859
|
tag,
|
|
@@ -13943,12 +14207,16 @@ function createExplicitBracketMathContext() {
|
|
|
13943
14207
|
function cloneExplicitBracketMathContext(context) {
|
|
13944
14208
|
return { ...context };
|
|
13945
14209
|
}
|
|
13946
|
-
function setTolerantMathBoundaryStreamCache(runtime, source, key, explicitBracketMath = scanExplicitBracketMathStreamState(source).state
|
|
14210
|
+
function setTolerantMathBoundaryStreamCache(runtime, source, key, explicitBracketMath = scanExplicitBracketMathStreamState(source).state, scanWindow = {
|
|
14211
|
+
lineOffset: 0,
|
|
14212
|
+
windowStart: 0
|
|
14213
|
+
}) {
|
|
13947
14214
|
runtime.tolerantMathBoundary = {
|
|
13948
14215
|
explicitBracketMath,
|
|
13949
14216
|
source,
|
|
13950
14217
|
key,
|
|
13951
|
-
pendingCandidate: key === null && mayContainTolerantMathBlockBoundaryOpener(source)
|
|
14218
|
+
pendingCandidate: key === null && mayContainTolerantMathBlockBoundaryOpener(source, scanWindow),
|
|
14219
|
+
scanWindow
|
|
13952
14220
|
};
|
|
13953
14221
|
}
|
|
13954
14222
|
function sourceEndsWithSplitTolerantBoundaryPrefix(source) {
|
|
@@ -14197,7 +14465,7 @@ function stripPendingExplicitMathTail(markdown, runtime, useCache = !0) {
|
|
|
14197
14465
|
let md = runtime.markdownIt;
|
|
14198
14466
|
if (!hasMarkstreamMathPlugin(md))
|
|
14199
14467
|
return markdown;
|
|
14200
|
-
let previous = useCache ? runtime.pendingExplicitMathTail : void 0, state = previous?.source === markdown ? previous.state : previous &&
|
|
14468
|
+
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;
|
|
14201
14469
|
useCache && (runtime.pendingExplicitMathTail = {
|
|
14202
14470
|
source: markdown,
|
|
14203
14471
|
state
|
|
@@ -14257,13 +14525,16 @@ function syncTolerantMathBoundaryStreamCache(runtime, source) {
|
|
|
14257
14525
|
let previous = runtime.tolerantMathBoundary;
|
|
14258
14526
|
if (previous?.source === source)
|
|
14259
14527
|
return;
|
|
14260
|
-
let sourceExtendsPrevious = previous ?
|
|
14528
|
+
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;
|
|
14261
14529
|
if (previous && sourceExtendsPrevious && previous.key === null && previous.pendingCandidate === !1 && !completesExplicitBracketMathClose && !appendedChunkMayAffectTolerantMathBoundary(previous.source, appended) && !sourceEndsWithSplitTolerantBoundaryPrefix(source)) {
|
|
14262
14530
|
previous.source = source, previous.explicitBracketMath = nextExplicitBracketMath;
|
|
14263
14531
|
return;
|
|
14264
14532
|
}
|
|
14265
|
-
let
|
|
14266
|
-
|
|
14533
|
+
let scanWindow = sourceExtendsPrevious && previous ? previous.scanWindow : {
|
|
14534
|
+
lineOffset: 0,
|
|
14535
|
+
windowStart: 0
|
|
14536
|
+
}, nextKey = getTolerantMathBlockBoundaryStreamKey(source, scanWindow);
|
|
14537
|
+
(previous && (previous && !sourceExtendsPrevious || previous.key !== nextKey || completesExplicitBracketMathClose) || !previous && nextKey) && runtime.resetStreamOnly(), setTolerantMathBoundaryStreamCache(runtime, source, nextKey, nextExplicitBracketMath, scanWindow);
|
|
14267
14538
|
}
|
|
14268
14539
|
function shouldUseSyncParseForPendingTolerantMathBoundary(runtime) {
|
|
14269
14540
|
let cache = runtime.tolerantMathBoundary;
|
|
@@ -14431,6 +14702,7 @@ var REUSABLE_INLINE_TOKEN_TYPES = /* @__PURE__ */ new Set([
|
|
|
14431
14702
|
"code_block",
|
|
14432
14703
|
"fence",
|
|
14433
14704
|
"hr",
|
|
14705
|
+
"html_block",
|
|
14434
14706
|
"inline",
|
|
14435
14707
|
"math_block"
|
|
14436
14708
|
]);
|
|
@@ -14533,7 +14805,7 @@ function sameTokenAttrs(left, right) {
|
|
|
14533
14805
|
function isSameTokenShapeForReuse(left, right) {
|
|
14534
14806
|
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);
|
|
14535
14807
|
}
|
|
14536
|
-
function updateStructuredStreamCache(runtime, source, tokens, groups, nodes, options,
|
|
14808
|
+
function updateStructuredStreamCache(runtime, source, tokens, groups, nodes, options, linkifyDemotionContexts, linkifyDemotionContextOffset = 0, fallbackLinkifyDemotionContext) {
|
|
14537
14809
|
let groupStarts = groups.starts;
|
|
14538
14810
|
if (groupStarts.length === 0 || nodes.length !== groupStarts.length) {
|
|
14539
14811
|
runtime.structuredStream = void 0;
|
|
@@ -14546,7 +14818,7 @@ function updateStructuredStreamCache(runtime, source, tokens, groups, nodes, opt
|
|
|
14546
14818
|
lastToken: tokens[end - 1],
|
|
14547
14819
|
tokenCount: end - start
|
|
14548
14820
|
};
|
|
14549
|
-
}), stableGroupCount = groups.mixed ? Math.max(0, groupStarts.length - 1) : sourceEndsWithBlankLine(source) ? groupStarts.length : Math.max(0, groupStarts.length - 1),
|
|
14821
|
+
}), 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;
|
|
14550
14822
|
runtime.structuredStream = {
|
|
14551
14823
|
groupBoundaries,
|
|
14552
14824
|
groupStarts,
|
|
@@ -14555,7 +14827,7 @@ function updateStructuredStreamCache(runtime, source, tokens, groups, nodes, opt
|
|
|
14555
14827
|
mixed: groups.mixed,
|
|
14556
14828
|
source,
|
|
14557
14829
|
nodes,
|
|
14558
|
-
|
|
14830
|
+
linkifyDemotionContext,
|
|
14559
14831
|
stableGroupCount,
|
|
14560
14832
|
requireClosingStrong: options.requireClosingStrong,
|
|
14561
14833
|
validateLink: options.validateLink
|
|
@@ -14592,18 +14864,18 @@ function processTopLevelTokensWithReuse(runtime, source, tokens, options, callba
|
|
|
14592
14864
|
if (!groups)
|
|
14593
14865
|
return runtime.structuredStream = void 0, callbacks.processTokens(tokens, options);
|
|
14594
14866
|
let groupStarts = groups.starts, stableGroupCount = previous && groups.mixed ? Math.min(previous.stableGroupCount, Math.max(0, previous.groupBoundaries.length - 1)) : previous?.stableGroupCount ?? 0;
|
|
14595
|
-
if (previous && stableGroupCount > 0 && previous.requireClosingStrong === options.requireClosingStrong && previous.validateLink === options.validateLink &&
|
|
14596
|
-
let tailStart = groupStarts[stableGroupCount] ?? tokens.length,
|
|
14867
|
+
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)) {
|
|
14868
|
+
let tailStart = groupStarts[stableGroupCount] ?? tokens.length, tailOptions = {
|
|
14597
14869
|
...options,
|
|
14598
|
-
|
|
14599
|
-
}), expectedTailNodes = groupStarts.length - stableGroupCount;
|
|
14870
|
+
linkifyDemotionSeedContext: previous.linkifyDemotionContext
|
|
14871
|
+
}, tailNodes = callbacks.processTokens(tokens.slice(tailStart), tailOptions), expectedTailNodes = groupStarts.length - stableGroupCount;
|
|
14600
14872
|
if (tailNodes.length === expectedTailNodes) {
|
|
14601
14873
|
let result$1 = previous.nodes.slice(0, stableGroupCount).concat(tailNodes);
|
|
14602
|
-
return runtime.structuredReuseTailStart = stableGroupCount, callbacks.recordReusedTopLevelNodes?.(stableGroupCount), updateStructuredStreamCache(runtime, source, tokens, groups, result$1, options, previous.
|
|
14874
|
+
return runtime.structuredReuseTailStart = stableGroupCount, callbacks.recordReusedTopLevelNodes?.(stableGroupCount), updateStructuredStreamCache(runtime, source, tokens, groups, result$1, options, tailOptions.linkifyDemotionResultContexts, stableGroupCount, previous.linkifyDemotionContext), result$1;
|
|
14603
14875
|
}
|
|
14604
14876
|
}
|
|
14605
14877
|
let result = callbacks.processTokens(tokens, options);
|
|
14606
|
-
return updateStructuredStreamCache(runtime, source, tokens, groups, result, options), result;
|
|
14878
|
+
return updateStructuredStreamCache(runtime, source, tokens, groups, result, options, options.linkifyDemotionResultContexts), result;
|
|
14607
14879
|
}
|
|
14608
14880
|
function isDetailsOpenHtmlBlock(node) {
|
|
14609
14881
|
if (node.type !== "html_block" || String(node.tag ?? "").toLowerCase() !== "details")
|
|
@@ -14688,7 +14960,7 @@ function parseSiblingHtmlBlockChildren(blocks, context, options, final, useCache
|
|
|
14688
14960
|
validateLink: options.validateLink
|
|
14689
14961
|
}), children.flat();
|
|
14690
14962
|
}
|
|
14691
|
-
function structureGenericHtmlBlockChildren(nodes, context, options, final
|
|
14963
|
+
function structureGenericHtmlBlockChildren(nodes, context, options, final) {
|
|
14692
14964
|
let processNode = (node) => {
|
|
14693
14965
|
if (node?.type !== "html_block")
|
|
14694
14966
|
return node;
|
|
@@ -14705,12 +14977,9 @@ function structureGenericHtmlBlockChildren(nodes, context, options, final, tailS
|
|
|
14705
14977
|
if (!innerRaw.trim() || !hasStructuredHtmlWrapperMarkers(innerRaw))
|
|
14706
14978
|
return node;
|
|
14707
14979
|
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);
|
|
14708
|
-
return shouldStructureGenericHtmlBlockChildren(children)
|
|
14709
|
-
...node,
|
|
14710
|
-
children
|
|
14711
|
-
} : node;
|
|
14980
|
+
return shouldStructureGenericHtmlBlockChildren(children) && (fields.children = children), node;
|
|
14712
14981
|
};
|
|
14713
|
-
return
|
|
14982
|
+
return nodes.map(processNode);
|
|
14714
14983
|
}
|
|
14715
14984
|
function hasTopLevelHtmlBlock(nodes, start = 0) {
|
|
14716
14985
|
for (let i = start; i < nodes.length; i++)
|
|
@@ -14821,12 +15090,18 @@ function combineStructuredDetailsHtmlBlocks(nodes, source, context, options, fin
|
|
|
14821
15090
|
}
|
|
14822
15091
|
return [merged, cursor];
|
|
14823
15092
|
}
|
|
14824
|
-
function
|
|
15093
|
+
function findNodeRawPosition(node, nodeRaw, source, cursor, context) {
|
|
15094
|
+
if (!nodeRaw)
|
|
15095
|
+
return -1;
|
|
15096
|
+
let anchor = context.getInternalNodeSourceRange(node)?.start ?? -1, anchored = anchor >= cursor && source.startsWith(nodeRaw, anchor);
|
|
15097
|
+
return node?.type === "html_block" ? anchored && anchor === cursor ? anchor : source.indexOf(nodeRaw, cursor) : anchor < 0 ? source.indexOf(nodeRaw, cursor) : anchored ? anchor : -1;
|
|
15098
|
+
}
|
|
15099
|
+
function mergeSplitTopLevelHtmlBlocks(nodes, final, source, context, options, initialSourceCursor = 0) {
|
|
14825
15100
|
if (!source)
|
|
14826
15101
|
return nodes;
|
|
14827
|
-
let merged = nodes.slice(), sourceHtmlCursor =
|
|
15102
|
+
let merged = nodes.slice(), sourceHtmlCursor = initialSourceCursor;
|
|
14828
15103
|
for (let i = 0; i < merged.length; i++) {
|
|
14829
|
-
let node = merged[i], nodeRaw = getMergeableNodeRaw(node), nodePos = nodeRaw
|
|
15104
|
+
let node = merged[i], nodeRaw = getMergeableNodeRaw(node), nodePos = findNodeRawPosition(node, nodeRaw, source, sourceHtmlCursor, context);
|
|
14830
15105
|
if (node?.type !== "html_block") {
|
|
14831
15106
|
nodePos !== -1 && (sourceHtmlCursor = nodePos + nodeRaw.length);
|
|
14832
15107
|
continue;
|
|
@@ -14934,7 +15209,7 @@ function parseEmphasisToken(tokens, startIndex, parseInlineTokens$1, options) {
|
|
|
14934
15209
|
};
|
|
14935
15210
|
}
|
|
14936
15211
|
function TRAILING_OWN_FENCE_CANDIDATE_LINE_RE(marker) {
|
|
14937
|
-
return
|
|
15212
|
+
return getCachedRegex(`(?:^|\\r\\n|\\n|\\r) {0,3}${marker}+[ \\t]*$`);
|
|
14938
15213
|
}
|
|
14939
15214
|
var DIFF_HEADER_PREFIXES = [
|
|
14940
15215
|
"diff ",
|
|
@@ -16473,7 +16748,7 @@ function handleTextToken(state, token) {
|
|
|
16473
16748
|
}
|
|
16474
16749
|
trailingTextStart < state.result.length && (content.startsWith(trailingTextContent) ? (state.currentTextNode = null, state.result.length = trailingTextStart) : state.currentTextNode = state.result[state.result.length - 1]);
|
|
16475
16750
|
let nextToken = state.tokens[state.index + 1];
|
|
16476
|
-
if ((content === "`" || content === "|" || content === "$") && !hasEscapedMarkup(token, `\\${content}`) || /^\*+$/.test(content) && !hasEscapedMarkup(token, "\\*")) {
|
|
16751
|
+
if (state.options?.final !== !0 && ((content === "`" || content === "|" || content === "$") && !hasEscapedMarkup(token, `\\${content}`) || /^\*+$/.test(content) && !hasEscapedMarkup(token, "\\*"))) {
|
|
16477
16752
|
state.index++;
|
|
16478
16753
|
return;
|
|
16479
16754
|
}
|
|
@@ -16673,9 +16948,20 @@ function dispatchInlineToken(state, token) {
|
|
|
16673
16948
|
function handleReference(state, token) {
|
|
16674
16949
|
state.resetCurrentTextNode(), state.pushParsed(parseReferenceToken(token)), state.index++;
|
|
16675
16950
|
}
|
|
16951
|
+
var TEXT_RECOVERY_MARKER_RE = /[!$(*[\\\]_`|~]/;
|
|
16676
16952
|
function parseInlineTokens(tokens, raw, pPreToken, options) {
|
|
16677
16953
|
if (!tokens || tokens.length === 0)
|
|
16678
16954
|
return [];
|
|
16955
|
+
if (tokens.length === 1 && tokens[0].type === "text") {
|
|
16956
|
+
let content = tokens[0].content;
|
|
16957
|
+
if (typeof content == "string" && content && content !== "<" && !content.endsWith("undefined") && !TEXT_RECOVERY_MARKER_RE.test(content))
|
|
16958
|
+
return [{
|
|
16959
|
+
type: "text",
|
|
16960
|
+
content,
|
|
16961
|
+
raw: content,
|
|
16962
|
+
center: !1
|
|
16963
|
+
}];
|
|
16964
|
+
}
|
|
16679
16965
|
let parseContext = ensureParseContext(options), inheritedContext = parseContext.linkifyDemotionContext, inferredContext = inferLinkifyDemotionContext(raw), linkifyDemotionContext = {
|
|
16680
16966
|
filename: inheritedContext?.filename || inferredContext.filename,
|
|
16681
16967
|
explicitFilename: inheritedContext?.explicitFilename || inferredContext.explicitFilename,
|
|
@@ -17463,7 +17749,7 @@ function parseBasicBlockToken(tokens, index, options, parseInlineTokens$1) {
|
|
|
17463
17749
|
return includeSourceMap && applyNodeSourceMap(paragraphNode, token, options), [paragraphNode, index + 1];
|
|
17464
17750
|
}
|
|
17465
17751
|
if (htmlBlockNode.tag && tagSets?.customTagSet?.has(htmlBlockNode.tag)) {
|
|
17466
|
-
let tag = htmlBlockNode.tag, context = isParseContext(options) ? options : void 0, source = String(context?.sourceMarkdown ?? ""), cursor = Number(context?.customHtmlBlockCursor ?? 0), mappedLineStart = Array.isArray(token.map) ?
|
|
17752
|
+
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)));
|
|
17467
17753
|
fromSource && context && (context.customHtmlBlockCursor = fromSource.end);
|
|
17468
17754
|
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 = "";
|
|
17469
17755
|
openEnd !== -1 && (closeIndex !== -1 && openEnd < closeIndex ? inner = rawHtml.slice(openEnd + 1, closeIndex) : inner = rawHtml.slice(openEnd + 1)), closeIndex === -1 && (inner = stripTrailingPartialClosingTag(inner, tag));
|
|
@@ -17643,15 +17929,11 @@ function maybePromoteCustomNodeFromParagraph(node, options) {
|
|
|
17643
17929
|
function processTokensWithContext(tokens, options, parseInlineTokens$1) {
|
|
17644
17930
|
if (!tokens || !Array.isArray(tokens))
|
|
17645
17931
|
return [];
|
|
17646
|
-
let result = [], linkifyContext = createLinkifyDemotionContextTracker(options),
|
|
17647
|
-
if (Array.isArray(seedRaws) && seedRaws.length)
|
|
17648
|
-
for (let raw of seedRaws)
|
|
17649
|
-
linkifyContext.remember(String(raw ?? ""));
|
|
17650
|
-
let includeSourceMap = options?.includeSourceMap === !0, i = 0;
|
|
17932
|
+
let result = [], resultContexts = [], linkifyContext = createLinkifyDemotionContextTracker(options), includeSourceMap = options?.includeSourceMap === !0, i = 0;
|
|
17651
17933
|
for (; i < tokens.length; ) {
|
|
17652
17934
|
let handled = parseCommonBlockToken(tokens, i, linkifyContext.options(), containerTokenHandlers, parseInlineTokens$1);
|
|
17653
17935
|
if (handled) {
|
|
17654
|
-
recordInternalNodeSourceRange(handled[0], tokens[i], options), result.push(handled[0]), linkifyContext.remember(handled[0].raw), i = handled[1];
|
|
17936
|
+
recordInternalNodeSourceRange(handled[0], tokens[i], options), result.push(handled[0]), linkifyContext.remember(handled[0].raw), resultContexts.push(linkifyContext.snapshot()), i = handled[1];
|
|
17655
17937
|
continue;
|
|
17656
17938
|
}
|
|
17657
17939
|
let token = tokens[i];
|
|
@@ -17741,42 +18023,52 @@ function processTokensWithContext(tokens, options, parseInlineTokens$1) {
|
|
|
17741
18023
|
i += 1;
|
|
17742
18024
|
break;
|
|
17743
18025
|
}
|
|
18026
|
+
let context = linkifyContext.snapshot();
|
|
18027
|
+
for (; resultContexts.length < result.length; )
|
|
18028
|
+
resultContexts.push(context);
|
|
17744
18029
|
}
|
|
17745
|
-
return result;
|
|
18030
|
+
return options.linkifyDemotionResultContexts = resultContexts, result;
|
|
17746
18031
|
}
|
|
17747
18032
|
function getCachedSourceLineOffsets(runtime, source) {
|
|
17748
18033
|
let cached = runtime.sourceLineOffsets;
|
|
17749
|
-
if (cached
|
|
18034
|
+
if (cached?.source === source)
|
|
17750
18035
|
return cached.offsets;
|
|
17751
|
-
if (cached && source.length > cached.source.length &&
|
|
18036
|
+
if (cached && source.length > cached.source.length && runtime.sourceExtends(cached.source, source)) {
|
|
17752
18037
|
let offsets$1 = cached.offsets;
|
|
17753
18038
|
for (let i = cached.source.length; i < source.length; i++)
|
|
17754
18039
|
source.charCodeAt(i) === 10 && offsets$1.push(i + 1);
|
|
17755
18040
|
return cached.source = source, offsets$1;
|
|
17756
18041
|
}
|
|
17757
|
-
let offsets =
|
|
17758
|
-
for (let i = 0; i < source.length; i++)
|
|
17759
|
-
source.charCodeAt(i) === 10 && offsets.push(i + 1);
|
|
18042
|
+
let offsets = computeSourceLineOffsets(source);
|
|
17760
18043
|
return runtime.sourceLineOffsets = {
|
|
17761
18044
|
source,
|
|
17762
18045
|
offsets
|
|
17763
18046
|
}, offsets;
|
|
17764
18047
|
}
|
|
18048
|
+
function computeSourceLineOffsets(source) {
|
|
18049
|
+
let offsets = [0];
|
|
18050
|
+
for (let i = 0; i < source.length; i++)
|
|
18051
|
+
source.charCodeAt(i) === 10 && offsets.push(i + 1);
|
|
18052
|
+
return offsets;
|
|
18053
|
+
}
|
|
17765
18054
|
var parserRuntimes = /* @__PURE__ */ new WeakMap(), wrappedMarkdownItInstances = /* @__PURE__ */ new WeakSet(), wrappedStreamInstances = /* @__PURE__ */ new WeakSet();
|
|
17766
18055
|
function sameSemantics(left, right) {
|
|
17767
18056
|
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;
|
|
17768
18057
|
}
|
|
17769
18058
|
var ParserRuntime = class {
|
|
17770
18059
|
constructor(markdownIt$1) {
|
|
17771
|
-
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;
|
|
18060
|
+
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;
|
|
18061
|
+
}
|
|
18062
|
+
sourceExtends(previousSource, currentSource) {
|
|
18063
|
+
return this.sourceRelationPrevious === previousSource && this.sourceRelationCurrent === currentSource ? !0 : currentSource.startsWith(previousSource) ? (this.sourceRelationPrevious = previousSource, this.sourceRelationCurrent = currentSource, !0) : !1;
|
|
17772
18064
|
}
|
|
17773
18065
|
beginRootParse(source, semantics) {
|
|
17774
18066
|
this.streamResetInCurrentRootParse = !1;
|
|
17775
|
-
let sourceChangedNonAppend = this.documentSource !== void 0 && source !== this.documentSource && !
|
|
18067
|
+
let sourceChangedNonAppend = this.documentSource !== void 0 && source !== this.documentSource && !this.sourceExtends(this.documentSource, source), semanticsChanged = this.semantics !== void 0 && !sameSemantics(this.semantics, semantics);
|
|
17776
18068
|
(this.finalized || sourceChangedNonAppend || semanticsChanged) && this.resetDocument(this.streamStateActive), this.finalized = !1, this.documentSource = source, this.semantics = semantics;
|
|
17777
18069
|
}
|
|
17778
18070
|
finishRootParse(final) {
|
|
17779
|
-
final && (this.clearDocumentCaches(), this.documentSource = void 0, this.semantics = void 0, this.finalized = !0);
|
|
18071
|
+
this.sourceRelationPrevious = void 0, this.sourceRelationCurrent = void 0, final && (this.clearDocumentCaches(), this.documentSource = void 0, this.semantics = void 0, this.finalized = !0);
|
|
17780
18072
|
}
|
|
17781
18073
|
resetForFinalAutoParse() {
|
|
17782
18074
|
this.streamResetInCurrentRootParse || this.resetStreamOnly(), this.clearDocumentCaches();
|
|
@@ -17811,7 +18103,7 @@ var ParserRuntime = class {
|
|
|
17811
18103
|
this.resetDocument(!0), parserRuntimes.delete(this.markdownIt);
|
|
17812
18104
|
}
|
|
17813
18105
|
clearDocumentCaches() {
|
|
17814
|
-
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;
|
|
18106
|
+
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;
|
|
17815
18107
|
}
|
|
17816
18108
|
};
|
|
17817
18109
|
function wrapMarkdownItBoundaries(md) {
|
|
@@ -17950,6 +18242,11 @@ function createSourceLineMapper(source, parsedSource) {
|
|
|
17950
18242
|
};
|
|
17951
18243
|
};
|
|
17952
18244
|
}
|
|
18245
|
+
var closingTagBlankLineReCache = /* @__PURE__ */ new Map();
|
|
18246
|
+
function getClosingTagBlankLineRe(tag) {
|
|
18247
|
+
let re = closingTagBlankLineReCache.get(tag);
|
|
18248
|
+
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;
|
|
18249
|
+
}
|
|
17953
18250
|
function stripDanglingHtmlLikeTail(markdown) {
|
|
17954
18251
|
let isWs = (ch) => ch === " " || ch === " " || ch === `
|
|
17955
18252
|
` || ch === "\r", isLikelyHtmlTagPrefix = (tail$1) => {
|
|
@@ -18010,8 +18307,8 @@ function stripDanglingHtmlLikeTail(markdown) {
|
|
|
18010
18307
|
}
|
|
18011
18308
|
}
|
|
18012
18309
|
return !0;
|
|
18013
|
-
},
|
|
18014
|
-
if (lastLt === -1
|
|
18310
|
+
}, s = String(markdown ?? ""), lastLt = s.lastIndexOf("<");
|
|
18311
|
+
if (lastLt === -1)
|
|
18015
18312
|
return s;
|
|
18016
18313
|
if (lastLt > 0) {
|
|
18017
18314
|
let prev = s[lastLt - 1], prevIsWs = prev === " " || prev === " " || prev === `
|
|
@@ -18021,7 +18318,7 @@ function stripDanglingHtmlLikeTail(markdown) {
|
|
|
18021
18318
|
}
|
|
18022
18319
|
let tail = s.slice(lastLt);
|
|
18023
18320
|
return tail.includes(">") || tail.length > 1 && (tail[1] === " " || tail[1] === " " || tail[1] === `
|
|
18024
|
-
` || tail[1] === "\r") || !isLikelyHtmlTagPrefix(tail) ? s : s.slice(0, lastLt);
|
|
18321
|
+
` || tail[1] === "\r") || !isLikelyHtmlTagPrefix(tail) || isInsideOpenMarkdownFenceBeforeOffset(s, lastLt) ? s : s.slice(0, lastLt);
|
|
18025
18322
|
}
|
|
18026
18323
|
function ensureBlankLineBeforeInlineMultilineCustomHtmlBlocks(markdown, tags) {
|
|
18027
18324
|
if (!markdown || !tags.length)
|
|
@@ -18567,10 +18864,8 @@ function normalizeStreamingCustomHtmlSource(markdown, customHtmlTags, isFinal) {
|
|
|
18567
18864
|
if (customHtmlTags?.length && safeMarkdown.includes("<")) {
|
|
18568
18865
|
let tags = normalizeCustomHtmlTags(customHtmlTags);
|
|
18569
18866
|
if (tags.length && (safeMarkdown = ensureBlankLineBeforeInlineMultilineCustomHtmlBlocks(safeMarkdown, tags), safeMarkdown = normalizeCustomHtmlOpeningTagSameLine(safeMarkdown, tags), safeMarkdown = ensureBlankLineBeforeCustomHtmlBlocks(safeMarkdown, tags), safeMarkdown = ensureBlankLineAfterCustomHtmlCloseBeforeBlockMarkerSameLine(safeMarkdown, tags), safeMarkdown.includes("</")))
|
|
18570
|
-
for (let tag of tags)
|
|
18571
|
-
|
|
18572
|
-
safeMarkdown = safeMarkdown.replace(re, "$1$2$2");
|
|
18573
|
-
}
|
|
18867
|
+
for (let tag of tags)
|
|
18868
|
+
safeMarkdown = safeMarkdown.replace(getClosingTagBlankLineRe(tag), "$1$2$2");
|
|
18574
18869
|
}
|
|
18575
18870
|
return isFinal || (safeMarkdown = stripDanglingHtmlLikeTail(safeMarkdown)), safeMarkdown;
|
|
18576
18871
|
}
|
|
@@ -18597,7 +18892,7 @@ function transformStreamingSafeMarkdown(source, isFinal, options) {
|
|
|
18597
18892
|
}
|
|
18598
18893
|
function getSafeMarkdown(runtime, sourceMarkdown, isFinal, options) {
|
|
18599
18894
|
let mode = `${isFinal ? "final" : "stream"}:${(options.customHtmlTags ?? []).join(",")}`, previous = options.isFragment ? void 0 : runtime.safeMarkdown, safeMarkdown;
|
|
18600
|
-
if (!isFinal && !options.customHtmlTags?.length && previous && previous.mode === mode && sourceMarkdown.length >= previous.source.length &&
|
|
18895
|
+
if (!isFinal && !options.customHtmlTags?.length && previous && previous.mode === mode && sourceMarkdown.length >= previous.source.length && runtime.sourceExtends(previous.source, sourceMarkdown)) {
|
|
18601
18896
|
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;
|
|
18602
18897
|
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);
|
|
18603
18898
|
} else
|
|
@@ -18668,7 +18963,7 @@ function parseMarkdownWithContext(markdown, inputContext) {
|
|
|
18668
18963
|
...options,
|
|
18669
18964
|
sourceLineMapper: options.includeSourceMap === !0 ? createSourceLineMapper(sourceMarkdown, safeMarkdown) : void 0,
|
|
18670
18965
|
sourceMarkdown: safeMarkdown,
|
|
18671
|
-
sourceLineOffsets: getCachedSourceLineOffsets(runtime, safeMarkdown),
|
|
18966
|
+
sourceLineOffsets: options.isFragment ? computeSourceLineOffsets(safeMarkdown) : getCachedSourceLineOffsets(runtime, safeMarkdown),
|
|
18672
18967
|
customHtmlBlockCursor: 0
|
|
18673
18968
|
}, result = processTopLevelTokensWithReuse(runtime, safeMarkdown, transformedTokens, internalOptions, {
|
|
18674
18969
|
processTokens: (nextTokens, nextOptions) => processTokensWithTiming(nextTokens, nextOptions, timing),
|
|
@@ -18690,9 +18985,18 @@ function parseMarkdownWithContext(markdown, inputContext) {
|
|
|
18690
18985
|
getInternalNodeSourceRange: (node) => getInternalNodeSourceRange(node, runtime),
|
|
18691
18986
|
markdownIt: md,
|
|
18692
18987
|
parseFragment: (fragment, fragmentOptions) => parseMarkdownWithContext(fragment, fragmentOptions)
|
|
18693
|
-
};
|
|
18694
|
-
|
|
18695
|
-
|
|
18988
|
+
}, canReuseHtmlPrefix = tailStart > 0 && runtime.htmlPassIdentityPreserving, tailSourceStart = canReuseHtmlPrefix ? getInternalNodeSourceRange(result[tailStart], runtime)?.start : void 0, hasDetailsInput = !1;
|
|
18989
|
+
for (let i = canReuseHtmlPrefix ? tailStart : 0; i < result.length; i++) {
|
|
18990
|
+
let node = result[i];
|
|
18991
|
+
if (node.type === "html_block" && String(node.tag ?? "").toLowerCase() === "details") {
|
|
18992
|
+
hasDetailsInput = !0;
|
|
18993
|
+
break;
|
|
18994
|
+
}
|
|
18995
|
+
}
|
|
18996
|
+
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]);
|
|
18997
|
+
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);
|
|
18998
|
+
} else
|
|
18999
|
+
runtime.htmlPassIdentityPreserving = !0;
|
|
18696
19000
|
return isFinal && finalizeHtmlBlockLoading(result), result = applyPostTransformNodes(result, options), options.debug && console.log("Parsed Markdown Tree Structure:", result), finishTimedParse(result, timing, parseStartedAt);
|
|
18697
19001
|
}
|
|
18698
19002
|
function parseMarkdownToStructure(markdown, md, options = {}) {
|
|
@@ -18830,11 +19134,13 @@ function getMarkdown(msgId = `editor-${Date.now()}`, options = {}) {
|
|
|
18830
19134
|
md.use(applyInlinePairs), md.use(sup_plugin), md.use(ins_plugin$1);
|
|
18831
19135
|
let checkboxModule = import_markdown_it_task_checkbox, markdownItCheckboxPlugin = checkboxModule.default ?? checkboxModule;
|
|
18832
19136
|
md.use(markdownItCheckboxPlugin), md.use(ins_plugin), md.use(footnote_plugin), md.core.ruler.after("block", "mark_fence_closed", (state) => {
|
|
18833
|
-
let s = state, src = s.src, envFinal = !!s.env?.__markstreamFinal, lines
|
|
19137
|
+
let s = state, src = s.src, envFinal = !!s.env?.__markstreamFinal, lines;
|
|
18834
19138
|
for (let token of s.tokens) {
|
|
18835
19139
|
if (token.type !== "fence" || !token.map || !token.markup)
|
|
18836
19140
|
continue;
|
|
18837
|
-
let openLine = token.map[0], endLine = token.map[1], markup = token.markup, marker = markup[0], minLen = markup.length,
|
|
19141
|
+
let openLine = token.map[0], endLine = token.map[1], markup = token.markup, marker = markup[0], minLen = markup.length, lineIdx = Math.max(0, endLine - 1);
|
|
19142
|
+
lines ?? (lines = src.split(/\r?\n/));
|
|
19143
|
+
let line = lines[lineIdx] ?? "", i = 0;
|
|
18838
19144
|
for (; i < line.length && (line[i] === " " || line[i] === " "); )
|
|
18839
19145
|
i++;
|
|
18840
19146
|
let count = 0;
|
|
@@ -21777,7 +22083,11 @@ var TVirtualMarkdown = (0, import_vue10.defineComponent)({
|
|
|
21777
22083
|
return withTextWidthProvider(
|
|
21778
22084
|
widthProvider,
|
|
21779
22085
|
() => terminalSelectionRowSpans(range, cols, rows.value.length).map((span) => {
|
|
21780
|
-
let text2 =
|
|
22086
|
+
let text2 = sliceByCellsRangeForSelection(
|
|
22087
|
+
rows.value[span.y]?.plainText ?? "",
|
|
22088
|
+
span.x0,
|
|
22089
|
+
span.x1
|
|
22090
|
+
);
|
|
21781
22091
|
return span.x1 >= cols ? text2.trimEnd() : text2;
|
|
21782
22092
|
}).join(`
|
|
21783
22093
|
`)
|