@openuji/speculator 0.7.4 → 0.8.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 +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/parse/assembler.d.ts +1 -1
- package/dist/parse/assembler.d.ts.map +1 -1
- package/dist/parse/assembler.js +67 -13
- package/dist/parse/assembler.js.map +1 -1
- package/dist/parse/html/AsideHtmlParser.d.ts.map +1 -1
- package/dist/parse/html/AsideHtmlParser.js +85 -3
- package/dist/parse/html/AsideHtmlParser.js.map +1 -1
- package/dist/parse/html/CodeHtmlParser.d.ts.map +1 -1
- package/dist/parse/html/CodeHtmlParser.js +6 -2
- package/dist/parse/html/CodeHtmlParser.js.map +1 -1
- package/dist/parse/html/HeadingsHtmlParser.d.ts.map +1 -1
- package/dist/parse/html/HeadingsHtmlParser.js +3 -4
- package/dist/parse/html/HeadingsHtmlParser.js.map +1 -1
- package/dist/parse/html/IdlHtmlParser.d.ts +0 -4
- package/dist/parse/html/IdlHtmlParser.d.ts.map +1 -1
- package/dist/parse/html/IdlHtmlParser.js +2 -138
- package/dist/parse/html/IdlHtmlParser.js.map +1 -1
- package/dist/parse/html/MiscHtmlParser.d.ts.map +1 -1
- package/dist/parse/html/MiscHtmlParser.js +2 -42
- package/dist/parse/html/MiscHtmlParser.js.map +1 -1
- package/dist/parse/html/SectionsHtmlParser.d.ts.map +1 -1
- package/dist/parse/html/SectionsHtmlParser.js +17 -26
- package/dist/parse/html/SectionsHtmlParser.js.map +1 -1
- package/dist/parse/html/SpecStatementHtmlParser.js +3 -0
- package/dist/parse/html/SpecStatementHtmlParser.js.map +1 -1
- package/dist/parse/html/VocabHtmlParser.d.ts +12 -0
- package/dist/parse/html/VocabHtmlParser.d.ts.map +1 -0
- package/dist/parse/html/VocabHtmlParser.js +1156 -0
- package/dist/parse/html/VocabHtmlParser.js.map +1 -0
- package/dist/parse/html/parser.d.ts +13 -4
- package/dist/parse/html/parser.d.ts.map +1 -1
- package/dist/parse/html/parser.js +105 -119
- package/dist/parse/html/parser.js.map +1 -1
- package/dist/parse/index.d.ts +1 -2
- package/dist/parse/index.d.ts.map +1 -1
- package/dist/parse/index.js +0 -1
- package/dist/parse/index.js.map +1 -1
- package/dist/parse/markdown/CodeMarkdownParser.d.ts.map +1 -1
- package/dist/parse/markdown/CodeMarkdownParser.js +20 -2
- package/dist/parse/markdown/CodeMarkdownParser.js.map +1 -1
- package/dist/parse/markdown/HeadingsMarkdownParser.d.ts.map +1 -1
- package/dist/parse/markdown/HeadingsMarkdownParser.js +10 -33
- package/dist/parse/markdown/HeadingsMarkdownParser.js.map +1 -1
- package/dist/parse/markdown/MdxJsxMarkdownParser.d.ts +8 -0
- package/dist/parse/markdown/MdxJsxMarkdownParser.d.ts.map +1 -0
- package/dist/parse/markdown/MdxJsxMarkdownParser.js +61 -0
- package/dist/parse/markdown/MdxJsxMarkdownParser.js.map +1 -0
- package/dist/parse/markdown/MdxMarkdownParser.d.ts +13 -0
- package/dist/parse/markdown/MdxMarkdownParser.d.ts.map +1 -0
- package/dist/parse/markdown/MdxMarkdownParser.js +351 -0
- package/dist/parse/markdown/MdxMarkdownParser.js.map +1 -0
- package/dist/parse/markdown/ShorthandsMarkdownParser.d.ts.map +1 -1
- package/dist/parse/markdown/ShorthandsMarkdownParser.js +57 -2
- package/dist/parse/markdown/ShorthandsMarkdownParser.js.map +1 -1
- package/dist/parse/markdown/parser.d.ts +12 -3
- package/dist/parse/markdown/parser.d.ts.map +1 -1
- package/dist/parse/markdown/parser.js +90 -57
- package/dist/parse/markdown/parser.js.map +1 -1
- package/dist/parse/markdown/plugins.d.ts +26 -0
- package/dist/parse/markdown/plugins.d.ts.map +1 -0
- package/dist/parse/markdown/plugins.js +90 -0
- package/dist/parse/markdown/plugins.js.map +1 -0
- package/dist/parse/markdown/remark-mdx-jsx-only.d.ts +10 -0
- package/dist/parse/markdown/remark-mdx-jsx-only.d.ts.map +1 -0
- package/dist/parse/markdown/remark-mdx-jsx-only.js +26 -0
- package/dist/parse/markdown/remark-mdx-jsx-only.js.map +1 -0
- package/dist/parse/parsers.d.ts +2 -2
- package/dist/parse/parsers.d.ts.map +1 -1
- package/dist/parse/parsers.js +6 -6
- package/dist/parse/parsers.js.map +1 -1
- package/dist/parse/pipeline.d.ts.map +1 -1
- package/dist/parse/pipeline.js +41 -14
- package/dist/parse/pipeline.js.map +1 -1
- package/dist/parse/registry.d.ts +5 -5
- package/dist/parse/registry.d.ts.map +1 -1
- package/dist/parse/registry.js +12 -12
- package/dist/parse/registry.js.map +1 -1
- package/dist/parse/source-mapper.d.ts +42 -0
- package/dist/parse/source-mapper.d.ts.map +1 -0
- package/dist/parse/source-mapper.js +117 -0
- package/dist/parse/source-mapper.js.map +1 -0
- package/dist/parse/types.d.ts +20 -9
- package/dist/parse/types.d.ts.map +1 -1
- package/dist/parse/types.js +2 -13
- package/dist/parse/types.js.map +1 -1
- package/dist/parse/utils/hast-utils.d.ts.map +1 -1
- package/dist/parse/utils/hast-utils.js +69 -29
- package/dist/parse/utils/hast-utils.js.map +1 -1
- package/dist/parse/utils/html-element-utils.d.ts +9 -0
- package/dist/parse/utils/html-element-utils.d.ts.map +1 -0
- package/dist/parse/utils/html-element-utils.js +88 -0
- package/dist/parse/utils/html-element-utils.js.map +1 -0
- package/dist/parse/utils/idl-tokenizer.d.ts +7 -0
- package/dist/parse/utils/idl-tokenizer.d.ts.map +1 -0
- package/dist/parse/utils/idl-tokenizer.js +137 -0
- package/dist/parse/utils/idl-tokenizer.js.map +1 -0
- package/dist/parse/utils/markdown-utils.d.ts +16 -10
- package/dist/parse/utils/markdown-utils.d.ts.map +1 -1
- package/dist/parse/utils/markdown-utils.js +39 -75
- package/dist/parse/utils/markdown-utils.js.map +1 -1
- package/dist/pipeline/index.d.ts.map +1 -1
- package/dist/pipeline/index.js +1 -0
- package/dist/pipeline/index.js.map +1 -1
- package/dist/pipeline/runner.d.ts.map +1 -1
- package/dist/pipeline/runner.js +10 -4
- package/dist/pipeline/runner.js.map +1 -1
- package/dist/pipeline/types.d.ts +2 -0
- package/dist/pipeline/types.d.ts.map +1 -1
- package/dist/postprocess/index.d.ts +3 -1
- package/dist/postprocess/index.d.ts.map +1 -1
- package/dist/postprocess/index.js +9 -3
- package/dist/postprocess/index.js.map +1 -1
- package/dist/postprocess/plugins/bibliography-generator.d.ts.map +1 -1
- package/dist/postprocess/plugins/bibliography-generator.js +20 -3
- package/dist/postprocess/plugins/bibliography-generator.js.map +1 -1
- package/dist/postprocess/plugins/citation-resolve.d.ts.map +1 -1
- package/dist/postprocess/plugins/citation-resolve.js +255 -11
- package/dist/postprocess/plugins/citation-resolve.js.map +1 -1
- package/dist/postprocess/plugins/example-index.d.ts +16 -0
- package/dist/postprocess/plugins/example-index.d.ts.map +1 -0
- package/dist/postprocess/plugins/example-index.js +131 -0
- package/dist/postprocess/plugins/example-index.js.map +1 -0
- package/dist/postprocess/plugins/note-index.d.ts +14 -0
- package/dist/postprocess/plugins/note-index.d.ts.map +1 -0
- package/dist/postprocess/plugins/note-index.js +103 -0
- package/dist/postprocess/plugins/note-index.js.map +1 -0
- package/dist/postprocess/plugins/note-shorthands.d.ts +11 -0
- package/dist/postprocess/plugins/note-shorthands.d.ts.map +1 -0
- package/dist/postprocess/plugins/note-shorthands.js +298 -0
- package/dist/postprocess/plugins/note-shorthands.js.map +1 -0
- package/dist/postprocess/plugins/reference-resolve.d.ts.map +1 -1
- package/dist/postprocess/plugins/reference-resolve.js +46 -1
- package/dist/postprocess/plugins/reference-resolve.js.map +1 -1
- package/dist/postprocess/plugins/statement-distribute.d.ts.map +1 -1
- package/dist/postprocess/plugins/statement-distribute.js +46 -8
- package/dist/postprocess/plugins/statement-distribute.js.map +1 -1
- package/dist/postprocess/plugins/toc.d.ts.map +1 -1
- package/dist/postprocess/plugins/toc.js +20 -16
- package/dist/postprocess/plugins/toc.js.map +1 -1
- package/dist/postprocess/walk-ast.d.ts +5 -1
- package/dist/postprocess/walk-ast.d.ts.map +1 -1
- package/dist/postprocess/walk-ast.js +9 -0
- package/dist/postprocess/walk-ast.js.map +1 -1
- package/dist/preprocess/config/doc-config.d.ts +4 -1
- package/dist/preprocess/config/doc-config.d.ts.map +1 -1
- package/dist/preprocess/config/doc-config.js +6 -3
- package/dist/preprocess/config/doc-config.js.map +1 -1
- package/dist/preprocess/config/normalize.d.ts.map +1 -1
- package/dist/preprocess/config/normalize.js +34 -11
- package/dist/preprocess/config/normalize.js.map +1 -1
- package/dist/preprocess/config/types.d.ts +7 -3
- package/dist/preprocess/config/types.d.ts.map +1 -1
- package/dist/preprocess/include/resolver.d.ts.map +1 -1
- package/dist/preprocess/include/resolver.js +137 -33
- package/dist/preprocess/include/resolver.js.map +1 -1
- package/dist/preprocess/include/scan-html.js +1 -1
- package/dist/preprocess/include/scan-html.js.map +1 -1
- package/dist/preprocess/index.d.ts +1 -1
- package/dist/preprocess/index.d.ts.map +1 -1
- package/dist/preprocess/index.js.map +1 -1
- package/dist/preprocess/pipeline.d.ts.map +1 -1
- package/dist/preprocess/pipeline.js +1 -1
- package/dist/preprocess/pipeline.js.map +1 -1
- package/dist/preprocess/types.d.ts +32 -12
- package/dist/preprocess/types.d.ts.map +1 -1
- package/dist/types/ast.generated.d.ts +69 -13
- package/dist/types/ast.generated.d.ts.map +1 -1
- package/dist/types/ast.generated.js +4 -4
- package/dist/types/ast.generated.js.map +1 -1
- package/dist/workspace/sort.js +1 -1
- package/dist/workspace/sort.js.map +1 -1
- package/package.json +11 -2
- package/schema/spec-ast.schema.json +143 -9
|
@@ -13,37 +13,12 @@ export const HeadingsMarkdownParser = {
|
|
|
13
13
|
handleBlock(node, ctx) {
|
|
14
14
|
const headingNode = node;
|
|
15
15
|
const sourcePos = ctx.createSourcePos(node);
|
|
16
|
-
//
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
const lastChild = children[children.length - 1];
|
|
23
|
-
if (lastChild.type === 'text') {
|
|
24
|
-
const attrRegex = /\s*\{([^}]+)\}\s*$/;
|
|
25
|
-
const match = attrRegex.exec(lastChild.value);
|
|
26
|
-
if (match) {
|
|
27
|
-
const attrContent = match[1];
|
|
28
|
-
// Parse .unnumbered
|
|
29
|
-
if (/\.unnumbered\b/.test(attrContent)) {
|
|
30
|
-
unnumbered = true;
|
|
31
|
-
}
|
|
32
|
-
// Parse #id
|
|
33
|
-
const idMatch = /#([^\s}]+)/.exec(attrContent);
|
|
34
|
-
if (idMatch) {
|
|
35
|
-
explicitId = idMatch[1];
|
|
36
|
-
}
|
|
37
|
-
// Parse data-cop-concept
|
|
38
|
-
const dataCopMatch = /data-cop-concept=(?:"([^"]+)"|'([^']+)'|([^\s}]+))/.exec(attrContent);
|
|
39
|
-
if (dataCopMatch) {
|
|
40
|
-
dataCopConcept = dataCopMatch[1] || dataCopMatch[2] || dataCopMatch[3];
|
|
41
|
-
}
|
|
42
|
-
// Remove the attribute block from text
|
|
43
|
-
lastChild.value = lastChild.value.replace(attrRegex, '');
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
16
|
+
// Read attributes from data (populated by remarkHeadingAttrBlocks)
|
|
17
|
+
const props = headingNode.data?.hProperties ?? {};
|
|
18
|
+
const noToc = props['data-no-toc'] !== undefined && props['data-no-toc'] !== 'false' && props['data-no-toc'] !== false;
|
|
19
|
+
const noTocCount = props['data-no-toc-count'] !== undefined && props['data-no-toc-count'] !== 'false' && props['data-no-toc-count'] !== false;
|
|
20
|
+
const explicitId = props.id;
|
|
21
|
+
const dataCopConcept = props['data-cop-concept'];
|
|
47
22
|
const result = {
|
|
48
23
|
type: 'heading',
|
|
49
24
|
depth: headingNode.depth,
|
|
@@ -51,8 +26,10 @@ export const HeadingsMarkdownParser = {
|
|
|
51
26
|
children: ctx.transformInlineChildren(headingNode.children),
|
|
52
27
|
dataCopConcept,
|
|
53
28
|
};
|
|
54
|
-
if (
|
|
55
|
-
result.
|
|
29
|
+
if (noToc)
|
|
30
|
+
result.noToc = true;
|
|
31
|
+
if (noTocCount)
|
|
32
|
+
result.noTocCount = true;
|
|
56
33
|
if (sourcePos)
|
|
57
34
|
result.sourcePos = sourcePos;
|
|
58
35
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeadingsMarkdownParser.js","sourceRoot":"","sources":["../../../src/parse/markdown/HeadingsMarkdownParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"HeadingsMarkdownParser.js","sourceRoot":"","sources":["../../../src/parse/markdown/HeadingsMarkdownParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAyB;IACxD,IAAI,EAAE,wBAAwB;IAC9B,OAAO,EAAE,CAAC,SAAS,CAAC;IACpB,KAAK,EAAE,EAAE;IAET,WAAW,CAAC,IAAsB,EAAE,GAAiB;QACjD,MAAM,WAAW,GAAG,IAAuB,CAAC;QAC5C,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAE5C,mEAAmE;QACnE,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC;QAElD,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,OAAO,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,KAAK,CAAC;QACvH,MAAM,UAAU,GAAG,KAAK,CAAC,mBAAmB,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,mBAAmB,CAAC,KAAK,OAAO,IAAI,KAAK,CAAC,mBAAmB,CAAC,KAAK,KAAK,CAAC;QAC9I,MAAM,UAAU,GAAG,KAAK,CAAC,EAAwB,CAAC;QAClD,MAAM,cAAc,GAAG,KAAK,CAAC,kBAAkB,CAAuB,CAAC;QAEvE,MAAM,MAAM,GAAiB;YACzB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,EAAE,EAAE,UAAU;YACd,QAAQ,EAAE,GAAG,CAAC,uBAAuB,CAAC,WAAW,CAAC,QAAQ,CAAC;YAC3D,cAAc;SACjB,CAAC;QAEF,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QAC/B,IAAI,UAAU;YAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;QACzC,IAAI,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QAE5C,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MDX JSX Markdown Parser
|
|
3
|
+
*
|
|
4
|
+
* Bridges MDX custom elements to the HTML handler registry.
|
|
5
|
+
*/
|
|
6
|
+
import { type MarkdownParserModule } from '#src/parse/registry';
|
|
7
|
+
export declare const MdxJsxMarkdownParser: MarkdownParserModule;
|
|
8
|
+
//# sourceMappingURL=MdxJsxMarkdownParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MdxJsxMarkdownParser.d.ts","sourceRoot":"","sources":["../../../src/parse/markdown/MdxJsxMarkdownParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,KAAK,oBAAoB,EAAmG,MAAM,qBAAqB,CAAC;AAUjK,eAAO,MAAM,oBAAoB,EAAE,oBAclC,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MDX JSX Markdown Parser
|
|
3
|
+
*
|
|
4
|
+
* Bridges MDX custom elements to the HTML handler registry.
|
|
5
|
+
*/
|
|
6
|
+
export const MdxJsxMarkdownParser = {
|
|
7
|
+
name: 'MdxJsxMarkdownParser',
|
|
8
|
+
handles: ['mdxJsxFlowElement', 'mdxJsxTextElement'],
|
|
9
|
+
order: 4, // Run early
|
|
10
|
+
handleBlock(node, ctx) {
|
|
11
|
+
if (node.type !== 'mdxJsxFlowElement')
|
|
12
|
+
return null;
|
|
13
|
+
return handleMdxNode(node, ctx, true);
|
|
14
|
+
},
|
|
15
|
+
handleInline(node, ctx) {
|
|
16
|
+
if (node.type !== 'mdxJsxTextElement')
|
|
17
|
+
return null;
|
|
18
|
+
return handleMdxNode(node, ctx, false);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
function handleMdxNode(node, ctx, isBlock) {
|
|
22
|
+
// If it's a fragment or null name, just process children.
|
|
23
|
+
if (!node.name) {
|
|
24
|
+
if (isBlock)
|
|
25
|
+
return ctx.transformBlockChildren(node.children);
|
|
26
|
+
return ctx.transformInlineChildren(node.children);
|
|
27
|
+
}
|
|
28
|
+
const tagName = node.name.toLowerCase();
|
|
29
|
+
// Convert attributes to HAST properties
|
|
30
|
+
const properties = {};
|
|
31
|
+
for (const attr of node.attributes) {
|
|
32
|
+
if (attr.type === 'mdxJsxAttribute') {
|
|
33
|
+
properties[attr.name] = attr.value === null ? true : attr.value;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// Create a simulated HAST Element to satisfy HtmlParserModule signatures
|
|
37
|
+
const simulatedHastElement = {
|
|
38
|
+
type: 'element',
|
|
39
|
+
tagName,
|
|
40
|
+
properties,
|
|
41
|
+
children: node.children, // The ctx handlers can accept MDAST nodes too!
|
|
42
|
+
position: node.position
|
|
43
|
+
};
|
|
44
|
+
if (isBlock) {
|
|
45
|
+
const handler = ctx.registry.getHtmlBlockHandler(tagName);
|
|
46
|
+
if (handler?.handleBlock) {
|
|
47
|
+
return handler.handleBlock(simulatedHastElement, ctx);
|
|
48
|
+
}
|
|
49
|
+
// Fallback: Just return children blocks
|
|
50
|
+
return ctx.transformBlockChildren(node.children);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const handler = ctx.registry.getHtmlInlineHandler(tagName);
|
|
54
|
+
if (handler?.handleInline) {
|
|
55
|
+
return handler.handleInline(simulatedHastElement, ctx);
|
|
56
|
+
}
|
|
57
|
+
// Fallback: Just return children inlines
|
|
58
|
+
return ctx.transformInlineChildren(node.children);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=MdxJsxMarkdownParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MdxJsxMarkdownParser.js","sourceRoot":"","sources":["../../../src/parse/markdown/MdxJsxMarkdownParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,MAAM,CAAC,MAAM,oBAAoB,GAAyB;IACtD,IAAI,EAAE,sBAAsB;IAC5B,OAAO,EAAE,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IACnD,KAAK,EAAE,CAAC,EAAE,YAAY;IAEtB,WAAW,CAAC,IAAsB,EAAE,GAAiB;QACjD,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB;YAAE,OAAO,IAAI,CAAC;QACnD,OAAO,aAAa,CAAC,IAA6B,EAAE,GAAG,EAAE,IAAI,CAAuB,CAAC;IACzF,CAAC;IAED,YAAY,CAAC,IAAsB,EAAE,GAAiB;QAClD,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB;YAAE,OAAO,IAAI,CAAC;QACnD,OAAO,aAAa,CAAC,IAA6B,EAAE,GAAG,EAAE,KAAK,CAAwB,CAAC;IAC3F,CAAC;CACJ,CAAC;AAEF,SAAS,aAAa,CAAC,IAAgB,EAAE,GAAiB,EAAE,OAAgB;IACxE,0DAA0D;IAC1D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACb,IAAI,OAAO;YAAE,OAAO,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAgC,CAAC,CAAC;QACtF,OAAO,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAgC,CAAQ,CAAC;IACrF,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IAExC,wCAAwC;IACxC,MAAM,UAAU,GAAe,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAClC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QACpE,CAAC;IACL,CAAC;IAED,yEAAyE;IACzE,MAAM,oBAAoB,GAAG;QACzB,IAAI,EAAE,SAAS;QACf,OAAO;QACP,UAAU;QACV,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,+CAA+C;QACxE,QAAQ,EAAG,IAAY,CAAC,QAAQ;KACb,CAAC;IAExB,IAAI,OAAO,EAAE,CAAC;QACV,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;YACvB,OAAO,OAAO,CAAC,WAAW,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC;QACD,wCAAwC;QACxC,OAAO,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAgC,CAAC,CAAC;IAC7E,CAAC;SAAM,CAAC;QACJ,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC3D,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC,YAAY,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;QAC3D,CAAC;QACD,yCAAyC;QACzC,OAAO,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAgC,CAAQ,CAAC;IACrF,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MDX Markdown Parser
|
|
3
|
+
*
|
|
4
|
+
* Handles mdast MDX JSX nodes and delegates by tag name to HTML handlers.
|
|
5
|
+
* This lets tags like <dfn>, <a>, <aside>, <spec-statement>, etc. share
|
|
6
|
+
* the same parsing logic across HTML and Markdown inputs.
|
|
7
|
+
*/
|
|
8
|
+
import type { MarkdownParserModule } from '#src/parse/registry';
|
|
9
|
+
/**
|
|
10
|
+
* Markdown parser module for MDX nodes.
|
|
11
|
+
*/
|
|
12
|
+
export declare const MdxMarkdownParser: MarkdownParserModule;
|
|
13
|
+
//# sourceMappingURL=MdxMarkdownParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MdxMarkdownParser.d.ts","sourceRoot":"","sources":["../../../src/parse/markdown/MdxMarkdownParser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAyD,MAAM,qBAAqB,CAAC;AAyVvH;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,oBAwD/B,CAAC"}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MDX Markdown Parser
|
|
3
|
+
*
|
|
4
|
+
* Handles mdast MDX JSX nodes and delegates by tag name to HTML handlers.
|
|
5
|
+
* This lets tags like <dfn>, <a>, <aside>, <spec-statement>, etc. share
|
|
6
|
+
* the same parsing logic across HTML and Markdown inputs.
|
|
7
|
+
*/
|
|
8
|
+
import { isHtmlBlockTag } from '#src/parse/utils/markdown-utils';
|
|
9
|
+
import { createBlockHtmlElement, createInlineHtmlElement } from '#src/parse/utils/html-element-utils';
|
|
10
|
+
function isMdxJsxNode(node) {
|
|
11
|
+
return node?.type === 'mdxJsxFlowElement' || node?.type === 'mdxJsxTextElement';
|
|
12
|
+
}
|
|
13
|
+
function isMdxTextExpression(node) {
|
|
14
|
+
return node?.type === 'mdxTextExpression';
|
|
15
|
+
}
|
|
16
|
+
function toCamelCase(name) {
|
|
17
|
+
return name.replace(/-([a-z0-9])/g, (_, char) => char.toUpperCase());
|
|
18
|
+
}
|
|
19
|
+
function toKebabCase(name) {
|
|
20
|
+
return name.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
|
|
21
|
+
}
|
|
22
|
+
function normalizeAttrValue(attrValue) {
|
|
23
|
+
if (attrValue === null || attrValue === undefined)
|
|
24
|
+
return true;
|
|
25
|
+
if (typeof attrValue === 'string' || typeof attrValue === 'number' || typeof attrValue === 'boolean') {
|
|
26
|
+
return attrValue;
|
|
27
|
+
}
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
function setAttrAliases(properties, name, value) {
|
|
31
|
+
properties[name] = value;
|
|
32
|
+
const camelName = toCamelCase(name);
|
|
33
|
+
if (camelName !== name)
|
|
34
|
+
properties[camelName] = value;
|
|
35
|
+
const kebabName = toKebabCase(name);
|
|
36
|
+
if (kebabName !== name)
|
|
37
|
+
properties[kebabName] = value;
|
|
38
|
+
if (name === 'class')
|
|
39
|
+
properties.className = value;
|
|
40
|
+
if (name === 'className')
|
|
41
|
+
properties.class = value;
|
|
42
|
+
}
|
|
43
|
+
function toMdxProperties(node) {
|
|
44
|
+
const properties = {};
|
|
45
|
+
for (const attr of node.attributes ?? []) {
|
|
46
|
+
if (!attr || attr.type === 'mdxJsxExpressionAttribute')
|
|
47
|
+
continue;
|
|
48
|
+
if (typeof attr.name !== 'string' || attr.name.length === 0)
|
|
49
|
+
continue;
|
|
50
|
+
const attrValue = normalizeAttrValue(attr.value);
|
|
51
|
+
if (attrValue === undefined)
|
|
52
|
+
continue;
|
|
53
|
+
setAttrAliases(properties, attr.name, attrValue);
|
|
54
|
+
}
|
|
55
|
+
return properties;
|
|
56
|
+
}
|
|
57
|
+
function toMdxVirtualElement(node, mode) {
|
|
58
|
+
const mdxChildren = node.children ?? [];
|
|
59
|
+
const childrenForMode = mode === 'block' && node.type === 'mdxJsxTextElement'
|
|
60
|
+
? [{
|
|
61
|
+
type: 'paragraph',
|
|
62
|
+
children: mdxChildren,
|
|
63
|
+
position: node.position,
|
|
64
|
+
}]
|
|
65
|
+
: mdxChildren;
|
|
66
|
+
return {
|
|
67
|
+
type: 'element',
|
|
68
|
+
tagName: node.name ?? '',
|
|
69
|
+
properties: toMdxProperties(node),
|
|
70
|
+
children: childrenForMode,
|
|
71
|
+
position: node.position,
|
|
72
|
+
__mdxSource: node,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function isMdxVirtualElement(element) {
|
|
76
|
+
return '__mdxSource' in element;
|
|
77
|
+
}
|
|
78
|
+
function attrValueToString(value, attrName) {
|
|
79
|
+
if (typeof value === 'string')
|
|
80
|
+
return value;
|
|
81
|
+
if (typeof value === 'number')
|
|
82
|
+
return String(value);
|
|
83
|
+
if (Array.isArray(value))
|
|
84
|
+
return value.map((part) => String(part)).join(' ');
|
|
85
|
+
if (typeof value === 'boolean' && value)
|
|
86
|
+
return attrName;
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
function getMdxAttr(element, name) {
|
|
90
|
+
const properties = element.properties;
|
|
91
|
+
if (!properties)
|
|
92
|
+
return undefined;
|
|
93
|
+
const candidates = [name, toCamelCase(name), toKebabCase(name)];
|
|
94
|
+
for (const candidate of candidates) {
|
|
95
|
+
const normalized = attrValueToString(properties[candidate], name);
|
|
96
|
+
if (normalized !== undefined)
|
|
97
|
+
return normalized;
|
|
98
|
+
}
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
function collectMdxText(node) {
|
|
102
|
+
if (Array.isArray(node)) {
|
|
103
|
+
return node.map(collectMdxText).join('');
|
|
104
|
+
}
|
|
105
|
+
if (!node || typeof node !== 'object')
|
|
106
|
+
return '';
|
|
107
|
+
const candidate = node;
|
|
108
|
+
if ((candidate.type === 'text' || candidate.type === 'inlineCode' || candidate.type === 'code')
|
|
109
|
+
&& typeof candidate.value === 'string') {
|
|
110
|
+
return candidate.value;
|
|
111
|
+
}
|
|
112
|
+
if ((candidate.type === 'mdxTextExpression' || candidate.type === 'mdxFlowExpression')
|
|
113
|
+
&& typeof candidate.value === 'string') {
|
|
114
|
+
return `{${candidate.value}}`;
|
|
115
|
+
}
|
|
116
|
+
if (Array.isArray(candidate.children)) {
|
|
117
|
+
return candidate.children.map(collectMdxText).join('');
|
|
118
|
+
}
|
|
119
|
+
return '';
|
|
120
|
+
}
|
|
121
|
+
function createMdxContext(ctx) {
|
|
122
|
+
return {
|
|
123
|
+
...ctx,
|
|
124
|
+
transformInlineChildren: (children) => {
|
|
125
|
+
const flattened = [];
|
|
126
|
+
for (const child of children) {
|
|
127
|
+
if (child
|
|
128
|
+
&& typeof child === 'object'
|
|
129
|
+
&& child.type === 'paragraph'
|
|
130
|
+
&& Array.isArray(child.children)) {
|
|
131
|
+
flattened.push(...child.children);
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
flattened.push(child);
|
|
135
|
+
}
|
|
136
|
+
return ctx.transformInlineChildren(flattened);
|
|
137
|
+
},
|
|
138
|
+
getAttr: (element, name) => {
|
|
139
|
+
if (isMdxVirtualElement(element)) {
|
|
140
|
+
const value = getMdxAttr(element, name);
|
|
141
|
+
if (value !== undefined)
|
|
142
|
+
return value;
|
|
143
|
+
}
|
|
144
|
+
return ctx.getAttr(element, name);
|
|
145
|
+
},
|
|
146
|
+
getTextContent: (element) => {
|
|
147
|
+
if (isMdxVirtualElement(element)) {
|
|
148
|
+
return collectMdxText(element.children);
|
|
149
|
+
}
|
|
150
|
+
return ctx.getTextContent(element);
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
function inlineResultToParagraph(result, sourcePos) {
|
|
155
|
+
if (result === null)
|
|
156
|
+
return null;
|
|
157
|
+
const inlines = Array.isArray(result) ? result : [result];
|
|
158
|
+
if (inlines.length === 0)
|
|
159
|
+
return null;
|
|
160
|
+
const paragraph = {
|
|
161
|
+
type: 'paragraph',
|
|
162
|
+
children: inlines,
|
|
163
|
+
};
|
|
164
|
+
if (sourcePos)
|
|
165
|
+
paragraph.sourcePos = sourcePos;
|
|
166
|
+
return paragraph;
|
|
167
|
+
}
|
|
168
|
+
function appendBlockResult(target, result) {
|
|
169
|
+
if (result === null)
|
|
170
|
+
return;
|
|
171
|
+
if (Array.isArray(result)) {
|
|
172
|
+
target.push(...result);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
target.push(result);
|
|
176
|
+
}
|
|
177
|
+
function isBlockLikeMdxTag(node, ctx) {
|
|
178
|
+
const tagName = (node.name ?? '').toLowerCase();
|
|
179
|
+
if (!tagName)
|
|
180
|
+
return false;
|
|
181
|
+
if (ctx.registry.getHtmlBlockHandlers(tagName).some(h => h.handleBlock))
|
|
182
|
+
return true;
|
|
183
|
+
if (isHtmlBlockTag(tagName))
|
|
184
|
+
return true;
|
|
185
|
+
if (tagName.includes('-'))
|
|
186
|
+
return true;
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
function fallbackBlockFromChildren(node, ctx) {
|
|
190
|
+
if (node.name) {
|
|
191
|
+
const virtualElement = toMdxVirtualElement(node, 'block');
|
|
192
|
+
let children = ctx.transformBlockChildren(node.children ?? []);
|
|
193
|
+
if (children.length === 0) {
|
|
194
|
+
const inlines = ctx.transformInlineChildren(node.children ?? []);
|
|
195
|
+
if (inlines.length > 0) {
|
|
196
|
+
const paragraph = {
|
|
197
|
+
type: 'paragraph',
|
|
198
|
+
children: inlines,
|
|
199
|
+
};
|
|
200
|
+
const sourcePos = ctx.createSourcePos(node);
|
|
201
|
+
if (sourcePos)
|
|
202
|
+
paragraph.sourcePos = sourcePos;
|
|
203
|
+
children = [paragraph];
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return createBlockHtmlElement(virtualElement, ctx, children);
|
|
207
|
+
}
|
|
208
|
+
const blocks = ctx.transformBlockChildren(node.children ?? []);
|
|
209
|
+
if (blocks.length > 0)
|
|
210
|
+
return blocks;
|
|
211
|
+
const inlines = ctx.transformInlineChildren(node.children ?? []);
|
|
212
|
+
if (inlines.length === 0)
|
|
213
|
+
return null;
|
|
214
|
+
const paragraph = {
|
|
215
|
+
type: 'paragraph',
|
|
216
|
+
children: inlines,
|
|
217
|
+
};
|
|
218
|
+
const sourcePos = ctx.createSourcePos(node);
|
|
219
|
+
if (sourcePos)
|
|
220
|
+
paragraph.sourcePos = sourcePos;
|
|
221
|
+
return paragraph;
|
|
222
|
+
}
|
|
223
|
+
function fallbackInlineFromChildren(node, ctx) {
|
|
224
|
+
if (node.name) {
|
|
225
|
+
const virtualElement = toMdxVirtualElement(node, 'inline');
|
|
226
|
+
return createInlineHtmlElement(virtualElement, ctx, ctx.transformInlineChildren(node.children ?? []));
|
|
227
|
+
}
|
|
228
|
+
const inlines = ctx.transformInlineChildren(node.children ?? []);
|
|
229
|
+
if (inlines.length === 0)
|
|
230
|
+
return null;
|
|
231
|
+
return inlines.length === 1 ? inlines[0] : inlines;
|
|
232
|
+
}
|
|
233
|
+
function handleMdxBlock(node, ctx) {
|
|
234
|
+
const tagName = (node.name ?? '').toLowerCase();
|
|
235
|
+
if (!tagName)
|
|
236
|
+
return fallbackBlockFromChildren(node, ctx);
|
|
237
|
+
const wrapperCtx = createMdxContext(ctx);
|
|
238
|
+
const handlers = ctx.registry.getHtmlBlockHandlers(tagName);
|
|
239
|
+
for (const handler of handlers) {
|
|
240
|
+
if (handler.handleBlock) {
|
|
241
|
+
const result = handler.handleBlock(toMdxVirtualElement(node, 'block'), wrapperCtx);
|
|
242
|
+
if (result !== null)
|
|
243
|
+
return result;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
const inlineHandlers = ctx.registry.getHtmlInlineHandlers(tagName);
|
|
247
|
+
for (const inlineHandler of inlineHandlers) {
|
|
248
|
+
if (inlineHandler.handleInline) {
|
|
249
|
+
const inlineResult = inlineHandler.handleInline(toMdxVirtualElement(node, 'inline'), wrapperCtx);
|
|
250
|
+
if (inlineResult !== null) {
|
|
251
|
+
return inlineResultToParagraph(inlineResult, ctx.createSourcePos(node));
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// If handlers existed but all returned null, don't fall back to children
|
|
256
|
+
if (handlers.length > 0 || inlineHandlers.length > 0) {
|
|
257
|
+
return [];
|
|
258
|
+
}
|
|
259
|
+
return fallbackBlockFromChildren(node, ctx);
|
|
260
|
+
}
|
|
261
|
+
function handleMdxInline(node, ctx) {
|
|
262
|
+
const tagName = (node.name ?? '').toLowerCase();
|
|
263
|
+
if (!tagName)
|
|
264
|
+
return fallbackInlineFromChildren(node, ctx);
|
|
265
|
+
const wrapperCtx = createMdxContext(ctx);
|
|
266
|
+
const handlers = ctx.registry.getHtmlInlineHandlers(tagName);
|
|
267
|
+
if (handlers.length > 0) {
|
|
268
|
+
for (const handler of handlers) {
|
|
269
|
+
if (handler.handleInline) {
|
|
270
|
+
const result = handler.handleInline(toMdxVirtualElement(node, 'inline'), wrapperCtx);
|
|
271
|
+
if (result !== null)
|
|
272
|
+
return result;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// All tried handlers returned null
|
|
276
|
+
return null;
|
|
277
|
+
}
|
|
278
|
+
return fallbackInlineFromChildren(node, ctx);
|
|
279
|
+
}
|
|
280
|
+
function handleMdxExpressionInline(node, ctx) {
|
|
281
|
+
const rawValue = typeof node.value === 'string' ? node.value : '';
|
|
282
|
+
if (!rawValue)
|
|
283
|
+
return null;
|
|
284
|
+
// Recreate original source text so shorthand parser can still detect patterns
|
|
285
|
+
// like {{Interface}} that MDX tokenizes as mdxTextExpression.
|
|
286
|
+
const syntheticText = {
|
|
287
|
+
type: 'text',
|
|
288
|
+
value: `{${rawValue}}`,
|
|
289
|
+
position: node.position,
|
|
290
|
+
};
|
|
291
|
+
const inlines = ctx.transformInlineChildren([syntheticText]);
|
|
292
|
+
if (inlines.length === 0)
|
|
293
|
+
return null;
|
|
294
|
+
return inlines.length === 1 ? inlines[0] : inlines;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Markdown parser module for MDX nodes.
|
|
298
|
+
*/
|
|
299
|
+
export const MdxMarkdownParser = {
|
|
300
|
+
name: 'MdxMarkdownParser',
|
|
301
|
+
handles: ['mdxJsxFlowElement', 'mdxJsxTextElement', 'mdxTextExpression', 'paragraph'],
|
|
302
|
+
order: 5,
|
|
303
|
+
handleBlock(node, ctx) {
|
|
304
|
+
// When a single MDX tag sits inside a paragraph, allow block handlers
|
|
305
|
+
// (e.g. <spec-statement>) to claim it before Paragraph parser runs.
|
|
306
|
+
if (node.type === 'paragraph') {
|
|
307
|
+
const paragraph = node;
|
|
308
|
+
if (paragraph.children.length === 1) {
|
|
309
|
+
const onlyChild = paragraph.children[0];
|
|
310
|
+
if (!isMdxJsxNode(onlyChild))
|
|
311
|
+
return null;
|
|
312
|
+
const tagName = (onlyChild.name ?? '').toLowerCase();
|
|
313
|
+
if (!tagName)
|
|
314
|
+
return null;
|
|
315
|
+
const handlers = ctx.registry.getHtmlBlockHandlers(tagName);
|
|
316
|
+
const hasBlockHandler = handlers.some(h => h.handleBlock);
|
|
317
|
+
if (!hasBlockHandler && !isHtmlBlockTag(tagName) && !tagName.includes('-'))
|
|
318
|
+
return null;
|
|
319
|
+
return handleMdxBlock(onlyChild, ctx);
|
|
320
|
+
}
|
|
321
|
+
const blocks = [];
|
|
322
|
+
let sawBlockLikeTag = false;
|
|
323
|
+
for (const child of paragraph.children) {
|
|
324
|
+
if (isMdxJsxNode(child) && isBlockLikeMdxTag(child, ctx)) {
|
|
325
|
+
sawBlockLikeTag = true;
|
|
326
|
+
appendBlockResult(blocks, handleMdxBlock(child, ctx));
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
if (child.type === 'text' && child.value.trim().length === 0) {
|
|
330
|
+
continue;
|
|
331
|
+
}
|
|
332
|
+
// Mixed content paragraph (normal inline text + MDX tags): let
|
|
333
|
+
// ParagraphsMarkdownParser handle this as an inline paragraph.
|
|
334
|
+
return null;
|
|
335
|
+
}
|
|
336
|
+
return sawBlockLikeTag ? blocks : null;
|
|
337
|
+
}
|
|
338
|
+
if (!isMdxJsxNode(node))
|
|
339
|
+
return null;
|
|
340
|
+
return handleMdxBlock(node, ctx);
|
|
341
|
+
},
|
|
342
|
+
handleInline(node, ctx) {
|
|
343
|
+
if (isMdxTextExpression(node)) {
|
|
344
|
+
return handleMdxExpressionInline(node, ctx);
|
|
345
|
+
}
|
|
346
|
+
if (!isMdxJsxNode(node))
|
|
347
|
+
return null;
|
|
348
|
+
return handleMdxInline(node, ctx);
|
|
349
|
+
},
|
|
350
|
+
};
|
|
351
|
+
//# sourceMappingURL=MdxMarkdownParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MdxMarkdownParser.js","sourceRoot":"","sources":["../../../src/parse/markdown/MdxMarkdownParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShorthandsMarkdownParser.d.ts","sourceRoot":"","sources":["../../../src/parse/markdown/ShorthandsMarkdownParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAuB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrH,OAAO,KAAK,EAAE,MAAM,EAAiJ,MAAM,0BAA0B,CAAC;AAEtM;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,aAAa,CAAC;IAClD,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,gBAAgB,KAAK,MAAM,CAAC;CAC1F;
|
|
1
|
+
{"version":3,"file":"ShorthandsMarkdownParser.d.ts","sourceRoot":"","sources":["../../../src/parse/markdown/ShorthandsMarkdownParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAuB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrH,OAAO,KAAK,EAAE,MAAM,EAAiJ,MAAM,0BAA0B,CAAC;AAEtM;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,aAAa,CAAC;IAClD,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,gBAAgB,KAAK,MAAM,CAAC;CAC1F;AA0CD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,mBAAmB,EA2JnD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,oBAqEtC,CAAC"}
|
|
@@ -3,6 +3,38 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Detects ReSpec-like shorthands in text nodes and transforms them to Speculator AST nodes.
|
|
5
5
|
*/
|
|
6
|
+
/**
|
|
7
|
+
* Parse shorthand citation target syntax:
|
|
8
|
+
* - REF
|
|
9
|
+
* - REF/path
|
|
10
|
+
* - REF#fragment
|
|
11
|
+
* - REF/path#fragment
|
|
12
|
+
*
|
|
13
|
+
* Unlike data-cite parsing, this keeps key casing as-authored so it
|
|
14
|
+
* remains compatible with localBiblio keys.
|
|
15
|
+
*/
|
|
16
|
+
function parseShorthandCitationTarget(rawTarget) {
|
|
17
|
+
const target = rawTarget.trim();
|
|
18
|
+
let base = target;
|
|
19
|
+
let fragment;
|
|
20
|
+
const hashIdx = base.indexOf('#');
|
|
21
|
+
if (hashIdx !== -1) {
|
|
22
|
+
const parsedFragment = base.slice(hashIdx + 1).trim();
|
|
23
|
+
if (parsedFragment)
|
|
24
|
+
fragment = parsedFragment;
|
|
25
|
+
base = base.slice(0, hashIdx);
|
|
26
|
+
}
|
|
27
|
+
let key = base.trim();
|
|
28
|
+
let path;
|
|
29
|
+
const slashIdx = base.indexOf('/');
|
|
30
|
+
if (slashIdx !== -1) {
|
|
31
|
+
key = base.slice(0, slashIdx).trim();
|
|
32
|
+
const parsedPath = base.slice(slashIdx + 1).trim();
|
|
33
|
+
if (parsedPath)
|
|
34
|
+
path = parsedPath;
|
|
35
|
+
}
|
|
36
|
+
return { key: key || target, path, fragment };
|
|
37
|
+
}
|
|
6
38
|
/**
|
|
7
39
|
* Registry of supported shorthands.
|
|
8
40
|
* This satisfies the requirement to track what shorthands are implemented.
|
|
@@ -35,15 +67,38 @@ export const SHORTHAND_REGISTRY = [
|
|
|
35
67
|
status: 'implemented',
|
|
36
68
|
handler: (match, ctx, node) => {
|
|
37
69
|
const forced = match[1];
|
|
38
|
-
const
|
|
70
|
+
const rawTarget = match[2].trim();
|
|
71
|
+
const target = parseShorthandCitationTarget(match[2]);
|
|
72
|
+
const alias = match[3]?.trim();
|
|
73
|
+
// ReSpec-style section links: [[#section-id]]
|
|
74
|
+
if (rawTarget.startsWith('#')) {
|
|
75
|
+
const result = {
|
|
76
|
+
type: 'sectionReference',
|
|
77
|
+
targetId: rawTarget.slice(1),
|
|
78
|
+
};
|
|
79
|
+
if (alias) {
|
|
80
|
+
result.children = [{ type: 'text', value: alias }];
|
|
81
|
+
}
|
|
82
|
+
const sourcePos = ctx.createSourcePos(node);
|
|
83
|
+
if (sourcePos)
|
|
84
|
+
result.sourcePos = sourcePos;
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
39
87
|
const result = {
|
|
40
88
|
type: 'cite',
|
|
41
|
-
key: key,
|
|
89
|
+
key: target.key,
|
|
42
90
|
};
|
|
43
91
|
if (forced === '!')
|
|
44
92
|
result.forcedNormative = true;
|
|
45
93
|
if (forced === '?')
|
|
46
94
|
result.forcedInformative = true;
|
|
95
|
+
if (target.path)
|
|
96
|
+
result.path = target.path;
|
|
97
|
+
if (target.fragment)
|
|
98
|
+
result.fragment = target.fragment;
|
|
99
|
+
if (alias) {
|
|
100
|
+
result.children = [{ type: 'text', value: alias }];
|
|
101
|
+
}
|
|
47
102
|
const sourcePos = ctx.createSourcePos(node);
|
|
48
103
|
if (sourcePos)
|
|
49
104
|
result.sourcePos = sourcePos;
|