@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.
Files changed (148) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/parse/assembler.d.ts +1 -1
  6. package/dist/parse/assembler.d.ts.map +1 -1
  7. package/dist/parse/assembler.js +67 -13
  8. package/dist/parse/assembler.js.map +1 -1
  9. package/dist/parse/html/AsideHtmlParser.d.ts.map +1 -1
  10. package/dist/parse/html/AsideHtmlParser.js +85 -3
  11. package/dist/parse/html/AsideHtmlParser.js.map +1 -1
  12. package/dist/parse/html/CodeHtmlParser.d.ts.map +1 -1
  13. package/dist/parse/html/CodeHtmlParser.js +6 -2
  14. package/dist/parse/html/CodeHtmlParser.js.map +1 -1
  15. package/dist/parse/html/HeadingsHtmlParser.d.ts.map +1 -1
  16. package/dist/parse/html/HeadingsHtmlParser.js +3 -4
  17. package/dist/parse/html/HeadingsHtmlParser.js.map +1 -1
  18. package/dist/parse/html/IdlHtmlParser.d.ts +0 -4
  19. package/dist/parse/html/IdlHtmlParser.d.ts.map +1 -1
  20. package/dist/parse/html/IdlHtmlParser.js +2 -138
  21. package/dist/parse/html/IdlHtmlParser.js.map +1 -1
  22. package/dist/parse/html/MiscHtmlParser.d.ts.map +1 -1
  23. package/dist/parse/html/MiscHtmlParser.js +2 -42
  24. package/dist/parse/html/MiscHtmlParser.js.map +1 -1
  25. package/dist/parse/html/SectionsHtmlParser.d.ts.map +1 -1
  26. package/dist/parse/html/SectionsHtmlParser.js +17 -26
  27. package/dist/parse/html/SectionsHtmlParser.js.map +1 -1
  28. package/dist/parse/html/VocabHtmlParser.js +2 -2
  29. package/dist/parse/html/VocabHtmlParser.js.map +1 -1
  30. package/dist/parse/html/parser.d.ts +13 -4
  31. package/dist/parse/html/parser.d.ts.map +1 -1
  32. package/dist/parse/html/parser.js +96 -99
  33. package/dist/parse/html/parser.js.map +1 -1
  34. package/dist/parse/index.d.ts +1 -2
  35. package/dist/parse/index.d.ts.map +1 -1
  36. package/dist/parse/index.js +0 -1
  37. package/dist/parse/index.js.map +1 -1
  38. package/dist/parse/markdown/CodeMarkdownParser.d.ts.map +1 -1
  39. package/dist/parse/markdown/CodeMarkdownParser.js +20 -2
  40. package/dist/parse/markdown/CodeMarkdownParser.js.map +1 -1
  41. package/dist/parse/markdown/HeadingsMarkdownParser.d.ts.map +1 -1
  42. package/dist/parse/markdown/HeadingsMarkdownParser.js +6 -3
  43. package/dist/parse/markdown/HeadingsMarkdownParser.js.map +1 -1
  44. package/dist/parse/markdown/MdxMarkdownParser.d.ts.map +1 -1
  45. package/dist/parse/markdown/MdxMarkdownParser.js +54 -13
  46. package/dist/parse/markdown/MdxMarkdownParser.js.map +1 -1
  47. package/dist/parse/markdown/ShorthandsMarkdownParser.d.ts.map +1 -1
  48. package/dist/parse/markdown/ShorthandsMarkdownParser.js +57 -2
  49. package/dist/parse/markdown/ShorthandsMarkdownParser.js.map +1 -1
  50. package/dist/parse/markdown/parser.d.ts +12 -3
  51. package/dist/parse/markdown/parser.d.ts.map +1 -1
  52. package/dist/parse/markdown/parser.js +71 -80
  53. package/dist/parse/markdown/parser.js.map +1 -1
  54. package/dist/parse/markdown/plugins.d.ts.map +1 -1
  55. package/dist/parse/markdown/plugins.js +9 -2
  56. package/dist/parse/markdown/plugins.js.map +1 -1
  57. package/dist/parse/pipeline.d.ts.map +1 -1
  58. package/dist/parse/pipeline.js +35 -14
  59. package/dist/parse/pipeline.js.map +1 -1
  60. package/dist/parse/registry.d.ts +5 -5
  61. package/dist/parse/registry.d.ts.map +1 -1
  62. package/dist/parse/registry.js +12 -12
  63. package/dist/parse/registry.js.map +1 -1
  64. package/dist/parse/source-mapper.d.ts +42 -0
  65. package/dist/parse/source-mapper.d.ts.map +1 -0
  66. package/dist/parse/source-mapper.js +117 -0
  67. package/dist/parse/source-mapper.js.map +1 -0
  68. package/dist/parse/types.d.ts +20 -9
  69. package/dist/parse/types.d.ts.map +1 -1
  70. package/dist/parse/types.js +2 -13
  71. package/dist/parse/types.js.map +1 -1
  72. package/dist/parse/utils/hast-utils.d.ts.map +1 -1
  73. package/dist/parse/utils/hast-utils.js +63 -28
  74. package/dist/parse/utils/hast-utils.js.map +1 -1
  75. package/dist/parse/utils/idl-tokenizer.d.ts +7 -0
  76. package/dist/parse/utils/idl-tokenizer.d.ts.map +1 -0
  77. package/dist/parse/utils/idl-tokenizer.js +137 -0
  78. package/dist/parse/utils/idl-tokenizer.js.map +1 -0
  79. package/dist/pipeline/index.d.ts.map +1 -1
  80. package/dist/pipeline/index.js +1 -0
  81. package/dist/pipeline/index.js.map +1 -1
  82. package/dist/pipeline/runner.d.ts.map +1 -1
  83. package/dist/pipeline/runner.js +10 -4
  84. package/dist/pipeline/runner.js.map +1 -1
  85. package/dist/pipeline/types.d.ts +2 -0
  86. package/dist/pipeline/types.d.ts.map +1 -1
  87. package/dist/postprocess/index.d.ts +3 -1
  88. package/dist/postprocess/index.d.ts.map +1 -1
  89. package/dist/postprocess/index.js +9 -3
  90. package/dist/postprocess/index.js.map +1 -1
  91. package/dist/postprocess/plugins/bibliography-generator.d.ts.map +1 -1
  92. package/dist/postprocess/plugins/bibliography-generator.js +20 -3
  93. package/dist/postprocess/plugins/bibliography-generator.js.map +1 -1
  94. package/dist/postprocess/plugins/citation-resolve.d.ts.map +1 -1
  95. package/dist/postprocess/plugins/citation-resolve.js +255 -11
  96. package/dist/postprocess/plugins/citation-resolve.js.map +1 -1
  97. package/dist/postprocess/plugins/example-index.d.ts +16 -0
  98. package/dist/postprocess/plugins/example-index.d.ts.map +1 -0
  99. package/dist/postprocess/plugins/example-index.js +131 -0
  100. package/dist/postprocess/plugins/example-index.js.map +1 -0
  101. package/dist/postprocess/plugins/note-index.d.ts +14 -0
  102. package/dist/postprocess/plugins/note-index.d.ts.map +1 -0
  103. package/dist/postprocess/plugins/note-index.js +103 -0
  104. package/dist/postprocess/plugins/note-index.js.map +1 -0
  105. package/dist/postprocess/plugins/note-shorthands.d.ts +11 -0
  106. package/dist/postprocess/plugins/note-shorthands.d.ts.map +1 -0
  107. package/dist/postprocess/plugins/note-shorthands.js +298 -0
  108. package/dist/postprocess/plugins/note-shorthands.js.map +1 -0
  109. package/dist/postprocess/plugins/reference-resolve.d.ts.map +1 -1
  110. package/dist/postprocess/plugins/reference-resolve.js +46 -1
  111. package/dist/postprocess/plugins/reference-resolve.js.map +1 -1
  112. package/dist/postprocess/plugins/toc.d.ts.map +1 -1
  113. package/dist/postprocess/plugins/toc.js +20 -16
  114. package/dist/postprocess/plugins/toc.js.map +1 -1
  115. package/dist/postprocess/walk-ast.d.ts +5 -1
  116. package/dist/postprocess/walk-ast.d.ts.map +1 -1
  117. package/dist/postprocess/walk-ast.js +8 -0
  118. package/dist/postprocess/walk-ast.js.map +1 -1
  119. package/dist/preprocess/config/doc-config.d.ts +4 -1
  120. package/dist/preprocess/config/doc-config.d.ts.map +1 -1
  121. package/dist/preprocess/config/doc-config.js +6 -3
  122. package/dist/preprocess/config/doc-config.js.map +1 -1
  123. package/dist/preprocess/config/normalize.d.ts.map +1 -1
  124. package/dist/preprocess/config/normalize.js +34 -11
  125. package/dist/preprocess/config/normalize.js.map +1 -1
  126. package/dist/preprocess/config/types.d.ts +7 -3
  127. package/dist/preprocess/config/types.d.ts.map +1 -1
  128. package/dist/preprocess/include/resolver.d.ts.map +1 -1
  129. package/dist/preprocess/include/resolver.js +86 -32
  130. package/dist/preprocess/include/resolver.js.map +1 -1
  131. package/dist/preprocess/include/scan-html.js +1 -1
  132. package/dist/preprocess/include/scan-html.js.map +1 -1
  133. package/dist/preprocess/index.d.ts +1 -1
  134. package/dist/preprocess/index.d.ts.map +1 -1
  135. package/dist/preprocess/index.js.map +1 -1
  136. package/dist/preprocess/pipeline.d.ts.map +1 -1
  137. package/dist/preprocess/pipeline.js +1 -1
  138. package/dist/preprocess/pipeline.js.map +1 -1
  139. package/dist/preprocess/types.d.ts +25 -13
  140. package/dist/preprocess/types.d.ts.map +1 -1
  141. package/dist/types/ast.generated.d.ts +36 -11
  142. package/dist/types/ast.generated.d.ts.map +1 -1
  143. package/dist/types/ast.generated.js +1 -1
  144. package/dist/types/ast.generated.js.map +1 -1
  145. package/dist/workspace/sort.js +1 -1
  146. package/dist/workspace/sort.js.map +1 -1
  147. package/package.json +2 -2
  148. 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
@@ -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;AAkDxD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAmEtF;AAgHD;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,EAC3B,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,MAAM,GAClB,QAAQ,CA2BV"}
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"}
@@ -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.unnumbered) {
41
- section.unnumbered = true;
42
- section.heading.unnumbered = true;
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;IAC7D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,MAAM,GAAwB,EAAE,CAAC;IAEvC,mDAAmD;IACnD,qDAAqD;IACrD,MAAM,YAAY,GAAsD;QACpE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;KAC9B,CAAC;IAEF;;OAEG;IACH,SAAS,mBAAmB;QACxB,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;QAChC,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,SAAS,UAAU,CAAC,WAAmB;QACnC,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAClD,IAAI,GAAG,CAAC,KAAK,GAAG,WAAW;gBAAE,MAAM;YACnC,YAAY,CAAC,GAAG,EAAE,CAAC;QACvB,CAAC;IACL,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,0EAA0E;YAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC;YAE9C,2BAA2B;YAC3B,UAAU,CAAC,YAAY,CAAC,CAAC;YAEzB,2BAA2B;YAC3B,mBAAmB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEjC,+BAA+B;YAC/B,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAC9D,CAAC;aAAM,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;YAEhC,0CAA0C;YAC1C,UAAU,CAAC,YAAY,CAAC,CAAC;YAEzB,kCAAkC;YAClC,MAAM,UAAU,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;YAElD,2BAA2B;YAC3B,mBAAmB,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEvC,8BAA8B;YAC9B,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACJ,2CAA2C;YAC3C,mBAAmB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,MAAkB;IACxC,MAAM,IAAI,GAAqB,EAAE,CAAC;IAClC,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC5C,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,KAAK;SACjB,CAAC,CAAC,CAAC;QACJ,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,KAAK;SACjB,CAAC,CAAC,CAAC;QACJ,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;YACnD,CAAC,CAAC,MAAM,CAAC,UAAU;YACnB,CAAC,CAAC;gBACE,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG;gBAC1B,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM;gBAChC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI;aACnC,CAAC;QACN,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;YACzC,CAAC,CAAC,MAAM,CAAC,KAAK;YACd,CAAC,CAAC;gBACE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;gBACvB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG;aACxB,CAAC;QACN,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,UAAU,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC5B,MAA2B,EAC3B,MAAkB,EAClB,SAAiB;IAEjB,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE/C,kBAAkB;IAClB,MAAM,GAAG,GAAa;QAClB,IAAI,EAAE,UAAU;QAChB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,QAAQ;KACX,CAAC;IAEF,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,QAAQ,EAAE,CAAC;QACX,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAID,kCAAkC;IAClC,GAAG,CAAC,SAAS,GAAG;QACZ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;KACZ,CAAC;IAEF,OAAO,GAAG,CAAC;AACf,CAAC"}
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;AAgC9F;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,gBA6C7B,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;IACzB,KAAK,EAAE,CAAC,EAAE,wDAAwD;IAElE,WAAW,CAAC,OAAgB,EAAE,GAAiB;QAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAE9C,oCAAoC;QACpC,yCAAyC;QACzC,IAAI,QAAyB,CAAC;QAE9B,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACtB,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC;QACnD,CAAC;aAAM,CAAC;YACJ,oBAAoB;YACpB,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,8CAA8C;gBAC9C,OAAO,GAAG,CAAC,sBAAsB,CAAC,OAAO,CAAC,QAAyB,CAAC,CAAC;YACzE,CAAC;QACL,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEtC,mEAAmE;QACnE,MAAM,WAAW,GAAG,GAAG,CAAC,sBAAsB,CAAC,OAAO,CAAC,QAAyB,CAAC,CAAC;QAClF,yDAAyD;QACzD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAc,EAAE,CAClD,CAAC,CAAC,IAAI,KAAK,SAAS,CACvB,CAAC;QAEF,MAAM,MAAM,GAAc;YACtB,IAAI,EAAE,MAAM;YACZ,QAAQ;YACR,WAAW,EAAE,IAAI,EAAE,qBAAqB;YACxC,QAAQ;SACX,CAAC;QAEF,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
+ {"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,gBAkC5B,CAAC"}
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
- if (codeEl) {
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,qCAAqC;QACrC,IAAI,MAAM,EAAE,CAAC;YACT,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
+ {"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,gBA8BhC,CAAC"}
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 className = ctx.getAttr(element, 'className') ?? '';
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 (unnumbered)
31
- result.unnumbered = true;
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,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC/C,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC5D,CAAC;QAEF,IAAI,EAAE;YAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;QACvB,IAAI,cAAc;YAAE,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC;QAC3D,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"}
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;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAoC,MAAM,qBAAqB,CAAC;AAkB9F,eAAO,MAAM,aAAa,EAAE,gBAkJ3B,CAAC"}
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,