stream-markdown-parser 0.0.74 → 0.0.75
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +253 -49
- package/dist/index.js.map +1 -1
- package/package.json +12 -14
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/factory.ts","../src/types.ts","../src/parser/inline-parsers/index.ts","../src/parser/index.ts","../src/config.ts","../src/findMatchingClose.ts","../src/parser/inline-parsers/fence-parser.ts","../src/plugins/containers.ts","../src/plugins/isMathLike.ts","../src/plugins/math.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/factory.ts","../src/types.ts","../src/parser/inline-parsers/index.ts","../src/parser/index.ts","../src/config.ts","../src/findMatchingClose.ts","../src/parser/inline-parsers/fence-parser.ts","../src/plugins/containers.ts","../src/plugins/isMathLike.ts","../src/plugins/math.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -9497,7 +9497,93 @@ const OPEN_TAG_RE = /<([A-Z][\w-]*)(?=[\s/>]|$)/gi;
|
|
|
9497
9497
|
const CLOSE_TAG_RE = /<\/\s*([A-Z][\w-]*)(?=[\s/>]|$)/gi;
|
|
9498
9498
|
const TAG_NAME_AT_START_RE = /^<\s*(?:\/\s*)?([A-Z][\w-]*)/i;
|
|
9499
9499
|
const STRICT_OPEN_TAG_NAME_AT_START_RE = /^<\s*([A-Z][\w:-]*)(?=[\s/>]|$)/i;
|
|
9500
|
-
function
|
|
9500
|
+
function getHtmlInlineTagName(content) {
|
|
9501
|
+
return (content.match(TAG_NAME_AT_START_RE)?.[1] ?? "").toLowerCase();
|
|
9502
|
+
}
|
|
9503
|
+
function isHtmlInlineClosingTag(content) {
|
|
9504
|
+
return /^\s*<\s*\//.test(content);
|
|
9505
|
+
}
|
|
9506
|
+
function isSelfClosingHtmlInline(content, tag) {
|
|
9507
|
+
return VOID_TAGS$2.has(tag) || /\/\s*>\s*$/.test(content);
|
|
9508
|
+
}
|
|
9509
|
+
function escapeRegex$1(value) {
|
|
9510
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
9511
|
+
}
|
|
9512
|
+
function findMatchingCloseChildIndex(children, tag) {
|
|
9513
|
+
let depth = 0;
|
|
9514
|
+
for (let index = 0; index < children.length; index++) {
|
|
9515
|
+
const child = children[index];
|
|
9516
|
+
if (!child || child.type !== "html_inline") continue;
|
|
9517
|
+
const content = String(child.content ?? "");
|
|
9518
|
+
const childTag = getHtmlInlineTagName(content);
|
|
9519
|
+
if (childTag !== tag) continue;
|
|
9520
|
+
if (isHtmlInlineClosingTag(content)) {
|
|
9521
|
+
if (depth === 0) return index;
|
|
9522
|
+
depth--;
|
|
9523
|
+
continue;
|
|
9524
|
+
}
|
|
9525
|
+
if (!isSelfClosingHtmlInline(content, childTag)) depth++;
|
|
9526
|
+
}
|
|
9527
|
+
return -1;
|
|
9528
|
+
}
|
|
9529
|
+
function getTrailingOpenDepth(children, tag) {
|
|
9530
|
+
let depth = 0;
|
|
9531
|
+
for (const child of children) {
|
|
9532
|
+
if (!child || child.type !== "html_inline") continue;
|
|
9533
|
+
const content = String(child.content ?? "");
|
|
9534
|
+
const childTag = getHtmlInlineTagName(content);
|
|
9535
|
+
if (childTag !== tag) continue;
|
|
9536
|
+
if (isHtmlInlineClosingTag(content)) {
|
|
9537
|
+
if (depth > 0) depth--;
|
|
9538
|
+
continue;
|
|
9539
|
+
}
|
|
9540
|
+
if (!isSelfClosingHtmlInline(content, childTag)) depth++;
|
|
9541
|
+
}
|
|
9542
|
+
return depth;
|
|
9543
|
+
}
|
|
9544
|
+
function findMatchingCloseRangeInHtml(content, tag, startIndex = 0) {
|
|
9545
|
+
const tokenRe = new RegExp(String.raw`<\s*(\/?)\s*${escapeRegex$1(tag)}(?=[\s>/])[^>]*>`, "gi");
|
|
9546
|
+
tokenRe.lastIndex = Math.max(0, startIndex);
|
|
9547
|
+
let depth = 0;
|
|
9548
|
+
let match;
|
|
9549
|
+
while ((match = tokenRe.exec(content)) !== null) {
|
|
9550
|
+
const raw = match[0] ?? "";
|
|
9551
|
+
const closing = !!match[1];
|
|
9552
|
+
const selfClosing = !closing && /\/\s*>$/.test(raw);
|
|
9553
|
+
if (closing) {
|
|
9554
|
+
if (depth === 0) return {
|
|
9555
|
+
start: match.index,
|
|
9556
|
+
end: match.index + raw.length
|
|
9557
|
+
};
|
|
9558
|
+
depth--;
|
|
9559
|
+
continue;
|
|
9560
|
+
}
|
|
9561
|
+
if (!selfClosing) depth++;
|
|
9562
|
+
}
|
|
9563
|
+
return null;
|
|
9564
|
+
}
|
|
9565
|
+
function findMatchingCloseOffsetInHtml(content, tag, startIndex = 0) {
|
|
9566
|
+
const range = findMatchingCloseRangeInHtml(content, tag, startIndex);
|
|
9567
|
+
if (!range) return -1;
|
|
9568
|
+
return range.end;
|
|
9569
|
+
}
|
|
9570
|
+
function getTrailingCustomTagDepthInHtml(content, tag) {
|
|
9571
|
+
const tokenRe = new RegExp(String.raw`<\s*(\/?)\s*${escapeRegex$1(tag)}(?=[\s>/])[^>]*>`, "gi");
|
|
9572
|
+
let depth = 0;
|
|
9573
|
+
let match;
|
|
9574
|
+
while ((match = tokenRe.exec(content)) !== null) {
|
|
9575
|
+
const raw = match[0] ?? "";
|
|
9576
|
+
const closing = !!match[1];
|
|
9577
|
+
const selfClosing = !closing && /\/\s*>$/.test(raw);
|
|
9578
|
+
if (closing) {
|
|
9579
|
+
if (depth > 0) depth--;
|
|
9580
|
+
continue;
|
|
9581
|
+
}
|
|
9582
|
+
if (!selfClosing) depth++;
|
|
9583
|
+
}
|
|
9584
|
+
return depth;
|
|
9585
|
+
}
|
|
9586
|
+
function findTagCloseIndexOutsideQuotes$2(html) {
|
|
9501
9587
|
let inSingle = false;
|
|
9502
9588
|
let inDouble = false;
|
|
9503
9589
|
for (let i = 0; i < html.length; i++) {
|
|
@@ -9541,7 +9627,7 @@ function findFirstIncompleteTag(content, tagSet) {
|
|
|
9541
9627
|
if (idx < 0) continue;
|
|
9542
9628
|
const tag = (m[1] ?? "").toLowerCase();
|
|
9543
9629
|
if (!isCommonHtmlTagOrPrefix(tag, tagSet)) continue;
|
|
9544
|
-
if (findTagCloseIndexOutsideQuotes$
|
|
9630
|
+
if (findTagCloseIndexOutsideQuotes$2(content.slice(idx)) !== -1) continue;
|
|
9545
9631
|
if (!first || idx < first.index) first = {
|
|
9546
9632
|
index: idx,
|
|
9547
9633
|
tag,
|
|
@@ -9553,7 +9639,7 @@ function findFirstIncompleteTag(content, tagSet) {
|
|
|
9553
9639
|
if (idx < 0) continue;
|
|
9554
9640
|
const tag = (m[1] ?? "").toLowerCase();
|
|
9555
9641
|
if (!isCommonHtmlTagOrPrefix(tag, tagSet)) continue;
|
|
9556
|
-
if (findTagCloseIndexOutsideQuotes$
|
|
9642
|
+
if (findTagCloseIndexOutsideQuotes$2(content.slice(idx)) !== -1) continue;
|
|
9557
9643
|
if (!first || idx < first.index) first = {
|
|
9558
9644
|
index: idx,
|
|
9559
9645
|
tag,
|
|
@@ -9619,7 +9705,7 @@ function fixStreamingHtmlInlineChildren(children, tagSet) {
|
|
|
9619
9705
|
cursor = lt + 1;
|
|
9620
9706
|
continue;
|
|
9621
9707
|
}
|
|
9622
|
-
const closeIdx = findTagCloseIndexOutsideQuotes$
|
|
9708
|
+
const closeIdx = findTagCloseIndexOutsideQuotes$2(sub);
|
|
9623
9709
|
if (closeIdx === -1) {
|
|
9624
9710
|
pushTextPart("<", baseToken);
|
|
9625
9711
|
cursor = lt + 1;
|
|
@@ -9657,7 +9743,7 @@ function fixStreamingHtmlInlineChildren(children, tagSet) {
|
|
|
9657
9743
|
if (pending) {
|
|
9658
9744
|
pending.buffer += tokenToRaw$1(child);
|
|
9659
9745
|
pendingAtEnd = pending.buffer;
|
|
9660
|
-
const closeIdx = findTagCloseIndexOutsideQuotes$
|
|
9746
|
+
const closeIdx = findTagCloseIndexOutsideQuotes$2(pending.buffer);
|
|
9661
9747
|
if (closeIdx === -1) continue;
|
|
9662
9748
|
const tagChunk = pending.buffer.slice(0, closeIdx + 1);
|
|
9663
9749
|
const afterChunk = pending.buffer.slice(closeIdx + 1);
|
|
@@ -9675,7 +9761,7 @@ function fixStreamingHtmlInlineChildren(children, tagSet) {
|
|
|
9675
9761
|
if (child.type === "html_inline") {
|
|
9676
9762
|
const content = tokenToRaw$1(child);
|
|
9677
9763
|
const tagName = (content.match(TAG_NAME_AT_START_RE)?.[1] ?? "").toLowerCase();
|
|
9678
|
-
if (tagName && tagSet.has(tagName) && findTagCloseIndexOutsideQuotes$
|
|
9764
|
+
if (tagName && tagSet.has(tagName) && findTagCloseIndexOutsideQuotes$2(content) === -1) {
|
|
9679
9765
|
pending = {
|
|
9680
9766
|
tag: tagName,
|
|
9681
9767
|
buffer: content,
|
|
@@ -9722,6 +9808,7 @@ function applyFixHtmlInlineTokens(md, options = {}) {
|
|
|
9722
9808
|
customTagSet.add(name);
|
|
9723
9809
|
autoCloseInlineTagSet.add(name);
|
|
9724
9810
|
}
|
|
9811
|
+
const shouldMergeHtmlBlockTag = (tag) => customTagSet.has(tag) || !commonHtmlTags.has(tag);
|
|
9725
9812
|
md.core.ruler.after("inline", "fix_html_inline_streaming", (state) => {
|
|
9726
9813
|
const toks = state.tokens ?? [];
|
|
9727
9814
|
for (const t of toks) {
|
|
@@ -9764,15 +9851,13 @@ function applyFixHtmlInlineTokens(md, options = {}) {
|
|
|
9764
9851
|
continue;
|
|
9765
9852
|
}
|
|
9766
9853
|
const chunk = String(t.content ?? t.raw ?? "");
|
|
9767
|
-
const
|
|
9768
|
-
const
|
|
9769
|
-
const isClosingTag$1 = !!closeMatch;
|
|
9854
|
+
const closeEnd = chunk ? findMatchingCloseOffsetInHtml(chunk, openTag) : -1;
|
|
9855
|
+
const isClosingTag$1 = closeEnd !== -1;
|
|
9770
9856
|
if (chunk) {
|
|
9771
9857
|
const openToken = toks[openIndex];
|
|
9772
|
-
if (
|
|
9773
|
-
const
|
|
9774
|
-
const
|
|
9775
|
-
const after = chunk.slice(end);
|
|
9858
|
+
if (closeEnd !== -1) {
|
|
9859
|
+
const before = chunk.slice(0, closeEnd);
|
|
9860
|
+
const after = chunk.slice(closeEnd);
|
|
9776
9861
|
openToken.content = `${String(openToken.content || "")}\n${before}`;
|
|
9777
9862
|
openToken.loading = false;
|
|
9778
9863
|
const afterTrimmed = after.replace(/^\s+/, "");
|
|
@@ -9806,11 +9891,10 @@ function applyFixHtmlInlineTokens(md, options = {}) {
|
|
|
9806
9891
|
const rawContent = String(t.content || "");
|
|
9807
9892
|
const tag = (rawContent.match(/<\s*(?:\/\s*)?([^\s>/]+)/)?.[1] ?? "").toLowerCase();
|
|
9808
9893
|
const isClosingTag$1 = /^\s*<\s*\//.test(rawContent);
|
|
9809
|
-
if (!tag || !
|
|
9894
|
+
if (!tag || !shouldMergeHtmlBlockTag(tag)) continue;
|
|
9810
9895
|
if (!isClosingTag$1) {
|
|
9811
9896
|
if (tag) {
|
|
9812
|
-
|
|
9813
|
-
if (!new RegExp(`^\\s*<\\s*${tag}\\b[^>]*\\/\\s*>`, "i").test(rawContent) && !closeRe.test(rawContent)) tagStack.push([tag, i]);
|
|
9897
|
+
if (!new RegExp(`^\\s*<\\s*${tag}\\b[^>]*\\/\\s*>`, "i").test(rawContent) && getTrailingCustomTagDepthInHtml(rawContent, tag) > 0) tagStack.push([tag, i]);
|
|
9814
9898
|
}
|
|
9815
9899
|
} else if (tagStack.length > 0 && tag && tagStack[tagStack.length - 1][0] === tag) {
|
|
9816
9900
|
const [, openIndex] = tagStack[tagStack.length - 1];
|
|
@@ -9880,15 +9964,11 @@ function applyFixHtmlInlineTokens(md, options = {}) {
|
|
|
9880
9964
|
continue;
|
|
9881
9965
|
}
|
|
9882
9966
|
if (tok.type !== "inline") continue;
|
|
9883
|
-
const children = Array.isArray(tok.children) ? tok.children : [];
|
|
9884
|
-
const closeChildIndex = children.
|
|
9885
|
-
if (!c || c.type !== "html_inline") return false;
|
|
9886
|
-
const cContent = String(c.content ?? "");
|
|
9887
|
-
return /^\s*<\s*\//.test(cContent) && cContent.toLowerCase().includes(top.tag);
|
|
9888
|
-
});
|
|
9967
|
+
const children$1 = Array.isArray(tok.children) ? tok.children : [];
|
|
9968
|
+
const closeChildIndex = findMatchingCloseChildIndex(children$1, top.tag);
|
|
9889
9969
|
if (closeChildIndex !== -1) {
|
|
9890
|
-
const beforeChildren = children.slice(0, closeChildIndex + 1);
|
|
9891
|
-
const afterChildren = children.slice(closeChildIndex + 1);
|
|
9970
|
+
const beforeChildren = children$1.slice(0, closeChildIndex + 1);
|
|
9971
|
+
const afterChildren = children$1.slice(closeChildIndex + 1);
|
|
9892
9972
|
const beforeText = beforeChildren.map((c) => String(c?.content ?? c?.raw ?? "")).join("");
|
|
9893
9973
|
openTok.content = `${String(openTok.content ?? "")}\n${beforeText}`;
|
|
9894
9974
|
if (Array.isArray(openTok.children)) openTok.children.push(...beforeChildren);
|
|
@@ -9931,13 +10011,14 @@ function applyFixHtmlInlineTokens(md, options = {}) {
|
|
|
9931
10011
|
continue;
|
|
9932
10012
|
}
|
|
9933
10013
|
openTok.content = `${String(openTok.content ?? "")}\n${content}`;
|
|
9934
|
-
if (Array.isArray(openTok.children)) openTok.children.push(...children);
|
|
10014
|
+
if (Array.isArray(openTok.children)) openTok.children.push(...children$1);
|
|
9935
10015
|
toks.splice(i, 1);
|
|
9936
10016
|
i--;
|
|
9937
10017
|
continue;
|
|
9938
10018
|
}
|
|
9939
10019
|
if (tok.type !== "inline") continue;
|
|
9940
|
-
|
|
10020
|
+
const children = Array.isArray(tok.children) ? tok.children : [];
|
|
10021
|
+
for (const tag of customTagSet) if ((children.length ? getTrailingOpenDepth(children, tag) : getOpenRe(tag).test(content) && !getCloseRe(tag).test(content) ? 1 : 0) > 0) {
|
|
9941
10022
|
stack.push({
|
|
9942
10023
|
tag,
|
|
9943
10024
|
index: i
|
|
@@ -9971,15 +10052,14 @@ function applyFixHtmlInlineTokens(md, options = {}) {
|
|
|
9971
10052
|
}
|
|
9972
10053
|
if (customTagSet.has(tag)) {
|
|
9973
10054
|
const raw$2 = String(t.content ?? "");
|
|
9974
|
-
const
|
|
9975
|
-
|
|
9976
|
-
|
|
9977
|
-
const endTagIndex$1 =
|
|
9978
|
-
const closeLen$1 =
|
|
10055
|
+
const openEnd = findTagCloseIndexOutsideQuotes$2(raw$2);
|
|
10056
|
+
const closeRange = openEnd === -1 ? null : findMatchingCloseRangeInHtml(raw$2, tag, openEnd + 1);
|
|
10057
|
+
t.loading = !!closeRange ? false : t.loading !== void 0 ? t.loading : true;
|
|
10058
|
+
const endTagIndex$1 = closeRange?.start ?? -1;
|
|
10059
|
+
const closeLen$1 = closeRange ? closeRange.end - closeRange.start : 0;
|
|
9979
10060
|
if (endTagIndex$1 !== -1) {
|
|
9980
10061
|
const rawForNode = raw$2.slice(0, endTagIndex$1 + closeLen$1);
|
|
9981
10062
|
let inner = "";
|
|
9982
|
-
const openEnd = findTagCloseIndexOutsideQuotes$1(raw$2);
|
|
9983
10063
|
if (openEnd !== -1 && openEnd < endTagIndex$1) inner = raw$2.slice(openEnd + 1, endTagIndex$1);
|
|
9984
10064
|
t.children = [{
|
|
9985
10065
|
type: tag,
|
|
@@ -14042,7 +14122,57 @@ const VOID_TAGS = new Set([
|
|
|
14042
14122
|
"track",
|
|
14043
14123
|
"wbr"
|
|
14044
14124
|
]);
|
|
14045
|
-
|
|
14125
|
+
function findTagCloseIndexOutsideQuotes$1(input) {
|
|
14126
|
+
let inSingle = false;
|
|
14127
|
+
let inDouble = false;
|
|
14128
|
+
for (let i = 0; i < input.length; i++) {
|
|
14129
|
+
const ch = input[i];
|
|
14130
|
+
if (ch === "\\") {
|
|
14131
|
+
i++;
|
|
14132
|
+
continue;
|
|
14133
|
+
}
|
|
14134
|
+
if (!inDouble && ch === "'") {
|
|
14135
|
+
inSingle = !inSingle;
|
|
14136
|
+
continue;
|
|
14137
|
+
}
|
|
14138
|
+
if (!inSingle && ch === "\"") {
|
|
14139
|
+
inDouble = !inDouble;
|
|
14140
|
+
continue;
|
|
14141
|
+
}
|
|
14142
|
+
if (!inSingle && !inDouble && ch === ">") return i;
|
|
14143
|
+
}
|
|
14144
|
+
return -1;
|
|
14145
|
+
}
|
|
14146
|
+
function findMatchingCloseTagEnd(rawHtml, tag, startIndex) {
|
|
14147
|
+
const lowerTag = tag.toLowerCase();
|
|
14148
|
+
const openTagRe = new RegExp(String.raw`^<\s*${lowerTag}(?=\s|>|/)`, "i");
|
|
14149
|
+
const closeTagRe = new RegExp(String.raw`^<\s*\/\s*${lowerTag}(?=\s|>)`, "i");
|
|
14150
|
+
let depth = 0;
|
|
14151
|
+
let index = Math.max(0, startIndex);
|
|
14152
|
+
while (index < rawHtml.length) {
|
|
14153
|
+
const lt = rawHtml.indexOf("<", index);
|
|
14154
|
+
if (lt === -1) return -1;
|
|
14155
|
+
const slice = rawHtml.slice(lt);
|
|
14156
|
+
if (closeTagRe.test(slice)) {
|
|
14157
|
+
const endRel = findTagCloseIndexOutsideQuotes$1(slice);
|
|
14158
|
+
if (endRel === -1) return -1;
|
|
14159
|
+
if (depth === 0) return lt + endRel + 1;
|
|
14160
|
+
depth--;
|
|
14161
|
+
index = lt + endRel + 1;
|
|
14162
|
+
continue;
|
|
14163
|
+
}
|
|
14164
|
+
if (openTagRe.test(slice)) {
|
|
14165
|
+
const endRel = findTagCloseIndexOutsideQuotes$1(slice);
|
|
14166
|
+
if (endRel === -1) return -1;
|
|
14167
|
+
const rawTag = slice.slice(0, endRel + 1);
|
|
14168
|
+
if (!/\/\s*>$/.test(rawTag)) depth++;
|
|
14169
|
+
index = lt + endRel + 1;
|
|
14170
|
+
continue;
|
|
14171
|
+
}
|
|
14172
|
+
index = lt + 1;
|
|
14173
|
+
}
|
|
14174
|
+
return -1;
|
|
14175
|
+
}
|
|
14046
14176
|
function parseHtmlBlock(token) {
|
|
14047
14177
|
const raw = String(token.content ?? "");
|
|
14048
14178
|
if (/^\s*<!--/.test(raw) || /^\s*<!/.test(raw) || /^\s*<\?/.test(raw)) return {
|
|
@@ -14060,14 +14190,11 @@ function parseHtmlBlock(token) {
|
|
|
14060
14190
|
tag: "",
|
|
14061
14191
|
loading: false
|
|
14062
14192
|
};
|
|
14063
|
-
const
|
|
14193
|
+
const openEnd = findTagCloseIndexOutsideQuotes$1(raw);
|
|
14194
|
+
const openTag = openEnd === -1 ? raw : raw.slice(0, openEnd + 1);
|
|
14195
|
+
const selfClosing = openEnd !== -1 && /\/\s*>$/.test(openTag);
|
|
14064
14196
|
const isVoid = VOID_TAGS.has(tag);
|
|
14065
|
-
|
|
14066
|
-
if (!closeRe) {
|
|
14067
|
-
closeRe = new RegExp(`<\\s*\\/\\s*${tag}\\s*>`, "i");
|
|
14068
|
-
CLOSE_TAG_RE_CACHE.set(tag, closeRe);
|
|
14069
|
-
}
|
|
14070
|
-
const hasClosing = closeRe.test(raw);
|
|
14197
|
+
const hasClosing = (openEnd === -1 ? -1 : findMatchingCloseTagEnd(raw, tag, openEnd + 1)) !== -1;
|
|
14071
14198
|
const loading = !(isVoid || selfClosing || hasClosing);
|
|
14072
14199
|
return {
|
|
14073
14200
|
type: "html_block",
|
|
@@ -14297,6 +14424,43 @@ function stripTrailingPartialClosingTag(inner, tag) {
|
|
|
14297
14424
|
const re = new RegExp(String.raw`[\t ]*<\s*\/\s*${tag}[^>]*$`, "i");
|
|
14298
14425
|
return inner.replace(re, "");
|
|
14299
14426
|
}
|
|
14427
|
+
function escapeRegex(value) {
|
|
14428
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
14429
|
+
}
|
|
14430
|
+
function findMatchingCloseTagRange(rawHtml, tag, startIndex) {
|
|
14431
|
+
if (!rawHtml || !tag) return null;
|
|
14432
|
+
const lowerTag = tag.toLowerCase();
|
|
14433
|
+
const openTagRe = new RegExp(String.raw`^<\s*${escapeRegex(lowerTag)}(?=\s|>|/)`, "i");
|
|
14434
|
+
const closeTagRe = new RegExp(String.raw`^<\s*\/\s*${escapeRegex(lowerTag)}(?=\s|>)`, "i");
|
|
14435
|
+
let depth = 0;
|
|
14436
|
+
let index = Math.max(0, startIndex);
|
|
14437
|
+
while (index < rawHtml.length) {
|
|
14438
|
+
const lt = rawHtml.indexOf("<", index);
|
|
14439
|
+
if (lt === -1) break;
|
|
14440
|
+
const slice = rawHtml.slice(lt);
|
|
14441
|
+
if (closeTagRe.test(slice)) {
|
|
14442
|
+
const endRel = findTagCloseIndexOutsideQuotes(slice);
|
|
14443
|
+
if (endRel === -1) return null;
|
|
14444
|
+
if (depth === 0) return {
|
|
14445
|
+
start: lt,
|
|
14446
|
+
end: lt + endRel + 1
|
|
14447
|
+
};
|
|
14448
|
+
depth--;
|
|
14449
|
+
index = lt + endRel + 1;
|
|
14450
|
+
continue;
|
|
14451
|
+
}
|
|
14452
|
+
if (openTagRe.test(slice)) {
|
|
14453
|
+
const endRel = findTagCloseIndexOutsideQuotes(slice);
|
|
14454
|
+
if (endRel === -1) return null;
|
|
14455
|
+
const raw = slice.slice(0, endRel + 1);
|
|
14456
|
+
if (!/\/\s*>$/.test(raw)) depth++;
|
|
14457
|
+
index = lt + endRel + 1;
|
|
14458
|
+
continue;
|
|
14459
|
+
}
|
|
14460
|
+
index = lt + 1;
|
|
14461
|
+
}
|
|
14462
|
+
return null;
|
|
14463
|
+
}
|
|
14300
14464
|
function findNextCustomHtmlBlockFromSource(source, tag, startIndex) {
|
|
14301
14465
|
if (!source || !tag) return null;
|
|
14302
14466
|
const lowerTag = tag.toLowerCase();
|
|
@@ -14402,16 +14566,17 @@ function parseBasicBlockToken(tokens, index, options) {
|
|
|
14402
14566
|
const mappedLineStart = Array.isArray(token.map) ? lineToIndex(source, Number(token.map?.[0] ?? 0)) : 0;
|
|
14403
14567
|
const fromSource = findNextCustomHtmlBlockFromSource(source, tag, Math.max(clampNonNegative(cursor), clampNonNegative(mappedLineStart)));
|
|
14404
14568
|
if (fromSource) options.__customHtmlBlockCursor = fromSource.end;
|
|
14405
|
-
const rawHtml = String(fromSource?.raw ?? htmlBlockNode.
|
|
14569
|
+
const rawHtml = String(fromSource?.raw ?? htmlBlockNode.raw ?? "");
|
|
14406
14570
|
const openEnd = findTagCloseIndexOutsideQuotes(rawHtml);
|
|
14407
|
-
const
|
|
14408
|
-
const
|
|
14571
|
+
const openTag = openEnd !== -1 ? rawHtml.slice(0, openEnd + 1) : rawHtml;
|
|
14572
|
+
const selfClosing = openEnd !== -1 && /\/\s*>\s*$/.test(openTag);
|
|
14573
|
+
const closeRange = openEnd === -1 ? null : findMatchingCloseTagRange(rawHtml, tag, openEnd + 1);
|
|
14574
|
+
const closeIndex = closeRange?.start ?? -1;
|
|
14409
14575
|
let inner = "";
|
|
14410
14576
|
if (openEnd !== -1) if (closeIndex !== -1 && openEnd < closeIndex) inner = rawHtml.slice(openEnd + 1, closeIndex);
|
|
14411
14577
|
else inner = rawHtml.slice(openEnd + 1);
|
|
14412
14578
|
if (closeIndex === -1) inner = stripTrailingPartialClosingTag(inner, tag);
|
|
14413
14579
|
const attrs = [];
|
|
14414
|
-
const openTag = openEnd !== -1 ? rawHtml.slice(0, openEnd + 1) : rawHtml;
|
|
14415
14580
|
const attrRegex = /\s([\w:-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;
|
|
14416
14581
|
let m;
|
|
14417
14582
|
while ((m = attrRegex.exec(openTag)) !== null) {
|
|
@@ -14420,12 +14585,13 @@ function parseBasicBlockToken(tokens, index, options) {
|
|
|
14420
14585
|
const value = m[2] || m[3] || m[4] || "";
|
|
14421
14586
|
attrs.push([name, value]);
|
|
14422
14587
|
}
|
|
14588
|
+
const loading = !options?.final && !selfClosing && closeRange == null;
|
|
14423
14589
|
return [{
|
|
14424
14590
|
type: tag,
|
|
14425
14591
|
tag,
|
|
14426
14592
|
content: stripWrapperNewlines(inner),
|
|
14427
14593
|
raw: String(fromSource?.raw ?? htmlBlockNode.raw ?? rawHtml),
|
|
14428
|
-
loading
|
|
14594
|
+
loading,
|
|
14429
14595
|
attrs: attrs.length ? attrs : void 0
|
|
14430
14596
|
}, index + 1];
|
|
14431
14597
|
}
|
|
@@ -14820,7 +14986,7 @@ function ensureBlankLineBeforeInlineMultilineCustomHtmlBlocks(markdown, tags) {
|
|
|
14820
14986
|
}
|
|
14821
14987
|
return false;
|
|
14822
14988
|
};
|
|
14823
|
-
const findTagCloseIndexOutsideQuotes$
|
|
14989
|
+
const findTagCloseIndexOutsideQuotes$3 = (input) => {
|
|
14824
14990
|
let inSingle = false;
|
|
14825
14991
|
let inDouble = false;
|
|
14826
14992
|
for (let i = 0; i < input.length; i++) {
|
|
@@ -14869,7 +15035,7 @@ function ensureBlankLineBeforeInlineMultilineCustomHtmlBlocks(markdown, tags) {
|
|
|
14869
15035
|
i++;
|
|
14870
15036
|
continue;
|
|
14871
15037
|
}
|
|
14872
|
-
const closeIdxRel = findTagCloseIndexOutsideQuotes$
|
|
15038
|
+
const closeIdxRel = findTagCloseIndexOutsideQuotes$3(line.slice(i));
|
|
14873
15039
|
if (closeIdxRel === -1) {
|
|
14874
15040
|
hasRenderablePrefix = true;
|
|
14875
15041
|
i++;
|
|
@@ -14973,6 +15139,27 @@ function normalizeCustomHtmlOpeningTagSameLine(markdown, tags) {
|
|
|
14973
15139
|
while (i < s.length && isIndentWs(s[i])) i++;
|
|
14974
15140
|
return s.slice(i);
|
|
14975
15141
|
};
|
|
15142
|
+
const findTagCloseIndexOutsideQuotes$3 = (input) => {
|
|
15143
|
+
let inSingle = false;
|
|
15144
|
+
let inDouble = false;
|
|
15145
|
+
for (let i = 0; i < input.length; i++) {
|
|
15146
|
+
const ch = input[i];
|
|
15147
|
+
if (ch === "\\") {
|
|
15148
|
+
i++;
|
|
15149
|
+
continue;
|
|
15150
|
+
}
|
|
15151
|
+
if (!inDouble && ch === "'") {
|
|
15152
|
+
inSingle = !inSingle;
|
|
15153
|
+
continue;
|
|
15154
|
+
}
|
|
15155
|
+
if (!inSingle && ch === "\"") {
|
|
15156
|
+
inDouble = !inDouble;
|
|
15157
|
+
continue;
|
|
15158
|
+
}
|
|
15159
|
+
if (!inSingle && !inDouble && ch === ">") return i;
|
|
15160
|
+
}
|
|
15161
|
+
return -1;
|
|
15162
|
+
};
|
|
14976
15163
|
const hasClosingTagOnLine = (line, from, tag) => {
|
|
14977
15164
|
const lowerTag = tag.toLowerCase();
|
|
14978
15165
|
let pos = line.indexOf("<", from);
|
|
@@ -15024,8 +15211,9 @@ function normalizeCustomHtmlOpeningTagSameLine(markdown, tags) {
|
|
|
15024
15211
|
if (i === nameStart) return line;
|
|
15025
15212
|
const tagName = line.slice(nameStart, i).toLowerCase();
|
|
15026
15213
|
if (!tagSet.has(tagName)) return line;
|
|
15027
|
-
const
|
|
15028
|
-
if (
|
|
15214
|
+
const gtRel = findTagCloseIndexOutsideQuotes$3(line.slice(i));
|
|
15215
|
+
if (gtRel === -1) return line;
|
|
15216
|
+
const gt = i + gtRel;
|
|
15029
15217
|
if (hasClosingTagOnLine(line, gt + 1, tagName)) return line;
|
|
15030
15218
|
const rest = trimStartIndentWs(line.slice(gt + 1));
|
|
15031
15219
|
if (!rest) return line;
|
|
@@ -15467,6 +15655,22 @@ function parseMarkdownToStructure(markdown, md, options = {}) {
|
|
|
15467
15655
|
else result = postResult;
|
|
15468
15656
|
}
|
|
15469
15657
|
}
|
|
15658
|
+
if (isFinal) {
|
|
15659
|
+
const seen = /* @__PURE__ */ new WeakSet();
|
|
15660
|
+
const finalizeHtmlBlockLoading = (value) => {
|
|
15661
|
+
if (!value || typeof value !== "object") return;
|
|
15662
|
+
if (seen.has(value)) return;
|
|
15663
|
+
seen.add(value);
|
|
15664
|
+
if (Array.isArray(value)) {
|
|
15665
|
+
for (const item of value) finalizeHtmlBlockLoading(item);
|
|
15666
|
+
return;
|
|
15667
|
+
}
|
|
15668
|
+
const node = value;
|
|
15669
|
+
if (node.type === "html_block" && node.loading === true) node.loading = false;
|
|
15670
|
+
for (const child of Object.values(node)) finalizeHtmlBlockLoading(child);
|
|
15671
|
+
};
|
|
15672
|
+
finalizeHtmlBlockLoading(result);
|
|
15673
|
+
}
|
|
15470
15674
|
if (options.debug) console.log("Parsed Markdown Tree Structure:", result);
|
|
15471
15675
|
return result;
|
|
15472
15676
|
}
|