@usejunior/docx-core 0.10.0 → 0.11.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/LICENSE +202 -21
- package/NOTICE +2 -0
- package/README.md +2 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/atomizer.d.ts +13 -7
- package/dist/atomizer.d.ts.map +1 -1
- package/dist/atomizer.js +59 -24
- package/dist/atomizer.js.map +1 -1
- package/dist/baselines/atomizer/auxiliaryIdCollision.d.ts +99 -0
- package/dist/baselines/atomizer/auxiliaryIdCollision.d.ts.map +1 -0
- package/dist/baselines/atomizer/auxiliaryIdCollision.js +415 -0
- package/dist/baselines/atomizer/auxiliaryIdCollision.js.map +1 -0
- package/dist/baselines/atomizer/documentReconstructor.d.ts.map +1 -1
- package/dist/baselines/atomizer/documentReconstructor.js +120 -27
- package/dist/baselines/atomizer/documentReconstructor.js.map +1 -1
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.d.ts +9 -0
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.d.ts.map +1 -1
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.js +52 -4
- package/dist/baselines/atomizer/inPlaceModifier-wrappers.js.map +1 -1
- package/dist/baselines/atomizer/pipeline.d.ts +12 -53
- package/dist/baselines/atomizer/pipeline.d.ts.map +1 -1
- package/dist/baselines/atomizer/pipeline.js +126 -231
- package/dist/baselines/atomizer/pipeline.js.map +1 -1
- package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts.map +1 -1
- package/dist/baselines/atomizer/trackChangesAcceptorAst.js +153 -23
- package/dist/baselines/atomizer/trackChangesAcceptorAst.js.map +1 -1
- package/dist/baselines/wmlcomparer/DotnetCli.d.ts.map +1 -1
- package/dist/baselines/wmlcomparer/DotnetCli.js +7 -0
- package/dist/baselines/wmlcomparer/DotnetCli.js.map +1 -1
- package/dist/cli/compare-two.d.ts.map +1 -1
- package/dist/cli/compare-two.js +3 -1
- package/dist/cli/compare-two.js.map +1 -1
- package/dist/cli/conformance-adapter.d.ts +3 -0
- package/dist/cli/conformance-adapter.d.ts.map +1 -0
- package/dist/cli/conformance-adapter.js +93 -0
- package/dist/cli/conformance-adapter.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +5 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/compare-types.d.ts +46 -0
- package/dist/compare-types.d.ts.map +1 -1
- package/dist/generation/compile.d.ts +21 -0
- package/dist/generation/compile.d.ts.map +1 -0
- package/dist/generation/compile.js +46 -0
- package/dist/generation/compile.js.map +1 -0
- package/dist/generation/context.d.ts +42 -0
- package/dist/generation/context.d.ts.map +1 -0
- package/dist/generation/context.js +65 -0
- package/dist/generation/context.js.map +1 -0
- package/dist/generation/emit/comments-part.d.ts +36 -0
- package/dist/generation/emit/comments-part.d.ts.map +1 -0
- package/dist/generation/emit/comments-part.js +116 -0
- package/dist/generation/emit/comments-part.js.map +1 -0
- package/dist/generation/emit/document-part.d.ts +24 -0
- package/dist/generation/emit/document-part.d.ts.map +1 -0
- package/dist/generation/emit/document-part.js +60 -0
- package/dist/generation/emit/document-part.js.map +1 -0
- package/dist/generation/emit/emit-context.d.ts +26 -0
- package/dist/generation/emit/emit-context.d.ts.map +1 -0
- package/dist/generation/emit/emit-context.js +19 -0
- package/dist/generation/emit/emit-context.js.map +1 -0
- package/dist/generation/emit/header-footer-part.d.ts +23 -0
- package/dist/generation/emit/header-footer-part.d.ts.map +1 -0
- package/dist/generation/emit/header-footer-part.js +57 -0
- package/dist/generation/emit/header-footer-part.js.map +1 -0
- package/dist/generation/emit/numbering-part.d.ts +29 -0
- package/dist/generation/emit/numbering-part.d.ts.map +1 -0
- package/dist/generation/emit/numbering-part.js +100 -0
- package/dist/generation/emit/numbering-part.js.map +1 -0
- package/dist/generation/emit/package-parts.d.ts +24 -0
- package/dist/generation/emit/package-parts.d.ts.map +1 -0
- package/dist/generation/emit/package-parts.js +121 -0
- package/dist/generation/emit/package-parts.js.map +1 -0
- package/dist/generation/emit/paragraph.d.ts +24 -0
- package/dist/generation/emit/paragraph.d.ts.map +1 -0
- package/dist/generation/emit/paragraph.js +63 -0
- package/dist/generation/emit/paragraph.js.map +1 -0
- package/dist/generation/emit/properties.d.ts +34 -0
- package/dist/generation/emit/properties.d.ts.map +1 -0
- package/dist/generation/emit/properties.js +138 -0
- package/dist/generation/emit/properties.js.map +1 -0
- package/dist/generation/emit/run.d.ts +15 -0
- package/dist/generation/emit/run.d.ts.map +1 -0
- package/dist/generation/emit/run.js +71 -0
- package/dist/generation/emit/run.js.map +1 -0
- package/dist/generation/emit/section.d.ts +29 -0
- package/dist/generation/emit/section.d.ts.map +1 -0
- package/dist/generation/emit/section.js +117 -0
- package/dist/generation/emit/section.js.map +1 -0
- package/dist/generation/emit/settings-part.d.ts +13 -0
- package/dist/generation/emit/settings-part.d.ts.map +1 -0
- package/dist/generation/emit/settings-part.js +24 -0
- package/dist/generation/emit/settings-part.js.map +1 -0
- package/dist/generation/emit/styles-part.d.ts +16 -0
- package/dist/generation/emit/styles-part.d.ts.map +1 -0
- package/dist/generation/emit/styles-part.js +80 -0
- package/dist/generation/emit/styles-part.js.map +1 -0
- package/dist/generation/emit/table.d.ts +26 -0
- package/dist/generation/emit/table.d.ts.map +1 -0
- package/dist/generation/emit/table.js +196 -0
- package/dist/generation/emit/table.js.map +1 -0
- package/dist/generation/errors.d.ts +22 -0
- package/dist/generation/errors.d.ts.map +1 -0
- package/dist/generation/errors.js +29 -0
- package/dist/generation/errors.js.map +1 -0
- package/dist/generation/index.d.ts +13 -0
- package/dist/generation/index.d.ts.map +1 -0
- package/dist/generation/index.js +12 -0
- package/dist/generation/index.js.map +1 -0
- package/dist/generation/ordering.d.ts +46 -0
- package/dist/generation/ordering.d.ts.map +1 -0
- package/dist/generation/ordering.js +119 -0
- package/dist/generation/ordering.js.map +1 -0
- package/dist/generation/recipes.d.ts +47 -0
- package/dist/generation/recipes.d.ts.map +1 -0
- package/dist/generation/recipes.js +84 -0
- package/dist/generation/recipes.js.map +1 -0
- package/dist/generation/structural-checks.d.ts +24 -0
- package/dist/generation/structural-checks.d.ts.map +1 -0
- package/dist/generation/structural-checks.js +318 -0
- package/dist/generation/structural-checks.js.map +1 -0
- package/dist/generation/types.d.ts +217 -0
- package/dist/generation/types.d.ts.map +1 -0
- package/dist/generation/types.js +16 -0
- package/dist/generation/types.js.map +1 -0
- package/dist/generation/validate-spec.d.ts +27 -0
- package/dist/generation/validate-spec.d.ts.map +1 -0
- package/dist/generation/validate-spec.js +307 -0
- package/dist/generation/validate-spec.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/integration/generation-probes.d.ts +15 -0
- package/dist/integration/generation-probes.d.ts.map +1 -0
- package/dist/integration/generation-probes.js +84 -0
- package/dist/integration/generation-probes.js.map +1 -0
- package/dist/integration/libreoffice-oracle.d.ts +8 -0
- package/dist/integration/libreoffice-oracle.d.ts.map +1 -1
- package/dist/integration/libreoffice-oracle.js +14 -6
- package/dist/integration/libreoffice-oracle.js.map +1 -1
- package/dist/integration/synthetic-docx-fixture.d.ts +72 -0
- package/dist/integration/synthetic-docx-fixture.d.ts.map +1 -1
- package/dist/integration/synthetic-docx-fixture.js +131 -4
- package/dist/integration/synthetic-docx-fixture.js.map +1 -1
- package/dist/primitives/accept_changes.d.ts +2 -1
- package/dist/primitives/accept_changes.d.ts.map +1 -1
- package/dist/primitives/accept_changes.js +153 -12
- package/dist/primitives/accept_changes.js.map +1 -1
- package/dist/primitives/document.d.ts +38 -0
- package/dist/primitives/document.d.ts.map +1 -1
- package/dist/primitives/document.js +75 -9
- package/dist/primitives/document.js.map +1 -1
- package/dist/primitives/document_view-comments.d.ts.map +1 -1
- package/dist/primitives/document_view-comments.js +4 -3
- package/dist/primitives/document_view-comments.js.map +1 -1
- package/dist/primitives/document_view-types.d.ts +15 -0
- package/dist/primitives/document_view-types.d.ts.map +1 -1
- package/dist/primitives/document_view.d.ts.map +1 -1
- package/dist/primitives/document_view.js +21 -13
- package/dist/primitives/document_view.js.map +1 -1
- package/dist/primitives/formatting_tags.d.ts +1 -0
- package/dist/primitives/formatting_tags.d.ts.map +1 -1
- package/dist/primitives/formatting_tags.js +16 -10
- package/dist/primitives/formatting_tags.js.map +1 -1
- package/dist/primitives/index.d.ts +4 -0
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +4 -0
- package/dist/primitives/index.js.map +1 -1
- package/dist/primitives/layout.d.ts.map +1 -1
- package/dist/primitives/layout.js +13 -0
- package/dist/primitives/layout.js.map +1 -1
- package/dist/primitives/minimal_save.d.ts +38 -0
- package/dist/primitives/minimal_save.d.ts.map +1 -0
- package/dist/primitives/minimal_save.js +323 -0
- package/dist/primitives/minimal_save.js.map +1 -0
- package/dist/primitives/namespaces.d.ts +41 -0
- package/dist/primitives/namespaces.d.ts.map +1 -1
- package/dist/primitives/namespaces.js +43 -0
- package/dist/primitives/namespaces.js.map +1 -1
- package/dist/primitives/reject_changes.d.ts +4 -2
- package/dist/primitives/reject_changes.d.ts.map +1 -1
- package/dist/primitives/reject_changes.js +177 -24
- package/dist/primitives/reject_changes.js.map +1 -1
- package/dist/primitives/revision-parts.d.ts +7 -0
- package/dist/primitives/revision-parts.d.ts.map +1 -0
- package/dist/primitives/revision-parts.js +27 -0
- package/dist/primitives/revision-parts.js.map +1 -0
- package/dist/primitives/revision-vocabulary.d.ts +7 -0
- package/dist/primitives/revision-vocabulary.d.ts.map +1 -0
- package/dist/primitives/revision-vocabulary.js +39 -0
- package/dist/primitives/revision-vocabulary.js.map +1 -0
- package/dist/primitives/schema-corpus-capture.d.ts +19 -0
- package/dist/primitives/schema-corpus-capture.d.ts.map +1 -0
- package/dist/primitives/schema-corpus-capture.js +29 -0
- package/dist/primitives/schema-corpus-capture.js.map +1 -0
- package/dist/primitives/sectPrAudit.d.ts +19 -0
- package/dist/primitives/sectPrAudit.d.ts.map +1 -0
- package/dist/primitives/sectPrAudit.js +165 -0
- package/dist/primitives/sectPrAudit.js.map +1 -0
- package/dist/primitives/semantic_tags.d.ts.map +1 -1
- package/dist/primitives/semantic_tags.js +2 -1
- package/dist/primitives/semantic_tags.js.map +1 -1
- package/dist/primitives/serialize_html.d.ts +1 -0
- package/dist/primitives/serialize_html.d.ts.map +1 -1
- package/dist/primitives/serialize_html.js +4 -2
- package/dist/primitives/serialize_html.js.map +1 -1
- package/dist/primitives/styles.d.ts +15 -0
- package/dist/primitives/styles.d.ts.map +1 -1
- package/dist/primitives/styles.js +11 -0
- package/dist/primitives/styles.js.map +1 -1
- package/dist/primitives/track-changes-emitter.d.ts +9 -0
- package/dist/primitives/track-changes-emitter.d.ts.map +1 -1
- package/dist/primitives/track-changes-emitter.js +54 -4
- package/dist/primitives/track-changes-emitter.js.map +1 -1
- package/dist/primitives/validate_ai_revisions.d.ts +35 -0
- package/dist/primitives/validate_ai_revisions.d.ts.map +1 -0
- package/dist/primitives/validate_ai_revisions.js +323 -0
- package/dist/primitives/validate_ai_revisions.js.map +1 -0
- package/dist/primitives/xml.d.ts +5 -0
- package/dist/primitives/xml.d.ts.map +1 -1
- package/dist/primitives/xml.js +5 -0
- package/dist/primitives/xml.js.map +1 -1
- package/dist/primitives/zip.d.ts +1 -0
- package/dist/primitives/zip.d.ts.map +1 -1
- package/dist/primitives/zip.js +21 -3
- package/dist/primitives/zip.js.map +1 -1
- package/dist/shared/field-structure.d.ts +14 -0
- package/dist/shared/field-structure.d.ts.map +1 -0
- package/dist/shared/field-structure.js +166 -0
- package/dist/shared/field-structure.js.map +1 -0
- package/package.json +7 -4
|
@@ -6,8 +6,10 @@
|
|
|
6
6
|
* - Unwrapping w:del elements and converting w:delText → w:t (deletions restored)
|
|
7
7
|
* - Unwrapping w:moveFrom (keep at original position), removing w:moveTo and content
|
|
8
8
|
* - Restoring original properties from *PrChange records
|
|
9
|
-
* - Preserving cross-paragraph bookmark boundaries when
|
|
10
|
-
* - Stripping paragraph-level revision markers
|
|
9
|
+
* - Preserving cross-paragraph bookmark boundaries when resolving inserted paragraph marks
|
|
10
|
+
* - Stripping paragraph-level revision markers, merging a paragraph whose
|
|
11
|
+
* mark was a tracked insertion into the following paragraph
|
|
12
|
+
* - Stripping rsidDel attributes
|
|
11
13
|
*
|
|
12
14
|
* Operates on the W3C DOM (`@xmldom/xmldom`).
|
|
13
15
|
*/
|
|
@@ -86,6 +88,144 @@ const PR_CHANGE_LOCALS = [
|
|
|
86
88
|
'rPrChange', 'pPrChange', 'sectPrChange',
|
|
87
89
|
'tblPrChange', 'trPrChange', 'tcPrChange',
|
|
88
90
|
];
|
|
91
|
+
// Marker-ish elements that may sit between two paragraphs at block level
|
|
92
|
+
// without ending the search for a merge target: the full EG_RangeMarkupElements
|
|
93
|
+
// schema group (wml.xsd), plus permStart/permEnd range markers and proofErr
|
|
94
|
+
// proofing anchors.
|
|
95
|
+
const RANGE_MARKUP_BLOCK_SIBLING_LOCALS = new Set([
|
|
96
|
+
'bookmarkStart', 'bookmarkEnd',
|
|
97
|
+
'commentRangeStart', 'commentRangeEnd',
|
|
98
|
+
'moveFromRangeStart', 'moveFromRangeEnd',
|
|
99
|
+
'moveToRangeStart', 'moveToRangeEnd',
|
|
100
|
+
'customXmlInsRangeStart', 'customXmlInsRangeEnd',
|
|
101
|
+
'customXmlDelRangeStart', 'customXmlDelRangeEnd',
|
|
102
|
+
'customXmlMoveFromRangeStart', 'customXmlMoveFromRangeEnd',
|
|
103
|
+
'customXmlMoveToRangeStart', 'customXmlMoveToRangeEnd',
|
|
104
|
+
'permStart', 'permEnd',
|
|
105
|
+
'proofErr',
|
|
106
|
+
]);
|
|
107
|
+
/**
|
|
108
|
+
* Find the next sibling paragraph a paragraph-mark revision can merge into,
|
|
109
|
+
* skipping block-level range/annotation markers. Returns null when the next
|
|
110
|
+
* block is not a paragraph (table, sdt, sectPr, end of parent).
|
|
111
|
+
*/
|
|
112
|
+
function findFollowingSiblingParagraph(p) {
|
|
113
|
+
let sibling = p.nextSibling;
|
|
114
|
+
while (sibling) {
|
|
115
|
+
if (sibling.nodeType === 1) {
|
|
116
|
+
if (isW(sibling, 'p'))
|
|
117
|
+
return sibling;
|
|
118
|
+
const el = sibling;
|
|
119
|
+
if (el.namespaceURI === W_NS && RANGE_MARKUP_BLOCK_SIBLING_LOCALS.has(el.localName ?? '')) {
|
|
120
|
+
sibling = sibling.nextSibling;
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
sibling = sibling.nextSibling;
|
|
126
|
+
}
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
/** True iff the paragraph still holds content beyond w:pPr and bare annotation markers. */
|
|
130
|
+
function paragraphHasContent(p) {
|
|
131
|
+
for (let i = 0; i < p.childNodes.length; i++) {
|
|
132
|
+
const child = p.childNodes[i];
|
|
133
|
+
if (child.nodeType !== 1)
|
|
134
|
+
continue;
|
|
135
|
+
if (isW(child, 'pPr'))
|
|
136
|
+
continue;
|
|
137
|
+
const el = child;
|
|
138
|
+
if (el.namespaceURI === W_NS && RANGE_MARKUP_BLOCK_SIBLING_LOCALS.has(el.localName ?? ''))
|
|
139
|
+
continue;
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* True iff removing an emptied mark-revised paragraph keeps its parent
|
|
146
|
+
* structurally valid for Word: the parent must retain at least one block
|
|
147
|
+
* element, must not end on a w:tbl (a trailing table needs a following
|
|
148
|
+
* paragraph), and two tables must not become adjacent (Word merges
|
|
149
|
+
* back-to-back tables). w:sectPr is ignored — a trailing body sectPr is not a
|
|
150
|
+
* block element.
|
|
151
|
+
*/
|
|
152
|
+
function canSafelyRemoveEmptyParagraph(p) {
|
|
153
|
+
const blockSibling = (start, dir) => {
|
|
154
|
+
let sibling = start;
|
|
155
|
+
while (sibling) {
|
|
156
|
+
if (sibling.nodeType === 1) {
|
|
157
|
+
const el = sibling;
|
|
158
|
+
if ((el.namespaceURI === W_NS && RANGE_MARKUP_BLOCK_SIBLING_LOCALS.has(el.localName ?? '')) ||
|
|
159
|
+
isW(el, 'sectPr')) {
|
|
160
|
+
sibling = sibling[dir];
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
return el;
|
|
164
|
+
}
|
|
165
|
+
sibling = sibling[dir];
|
|
166
|
+
}
|
|
167
|
+
return null;
|
|
168
|
+
};
|
|
169
|
+
const prev = blockSibling(p.previousSibling, 'previousSibling');
|
|
170
|
+
const next = blockSibling(p.nextSibling, 'nextSibling');
|
|
171
|
+
if (!prev && !next)
|
|
172
|
+
return false;
|
|
173
|
+
if (prev && isW(prev, 'tbl') && !next)
|
|
174
|
+
return false;
|
|
175
|
+
if (prev && next && isW(prev, 'tbl') && isW(next, 'tbl'))
|
|
176
|
+
return false;
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Resolve a paragraph whose paragraph MARK revision was applied (inserted mark
|
|
181
|
+
* rejected): the inserted paragraph break disappears, so the paragraph's
|
|
182
|
+
* surviving content merges into the FOLLOWING paragraph. The surviving
|
|
183
|
+
* (following) paragraph keeps its own w:pPr — formatting follows the surviving
|
|
184
|
+
* paragraph mark — and the merged-away paragraph's w:pPr is dropped.
|
|
185
|
+
*
|
|
186
|
+
* The revision targets only the mark, never the paragraph's contents, so the
|
|
187
|
+
* contents must not be dropped wholesale (they disappear only via their own
|
|
188
|
+
* run-level w:ins wrappers). When no following sibling paragraph exists (last
|
|
189
|
+
* block, or the next block is a table), there is no break to remove into:
|
|
190
|
+
* content-bearing paragraphs are kept, and emptied ones are removed only where
|
|
191
|
+
* removal keeps the parent structurally valid (canSafelyRemoveEmptyParagraph).
|
|
192
|
+
*
|
|
193
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.13.5.20
|
|
194
|
+
* @see https://github.com/UseJunior/safe-docx/issues/431
|
|
195
|
+
*/
|
|
196
|
+
function resolveParagraphMarkRevision(p) {
|
|
197
|
+
const parent = p.parentNode;
|
|
198
|
+
if (!parent)
|
|
199
|
+
return;
|
|
200
|
+
const target = findFollowingSiblingParagraph(p);
|
|
201
|
+
if (!target) {
|
|
202
|
+
if (!paragraphHasContent(p) && canSafelyRemoveEmptyParagraph(p)) {
|
|
203
|
+
parent.removeChild(p);
|
|
204
|
+
}
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
// Insertion point: before the target's first non-pPr child (the merged
|
|
208
|
+
// content precedes the target's own content in document order).
|
|
209
|
+
let ref = null;
|
|
210
|
+
for (let i = 0; i < target.childNodes.length; i++) {
|
|
211
|
+
const c = target.childNodes[i];
|
|
212
|
+
if (c.nodeType === 1 && isW(c, 'pPr'))
|
|
213
|
+
continue;
|
|
214
|
+
ref = c;
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
const toMove = [];
|
|
218
|
+
for (let i = 0; i < p.childNodes.length; i++) {
|
|
219
|
+
const c = p.childNodes[i];
|
|
220
|
+
if (c.nodeType === 1 && isW(c, 'pPr'))
|
|
221
|
+
continue;
|
|
222
|
+
toMove.push(c);
|
|
223
|
+
}
|
|
224
|
+
for (const c of toMove) {
|
|
225
|
+
target.insertBefore(c, ref);
|
|
226
|
+
}
|
|
227
|
+
parent.removeChild(p);
|
|
228
|
+
}
|
|
89
229
|
/**
|
|
90
230
|
* Relocate orphaned bookmarks from a paragraph being removed to an
|
|
91
231
|
* adjacent kept paragraph. This preserves cross-paragraph bookmark boundaries.
|
|
@@ -116,15 +256,22 @@ function relocateBookmarks(p, paragraphsToRemove) {
|
|
|
116
256
|
}
|
|
117
257
|
if (!target)
|
|
118
258
|
return;
|
|
119
|
-
// Move bookmarkStart/bookmarkEnd elements that are direct children of the
|
|
259
|
+
// Move bookmarkStart/bookmarkEnd elements that are direct children of the
|
|
260
|
+
// paragraph — but only when the paragraph will NOT merge into a following
|
|
261
|
+
// paragraph. The Phase-G merge carries direct children in document order;
|
|
262
|
+
// pre-relocating them here would reorder bookmark boundaries relative to the
|
|
263
|
+
// surviving untracked content. Without a merge target the paragraph may be
|
|
264
|
+
// removed outright, so the markers must be rescued.
|
|
120
265
|
const toMove = [];
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
266
|
+
if (!findFollowingSiblingParagraph(p)) {
|
|
267
|
+
for (let i = 0; i < p.childNodes.length; i++) {
|
|
268
|
+
const child = p.childNodes[i];
|
|
269
|
+
if (child.nodeType !== 1)
|
|
270
|
+
continue;
|
|
271
|
+
const el = child;
|
|
272
|
+
if (isW(el, 'bookmarkStart') || isW(el, 'bookmarkEnd')) {
|
|
273
|
+
toMove.push(el);
|
|
274
|
+
}
|
|
128
275
|
}
|
|
129
276
|
}
|
|
130
277
|
// Also check sibling bookmarks (sibling-style: <bookmarkStart/><p/><bookmarkEnd/>)
|
|
@@ -174,24 +321,30 @@ export function rejectChanges(doc) {
|
|
|
174
321
|
if (!root) {
|
|
175
322
|
return { insertionsRemoved: 0, deletionsRestored: 0, movesReverted: 0, propertyChangesReverted: 0 };
|
|
176
323
|
}
|
|
177
|
-
// Phase A — Identify paragraphs
|
|
178
|
-
const
|
|
324
|
+
// Phase A — Identify paragraphs whose MARK is a tracked insertion
|
|
325
|
+
const markInsertedParagraphs = new Set();
|
|
179
326
|
const allParagraphs = collectByLocalName(root, 'p');
|
|
180
327
|
for (const p of allParagraphs) {
|
|
181
|
-
//
|
|
182
|
-
//
|
|
183
|
-
//
|
|
328
|
+
// A paragraph-mark insertion (w:p > w:pPr > w:rPr > w:ins) means the
|
|
329
|
+
// paragraph BREAK was inserted — rejecting it merges the paragraph into the
|
|
330
|
+
// following one (resolveParagraphMarkRevision); the contents disappear only
|
|
331
|
+
// via their own run-level w:ins wrappers.
|
|
332
|
+
// We deliberately do NOT touch a paragraph based on content ("all runs inside
|
|
184
333
|
// w:ins/w:moveTo"): a run-level insertion under an untracked mark means text was
|
|
185
334
|
// inserted into a pre-existing paragraph, which Word/LibreOffice keep (empty) on
|
|
186
335
|
// reject. safe-docx's inserted paragraphs always carry the mark now, so the
|
|
187
336
|
// mark-based rule suffices and is Word-faithful. (Mirrors rejectAllChanges.)
|
|
188
337
|
if (paragraphHasParaMarker(p, 'ins')) {
|
|
189
|
-
|
|
338
|
+
markInsertedParagraphs.add(p);
|
|
190
339
|
}
|
|
191
340
|
}
|
|
192
|
-
// Phase B — Preserve cross-paragraph bookmark boundaries
|
|
193
|
-
|
|
194
|
-
|
|
341
|
+
// Phase B — Preserve cross-paragraph bookmark boundaries. Direct-child
|
|
342
|
+
// bookmarks of a paragraph that will merge ride the Phase-G merge in
|
|
343
|
+
// document order; relocateBookmarks rescues the rest (direct children of a
|
|
344
|
+
// paragraph with no merge target, which may be removed outright, plus
|
|
345
|
+
// adjacent sibling-style markers).
|
|
346
|
+
for (const p of markInsertedParagraphs) {
|
|
347
|
+
relocateBookmarks(p, markInsertedParagraphs);
|
|
195
348
|
}
|
|
196
349
|
// Phase C — Remove insertions and move destinations
|
|
197
350
|
const insertionsRemoved = removeAllByLocalName(root, 'ins');
|
|
@@ -287,11 +440,11 @@ export function rejectChanges(doc) {
|
|
|
287
440
|
}
|
|
288
441
|
}
|
|
289
442
|
}
|
|
290
|
-
//
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
443
|
+
// Resolve paragraphs collected in Phase A: merge each into its following
|
|
444
|
+
// paragraph (document order, so consecutive mark-inserted paragraphs cascade
|
|
445
|
+
// forward into the first surviving one).
|
|
446
|
+
for (const p of markInsertedParagraphs) {
|
|
447
|
+
resolveParagraphMarkRevision(p);
|
|
295
448
|
}
|
|
296
449
|
// Strip w:rsidDel attributes on remaining elements
|
|
297
450
|
const allElements = root.getElementsByTagNameNS(W_NS, '*');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reject_changes.js","sourceRoot":"","sources":["../../src/primitives/reject_changes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reject_changes.js","sourceRoot":"","sources":["../../src/primitives/reject_changes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { DocxZip } from './zip.js';
|
|
2
|
+
export declare const REVISION_STORY_PART_PATHS: readonly ["word/footnotes.xml", "word/endnotes.xml", "word/comments.xml", "word/glossary/document.xml"];
|
|
3
|
+
export declare const REVISION_SIDE_PART_PATHS: readonly ["word/comments.xml", "word/commentsExtended.xml", "word/people.xml", "word/footnotes.xml", "word/endnotes.xml"];
|
|
4
|
+
export declare const NUMBERED_HEADER_FOOTER_RE: RegExp;
|
|
5
|
+
export declare function isRevisionHeaderFooterPart(path: string): boolean;
|
|
6
|
+
export declare function enumerateRevisionStoryPartPaths(zip: DocxZip): string[];
|
|
7
|
+
//# sourceMappingURL=revision-parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revision-parts.d.ts","sourceRoot":"","sources":["../../src/primitives/revision-parts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,eAAO,MAAM,yBAAyB,yGAK5B,CAAC;AAEX,eAAO,MAAM,wBAAwB,2HAM3B,CAAC;AAEX,eAAO,MAAM,yBAAyB,QAAsC,CAAC;AAE7E,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAQtE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export const REVISION_STORY_PART_PATHS = [
|
|
2
|
+
'word/footnotes.xml',
|
|
3
|
+
'word/endnotes.xml',
|
|
4
|
+
'word/comments.xml',
|
|
5
|
+
'word/glossary/document.xml',
|
|
6
|
+
];
|
|
7
|
+
export const REVISION_SIDE_PART_PATHS = [
|
|
8
|
+
'word/comments.xml',
|
|
9
|
+
'word/commentsExtended.xml',
|
|
10
|
+
'word/people.xml',
|
|
11
|
+
'word/footnotes.xml',
|
|
12
|
+
'word/endnotes.xml',
|
|
13
|
+
];
|
|
14
|
+
export const NUMBERED_HEADER_FOOTER_RE = /^word\/(?:header|footer)\d*\.xml$/;
|
|
15
|
+
export function isRevisionHeaderFooterPart(path) {
|
|
16
|
+
return NUMBERED_HEADER_FOOTER_RE.test(path);
|
|
17
|
+
}
|
|
18
|
+
export function enumerateRevisionStoryPartPaths(zip) {
|
|
19
|
+
const paths = new Set(REVISION_STORY_PART_PATHS);
|
|
20
|
+
for (const entry of zip.listFiles()) {
|
|
21
|
+
if (isRevisionHeaderFooterPart(entry)) {
|
|
22
|
+
paths.add(entry);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return [...paths].sort();
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=revision-parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revision-parts.js","sourceRoot":"","sources":["../../src/primitives/revision-parts.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,oBAAoB;IACpB,mBAAmB;IACnB,mBAAmB;IACnB,4BAA4B;CACpB,CAAC;AAEX,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,mBAAmB;IACnB,2BAA2B;IAC3B,iBAAiB;IACjB,oBAAoB;IACpB,mBAAmB;CACX,CAAC;AAEX,MAAM,CAAC,MAAM,yBAAyB,GAAG,mCAAmC,CAAC;AAE7E,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,OAAO,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,GAAY;IAC1D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,yBAAyB,CAAC,CAAC;IACzD,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC;QACpC,IAAI,0BAA0B,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const TRACKED_CHANGE_ELEMENT_NAMES: readonly ["ins", "del", "moveFrom", "moveTo", "pPrChange", "rPrChange", "sectPrChange", "tblPrChange", "tblPrExChange", "trPrChange", "tcPrChange", "tblGridChange", "numberingChange", "cellIns", "cellDel", "cellMerge"];
|
|
2
|
+
export type TrackedChangeElementName = typeof TRACKED_CHANGE_ELEMENT_NAMES[number];
|
|
3
|
+
export declare const TRACKED_CHANGE_ELEMENT_NAME_SET: Set<string>;
|
|
4
|
+
export declare const REVISION_RANGE_ELEMENT_NAMES: readonly ["moveFromRangeStart", "moveFromRangeEnd", "moveToRangeStart", "moveToRangeEnd", "customXmlInsRangeStart", "customXmlInsRangeEnd", "customXmlDelRangeStart", "customXmlDelRangeEnd", "customXmlMoveFromRangeStart", "customXmlMoveFromRangeEnd", "customXmlMoveToRangeStart", "customXmlMoveToRangeEnd"];
|
|
5
|
+
export declare const REVISION_ID_ELEMENT_NAMES: readonly ["ins", "del", "moveFrom", "moveTo", "pPrChange", "rPrChange", "sectPrChange", "tblPrChange", "tblPrExChange", "trPrChange", "tcPrChange", "tblGridChange", "numberingChange", "cellIns", "cellDel", "cellMerge", "moveFromRangeStart", "moveFromRangeEnd", "moveToRangeStart", "moveToRangeEnd", "customXmlInsRangeStart", "customXmlInsRangeEnd", "customXmlDelRangeStart", "customXmlDelRangeEnd", "customXmlMoveFromRangeStart", "customXmlMoveFromRangeEnd", "customXmlMoveToRangeStart", "customXmlMoveToRangeEnd"];
|
|
6
|
+
export declare const REVISION_ID_ELEMENT_NAME_SET: Set<string>;
|
|
7
|
+
//# sourceMappingURL=revision-vocabulary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revision-vocabulary.d.ts","sourceRoot":"","sources":["../../src/primitives/revision-vocabulary.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,4BAA4B,4NAiB/B,CAAC;AAEX,MAAM,MAAM,wBAAwB,GAAG,OAAO,4BAA4B,CAAC,MAAM,CAAC,CAAC;AAEnF,eAAO,MAAM,+BAA+B,aAAgD,CAAC;AAE7F,eAAO,MAAM,4BAA4B,mTAa/B,CAAC;AAEX,eAAO,MAAM,yBAAyB,ogBAG5B,CAAC;AAEX,eAAO,MAAM,4BAA4B,aAA6C,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export const TRACKED_CHANGE_ELEMENT_NAMES = [
|
|
2
|
+
'ins',
|
|
3
|
+
'del',
|
|
4
|
+
'moveFrom',
|
|
5
|
+
'moveTo',
|
|
6
|
+
'pPrChange',
|
|
7
|
+
'rPrChange',
|
|
8
|
+
'sectPrChange',
|
|
9
|
+
'tblPrChange',
|
|
10
|
+
'tblPrExChange',
|
|
11
|
+
'trPrChange',
|
|
12
|
+
'tcPrChange',
|
|
13
|
+
'tblGridChange',
|
|
14
|
+
'numberingChange',
|
|
15
|
+
'cellIns',
|
|
16
|
+
'cellDel',
|
|
17
|
+
'cellMerge',
|
|
18
|
+
];
|
|
19
|
+
export const TRACKED_CHANGE_ELEMENT_NAME_SET = new Set(TRACKED_CHANGE_ELEMENT_NAMES);
|
|
20
|
+
export const REVISION_RANGE_ELEMENT_NAMES = [
|
|
21
|
+
'moveFromRangeStart',
|
|
22
|
+
'moveFromRangeEnd',
|
|
23
|
+
'moveToRangeStart',
|
|
24
|
+
'moveToRangeEnd',
|
|
25
|
+
'customXmlInsRangeStart',
|
|
26
|
+
'customXmlInsRangeEnd',
|
|
27
|
+
'customXmlDelRangeStart',
|
|
28
|
+
'customXmlDelRangeEnd',
|
|
29
|
+
'customXmlMoveFromRangeStart',
|
|
30
|
+
'customXmlMoveFromRangeEnd',
|
|
31
|
+
'customXmlMoveToRangeStart',
|
|
32
|
+
'customXmlMoveToRangeEnd',
|
|
33
|
+
];
|
|
34
|
+
export const REVISION_ID_ELEMENT_NAMES = [
|
|
35
|
+
...TRACKED_CHANGE_ELEMENT_NAMES,
|
|
36
|
+
...REVISION_RANGE_ELEMENT_NAMES,
|
|
37
|
+
];
|
|
38
|
+
export const REVISION_ID_ELEMENT_NAME_SET = new Set(REVISION_ID_ELEMENT_NAMES);
|
|
39
|
+
//# sourceMappingURL=revision-vocabulary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revision-vocabulary.js","sourceRoot":"","sources":["../../src/primitives/revision-vocabulary.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,KAAK;IACL,KAAK;IACL,UAAU;IACV,QAAQ;IACR,WAAW;IACX,WAAW;IACX,cAAc;IACd,aAAa;IACb,eAAe;IACf,YAAY;IACZ,YAAY;IACZ,eAAe;IACf,iBAAiB;IACjB,SAAS;IACT,SAAS;IACT,WAAW;CACH,CAAC;AAIX,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAI,GAAG,CAAS,4BAA4B,CAAC,CAAC;AAE7F,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,oBAAoB;IACpB,kBAAkB;IAClB,kBAAkB;IAClB,gBAAgB;IAChB,wBAAwB;IACxB,sBAAsB;IACtB,wBAAwB;IACxB,sBAAsB;IACtB,6BAA6B;IAC7B,2BAA2B;IAC3B,2BAA2B;IAC3B,yBAAyB;CACjB,CAAC;AAEX,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,GAAG,4BAA4B;IAC/B,GAAG,4BAA4B;CACvB,CAAC;AAEX,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAS,yBAAyB,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Opt-in capture of every `word/document.xml` the engine emits, so an
|
|
3
|
+
* external OOXML schema validator can check the whole corpus after a test
|
|
4
|
+
* run. No-op (zero I/O) unless `SDX_SCHEMA_CORPUS_DIR` is set.
|
|
5
|
+
*
|
|
6
|
+
* Files are named by content hash, so repeated emissions of the same XML
|
|
7
|
+
* deduplicate and the corpus stays bounded across a full test run. The
|
|
8
|
+
* consumer is `scripts/check_emitted_document_schema.mjs`, which validates
|
|
9
|
+
* the captured corpus against the vendored Transitional WML schema.
|
|
10
|
+
*
|
|
11
|
+
* Capture sites are the three emission choke points: comparison pipelines
|
|
12
|
+
* (`DocxArchive.setDocumentXml`), primitives saves (`DocxDocument.toBuffer`),
|
|
13
|
+
* and generation (`generateDocx`). Capture failures propagate: when the
|
|
14
|
+
* corpus is requested, a partially written corpus must not validate cleanly.
|
|
15
|
+
*
|
|
16
|
+
* @see https://github.com/UseJunior/safe-docx/issues/214
|
|
17
|
+
*/
|
|
18
|
+
export declare function maybeCaptureEmittedDocumentXml(xml: string): void;
|
|
19
|
+
//# sourceMappingURL=schema-corpus-capture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-corpus-capture.d.ts","sourceRoot":"","sources":["../../src/primitives/schema-corpus-capture.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAMhE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
/**
|
|
5
|
+
* Opt-in capture of every `word/document.xml` the engine emits, so an
|
|
6
|
+
* external OOXML schema validator can check the whole corpus after a test
|
|
7
|
+
* run. No-op (zero I/O) unless `SDX_SCHEMA_CORPUS_DIR` is set.
|
|
8
|
+
*
|
|
9
|
+
* Files are named by content hash, so repeated emissions of the same XML
|
|
10
|
+
* deduplicate and the corpus stays bounded across a full test run. The
|
|
11
|
+
* consumer is `scripts/check_emitted_document_schema.mjs`, which validates
|
|
12
|
+
* the captured corpus against the vendored Transitional WML schema.
|
|
13
|
+
*
|
|
14
|
+
* Capture sites are the three emission choke points: comparison pipelines
|
|
15
|
+
* (`DocxArchive.setDocumentXml`), primitives saves (`DocxDocument.toBuffer`),
|
|
16
|
+
* and generation (`generateDocx`). Capture failures propagate: when the
|
|
17
|
+
* corpus is requested, a partially written corpus must not validate cleanly.
|
|
18
|
+
*
|
|
19
|
+
* @see https://github.com/UseJunior/safe-docx/issues/214
|
|
20
|
+
*/
|
|
21
|
+
export function maybeCaptureEmittedDocumentXml(xml) {
|
|
22
|
+
const dir = process.env.SDX_SCHEMA_CORPUS_DIR;
|
|
23
|
+
if (!dir)
|
|
24
|
+
return;
|
|
25
|
+
const digest = createHash('sha256').update(xml).digest('hex').slice(0, 16);
|
|
26
|
+
mkdirSync(dir, { recursive: true });
|
|
27
|
+
writeFileSync(join(dir, `document-${digest}.xml`), xml);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=schema-corpus-capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-corpus-capture.js","sourceRoot":"","sources":["../../src/primitives/schema-corpus-capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,8BAA8B,CAAC,GAAW;IACxD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IAC9C,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3E,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,MAAM,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type SectPrIssueType = 'missing_body' | 'multiple_body_level_sectpr' | 'body_level_sectpr_not_last' | 'sectpr_invalid_parent' | 'sectpr_in_ppr_without_paragraph_parent' | 'sectpr_reference_missing_rid' | 'sectpr_reference_dangling_rid';
|
|
2
|
+
export interface SectPrAuditIssue {
|
|
3
|
+
type: SectPrIssueType;
|
|
4
|
+
path: string;
|
|
5
|
+
message: string;
|
|
6
|
+
rid?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface SectPrAuditSummary {
|
|
9
|
+
ok: boolean;
|
|
10
|
+
issues: SectPrAuditIssue[];
|
|
11
|
+
stats: {
|
|
12
|
+
bodyLevelSectPrCount: number;
|
|
13
|
+
paragraphLevelSectPrCount: number;
|
|
14
|
+
totalSectPrCount: number;
|
|
15
|
+
referenceCount: number;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export declare function auditSectPr(documentXml: string, documentRelsXml?: string | null): SectPrAuditSummary;
|
|
19
|
+
//# sourceMappingURL=sectPrAudit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sectPrAudit.d.ts","sourceRoot":"","sources":["../../src/primitives/sectPrAudit.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,4BAA4B,GAC5B,4BAA4B,GAC5B,uBAAuB,GACvB,wCAAwC,GACxC,8BAA8B,GAC9B,+BAA+B,CAAC;AAEpC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,KAAK,EAAE;QACL,oBAAoB,EAAE,MAAM,CAAC;QAC7B,yBAAyB,EAAE,MAAM,CAAC;QAClC,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AA8DD,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,kBAAkB,CAoHpG"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { parseXml } from './xml.js';
|
|
2
|
+
import { childElements } from './dom-helpers.js';
|
|
3
|
+
import { OOXML } from './namespaces.js';
|
|
4
|
+
function elementSiblingIndex(node) {
|
|
5
|
+
const parent = node.parentNode;
|
|
6
|
+
if (!parent)
|
|
7
|
+
return 1;
|
|
8
|
+
let idx = 0;
|
|
9
|
+
for (const sibling of childElements(parent)) {
|
|
10
|
+
if (sibling.tagName === node.tagName) {
|
|
11
|
+
idx++;
|
|
12
|
+
}
|
|
13
|
+
if (sibling === node) {
|
|
14
|
+
return idx;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return idx || 1;
|
|
18
|
+
}
|
|
19
|
+
function nodePath(node) {
|
|
20
|
+
const parts = [];
|
|
21
|
+
let current = node;
|
|
22
|
+
while (current) {
|
|
23
|
+
parts.push(`${current.tagName}[${elementSiblingIndex(current)}]`);
|
|
24
|
+
const parentNode = current.parentNode;
|
|
25
|
+
if (!parentNode || parentNode.nodeType !== 1) {
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
current = parentNode;
|
|
29
|
+
}
|
|
30
|
+
return parts.reverse().join('/');
|
|
31
|
+
}
|
|
32
|
+
function collectRelationshipIds(documentRelsXml) {
|
|
33
|
+
if (!documentRelsXml) {
|
|
34
|
+
return new Set();
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const relDoc = parseXml(documentRelsXml);
|
|
38
|
+
const ids = new Set();
|
|
39
|
+
const relationships = relDoc.getElementsByTagName('Relationship');
|
|
40
|
+
for (let i = 0; i < relationships.length; i++) {
|
|
41
|
+
const rel = relationships.item(i);
|
|
42
|
+
const id = rel?.getAttribute('Id');
|
|
43
|
+
if (id) {
|
|
44
|
+
ids.add(id);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return ids;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return new Set();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function getRid(ref) {
|
|
54
|
+
return (ref.getAttribute('r:id') ??
|
|
55
|
+
ref.getAttributeNS(OOXML.R_NS, 'id') ??
|
|
56
|
+
ref.getAttribute('id') ??
|
|
57
|
+
undefined);
|
|
58
|
+
}
|
|
59
|
+
export function auditSectPr(documentXml, documentRelsXml) {
|
|
60
|
+
const issues = [];
|
|
61
|
+
const relIds = collectRelationshipIds(documentRelsXml);
|
|
62
|
+
const doc = parseXml(documentXml);
|
|
63
|
+
const body = doc.getElementsByTagName('w:body').item(0);
|
|
64
|
+
if (!body) {
|
|
65
|
+
return {
|
|
66
|
+
ok: false,
|
|
67
|
+
issues: [
|
|
68
|
+
{
|
|
69
|
+
type: 'missing_body',
|
|
70
|
+
path: 'w:document',
|
|
71
|
+
message: 'Missing w:body element',
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
stats: {
|
|
75
|
+
bodyLevelSectPrCount: 0,
|
|
76
|
+
paragraphLevelSectPrCount: 0,
|
|
77
|
+
totalSectPrCount: 0,
|
|
78
|
+
referenceCount: 0,
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const bodyChildren = childElements(body);
|
|
83
|
+
const bodyLevelSectPrNodes = bodyChildren.filter((child) => child.tagName === 'w:sectPr');
|
|
84
|
+
if (bodyLevelSectPrNodes.length > 1) {
|
|
85
|
+
for (const sectPr of bodyLevelSectPrNodes) {
|
|
86
|
+
issues.push({
|
|
87
|
+
type: 'multiple_body_level_sectpr',
|
|
88
|
+
path: nodePath(sectPr),
|
|
89
|
+
message: 'Multiple body-level w:sectPr elements found; expected at most one final w:sectPr',
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (bodyLevelSectPrNodes.length > 0) {
|
|
94
|
+
const lastChild = bodyChildren[bodyChildren.length - 1];
|
|
95
|
+
for (const sectPr of bodyLevelSectPrNodes) {
|
|
96
|
+
if (sectPr !== lastChild) {
|
|
97
|
+
issues.push({
|
|
98
|
+
type: 'body_level_sectpr_not_last',
|
|
99
|
+
path: nodePath(sectPr),
|
|
100
|
+
message: 'Body-level w:sectPr is not the final direct child of w:body',
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const sectPrNodes = Array.from(doc.getElementsByTagName('w:sectPr'));
|
|
106
|
+
let paragraphLevelSectPrCount = 0;
|
|
107
|
+
let referenceCount = 0;
|
|
108
|
+
for (const sectPr of sectPrNodes) {
|
|
109
|
+
const parent = sectPr.parentNode;
|
|
110
|
+
const parentTag = parent && parent.nodeType === 1 ? parent.tagName : '';
|
|
111
|
+
if (parentTag === 'w:pPr') {
|
|
112
|
+
paragraphLevelSectPrCount++;
|
|
113
|
+
const grand = parent.parentNode;
|
|
114
|
+
const grandTag = grand && grand.nodeType === 1 ? grand.tagName : '';
|
|
115
|
+
if (grandTag !== 'w:p') {
|
|
116
|
+
issues.push({
|
|
117
|
+
type: 'sectpr_in_ppr_without_paragraph_parent',
|
|
118
|
+
path: nodePath(sectPr),
|
|
119
|
+
message: 'w:sectPr in w:pPr does not have w:p as parent',
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else if (parentTag !== 'w:body') {
|
|
124
|
+
issues.push({
|
|
125
|
+
type: 'sectpr_invalid_parent',
|
|
126
|
+
path: nodePath(sectPr),
|
|
127
|
+
message: `w:sectPr has invalid parent '${parentTag || '(none)'}'`,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
for (const child of childElements(sectPr)) {
|
|
131
|
+
if (child.tagName !== 'w:headerReference' && child.tagName !== 'w:footerReference') {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
referenceCount++;
|
|
135
|
+
const rid = getRid(child);
|
|
136
|
+
if (!rid) {
|
|
137
|
+
issues.push({
|
|
138
|
+
type: 'sectpr_reference_missing_rid',
|
|
139
|
+
path: nodePath(child),
|
|
140
|
+
message: `${child.tagName} is missing r:id`,
|
|
141
|
+
});
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
if (relIds.size > 0 && !relIds.has(rid)) {
|
|
145
|
+
issues.push({
|
|
146
|
+
type: 'sectpr_reference_dangling_rid',
|
|
147
|
+
path: nodePath(child),
|
|
148
|
+
message: `${child.tagName} references missing relationship id '${rid}'`,
|
|
149
|
+
rid,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
ok: issues.length === 0,
|
|
156
|
+
issues,
|
|
157
|
+
stats: {
|
|
158
|
+
bodyLevelSectPrCount: bodyLevelSectPrNodes.length,
|
|
159
|
+
paragraphLevelSectPrCount,
|
|
160
|
+
totalSectPrCount: sectPrNodes.length,
|
|
161
|
+
referenceCount,
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=sectPrAudit.js.map
|