@ai-matrx/content-ir 0.19.0 → 0.19.2
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 +36 -0
- package/dist/index.cjs +95 -22
- 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 +85 -23
- package/dist/index.js.map +1 -1
- package/dist/source.cjs +95 -22
- package/dist/source.cjs.map +1 -1
- package/dist/source.d.cts +43 -1
- package/dist/source.d.ts +43 -1
- package/dist/source.js +85 -23
- package/dist/source.js.map +1 -1
- package/package.json +1 -1
package/dist/source.d.cts
CHANGED
|
@@ -607,4 +607,46 @@ declare function pendingDisplayMathOpener(text: string): number;
|
|
|
607
607
|
/** Map of `$$` opener offset → closer offset for every pair the renderer shows as math. */
|
|
608
608
|
declare function pairDisplayMath(text: string): Map<number, number>;
|
|
609
609
|
|
|
610
|
-
|
|
610
|
+
/**
|
|
611
|
+
* THE GFM table rule — one splitter, one cell-pipe rule, one "where does a
|
|
612
|
+
* table start and run" — for every surface that reads a markdown table: the
|
|
613
|
+
* chat splitter and live stream, the table renderers and editors, the rich
|
|
614
|
+
* editor's writer, the print package, and (by shared vectors) the Python block
|
|
615
|
+
* detector. verify-RC-B4 R4/R5/R6.
|
|
616
|
+
*
|
|
617
|
+
* - A `|` is a cell boundary unless an ODD run of backslashes precedes it
|
|
618
|
+
* (`\|` is a pipe inside the cell; `\\|` is an escaped backslash and then a
|
|
619
|
+
* boundary). Code spans get no special treatment: GFM splits rows before
|
|
620
|
+
* inline parsing, so an unescaped `|` inside backticks is a boundary too.
|
|
621
|
+
* - A cell's `\|` shows as `|` — inside code spans too (spec example 200).
|
|
622
|
+
* - A table starts at a header holding an unescaped pipe whose NEXT line is a
|
|
623
|
+
* delimiter row (`--- | :-:`, edge pipes optional); a header without a leading
|
|
624
|
+
* pipe must match the delimiter row's width. It runs to a blank line or a
|
|
625
|
+
* line that starts another block (`- x`, `> y`, `# z`, `1.`, a fence, a rule).
|
|
626
|
+
*
|
|
627
|
+
* Pure TS, no dependencies.
|
|
628
|
+
*/
|
|
629
|
+
/** The row's bytes between boundaries (edge segments included). */
|
|
630
|
+
declare function splitRowSegments(line: string): string[];
|
|
631
|
+
/** A row's cell texts as GFM reads them (source bytes, trimmed; edge pipes dropped). */
|
|
632
|
+
declare function rowCells(line: string): string[];
|
|
633
|
+
/** GFM's table-level unescape: a cell's `\|` is a pipe, in code spans too. */
|
|
634
|
+
declare function unescapeCellPipes(cell: string): string;
|
|
635
|
+
/** A GFM delimiter row: every cell `---`, `:--`, `--:` or `:-:`, with at least one pipe. */
|
|
636
|
+
declare function isGfmDelimiterRow(line: string): boolean;
|
|
637
|
+
/** A pipe-led row: `|` first, and another `|` after it. */
|
|
638
|
+
declare function isPipeLedRow(line: string): boolean;
|
|
639
|
+
/** True when `header` + `delimiter` open a table whose header has NO leading pipe. */
|
|
640
|
+
declare function startsPipelessTable(header: string, delimiter: string | undefined): boolean;
|
|
641
|
+
/** A line that continues an open table: a pipe-led row, or a pipe-less line with an unescaped pipe that starts no block. */
|
|
642
|
+
declare function continuesTable(line: string): boolean;
|
|
643
|
+
/** Line `index` opens a table: a pipe-led row, or a pipe-less GFM header over its delimiter row. */
|
|
644
|
+
declare function opensTable(lines: readonly string[], index: number): boolean;
|
|
645
|
+
/** A WHOLE table header at `index`: a table opens here AND its next line is a GFM delimiter row. */
|
|
646
|
+
declare function tableStartsAt(lines: readonly string[], index: number): boolean;
|
|
647
|
+
/** Index of the first line at or after `from` that opens a table; -1 when none. */
|
|
648
|
+
declare function findTableStart(lines: readonly string[], from?: number): number;
|
|
649
|
+
/** Index just past the table whose header is at `start` (header, delimiter, then continuation rows). */
|
|
650
|
+
declare function findTableEnd(lines: readonly string[], start: number): number;
|
|
651
|
+
|
|
652
|
+
export { AFTER_WINDOW, BacktickRuns, type BlockIslandType, CALLOUT_NAMES, type CodePointIndex, type CodeRange, type DisturbedIsland, FENCE_OPENER_WHITESPACE, FENCE_WHITESPACE, type FenceEnd, type FenceLineKind, type FenceLines, type FenceOpener, FenceReader, type InlineIslandType, type InnerFenceLine, type IslandMeta, type IslandType, type MapOptions, type MappedPosition, type MappedRange, NESTING_FENCE_LANGUAGES, type ReadXmlTag, type SourceBlock, type SourceBlockKind, type SourceChange, type SourceEdit, type SourceIsland, type SourceSpan, SourceSpliceError, type SourceSpliceErrorCode, type SpliceIntegrity, type SpliceOptions, type SpliceResult, type TokenizeOptions, XmlContainerTracker, blockAt, blockEdit, blockRangeEdit, buildCodePointIndex, classifyInnerFenceLine, closeFence, codeSpanText, continuesTable, fenceLineKinds, fenceNestsInnerFences, fenceOpenerOf, fenceParts, findCodeRanges, findTableEnd, findTableStart, isEscapedBracketMath, isGfmDelimiterRow, isMathPlaceholder, isPipeLedRow, isSingleDollarMath, islandEdit, joinSource, listIslands, looksLikeDisplayMath, looksLikeOpenInlineMath, mapCodeRanges, mapPosition, mapRange, opensTable, pairDisplayMath, parseFenceOpener, pendingDisplayMathOpener, readXmlTag, rowCells, singleDollarAfter, singleDollarMathEnd, spliceSave, splitRowSegments, splitsSurrogatePair, startsPipelessTable, tableStartsAt, toCodePointOffset, toUtf16Offset, tokenizeSource, trimFenceLine, unescapeCellPipes };
|
package/dist/source.d.ts
CHANGED
|
@@ -607,4 +607,46 @@ declare function pendingDisplayMathOpener(text: string): number;
|
|
|
607
607
|
/** Map of `$$` opener offset → closer offset for every pair the renderer shows as math. */
|
|
608
608
|
declare function pairDisplayMath(text: string): Map<number, number>;
|
|
609
609
|
|
|
610
|
-
|
|
610
|
+
/**
|
|
611
|
+
* THE GFM table rule — one splitter, one cell-pipe rule, one "where does a
|
|
612
|
+
* table start and run" — for every surface that reads a markdown table: the
|
|
613
|
+
* chat splitter and live stream, the table renderers and editors, the rich
|
|
614
|
+
* editor's writer, the print package, and (by shared vectors) the Python block
|
|
615
|
+
* detector. verify-RC-B4 R4/R5/R6.
|
|
616
|
+
*
|
|
617
|
+
* - A `|` is a cell boundary unless an ODD run of backslashes precedes it
|
|
618
|
+
* (`\|` is a pipe inside the cell; `\\|` is an escaped backslash and then a
|
|
619
|
+
* boundary). Code spans get no special treatment: GFM splits rows before
|
|
620
|
+
* inline parsing, so an unescaped `|` inside backticks is a boundary too.
|
|
621
|
+
* - A cell's `\|` shows as `|` — inside code spans too (spec example 200).
|
|
622
|
+
* - A table starts at a header holding an unescaped pipe whose NEXT line is a
|
|
623
|
+
* delimiter row (`--- | :-:`, edge pipes optional); a header without a leading
|
|
624
|
+
* pipe must match the delimiter row's width. It runs to a blank line or a
|
|
625
|
+
* line that starts another block (`- x`, `> y`, `# z`, `1.`, a fence, a rule).
|
|
626
|
+
*
|
|
627
|
+
* Pure TS, no dependencies.
|
|
628
|
+
*/
|
|
629
|
+
/** The row's bytes between boundaries (edge segments included). */
|
|
630
|
+
declare function splitRowSegments(line: string): string[];
|
|
631
|
+
/** A row's cell texts as GFM reads them (source bytes, trimmed; edge pipes dropped). */
|
|
632
|
+
declare function rowCells(line: string): string[];
|
|
633
|
+
/** GFM's table-level unescape: a cell's `\|` is a pipe, in code spans too. */
|
|
634
|
+
declare function unescapeCellPipes(cell: string): string;
|
|
635
|
+
/** A GFM delimiter row: every cell `---`, `:--`, `--:` or `:-:`, with at least one pipe. */
|
|
636
|
+
declare function isGfmDelimiterRow(line: string): boolean;
|
|
637
|
+
/** A pipe-led row: `|` first, and another `|` after it. */
|
|
638
|
+
declare function isPipeLedRow(line: string): boolean;
|
|
639
|
+
/** True when `header` + `delimiter` open a table whose header has NO leading pipe. */
|
|
640
|
+
declare function startsPipelessTable(header: string, delimiter: string | undefined): boolean;
|
|
641
|
+
/** A line that continues an open table: a pipe-led row, or a pipe-less line with an unescaped pipe that starts no block. */
|
|
642
|
+
declare function continuesTable(line: string): boolean;
|
|
643
|
+
/** Line `index` opens a table: a pipe-led row, or a pipe-less GFM header over its delimiter row. */
|
|
644
|
+
declare function opensTable(lines: readonly string[], index: number): boolean;
|
|
645
|
+
/** A WHOLE table header at `index`: a table opens here AND its next line is a GFM delimiter row. */
|
|
646
|
+
declare function tableStartsAt(lines: readonly string[], index: number): boolean;
|
|
647
|
+
/** Index of the first line at or after `from` that opens a table; -1 when none. */
|
|
648
|
+
declare function findTableStart(lines: readonly string[], from?: number): number;
|
|
649
|
+
/** Index just past the table whose header is at `start` (header, delimiter, then continuation rows). */
|
|
650
|
+
declare function findTableEnd(lines: readonly string[], start: number): number;
|
|
651
|
+
|
|
652
|
+
export { AFTER_WINDOW, BacktickRuns, type BlockIslandType, CALLOUT_NAMES, type CodePointIndex, type CodeRange, type DisturbedIsland, FENCE_OPENER_WHITESPACE, FENCE_WHITESPACE, type FenceEnd, type FenceLineKind, type FenceLines, type FenceOpener, FenceReader, type InlineIslandType, type InnerFenceLine, type IslandMeta, type IslandType, type MapOptions, type MappedPosition, type MappedRange, NESTING_FENCE_LANGUAGES, type ReadXmlTag, type SourceBlock, type SourceBlockKind, type SourceChange, type SourceEdit, type SourceIsland, type SourceSpan, SourceSpliceError, type SourceSpliceErrorCode, type SpliceIntegrity, type SpliceOptions, type SpliceResult, type TokenizeOptions, XmlContainerTracker, blockAt, blockEdit, blockRangeEdit, buildCodePointIndex, classifyInnerFenceLine, closeFence, codeSpanText, continuesTable, fenceLineKinds, fenceNestsInnerFences, fenceOpenerOf, fenceParts, findCodeRanges, findTableEnd, findTableStart, isEscapedBracketMath, isGfmDelimiterRow, isMathPlaceholder, isPipeLedRow, isSingleDollarMath, islandEdit, joinSource, listIslands, looksLikeDisplayMath, looksLikeOpenInlineMath, mapCodeRanges, mapPosition, mapRange, opensTable, pairDisplayMath, parseFenceOpener, pendingDisplayMathOpener, readXmlTag, rowCells, singleDollarAfter, singleDollarMathEnd, spliceSave, splitRowSegments, splitsSurrogatePair, startsPipelessTable, tableStartsAt, toCodePointOffset, toUtf16Offset, tokenizeSource, trimFenceLine, unescapeCellPipes };
|
package/dist/source.js
CHANGED
|
@@ -586,7 +586,7 @@ function pendingCodeSpanStart(text) {
|
|
|
586
586
|
const n = text.length;
|
|
587
587
|
if (n === 0 || /\n[ \t]*\n[ \t]*$/.test(text)) return -1;
|
|
588
588
|
const lastLine = text.slice(text.lastIndexOf("\n") + 1);
|
|
589
|
-
if (lastLine && /^(?: {0,3}>[ \t]?)*[ \t]*$/.test(lastLine)) return pendingCodeSpanStart(`${text}x`);
|
|
589
|
+
if (lastLine && /^(?: {0,3}>[ \t]?)*[ \t\r]*$/.test(lastLine)) return pendingCodeSpanStart(`${text}x`);
|
|
590
590
|
const s = scan(text);
|
|
591
591
|
const para = s.pendingPara;
|
|
592
592
|
if (s.endsInFence || para === -1) return -1;
|
|
@@ -750,7 +750,7 @@ function isVariableChain(content, after) {
|
|
|
750
750
|
const run = /^[A-Za-z0-9_]+/.exec(after)?.[0];
|
|
751
751
|
if (!run) return false;
|
|
752
752
|
if (after.length === 1) return false;
|
|
753
|
-
if (/^[A-Za-z_][A-Za-z0-9_]*[.@-]$/.test(content)) return true;
|
|
753
|
+
if (/^[A-Za-z_][A-Za-z0-9_]*(?:[.@-]|->|::)$/.test(content)) return true;
|
|
754
754
|
return IDENTIFIER.test(content) && !MATH_SUFFIX.test(run);
|
|
755
755
|
}
|
|
756
756
|
var FUNCTION_NAMES = /* @__PURE__ */ new Set([
|
|
@@ -1155,7 +1155,7 @@ var Tokenizer = class {
|
|
|
1155
1155
|
if (close >= span) this.provisionalFrom = Math.min(this.provisionalFrom, open);
|
|
1156
1156
|
}
|
|
1157
1157
|
}
|
|
1158
|
-
for (const pad of ["`", "``", "```", "~~~"]) {
|
|
1158
|
+
for (const pad of ["`", "``", "```", "~~~", "$"]) {
|
|
1159
1159
|
const alt = pairDisplayMath(text + pad);
|
|
1160
1160
|
for (const [open, close] of this.mathPairs) {
|
|
1161
1161
|
if (alt.get(open) !== close) this.provisionalFrom = Math.min(this.provisionalFrom, open);
|
|
@@ -1187,19 +1187,6 @@ var Tokenizer = class {
|
|
|
1187
1187
|
provisionalFrom = Number.POSITIVE_INFINITY;
|
|
1188
1188
|
/** Streaming: the text ends in a lone CR whose LF has not arrived yet. */
|
|
1189
1189
|
pendingCR = false;
|
|
1190
|
-
/**
|
|
1191
|
-
* Streaming: an open last line that begins with `{` is undecided — each new
|
|
1192
|
-
* byte can balance or unbalance its braces and flip the whole line between
|
|
1193
|
-
* prose and a JSON island — so it is provisional until it ends (G5).
|
|
1194
|
-
* (A lone HTML tag on that line is held by {@link holdUndecidedTail}.)
|
|
1195
|
-
*/
|
|
1196
|
-
markOpenJsonTail() {
|
|
1197
|
-
const last = this.lineStarts.length - 1;
|
|
1198
|
-
if (!this.isOpenTail(last)) return;
|
|
1199
|
-
if (this.lineText(last).trim().startsWith("{")) {
|
|
1200
|
-
this.provisionalFrom = Math.min(this.provisionalFrom, this.lineStarts[last]);
|
|
1201
|
-
}
|
|
1202
|
-
}
|
|
1203
1190
|
/**
|
|
1204
1191
|
* `text.indexOf(needle, from)` in O(log k): the first query for a needle
|
|
1205
1192
|
* indexes all of its occurrences once, so repeated searches for a closer
|
|
@@ -1234,7 +1221,7 @@ var Tokenizer = class {
|
|
|
1234
1221
|
const rest = this.n - pe;
|
|
1235
1222
|
if (rest === 0) return true;
|
|
1236
1223
|
const tail = this.text.slice(pe);
|
|
1237
|
-
return /^(?:\r\n|\r|\n)[ \t]*$/.test(tail);
|
|
1224
|
+
return /^(?:\r\n|\r|\n)[ \t\r]*$/.test(tail);
|
|
1238
1225
|
}
|
|
1239
1226
|
/**
|
|
1240
1227
|
* Streaming: an open block that may still turn back into prose — a `$$`
|
|
@@ -1243,7 +1230,9 @@ var Tokenizer = class {
|
|
|
1243
1230
|
* or any opener that is itself still arriving on the open last line.
|
|
1244
1231
|
*/
|
|
1245
1232
|
mayDissolve(block) {
|
|
1246
|
-
if (!this.streaming
|
|
1233
|
+
if (!this.streaming) return false;
|
|
1234
|
+
if (block.start >= this.provisionalFrom) return true;
|
|
1235
|
+
if (block.complete) return false;
|
|
1247
1236
|
if (block.type === "math_block" || block.type === "json") return true;
|
|
1248
1237
|
return this.isOpenTail(this.lineOf(block.start));
|
|
1249
1238
|
}
|
|
@@ -1282,7 +1271,6 @@ var Tokenizer = class {
|
|
|
1282
1271
|
return this.text.slice(this.lineStarts[li], this.contentEnds[li]);
|
|
1283
1272
|
}
|
|
1284
1273
|
run() {
|
|
1285
|
-
if (this.streaming) this.markOpenJsonTail();
|
|
1286
1274
|
let pos = 0;
|
|
1287
1275
|
while (pos < this.n) {
|
|
1288
1276
|
const li = this.lineOf(pos);
|
|
@@ -1520,7 +1508,7 @@ var Tokenizer = class {
|
|
|
1520
1508
|
return { type, start, end, complete, meta };
|
|
1521
1509
|
}
|
|
1522
1510
|
frontMatter(li, t) {
|
|
1523
|
-
const fence = this.lineText(li);
|
|
1511
|
+
const fence = this.lineText(li).replace(/^\uFEFF/, "");
|
|
1524
1512
|
if (fence !== "---" && fence !== "+++" || t !== fence) return null;
|
|
1525
1513
|
const toml = fence === "+++";
|
|
1526
1514
|
let sawContent = false;
|
|
@@ -1531,9 +1519,13 @@ var Tokenizer = class {
|
|
|
1531
1519
|
}
|
|
1532
1520
|
if (!NOT_WHITESPACE.test(line)) continue;
|
|
1533
1521
|
const shaped = toml ? /^\s*(?:[A-Za-z0-9_."-]+\s*=|\[|#)/.test(line) : /^(?:[A-Za-z0-9_"'-][^:]*:(?:\s|$)|\s+\S|-\s|#)/.test(line);
|
|
1534
|
-
if (!shaped)
|
|
1522
|
+
if (!shaped) {
|
|
1523
|
+
if (this.isOpenTail(k)) break;
|
|
1524
|
+
return null;
|
|
1525
|
+
}
|
|
1535
1526
|
sawContent = true;
|
|
1536
1527
|
}
|
|
1528
|
+
if (this.streaming) return this.island("front_matter", 0, this.n, false, { format: toml ? "toml" : "yaml" });
|
|
1537
1529
|
return null;
|
|
1538
1530
|
}
|
|
1539
1531
|
/**
|
|
@@ -1934,7 +1926,7 @@ var Tokenizer = class {
|
|
|
1934
1926
|
const block = this.detectBlock(this.lineStarts[k], k, false);
|
|
1935
1927
|
if (block) {
|
|
1936
1928
|
breakLine = k;
|
|
1937
|
-
if (this.mayDissolve(block)
|
|
1929
|
+
if (this.mayDissolve(block)) {
|
|
1938
1930
|
this.undecidedBreaks.add(end);
|
|
1939
1931
|
}
|
|
1940
1932
|
break;
|
|
@@ -2565,6 +2557,76 @@ function mapRange(changes, start, end, unit = "utf16") {
|
|
|
2565
2557
|
return { start: newStart, end: newEnd, touched, collapsed: newEnd === newStart && end > start };
|
|
2566
2558
|
}
|
|
2567
2559
|
|
|
2568
|
-
|
|
2560
|
+
// source/gfm-table.ts
|
|
2561
|
+
function splitRowSegments(line) {
|
|
2562
|
+
const segments = [];
|
|
2563
|
+
let start = 0;
|
|
2564
|
+
for (let i = 0; i < line.length; i += 1) {
|
|
2565
|
+
const ch = line[i];
|
|
2566
|
+
if (ch === "\\") {
|
|
2567
|
+
i += 1;
|
|
2568
|
+
continue;
|
|
2569
|
+
}
|
|
2570
|
+
if (ch === "|") {
|
|
2571
|
+
segments.push(line.slice(start, i));
|
|
2572
|
+
start = i + 1;
|
|
2573
|
+
}
|
|
2574
|
+
}
|
|
2575
|
+
segments.push(line.slice(start));
|
|
2576
|
+
return segments;
|
|
2577
|
+
}
|
|
2578
|
+
function rowCells(line) {
|
|
2579
|
+
const cells = splitRowSegments(line).map((cell) => cell.trim());
|
|
2580
|
+
if (cells.length > 1 && cells[0] === "") cells.shift();
|
|
2581
|
+
if (cells.length > 1 && cells[cells.length - 1] === "") cells.pop();
|
|
2582
|
+
else if (cells.length === 1 && cells[0] === "") cells.pop();
|
|
2583
|
+
return cells;
|
|
2584
|
+
}
|
|
2585
|
+
function unescapeCellPipes(cell) {
|
|
2586
|
+
return cell.replace(/\\\|/g, "|");
|
|
2587
|
+
}
|
|
2588
|
+
var BLOCK_START = /^(?:[-+*](?:\s|$)|\d{1,9}[.)](?:\s|$)|>|#{1,6}(?:\s|$)|```|~~~|(?:-\s*){3,}$|(?:\*\s*){3,}$|(?:_\s*){3,}$)/;
|
|
2589
|
+
var DELIMITER_CELL = /^:?-+:?$/;
|
|
2590
|
+
function isGfmDelimiterRow(line) {
|
|
2591
|
+
const trimmed = line.trim();
|
|
2592
|
+
if (!trimmed.includes("|")) return false;
|
|
2593
|
+
const cells = rowCells(trimmed);
|
|
2594
|
+
return cells.length > 0 && cells.every((cell) => DELIMITER_CELL.test(cell));
|
|
2595
|
+
}
|
|
2596
|
+
function isPipeLedRow(line) {
|
|
2597
|
+
const trimmed = line.trim();
|
|
2598
|
+
return trimmed.startsWith("|") && trimmed.includes("|", 1);
|
|
2599
|
+
}
|
|
2600
|
+
function startsPipelessTable(header, delimiter) {
|
|
2601
|
+
const head = header.trim();
|
|
2602
|
+
if (!head || head.startsWith("|") || BLOCK_START.test(head)) return false;
|
|
2603
|
+
if (splitRowSegments(head).length < 2) return false;
|
|
2604
|
+
if (delimiter === void 0 || !isGfmDelimiterRow(delimiter)) return false;
|
|
2605
|
+
return rowCells(head).length === rowCells(delimiter.trim()).length;
|
|
2606
|
+
}
|
|
2607
|
+
function continuesTable(line) {
|
|
2608
|
+
const trimmed = line.trim();
|
|
2609
|
+
if (!trimmed) return false;
|
|
2610
|
+
if (trimmed.startsWith("|")) return trimmed.includes("|", 1);
|
|
2611
|
+
return splitRowSegments(trimmed).length > 1 && !BLOCK_START.test(trimmed);
|
|
2612
|
+
}
|
|
2613
|
+
function opensTable(lines, index) {
|
|
2614
|
+
const line = lines[index] ?? "";
|
|
2615
|
+
return isPipeLedRow(line) || startsPipelessTable(line, lines[index + 1]);
|
|
2616
|
+
}
|
|
2617
|
+
function tableStartsAt(lines, index) {
|
|
2618
|
+
return opensTable(lines, index) && isGfmDelimiterRow(lines[index + 1] ?? "");
|
|
2619
|
+
}
|
|
2620
|
+
function findTableStart(lines, from = 0) {
|
|
2621
|
+
for (let i = Math.max(0, from); i < lines.length; i += 1) if (opensTable(lines, i)) return i;
|
|
2622
|
+
return -1;
|
|
2623
|
+
}
|
|
2624
|
+
function findTableEnd(lines, start) {
|
|
2625
|
+
let end = Math.min(lines.length, start + 2);
|
|
2626
|
+
while (end < lines.length && continuesTable(lines[end] ?? "")) end += 1;
|
|
2627
|
+
return end;
|
|
2628
|
+
}
|
|
2629
|
+
|
|
2630
|
+
export { AFTER_WINDOW, BacktickRuns, CALLOUT_NAMES, FENCE_OPENER_WHITESPACE, FENCE_WHITESPACE, FenceReader, NESTING_FENCE_LANGUAGES, SourceSpliceError, XmlContainerTracker, blockAt, blockEdit, blockRangeEdit, buildCodePointIndex, classifyInnerFenceLine, closeFence, codeSpanText, continuesTable, fenceLineKinds, fenceNestsInnerFences, fenceOpenerOf, fenceParts, findCodeRanges, findTableEnd, findTableStart, isEscapedBracketMath, isGfmDelimiterRow, isMathPlaceholder, isPipeLedRow, isSingleDollarMath, islandEdit, joinSource, listIslands, looksLikeDisplayMath, looksLikeOpenInlineMath, mapCodeRanges, mapPosition, mapRange, opensTable, pairDisplayMath, parseFenceOpener, pendingDisplayMathOpener, readXmlTag, rowCells, singleDollarAfter, singleDollarMathEnd, spliceSave, splitRowSegments, splitsSurrogatePair, startsPipelessTable, tableStartsAt, toCodePointOffset, toUtf16Offset, tokenizeSource, trimFenceLine, unescapeCellPipes };
|
|
2569
2631
|
//# sourceMappingURL=source.js.map
|
|
2570
2632
|
//# sourceMappingURL=source.js.map
|