@cudoment/cudoc 0.1.0 → 0.2.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/README.md +20 -47
- package/dist/dataset.d.ts +10 -0
- package/dist/dataset.d.ts.map +1 -0
- package/dist/dataset.js +44 -0
- package/dist/dataset.js.map +1 -0
- package/dist/document.d.ts +74 -0
- package/dist/document.d.ts.map +1 -0
- package/dist/document.js +435 -0
- package/dist/document.js.map +1 -0
- package/dist/internal/core/ast/validate.d.ts.map +1 -1
- package/dist/internal/core/ast/validate.js +9 -2
- package/dist/internal/core/ast/validate.js.map +1 -1
- package/dist/internal/core/query/nodes.d.ts.map +1 -1
- package/dist/internal/core/query/nodes.js +3 -1
- package/dist/internal/core/query/nodes.js.map +1 -1
- package/dist/internal/core/query/sections.d.ts.map +1 -1
- package/dist/internal/core/query/sections.js +2 -1
- package/dist/internal/core/query/sections.js.map +1 -1
- package/dist/internal/core/syntax/heading-metadata.js +1 -1
- package/dist/internal/core/syntax/heading-metadata.js.map +1 -1
- package/dist/internal/transforms/table-cell-list/build-table-cell-children.d.ts +5 -0
- package/dist/internal/transforms/table-cell-list/build-table-cell-children.d.ts.map +1 -0
- package/dist/internal/transforms/table-cell-list/build-table-cell-children.js +169 -0
- package/dist/internal/transforms/table-cell-list/build-table-cell-children.js.map +1 -0
- package/dist/internal/transforms/table-cell-list/elements.d.ts +15 -0
- package/dist/internal/transforms/table-cell-list/elements.d.ts.map +1 -0
- package/dist/internal/transforms/table-cell-list/elements.js +16 -0
- package/dist/internal/transforms/table-cell-list/elements.js.map +1 -0
- package/dist/internal/transforms/table-cell-list/index.d.ts +18 -0
- package/dist/internal/transforms/table-cell-list/index.d.ts.map +1 -0
- package/dist/internal/transforms/table-cell-list/index.js +45 -0
- package/dist/internal/transforms/table-cell-list/index.js.map +1 -0
- package/dist/internal/transforms/table-cell-list/nodes.d.ts +9 -0
- package/dist/internal/transforms/table-cell-list/nodes.d.ts.map +1 -0
- package/dist/internal/transforms/table-cell-list/nodes.js +24 -0
- package/dist/internal/transforms/table-cell-list/nodes.js.map +1 -0
- package/dist/internal/transforms/table-cell-list/parse-inline-markdown.d.ts +6 -0
- package/dist/internal/transforms/table-cell-list/parse-inline-markdown.d.ts.map +1 -0
- package/dist/internal/transforms/table-cell-list/parse-inline-markdown.js +101 -0
- package/dist/internal/transforms/table-cell-list/parse-inline-markdown.js.map +1 -0
- package/dist/internal/transforms/table-cell-list/parse-table-cell-list.d.ts +22 -0
- package/dist/internal/transforms/table-cell-list/parse-table-cell-list.d.ts.map +1 -0
- package/dist/internal/transforms/table-cell-list/parse-table-cell-list.js +315 -0
- package/dist/internal/transforms/table-cell-list/parse-table-cell-list.js.map +1 -0
- package/dist/internal/transforms/table-column-layout/create-table.d.ts +45 -0
- package/dist/internal/transforms/table-column-layout/create-table.d.ts.map +1 -0
- package/dist/internal/transforms/table-column-layout/create-table.js +121 -0
- package/dist/internal/transforms/table-column-layout/create-table.js.map +1 -0
- package/dist/internal/transforms/table-column-layout/index.d.ts +51 -0
- package/dist/internal/transforms/table-column-layout/index.d.ts.map +1 -0
- package/dist/internal/transforms/table-column-layout/index.js +96 -0
- package/dist/internal/transforms/table-column-layout/index.js.map +1 -0
- package/dist/internal/transforms/table-column-layout/split-cell.d.ts +24 -0
- package/dist/internal/transforms/table-column-layout/split-cell.d.ts.map +1 -0
- package/dist/internal/transforms/table-column-layout/split-cell.js +219 -0
- package/dist/internal/transforms/table-column-layout/split-cell.js.map +1 -0
- package/dist/markdown.d.ts +10 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +47 -0
- package/dist/markdown.js.map +1 -0
- package/dist/node/cli.d.ts +3 -0
- package/dist/node/cli.d.ts.map +1 -0
- package/dist/node/cli.js +37 -0
- package/dist/node/cli.js.map +1 -0
- package/dist/node/dataset.d.ts +19 -0
- package/dist/node/dataset.d.ts.map +1 -0
- package/dist/node/dataset.js +51 -0
- package/dist/node/dataset.js.map +1 -0
- package/dist/node/library.d.ts +56 -0
- package/dist/node/library.d.ts.map +1 -0
- package/dist/node/library.js +163 -0
- package/dist/node/library.js.map +1 -0
- package/dist/node/paths.d.ts.map +1 -1
- package/dist/node/paths.js +1 -1
- package/dist/node/paths.js.map +1 -1
- package/dist/node/prepare-embeds.d.ts +13 -0
- package/dist/node/prepare-embeds.d.ts.map +1 -0
- package/dist/node/prepare-embeds.js +54 -0
- package/dist/node/prepare-embeds.js.map +1 -0
- package/dist/node/resolve-embed.d.ts +33 -0
- package/dist/node/resolve-embed.d.ts.map +1 -0
- package/dist/node/resolve-embed.js +386 -0
- package/dist/node/resolve-embed.js.map +1 -0
- package/dist/node/storage.d.ts +10 -0
- package/dist/node/storage.d.ts.map +1 -0
- package/dist/node/storage.js +85 -0
- package/dist/node/storage.js.map +1 -0
- package/dist/query.d.ts +1 -0
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +1 -0
- package/dist/query.js.map +1 -1
- package/dist/render.d.ts +11 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +63 -0
- package/dist/render.js.map +1 -0
- package/dist/sections.d.ts +15 -0
- package/dist/sections.d.ts.map +1 -0
- package/dist/sections.js +40 -0
- package/dist/sections.js.map +1 -0
- package/package.json +66 -5
- package/styles.css +34 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { unified } from "unified";
|
|
2
|
+
import remarkParse from "remark-parse";
|
|
3
|
+
import remarkGfm from "remark-gfm";
|
|
4
|
+
import remarkMdx from "remark-mdx";
|
|
5
|
+
import { isBreak, isJsxListElement } from "./elements.js";
|
|
6
|
+
import { createTextNode, isTextNode } from "./nodes.js";
|
|
7
|
+
const markdownProcessor = unified().use(remarkParse).use(remarkGfm);
|
|
8
|
+
const inlineProcessor = unified().use(remarkParse).use(remarkMdx).use(remarkGfm);
|
|
9
|
+
// GFM inline syntax and autolink triggers that require remark re-parsing.
|
|
10
|
+
const inlineMarkdownPattern = /[`*_~[\]<>{}\\&]|https?:\/\/|www\.|[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/i;
|
|
11
|
+
export const toTextNodes = (value) => value ? [createTextNode(value)] : [];
|
|
12
|
+
const createStrongNode = (children) => ({
|
|
13
|
+
type: "strong",
|
|
14
|
+
children,
|
|
15
|
+
});
|
|
16
|
+
const createEmphasisNode = (children) => ({
|
|
17
|
+
type: "emphasis",
|
|
18
|
+
children,
|
|
19
|
+
});
|
|
20
|
+
const extractExactMarker = (value) => {
|
|
21
|
+
const trimmed = value.trim();
|
|
22
|
+
if (trimmed === "**")
|
|
23
|
+
return "**";
|
|
24
|
+
if (trimmed === "*")
|
|
25
|
+
return "*";
|
|
26
|
+
return null;
|
|
27
|
+
};
|
|
28
|
+
const stripLeadingMarker = (value, marker) => {
|
|
29
|
+
return value.startsWith(marker) ? value.slice(marker.length) : null;
|
|
30
|
+
};
|
|
31
|
+
const isInlineBarrier = (node) => {
|
|
32
|
+
if (node.type === "list")
|
|
33
|
+
return true;
|
|
34
|
+
if (isBreak(node))
|
|
35
|
+
return true;
|
|
36
|
+
return isJsxListElement(node);
|
|
37
|
+
};
|
|
38
|
+
export const normalizeInlineEmphasis = (nodes) => {
|
|
39
|
+
const result = [];
|
|
40
|
+
let i = 0;
|
|
41
|
+
while (i < nodes.length) {
|
|
42
|
+
const node = nodes[i];
|
|
43
|
+
if (isTextNode(node)) {
|
|
44
|
+
const openMarker = extractExactMarker(node.value);
|
|
45
|
+
if (openMarker) {
|
|
46
|
+
const inner = [];
|
|
47
|
+
let j = i + 1;
|
|
48
|
+
let closed = false;
|
|
49
|
+
let closingRemainder = "";
|
|
50
|
+
while (j < nodes.length) {
|
|
51
|
+
const candidate = nodes[j];
|
|
52
|
+
if (isInlineBarrier(candidate))
|
|
53
|
+
break;
|
|
54
|
+
if (isTextNode(candidate)) {
|
|
55
|
+
const remainder = stripLeadingMarker(candidate.value, openMarker);
|
|
56
|
+
if (remainder !== null) {
|
|
57
|
+
closed = true;
|
|
58
|
+
closingRemainder = remainder;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
inner.push(candidate);
|
|
63
|
+
j++;
|
|
64
|
+
}
|
|
65
|
+
if (closed && inner.length > 0) {
|
|
66
|
+
const wrapped = openMarker === "**"
|
|
67
|
+
? createStrongNode(inner)
|
|
68
|
+
: createEmphasisNode(inner);
|
|
69
|
+
result.push(wrapped);
|
|
70
|
+
if (closingRemainder) {
|
|
71
|
+
result.push(createTextNode(closingRemainder));
|
|
72
|
+
}
|
|
73
|
+
i = j + 1;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
result.push(node);
|
|
79
|
+
i++;
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
};
|
|
83
|
+
/** Re-parses inline markdown inside a cell back into phrasing nodes. */
|
|
84
|
+
export const parseInlineContent = (content, format = "mdx") => {
|
|
85
|
+
if (!content)
|
|
86
|
+
return [];
|
|
87
|
+
if (!inlineMarkdownPattern.test(content))
|
|
88
|
+
return toTextNodes(content);
|
|
89
|
+
const processor = format === "md" ? markdownProcessor : inlineProcessor;
|
|
90
|
+
const tree = processor.parse(content);
|
|
91
|
+
const processed = processor.runSync(tree);
|
|
92
|
+
const rootChildren = Array.isArray(processed.children)
|
|
93
|
+
? processed.children
|
|
94
|
+
: [];
|
|
95
|
+
const first = rootChildren[0];
|
|
96
|
+
const children = first && "children" in first && Array.isArray(first.children)
|
|
97
|
+
? first.children
|
|
98
|
+
: toTextNodes(content);
|
|
99
|
+
return normalizeInlineEmphasis(children);
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=parse-inline-markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-inline-markdown.js","sourceRoot":"","sources":["../../../../src/internal/transforms/table-cell-list/parse-inline-markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { PhrasingContent } from "mdast";
|
|
2
|
+
import type { CudocTableCellContent } from "../../core/index.js";
|
|
3
|
+
export type ParsedTableCellText = {
|
|
4
|
+
type: "text";
|
|
5
|
+
authoredBreaksBefore: number;
|
|
6
|
+
children: PhrasingContent[];
|
|
7
|
+
};
|
|
8
|
+
export type ParsedTableCellListItem = {
|
|
9
|
+
type: "listItem";
|
|
10
|
+
authoredBreaksBefore: number;
|
|
11
|
+
level: number;
|
|
12
|
+
ordered: boolean;
|
|
13
|
+
start?: number;
|
|
14
|
+
children: PhrasingContent[];
|
|
15
|
+
fallbackChildren: CudocTableCellContent[];
|
|
16
|
+
};
|
|
17
|
+
export type ParsedTableCellPart = ParsedTableCellText | ParsedTableCellListItem;
|
|
18
|
+
export declare const splitAuthoredCellSegments: (source: string) => string[];
|
|
19
|
+
export declare const hasTableCellListPattern: (text: string) => boolean;
|
|
20
|
+
/** Reads raw table-cell source into text and list-item intermediate parts. */
|
|
21
|
+
export declare const parseTableCellList: (fullText: string, format?: "md" | "mdx", inlineParser?: (source: string) => PhrasingContent[]) => ParsedTableCellPart[];
|
|
22
|
+
//# sourceMappingURL=parse-table-cell-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-table-cell-list.d.ts","sourceRoot":"","sources":["../../../../src/internal/transforms/table-cell-list/parse-table-cell-list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAC5C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAIhE,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,oBAAoB,EAAE,MAAM,CAAA;IAC5B,QAAQ,EAAE,eAAe,EAAE,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,UAAU,CAAA;IAChB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,eAAe,EAAE,CAAA;IAC3B,gBAAgB,EAAE,qBAAqB,EAAE,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,GAAG,uBAAuB,CAAA;AAgC/E,eAAO,MAAM,yBAAyB,GAAI,QAAQ,MAAM,KAAG,MAAM,EAsChE,CAAA;AAkGD,eAAO,MAAM,uBAAuB,GAAI,MAAM,MAAM,KAAG,OAUtD,CAAA;AAiDD,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB,GAC7B,UAAU,MAAM,EAChB,SAAQ,IAAI,GAAG,KAAa,EAC5B,eAAe,CAAC,MAAM,EAAE,MAAM,KAAK,eAAe,EAAE,KACnD,mBAAmB,EA6LrB,CAAA"}
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import { parseInlineContent as parseInline } from "./parse-inline-markdown.js";
|
|
2
|
+
import { createTextNode } from "./nodes.js";
|
|
3
|
+
// Segmentation: split the raw cell on <br>, keeping inline code spans intact.
|
|
4
|
+
const isEscaped = (value, index) => {
|
|
5
|
+
let backslashCount = 0;
|
|
6
|
+
for (let i = index - 1; i >= 0 && value[i] === "\\"; i--) {
|
|
7
|
+
backslashCount++;
|
|
8
|
+
}
|
|
9
|
+
return backslashCount % 2 === 1;
|
|
10
|
+
};
|
|
11
|
+
const getBacktickRunLength = (value, index) => {
|
|
12
|
+
let length = 0;
|
|
13
|
+
while (value[index + length] === "`")
|
|
14
|
+
length++;
|
|
15
|
+
return length;
|
|
16
|
+
};
|
|
17
|
+
const hasClosingDelimiter = (value, startIndex, delimiterLength) => {
|
|
18
|
+
for (let i = startIndex; i < value.length; i++) {
|
|
19
|
+
if (value[i] !== "`")
|
|
20
|
+
continue;
|
|
21
|
+
const runLength = getBacktickRunLength(value, i);
|
|
22
|
+
if (runLength === delimiterLength)
|
|
23
|
+
return true;
|
|
24
|
+
i += runLength - 1;
|
|
25
|
+
}
|
|
26
|
+
return false;
|
|
27
|
+
};
|
|
28
|
+
export const splitAuthoredCellSegments = (source) => {
|
|
29
|
+
const segments = [];
|
|
30
|
+
let current = "";
|
|
31
|
+
let activeBacktickLength = null;
|
|
32
|
+
for (let i = 0; i < source.length;) {
|
|
33
|
+
if (source[i] === "`") {
|
|
34
|
+
const runLength = getBacktickRunLength(source, i);
|
|
35
|
+
if (activeBacktickLength === null &&
|
|
36
|
+
!isEscaped(source, i) &&
|
|
37
|
+
hasClosingDelimiter(source, i + runLength, runLength)) {
|
|
38
|
+
activeBacktickLength = runLength;
|
|
39
|
+
}
|
|
40
|
+
else if (activeBacktickLength === runLength) {
|
|
41
|
+
activeBacktickLength = null;
|
|
42
|
+
}
|
|
43
|
+
current += source.slice(i, i + runLength);
|
|
44
|
+
i += runLength;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (activeBacktickLength === null && source[i] === "<") {
|
|
48
|
+
const breakMatch = source.slice(i).match(/^<br\s*\/?>/i);
|
|
49
|
+
if (breakMatch) {
|
|
50
|
+
segments.push(current);
|
|
51
|
+
current = "";
|
|
52
|
+
i += breakMatch[0].length;
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
current += source[i];
|
|
57
|
+
i++;
|
|
58
|
+
}
|
|
59
|
+
segments.push(current);
|
|
60
|
+
return segments;
|
|
61
|
+
};
|
|
62
|
+
// Marker matching: decide which list syntax a segment uses, and at what level.
|
|
63
|
+
const dashListPattern = /(^|<br\s*\/?>)\s*(-{2,})\s*(?=\S)/i;
|
|
64
|
+
const starListPattern = /(^|<br\s*\/?>)\s*(\*{2,})\s+(?=\S)/i;
|
|
65
|
+
const numberedListItemPattern = /^(\d+)(\.+|\))\s+(.*)$/;
|
|
66
|
+
const numberedListStartPattern = /(^|<br\s*\/?>)\s*\d+(?:\.+|\))\s+/i;
|
|
67
|
+
const matchDashListItem = (text) => {
|
|
68
|
+
const match = text.match(/^(-{2,})\s*(\S.*)$/);
|
|
69
|
+
if (!match)
|
|
70
|
+
return null;
|
|
71
|
+
return { level: match[1].length - 1, content: match[2].trimStart() };
|
|
72
|
+
};
|
|
73
|
+
const matchStarListItem = (text) => {
|
|
74
|
+
const match = text.match(/^(\*{2,})\s+(\S.*)$/);
|
|
75
|
+
if (!match)
|
|
76
|
+
return null;
|
|
77
|
+
return { level: match[1].length - 1, content: match[2].trimStart() };
|
|
78
|
+
};
|
|
79
|
+
const matchStarListMarker = (text) => {
|
|
80
|
+
const match = text.match(/^(\*{2,})\s*$/);
|
|
81
|
+
if (!match)
|
|
82
|
+
return null;
|
|
83
|
+
return { level: match[1].length - 1 };
|
|
84
|
+
};
|
|
85
|
+
const matchNumberedListItem = (text) => {
|
|
86
|
+
const match = text.match(numberedListItemPattern);
|
|
87
|
+
if (!match)
|
|
88
|
+
return null;
|
|
89
|
+
const start = Number(match[1]);
|
|
90
|
+
if (!Number.isSafeInteger(start))
|
|
91
|
+
return null;
|
|
92
|
+
return {
|
|
93
|
+
contentOnly: match[3].trimStart(),
|
|
94
|
+
level: match[2] === ")" ? 0 : match[2].length - 1,
|
|
95
|
+
start,
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
const matchBasicListItem = (text) => {
|
|
99
|
+
const match = text.match(/^(\s*)[-*]\s+(.+)$/);
|
|
100
|
+
if (!match)
|
|
101
|
+
return null;
|
|
102
|
+
return {
|
|
103
|
+
indent: match[1],
|
|
104
|
+
content: match[2],
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
const matchPossibleBasicListMarker = (text) => {
|
|
108
|
+
const match = text.match(/^(\s*)[-*](\s*)(.+)?$/);
|
|
109
|
+
if (!match)
|
|
110
|
+
return null;
|
|
111
|
+
return {
|
|
112
|
+
indent: match[1],
|
|
113
|
+
spacing: match[2],
|
|
114
|
+
content: match[3],
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
const getSpaceIndentLevel = (indent) => indent.length > 0 ? Math.floor(indent.length / 2) : 0;
|
|
118
|
+
const getLeadingSpaceIndentLevel = (text) => {
|
|
119
|
+
const textWithoutNbsp = text.replace(/^(?:(?: )|\u00A0)+/, "");
|
|
120
|
+
const leadingSpaces = textWithoutNbsp.match(/^ +/)?.[0] ?? "";
|
|
121
|
+
return getSpaceIndentLevel(leadingSpaces);
|
|
122
|
+
};
|
|
123
|
+
const resolveNumberedChildLevel = (level, lastNumberedLevel) => lastNumberedLevel === null || level > 0 ? level : lastNumberedLevel + 1;
|
|
124
|
+
export const hasTableCellListPattern = (text) => {
|
|
125
|
+
const normalizedText = text.replace(/ |\u00a0/g, " ");
|
|
126
|
+
return (/(^|<br\s*\/?>)\s*[-*]\s+/.test(normalizedText) ||
|
|
127
|
+
/<br\s*\/?>\s*\*{2,}\s+/.test(normalizedText) ||
|
|
128
|
+
numberedListStartPattern.test(normalizedText) ||
|
|
129
|
+
dashListPattern.test(normalizedText) ||
|
|
130
|
+
starListPattern.test(normalizedText));
|
|
131
|
+
};
|
|
132
|
+
const getIndentLevel = (text) => {
|
|
133
|
+
if (!text)
|
|
134
|
+
return 0;
|
|
135
|
+
let count = 0;
|
|
136
|
+
let i = 0;
|
|
137
|
+
while (i < text.length && text.substring(i, i + 6) === " ") {
|
|
138
|
+
count++;
|
|
139
|
+
i += 6;
|
|
140
|
+
}
|
|
141
|
+
while (i < text.length && text.charCodeAt(i) === 0x00a0) {
|
|
142
|
+
count++;
|
|
143
|
+
i++;
|
|
144
|
+
}
|
|
145
|
+
return count >= 2 ? count - 1 : 0;
|
|
146
|
+
};
|
|
147
|
+
const removeNbspPrefix = (text) => {
|
|
148
|
+
if (!text)
|
|
149
|
+
return "";
|
|
150
|
+
let result = text;
|
|
151
|
+
while (result.startsWith(" ")) {
|
|
152
|
+
result = result.substring(6);
|
|
153
|
+
}
|
|
154
|
+
while (result.length > 0 && result.charCodeAt(0) === 0x00a0) {
|
|
155
|
+
result = result.substring(1);
|
|
156
|
+
}
|
|
157
|
+
return result.trimStart();
|
|
158
|
+
};
|
|
159
|
+
// Parse loop: walk the segments and build the intermediate representation.
|
|
160
|
+
const createListFallbackChildren = (source, children) => {
|
|
161
|
+
const authoredPrefix = source.match(/^((?:(?: )|\u00A0|[ \t])*(?:\d+(?:\.+|\))|[-*]+)[ \t]*)/)?.[1];
|
|
162
|
+
return authoredPrefix
|
|
163
|
+
? [createTextNode(authoredPrefix), ...children]
|
|
164
|
+
: [...children];
|
|
165
|
+
};
|
|
166
|
+
/** Reads raw table-cell source into text and list-item intermediate parts. */
|
|
167
|
+
export const parseTableCellList = (fullText, format = "mdx", inlineParser) => {
|
|
168
|
+
const parseInlineContent = inlineParser ?? ((text) => parseInline(text, format));
|
|
169
|
+
const parts = [];
|
|
170
|
+
const segments = splitAuthoredCellSegments(fullText);
|
|
171
|
+
let pendingBreakCount = 0;
|
|
172
|
+
let inList = false;
|
|
173
|
+
let lastNumberedLevel = null;
|
|
174
|
+
const takePendingBreaks = () => {
|
|
175
|
+
const count = pendingBreakCount;
|
|
176
|
+
pendingBreakCount = 0;
|
|
177
|
+
return count;
|
|
178
|
+
};
|
|
179
|
+
const pushText = (text) => {
|
|
180
|
+
const children = parseInlineContent(text);
|
|
181
|
+
if (children.length > 0) {
|
|
182
|
+
parts.push({
|
|
183
|
+
type: "text",
|
|
184
|
+
authoredBreaksBefore: takePendingBreaks(),
|
|
185
|
+
children,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
inList = false;
|
|
189
|
+
};
|
|
190
|
+
const pushListItem = ({ children, fallbackSource, level, ordered = false, start, }) => {
|
|
191
|
+
parts.push({
|
|
192
|
+
type: "listItem",
|
|
193
|
+
authoredBreaksBefore: takePendingBreaks(),
|
|
194
|
+
level,
|
|
195
|
+
ordered,
|
|
196
|
+
start,
|
|
197
|
+
children,
|
|
198
|
+
fallbackChildren: createListFallbackChildren(fallbackSource, children),
|
|
199
|
+
});
|
|
200
|
+
inList = true;
|
|
201
|
+
};
|
|
202
|
+
for (let index = 0; index < segments.length; index++) {
|
|
203
|
+
if (index > 0)
|
|
204
|
+
pendingBreakCount++;
|
|
205
|
+
const segment = segments[index];
|
|
206
|
+
const spaceIndentLevel = getLeadingSpaceIndentLevel(segment);
|
|
207
|
+
const trimmedStart = segment.replace(/^\s+/, "");
|
|
208
|
+
const trimmedEnd = trimmedStart.replace(/\s+$/, "");
|
|
209
|
+
if (!trimmedEnd)
|
|
210
|
+
continue;
|
|
211
|
+
const originalIndentLevel = getIndentLevel(segment);
|
|
212
|
+
const indentLevel = getIndentLevel(trimmedEnd);
|
|
213
|
+
const textWithoutNbsp = removeNbspPrefix(trimmedEnd);
|
|
214
|
+
const numberedItemMatch = matchNumberedListItem(textWithoutNbsp);
|
|
215
|
+
if (numberedItemMatch) {
|
|
216
|
+
pushListItem({
|
|
217
|
+
children: parseInlineContent(numberedItemMatch.contentOnly),
|
|
218
|
+
fallbackSource: segment,
|
|
219
|
+
level: numberedItemMatch.level,
|
|
220
|
+
ordered: true,
|
|
221
|
+
start: numberedItemMatch.start,
|
|
222
|
+
});
|
|
223
|
+
lastNumberedLevel = numberedItemMatch.level;
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
const starItemMatch = inList ? matchStarListItem(textWithoutNbsp) : null;
|
|
227
|
+
if (starItemMatch) {
|
|
228
|
+
pushListItem({
|
|
229
|
+
children: parseInlineContent(starItemMatch.content),
|
|
230
|
+
fallbackSource: segment,
|
|
231
|
+
level: starItemMatch.level,
|
|
232
|
+
});
|
|
233
|
+
lastNumberedLevel = null;
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
if (inList) {
|
|
237
|
+
const starMarkerOnly = matchStarListMarker(textWithoutNbsp);
|
|
238
|
+
if (starMarkerOnly) {
|
|
239
|
+
pushListItem({
|
|
240
|
+
children: [],
|
|
241
|
+
fallbackSource: segment,
|
|
242
|
+
level: starMarkerOnly.level,
|
|
243
|
+
});
|
|
244
|
+
lastNumberedLevel = null;
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
const listItemMatch = matchBasicListItem(textWithoutNbsp);
|
|
249
|
+
const dashItemMatch = listItemMatch
|
|
250
|
+
? null
|
|
251
|
+
: matchDashListItem(textWithoutNbsp);
|
|
252
|
+
if (dashItemMatch) {
|
|
253
|
+
pushListItem({
|
|
254
|
+
children: parseInlineContent(dashItemMatch.content),
|
|
255
|
+
fallbackSource: segment,
|
|
256
|
+
level: resolveNumberedChildLevel(dashItemMatch.level, lastNumberedLevel),
|
|
257
|
+
});
|
|
258
|
+
lastNumberedLevel = null;
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
const startsWithListItemMarker = matchPossibleBasicListMarker(textWithoutNbsp);
|
|
262
|
+
const finalIndentLevel = Math.max(indentLevel, originalIndentLevel, spaceIndentLevel);
|
|
263
|
+
if (finalIndentLevel > 0 &&
|
|
264
|
+
(textWithoutNbsp.startsWith("*") || textWithoutNbsp.startsWith("-"))) {
|
|
265
|
+
const markerMatch = textWithoutNbsp.match(/^[-*]\s*(.+)?$/);
|
|
266
|
+
if (markerMatch) {
|
|
267
|
+
pushListItem({
|
|
268
|
+
children: parseInlineContent(markerMatch[1] ? markerMatch[1].trimStart() : ""),
|
|
269
|
+
fallbackSource: segment,
|
|
270
|
+
level: resolveNumberedChildLevel(finalIndentLevel, lastNumberedLevel),
|
|
271
|
+
});
|
|
272
|
+
lastNumberedLevel = null;
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
if (listItemMatch) {
|
|
277
|
+
const extraIndent = getSpaceIndentLevel(listItemMatch.indent);
|
|
278
|
+
pushListItem({
|
|
279
|
+
children: parseInlineContent(listItemMatch.content.trimStart()),
|
|
280
|
+
fallbackSource: segment,
|
|
281
|
+
level: resolveNumberedChildLevel(indentLevel + extraIndent, lastNumberedLevel),
|
|
282
|
+
});
|
|
283
|
+
lastNumberedLevel = null;
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
if (startsWithListItemMarker && !inList) {
|
|
287
|
+
const hasSpaceAfterMarker = startsWithListItemMarker.spacing.length > 0;
|
|
288
|
+
const hasContentAfterMarker = Boolean(startsWithListItemMarker.content);
|
|
289
|
+
if (hasContentAfterMarker && !hasSpaceAfterMarker) {
|
|
290
|
+
pushText(trimmedEnd);
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
const content = startsWithListItemMarker.content
|
|
294
|
+
? startsWithListItemMarker.content.trimStart()
|
|
295
|
+
: "";
|
|
296
|
+
const extraIndent = getSpaceIndentLevel(startsWithListItemMarker.indent);
|
|
297
|
+
pushListItem({
|
|
298
|
+
children: parseInlineContent(content),
|
|
299
|
+
fallbackSource: segment,
|
|
300
|
+
level: indentLevel + extraIndent,
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
if (!inList) {
|
|
306
|
+
pushText(trimmedEnd);
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
inList = false;
|
|
310
|
+
lastNumberedLevel = null;
|
|
311
|
+
pushText(trimmedEnd);
|
|
312
|
+
}
|
|
313
|
+
return parts;
|
|
314
|
+
};
|
|
315
|
+
//# sourceMappingURL=parse-table-cell-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-table-cell-list.js","sourceRoot":"","sources":["../../../../src/internal/transforms/table-cell-list/parse-table-cell-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rebuilds an mdast table as explicit elements.
|
|
3
|
+
*
|
|
4
|
+
* Markdown tables cannot express a cell that spans columns, so a table whose
|
|
5
|
+
* cells need splitting has to become elements the host renders directly.
|
|
6
|
+
*
|
|
7
|
+
* The defaults are the HTML tag names, which MDX resolves against the
|
|
8
|
+
* components a host already maps `table` and `td` to — so the rebuilt table
|
|
9
|
+
* keeps the site's own table styling and nothing new has to be provided.
|
|
10
|
+
* A site whose table is a set of capitalized components names them instead.
|
|
11
|
+
*/
|
|
12
|
+
import type { Table } from "mdast";
|
|
13
|
+
import type { MdxJsxFlowElement } from "mdast-util-mdx-jsx";
|
|
14
|
+
import { type ResolvedSplitOptions } from "./split-cell.js";
|
|
15
|
+
export declare const DEFAULT_TABLE_COMPONENTS: {
|
|
16
|
+
readonly table: "table";
|
|
17
|
+
readonly header: "thead";
|
|
18
|
+
readonly body: "tbody";
|
|
19
|
+
readonly row: "tr";
|
|
20
|
+
readonly head: "th";
|
|
21
|
+
readonly cell: "td";
|
|
22
|
+
};
|
|
23
|
+
export type TableComponents = {
|
|
24
|
+
table?: string;
|
|
25
|
+
header?: string;
|
|
26
|
+
body?: string;
|
|
27
|
+
row?: string;
|
|
28
|
+
head?: string;
|
|
29
|
+
cell?: string;
|
|
30
|
+
};
|
|
31
|
+
export type ResolvedTableComponents = Required<TableComponents>;
|
|
32
|
+
export declare const resolveTableComponents: (components?: TableComponents) => ResolvedTableComponents;
|
|
33
|
+
/**
|
|
34
|
+
* A split in any body row widens the column for the whole table, so the header
|
|
35
|
+
* cell and every unsplit cell in that column carry a span to keep the grid
|
|
36
|
+
* rectangular.
|
|
37
|
+
*/
|
|
38
|
+
export declare const createLayoutTable: ({ columnIndex, components, split, spanAttribute, table, }: {
|
|
39
|
+
columnIndex: number;
|
|
40
|
+
components: ResolvedTableComponents;
|
|
41
|
+
split: ResolvedSplitOptions;
|
|
42
|
+
spanAttribute: string;
|
|
43
|
+
table: Table;
|
|
44
|
+
}) => MdxJsxFlowElement;
|
|
45
|
+
//# sourceMappingURL=create-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-table.d.ts","sourceRoot":"","sources":["../../../../src/internal/transforms/table-column-layout/create-table.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,OAAO,CAAA;AAE7C,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,oBAAoB,CAAA;AAQ3B,OAAO,EAAa,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAEtE,eAAO,MAAM,wBAAwB;;;;;;;CAO3B,CAAA;AAEV,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAA;AAE/D,eAAO,MAAM,sBAAsB,GACjC,aAAY,eAAoB,KAC/B,uBAQF,CAAA;AAoDD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,2DAM/B;IACD,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,uBAAuB,CAAA;IACnC,KAAK,EAAE,oBAAoB,CAAA;IAC3B,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,KAAK,CAAA;CACb,KAAG,iBA0DH,CAAA"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rebuilds an mdast table as explicit elements.
|
|
3
|
+
*
|
|
4
|
+
* Markdown tables cannot express a cell that spans columns, so a table whose
|
|
5
|
+
* cells need splitting has to become elements the host renders directly.
|
|
6
|
+
*
|
|
7
|
+
* The defaults are the HTML tag names, which MDX resolves against the
|
|
8
|
+
* components a host already maps `table` and `td` to — so the rebuilt table
|
|
9
|
+
* keeps the site's own table styling and nothing new has to be provided.
|
|
10
|
+
* A site whose table is a set of capitalized components names them instead.
|
|
11
|
+
*/
|
|
12
|
+
import { valueToEstree } from "estree-util-value-to-estree";
|
|
13
|
+
import { asFlowChildren, createMdxAttribute, createMdxFlowElement, createMdxTextElement, } from "../../core/index.js";
|
|
14
|
+
import { splitCell } from "./split-cell.js";
|
|
15
|
+
export const DEFAULT_TABLE_COMPONENTS = {
|
|
16
|
+
table: "table",
|
|
17
|
+
header: "thead",
|
|
18
|
+
body: "tbody",
|
|
19
|
+
row: "tr",
|
|
20
|
+
head: "th",
|
|
21
|
+
cell: "td",
|
|
22
|
+
};
|
|
23
|
+
export const resolveTableComponents = (components = {}) => {
|
|
24
|
+
const resolved = { ...DEFAULT_TABLE_COMPONENTS, ...components };
|
|
25
|
+
for (const [key, value] of Object.entries(resolved)) {
|
|
26
|
+
if (typeof value !== "string" || !value) {
|
|
27
|
+
throw new TypeError(`components.${key} must be a non-empty string`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return resolved;
|
|
31
|
+
};
|
|
32
|
+
const createHeadElement = (cell, name, attributes = []) => createMdxTextElement(name, cell.children, attributes);
|
|
33
|
+
const createCellElement = (children, name, attributes = []) => ({
|
|
34
|
+
type: "mdxJsxTextElement",
|
|
35
|
+
name,
|
|
36
|
+
attributes,
|
|
37
|
+
children: children,
|
|
38
|
+
});
|
|
39
|
+
// The native table mapping receives the same textAlign style as an ordinary
|
|
40
|
+
// Markdown table. Custom components retain control of their own prop contract.
|
|
41
|
+
const alignmentAttributes = (table, index, name) => {
|
|
42
|
+
const textAlign = table.align?.[index];
|
|
43
|
+
if (!textAlign || (name !== "th" && name !== "td"))
|
|
44
|
+
return [];
|
|
45
|
+
return [
|
|
46
|
+
{
|
|
47
|
+
type: "mdxJsxAttribute",
|
|
48
|
+
name: "style",
|
|
49
|
+
value: {
|
|
50
|
+
type: "mdxJsxAttributeValueExpression",
|
|
51
|
+
value: JSON.stringify({ textAlign }),
|
|
52
|
+
data: {
|
|
53
|
+
estree: {
|
|
54
|
+
type: "Program",
|
|
55
|
+
sourceType: "module",
|
|
56
|
+
body: [
|
|
57
|
+
{
|
|
58
|
+
type: "ExpressionStatement",
|
|
59
|
+
expression: valueToEstree({ textAlign }),
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
];
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* A split in any body row widens the column for the whole table, so the header
|
|
70
|
+
* cell and every unsplit cell in that column carry a span to keep the grid
|
|
71
|
+
* rectangular.
|
|
72
|
+
*/
|
|
73
|
+
export const createLayoutTable = ({ columnIndex, components, split, spanAttribute, table, }) => {
|
|
74
|
+
const headerRow = table.children[0];
|
|
75
|
+
if (!headerRow) {
|
|
76
|
+
throw new Error("cudoc: cannot lay out a table without a header row");
|
|
77
|
+
}
|
|
78
|
+
const cudocTable = table;
|
|
79
|
+
const cellLayouts = cudocTable.children.slice(1).map((row) => {
|
|
80
|
+
const cell = row.children[columnIndex];
|
|
81
|
+
return cell ? splitCell(cell.children, split) : [[]];
|
|
82
|
+
});
|
|
83
|
+
const hasSplitCell = cellLayouts.some((layout) => layout.length > 1);
|
|
84
|
+
const spanValue = String(split.columns);
|
|
85
|
+
const headerElements = headerRow.children.map((cell, index) => createHeadElement(cell, components.head, [
|
|
86
|
+
...alignmentAttributes(table, index, components.head),
|
|
87
|
+
...(index === columnIndex && hasSplitCell
|
|
88
|
+
? [createMdxAttribute(spanAttribute, spanValue)]
|
|
89
|
+
: []),
|
|
90
|
+
]));
|
|
91
|
+
const bodyRows = cudocTable.children.slice(1).map((row, rowIndex) => {
|
|
92
|
+
const cellElements = row.children.flatMap((cell, index) => {
|
|
93
|
+
const attributes = alignmentAttributes(table, index, components.cell);
|
|
94
|
+
if (index !== columnIndex) {
|
|
95
|
+
return [createCellElement(cell.children, components.cell, attributes)];
|
|
96
|
+
}
|
|
97
|
+
const layout = cellLayouts[rowIndex] ?? [cell.children];
|
|
98
|
+
if (layout.length === 1) {
|
|
99
|
+
return [
|
|
100
|
+
createCellElement(layout[0] ?? [], components.cell, [
|
|
101
|
+
...attributes,
|
|
102
|
+
...(hasSplitCell
|
|
103
|
+
? [createMdxAttribute(spanAttribute, spanValue)]
|
|
104
|
+
: []),
|
|
105
|
+
]),
|
|
106
|
+
];
|
|
107
|
+
}
|
|
108
|
+
return layout.map((children) => createCellElement(children, components.cell, attributes));
|
|
109
|
+
});
|
|
110
|
+
return createMdxFlowElement(components.row, [
|
|
111
|
+
...asFlowChildren(cellElements),
|
|
112
|
+
]);
|
|
113
|
+
});
|
|
114
|
+
return createMdxFlowElement(components.table, [
|
|
115
|
+
createMdxFlowElement(components.header, [
|
|
116
|
+
createMdxFlowElement(components.row, [...asFlowChildren(headerElements)]),
|
|
117
|
+
]),
|
|
118
|
+
createMdxFlowElement(components.body, bodyRows),
|
|
119
|
+
]);
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=create-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-table.js","sourceRoot":"","sources":["../../../../src/internal/transforms/table-column-layout/create-table.ts"],"names":[],"mappings":"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"}
|