stream-markdown-parser 0.0.48 → 0.0.49
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 +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -19
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -313,6 +313,12 @@ interface ParseOptions {
|
|
|
313
313
|
preTransformTokens?: TransformTokensHook;
|
|
314
314
|
postTransformTokens?: TransformTokensHook;
|
|
315
315
|
requireClosingStrong?: boolean;
|
|
316
|
+
/**
|
|
317
|
+
* When true, indicates the input buffer is complete (end-of-stream).
|
|
318
|
+
* This disables "mid-state" streaming behavior (e.g. unclosed math/link/code
|
|
319
|
+
* tokens staying in a loading state) and keeps trailing markers as literal text.
|
|
320
|
+
*/
|
|
321
|
+
final?: boolean;
|
|
316
322
|
/**
|
|
317
323
|
* Custom HTML-like tag names that should be emitted as custom nodes
|
|
318
324
|
* instead of `html_inline` when encountered (e.g. ['thinking']).
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/factory.ts","../src/types.ts","../src/parser/inline-parsers/index.ts","../src/parser/index.ts","../src/config.ts","../src/findMatchingClose.ts","../src/parser/inline-parsers/fence-parser.ts","../src/plugins/containers.ts","../src/plugins/isMathLike.ts","../src/plugins/math.ts","../src/index.ts"],"sourcesContent":[],"mappings":";;;UAYiB,cAAA,SAAuB;sBAClB;;EADL,gBAAA,CAAe,EAAA,OAAA;;;;ECVf,CAAA;EAaL;AAEZ;AAMA;AAOA;EAMiB,cAAW,CAAA,EAAA,SAEhB,MAAA,EAAA;AAIZ;;;UAxCiB,QAAA;;EDUA,GAAA,EAAA,MAAA;;;;ACVjB;AAaA;AAEA;AAMA;AAOA;AAMA;AAMiB,KA3BL,WAAA,GAAc,QAgCjB,GAhC4B,MA2BH,CAAA,MAAQ,EAAA,OAAA,CAAA;AAQzB,UAjCA,QAAA,SAAiB,QAmCtB,CAF0B;EAKrB,IAAA,EAAA,MAAA;EAiBA,OAAA,EAAA,MAAA;EAOA,MAAA,CAAA,EAAA,OAAA;AAYjB;AAYiB,UAhFA,WAAA,SAAoB,QAgFA,CAAA;EAK3B,IAAA,EAAA,SAAA;EACG,KAAA,EAAA,MAAA;EANgC,IAAA,EAAA,MAAA;EAAQ,QAAA,EA5EzC,UA4EyC,EAAA;AAUrD;AAKiB,UAxFA,aAAA,SAAsB,QAwFL,CAAQ;EAQzB,IAAA,EAAA,WAAU;EAOV,QAAA,EArGL,UAqGuB,EAAA;EAIlB,aAAA,CAAA,EAAA,OAAgB;AASjC;AASiB,UAvHA,UAAA,SAAmB,QAyHxB,CAF4B;EAKvB,IAAA,EAAA,QAAU;EAEjB,QAAA,EA5HE,UA4HF,EAAA;EACF,OAAA,CAAA,EAAA,MAAA;;AAHmC,UAtH1B,QAAA,SAAiB,QAsHS,CAAA;EAM1B,IAAA,EAAA,MAAA;EAKA,OAAA,EAAA,OAAc;EAOd,KAAA,CAAA,EAAA,MAAA;EAKA,KAAA,EAxIR,YAwIQ,EAAmB;;AAGtB,UAxIG,YAAA,SAAqB,QAwIxB,CAAA;EAH8B,IAAA,EAAA,WAAA;EAAQ,QAAA,EAnIxC,UAmIwC,EAAA;AAMpD;AAMiB,UA5IA,aAAA,SAAsB,QA4IQ,CAAA;EAK9B,IAAA,EAAA,YAAA;EAKA,QAAA,EAAA,MAAA;EAOA,IAAA,EAAA,MAAA;EAGP,SAAA,CAAA,EAAA,MAAA;EACE,OAAA,CAAA,EAAA,MAAA;EAJ8B,OAAA,CAAA,EAAA,OAAA;EAAQ,IAAA,CAAA,EAAA,OAAA;EAOjC,YAAA,CAAW,EAAA,MAAA;EAKX,WAAA,CAAA,EAAA,MAAa;EAKb,GAAA,EAAA,MAAA;AAKjB;AAKiB,UAvKA,aAAA,SAAsB,QAuKH,CAAA;EAKnB,IAAA,EAAA,YAAc;EAKd,KAAA,CAAA,EAAA,CAAA,MAAA,EAAA,MAAgB,CAAA,EAAA,GAAA,IAErB;EAGK,GAAA,EAAA,MAAA;EAKA,OAAA,EAAA,MAAA;AAKjB;AAMiB,UA/LA,cAAA,SAAuB,QA+LO,CAAA;EAI9B,IAAA,EAAA,aAAe;EAKf,GAAA,CAAA,EAAA,MAAA;EAKA,OAAA,EAAA,MAAA;EAMA,QAAA,EA/ML,UA+MsB,EAAA;EAkBtB;AAEZ;;;EAGM,UAAA,CAAA,EAAA,OAAA;;AAEA,KAhOM,oBAAA,GAgON,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,GA9NA,MA8NA,CAAA,MAAA,EAAA,MAAA,GAAA,OAAA,CAAA,GA7NA,KA6NA,CAAA;EACA,IAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,OAAA;CACA,CAAA,GAAA,IAAA;;;;;;;AAOA,UA9NW,mBAAA,SAA4B,QA8NvC,CAAA;EACA;EACA,IAAA,EAAA,MAAA;EACA,GAAA,EAAA,MAAA;EACA,OAAA,EAAA,MAAA;EACA,KAAA,CAAA,EA9NI,oBA8NJ;EACA,QAAA,CAAA,EA9NO,UA8NP,EAAA;EACA,UAAA,CAAA,EAAA,OAAA;;AAEA,UA7NW,cAAA,SAAuB,QA6NlC,CAAA;EACA,IAAA,EAAA,aAAA;EACA,IAAA,EAAA,MAAA;;AAEA,UA5NW,QAAA,SAAiB,QA4N5B,CAAA;EACA,IAAA,EAAA,MAAA;EACA,IAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,IAAA;EACA,IAAA,EAAA,MAAA;EACA,QAAA,EA5NM,UA4NN,EAAA;;AAEA,UA3NW,SAAA,SAAkB,QA2N7B,CAAA;EACA,IAAA,EAAA,OAAA;EACA,GAAA,EAAA,MAAA;EACA,GAAA,EAAA,MAAA;EAAW,KAAA,EAAA,MAAA,GAAA,IAAA;AACjB;AAmCY,UA3PK,iBAAA,SAA0B,QA2PA,CAAA;EAE1B,IAAA,EAAA,gBAAY;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/factory.ts","../src/types.ts","../src/parser/inline-parsers/index.ts","../src/parser/index.ts","../src/config.ts","../src/findMatchingClose.ts","../src/parser/inline-parsers/fence-parser.ts","../src/plugins/containers.ts","../src/plugins/isMathLike.ts","../src/plugins/math.ts","../src/index.ts"],"sourcesContent":[],"mappings":";;;UAYiB,cAAA,SAAuB;sBAClB;;EADL,gBAAA,CAAe,EAAA,OAAA;;;;ECVf,CAAA;EAaL;AAEZ;AAMA;AAOA;EAMiB,cAAW,CAAA,EAAA,SAEhB,MAAA,EAAA;AAIZ;;;UAxCiB,QAAA;;EDUA,GAAA,EAAA,MAAA;;;;ACVjB;AAaA;AAEA;AAMA;AAOA;AAMA;AAMiB,KA3BL,WAAA,GAAc,QAgCjB,GAhC4B,MA2BH,CAAA,MAAQ,EAAA,OAAA,CAAA;AAQzB,UAjCA,QAAA,SAAiB,QAmCtB,CAF0B;EAKrB,IAAA,EAAA,MAAA;EAiBA,OAAA,EAAA,MAAA;EAOA,MAAA,CAAA,EAAA,OAAA;AAYjB;AAYiB,UAhFA,WAAA,SAAoB,QAgFA,CAAA;EAK3B,IAAA,EAAA,SAAA;EACG,KAAA,EAAA,MAAA;EANgC,IAAA,EAAA,MAAA;EAAQ,QAAA,EA5EzC,UA4EyC,EAAA;AAUrD;AAKiB,UAxFA,aAAA,SAAsB,QAwFL,CAAQ;EAQzB,IAAA,EAAA,WAAU;EAOV,QAAA,EArGL,UAqGuB,EAAA;EAIlB,aAAA,CAAA,EAAA,OAAgB;AASjC;AASiB,UAvHA,UAAA,SAAmB,QAyHxB,CAF4B;EAKvB,IAAA,EAAA,QAAU;EAEjB,QAAA,EA5HE,UA4HF,EAAA;EACF,OAAA,CAAA,EAAA,MAAA;;AAHmC,UAtH1B,QAAA,SAAiB,QAsHS,CAAA;EAM1B,IAAA,EAAA,MAAA;EAKA,OAAA,EAAA,OAAc;EAOd,KAAA,CAAA,EAAA,MAAA;EAKA,KAAA,EAxIR,YAwIQ,EAAmB;;AAGtB,UAxIG,YAAA,SAAqB,QAwIxB,CAAA;EAH8B,IAAA,EAAA,WAAA;EAAQ,QAAA,EAnIxC,UAmIwC,EAAA;AAMpD;AAMiB,UA5IA,aAAA,SAAsB,QA4IQ,CAAA;EAK9B,IAAA,EAAA,YAAA;EAKA,QAAA,EAAA,MAAA;EAOA,IAAA,EAAA,MAAA;EAGP,SAAA,CAAA,EAAA,MAAA;EACE,OAAA,CAAA,EAAA,MAAA;EAJ8B,OAAA,CAAA,EAAA,OAAA;EAAQ,IAAA,CAAA,EAAA,OAAA;EAOjC,YAAA,CAAW,EAAA,MAAA;EAKX,WAAA,CAAA,EAAA,MAAa;EAKb,GAAA,EAAA,MAAA;AAKjB;AAKiB,UAvKA,aAAA,SAAsB,QAuKH,CAAA;EAKnB,IAAA,EAAA,YAAc;EAKd,KAAA,CAAA,EAAA,CAAA,MAAA,EAAA,MAAgB,CAAA,EAAA,GAAA,IAErB;EAGK,GAAA,EAAA,MAAA;EAKA,OAAA,EAAA,MAAA;AAKjB;AAMiB,UA/LA,cAAA,SAAuB,QA+LO,CAAA;EAI9B,IAAA,EAAA,aAAe;EAKf,GAAA,CAAA,EAAA,MAAA;EAKA,OAAA,EAAA,MAAA;EAMA,QAAA,EA/ML,UA+MsB,EAAA;EAkBtB;AAEZ;;;EAGM,UAAA,CAAA,EAAA,OAAA;;AAEA,KAhOM,oBAAA,GAgON,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,GA9NA,MA8NA,CAAA,MAAA,EAAA,MAAA,GAAA,OAAA,CAAA,GA7NA,KA6NA,CAAA;EACA,IAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,OAAA;CACA,CAAA,GAAA,IAAA;;;;;;;AAOA,UA9NW,mBAAA,SAA4B,QA8NvC,CAAA;EACA;EACA,IAAA,EAAA,MAAA;EACA,GAAA,EAAA,MAAA;EACA,OAAA,EAAA,MAAA;EACA,KAAA,CAAA,EA9NI,oBA8NJ;EACA,QAAA,CAAA,EA9NO,UA8NP,EAAA;EACA,UAAA,CAAA,EAAA,OAAA;;AAEA,UA7NW,cAAA,SAAuB,QA6NlC,CAAA;EACA,IAAA,EAAA,aAAA;EACA,IAAA,EAAA,MAAA;;AAEA,UA5NW,QAAA,SAAiB,QA4N5B,CAAA;EACA,IAAA,EAAA,MAAA;EACA,IAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,IAAA;EACA,IAAA,EAAA,MAAA;EACA,QAAA,EA5NM,UA4NN,EAAA;;AAEA,UA3NW,SAAA,SAAkB,QA2N7B,CAAA;EACA,IAAA,EAAA,OAAA;EACA,GAAA,EAAA,MAAA;EACA,GAAA,EAAA,MAAA;EAAW,KAAA,EAAA,MAAA,GAAA,IAAA;AACjB;AAmCY,UA3PK,iBAAA,SAA0B,QA2PA,CAAA;EAE1B,IAAA,EAAA,gBAAY;AAsB7B;UA/QiB,gBAAA;;;IChGD,QAAA,EAAA,MAAiB;IACvB,IAAA,EAAA,MAAA;IAEI,OAAA,CAAA,EAAA,OAAA;EAEX,CAAA;;KDoGS,cAAA;;;AEhCZ,CAAA,GAAgB;EAEV,OAAA,CAAA,EAAA,SAAA;EACK,KAAA,EFoCA,QEpCA,EAAA;CACR;AAAU,UFqCI,cAAA,SAAuB,QErC3B,CAAA;EAsIG,IAAA,EAAA,YAAa;EAAS,QAAA,EF/F1B,UE+F0B,EAAA;;AAA0C,UF5F/D,SAAA,SAAkB,QE4F6C,CAAA;EAAU,IAAA,EAAA,OAAA;UF1FhF;QACF;;AG1JS,UH6JA,YAAA,SAAqB,QG7JV,CAAA;EAqBZ,IAAA,EAAA,WAAA;SH0IP;;UAGQ,aAAA,SAAsB;EI3KvB,IAAA,EAAA,YAAA;;YJ8KJ;;AK1IZ;UL8IiB,kBAAA,SAA2B;;SAEnC;AMjLT;UNoLiB,kBAAA,SAA2B;;QAEpC;EOzLK,UAAA,EP0LC,UOxKb,EAAA;AAED;AA6BgB,UP4IC,YAAA,SAAqB,QO5IZ,CAAA;;;YP+Id;AQ/KZ;AAyKgB,URSC,qBAAA,SAA8B,QQTiB,CAAA;EA2EhD,IAAA,EAAA,oBAAc;;;UR7Db,kBAAA,SAA2B;ESnL5B,IAAA,EAAA,iBAAA;EAIA,EAAA,EAAA,MAAA;AAwBhB;AACW,UT2JM,cAAA,SAAuB,QS3J7B,CAAA;EACU,IAAA,EAAA,YAAA;EAAX,IAAA,EAAA,MAAA;EAK2B,KAAA,EAAA,MAAA;EAPO,QAAA,ETgKhC,UShKgC,EAAA;;AAU5B,UTyJC,gBAAA,SAAyB,QSzJ0D,CAAA;;;UT4J1F;YACE;;UAGK,UAAA,SAAmB;;YAExB;;UAGK,YAAA,SAAqB;;YAE1B;;UAGK,iBAAA,SAA0B;;YAE/B;;UAGK,aAAA,SAAsB;;YAE3B;;UAGK,UAAA,SAAmB;;YAExB;;UAGK,aAAA,SAAsB;;YAE3B;;UAGK,eAAA,SAAwB;;YAE7B;;UAGK,YAAA,SAAqB;;;;UAKrB,iBAAA,SAA0B;;;;UAK1B,SAAA,SAAkB;;;;;UAMlB,aAAA,SAAsB;;;UAItB,cAAA,SAAuB;;;;UAKvB,aAAA,SAAsB;;;;UAKtB,aAAA,SAAsB;;;;UAMtB,iBAAA;;;;;;;;;;;;;aAaJ;;;;KAKD,aAAA,IAAiB;;;KAA+C;KAEhE,UAAA,GACN,WACA,cACA,gBACA,WACA,eACA,gBACA,iBACA,WACA,YACA,oBACA,iBACA,YACA,eACA,gBACA,aACA,eACA,oBACA,gBACA,aACA,gBACA,kBACA,eACA,oBACA,YACA,qBACA,qBACA,eACA,wBACA,iBACA,mBACA,gBACA,iBACA,gBACA,gBACA,gBACA,iBACA,sBACA;UACW,gBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAmCL,mBAAA,YAA+B,oBAAoB;UAE9C,YAAA;uBACM;wBACC;;;;;;;;;;;;;;;;;KAoBZ,sBAAA,WAAiC,iBAAiB;;;iBC/W9C,iBAAA,SACN,2CAEI;EFhCG,oBAAe,CAAA,EAAA,OACV;;IEiCnB;;;AFlCc,iBGsGD,wBAAA,CHtG8B,QAAA,EAAA,MAAA,EAAA,EAAA,EGwGxC,YHxGwC,EAAA,OAAA,CAAA,EGyGnC,YHzGmC,CAAA,EG0G3C,UH1G2C,EAAA;iBGgP9B,aAAA,SAAsB,2BAA2B,eAAe;;;;;;AHhPhF;;;;ACVA;AAaA;AAEiB,UGRA,WAAA,CHQiB;EAMjB;EAOA,QAAA,CAAA,EAAA,SAAc,MAAA,EAEnB;EAIK;EAMA,iBAAS,CAAA,EAAA,OAKjB;EAGQ;AAKjB;AAiBA;AAOA;AAYA;AAYA;;;;;AAUA;EAKiB,gBAAS,CAAA,EAAA,OAKd;AAGZ;AAOiB,iBGvGD,qBAAA,CHuGmC,IAAA,EGvGP,WHuGO,GAAA,SAAA,CAAA,EAAA,IAAA;;;iBIrInC,iBAAA;;;iBCoCA,eAAA,QAAuB,gBAAgB;;;iBCjCvC,eAAA,KAAoB;;;cCHvB;cAoBA;iBA6BG,UAAA;;;cChCH;iBAyKG,6BAAA,mBAAgD;iBA2EhD,SAAA,KAAc,yBAAuB;;;ATzPpC,iBUSD,sBAAA,CVT8B,MAAA,EAAA,OAAA,CAAA,EAAA,IAAA;iBUa9B,8BAAA,CAAA;AT8BC,USNA,kBAAA,SAA2B,cTMG,CAAA;EAiB9B,MAAA,CAAA,EStBN,KTsBM,CAAA,OAAc,CAAA;EAOd,KAAA,CAAA,ES5BP,KT4BO,CAAA,CAAA,EAAe,ES5BX,UTgCT,EAAA,GAAA,IAAA,CAAA;EAQA;AAYZ;;;EAA6C,IAAA,CAAA,EAAA,CAAA,CAAA,GAAA,EAAA,MAAA,EAAA,GAAA,MAAA,CAAA,GS/CR,MT+CQ,CAAA,MAAA,EAAA,MAAA,CAAA;;AAU5B,iBStDD,WAAA,CTsDwB,KAAQ,CAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EStD6B,kBTsD7B,CAAA,EStDoD,UTsDpD"}
|
package/dist/index.js
CHANGED
|
@@ -8498,6 +8498,7 @@ function applyMath(md, mathOpts) {
|
|
|
8498
8498
|
const mathInline = (state, silent) => {
|
|
8499
8499
|
const s = state;
|
|
8500
8500
|
const strict = !!mathOpts?.strictDelimiters;
|
|
8501
|
+
const allowLoading = !s?.env?.__markstreamFinal;
|
|
8501
8502
|
if (/^\*[^*]+/.test(s.src)) return false;
|
|
8502
8503
|
const delimiters = [["$", "$"], ["\\(", "\\)"]];
|
|
8503
8504
|
let searchPos = 0;
|
|
@@ -8543,7 +8544,7 @@ function applyMath(md, mathOpts) {
|
|
|
8543
8544
|
continue;
|
|
8544
8545
|
}
|
|
8545
8546
|
if (endIdx === -1) {
|
|
8546
|
-
if (!strict && isMathLike(content$1) && !content$1.includes("`")) {
|
|
8547
|
+
if (allowLoading && !strict && isMathLike(content$1) && !content$1.includes("`")) {
|
|
8547
8548
|
searchPos = index + open.length;
|
|
8548
8549
|
foundAny = true;
|
|
8549
8550
|
if (!silent) {
|
|
@@ -8584,7 +8585,8 @@ function applyMath(md, mathOpts) {
|
|
|
8584
8585
|
}
|
|
8585
8586
|
const content = src.slice(index + open.length, endIdx);
|
|
8586
8587
|
const hasBacktick = content.includes("`");
|
|
8587
|
-
|
|
8588
|
+
const isEmpty = !content || !content.trim();
|
|
8589
|
+
if (strict ? hasBacktick || isEmpty : hasBacktick || isEmpty || !(open === "$") && !isMathLike(content)) {
|
|
8588
8590
|
searchPos = endIdx + close.length;
|
|
8589
8591
|
const text$1 = src.slice(s.pos, searchPos);
|
|
8590
8592
|
if (!s.pending) pushText(text$1);
|
|
@@ -8653,6 +8655,7 @@ function applyMath(md, mathOpts) {
|
|
|
8653
8655
|
};
|
|
8654
8656
|
const mathBlock = (state, startLine, endLine, silent) => {
|
|
8655
8657
|
const s = state;
|
|
8658
|
+
const allowLoading = !s?.env?.__markstreamFinal;
|
|
8656
8659
|
const strict = mathOpts?.strictDelimiters;
|
|
8657
8660
|
const delimiters = strict ? [["\\[", "\\]"], ["$$", "$$"]] : [
|
|
8658
8661
|
["\\[", "\\]"],
|
|
@@ -8760,7 +8763,7 @@ function applyMath(md, mathOpts) {
|
|
|
8760
8763
|
content += (content ? "\n" : "") + currentLine;
|
|
8761
8764
|
}
|
|
8762
8765
|
}
|
|
8763
|
-
if (strict && !found) return false;
|
|
8766
|
+
if ((!allowLoading || strict) && !found) return false;
|
|
8764
8767
|
if (!(openDelim === "[" ? isPlainBracketMathLike(content) : isMathLike(content))) return false;
|
|
8765
8768
|
const token = s.push("math_block", "math", 0);
|
|
8766
8769
|
token.content = normalizeStandaloneBackslashT(content);
|
|
@@ -11122,19 +11125,22 @@ function stripDanglingHtmlLikeTail(markdown) {
|
|
|
11122
11125
|
return s.slice(0, lastLt);
|
|
11123
11126
|
}
|
|
11124
11127
|
function parseMarkdownToStructure(markdown, md, options = {}) {
|
|
11128
|
+
const isFinal = !!options.final;
|
|
11125
11129
|
let safeMarkdown = (markdown ?? "").toString().replace(/([^\\])\r(ight|ho)/g, "$1\\r$2").replace(/([^\\])\n(abla|eq|ot|exists)/g, "$1\\n$2");
|
|
11126
|
-
if (
|
|
11127
|
-
|
|
11128
|
-
|
|
11129
|
-
|
|
11130
|
-
|
|
11131
|
-
|
|
11132
|
-
|
|
11133
|
-
|
|
11134
|
-
|
|
11135
|
-
|
|
11136
|
-
|
|
11137
|
-
|
|
11130
|
+
if (!isFinal) {
|
|
11131
|
+
if (safeMarkdown.endsWith("- *")) safeMarkdown = safeMarkdown.replace(/- \*$/, "- \\*");
|
|
11132
|
+
if (/(?:^|\n)\s*-\s*$/.test(safeMarkdown)) safeMarkdown = safeMarkdown.replace(/(?:^|\n)\s*-\s*$/, (m) => {
|
|
11133
|
+
return m.startsWith("\n") ? "\n" : "";
|
|
11134
|
+
});
|
|
11135
|
+
else if (/(?:^|\n)\s*--\s*$/.test(safeMarkdown)) safeMarkdown = safeMarkdown.replace(/(?:^|\n)\s*--\s*$/, (m) => {
|
|
11136
|
+
return m.startsWith("\n") ? "\n" : "";
|
|
11137
|
+
});
|
|
11138
|
+
else if (/(?:^|\n)\s*>\s*$/.test(safeMarkdown)) safeMarkdown = safeMarkdown.replace(/(?:^|\n)\s*>\s*$/, (m) => {
|
|
11139
|
+
return m.startsWith("\n") ? "\n" : "";
|
|
11140
|
+
});
|
|
11141
|
+
else if (/\n\s*[*+]\s*$/.test(safeMarkdown)) safeMarkdown = safeMarkdown.replace(/\n\s*[*+]\s*$/, "\n");
|
|
11142
|
+
else if (/\n[[(]\n*$/.test(safeMarkdown)) safeMarkdown = safeMarkdown.replace(/(\n\[|\n\()+\n*$/g, "\n");
|
|
11143
|
+
}
|
|
11138
11144
|
if (options.customHtmlTags?.length) {
|
|
11139
11145
|
const tags = options.customHtmlTags.map((t) => String(t ?? "").trim()).filter(Boolean).map((t) => {
|
|
11140
11146
|
return (t.match(/^[<\s/]*([A-Z][\w-]*)/i)?.[1] ?? "").toLowerCase();
|
|
@@ -11144,8 +11150,8 @@ function parseMarkdownToStructure(markdown, md, options = {}) {
|
|
|
11144
11150
|
safeMarkdown = safeMarkdown.replace(re, "$1$2$2");
|
|
11145
11151
|
}
|
|
11146
11152
|
}
|
|
11147
|
-
safeMarkdown = stripDanglingHtmlLikeTail(safeMarkdown);
|
|
11148
|
-
const tokens = md.parse(safeMarkdown, {});
|
|
11153
|
+
if (!isFinal) safeMarkdown = stripDanglingHtmlLikeTail(safeMarkdown);
|
|
11154
|
+
const tokens = md.parse(safeMarkdown, { __markstreamFinal: isFinal });
|
|
11149
11155
|
if (!tokens || !Array.isArray(tokens)) return [];
|
|
11150
11156
|
const pre = options.preTransformTokens;
|
|
11151
11157
|
const post = options.postTransformTokens;
|
|
@@ -11290,7 +11296,9 @@ function getMarkdown(msgId = `editor-${Date.now()}`, options = {}) {
|
|
|
11290
11296
|
md.use(footnote_plugin);
|
|
11291
11297
|
md.core.ruler.after("block", "mark_fence_closed", (state) => {
|
|
11292
11298
|
const s = state;
|
|
11293
|
-
const
|
|
11299
|
+
const src = s.src;
|
|
11300
|
+
const envFinal = !!s.env?.__markstreamFinal;
|
|
11301
|
+
const lines = src.split(/\r?\n/);
|
|
11294
11302
|
for (const token of s.tokens) {
|
|
11295
11303
|
if (token.type !== "fence" || !token.map || !token.markup) continue;
|
|
11296
11304
|
const openLine = token.map[0];
|
|
@@ -11305,7 +11313,7 @@ function getMarkdown(msgId = `editor-${Date.now()}`, options = {}) {
|
|
|
11305
11313
|
while (i + count < line.length && line[i + count] === marker) count++;
|
|
11306
11314
|
let j = i + count;
|
|
11307
11315
|
while (j < line.length && (line[j] === " " || line[j] === " ")) j++;
|
|
11308
|
-
const closed = endLine > openLine + 1 && count >= minLen && j === line.length;
|
|
11316
|
+
const closed = envFinal ? true : endLine > openLine + 1 && count >= minLen && j === line.length;
|
|
11309
11317
|
const tokenShape = token;
|
|
11310
11318
|
tokenShape.meta = tokenShape.meta ?? {};
|
|
11311
11319
|
tokenShape.meta.unclosed = !closed;
|