@usejunior/docx-core 0.0.1 → 0.1.1
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 +21 -0
- package/README.md +86 -28
- package/dist/.tsbuildinfo +1 -0
- package/dist/atomizer.d.ts +218 -0
- package/dist/atomizer.d.ts.map +1 -0
- package/dist/atomizer.js +856 -0
- package/dist/atomizer.js.map +1 -0
- package/dist/baselines/atomizer/atomLcs.d.ts +96 -0
- package/dist/baselines/atomizer/atomLcs.d.ts.map +1 -0
- package/dist/baselines/atomizer/atomLcs.js +347 -0
- package/dist/baselines/atomizer/atomLcs.js.map +1 -0
- package/dist/baselines/atomizer/debug.d.ts +41 -0
- package/dist/baselines/atomizer/debug.d.ts.map +1 -0
- package/dist/baselines/atomizer/debug.js +85 -0
- package/dist/baselines/atomizer/debug.js.map +1 -0
- package/dist/baselines/atomizer/documentReconstructor.d.ts +64 -0
- package/dist/baselines/atomizer/documentReconstructor.d.ts.map +1 -0
- package/dist/baselines/atomizer/documentReconstructor.js +939 -0
- package/dist/baselines/atomizer/documentReconstructor.js.map +1 -0
- package/dist/baselines/atomizer/hierarchicalLcs.d.ts +111 -0
- package/dist/baselines/atomizer/hierarchicalLcs.d.ts.map +1 -0
- package/dist/baselines/atomizer/hierarchicalLcs.js +469 -0
- package/dist/baselines/atomizer/hierarchicalLcs.js.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier.d.ts +183 -0
- package/dist/baselines/atomizer/inPlaceModifier.d.ts.map +1 -0
- package/dist/baselines/atomizer/inPlaceModifier.js +1600 -0
- package/dist/baselines/atomizer/inPlaceModifier.js.map +1 -0
- package/dist/baselines/atomizer/numberingIntegration.d.ts +59 -0
- package/dist/baselines/atomizer/numberingIntegration.d.ts.map +1 -0
- package/dist/baselines/atomizer/numberingIntegration.js +209 -0
- package/dist/baselines/atomizer/numberingIntegration.js.map +1 -0
- package/dist/baselines/atomizer/pipeline.d.ts +65 -0
- package/dist/baselines/atomizer/pipeline.d.ts.map +1 -0
- package/dist/baselines/atomizer/pipeline.js +510 -0
- package/dist/baselines/atomizer/pipeline.js.map +1 -0
- package/dist/baselines/atomizer/premergeRuns.d.ts +26 -0
- package/dist/baselines/atomizer/premergeRuns.d.ts.map +1 -0
- package/dist/baselines/atomizer/premergeRuns.js +150 -0
- package/dist/baselines/atomizer/premergeRuns.js.map +1 -0
- package/dist/baselines/atomizer/trackChangesAcceptor.d.ts +63 -0
- package/dist/baselines/atomizer/trackChangesAcceptor.d.ts.map +1 -0
- package/dist/baselines/atomizer/trackChangesAcceptor.js +254 -0
- package/dist/baselines/atomizer/trackChangesAcceptor.js.map +1 -0
- package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts +64 -0
- package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts.map +1 -0
- package/dist/baselines/atomizer/trackChangesAcceptorAst.js +586 -0
- package/dist/baselines/atomizer/trackChangesAcceptorAst.js.map +1 -0
- package/dist/baselines/atomizer/xmlToWmlElement.d.ts +65 -0
- package/dist/baselines/atomizer/xmlToWmlElement.d.ts.map +1 -0
- package/dist/baselines/atomizer/xmlToWmlElement.js +95 -0
- package/dist/baselines/atomizer/xmlToWmlElement.js.map +1 -0
- package/dist/baselines/diffmatch/documentBuilder.d.ts +44 -0
- package/dist/baselines/diffmatch/documentBuilder.d.ts.map +1 -0
- package/dist/baselines/diffmatch/documentBuilder.js +227 -0
- package/dist/baselines/diffmatch/documentBuilder.js.map +1 -0
- package/dist/baselines/diffmatch/paragraphAlignment.d.ts +75 -0
- package/dist/baselines/diffmatch/paragraphAlignment.d.ts.map +1 -0
- package/dist/baselines/diffmatch/paragraphAlignment.js +206 -0
- package/dist/baselines/diffmatch/paragraphAlignment.js.map +1 -0
- package/dist/baselines/diffmatch/pipeline.d.ts +33 -0
- package/dist/baselines/diffmatch/pipeline.d.ts.map +1 -0
- package/dist/baselines/diffmatch/pipeline.js +84 -0
- package/dist/baselines/diffmatch/pipeline.js.map +1 -0
- package/dist/baselines/diffmatch/runDiff.d.ts +53 -0
- package/dist/baselines/diffmatch/runDiff.d.ts.map +1 -0
- package/dist/baselines/diffmatch/runDiff.js +253 -0
- package/dist/baselines/diffmatch/runDiff.js.map +1 -0
- package/dist/baselines/diffmatch/trackChangesRenderer.d.ts +64 -0
- package/dist/baselines/diffmatch/trackChangesRenderer.d.ts.map +1 -0
- package/dist/baselines/diffmatch/trackChangesRenderer.js +178 -0
- package/dist/baselines/diffmatch/trackChangesRenderer.js.map +1 -0
- package/dist/baselines/diffmatch/xmlParser.d.ts +45 -0
- package/dist/baselines/diffmatch/xmlParser.d.ts.map +1 -0
- package/dist/baselines/diffmatch/xmlParser.js +344 -0
- package/dist/baselines/diffmatch/xmlParser.js.map +1 -0
- package/dist/baselines/wmlcomparer/DocxodusWasm.d.ts +51 -0
- package/dist/baselines/wmlcomparer/DocxodusWasm.d.ts.map +1 -0
- package/dist/baselines/wmlcomparer/DocxodusWasm.js +83 -0
- package/dist/baselines/wmlcomparer/DocxodusWasm.js.map +1 -0
- package/dist/baselines/wmlcomparer/DotnetCli.d.ts +40 -0
- package/dist/baselines/wmlcomparer/DotnetCli.d.ts.map +1 -0
- package/dist/baselines/wmlcomparer/DotnetCli.js +135 -0
- package/dist/baselines/wmlcomparer/DotnetCli.js.map +1 -0
- package/dist/benchmark/metrics.d.ts +72 -0
- package/dist/benchmark/metrics.d.ts.map +1 -0
- package/dist/benchmark/metrics.js +45 -0
- package/dist/benchmark/metrics.js.map +1 -0
- package/dist/benchmark/reporter.d.ts +23 -0
- package/dist/benchmark/reporter.d.ts.map +1 -0
- package/dist/benchmark/reporter.js +147 -0
- package/dist/benchmark/reporter.js.map +1 -0
- package/dist/benchmark/runner.d.ts +30 -0
- package/dist/benchmark/runner.d.ts.map +1 -0
- package/dist/benchmark/runner.js +233 -0
- package/dist/benchmark/runner.js.map +1 -0
- package/dist/cli/compare-two.d.ts +28 -0
- package/dist/cli/compare-two.d.ts.map +1 -0
- package/dist/cli/compare-two.js +110 -0
- package/dist/cli/compare-two.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +21 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core-types.d.ts +296 -0
- package/dist/core-types.d.ts.map +1 -0
- package/dist/core-types.js +122 -0
- package/dist/core-types.js.map +1 -0
- package/dist/footnotes.d.ts +144 -0
- package/dist/footnotes.d.ts.map +1 -0
- package/dist/footnotes.js +291 -0
- package/dist/footnotes.js.map +1 -0
- package/dist/format-detection.d.ts +120 -0
- package/dist/format-detection.d.ts.map +1 -0
- package/dist/format-detection.js +338 -0
- package/dist/format-detection.js.map +1 -0
- package/dist/index.d.ts +177 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/integration/output-artifacts.d.ts +6 -0
- package/dist/integration/output-artifacts.d.ts.map +1 -0
- package/dist/integration/output-artifacts.js +30 -0
- package/dist/integration/output-artifacts.js.map +1 -0
- package/dist/move-detection.d.ts +211 -0
- package/dist/move-detection.d.ts.map +1 -0
- package/dist/move-detection.js +391 -0
- package/dist/move-detection.js.map +1 -0
- package/dist/numbering.d.ts +136 -0
- package/dist/numbering.d.ts.map +1 -0
- package/dist/numbering.js +446 -0
- package/dist/numbering.js.map +1 -0
- package/dist/primitives/accept_changes.d.ts +30 -0
- package/dist/primitives/accept_changes.d.ts.map +1 -0
- package/dist/primitives/accept_changes.js +241 -0
- package/dist/primitives/accept_changes.js.map +1 -0
- package/dist/primitives/bookmarks.d.ts +12 -0
- package/dist/primitives/bookmarks.d.ts.map +1 -0
- package/dist/primitives/bookmarks.js +248 -0
- package/dist/primitives/bookmarks.js.map +1 -0
- package/dist/primitives/comments.d.ts +88 -0
- package/dist/primitives/comments.d.ts.map +1 -0
- package/dist/primitives/comments.js +703 -0
- package/dist/primitives/comments.js.map +1 -0
- package/dist/primitives/document.d.ts +168 -0
- package/dist/primitives/document.d.ts.map +1 -0
- package/dist/primitives/document.js +532 -0
- package/dist/primitives/document.js.map +1 -0
- package/dist/primitives/document_view.d.ts +93 -0
- package/dist/primitives/document_view.d.ts.map +1 -0
- package/dist/primitives/document_view.js +722 -0
- package/dist/primitives/document_view.js.map +1 -0
- package/dist/primitives/dom-helpers.d.ts +94 -0
- package/dist/primitives/dom-helpers.d.ts.map +1 -0
- package/dist/primitives/dom-helpers.js +219 -0
- package/dist/primitives/dom-helpers.js.map +1 -0
- package/dist/primitives/errors.d.ts +7 -0
- package/dist/primitives/errors.d.ts.map +1 -0
- package/dist/primitives/errors.js +10 -0
- package/dist/primitives/errors.js.map +1 -0
- package/dist/primitives/extract_revisions.d.ts +50 -0
- package/dist/primitives/extract_revisions.d.ts.map +1 -0
- package/dist/primitives/extract_revisions.js +340 -0
- package/dist/primitives/extract_revisions.js.map +1 -0
- package/dist/primitives/footnotes.d.ts +37 -0
- package/dist/primitives/footnotes.d.ts.map +1 -0
- package/dist/primitives/footnotes.js +552 -0
- package/dist/primitives/footnotes.js.map +1 -0
- package/dist/primitives/formatting_tags.d.ts +30 -0
- package/dist/primitives/formatting_tags.d.ts.map +1 -0
- package/dist/primitives/formatting_tags.js +217 -0
- package/dist/primitives/formatting_tags.js.map +1 -0
- package/dist/primitives/index.d.ts +26 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +26 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/primitives/layout.d.ts +53 -0
- package/dist/primitives/layout.d.ts.map +1 -0
- package/dist/primitives/layout.js +178 -0
- package/dist/primitives/layout.js.map +1 -0
- package/dist/primitives/list_labels.d.ts +19 -0
- package/dist/primitives/list_labels.d.ts.map +1 -0
- package/dist/primitives/list_labels.js +57 -0
- package/dist/primitives/list_labels.js.map +1 -0
- package/dist/primitives/matching.d.ts +17 -0
- package/dist/primitives/matching.d.ts.map +1 -0
- package/dist/primitives/matching.js +144 -0
- package/dist/primitives/matching.js.map +1 -0
- package/dist/primitives/merge_runs.d.ts +23 -0
- package/dist/primitives/merge_runs.d.ts.map +1 -0
- package/dist/primitives/merge_runs.js +195 -0
- package/dist/primitives/merge_runs.js.map +1 -0
- package/dist/primitives/namespaces.d.ts +90 -0
- package/dist/primitives/namespaces.d.ts.map +1 -0
- package/dist/primitives/namespaces.js +107 -0
- package/dist/primitives/namespaces.js.map +1 -0
- package/dist/primitives/numbering.d.ts +27 -0
- package/dist/primitives/numbering.d.ts.map +1 -0
- package/dist/primitives/numbering.js +182 -0
- package/dist/primitives/numbering.js.map +1 -0
- package/dist/primitives/prevent_double_elevation.d.ts +18 -0
- package/dist/primitives/prevent_double_elevation.d.ts.map +1 -0
- package/dist/primitives/prevent_double_elevation.js +190 -0
- package/dist/primitives/prevent_double_elevation.js.map +1 -0
- package/dist/primitives/reject_changes.d.ts +27 -0
- package/dist/primitives/reject_changes.d.ts.map +1 -0
- package/dist/primitives/reject_changes.js +371 -0
- package/dist/primitives/reject_changes.js.map +1 -0
- package/dist/primitives/relationships.d.ts +7 -0
- package/dist/primitives/relationships.d.ts.map +1 -0
- package/dist/primitives/relationships.js +24 -0
- package/dist/primitives/relationships.js.map +1 -0
- package/dist/primitives/semantic_tags.d.ts +32 -0
- package/dist/primitives/semantic_tags.d.ts.map +1 -0
- package/dist/primitives/semantic_tags.js +139 -0
- package/dist/primitives/semantic_tags.js.map +1 -0
- package/dist/primitives/simplify_redlines.d.ts +19 -0
- package/dist/primitives/simplify_redlines.d.ts.map +1 -0
- package/dist/primitives/simplify_redlines.js +94 -0
- package/dist/primitives/simplify_redlines.js.map +1 -0
- package/dist/primitives/styles.d.ts +36 -0
- package/dist/primitives/styles.d.ts.map +1 -0
- package/dist/primitives/styles.js +190 -0
- package/dist/primitives/styles.js.map +1 -0
- package/dist/primitives/text.d.ts +27 -0
- package/dist/primitives/text.d.ts.map +1 -0
- package/dist/primitives/text.js +416 -0
- package/dist/primitives/text.js.map +1 -0
- package/dist/primitives/validate_document.d.ts +24 -0
- package/dist/primitives/validate_document.d.ts.map +1 -0
- package/dist/primitives/validate_document.js +147 -0
- package/dist/primitives/validate_document.js.map +1 -0
- package/dist/primitives/xml.d.ts +5 -0
- package/dist/primitives/xml.d.ts.map +1 -0
- package/dist/primitives/xml.js +19 -0
- package/dist/primitives/xml.js.map +1 -0
- package/dist/primitives/zip.d.ts +25 -0
- package/dist/primitives/zip.d.ts.map +1 -0
- package/dist/primitives/zip.js +78 -0
- package/dist/primitives/zip.js.map +1 -0
- package/dist/shared/docx/DocxArchive.d.ts +94 -0
- package/dist/shared/docx/DocxArchive.d.ts.map +1 -0
- package/dist/shared/docx/DocxArchive.js +169 -0
- package/dist/shared/docx/DocxArchive.js.map +1 -0
- package/dist/shared/ooxml/namespaces.d.ts +149 -0
- package/dist/shared/ooxml/namespaces.d.ts.map +1 -0
- package/dist/shared/ooxml/namespaces.js +224 -0
- package/dist/shared/ooxml/namespaces.js.map +1 -0
- package/dist/shared/ooxml/types.d.ts +136 -0
- package/dist/shared/ooxml/types.d.ts.map +1 -0
- package/dist/shared/ooxml/types.js +7 -0
- package/dist/shared/ooxml/types.js.map +1 -0
- package/package.json +63 -6
|
@@ -0,0 +1,586 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Track Changes Acceptor/Rejector (AST-based)
|
|
3
|
+
*
|
|
4
|
+
* AST-based utilities to accept or reject all track changes in a document.
|
|
5
|
+
* Replaces the regex-based implementation for better reliability with nested structures.
|
|
6
|
+
*/
|
|
7
|
+
import { parseDocumentXml, serializeToXml } from './xmlToWmlElement.js';
|
|
8
|
+
import { removeAllByTagName, unwrapAllByTagName, findAllByTagName, renameElement, insertChildAt, childElements, getLeafText, NODE_TYPE, } from '../../primitives/index.js';
|
|
9
|
+
/** xmldom does not implement parentElement; use parentNode with an Element guard. */
|
|
10
|
+
function parentElement(node) {
|
|
11
|
+
const p = node.parentNode;
|
|
12
|
+
return p && p.nodeType === NODE_TYPE.ELEMENT ? p : undefined;
|
|
13
|
+
}
|
|
14
|
+
function getParagraphPPr(p) {
|
|
15
|
+
return childElements(p).find((c) => c.tagName === 'w:pPr');
|
|
16
|
+
}
|
|
17
|
+
function paragraphHasParaMarker(p, tagName) {
|
|
18
|
+
const pPr = getParagraphPPr(p);
|
|
19
|
+
if (!pPr)
|
|
20
|
+
return false;
|
|
21
|
+
return findAllByTagName(pPr, tagName).length > 0;
|
|
22
|
+
}
|
|
23
|
+
function removeParaMarkers(root) {
|
|
24
|
+
// Remove paragraph-level revision markers (<w:ins/> / <w:del/>) that live under <w:pPr>.
|
|
25
|
+
for (const p of findAllByTagName(root, 'w:p')) {
|
|
26
|
+
const pPr = getParagraphPPr(p);
|
|
27
|
+
if (!pPr)
|
|
28
|
+
continue;
|
|
29
|
+
const markers = [
|
|
30
|
+
...findAllByTagName(pPr, 'w:ins'),
|
|
31
|
+
...findAllByTagName(pPr, 'w:del'),
|
|
32
|
+
];
|
|
33
|
+
for (const m of markers) {
|
|
34
|
+
if (m.parentNode)
|
|
35
|
+
m.parentNode.removeChild(m);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function findContainingParagraph(node) {
|
|
40
|
+
let current = node;
|
|
41
|
+
while (current) {
|
|
42
|
+
if (current.tagName === 'w:p') {
|
|
43
|
+
return current;
|
|
44
|
+
}
|
|
45
|
+
current = parentElement(current);
|
|
46
|
+
}
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
function findNeighborParagraphOutsideRemoval(paragraph, paragraphsToRemove, direction) {
|
|
50
|
+
const parent = parentElement(paragraph);
|
|
51
|
+
if (!parent) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
const siblings = childElements(parent);
|
|
55
|
+
const paragraphIndex = siblings.indexOf(paragraph);
|
|
56
|
+
if (paragraphIndex < 0) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
const step = direction === 'previous' ? -1 : 1;
|
|
60
|
+
for (let i = paragraphIndex + step; i >= 0 && i < siblings.length; i += step) {
|
|
61
|
+
const sibling = siblings[i];
|
|
62
|
+
if (sibling?.tagName !== 'w:p') {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (paragraphsToRemove.has(sibling)) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
return sibling;
|
|
69
|
+
}
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
function paragraphContentStartIndex(paragraph) {
|
|
73
|
+
const children = childElements(paragraph);
|
|
74
|
+
let idx = 0;
|
|
75
|
+
while (idx < children.length && children[idx]?.tagName === 'w:pPr') {
|
|
76
|
+
idx++;
|
|
77
|
+
}
|
|
78
|
+
return idx;
|
|
79
|
+
}
|
|
80
|
+
function moveBookmarkMarker(marker, targetParagraph, position) {
|
|
81
|
+
if (marker.tagName === 'w:bookmarkStart') {
|
|
82
|
+
const markerId = marker.getAttribute('w:id');
|
|
83
|
+
const markerName = marker.getAttribute('w:name');
|
|
84
|
+
for (const existing of findAllByTagName(targetParagraph, 'w:bookmarkStart')) {
|
|
85
|
+
if (markerId && existing.getAttribute('w:id') === markerId) {
|
|
86
|
+
if (marker.parentNode)
|
|
87
|
+
marker.parentNode.removeChild(marker);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (markerName && existing.getAttribute('w:name') === markerName) {
|
|
91
|
+
if (marker.parentNode)
|
|
92
|
+
marker.parentNode.removeChild(marker);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (marker.tagName === 'w:bookmarkEnd') {
|
|
98
|
+
const markerId = marker.getAttribute('w:id');
|
|
99
|
+
if (markerId) {
|
|
100
|
+
for (const existing of findAllByTagName(targetParagraph, 'w:bookmarkEnd')) {
|
|
101
|
+
if (existing.getAttribute('w:id') === markerId) {
|
|
102
|
+
if (marker.parentNode)
|
|
103
|
+
marker.parentNode.removeChild(marker);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (marker.parentNode) {
|
|
110
|
+
marker.parentNode.removeChild(marker);
|
|
111
|
+
}
|
|
112
|
+
if (position === 'start') {
|
|
113
|
+
insertChildAt(targetParagraph, marker, paragraphContentStartIndex(targetParagraph));
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
targetParagraph.appendChild(marker);
|
|
117
|
+
}
|
|
118
|
+
function collectBookmarksById(nodes) {
|
|
119
|
+
const byId = new Map();
|
|
120
|
+
for (const node of nodes) {
|
|
121
|
+
const id = node.getAttribute('w:id');
|
|
122
|
+
if (!id) {
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
const existing = byId.get(id);
|
|
126
|
+
if (existing) {
|
|
127
|
+
existing.push(node);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
byId.set(id, [node]);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return byId;
|
|
134
|
+
}
|
|
135
|
+
function hasCounterpartOutsideRemovedParagraphs(counterpartNodes, paragraphsToRemove, sourceParagraph) {
|
|
136
|
+
if (!counterpartNodes || counterpartNodes.length === 0) {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
for (const node of counterpartNodes) {
|
|
140
|
+
if (!node.parentNode) {
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
const nodeParagraph = findContainingParagraph(node);
|
|
144
|
+
if (!nodeParagraph || nodeParagraph === sourceParagraph) {
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (!paragraphsToRemove.has(nodeParagraph)) {
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
function collectReferencedBookmarkNamesOutsideRemovedParagraphs(root, paragraphsToRemove) {
|
|
154
|
+
const names = new Set();
|
|
155
|
+
const refRegex = /\b(?:PAGEREF|REF)\s+([^\s\\]+)/g;
|
|
156
|
+
for (const instrText of findAllByTagName(root, 'w:instrText')) {
|
|
157
|
+
const paragraph = findContainingParagraph(instrText);
|
|
158
|
+
if (paragraph && paragraphsToRemove.has(paragraph)) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
const text = getLeafText(instrText) ?? '';
|
|
162
|
+
for (const match of text.matchAll(refRegex)) {
|
|
163
|
+
const name = match[1]?.trim();
|
|
164
|
+
if (name) {
|
|
165
|
+
names.add(name);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return names;
|
|
170
|
+
}
|
|
171
|
+
function getBookmarkNameForId(startsById, id) {
|
|
172
|
+
const starts = startsById.get(id);
|
|
173
|
+
if (!starts)
|
|
174
|
+
return undefined;
|
|
175
|
+
for (const start of starts) {
|
|
176
|
+
const name = start.getAttribute('w:name');
|
|
177
|
+
if (name)
|
|
178
|
+
return name;
|
|
179
|
+
}
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Preserve bookmark markers that span outside paragraphs being removed during Reject All.
|
|
184
|
+
*
|
|
185
|
+
* Inserted paragraphs are removed wholesale. If they contain a bookmark boundary whose
|
|
186
|
+
* counterpart sits in a kept paragraph, dropping that boundary corrupts bookmark pairing.
|
|
187
|
+
* Move those boundary markers into adjacent kept paragraphs before removal.
|
|
188
|
+
*/
|
|
189
|
+
function preserveCrossParagraphBookmarksForReject(root, paragraphsToRemove) {
|
|
190
|
+
if (paragraphsToRemove.size === 0) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const startsById = collectBookmarksById(findAllByTagName(root, 'w:bookmarkStart'));
|
|
194
|
+
const endsById = collectBookmarksById(findAllByTagName(root, 'w:bookmarkEnd'));
|
|
195
|
+
const referencedNamesOutsideRemoved = collectReferencedBookmarkNamesOutsideRemovedParagraphs(root, paragraphsToRemove);
|
|
196
|
+
for (const paragraph of paragraphsToRemove) {
|
|
197
|
+
const startTarget = findNeighborParagraphOutsideRemoval(paragraph, paragraphsToRemove, 'next') ??
|
|
198
|
+
findNeighborParagraphOutsideRemoval(paragraph, paragraphsToRemove, 'previous');
|
|
199
|
+
const endTarget = findNeighborParagraphOutsideRemoval(paragraph, paragraphsToRemove, 'previous') ??
|
|
200
|
+
findNeighborParagraphOutsideRemoval(paragraph, paragraphsToRemove, 'next');
|
|
201
|
+
if (!startTarget && !endTarget) {
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
for (const start of findAllByTagName(paragraph, 'w:bookmarkStart')) {
|
|
205
|
+
if (!start.parentNode || !startTarget) {
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
const id = start.getAttribute('w:id');
|
|
209
|
+
if (!id) {
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
const startName = start.getAttribute('w:name');
|
|
213
|
+
const hasDuplicateStartOutside = hasCounterpartOutsideRemovedParagraphs(startsById.get(id), paragraphsToRemove, paragraph);
|
|
214
|
+
if (hasDuplicateStartOutside) {
|
|
215
|
+
// A surviving start marker with this ID already exists outside removed
|
|
216
|
+
// paragraphs. Moving this marker would create duplicate starts after
|
|
217
|
+
// Reject All.
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
const hasCounterpartOutside = hasCounterpartOutsideRemovedParagraphs(endsById.get(id), paragraphsToRemove, paragraph);
|
|
221
|
+
const referencedOutside = startName ? referencedNamesOutsideRemoved.has(startName) : false;
|
|
222
|
+
if (!hasCounterpartOutside && !referencedOutside) {
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
moveBookmarkMarker(start, startTarget, 'start');
|
|
226
|
+
}
|
|
227
|
+
for (const end of findAllByTagName(paragraph, 'w:bookmarkEnd')) {
|
|
228
|
+
if (!end.parentNode || !endTarget) {
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
const id = end.getAttribute('w:id');
|
|
232
|
+
if (!id) {
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
const hasDuplicateEndOutside = hasCounterpartOutsideRemovedParagraphs(endsById.get(id), paragraphsToRemove, paragraph);
|
|
236
|
+
if (hasDuplicateEndOutside) {
|
|
237
|
+
// A surviving end marker with this ID already exists outside removed
|
|
238
|
+
// paragraphs. Moving this marker would create duplicate ends after
|
|
239
|
+
// Reject All.
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
const hasCounterpartOutside = hasCounterpartOutsideRemovedParagraphs(startsById.get(id), paragraphsToRemove, paragraph);
|
|
243
|
+
const pairedName = getBookmarkNameForId(startsById, id);
|
|
244
|
+
const referencedOutside = pairedName ? referencedNamesOutsideRemoved.has(pairedName) : false;
|
|
245
|
+
if (!hasCounterpartOutside && !referencedOutside) {
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
moveBookmarkMarker(end, endTarget, 'end');
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Accept all track changes in document XML (AST-based).
|
|
254
|
+
*
|
|
255
|
+
* - Removes w:del elements entirely (deleted content disappears)
|
|
256
|
+
* - Unwraps w:ins elements (inserted content becomes normal)
|
|
257
|
+
* - Handles w:moveFrom (remove) and w:moveTo (unwrap)
|
|
258
|
+
* - Removes format change tracking elements
|
|
259
|
+
*
|
|
260
|
+
* @param documentXml - The document.xml content with track changes
|
|
261
|
+
* @returns Document XML with all changes accepted
|
|
262
|
+
*/
|
|
263
|
+
export function acceptAllChanges(documentXml) {
|
|
264
|
+
const root = parseDocumentXml(documentXml);
|
|
265
|
+
// First, find paragraphs that ONLY contain w:del or w:moveFrom content (no w:ins, no regular w:r)
|
|
266
|
+
// These paragraphs should be removed entirely when accepting
|
|
267
|
+
const paragraphsToRemove = new Set();
|
|
268
|
+
// Paragraph-level deletion markers (Aspose/Word encode deleted paragraphs via <w:pPr><w:rPr><w:del .../></w:rPr>)
|
|
269
|
+
// should remove the paragraph on Accept All.
|
|
270
|
+
for (const p of findAllByTagName(root, 'w:p')) {
|
|
271
|
+
if (paragraphHasParaMarker(p, 'w:del')) {
|
|
272
|
+
paragraphsToRemove.add(p);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// Check w:del elements
|
|
276
|
+
for (const del of findAllByTagName(root, 'w:del')) {
|
|
277
|
+
// Walk up to find containing w:p
|
|
278
|
+
let p;
|
|
279
|
+
let current = parentElement(del);
|
|
280
|
+
while (current) {
|
|
281
|
+
if (current.tagName === 'w:p') {
|
|
282
|
+
p = current;
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
current = parentElement(current);
|
|
286
|
+
}
|
|
287
|
+
if (p) {
|
|
288
|
+
// Check if this paragraph has any w:ins elements (should keep those)
|
|
289
|
+
const insElements = findAllByTagName(p, 'w:ins');
|
|
290
|
+
if (insElements.length > 0) {
|
|
291
|
+
continue; // Paragraph has inserted content, don't remove it
|
|
292
|
+
}
|
|
293
|
+
// Check if this paragraph has any w:r elements outside of w:del
|
|
294
|
+
// If the only content is inside w:del, we can remove the paragraph
|
|
295
|
+
let hasContentOutsideDel = false;
|
|
296
|
+
for (const child of childElements(p)) {
|
|
297
|
+
if (child.tagName === 'w:r') {
|
|
298
|
+
hasContentOutsideDel = true;
|
|
299
|
+
break;
|
|
300
|
+
}
|
|
301
|
+
if (child.tagName !== 'w:del' && child.tagName !== 'w:pPr' &&
|
|
302
|
+
child.tagName !== 'w:moveFromRangeStart' && child.tagName !== 'w:moveFromRangeEnd') {
|
|
303
|
+
// Check if this non-del child has w:r descendants
|
|
304
|
+
const runsInChild = findAllByTagName(child, 'w:r');
|
|
305
|
+
if (runsInChild.length > 0) {
|
|
306
|
+
hasContentOutsideDel = true;
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
if (!hasContentOutsideDel) {
|
|
312
|
+
paragraphsToRemove.add(p);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
// Also check w:moveFrom elements (moved-away content, also removed when accepting)
|
|
317
|
+
for (const moveFrom of findAllByTagName(root, 'w:moveFrom')) {
|
|
318
|
+
// Walk up to find containing w:p
|
|
319
|
+
let p;
|
|
320
|
+
let current = parentElement(moveFrom);
|
|
321
|
+
while (current) {
|
|
322
|
+
if (current.tagName === 'w:p') {
|
|
323
|
+
p = current;
|
|
324
|
+
break;
|
|
325
|
+
}
|
|
326
|
+
current = parentElement(current);
|
|
327
|
+
}
|
|
328
|
+
if (p && !paragraphsToRemove.has(p)) {
|
|
329
|
+
// Check if this paragraph has any w:ins or w:moveTo elements (should keep those)
|
|
330
|
+
const insElements = findAllByTagName(p, 'w:ins');
|
|
331
|
+
const moveToElements = findAllByTagName(p, 'w:moveTo');
|
|
332
|
+
if (insElements.length > 0 || moveToElements.length > 0) {
|
|
333
|
+
continue;
|
|
334
|
+
}
|
|
335
|
+
// Check if this paragraph has any w:r elements outside of w:del/w:moveFrom
|
|
336
|
+
let hasContentOutsideRemoved = false;
|
|
337
|
+
for (const child of childElements(p)) {
|
|
338
|
+
if (child.tagName === 'w:r') {
|
|
339
|
+
hasContentOutsideRemoved = true;
|
|
340
|
+
break;
|
|
341
|
+
}
|
|
342
|
+
if (child.tagName !== 'w:del' && child.tagName !== 'w:moveFrom' &&
|
|
343
|
+
child.tagName !== 'w:pPr' &&
|
|
344
|
+
child.tagName !== 'w:moveFromRangeStart' && child.tagName !== 'w:moveFromRangeEnd') {
|
|
345
|
+
const runsInChild = findAllByTagName(child, 'w:r');
|
|
346
|
+
if (runsInChild.length > 0) {
|
|
347
|
+
hasContentOutsideRemoved = true;
|
|
348
|
+
break;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
if (!hasContentOutsideRemoved) {
|
|
353
|
+
paragraphsToRemove.add(p);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
// Remove w:del elements entirely (deleted content disappears)
|
|
358
|
+
removeAllByTagName(root, 'w:del');
|
|
359
|
+
// Remove w:moveFrom elements entirely
|
|
360
|
+
removeAllByTagName(root, 'w:moveFrom');
|
|
361
|
+
// Remove move range markers
|
|
362
|
+
removeAllByTagName(root, 'w:moveFromRangeStart');
|
|
363
|
+
removeAllByTagName(root, 'w:moveFromRangeEnd');
|
|
364
|
+
removeAllByTagName(root, 'w:moveToRangeStart');
|
|
365
|
+
removeAllByTagName(root, 'w:moveToRangeEnd');
|
|
366
|
+
// Unwrap w:ins elements (keep content, remove wrapper)
|
|
367
|
+
unwrapAllByTagName(root, 'w:ins');
|
|
368
|
+
// Unwrap w:moveTo elements
|
|
369
|
+
unwrapAllByTagName(root, 'w:moveTo');
|
|
370
|
+
// Remove format change tracking
|
|
371
|
+
removeAllByTagName(root, 'w:rPrChange');
|
|
372
|
+
removeAllByTagName(root, 'w:pPrChange');
|
|
373
|
+
// Strip paragraph-level markers now that changes are accepted.
|
|
374
|
+
removeParaMarkers(root);
|
|
375
|
+
// Remove paragraphs that ONLY had w:del content (now empty after removal)
|
|
376
|
+
for (const p of paragraphsToRemove) {
|
|
377
|
+
if (p.parentNode) {
|
|
378
|
+
p.parentNode.removeChild(p);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
return serializeToXml(root);
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Reject all track changes in document XML (AST-based).
|
|
385
|
+
*
|
|
386
|
+
* - Removes w:ins elements entirely (inserted content disappears)
|
|
387
|
+
* - Unwraps w:del elements and converts w:delText to w:t
|
|
388
|
+
* - Handles w:moveFrom (unwrap) and w:moveTo (remove)
|
|
389
|
+
* - Removes format change tracking elements
|
|
390
|
+
*
|
|
391
|
+
* @param documentXml - The document.xml content with track changes
|
|
392
|
+
* @returns Document XML with all changes rejected
|
|
393
|
+
*/
|
|
394
|
+
export function rejectAllChanges(documentXml) {
|
|
395
|
+
const root = parseDocumentXml(documentXml);
|
|
396
|
+
// Step 1: Find paragraphs where w:ins is the ONLY substantive content
|
|
397
|
+
// (no w:del, no w:r outside track changes)
|
|
398
|
+
const paragraphsToRemove = new Set();
|
|
399
|
+
// Paragraph-level insertion markers (Aspose/Word encode inserted paragraphs via <w:pPr><w:rPr><w:ins .../></w:rPr>)
|
|
400
|
+
// should remove the paragraph on Reject All.
|
|
401
|
+
for (const p of findAllByTagName(root, 'w:p')) {
|
|
402
|
+
if (paragraphHasParaMarker(p, 'w:ins')) {
|
|
403
|
+
paragraphsToRemove.add(p);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
// Also check w:moveTo elements (moved-to content, also removed when rejecting)
|
|
407
|
+
for (const moveTo of findAllByTagName(root, 'w:moveTo')) {
|
|
408
|
+
// Walk up to find containing w:p
|
|
409
|
+
let p;
|
|
410
|
+
let current = parentElement(moveTo);
|
|
411
|
+
while (current) {
|
|
412
|
+
if (current.tagName === 'w:p') {
|
|
413
|
+
p = current;
|
|
414
|
+
break;
|
|
415
|
+
}
|
|
416
|
+
current = parentElement(current);
|
|
417
|
+
}
|
|
418
|
+
if (p && !paragraphsToRemove.has(p)) {
|
|
419
|
+
// Check if this paragraph has any w:del or w:moveFrom elements (should keep those)
|
|
420
|
+
const dels = findAllByTagName(p, 'w:del');
|
|
421
|
+
const moveFroms = findAllByTagName(p, 'w:moveFrom');
|
|
422
|
+
if (dels.length > 0 || moveFroms.length > 0) {
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
// Check if this paragraph has any w:r elements outside of w:ins/w:moveTo
|
|
426
|
+
let hasContentOutsideRemoved = false;
|
|
427
|
+
for (const child of childElements(p)) {
|
|
428
|
+
if (child.tagName === 'w:r') {
|
|
429
|
+
hasContentOutsideRemoved = true;
|
|
430
|
+
break;
|
|
431
|
+
}
|
|
432
|
+
if (child.tagName !== 'w:ins' && child.tagName !== 'w:moveTo' &&
|
|
433
|
+
child.tagName !== 'w:pPr' &&
|
|
434
|
+
child.tagName !== 'w:moveToRangeStart' && child.tagName !== 'w:moveToRangeEnd') {
|
|
435
|
+
const runsInChild = findAllByTagName(child, 'w:r');
|
|
436
|
+
if (runsInChild.length > 0) {
|
|
437
|
+
hasContentOutsideRemoved = true;
|
|
438
|
+
break;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
if (!hasContentOutsideRemoved) {
|
|
443
|
+
paragraphsToRemove.add(p);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
preserveCrossParagraphBookmarksForReject(root, paragraphsToRemove);
|
|
448
|
+
// Step 2: Remove w:ins elements entirely (inserted content disappears)
|
|
449
|
+
removeAllByTagName(root, 'w:ins');
|
|
450
|
+
// Step 3: Remove paragraphs that ONLY had w:ins content
|
|
451
|
+
for (const p of paragraphsToRemove) {
|
|
452
|
+
if (p.parentNode) {
|
|
453
|
+
p.parentNode.removeChild(p);
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
// Remove w:moveTo elements entirely
|
|
457
|
+
removeAllByTagName(root, 'w:moveTo');
|
|
458
|
+
// Remove move range markers
|
|
459
|
+
removeAllByTagName(root, 'w:moveFromRangeStart');
|
|
460
|
+
removeAllByTagName(root, 'w:moveFromRangeEnd');
|
|
461
|
+
removeAllByTagName(root, 'w:moveToRangeStart');
|
|
462
|
+
removeAllByTagName(root, 'w:moveToRangeEnd');
|
|
463
|
+
// Unwrap w:del elements (keep content, remove wrapper)
|
|
464
|
+
unwrapAllByTagName(root, 'w:del');
|
|
465
|
+
// Unwrap w:moveFrom elements
|
|
466
|
+
unwrapAllByTagName(root, 'w:moveFrom');
|
|
467
|
+
// Convert w:delText to w:t
|
|
468
|
+
for (const delText of findAllByTagName(root, 'w:delText')) {
|
|
469
|
+
renameElement(delText, 'w:t');
|
|
470
|
+
}
|
|
471
|
+
// Remove format change tracking
|
|
472
|
+
removeAllByTagName(root, 'w:rPrChange');
|
|
473
|
+
removeAllByTagName(root, 'w:pPrChange');
|
|
474
|
+
// Strip paragraph-level markers now that changes are rejected.
|
|
475
|
+
removeParaMarkers(root);
|
|
476
|
+
return serializeToXml(root);
|
|
477
|
+
}
|
|
478
|
+
/**
|
|
479
|
+
* Extract plain text content from document XML (AST-based).
|
|
480
|
+
*
|
|
481
|
+
* @param documentXml - The document.xml content
|
|
482
|
+
* @returns Plain text content
|
|
483
|
+
*/
|
|
484
|
+
export function extractTextContent(documentXml) {
|
|
485
|
+
const root = parseDocumentXml(documentXml);
|
|
486
|
+
const texts = [];
|
|
487
|
+
// Extract text from w:t elements
|
|
488
|
+
for (const t of findAllByTagName(root, 'w:t')) {
|
|
489
|
+
const text = getLeafText(t) ?? '';
|
|
490
|
+
if (text) {
|
|
491
|
+
texts.push(text);
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
// Also extract from w:delText (for rejected changes before conversion)
|
|
495
|
+
for (const delText of findAllByTagName(root, 'w:delText')) {
|
|
496
|
+
const text = getLeafText(delText) ?? '';
|
|
497
|
+
if (text) {
|
|
498
|
+
texts.push(text);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
return texts.join('');
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Extract text in document order, respecting paragraph breaks (AST-based).
|
|
505
|
+
*/
|
|
506
|
+
export function extractTextWithParagraphs(documentXml) {
|
|
507
|
+
const root = parseDocumentXml(documentXml);
|
|
508
|
+
const paragraphs = [];
|
|
509
|
+
// Find all paragraphs
|
|
510
|
+
for (const p of findAllByTagName(root, 'w:p')) {
|
|
511
|
+
const texts = [];
|
|
512
|
+
// Extract text from w:t elements within this paragraph
|
|
513
|
+
for (const t of findAllByTagName(p, 'w:t')) {
|
|
514
|
+
const text = getLeafText(t) ?? '';
|
|
515
|
+
if (text) {
|
|
516
|
+
texts.push(text);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
// Also check w:delText
|
|
520
|
+
for (const delText of findAllByTagName(p, 'w:delText')) {
|
|
521
|
+
const text = getLeafText(delText) ?? '';
|
|
522
|
+
if (text) {
|
|
523
|
+
texts.push(text);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
paragraphs.push(texts.join(''));
|
|
527
|
+
}
|
|
528
|
+
return paragraphs.join('\n');
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Normalize text for comparison (handles whitespace differences).
|
|
532
|
+
*
|
|
533
|
+
* Performs the following normalization:
|
|
534
|
+
* - Convert CRLF and CR to LF
|
|
535
|
+
* - Convert tabs to spaces
|
|
536
|
+
* - Collapse multiple spaces to single space
|
|
537
|
+
* - Strip trailing spaces from each line
|
|
538
|
+
* - Collapse multiple newlines to single newline
|
|
539
|
+
* - Trim leading/trailing whitespace
|
|
540
|
+
*/
|
|
541
|
+
export function normalizeText(text) {
|
|
542
|
+
return text
|
|
543
|
+
.replace(/\r\n/g, '\n')
|
|
544
|
+
.replace(/\r/g, '\n')
|
|
545
|
+
.replace(/\t/g, ' ')
|
|
546
|
+
.replace(/ +/g, ' ')
|
|
547
|
+
.replace(/ \n/g, '\n') // Strip trailing spaces from lines
|
|
548
|
+
.replace(/\n /g, '\n') // Strip leading spaces from lines
|
|
549
|
+
.replace(/\n+/g, '\n')
|
|
550
|
+
.trim();
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* Compare two texts and return detailed differences.
|
|
554
|
+
*/
|
|
555
|
+
export function compareTexts(expected, actual) {
|
|
556
|
+
const normalizedExpected = normalizeText(expected);
|
|
557
|
+
const normalizedActual = normalizeText(actual);
|
|
558
|
+
const differences = [];
|
|
559
|
+
if (expected !== actual) {
|
|
560
|
+
// Find first difference
|
|
561
|
+
let firstDiff = 0;
|
|
562
|
+
while (firstDiff < expected.length && firstDiff < actual.length) {
|
|
563
|
+
if (expected[firstDiff] !== actual[firstDiff]) {
|
|
564
|
+
break;
|
|
565
|
+
}
|
|
566
|
+
firstDiff++;
|
|
567
|
+
}
|
|
568
|
+
if (firstDiff < expected.length || firstDiff < actual.length) {
|
|
569
|
+
const context = 50;
|
|
570
|
+
const start = Math.max(0, firstDiff - context);
|
|
571
|
+
const expectedSnippet = expected.slice(start, firstDiff + context);
|
|
572
|
+
const actualSnippet = actual.slice(start, firstDiff + context);
|
|
573
|
+
differences.push(`First difference at position ${firstDiff}:`);
|
|
574
|
+
differences.push(` Expected: "...${expectedSnippet}..."`);
|
|
575
|
+
differences.push(` Actual: "...${actualSnippet}..."`);
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
return {
|
|
579
|
+
identical: expected === actual,
|
|
580
|
+
normalizedIdentical: normalizedExpected === normalizedActual,
|
|
581
|
+
expectedLength: expected.length,
|
|
582
|
+
actualLength: actual.length,
|
|
583
|
+
differences,
|
|
584
|
+
};
|
|
585
|
+
}
|
|
586
|
+
//# sourceMappingURL=trackChangesAcceptorAst.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trackChangesAcceptorAst.js","sourceRoot":"","sources":["../../../src/baselines/atomizer/trackChangesAcceptorAst.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* XML Parsing and Serialization
|
|
3
|
+
*
|
|
4
|
+
* Parses document.xml into a DOM tree using @xmldom/xmldom.
|
|
5
|
+
* Replaces the former fast-xml-parser + WmlElement POJO approach.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Parse document.xml string into a DOM Element tree.
|
|
9
|
+
*
|
|
10
|
+
* @param xml - The raw document.xml content
|
|
11
|
+
* @returns Root element (the Document's documentElement)
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseDocumentXml(xml: string): Element;
|
|
14
|
+
/**
|
|
15
|
+
* Find the w:body element in the document tree.
|
|
16
|
+
*
|
|
17
|
+
* @param root - The document root element
|
|
18
|
+
* @returns The w:body element, or undefined if not found
|
|
19
|
+
*/
|
|
20
|
+
export declare function findBody(root: Element): Element | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Find the w:document element in the document tree.
|
|
23
|
+
*
|
|
24
|
+
* @param root - The document root element
|
|
25
|
+
* @returns The w:document element, or undefined if not found
|
|
26
|
+
*/
|
|
27
|
+
export declare function findDocument(root: Element): Element | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Find an element by tag name in the tree.
|
|
30
|
+
*
|
|
31
|
+
* @param node - The node to search from
|
|
32
|
+
* @param tagName - The tag name to find
|
|
33
|
+
* @returns The found element, or undefined
|
|
34
|
+
*/
|
|
35
|
+
export declare function findElement(node: Element, tagName: string): Element | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Find all elements with a specific tag name.
|
|
38
|
+
*
|
|
39
|
+
* @param node - The node to search from
|
|
40
|
+
* @param tagName - The tag name to find
|
|
41
|
+
* @returns Array of matching elements
|
|
42
|
+
*/
|
|
43
|
+
export declare function findAllElements(node: Element, tagName: string): Element[];
|
|
44
|
+
/**
|
|
45
|
+
* Serialize a DOM Element back to XML string.
|
|
46
|
+
*
|
|
47
|
+
* @param element - The element to serialize
|
|
48
|
+
* @returns XML string
|
|
49
|
+
*/
|
|
50
|
+
export declare function serializeToXml(element: Element | Document): string;
|
|
51
|
+
/**
|
|
52
|
+
* Clone a DOM Element tree (deep copy).
|
|
53
|
+
*
|
|
54
|
+
* @param element - The element to clone
|
|
55
|
+
* @returns A deep copy of the element
|
|
56
|
+
*/
|
|
57
|
+
export declare function cloneElement(element: Element): Element;
|
|
58
|
+
/**
|
|
59
|
+
* Backfill parent references — NO-OP for DOM Elements.
|
|
60
|
+
*
|
|
61
|
+
* DOM Elements have native parentNode/parentElement. This function exists
|
|
62
|
+
* only to ease migration; callers should remove it over time.
|
|
63
|
+
*/
|
|
64
|
+
export declare function backfillParentReferences(_node: Element, _parent?: Element): void;
|
|
65
|
+
//# sourceMappingURL=xmlToWmlElement.d.ts.map
|