@openuji/speculator 0.7.3 → 0.7.4
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/parse/html/SpecStatementHtmlParser.d.ts +4 -1
- package/dist/parse/html/SpecStatementHtmlParser.d.ts.map +1 -1
- package/dist/parse/html/SpecStatementHtmlParser.js +42 -26
- package/dist/parse/html/SpecStatementHtmlParser.js.map +1 -1
- package/dist/parse/html/parser.d.ts.map +1 -1
- package/dist/parse/html/parser.js +25 -1
- package/dist/parse/html/parser.js.map +1 -1
- package/dist/parse/index.d.ts +1 -0
- package/dist/parse/index.d.ts.map +1 -1
- package/dist/parse/index.js +2 -0
- package/dist/parse/index.js.map +1 -1
- package/dist/parse/markdown/HtmlBlockMarkdownParser.d.ts.map +1 -1
- package/dist/parse/markdown/HtmlBlockMarkdownParser.js +2 -1
- package/dist/parse/markdown/HtmlBlockMarkdownParser.js.map +1 -1
- package/dist/parse/markdown/parser.d.ts.map +1 -1
- package/dist/parse/markdown/parser.js +6 -2
- package/dist/parse/markdown/parser.js.map +1 -1
- package/dist/parse/utils/hast-utils.d.ts.map +1 -1
- package/dist/parse/utils/hast-utils.js +110 -7
- package/dist/parse/utils/hast-utils.js.map +1 -1
- package/dist/parse/utils/markdown-utils.d.ts +18 -0
- package/dist/parse/utils/markdown-utils.d.ts.map +1 -1
- package/dist/parse/utils/markdown-utils.js +142 -0
- package/dist/parse/utils/markdown-utils.js.map +1 -1
- package/dist/parse/utils/normative.js +3 -3
- package/dist/parse/utils/normative.js.map +1 -1
- package/dist/postprocess/index.d.ts +1 -0
- package/dist/postprocess/index.d.ts.map +1 -1
- package/dist/postprocess/index.js +3 -0
- package/dist/postprocess/index.js.map +1 -1
- package/dist/postprocess/plugins/statement-distribute.d.ts +13 -0
- package/dist/postprocess/plugins/statement-distribute.d.ts.map +1 -0
- package/dist/postprocess/plugins/statement-distribute.js +112 -0
- package/dist/postprocess/plugins/statement-distribute.js.map +1 -0
- package/dist/postprocess/plugins/statement-index.d.ts.map +1 -1
- package/dist/postprocess/plugins/statement-index.js +20 -17
- package/dist/postprocess/plugins/statement-index.js.map +1 -1
- package/dist/postprocess/plugins/statementsJsonLd-compute.d.ts.map +1 -1
- package/dist/postprocess/plugins/statementsJsonLd-compute.js +1 -0
- package/dist/postprocess/plugins/statementsJsonLd-compute.js.map +1 -1
- package/dist/postprocess/walk-ast.d.ts +7 -15
- package/dist/postprocess/walk-ast.d.ts.map +1 -1
- package/dist/postprocess/walk-ast.js +48 -57
- package/dist/postprocess/walk-ast.js.map +1 -1
- package/dist/types/ast.generated.d.ts +33 -4
- 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/package.json +1 -1
- package/schema/spec-ast.schema.json +85 -3
|
@@ -24,6 +24,16 @@ export function parseMarkdownInlines(text) {
|
|
|
24
24
|
}
|
|
25
25
|
return inlines;
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Parse a string as Markdown blocks.
|
|
29
|
+
*/
|
|
30
|
+
export function parseMarkdownBlocks(text) {
|
|
31
|
+
if (!text || !text.trim())
|
|
32
|
+
return [];
|
|
33
|
+
const processor = unified().use(remarkParse).use(remarkGfm);
|
|
34
|
+
const tree = processor.parse(text);
|
|
35
|
+
return tree.children;
|
|
36
|
+
}
|
|
27
37
|
const FENCED_CODE_START = /^(\s{0,3})(?:```|~~~)/;
|
|
28
38
|
const TABLE_SEPARATOR = /^\s*\|?[\s:|-]+\|[\s:|-]*\|?\s*$/;
|
|
29
39
|
/**
|
|
@@ -94,4 +104,136 @@ export function escapeShorthandPipesInTables(content) {
|
|
|
94
104
|
}
|
|
95
105
|
return result.join('\n');
|
|
96
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Preserve custom HTML element blocks across blank lines.
|
|
109
|
+
*
|
|
110
|
+
* CommonMark type-7 HTML blocks (custom tags like <spec-statement>)
|
|
111
|
+
* terminate at blank lines. This replaces blank lines inside such blocks
|
|
112
|
+
* with <!-- --> comments, preventing remark from splitting the block.
|
|
113
|
+
* Custom elements are identified by tag names containing a hyphen
|
|
114
|
+
* (web component naming convention).
|
|
115
|
+
*
|
|
116
|
+
* Also ensures a blank line is inserted before a custom element when
|
|
117
|
+
* it immediately follows paragraph-level content (e.g. a <dfn> line)
|
|
118
|
+
* to prevent remark from merging both into a single paragraph.
|
|
119
|
+
*/
|
|
120
|
+
export function preserveCustomHtmlBlocks(content) {
|
|
121
|
+
const lines = content.split('\n');
|
|
122
|
+
const result = [];
|
|
123
|
+
let insideTag = null;
|
|
124
|
+
for (let i = 0; i < lines.length; i++) {
|
|
125
|
+
const line = lines[i];
|
|
126
|
+
if (!insideTag) {
|
|
127
|
+
// Check for custom element opening tag (tag name contains hyphen)
|
|
128
|
+
// Allow list markers (-, *, +, 1.) before the tag
|
|
129
|
+
const match = line.match(/^(\s*(?:[-*+]|\d+\.)?\s*<[a-z][a-z0-9]*-[a-z0-9-]*(?:\s[^>]*)?>)(.*)/i);
|
|
130
|
+
if (match) {
|
|
131
|
+
const tagOnly = match[1];
|
|
132
|
+
const afterTag = match[2];
|
|
133
|
+
const tagNameMatch = tagOnly.match(/<([a-z][a-z0-9]*-[a-z0-9-]*)/i);
|
|
134
|
+
const tagName = tagNameMatch[1];
|
|
135
|
+
// Assumption: we are entering a block
|
|
136
|
+
insideTag = tagName;
|
|
137
|
+
// Check if the block closes on the same line (inline usage)
|
|
138
|
+
// The closing tag could be in afterTag
|
|
139
|
+
if (afterTag.includes(`</${tagName}>`)) {
|
|
140
|
+
insideTag = null;
|
|
141
|
+
}
|
|
142
|
+
// Ensure a blank line precedes the custom element so remark
|
|
143
|
+
// treats it as a standalone HTML block instead of merging it
|
|
144
|
+
// into the preceding paragraph (e.g. a <dfn> line).
|
|
145
|
+
// Only insert when the previous line is paragraph-level content
|
|
146
|
+
// (not an HTML block tag, not another custom element, not blank).
|
|
147
|
+
if (result.length > 0 && needsBlankLineBefore(result[result.length - 1])) {
|
|
148
|
+
result.push('');
|
|
149
|
+
}
|
|
150
|
+
// Check if this line also has the closing tag (self-closing on one line)
|
|
151
|
+
if (line.includes(`</${insideTag}>`)) {
|
|
152
|
+
insideTag = null;
|
|
153
|
+
result.push(line);
|
|
154
|
+
}
|
|
155
|
+
else if (afterTag.trim()) {
|
|
156
|
+
// Content after the opening tag on the same line prevents
|
|
157
|
+
// CommonMark type-7 HTML block recognition. Split it so the
|
|
158
|
+
// tag is on its own line and content follows.
|
|
159
|
+
// We must indent the content to keep it within the parent list item (if any).
|
|
160
|
+
// A safe heuristic is to indent to the same level as the tag's start,
|
|
161
|
+
// plus a standard indent (e.g. 2 spaces) or simply align with the tag.
|
|
162
|
+
// Actually, for list items, we want to align with the *content* start.
|
|
163
|
+
// If the line starts with `- <tag>`, indentation should match `<tag>`.
|
|
164
|
+
// Match indentation and marker
|
|
165
|
+
const prefixMatch = tagOnly.match(/^(\s*(?:[-*+]|\d+\.)?\s*)/);
|
|
166
|
+
const prefix = prefixMatch ? prefixMatch[1] : '';
|
|
167
|
+
// Use a string of spaces equal to length of prefix (replacing marker with spaces)
|
|
168
|
+
const indentation = ' '.repeat(prefix.length);
|
|
169
|
+
result.push(tagOnly);
|
|
170
|
+
result.push(indentation + afterTag);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
result.push(line);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
result.push(line);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
// Inside a custom element block
|
|
182
|
+
if (line.includes(`</${insideTag}>`)) {
|
|
183
|
+
insideTag = null;
|
|
184
|
+
result.push(line);
|
|
185
|
+
}
|
|
186
|
+
else if (line.trim() === '') {
|
|
187
|
+
// Replace blank line with magic token to prevent remark from splitting the block.
|
|
188
|
+
// We use a text string that won't trigger any block start.
|
|
189
|
+
result.push('__SPECULATOR_BLANK_LINE__');
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
result.push(line);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return result.join('\n');
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* CommonMark type-6 block-level HTML tags that start their own HTML block.
|
|
200
|
+
* Lines starting with these tags are already treated as HTML blocks by remark,
|
|
201
|
+
* so we must not insert a blank line between them and a following custom element.
|
|
202
|
+
*/
|
|
203
|
+
const HTML_BLOCK_TAGS = new Set([
|
|
204
|
+
'address', 'article', 'aside', 'base', 'basefont', 'blockquote', 'body',
|
|
205
|
+
'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dialog', 'dir',
|
|
206
|
+
'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer', 'form',
|
|
207
|
+
'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header',
|
|
208
|
+
'hr', 'html', 'iframe', 'legend', 'li', 'link', 'main', 'menu', 'menuitem',
|
|
209
|
+
'nav', 'noframes', 'ol', 'optgroup', 'option', 'p', 'param', 'search',
|
|
210
|
+
'section', 'summary', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead',
|
|
211
|
+
'title', 'tr', 'track', 'ul',
|
|
212
|
+
]);
|
|
213
|
+
/**
|
|
214
|
+
* Check if the line before a custom element needs a blank line inserted.
|
|
215
|
+
* Returns true only when the previous line is paragraph-level content
|
|
216
|
+
* (not an HTML block start, not a custom element, not blank/closing tag).
|
|
217
|
+
*/
|
|
218
|
+
function needsBlankLineBefore(prevLine) {
|
|
219
|
+
const trimmed = prevLine.trim();
|
|
220
|
+
if (trimmed === '')
|
|
221
|
+
return false;
|
|
222
|
+
// Check if it starts with an HTML tag
|
|
223
|
+
const tagMatch = trimmed.match(/^<\/?([a-z][a-z0-9-]*)/i);
|
|
224
|
+
if (tagMatch) {
|
|
225
|
+
const tagName = tagMatch[1].toLowerCase();
|
|
226
|
+
// CommonMark type-6 block tags — already an HTML block, don't split
|
|
227
|
+
if (HTML_BLOCK_TAGS.has(tagName))
|
|
228
|
+
return false;
|
|
229
|
+
// Custom element (hyphenated) — already an HTML block, don't split
|
|
230
|
+
if (tagName.includes('-'))
|
|
231
|
+
return false;
|
|
232
|
+
// Closing tags (</...>) — part of an HTML block, don't split
|
|
233
|
+
if (trimmed.startsWith('</'))
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
// The line is paragraph-level content (e.g. "<dfn>Phase</dfn> is ...")
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
97
239
|
//# sourceMappingURL=markdown-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-utils.js","sourceRoot":"","sources":["../../../src/parse/utils/markdown-utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"markdown-utils.js","sourceRoot":"","sources":["../../../src/parse/utils/markdown-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AAGnC;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC7C,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,SAAS,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAS,CAAC;IAE3C,6DAA6D;IAC7D,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,GAAI,KAAmB,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AACD;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC5C,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,SAAS,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAS,CAAC;IAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC;AACzB,CAAC;AAED,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAClD,MAAM,eAAe,GAAG,kCAAkC,CAAC;AAE3D;;GAEG;AACH,SAAS,oBAAoB,CAAC,IAAY;IACtC,OAAO,IAAI;QACP,kDAAkD;SACjD,OAAO,CAAC,8BAA8B,EAAE,SAAS,CAAC;QACnD,4CAA4C;SAC3C,OAAO,CAAC,4BAA4B,EAAE,SAAS,CAAC;QACjD,4BAA4B;SAC3B,OAAO,CAAC,8BAA8B,EAAE,UAAU,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,OAAe;IACxD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,6BAA6B;QAC7B,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC,EAAE,CAAC;YACJ,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtB,CAAC,EAAE,CAAC;YACR,CAAC;YACD,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtB,CAAC,EAAE,CAAC;YACR,CAAC;YACD,SAAS;QACb,CAAC;QAED,yBAAyB;QACzB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9D,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjC,OAAO,GAAG,IAAI,CAAC;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;oBAClE,QAAQ,GAAG,CAAC,CAAC;gBACjB,CAAC;gBACD,IAAI,QAAQ,KAAK,CAAC;oBAAE,QAAQ,GAAG,CAAC,CAAC;gBACjC,MAAM;YACV,CAAC;QACL,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACnB,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1B,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,CAAC;gBACD,CAAC,EAAE,CAAC;YACR,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC,EAAE,CAAC;QACR,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAe;IAGpD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,SAAS,GAAkB,IAAI,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,kEAAkE;YAClE,kDAAkD;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;YAClG,IAAI,KAAK,EAAE,CAAC;gBACR,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBACpE,MAAM,OAAO,GAAG,YAAa,CAAC,CAAC,CAAC,CAAC;gBAEjC,sCAAsC;gBACtC,SAAS,GAAG,OAAO,CAAC;gBAEpB,4DAA4D;gBAC5D,uCAAuC;gBACvC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,OAAO,GAAG,CAAC,EAAE,CAAC;oBACrC,SAAS,GAAG,IAAI,CAAC;gBACrB,CAAC;gBAED,4DAA4D;gBAC5D,6DAA6D;gBAC7D,oDAAoD;gBACpD,gEAAgE;gBAChE,kEAAkE;gBAClE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACpB,CAAC;gBACD,yEAAyE;gBACzE,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,GAAG,CAAC,EAAE,CAAC;oBACnC,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC;qBAAM,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;oBACzB,0DAA0D;oBAC1D,4DAA4D;oBAC5D,8CAA8C;oBAE9C,8EAA8E;oBAC9E,sEAAsE;oBACtE,uEAAuE;oBACvE,uEAAuE;oBACvE,uEAAuE;oBAEvE,+BAA+B;oBAC/B,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;oBAC/D,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAEjD,kFAAkF;oBAClF,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAE9C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACrB,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC;gBACxC,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,gCAAgC;YAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,GAAG,CAAC,EAAE,CAAC;gBACnC,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC5B,kFAAkF;gBAClF,2DAA2D;gBAC3D,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC5B,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM;IACvE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK;IACxE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM;IACvE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ;IACzE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU;IAC1E,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ;IACrE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO;IACpE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI;CAC/B,CAAC,CAAC;AAEH;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,QAAgB;IAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IAEjC,sCAAsC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC1D,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1C,oEAAoE;QACpE,IAAI,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/C,mEAAmE;QACnE,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACxC,6DAA6D;QAC7D,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;IAC/C,CAAC;IAED,uEAAuE;IACvE,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -48,13 +48,13 @@ export function inferLevel(text) {
|
|
|
48
48
|
foundLevels.add('SHOULD NOT');
|
|
49
49
|
// Check positive forms
|
|
50
50
|
// Note: we check if they are NOT followed by NOT to avoid double matching
|
|
51
|
-
if (/\b(MUST|SHALL
|
|
51
|
+
if (/\b(MUST|SHALL)\b/.test(upperText) && !/\b(MUST|SHALL) NOT\b/.test(upperText)) {
|
|
52
52
|
foundLevels.add('MUST');
|
|
53
53
|
}
|
|
54
|
-
if (/\b(SHOULD
|
|
54
|
+
if (/\b(SHOULD)\b/.test(upperText) && !/\bSHOULD NOT\b/.test(upperText)) {
|
|
55
55
|
foundLevels.add('SHOULD');
|
|
56
56
|
}
|
|
57
|
-
if (/\b(MAY
|
|
57
|
+
if (/\b(MAY)\b/.test(upperText)) {
|
|
58
58
|
foundLevels.add('MAY');
|
|
59
59
|
}
|
|
60
60
|
if (foundLevels.size === 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normative.js","sourceRoot":"","sources":["../../../src/parse/utils/normative.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8BH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAmC;IAC9D,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,UAAU;IACtB,WAAW,EAAE,UAAU;IACvB,QAAQ,EAAE,QAAQ;IAClB,aAAa,EAAE,QAAQ;IACvB,YAAY,EAAE,YAAY;IAC1B,KAAK,EAAE,KAAK;IACZ,UAAU,EAAE,KAAK;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAiB;IAChE,MAAM;IACN,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,KAAK;CACR,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACvC,OAAO,4BAA4B,CAAC,GAAG,CAAC,KAAuB,CAAC,CAAC;AACrE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACnC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAErC,4BAA4B;IAC5B,IAAI,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5E,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAEpE,uBAAuB;IACvB,0EAA0E;IAC1E,IAAI,
|
|
1
|
+
{"version":3,"file":"normative.js","sourceRoot":"","sources":["../../../src/parse/utils/normative.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8BH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAmC;IAC9D,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,UAAU;IACtB,WAAW,EAAE,UAAU;IACvB,QAAQ,EAAE,QAAQ;IAClB,aAAa,EAAE,QAAQ;IACvB,YAAY,EAAE,YAAY;IAC1B,KAAK,EAAE,KAAK;IACZ,UAAU,EAAE,KAAK;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAiB;IAChE,MAAM;IACN,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,KAAK;CACR,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACvC,OAAO,4BAA4B,CAAC,GAAG,CAAC,KAAuB,CAAC,CAAC;AACrE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACnC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAErC,4BAA4B;IAC5B,IAAI,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5E,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAEpE,uBAAuB;IACvB,0EAA0E;IAC1E,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAChF,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACtE,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAC1C,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC;QAAE,OAAO,WAAW,CAAC;IAE7C,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* Note: Parsing logic has been moved to dedicated parser modules in src/parse/.
|
|
8
8
|
*/
|
|
9
9
|
export { conformanceBoilerplatePlugin } from './plugins/conformance-boilerplate.js';
|
|
10
|
+
export { statementDistributePlugin } from './plugins/statement-distribute.js';
|
|
10
11
|
export { sectionIdPlugin } from './plugins/section-id.js';
|
|
11
12
|
export { dfnIndexPlugin } from './plugins/dfn-index.js';
|
|
12
13
|
export { biblioIndexPlugin } from './plugins/biblio-index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/postprocess/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/postprocess/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAG9E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AAGtF,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAqB9D,eAAO,MAAM,WAAW,gCAkBvB,CAAC"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
// Transform plugins
|
|
10
10
|
export { conformanceBoilerplatePlugin } from './plugins/conformance-boilerplate.js';
|
|
11
|
+
export { statementDistributePlugin } from './plugins/statement-distribute.js';
|
|
11
12
|
// Index plugins
|
|
12
13
|
export { sectionIdPlugin } from './plugins/section-id.js';
|
|
13
14
|
export { dfnIndexPlugin } from './plugins/dfn-index.js';
|
|
@@ -30,6 +31,7 @@ export { walkDocument } from './walk-ast.js';
|
|
|
30
31
|
* Phase execution order: transform → index → resolve → compute → render
|
|
31
32
|
*/
|
|
32
33
|
import { conformanceBoilerplatePlugin } from './plugins/conformance-boilerplate.js';
|
|
34
|
+
import { statementDistributePlugin } from './plugins/statement-distribute.js';
|
|
33
35
|
import { sectionIdPlugin } from './plugins/section-id.js';
|
|
34
36
|
import { dfnIndexPlugin } from './plugins/dfn-index.js';
|
|
35
37
|
import { biblioIndexPlugin } from './plugins/biblio-index.js';
|
|
@@ -44,6 +46,7 @@ import { statementsJsonLdComputePlugin } from './plugins/statementsJsonLd-comput
|
|
|
44
46
|
export const corePlugins = [
|
|
45
47
|
// Transform plugins
|
|
46
48
|
conformanceBoilerplatePlugin, // order: { transform: 20 }
|
|
49
|
+
statementDistributePlugin, // order: { transform: 25 }
|
|
47
50
|
// Index plugins
|
|
48
51
|
sectionIdPlugin, // order: { index: 5 }
|
|
49
52
|
dfnIndexPlugin, // order: { index: 10 }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/postprocess/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,oBAAoB;AACpB,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/postprocess/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,oBAAoB;AACpB,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,gBAAgB;AAChB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,kBAAkB;AAClB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,kBAAkB;AAClB,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AAEtF,YAAY;AACZ,OAAO,EAAE,YAAY,EAAmB,MAAM,eAAe,CAAC;AAE9D;;;;GAIG;AACH,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AAEtF,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,oBAAoB;IACpB,4BAA4B,EAAE,2BAA2B;IACzD,yBAAyB,EAAI,2BAA2B;IACxD,gBAAgB;IAChB,eAAe,EAAa,sBAAsB;IAClD,cAAc,EAAc,uBAAuB;IACnD,iBAAiB,EAAW,sBAAsB;IAClD,mBAAmB,EAAS,uBAAuB;IACnD,oBAAoB,EAAQ,uBAAuB;IACnD,kBAAkB;IAClB,sBAAsB,EAAM,yBAAyB;IACrD,qBAAqB,EAAO,yBAAyB;IACrD,kBAAkB;IAClB,2BAA2B,EAAE,wBAAwB;IACrD,SAAS,EAAmB,yBAAyB;IACrD,oBAAoB,EAAQ,yBAAyB;IACrD,6BAA6B,EAAE,yBAAyB;CAC3D,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Statement Distribute Plugin
|
|
3
|
+
*
|
|
4
|
+
* Walks the AST for specStatement nodes that contain lists or tables,
|
|
5
|
+
* and distributes normative properties (level, contentText, tempId, dataCopConcept)
|
|
6
|
+
* to individual listItem / tableRow children.
|
|
7
|
+
*
|
|
8
|
+
* This keeps the parser isolated — the parser just reads attributes and delegates
|
|
9
|
+
* child parsing. This plugin decides how to handle the resulting structure.
|
|
10
|
+
*/
|
|
11
|
+
import type { Plugin } from '#src/pipeline/types';
|
|
12
|
+
export declare const statementDistributePlugin: Plugin;
|
|
13
|
+
//# sourceMappingURL=statement-distribute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statement-distribute.d.ts","sourceRoot":"","sources":["../../../src/postprocess/plugins/statement-distribute.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AA4GpE,eAAO,MAAM,yBAAyB,EAAE,MAOvC,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Statement Distribute Plugin
|
|
3
|
+
*
|
|
4
|
+
* Walks the AST for specStatement nodes that contain lists or tables,
|
|
5
|
+
* and distributes normative properties (level, contentText, tempId, dataCopConcept)
|
|
6
|
+
* to individual listItem / tableRow children.
|
|
7
|
+
*
|
|
8
|
+
* This keeps the parser isolated — the parser just reads attributes and delegates
|
|
9
|
+
* child parsing. This plugin decides how to handle the resulting structure.
|
|
10
|
+
*/
|
|
11
|
+
import { walkDocument } from '#src/postprocess/walk-ast';
|
|
12
|
+
import { slugify, toPlainText } from '#src/parse/normalize';
|
|
13
|
+
import { inferLevel } from '#src/parse/utils/normative';
|
|
14
|
+
function distributeToList(list, stmt, prefix) {
|
|
15
|
+
if (!list.children)
|
|
16
|
+
return false;
|
|
17
|
+
let modified = false;
|
|
18
|
+
for (const item of list.children) {
|
|
19
|
+
if (item.type === 'listItem') {
|
|
20
|
+
if (item.children.length == 2) {
|
|
21
|
+
const first = item.children[0];
|
|
22
|
+
const second = item.children[1];
|
|
23
|
+
if (first.type === 'paragraph' && second.type === 'list') {
|
|
24
|
+
const childPrefix = toPlainText(first.children).trim();
|
|
25
|
+
distributeToList(second, stmt, [prefix, childPrefix].join(' '));
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const itemText = toPlainText(item.children).trim();
|
|
30
|
+
const fullText = prefix + (prefix ? ' ' : '') + itemText;
|
|
31
|
+
const level = inferLevel(fullText);
|
|
32
|
+
// Apply statement properties to list item
|
|
33
|
+
const listItem = item;
|
|
34
|
+
listItem.level = level;
|
|
35
|
+
listItem.contentText = fullText;
|
|
36
|
+
listItem.tempId = slugify(fullText);
|
|
37
|
+
if (stmt.dataCopConcept) {
|
|
38
|
+
listItem.dataCopConcept = stmt.dataCopConcept;
|
|
39
|
+
}
|
|
40
|
+
modified = true;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return modified;
|
|
44
|
+
}
|
|
45
|
+
function distributeToTable(table, stmt, prefix) {
|
|
46
|
+
if (!table.children)
|
|
47
|
+
return false;
|
|
48
|
+
let modified = false;
|
|
49
|
+
for (const row of table.children) {
|
|
50
|
+
if (row.type !== 'tableRow')
|
|
51
|
+
continue;
|
|
52
|
+
const isHeader = row.children.some((cell) => cell.header);
|
|
53
|
+
if (isHeader)
|
|
54
|
+
continue;
|
|
55
|
+
const tableRow = row;
|
|
56
|
+
const rowText = tableRow.children
|
|
57
|
+
.map((cell) => toPlainText([cell]).trim())
|
|
58
|
+
.filter((text) => text.length > 0)
|
|
59
|
+
.join(' ');
|
|
60
|
+
if (!rowText)
|
|
61
|
+
continue;
|
|
62
|
+
const fullText = prefix + (prefix ? ' ' : '') + rowText;
|
|
63
|
+
const level = inferLevel(fullText);
|
|
64
|
+
tableRow.level = level;
|
|
65
|
+
tableRow.contentText = fullText;
|
|
66
|
+
tableRow.tempId = slugify(fullText);
|
|
67
|
+
if (stmt.dataCopConcept) {
|
|
68
|
+
tableRow.dataCopConcept = stmt.dataCopConcept;
|
|
69
|
+
}
|
|
70
|
+
modified = true;
|
|
71
|
+
}
|
|
72
|
+
return modified;
|
|
73
|
+
}
|
|
74
|
+
function distributeStatements(document) {
|
|
75
|
+
walkDocument(document, {
|
|
76
|
+
visitBlock: (block) => {
|
|
77
|
+
// Only process groups, as simple statements (specStatement) are atomic/inline-only.
|
|
78
|
+
if (block.type !== 'specStatementGroup')
|
|
79
|
+
return;
|
|
80
|
+
const group = block;
|
|
81
|
+
// Verify if we have children to distribute
|
|
82
|
+
if (!group.children || group.children.length === 0) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const children = group.children;
|
|
86
|
+
let currentPrefix = '';
|
|
87
|
+
// Iterate over all children to handle multiple paragraph+list pairs
|
|
88
|
+
for (const child of children) {
|
|
89
|
+
if (child.type === 'paragraph') {
|
|
90
|
+
// Update prefix for subsequent lists/tables
|
|
91
|
+
currentPrefix = toPlainText(child.children).trim();
|
|
92
|
+
}
|
|
93
|
+
else if (child.type === 'list') {
|
|
94
|
+
// Distribute to list items
|
|
95
|
+
distributeToList(child, group, currentPrefix);
|
|
96
|
+
}
|
|
97
|
+
else if (child.type === 'table') {
|
|
98
|
+
// Distribute to table rows
|
|
99
|
+
distributeToTable(child, group, currentPrefix);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
export const statementDistributePlugin = {
|
|
106
|
+
name: 'statement-distribute',
|
|
107
|
+
order: { transform: 25 },
|
|
108
|
+
async transform(ctx) {
|
|
109
|
+
distributeStatements(ctx.document);
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=statement-distribute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statement-distribute.js","sourceRoot":"","sources":["../../../src/postprocess/plugins/statement-distribute.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statement-index.d.ts","sourceRoot":"","sources":["../../../src/postprocess/plugins/statement-index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAgB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"statement-index.d.ts","sourceRoot":"","sources":["../../../src/postprocess/plugins/statement-index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AA0IhE;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAWlC,CAAC"}
|
|
@@ -49,12 +49,19 @@ function buildStatementIndex(document, baseIri) {
|
|
|
49
49
|
// Pass 1: Collect all explicit IDs to avoid collisions
|
|
50
50
|
walkDocument(document, {
|
|
51
51
|
visitBlock: (block) => {
|
|
52
|
-
if (block.type === 'specStatement') {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
usedIds.add(stmt.id);
|
|
52
|
+
if (block.type === 'specStatement' || block.type === 'specStatementGroup') {
|
|
53
|
+
if (block.id) {
|
|
54
|
+
usedIds.add(block.id);
|
|
56
55
|
}
|
|
57
56
|
}
|
|
57
|
+
},
|
|
58
|
+
visitListItem: (item) => {
|
|
59
|
+
if (item.id)
|
|
60
|
+
usedIds.add(item.id);
|
|
61
|
+
},
|
|
62
|
+
visitTableRow: (row) => {
|
|
63
|
+
if (row.id)
|
|
64
|
+
usedIds.add(row.id);
|
|
58
65
|
}
|
|
59
66
|
});
|
|
60
67
|
const walk = (nodes, currentCop) => {
|
|
@@ -62,18 +69,19 @@ function buildStatementIndex(document, baseIri) {
|
|
|
62
69
|
let nextCop = currentCop;
|
|
63
70
|
// Sections and Headings can provide dataCopConcept
|
|
64
71
|
if (node.type === 'section') {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
nextCop = section.dataCopConcept;
|
|
72
|
+
if (node.dataCopConcept) {
|
|
73
|
+
nextCop = node.dataCopConcept;
|
|
68
74
|
}
|
|
69
75
|
}
|
|
70
76
|
else if (node.type === 'heading') {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
nextCop = heading.dataCopConcept;
|
|
77
|
+
if (node.dataCopConcept) {
|
|
78
|
+
nextCop = node.dataCopConcept;
|
|
74
79
|
}
|
|
75
80
|
}
|
|
76
|
-
if
|
|
81
|
+
// A node is a statement if it has type 'specStatement' OR is a listItem/tableRow with a level
|
|
82
|
+
const isStatement = node.type === 'specStatement' ||
|
|
83
|
+
((node.type === 'listItem' || node.type === 'tableRow') && !!node.level);
|
|
84
|
+
if (isStatement) {
|
|
77
85
|
const stmt = node;
|
|
78
86
|
// If statement has its own dataCopConcept, it takes precedence
|
|
79
87
|
const effectiveCop = stmt.dataCopConcept || nextCop;
|
|
@@ -93,7 +101,7 @@ function buildStatementIndex(document, baseIri) {
|
|
|
93
101
|
const entry = {
|
|
94
102
|
id: stmt.id,
|
|
95
103
|
level: stmt.level || 'NONE',
|
|
96
|
-
contentText: stmt.contentText,
|
|
104
|
+
contentText: stmt.contentText || '',
|
|
97
105
|
subject: resolvedSubject,
|
|
98
106
|
sourcePos: stmt.sourcePos || {
|
|
99
107
|
file: document.sourcePos?.file || 'unknown',
|
|
@@ -110,11 +118,6 @@ function buildStatementIndex(document, baseIri) {
|
|
|
110
118
|
if ('children' in node && Array.isArray(node.children)) {
|
|
111
119
|
walk(node.children, nextCop);
|
|
112
120
|
}
|
|
113
|
-
if (node.type === 'section' && node.heading) {
|
|
114
|
-
// Headings are handled together with the section they belong to?
|
|
115
|
-
// Actually, if we are in a section, we already looked at node.dataCop.
|
|
116
|
-
// We don't need to walk heading children separately for COP, as they are inline.
|
|
117
|
-
}
|
|
118
121
|
}
|
|
119
122
|
};
|
|
120
123
|
walk(document.children);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statement-index.js","sourceRoot":"","sources":["../../../src/postprocess/plugins/statement-index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD;;;;;;;;GAQG;AACH,SAAS,UAAU,CAAC,GAAW,EAAE,OAAe;IAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAE/B,2BAA2B;IAC3B,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAClE,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,gBAAgB;IAChB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,OAAO,GAAG,OAAO,EAAE,CAAC;IAClC,CAAC;IAED,4DAA4D;IAC5D,sEAAsE;IACtE,+BAA+B;IAC/B,qBAAqB;IACrB,IAAI;IAEJ,0CAA0C;IAC1C,OAAO,GAAG,OAAO,IAAI,OAAO,EAAE,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,QAAkB,EAAE,OAAe;
|
|
1
|
+
{"version":3,"file":"statement-index.js","sourceRoot":"","sources":["../../../src/postprocess/plugins/statement-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statementsJsonLd-compute.d.ts","sourceRoot":"","sources":["../../../src/postprocess/plugins/statementsJsonLd-compute.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"statementsJsonLd-compute.d.ts","sourceRoot":"","sources":["../../../src/postprocess/plugins/statementsJsonLd-compute.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,qBAAqB,CAAC;AAoDlE;;GAEG;AACH,eAAO,MAAM,6BAA6B,EAAE,MA+G3C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statementsJsonLd-compute.js","sourceRoot":"","sources":["../../../src/postprocess/plugins/statementsJsonLd-compute.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,aAAa,GAAG,4BAA4B,CAAC;AACnD,MAAM,SAAS,GAAG,2BAA2B,CAAC;AAC9C,MAAM,UAAU,GAAG,sCAAsC,CAAC;AAE1D;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAAC,KAAa;IACzC,QAAQ,KAAK,EAAE,CAAC;QACZ,KAAK,MAAM;YACP,OAAO,WAAW,CAAC;QACvB,KAAK,UAAU;YACX,OAAO,cAAc,CAAC;QAC1B,KAAK,QAAQ;YACT,OAAO,aAAa,CAAC;QACzB,KAAK,YAAY;YACb,OAAO,gBAAgB,CAAC;QAC5B,KAAK,KAAK;YACN,OAAO,UAAU,CAAC;QACtB;YACI,OAAO,SAAS,CAAC;IACzB,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,KAAa;IAChC,QAAQ,KAAK,EAAE,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,YAAY,CAAC;QAClB,KAAK,KAAK;
|
|
1
|
+
{"version":3,"file":"statementsJsonLd-compute.js","sourceRoot":"","sources":["../../../src/postprocess/plugins/statementsJsonLd-compute.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Provides a generic visitor pattern for walking the SpecAST.
|
|
5
5
|
* Used by postprocess plugins to traverse document structure.
|
|
6
6
|
*/
|
|
7
|
-
import type { Document, Section, Block, Inline } from '#src/types/ast.generated';
|
|
7
|
+
import type { Document, Section, Block, Inline, ListItem, TableRow, TableCell } from '#src/types/ast.generated';
|
|
8
8
|
/**
|
|
9
9
|
* Visitor interface for AST traversal.
|
|
10
10
|
* Implement only the methods you need.
|
|
@@ -16,23 +16,15 @@ export interface AstVisitor {
|
|
|
16
16
|
visitBlock?(block: Block): void;
|
|
17
17
|
/** Called for each section node */
|
|
18
18
|
visitSection?(section: Section): void;
|
|
19
|
+
/** Called for list items */
|
|
20
|
+
visitListItem?(item: ListItem): void;
|
|
21
|
+
/** Called for table rows */
|
|
22
|
+
visitTableRow?(row: TableRow): void;
|
|
23
|
+
/** Called for table cells */
|
|
24
|
+
visitTableCell?(cell: TableCell): void;
|
|
19
25
|
}
|
|
20
26
|
/**
|
|
21
27
|
* Walk an entire document, calling visitor methods for each node type.
|
|
22
|
-
*
|
|
23
|
-
* @param document - The document to traverse
|
|
24
|
-
* @param visitor - Visitor with optional callbacks for each node type
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* ```typescript
|
|
28
|
-
* walkDocument(doc, {
|
|
29
|
-
* visitInline: (inline) => {
|
|
30
|
-
* if (inline.type === 'definition') {
|
|
31
|
-
* // process definition
|
|
32
|
-
* }
|
|
33
|
-
* }
|
|
34
|
-
* });
|
|
35
|
-
* ```
|
|
36
28
|
*/
|
|
37
29
|
export declare function walkDocument(document: Document, visitor: AstVisitor): void;
|
|
38
30
|
//# sourceMappingURL=walk-ast.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"walk-ast.d.ts","sourceRoot":"","sources":["../../src/postprocess/walk-ast.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACR,QAAQ,EACR,OAAO,EACP,KAAK,EACL,MAAM,
|
|
1
|
+
{"version":3,"file":"walk-ast.d.ts","sourceRoot":"","sources":["../../src/postprocess/walk-ast.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACR,QAAQ,EACR,OAAO,EACP,KAAK,EACL,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,SAAS,EACZ,MAAM,0BAA0B,CAAC;AAGlC;;;GAGG;AACH,MAAM,WAAW,UAAU;IACvB,kCAAkC;IAClC,WAAW,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,iCAAiC;IACjC,UAAU,CAAC,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAChC,mCAAmC;IACnC,YAAY,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACtC,4BAA4B;IAC5B,aAAa,CAAC,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACrC,4BAA4B;IAC5B,aAAa,CAAC,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;IACpC,6BAA6B;IAC7B,cAAc,CAAC,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;CAC1C;AAsFD;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAE1E"}
|