stream-markdown-parser 0.0.57 → 0.0.58-beta.1
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 +101 -21
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
@@ -7773,7 +7773,7 @@ function fixLinkToken(tokens) {
|
|
|
7773
7773
|
tokens.splice(i, 5, ...replacerTokens);
|
|
7774
7774
|
} else tokens.splice(i, 4, ...replacerTokens);
|
|
7775
7775
|
if (i === 0) i = replacerTokens.length - 1;
|
|
7776
|
-
else i -= replacerTokens.length
|
|
7776
|
+
else i -= replacerTokens.length + 1;
|
|
7777
7777
|
continue;
|
|
7778
7778
|
}
|
|
7779
7779
|
let href = tokens[i + 2]?.content || "";
|
|
@@ -7788,7 +7788,7 @@ function fixLinkToken(tokens) {
|
|
|
7788
7788
|
tokens.splice(i, 5, ...replacerTokens);
|
|
7789
7789
|
} else tokens.splice(i, 4, ...replacerTokens);
|
|
7790
7790
|
}
|
|
7791
|
-
i -= replacerTokens.length
|
|
7791
|
+
i -= replacerTokens.length + 1;
|
|
7792
7792
|
continue;
|
|
7793
7793
|
}
|
|
7794
7794
|
} else if (curToken.type === "link_open" && curToken.markup === "linkify" && tokens[i - 1]?.type === "text" && tokens[i - 1].content?.endsWith("(")) {
|
|
@@ -7886,7 +7886,7 @@ function fixLinkToken(tokens) {
|
|
|
7886
7886
|
pushEmClose(replacerTokens, type);
|
|
7887
7887
|
}
|
|
7888
7888
|
tokens.splice(i - deleteCount, count, ...replacerTokens);
|
|
7889
|
-
i -= replacerTokens.length
|
|
7889
|
+
i -= replacerTokens.length + 1;
|
|
7890
7890
|
continue;
|
|
7891
7891
|
} else if (curToken.content?.startsWith("](") && tokens[i - 1].markup?.includes("*") && tokens[i - 4]?.type === "text" && tokens[i - 4].content?.endsWith("[")) {
|
|
7892
7892
|
const type = tokens[i - 1].markup.length;
|
|
@@ -7913,7 +7913,7 @@ function fixLinkToken(tokens) {
|
|
|
7913
7913
|
tokens.splice(i - 4, 8, ...replacerTokens);
|
|
7914
7914
|
} else if (tokens[i + 1]?.type === "link_open") tokens.splice(i - 4, 10, ...replacerTokens);
|
|
7915
7915
|
else tokens.splice(i - 4, 7, ...replacerTokens);
|
|
7916
|
-
i -= replacerTokens.length
|
|
7916
|
+
i -= replacerTokens.length + 1;
|
|
7917
7917
|
continue;
|
|
7918
7918
|
} else if (curToken.content?.startsWith("](") && tokens[i - 1].type === "strong_close" && tokens[i - 4]?.type === "text" && tokens[i - 4]?.content?.includes("**[")) {
|
|
7919
7919
|
const replacerTokens = [];
|
|
@@ -7939,7 +7939,7 @@ function fixLinkToken(tokens) {
|
|
|
7939
7939
|
tokens.splice(i - 4, 8, ...replacerTokens);
|
|
7940
7940
|
} else if (tokens[i + 1]?.type === "link_open") tokens.splice(i - 4, 10, ...replacerTokens);
|
|
7941
7941
|
else tokens.splice(i - 4, 7, ...replacerTokens);
|
|
7942
|
-
i -= replacerTokens.length
|
|
7942
|
+
i -= replacerTokens.length + 1;
|
|
7943
7943
|
continue;
|
|
7944
7944
|
} else if (curToken.type === "strong_close" && tokens[i + 1]?.type === "text" && tokens[i + 1].content?.includes("](") && tokens[i - 1].type === "text" && /\[.*$/.test(tokens[i - 1].content || "")) {
|
|
7945
7945
|
const replacerTokens = [];
|
|
@@ -10386,19 +10386,7 @@ function parseInlineTokens(tokens, raw, pPreToken, options) {
|
|
|
10386
10386
|
}
|
|
10387
10387
|
return false;
|
|
10388
10388
|
}
|
|
10389
|
-
return
|
|
10390
|
-
}
|
|
10391
|
-
function normalizeSingleLinkResult(raw, nodes) {
|
|
10392
|
-
if (!raw) return nodes;
|
|
10393
|
-
const trimmed = raw.trim();
|
|
10394
|
-
const m = /^\[([\s\S]+?)\]\(([^)]+)\)$/.exec(trimmed);
|
|
10395
|
-
if (!m) return nodes;
|
|
10396
|
-
const label = m[1];
|
|
10397
|
-
const href = m[2];
|
|
10398
|
-
const candidates = nodes.filter((n) => n.type === "link");
|
|
10399
|
-
const preferred = candidates.find((n) => String(n.href || "") === href && String(n.text || "") === label) || candidates.find((n) => String(n.href || "") === href);
|
|
10400
|
-
if (preferred) return [preferred];
|
|
10401
|
-
return nodes;
|
|
10389
|
+
return result;
|
|
10402
10390
|
}
|
|
10403
10391
|
|
|
10404
10392
|
//#endregion
|
|
@@ -11339,6 +11327,95 @@ function stripDanglingHtmlLikeTail(markdown) {
|
|
|
11339
11327
|
if (!isLikelyHtmlTagPrefix(tail)) return s;
|
|
11340
11328
|
return s.slice(0, lastLt);
|
|
11341
11329
|
}
|
|
11330
|
+
function normalizeCustomHtmlOpeningTagSameLine(markdown, tags) {
|
|
11331
|
+
if (!markdown || !tags.length) return markdown;
|
|
11332
|
+
const tagSet = new Set(tags.map((t) => String(t ?? "").toLowerCase()));
|
|
11333
|
+
if (!tagSet.size) return markdown;
|
|
11334
|
+
const isIndentWs = (ch) => ch === " " || ch === " ";
|
|
11335
|
+
const isNameChar = (ch) => {
|
|
11336
|
+
const c = ch.charCodeAt(0);
|
|
11337
|
+
return c >= 65 && c <= 90 || c >= 97 && c <= 122 || c >= 48 && c <= 57 || ch === "_" || ch === "-";
|
|
11338
|
+
};
|
|
11339
|
+
const trimStartIndentWs = (s) => {
|
|
11340
|
+
let i = 0;
|
|
11341
|
+
while (i < s.length && isIndentWs(s[i])) i++;
|
|
11342
|
+
return s.slice(i);
|
|
11343
|
+
};
|
|
11344
|
+
const hasClosingTagOnLine = (line, from, tag) => {
|
|
11345
|
+
const lowerTag = tag.toLowerCase();
|
|
11346
|
+
let pos = line.indexOf("<", from);
|
|
11347
|
+
while (pos !== -1) {
|
|
11348
|
+
let i = pos + 1;
|
|
11349
|
+
while (i < line.length && isIndentWs(line[i])) i++;
|
|
11350
|
+
if (i >= line.length || line[i] !== "/") {
|
|
11351
|
+
pos = line.indexOf("<", pos + 1);
|
|
11352
|
+
continue;
|
|
11353
|
+
}
|
|
11354
|
+
i++;
|
|
11355
|
+
while (i < line.length && isIndentWs(line[i])) i++;
|
|
11356
|
+
if (i + lowerTag.length > line.length) {
|
|
11357
|
+
pos = line.indexOf("<", pos + 1);
|
|
11358
|
+
continue;
|
|
11359
|
+
}
|
|
11360
|
+
let matched = true;
|
|
11361
|
+
for (let j = 0; j < lowerTag.length; j++) {
|
|
11362
|
+
const ch = line[i + j];
|
|
11363
|
+
if ((ch >= "A" && ch <= "Z" ? String.fromCharCode(ch.charCodeAt(0) + 32) : ch) !== lowerTag[j]) {
|
|
11364
|
+
matched = false;
|
|
11365
|
+
break;
|
|
11366
|
+
}
|
|
11367
|
+
}
|
|
11368
|
+
if (!matched) {
|
|
11369
|
+
pos = line.indexOf("<", pos + 1);
|
|
11370
|
+
continue;
|
|
11371
|
+
}
|
|
11372
|
+
let k = i + lowerTag.length;
|
|
11373
|
+
if (k < line.length && isNameChar(line[k])) {
|
|
11374
|
+
pos = line.indexOf("<", pos + 1);
|
|
11375
|
+
continue;
|
|
11376
|
+
}
|
|
11377
|
+
while (k < line.length && isIndentWs(line[k])) k++;
|
|
11378
|
+
if (k < line.length && line[k] === ">") return true;
|
|
11379
|
+
pos = line.indexOf("<", pos + 1);
|
|
11380
|
+
}
|
|
11381
|
+
return false;
|
|
11382
|
+
};
|
|
11383
|
+
const normalizeLine = (line) => {
|
|
11384
|
+
let i = 0;
|
|
11385
|
+
while (i < line.length && isIndentWs(line[i])) i++;
|
|
11386
|
+
if (i >= line.length || line[i] !== "<") return line;
|
|
11387
|
+
i++;
|
|
11388
|
+
while (i < line.length && isIndentWs(line[i])) i++;
|
|
11389
|
+
if (i >= line.length || line[i] === "/") return line;
|
|
11390
|
+
const nameStart = i;
|
|
11391
|
+
while (i < line.length && isNameChar(line[i])) i++;
|
|
11392
|
+
if (i === nameStart) return line;
|
|
11393
|
+
const tagName = line.slice(nameStart, i).toLowerCase();
|
|
11394
|
+
if (!tagSet.has(tagName)) return line;
|
|
11395
|
+
const gt = line.indexOf(">", i);
|
|
11396
|
+
if (gt === -1) return line;
|
|
11397
|
+
if (hasClosingTagOnLine(line, gt + 1, tagName)) return line;
|
|
11398
|
+
const rest = trimStartIndentWs(line.slice(gt + 1));
|
|
11399
|
+
if (!rest) return line;
|
|
11400
|
+
return `${line.slice(0, gt + 1)}\n${rest}`;
|
|
11401
|
+
};
|
|
11402
|
+
let out = "";
|
|
11403
|
+
let idx = 0;
|
|
11404
|
+
while (idx < markdown.length) {
|
|
11405
|
+
const nl = markdown.indexOf("\n", idx);
|
|
11406
|
+
if (nl === -1) {
|
|
11407
|
+
out += normalizeLine(markdown.slice(idx));
|
|
11408
|
+
break;
|
|
11409
|
+
}
|
|
11410
|
+
const isCrlf = nl > idx && markdown[nl - 1] === "\r";
|
|
11411
|
+
const lineEnd = isCrlf ? nl - 1 : nl;
|
|
11412
|
+
const line = markdown.slice(idx, lineEnd);
|
|
11413
|
+
out += normalizeLine(line);
|
|
11414
|
+
out += isCrlf ? "\r\n" : "\n";
|
|
11415
|
+
idx = nl + 1;
|
|
11416
|
+
}
|
|
11417
|
+
return out;
|
|
11418
|
+
}
|
|
11342
11419
|
function parseMarkdownToStructure(markdown, md, options = {}) {
|
|
11343
11420
|
const isFinal = !!options.final;
|
|
11344
11421
|
let safeMarkdown = (markdown ?? "").toString().replace(/([^\\])\r(ight|ho)/g, "$1\\r$2").replace(/([^\\])\n(abla|eq|ot|exists)/g, "$1\\n$2");
|
|
@@ -11360,9 +11437,12 @@ function parseMarkdownToStructure(markdown, md, options = {}) {
|
|
|
11360
11437
|
const tags = options.customHtmlTags.map((t) => String(t ?? "").trim()).filter(Boolean).map((t) => {
|
|
11361
11438
|
return (t.match(/^[<\s/]*([A-Z][\w-]*)/i)?.[1] ?? "").toLowerCase();
|
|
11362
11439
|
}).filter(Boolean);
|
|
11363
|
-
if (tags.length)
|
|
11364
|
-
|
|
11365
|
-
|
|
11440
|
+
if (tags.length) {
|
|
11441
|
+
safeMarkdown = normalizeCustomHtmlOpeningTagSameLine(safeMarkdown, tags);
|
|
11442
|
+
if (!safeMarkdown.includes("</")) {} else for (const tag of tags) {
|
|
11443
|
+
const re = new RegExp(String.raw`(^[\t ]*<\s*\/\s*${tag}\s*>[\t ]*)(\r?\n)(?![\t ]*\r?\n|$)`, "gim");
|
|
11444
|
+
safeMarkdown = safeMarkdown.replace(re, "$1$2$2");
|
|
11445
|
+
}
|
|
11366
11446
|
}
|
|
11367
11447
|
}
|
|
11368
11448
|
if (!isFinal) safeMarkdown = stripDanglingHtmlLikeTail(safeMarkdown);
|