@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/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/math-pairs.ts
319
- var MAX_MATH_SPAN = 600;
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([s0, s1 + l1]);
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([fence.start, lineEnd]);
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([fence.start, n]);
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[0] - b[0]);
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;