@openuji/speculator 0.7.5 → 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/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/VocabHtmlParser.js +2 -2
- package/dist/parse/html/VocabHtmlParser.js.map +1 -1
- 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 +96 -99
- 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 +6 -3
- package/dist/parse/markdown/HeadingsMarkdownParser.js.map +1 -1
- package/dist/parse/markdown/MdxMarkdownParser.d.ts.map +1 -1
- package/dist/parse/markdown/MdxMarkdownParser.js +54 -13
- package/dist/parse/markdown/MdxMarkdownParser.js.map +1 -1
- 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 +71 -80
- package/dist/parse/markdown/parser.js.map +1 -1
- package/dist/parse/markdown/plugins.d.ts.map +1 -1
- package/dist/parse/markdown/plugins.js +9 -2
- package/dist/parse/markdown/plugins.js.map +1 -1
- package/dist/parse/pipeline.d.ts.map +1 -1
- package/dist/parse/pipeline.js +35 -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 +63 -28
- package/dist/parse/utils/hast-utils.js.map +1 -1
- 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/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/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 +8 -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 +86 -32
- 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 +25 -13
- package/dist/preprocess/types.d.ts.map +1 -1
- package/dist/types/ast.generated.d.ts +36 -11
- package/dist/types/ast.generated.d.ts.map +1 -1
- package/dist/types/ast.generated.js +1 -1
- 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 +2 -2
- package/schema/spec-ast.schema.json +35 -8
package/dist/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export type { FileProvider } from './file-provider/types.js';
|
|
|
8
8
|
export * from './types/ast.generated.js';
|
|
9
9
|
export { speculate, SpeculatorPipeline, PHASES, POSTPROCESS_PHASES } from './pipeline/index.js';
|
|
10
10
|
export type { Plugin, Phase, PostprocessPhase, SpeculateOptions, SpeculateResult } from './pipeline/types.js';
|
|
11
|
-
export { dfnIndexPlugin, referenceResolvePlugin, citationResolvePlugin, tocPlugin, corePlugins, } from './postprocess/index.js';
|
|
11
|
+
export { dfnIndexPlugin, noteShorthandsPlugin, referenceResolvePlugin, citationResolvePlugin, tocPlugin, corePlugins, } from './postprocess/index.js';
|
|
12
12
|
export { coreHtmlParsers, coreMarkdownParsers, } from './parse/parsers.js';
|
|
13
13
|
export * from './workspace/index.js';
|
|
14
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAE1C,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC7F,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,cAAc,0BAA0B,CAAC;AAGzC,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAChG,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG9G,OAAO,EACH,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,SAAS,EACT,WAAW,GACd,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACH,eAAe,EACf,mBAAmB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAE1C,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC7F,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,cAAc,0BAA0B,CAAC;AAGzC,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAChG,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG9G,OAAO,EACH,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,SAAS,EACT,WAAW,GACd,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACH,eAAe,EACf,mBAAmB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,cAAc,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ export * from './types/ast.generated.js';
|
|
|
8
8
|
// Pipeline (Single Entrypoint)
|
|
9
9
|
export { speculate, SpeculatorPipeline, PHASES, POSTPROCESS_PHASES } from './pipeline/index.js';
|
|
10
10
|
// Postprocess Plugins
|
|
11
|
-
export { dfnIndexPlugin, referenceResolvePlugin, citationResolvePlugin, tocPlugin, corePlugins, } from './postprocess/index.js';
|
|
11
|
+
export { dfnIndexPlugin, noteShorthandsPlugin, referenceResolvePlugin, citationResolvePlugin, tocPlugin, corePlugins, } from './postprocess/index.js';
|
|
12
12
|
// Parser Modules (for advanced use)
|
|
13
13
|
export { coreHtmlParsers, coreMarkdownParsers, } from './parse/parsers.js';
|
|
14
14
|
// Workspace Utilities
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAK1C,iBAAiB;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D,YAAY;AACZ,cAAc,0BAA0B,CAAC;AAEzC,+BAA+B;AAC/B,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGhG,sBAAsB;AACtB,OAAO,EACH,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,SAAS,EACT,WAAW,GACd,MAAM,wBAAwB,CAAC;AAEhC,oCAAoC;AACpC,OAAO,EACH,eAAe,EACf,mBAAmB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,sBAAsB;AACtB,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAK1C,iBAAiB;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D,YAAY;AACZ,cAAc,0BAA0B,CAAC;AAEzC,+BAA+B;AAC/B,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGhG,sBAAsB;AACtB,OAAO,EACH,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,SAAS,EACT,WAAW,GACd,MAAM,wBAAwB,CAAC;AAEhC,oCAAoC;AACpC,OAAO,EACH,eAAe,EACf,mBAAmB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,sBAAsB;AACtB,cAAc,sBAAsB,CAAC"}
|
|
@@ -12,7 +12,7 @@ import type { SpecConfig } from '#src/preprocess/types';
|
|
|
12
12
|
* Converts headings to sections and nests content based on heading depth.
|
|
13
13
|
* Pre-existing sections (from HTML) are inserted at their natural position.
|
|
14
14
|
*/
|
|
15
|
-
export declare function buildSectionHierarchy(blocks: (Section | Block)[]): (Section | Block)[];
|
|
15
|
+
export declare function buildSectionHierarchy(blocks: (Section | Block)[], entryFile?: string): (Section | Block)[];
|
|
16
16
|
/**
|
|
17
17
|
* Assemble blocks into a complete document
|
|
18
18
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assembler.d.ts","sourceRoot":"","sources":["../../src/parse/assembler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACR,OAAO,EACP,KAAK,EAEL,QAAQ,EAEX,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"assembler.d.ts","sourceRoot":"","sources":["../../src/parse/assembler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACR,OAAO,EACP,KAAK,EAEL,QAAQ,EAEX,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAsDxD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAiH1G;AAsHD;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,EAC3B,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,MAAM,GAClB,QAAQ,CA2BV"}
|
package/dist/parse/assembler.js
CHANGED
|
@@ -37,9 +37,13 @@ function createSectionFromHeading(heading) {
|
|
|
37
37
|
section.sourcePos = heading.sourcePos;
|
|
38
38
|
section.heading.sourcePos = heading.sourcePos;
|
|
39
39
|
}
|
|
40
|
-
if (heading.
|
|
41
|
-
section.
|
|
42
|
-
section.heading.
|
|
40
|
+
if (heading.noToc) {
|
|
41
|
+
section.noToc = true;
|
|
42
|
+
section.heading.noToc = true;
|
|
43
|
+
}
|
|
44
|
+
if (heading.noTocCount) {
|
|
45
|
+
section.noTocCount = true;
|
|
46
|
+
section.heading.noTocCount = true;
|
|
43
47
|
}
|
|
44
48
|
if (heading.dataCopConcept) {
|
|
45
49
|
section.dataCopConcept = heading.dataCopConcept;
|
|
@@ -53,14 +57,14 @@ function createSectionFromHeading(heading) {
|
|
|
53
57
|
* Converts headings to sections and nests content based on heading depth.
|
|
54
58
|
* Pre-existing sections (from HTML) are inserted at their natural position.
|
|
55
59
|
*/
|
|
56
|
-
export function buildSectionHierarchy(blocks) {
|
|
60
|
+
export function buildSectionHierarchy(blocks, entryFile) {
|
|
57
61
|
if (blocks.length === 0)
|
|
58
62
|
return [];
|
|
59
63
|
const result = [];
|
|
60
|
-
// Stack of (section, depth) for tracking hierarchy
|
|
64
|
+
// Stack of (section, depth, file) for tracking hierarchy
|
|
61
65
|
// depth 0 means top-level content before any heading
|
|
62
66
|
const sectionStack = [
|
|
63
|
-
{ section: null, depth: 0 }
|
|
67
|
+
{ section: null, depth: 0, file: entryFile }
|
|
64
68
|
];
|
|
65
69
|
/**
|
|
66
70
|
* Get current container for adding content
|
|
@@ -83,7 +87,49 @@ export function buildSectionHierarchy(blocks) {
|
|
|
83
87
|
sectionStack.pop();
|
|
84
88
|
}
|
|
85
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Pop sections that were started in a different file than the current one,
|
|
92
|
+
* unless the current file is a "child" (nested include) of the stack's file.
|
|
93
|
+
*
|
|
94
|
+
* Since we don't have the full include graph here, we use a heuristic:
|
|
95
|
+
* if the file actually changes, we pop everything that was deeper than the
|
|
96
|
+
* first occurrence of the NEW file in the stack.
|
|
97
|
+
*/
|
|
98
|
+
function handleFileBoundary(currentFile) {
|
|
99
|
+
if (!currentFile)
|
|
100
|
+
return;
|
|
101
|
+
// Find the LATEST (deepest) point in the stack that belongs to this file.
|
|
102
|
+
// We want to return to the most recent context of this file.
|
|
103
|
+
let matchIndex = -1;
|
|
104
|
+
for (let i = sectionStack.length - 1; i >= 0; i--) {
|
|
105
|
+
if (sectionStack[i].file === currentFile) {
|
|
106
|
+
matchIndex = i;
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// If we found a match and it's not the current top, we MIGHT be returning
|
|
111
|
+
// from an include.
|
|
112
|
+
if (matchIndex !== -1 && matchIndex < sectionStack.length - 1) {
|
|
113
|
+
// Check if there are any sections from a DIFFERENT file "on top" of our match.
|
|
114
|
+
let hasIncludeToPop = false;
|
|
115
|
+
for (let i = matchIndex + 1; i < sectionStack.length; i++) {
|
|
116
|
+
if (sectionStack[i].file !== currentFile) {
|
|
117
|
+
hasIncludeToPop = true;
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// If we have sections from a different file, we MUST pop them all
|
|
122
|
+
// to return to our file's context.
|
|
123
|
+
if (hasIncludeToPop) {
|
|
124
|
+
while (sectionStack.length > matchIndex + 1) {
|
|
125
|
+
sectionStack.pop();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
86
130
|
for (const node of blocks) {
|
|
131
|
+
const currentFile = node.sourcePos?.file;
|
|
132
|
+
handleFileBoundary(currentFile);
|
|
87
133
|
if (isSection(node)) {
|
|
88
134
|
// Pre-existing section - determine its depth from heading or default to 1
|
|
89
135
|
const sectionDepth = node.heading?.depth ?? 1;
|
|
@@ -92,7 +138,7 @@ export function buildSectionHierarchy(blocks) {
|
|
|
92
138
|
// Add to current container
|
|
93
139
|
getCurrentContainer().push(node);
|
|
94
140
|
// Push this section onto stack
|
|
95
|
-
sectionStack.push({ section: node, depth: sectionDepth });
|
|
141
|
+
sectionStack.push({ section: node, depth: sectionDepth, file: currentFile });
|
|
96
142
|
}
|
|
97
143
|
else if (isHeading(node)) {
|
|
98
144
|
const headingDepth = node.depth;
|
|
@@ -103,7 +149,7 @@ export function buildSectionHierarchy(blocks) {
|
|
|
103
149
|
// Add to current container
|
|
104
150
|
getCurrentContainer().push(newSection);
|
|
105
151
|
// Push new section onto stack
|
|
106
|
-
sectionStack.push({ section: newSection, depth: headingDepth });
|
|
152
|
+
sectionStack.push({ section: newSection, depth: headingDepth, file: currentFile });
|
|
107
153
|
}
|
|
108
154
|
else {
|
|
109
155
|
// Regular block - add to current container
|
|
@@ -142,6 +188,14 @@ function configToMetadata(config) {
|
|
|
142
188
|
meta.version = config.version;
|
|
143
189
|
hasContent = true;
|
|
144
190
|
}
|
|
191
|
+
if (config.specIri || config.latestVersion) {
|
|
192
|
+
meta.respec = {};
|
|
193
|
+
if (config.specIri)
|
|
194
|
+
meta.respec.thisVersion = config.specIri;
|
|
195
|
+
if (config.latestVersion)
|
|
196
|
+
meta.respec.latestVersion = config.latestVersion;
|
|
197
|
+
hasContent = true;
|
|
198
|
+
}
|
|
145
199
|
if (config.deps && config.deps.length > 0) {
|
|
146
200
|
meta.deps = config.deps;
|
|
147
201
|
hasContent = true;
|
|
@@ -154,6 +208,10 @@ function configToMetadata(config) {
|
|
|
154
208
|
meta.lastUpdateDate = config.lastUpdateDate;
|
|
155
209
|
hasContent = true;
|
|
156
210
|
}
|
|
211
|
+
if (config.creationDate) {
|
|
212
|
+
meta.creationDate = config.creationDate;
|
|
213
|
+
hasContent = true;
|
|
214
|
+
}
|
|
157
215
|
if (config.editors && config.editors.length > 0) {
|
|
158
216
|
meta.editors = config.editors.map(e => ({
|
|
159
217
|
name: e.name,
|
|
@@ -213,10 +271,6 @@ function configToMetadata(config) {
|
|
|
213
271
|
meta.custom = config.custom;
|
|
214
272
|
hasContent = true;
|
|
215
273
|
}
|
|
216
|
-
if (config.noConformance) {
|
|
217
|
-
meta.noConformance = config.noConformance;
|
|
218
|
-
hasContent = true;
|
|
219
|
-
}
|
|
220
274
|
return hasContent ? meta : undefined;
|
|
221
275
|
}
|
|
222
276
|
/**
|
|
@@ -224,7 +278,7 @@ function configToMetadata(config) {
|
|
|
224
278
|
*/
|
|
225
279
|
export function assembleDocument(blocks, config, entryFile) {
|
|
226
280
|
// Build section hierarchy
|
|
227
|
-
const children = buildSectionHierarchy(blocks);
|
|
281
|
+
const children = buildSectionHierarchy(blocks, entryFile);
|
|
228
282
|
// Create document
|
|
229
283
|
const doc = {
|
|
230
284
|
type: 'document',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assembler.js","sourceRoot":"","sources":["../../src/parse/assembler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH;;GAEG;AACH,SAAS,SAAS,CAAC,IAAqB;IACpC,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,IAAqB;IACpC,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAAC,OAAqB;IACnD,MAAM,OAAO,GAAY;QACrB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE;YACL,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC7B;QACD,QAAQ,EAAE,EAAE;KACf,CAAC;IAEF,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACb,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,OAAQ,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IACrC,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACtC,OAAO,CAAC,OAAQ,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACnD,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;QAC1B,OAAO,CAAC,OAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;IACvC,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QACzB,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAChD,OAAO,CAAC,OAAQ,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAC7D,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAA2B;
|
|
1
|
+
{"version":3,"file":"assembler.js","sourceRoot":"","sources":["../../src/parse/assembler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsideHtmlParser.d.ts","sourceRoot":"","sources":["../../../src/parse/html/AsideHtmlParser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAoC,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"AsideHtmlParser.d.ts","sourceRoot":"","sources":["../../../src/parse/html/AsideHtmlParser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAoC,MAAM,qBAAqB,CAAC;AAuE9F;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,gBA2F7B,CAAC"}
|
|
@@ -23,18 +23,57 @@ function getNoteType(element, ctx) {
|
|
|
23
23
|
return noteClass;
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
+
// Check data-type attribute
|
|
27
|
+
const dataType = ctx.getAttr(element, 'data-type');
|
|
28
|
+
if (dataType === 'example')
|
|
29
|
+
return 'example';
|
|
26
30
|
// Check role attribute
|
|
27
31
|
const role = ctx.getAttr(element, 'role');
|
|
28
32
|
if (role === 'note')
|
|
29
33
|
return 'note';
|
|
30
34
|
return null;
|
|
31
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Recursively find the first <a> element's href or mdast link's url in content.
|
|
38
|
+
*/
|
|
39
|
+
function findFirstLinkHref(nodes) {
|
|
40
|
+
for (const node of nodes) {
|
|
41
|
+
// Handle HAST elements (e.g. <a href="...">)
|
|
42
|
+
if (node.type === 'element') {
|
|
43
|
+
const el = node;
|
|
44
|
+
if (el.tagName === 'a') {
|
|
45
|
+
const href = el.properties?.href;
|
|
46
|
+
if (typeof href === 'string')
|
|
47
|
+
return href;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Handle MDAST link elements (e.g. [text](href))
|
|
51
|
+
if (node.type === 'link') {
|
|
52
|
+
if (typeof node.url === 'string')
|
|
53
|
+
return node.url;
|
|
54
|
+
}
|
|
55
|
+
// Handle MDX JSX elements (e.g. <a href="..."> in mdx context)
|
|
56
|
+
if ((node.type === 'mdxJsxFlowElement' || node.type === 'mdxJsxTextElement') && node.name === 'a') {
|
|
57
|
+
const hrefAttr = node.attributes?.find((attr) => attr.name === 'href');
|
|
58
|
+
if (hrefAttr && typeof hrefAttr.value === 'string') {
|
|
59
|
+
return hrefAttr.value;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Recurse into children of any node that has them
|
|
63
|
+
if (node.children && Array.isArray(node.children) && node.children.length > 0) {
|
|
64
|
+
const found = findFirstLinkHref(node.children);
|
|
65
|
+
if (found)
|
|
66
|
+
return found;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
32
71
|
/**
|
|
33
72
|
* HTML parser module for aside and note-type elements.
|
|
34
73
|
*/
|
|
35
74
|
export const AsideHtmlParser = {
|
|
36
75
|
name: 'AsideHtmlParser',
|
|
37
|
-
handles: ['aside', 'div'],
|
|
76
|
+
handles: ['aside', 'div', 'figure', 'p'],
|
|
38
77
|
order: 8, // Run before misc parser but after specialized handlers
|
|
39
78
|
handleBlock(element, ctx) {
|
|
40
79
|
const tagName = element.tagName.toLowerCase();
|
|
@@ -44,11 +83,22 @@ export const AsideHtmlParser = {
|
|
|
44
83
|
if (tagName === 'aside') {
|
|
45
84
|
noteType = getNoteType(element, ctx) ?? 'note';
|
|
46
85
|
}
|
|
86
|
+
else if (tagName === 'figure') {
|
|
87
|
+
noteType = getNoteType(element, ctx);
|
|
88
|
+
if (!noteType) {
|
|
89
|
+
// Not a note-type figure - but we might still want it as a regular figure
|
|
90
|
+
// For now, let's treat it as a pass-through if not an example
|
|
91
|
+
return ctx.transformBlockChildren(element.children);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
47
94
|
else {
|
|
48
|
-
// tagName === 'div'
|
|
95
|
+
// tagName === 'div' or 'p'
|
|
49
96
|
noteType = getNoteType(element, ctx);
|
|
50
97
|
if (!noteType) {
|
|
51
|
-
// Not a note-type div - pass through children
|
|
98
|
+
// Not a note-type div/p - pass through children if div,
|
|
99
|
+
// or return null if p to let ParagraphsHtmlParser handle it.
|
|
100
|
+
if (tagName === 'p')
|
|
101
|
+
return null;
|
|
52
102
|
return ctx.transformBlockChildren(element.children);
|
|
53
103
|
}
|
|
54
104
|
}
|
|
@@ -58,6 +108,32 @@ export const AsideHtmlParser = {
|
|
|
58
108
|
const childBlocks = ctx.transformBlockChildren(element.children);
|
|
59
109
|
// Filter out sections if any - notes only contain blocks
|
|
60
110
|
const children = childBlocks.filter((c) => c.type !== 'section');
|
|
111
|
+
if (noteType === 'example') {
|
|
112
|
+
const result = {
|
|
113
|
+
type: 'example',
|
|
114
|
+
children,
|
|
115
|
+
};
|
|
116
|
+
// For <figure>, look for <figcaption> to use as title
|
|
117
|
+
let title = ctx.getAttr(element, 'title') || ctx.getAttr(element, 'data-title');
|
|
118
|
+
if (tagName === 'figure') {
|
|
119
|
+
const figcaption = element.children.find(c => c.type === 'element' && c.tagName === 'figcaption');
|
|
120
|
+
if (figcaption) {
|
|
121
|
+
title = ctx.getTextContent(figcaption);
|
|
122
|
+
// Actually, if we use figcaption as title, we should probably exclude it from children
|
|
123
|
+
// to avoid duplication in rendering.
|
|
124
|
+
// Let's re-transform without figcaption if it exists
|
|
125
|
+
const filteredHastChildren = element.children.filter(c => !(c.type === 'element' && c.tagName === 'figcaption'));
|
|
126
|
+
result.children = ctx.transformBlockChildren(filteredHastChildren).filter((c) => c.type !== 'section');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (title)
|
|
130
|
+
result.title = title;
|
|
131
|
+
if (id)
|
|
132
|
+
result.id = id;
|
|
133
|
+
if (sourcePos)
|
|
134
|
+
result.sourcePos = sourcePos;
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
61
137
|
const result = {
|
|
62
138
|
type: 'note',
|
|
63
139
|
noteType,
|
|
@@ -68,6 +144,12 @@ export const AsideHtmlParser = {
|
|
|
68
144
|
result.id = id;
|
|
69
145
|
if (sourcePos)
|
|
70
146
|
result.sourcePos = sourcePos;
|
|
147
|
+
// For issue-type notes, extract the href from the first link in hast children
|
|
148
|
+
if (noteType === 'issue') {
|
|
149
|
+
const href = findFirstLinkHref(element.children);
|
|
150
|
+
if (href)
|
|
151
|
+
result.src = href;
|
|
152
|
+
}
|
|
71
153
|
return result;
|
|
72
154
|
},
|
|
73
155
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsideHtmlParser.js","sourceRoot":"","sources":["../../../src/parse/html/AsideHtmlParser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,CAAU,CAAC;AAGpF;;GAEG;AACH,SAAS,WAAW,CAAC,OAAgB,EAAE,GAAiB;IACpD,wCAAwC;IACxC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;IAC1D,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAErD,KAAK,MAAM,SAAS,IAAI,YAAY,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,4BAA4B;YAC5B,IAAI,SAAS,KAAK,YAAY;gBAAE,OAAO,SAAS,CAAC;YACjD,OAAO,SAAqB,CAAC;QACjC,CAAC;IACL,CAAC;IAED,uBAAuB;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IAEnC,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAqB;IAC7C,IAAI,EAAE,iBAAiB;IACvB,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"AsideHtmlParser.js","sourceRoot":"","sources":["../../../src/parse/html/AsideHtmlParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeHtmlParser.d.ts","sourceRoot":"","sources":["../../../src/parse/html/CodeHtmlParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAoC,MAAM,qBAAqB,CAAC;AAG9F;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"CodeHtmlParser.d.ts","sourceRoot":"","sources":["../../../src/parse/html/CodeHtmlParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAoC,MAAM,qBAAqB,CAAC;AAG9F;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,gBAqC5B,CAAC"}
|
|
@@ -19,8 +19,12 @@ export const CodeHtmlParser = {
|
|
|
19
19
|
value: codeEl ? ctx.getTextContent(codeEl) : ctx.getTextContent(element),
|
|
20
20
|
children: [],
|
|
21
21
|
};
|
|
22
|
-
// Try to extract language from class
|
|
23
|
-
|
|
22
|
+
// Try to extract language from highlight attribute or class
|
|
23
|
+
const highlightAttr = ctx.getAttr(element, 'highlight');
|
|
24
|
+
if (highlightAttr) {
|
|
25
|
+
result.lang = highlightAttr;
|
|
26
|
+
}
|
|
27
|
+
else if (codeEl) {
|
|
24
28
|
const className = ctx.getAttr(codeEl, 'class') ?? ctx.getAttr(codeEl, 'className');
|
|
25
29
|
if (className) {
|
|
26
30
|
const langMatch = className.match(/language-(\S+)/);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeHtmlParser.js","sourceRoot":"","sources":["../../../src/parse/html/CodeHtmlParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC5C,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,CAAC,KAAK,CAAC;IAChB,KAAK,EAAE,EAAE;IAET,WAAW,CAAC,OAAgB,EAAE,GAAiB;QAC3C,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAE/C,+BAA+B;QAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAChC,CAAC,CAAC,EAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAK,CAAa,CAAC,OAAO,KAAK,MAAM,CACjF,CAAC;QAEF,MAAM,MAAM,GAAmB;YAC3B,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC;YACxE,QAAQ,EAAE,EAAE;SACf,CAAC;QAEF,
|
|
1
|
+
{"version":3,"file":"CodeHtmlParser.js","sourceRoot":"","sources":["../../../src/parse/html/CodeHtmlParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC5C,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,CAAC,KAAK,CAAC;IAChB,KAAK,EAAE,EAAE;IAET,WAAW,CAAC,OAAgB,EAAE,GAAiB;QAC3C,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAE/C,+BAA+B;QAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAChC,CAAC,CAAC,EAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAK,CAAa,CAAC,OAAO,KAAK,MAAM,CACjF,CAAC;QAEF,MAAM,MAAM,GAAmB;YAC3B,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC;YACxE,QAAQ,EAAE,EAAE;SACf,CAAC;QAEF,4DAA4D;QAC5D,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACxD,IAAI,aAAa,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,GAAG,aAAa,CAAC;QAChC,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YAChB,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACnF,IAAI,SAAS,EAAE,CAAC;gBACZ,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBACpD,IAAI,SAAS;oBAAE,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC;QACL,CAAC;QAED,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACtC,IAAI,EAAE;YAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;QACvB,IAAI,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QAE5C,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeadingsHtmlParser.d.ts","sourceRoot":"","sources":["../../../src/parse/html/HeadingsHtmlParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAoC,MAAM,qBAAqB,CAAC;AAG9F;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"HeadingsHtmlParser.d.ts","sourceRoot":"","sources":["../../../src/parse/html/HeadingsHtmlParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAoC,MAAM,qBAAqB,CAAC;AAG9F;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,gBA2BhC,CAAC"}
|
|
@@ -21,14 +21,13 @@ export const HeadingsHtmlParser = {
|
|
|
21
21
|
};
|
|
22
22
|
const id = ctx.getAttr(element, 'id');
|
|
23
23
|
const dataCopConcept = ctx.getAttr(element, 'data-cop-concept');
|
|
24
|
-
const
|
|
25
|
-
const unnumbered = className.split(/\s+/).some(c => ['unnumbered', 'informative', 'introductory'].includes(c));
|
|
24
|
+
const noToc = ctx.getAttr(element, 'data-no-toc') !== undefined;
|
|
26
25
|
if (id)
|
|
27
26
|
result.id = id;
|
|
28
27
|
if (dataCopConcept)
|
|
29
28
|
result.dataCopConcept = dataCopConcept;
|
|
30
|
-
if (
|
|
31
|
-
result.
|
|
29
|
+
if (noToc)
|
|
30
|
+
result.noToc = true;
|
|
32
31
|
if (sourcePos)
|
|
33
32
|
result.sourcePos = sourcePos;
|
|
34
33
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeadingsHtmlParser.js","sourceRoot":"","sources":["../../../src/parse/html/HeadingsHtmlParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAqB;IAChD,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC7C,KAAK,EAAE,EAAE;IAET,WAAW,CAAC,OAAgB,EAAE,GAAiB;QAC3C,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAA0B,CAAC;QAE9F,MAAM,MAAM,GAAiB;YACzB,IAAI,EAAE,SAAS;YACf,KAAK;YACL,QAAQ,EAAE,GAAG,CAAC,uBAAuB,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC1D,CAAC;QAEF,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;QAChE,MAAM,
|
|
1
|
+
{"version":3,"file":"HeadingsHtmlParser.js","sourceRoot":"","sources":["../../../src/parse/html/HeadingsHtmlParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAqB;IAChD,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC7C,KAAK,EAAE,EAAE;IAET,WAAW,CAAC,OAAgB,EAAE,GAAiB;QAC3C,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAA0B,CAAC;QAE9F,MAAM,MAAM,GAAiB;YACzB,IAAI,EAAE,SAAS;YACf,KAAK;YACL,QAAQ,EAAE,GAAG,CAAC,uBAAuB,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC1D,CAAC;QAEF,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,SAAS,CAAC;QAEhE,IAAI,EAAE;YAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;QACvB,IAAI,cAAc;YAAE,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC;QAC3D,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QAC/B,IAAI,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QAE5C,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ,CAAC"}
|
|
@@ -2,10 +2,6 @@
|
|
|
2
2
|
* IDL HTML Parser
|
|
3
3
|
*
|
|
4
4
|
* Parses <pre class="idl"> blocks to extract WebIDL definitions.
|
|
5
|
-
* Tokenizes the content to generate a BlockIdl node with Inline children.
|
|
6
|
-
* - Definitions (interfaces, members) become InlineDefinition.
|
|
7
|
-
* - Types become Reference nodes (to be linked).
|
|
8
|
-
* - Keywords/Punctuation become Text nodes.
|
|
9
5
|
*/
|
|
10
6
|
import type { HtmlParserModule } from '#src/parse/registry';
|
|
11
7
|
export declare const IdlHtmlParser: HtmlParserModule;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdlHtmlParser.d.ts","sourceRoot":"","sources":["../../../src/parse/html/IdlHtmlParser.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"IdlHtmlParser.d.ts","sourceRoot":"","sources":["../../../src/parse/html/IdlHtmlParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAoC,MAAM,qBAAqB,CAAC;AAK9F,eAAO,MAAM,aAAa,EAAE,gBAyB3B,CAAC"}
|
|
@@ -2,23 +2,9 @@
|
|
|
2
2
|
* IDL HTML Parser
|
|
3
3
|
*
|
|
4
4
|
* Parses <pre class="idl"> blocks to extract WebIDL definitions.
|
|
5
|
-
* Tokenizes the content to generate a BlockIdl node with Inline children.
|
|
6
|
-
* - Definitions (interfaces, members) become InlineDefinition.
|
|
7
|
-
* - Types become Reference nodes (to be linked).
|
|
8
|
-
* - Keywords/Punctuation become Text nodes.
|
|
9
5
|
*/
|
|
6
|
+
import { tokenizeIdlContent } from '#src/parse/utils/idl-tokenizer';
|
|
10
7
|
import { CodeHtmlParser } from './CodeHtmlParser.js';
|
|
11
|
-
// Keywords that start a definition
|
|
12
|
-
const DEF_KEYWORDS = new Set(['interface', 'dictionary', 'enum', 'callback', 'typedef', 'partial']);
|
|
13
|
-
// Keywords to ignore (not types or names)
|
|
14
|
-
const IGNORED_KEYWORDS = new Set([
|
|
15
|
-
'readonly', 'attribute', 'required', 'const', 'serializer', 'stringifier', 'inherit',
|
|
16
|
-
'static', 'getter', 'setter', 'deleter', 'legacycaller', 'iterable', 'maplike', 'setlike'
|
|
17
|
-
]);
|
|
18
|
-
// Helper to check if a word is likely a type or name
|
|
19
|
-
function isIdentifier(word) {
|
|
20
|
-
return /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(word);
|
|
21
|
-
}
|
|
22
8
|
export const IdlHtmlParser = {
|
|
23
9
|
name: 'IdlHtmlParser',
|
|
24
10
|
handles: ['pre'],
|
|
@@ -32,129 +18,7 @@ export const IdlHtmlParser = {
|
|
|
32
18
|
}
|
|
33
19
|
const content = ctx.getTextContent(element);
|
|
34
20
|
const sourcePos = ctx.createSourcePos(element);
|
|
35
|
-
const children =
|
|
36
|
-
// Tokenization State
|
|
37
|
-
let currentContext = 'top-level';
|
|
38
|
-
let contextName = null;
|
|
39
|
-
let expectingNameFor = null; // 'interface', 'dictionary', etc.
|
|
40
|
-
let expectingMemberName = false;
|
|
41
|
-
// Simple tokenizer: split by delimiters but keep them
|
|
42
|
-
// Delimiters: whitespace, {};(),=?
|
|
43
|
-
const tokens = content.split(/([ \t\n\r]+|[{};(),=?])/);
|
|
44
|
-
for (const token of tokens) {
|
|
45
|
-
if (!token)
|
|
46
|
-
continue;
|
|
47
|
-
// Handle whitespace/punctuation
|
|
48
|
-
if (/^[ \t\n\r]+$/.test(token) || /^[{};(),=?]$/.test(token)) {
|
|
49
|
-
children.push({ type: 'text', value: token, sourcePos }); // TODO: finer pos
|
|
50
|
-
// State transitions based on punctuation
|
|
51
|
-
if (token === '{') {
|
|
52
|
-
// Enter context
|
|
53
|
-
}
|
|
54
|
-
else if (token === '}') {
|
|
55
|
-
currentContext = 'top-level';
|
|
56
|
-
contextName = null;
|
|
57
|
-
}
|
|
58
|
-
else if (token === ';') {
|
|
59
|
-
expectingMemberName = false;
|
|
60
|
-
if (currentContext === 'top-level') {
|
|
61
|
-
expectingNameFor = null;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
continue;
|
|
65
|
-
}
|
|
66
|
-
// Handle Words
|
|
67
|
-
if (DEF_KEYWORDS.has(token)) {
|
|
68
|
-
children.push({ type: 'text', value: token, sourcePos });
|
|
69
|
-
expectingNameFor = token; // Next identifier is the name being defined
|
|
70
|
-
}
|
|
71
|
-
else if (IGNORED_KEYWORDS.has(token)) {
|
|
72
|
-
children.push({ type: 'text', value: token, sourcePos });
|
|
73
|
-
}
|
|
74
|
-
else if (isIdentifier(token)) {
|
|
75
|
-
// Decision: Definition or Reference?
|
|
76
|
-
if (expectingNameFor) {
|
|
77
|
-
// This is a Definition! (e.g., interface MyInterface)
|
|
78
|
-
const dfnType = expectingNameFor === 'interface' ? 'interface' :
|
|
79
|
-
expectingNameFor === 'dictionary' ? 'dictionary' :
|
|
80
|
-
expectingNameFor === 'enum' ? 'enum' : 'typedef';
|
|
81
|
-
children.push({
|
|
82
|
-
type: 'definition',
|
|
83
|
-
term: token,
|
|
84
|
-
dfnType,
|
|
85
|
-
sourcePos,
|
|
86
|
-
children: [{ type: 'text', value: token }]
|
|
87
|
-
});
|
|
88
|
-
contextName = token;
|
|
89
|
-
currentContext = dfnType;
|
|
90
|
-
expectingNameFor = null; // Reset
|
|
91
|
-
}
|
|
92
|
-
else if (contextName && (currentContext === 'interface' || currentContext === 'dictionary')) {
|
|
93
|
-
// We are inside an interface/dictionary.
|
|
94
|
-
// Is this a Type or a Member Name?
|
|
95
|
-
// Heuristic: If it's followed by (; or = or (), it's likely a member name.
|
|
96
|
-
// But we are processing stream.
|
|
97
|
-
// A better heuristic for IDL: Type MemberName;
|
|
98
|
-
// So if we just saw a Type, this is a MemberName.
|
|
99
|
-
// This simple tokenizer is too state-light for perfect parsing.
|
|
100
|
-
//
|
|
101
|
-
// Let's use a simpler heuristic:
|
|
102
|
-
// If it matches a known Type pattern (starts with Uppercase), treat as Reference.
|
|
103
|
-
// If it starts with lowercase, treat as Member Name (Definition), unless it's a primitive type.
|
|
104
|
-
const isPrimitive = ['long', 'unsigned', 'short', 'float', 'double', 'boolean', 'byte', 'octet', 'void', 'any', 'object'].includes(token);
|
|
105
|
-
if (isPrimitive) {
|
|
106
|
-
children.push({ type: 'text', value: token, sourcePos });
|
|
107
|
-
expectingMemberName = true; // Next lowercase identifier is likely the member
|
|
108
|
-
}
|
|
109
|
-
else if (/^[A-Z]/.test(token)) {
|
|
110
|
-
// Uppercase -> Likely a Type Reference
|
|
111
|
-
children.push({
|
|
112
|
-
type: 'workspaceIdlReference',
|
|
113
|
-
targetTerm: token,
|
|
114
|
-
children: [{ type: 'text', value: token }]
|
|
115
|
-
});
|
|
116
|
-
expectingMemberName = true;
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
// Lowercase -> Likely a Member Name (if we are expecting one)
|
|
120
|
-
// or a primitive type we missed?
|
|
121
|
-
if (expectingMemberName) {
|
|
122
|
-
const fullTerm = `${contextName}/${token}`;
|
|
123
|
-
children.push({
|
|
124
|
-
type: 'definition',
|
|
125
|
-
term: fullTerm,
|
|
126
|
-
dfnType: currentContext === 'interface' ? 'method' : 'field',
|
|
127
|
-
sourcePos,
|
|
128
|
-
children: [{ type: 'text', value: token }]
|
|
129
|
-
});
|
|
130
|
-
expectingMemberName = false;
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
// Just text?
|
|
134
|
-
children.push({ type: 'text', value: token, sourcePos });
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
// Default to text or reference?
|
|
140
|
-
// If it looks like a type, reference it.
|
|
141
|
-
if (/^[A-Z]/.test(token)) {
|
|
142
|
-
children.push({
|
|
143
|
-
type: 'workspaceIdlReference',
|
|
144
|
-
targetTerm: token,
|
|
145
|
-
children: [{ type: 'text', value: token }]
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
children.push({ type: 'text', value: token, sourcePos });
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
// Fallback for unknown tokens
|
|
155
|
-
children.push({ type: 'text', value: token, sourcePos });
|
|
156
|
-
}
|
|
157
|
-
}
|
|
21
|
+
const children = tokenizeIdlContent(content, sourcePos);
|
|
158
22
|
return {
|
|
159
23
|
type: 'idl',
|
|
160
24
|
value: content,
|