@ai-matrx/content-ir 0.16.2 → 0.17.0
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/CHANGELOG.md +55 -0
- package/README.md +24 -0
- package/dist/index.cjs +113 -31
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +113 -32
- package/dist/index.js.map +1 -1
- package/dist/source.cjs +113 -31
- package/dist/source.cjs.map +1 -1
- package/dist/source.d.cts +27 -2
- package/dist/source.d.ts +27 -2
- package/dist/source.js +113 -32
- package/dist/source.js.map +1 -1
- package/package.json +1 -1
package/dist/source.cjs
CHANGED
|
@@ -315,32 +315,8 @@ function singleDollarMathEnd(text, open, limit = text.length) {
|
|
|
315
315
|
return isSingleDollarMath(content, text[close + 1]) ? close + 1 : -1;
|
|
316
316
|
}
|
|
317
317
|
|
|
318
|
-
// source/
|
|
319
|
-
|
|
320
|
-
var STRUCTURAL_MARKDOWN = /\]\(|https?:\/\/|\*\*|(?:^|\n)[ \t]{0,3}#{1,6}[ \t]|(?:^|\n)[ \t]*[-*+][ \t]+|(?:^|\n)[ \t]*\d+[.)][ \t]/;
|
|
321
|
-
var LATEX_COMMAND = /\\[a-zA-Z]/;
|
|
322
|
-
var PROSE_WORD = /[A-Za-z]{3,}/g;
|
|
323
|
-
var PROSE_WORD_LIMIT = 6;
|
|
324
|
-
function isMathPlaceholder(inner) {
|
|
325
|
-
return /^[\s.…·⋯_-]*$/.test(inner) && /[.…·⋯]/.test(inner);
|
|
326
|
-
}
|
|
327
|
-
function opensFlowBlock(text, open) {
|
|
328
|
-
for (let k = open - 1; k >= 0 && text[k] !== "\n"; k--) if (text[k] !== " " && text[k] !== " ") return false;
|
|
329
|
-
for (let k = open + 2; k < text.length && text[k] !== "\n"; k++) if (text[k] !== " " && text[k] !== " " && text[k] !== "\r") return false;
|
|
330
|
-
return true;
|
|
331
|
-
}
|
|
332
|
-
function looksLikeDisplayMath(inner, flow = false) {
|
|
333
|
-
const s = inner.trim();
|
|
334
|
-
if (!s) return false;
|
|
335
|
-
if (STRUCTURAL_MARKDOWN.test(s)) return false;
|
|
336
|
-
if (s.length > MAX_MATH_SPAN) return false;
|
|
337
|
-
if (!flow && /\n[ \t]*\n/.test(inner)) return false;
|
|
338
|
-
if (LATEX_COMMAND.test(s)) {
|
|
339
|
-
return (s.match(PROSE_WORD) ?? []).length < PROSE_WORD_LIMIT * 3;
|
|
340
|
-
}
|
|
341
|
-
return (s.match(PROSE_WORD) ?? []).length < PROSE_WORD_LIMIT;
|
|
342
|
-
}
|
|
343
|
-
function codeRanges(text) {
|
|
318
|
+
// source/code-ranges.ts
|
|
319
|
+
function findCodeRanges(text) {
|
|
344
320
|
const ranges = [];
|
|
345
321
|
const n = text.length;
|
|
346
322
|
let fence = null;
|
|
@@ -372,7 +348,7 @@ function codeRanges(text) {
|
|
|
372
348
|
}
|
|
373
349
|
const [s0] = runs[r];
|
|
374
350
|
const [s1, l1] = runs[j];
|
|
375
|
-
ranges.push(
|
|
351
|
+
ranges.push({ start: s0, end: s1 + l1, kind: "span" });
|
|
376
352
|
r = j + 1;
|
|
377
353
|
}
|
|
378
354
|
};
|
|
@@ -398,7 +374,7 @@ function codeRanges(text) {
|
|
|
398
374
|
closes = indent <= 3 && t >= fence.len && trimFenceLine(trimmed.slice(t)) === "";
|
|
399
375
|
}
|
|
400
376
|
if (closes) {
|
|
401
|
-
ranges.push(
|
|
377
|
+
ranges.push({ start: fence.start, end: lineEnd, kind: "fence" });
|
|
402
378
|
fence = null;
|
|
403
379
|
}
|
|
404
380
|
} else {
|
|
@@ -418,9 +394,106 @@ function codeRanges(text) {
|
|
|
418
394
|
if (nl === -1) break;
|
|
419
395
|
pos = nl + 1;
|
|
420
396
|
}
|
|
421
|
-
if (fence) ranges.push(
|
|
397
|
+
if (fence) ranges.push({ start: fence.start, end: n, kind: "fence" });
|
|
422
398
|
else if (para !== -1) spans(para, n);
|
|
423
|
-
return ranges.sort((a, b) => a
|
|
399
|
+
return ranges.sort((a, b) => a.start - b.start);
|
|
400
|
+
}
|
|
401
|
+
function pendingCodeSpanStart(text) {
|
|
402
|
+
const n = text.length;
|
|
403
|
+
if (n === 0 || /\n[ \t]*\n[ \t]*$/.test(text)) return -1;
|
|
404
|
+
let fence = null;
|
|
405
|
+
let para = -1;
|
|
406
|
+
let pos = 0;
|
|
407
|
+
while (pos <= n) {
|
|
408
|
+
const nl = text.indexOf("\n", pos);
|
|
409
|
+
const lineEnd = nl === -1 ? n : nl;
|
|
410
|
+
const line = text.slice(pos, lineEnd);
|
|
411
|
+
let indent = 0;
|
|
412
|
+
while (indent < line.length && line[indent] === " ") indent++;
|
|
413
|
+
const body = line.slice(indent);
|
|
414
|
+
if (fence) {
|
|
415
|
+
const trimmed = trimFenceLine(line);
|
|
416
|
+
let closes = false;
|
|
417
|
+
if (fence.char === "`") {
|
|
418
|
+
const kind = classifyInnerFenceLine(trimmed, fence.len, fence.nests, fence.depth);
|
|
419
|
+
if (kind === "open-nested") fence.depth++;
|
|
420
|
+
else if (kind === "close-nested") fence.depth--;
|
|
421
|
+
else if (kind === "close-outer") closes = indent <= 3;
|
|
422
|
+
} else {
|
|
423
|
+
let t = 0;
|
|
424
|
+
while (t < trimmed.length && trimmed[t] === "~") t++;
|
|
425
|
+
closes = indent <= 3 && t >= fence.len && trimFenceLine(trimmed.slice(t)) === "";
|
|
426
|
+
}
|
|
427
|
+
if (closes) fence = null;
|
|
428
|
+
} else {
|
|
429
|
+
const opener = indent <= 3 ? /^(`{3,}|~{3,})(.*)$/.exec(body) : null;
|
|
430
|
+
const info = opener ? opener[2] : "";
|
|
431
|
+
if (opener && !(opener[1][0] === "`" && info.includes("`"))) {
|
|
432
|
+
para = -1;
|
|
433
|
+
const char = opener[1][0];
|
|
434
|
+
const parsed = char === "`" ? parseFenceOpener(line) : null;
|
|
435
|
+
fence = { char, len: opener[1].length, nests: fenceNestsInnerFences(parsed?.lang), depth: 0 };
|
|
436
|
+
} else if (body.trim() === "") {
|
|
437
|
+
if (!(nl === -1 && line === "")) para = -1;
|
|
438
|
+
} else if (para === -1) para = pos;
|
|
439
|
+
}
|
|
440
|
+
if (nl === -1) break;
|
|
441
|
+
pos = nl + 1;
|
|
442
|
+
}
|
|
443
|
+
if (fence || para === -1) return -1;
|
|
444
|
+
const runs = [];
|
|
445
|
+
for (let k = para; k < n; ) {
|
|
446
|
+
if (text.charCodeAt(k) !== 96) {
|
|
447
|
+
k++;
|
|
448
|
+
continue;
|
|
449
|
+
}
|
|
450
|
+
let len = 1;
|
|
451
|
+
while (k + len < n && text.charCodeAt(k + len) === 96) len++;
|
|
452
|
+
runs.push([k, len]);
|
|
453
|
+
k += len;
|
|
454
|
+
}
|
|
455
|
+
const growing = (r) => {
|
|
456
|
+
const [start, len] = runs[r];
|
|
457
|
+
return start + len === n;
|
|
458
|
+
};
|
|
459
|
+
for (let r = 0; r < runs.length; ) {
|
|
460
|
+
if (growing(r)) return runs[r][0];
|
|
461
|
+
const len = runs[r][1];
|
|
462
|
+
let j = r + 1;
|
|
463
|
+
while (j < runs.length && (runs[j][1] !== len || growing(j))) j++;
|
|
464
|
+
if (j >= runs.length) return runs[r][0];
|
|
465
|
+
r = j + 1;
|
|
466
|
+
}
|
|
467
|
+
return -1;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
// source/math-pairs.ts
|
|
471
|
+
var MAX_MATH_SPAN = 600;
|
|
472
|
+
var STRUCTURAL_MARKDOWN = /\]\(|https?:\/\/|\*\*|(?:^|\n)[ \t]{0,3}#{1,6}[ \t]|(?:^|\n)[ \t]*[-*+][ \t]+|(?:^|\n)[ \t]*\d+[.)][ \t]/;
|
|
473
|
+
var LATEX_COMMAND = /\\[a-zA-Z]/;
|
|
474
|
+
var PROSE_WORD = /[A-Za-z]{3,}/g;
|
|
475
|
+
var PROSE_WORD_LIMIT = 6;
|
|
476
|
+
function isMathPlaceholder(inner) {
|
|
477
|
+
return /^[\s.…·⋯_-]*$/.test(inner) && /[.…·⋯]/.test(inner);
|
|
478
|
+
}
|
|
479
|
+
function opensFlowBlock(text, open) {
|
|
480
|
+
for (let k = open - 1; k >= 0 && text[k] !== "\n"; k--) if (text[k] !== " " && text[k] !== " ") return false;
|
|
481
|
+
for (let k = open + 2; k < text.length && text[k] !== "\n"; k++) if (text[k] !== " " && text[k] !== " " && text[k] !== "\r") return false;
|
|
482
|
+
return true;
|
|
483
|
+
}
|
|
484
|
+
function looksLikeDisplayMath(inner, flow = false) {
|
|
485
|
+
const s = inner.trim();
|
|
486
|
+
if (!s) return false;
|
|
487
|
+
if (STRUCTURAL_MARKDOWN.test(s)) return false;
|
|
488
|
+
if (s.length > MAX_MATH_SPAN) return false;
|
|
489
|
+
if (!flow && /\n[ \t]*\n/.test(inner)) return false;
|
|
490
|
+
if (LATEX_COMMAND.test(s)) {
|
|
491
|
+
return (s.match(PROSE_WORD) ?? []).length < PROSE_WORD_LIMIT * 3;
|
|
492
|
+
}
|
|
493
|
+
return (s.match(PROSE_WORD) ?? []).length < PROSE_WORD_LIMIT;
|
|
494
|
+
}
|
|
495
|
+
function codeRanges(text) {
|
|
496
|
+
return findCodeRanges(text).map((r) => [r.start, r.end]);
|
|
424
497
|
}
|
|
425
498
|
function pendingDisplayMathOpener(text) {
|
|
426
499
|
if (!text.includes("$$")) return -1;
|
|
@@ -832,6 +905,14 @@ var Tokenizer = class {
|
|
|
832
905
|
this.provisionalFrom = streaming ? pendingDisplayMathOpener(text) : -1;
|
|
833
906
|
if (this.provisionalFrom === -1) this.provisionalFrom = Number.POSITIVE_INFINITY;
|
|
834
907
|
if (streaming && text.includes("$$")) {
|
|
908
|
+
const span = pendingCodeSpanStart(text);
|
|
909
|
+
if (span !== -1) {
|
|
910
|
+
const firstToken = text.indexOf("$$", span);
|
|
911
|
+
if (firstToken !== -1) this.provisionalFrom = Math.min(this.provisionalFrom, firstToken);
|
|
912
|
+
for (const [open, close] of this.mathPairs) {
|
|
913
|
+
if (close >= span) this.provisionalFrom = Math.min(this.provisionalFrom, open);
|
|
914
|
+
}
|
|
915
|
+
}
|
|
835
916
|
for (const pad of ["`", "``", "```", "~~~"]) {
|
|
836
917
|
const alt = pairDisplayMath(text + pad);
|
|
837
918
|
for (const [open, close] of this.mathPairs) {
|
|
@@ -1187,8 +1268,8 @@ var Tokenizer = class {
|
|
|
1187
1268
|
last = k;
|
|
1188
1269
|
continue;
|
|
1189
1270
|
}
|
|
1190
|
-
if (FOOTNOTE_DEF.test(line.trimStart()) || this.detectBlock(this.lineStarts[k], k, false)) break;
|
|
1191
1271
|
if (this.isOpenTail(k)) return this.heldFootnote(p, open[1]);
|
|
1272
|
+
if (FOOTNOTE_DEF.test(line.trimStart()) || this.detectBlock(this.lineStarts[k], k, false)) break;
|
|
1192
1273
|
last = k;
|
|
1193
1274
|
}
|
|
1194
1275
|
const end = this.contentEnds[last];
|
|
@@ -2187,6 +2268,7 @@ exports.blockRangeEdit = blockRangeEdit;
|
|
|
2187
2268
|
exports.buildCodePointIndex = buildCodePointIndex;
|
|
2188
2269
|
exports.classifyInnerFenceLine = classifyInnerFenceLine;
|
|
2189
2270
|
exports.fenceNestsInnerFences = fenceNestsInnerFences;
|
|
2271
|
+
exports.findCodeRanges = findCodeRanges;
|
|
2190
2272
|
exports.isMathPlaceholder = isMathPlaceholder;
|
|
2191
2273
|
exports.isSingleDollarMath = isSingleDollarMath;
|
|
2192
2274
|
exports.islandEdit = islandEdit;
|