@usejunior/docx-core 0.19.1 → 0.21.2
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/README.md +12 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/cli/conformance-adapter.d.ts.map +1 -1
- package/dist/cli/conformance-adapter.js +0 -27
- package/dist/cli/conformance-adapter.js.map +1 -1
- package/dist/core-types.d.ts +1 -139
- package/dist/core-types.d.ts.map +1 -1
- package/dist/core-types.js +1 -3
- package/dist/core-types.js.map +1 -1
- package/dist/generation/compile.d.ts.map +1 -1
- package/dist/generation/compile.js +1 -3
- package/dist/generation/compile.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/integration/generation-probes.d.ts +36 -2
- package/dist/integration/generation-probes.d.ts.map +1 -1
- package/dist/integration/generation-probes.js +137 -15
- package/dist/integration/generation-probes.js.map +1 -1
- package/dist/integration/libreoffice-oracle.d.ts +3 -1
- package/dist/integration/libreoffice-oracle.d.ts.map +1 -1
- package/dist/integration/libreoffice-oracle.js +10 -4
- package/dist/integration/libreoffice-oracle.js.map +1 -1
- package/dist/integration/synthetic-docx-fixture.d.ts.map +1 -1
- package/dist/integration/synthetic-docx-fixture.js +8 -0
- package/dist/integration/synthetic-docx-fixture.js.map +1 -1
- package/dist/primitives/accept_ai_edits.js +14 -2
- package/dist/primitives/accept_ai_edits.js.map +1 -1
- package/dist/primitives/accept_changes.d.ts +6 -0
- package/dist/primitives/accept_changes.d.ts.map +1 -1
- package/dist/primitives/accept_changes.js +236 -62
- package/dist/primitives/accept_changes.js.map +1 -1
- package/dist/primitives/bookmarks.d.ts +8 -2
- package/dist/primitives/bookmarks.d.ts.map +1 -1
- package/dist/primitives/bookmarks.js +31 -7
- package/dist/primitives/bookmarks.js.map +1 -1
- package/dist/primitives/comments.d.ts +101 -5
- package/dist/primitives/comments.d.ts.map +1 -1
- package/dist/primitives/comments.js +356 -156
- package/dist/primitives/comments.js.map +1 -1
- package/dist/primitives/conformance.d.ts +42 -0
- package/dist/primitives/conformance.d.ts.map +1 -0
- package/dist/primitives/conformance.js +61 -0
- package/dist/primitives/conformance.js.map +1 -0
- package/dist/primitives/document.d.ts +145 -2
- package/dist/primitives/document.d.ts.map +1 -1
- package/dist/primitives/document.js +505 -27
- package/dist/primitives/document.js.map +1 -1
- package/dist/primitives/document_view-headings.d.ts +3 -1
- package/dist/primitives/document_view-headings.d.ts.map +1 -1
- package/dist/primitives/document_view-headings.js +5 -5
- package/dist/primitives/document_view-headings.js.map +1 -1
- package/dist/primitives/document_view.d.ts +2 -0
- package/dist/primitives/document_view.d.ts.map +1 -1
- package/dist/primitives/document_view.js +18 -4
- package/dist/primitives/document_view.js.map +1 -1
- package/dist/primitives/errors.d.ts +3 -2
- package/dist/primitives/errors.d.ts.map +1 -1
- package/dist/primitives/errors.js +3 -1
- package/dist/primitives/errors.js.map +1 -1
- package/dist/primitives/extract_revisions.d.ts +23 -6
- package/dist/primitives/extract_revisions.d.ts.map +1 -1
- package/dist/primitives/extract_revisions.js +208 -38
- package/dist/primitives/extract_revisions.js.map +1 -1
- package/dist/primitives/field_evaluation.d.ts +70 -0
- package/dist/primitives/field_evaluation.d.ts.map +1 -0
- package/dist/primitives/field_evaluation.js +462 -0
- package/dist/primitives/field_evaluation.js.map +1 -0
- package/dist/primitives/footnotes.d.ts +53 -3
- package/dist/primitives/footnotes.d.ts.map +1 -1
- package/dist/primitives/footnotes.js +228 -83
- package/dist/primitives/footnotes.js.map +1 -1
- package/dist/primitives/index.d.ts +12 -1
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +12 -1
- package/dist/primitives/index.js.map +1 -1
- package/dist/primitives/merge_runs.d.ts +3 -1
- package/dist/primitives/merge_runs.d.ts.map +1 -1
- package/dist/primitives/merge_runs.js +12 -2
- package/dist/primitives/merge_runs.js.map +1 -1
- package/dist/primitives/namespaces.d.ts +10 -2
- package/dist/primitives/namespaces.d.ts.map +1 -1
- package/dist/primitives/namespaces.js +11 -2
- package/dist/primitives/namespaces.js.map +1 -1
- package/dist/primitives/note_conversion.d.ts +11 -0
- package/dist/primitives/note_conversion.d.ts.map +1 -0
- package/dist/primitives/note_conversion.js +12 -0
- package/dist/primitives/note_conversion.js.map +1 -0
- package/dist/primitives/paragraph-index.d.ts +31 -0
- package/dist/primitives/paragraph-index.d.ts.map +1 -0
- package/dist/primitives/paragraph-index.js +140 -0
- package/dist/primitives/paragraph-index.js.map +1 -0
- package/dist/primitives/paragraph_merge_formatting.d.ts +24 -0
- package/dist/primitives/paragraph_merge_formatting.d.ts.map +1 -0
- package/dist/primitives/paragraph_merge_formatting.js +86 -0
- package/dist/primitives/paragraph_merge_formatting.js.map +1 -0
- package/dist/primitives/paragraph_numbering.d.ts +40 -0
- package/dist/primitives/paragraph_numbering.d.ts.map +1 -0
- package/dist/primitives/paragraph_numbering.js +198 -0
- package/dist/primitives/paragraph_numbering.js.map +1 -0
- package/dist/primitives/paragraph_structure.d.ts +19 -0
- package/dist/primitives/paragraph_structure.d.ts.map +1 -0
- package/dist/primitives/paragraph_structure.js +66 -0
- package/dist/primitives/paragraph_structure.js.map +1 -0
- package/dist/primitives/reject_changes.d.ts +6 -0
- package/dist/primitives/reject_changes.d.ts.map +1 -1
- package/dist/primitives/reject_changes.js +278 -68
- package/dist/primitives/reject_changes.js.map +1 -1
- package/dist/primitives/relationships.d.ts +22 -0
- package/dist/primitives/relationships.d.ts.map +1 -1
- package/dist/primitives/relationships.js +87 -0
- package/dist/primitives/relationships.js.map +1 -1
- package/dist/primitives/revision-parts.d.ts +15 -0
- package/dist/primitives/revision-parts.d.ts.map +1 -1
- package/dist/primitives/revision-parts.js +33 -1
- package/dist/primitives/revision-parts.js.map +1 -1
- package/dist/primitives/sectPrAudit.d.ts.map +1 -1
- package/dist/primitives/sectPrAudit.js +10 -1
- package/dist/primitives/sectPrAudit.js.map +1 -1
- package/dist/primitives/sections.d.ts +135 -0
- package/dist/primitives/sections.d.ts.map +1 -0
- package/dist/primitives/sections.js +644 -0
- package/dist/primitives/sections.js.map +1 -0
- package/dist/primitives/styles.d.ts +61 -0
- package/dist/primitives/styles.d.ts.map +1 -1
- package/dist/primitives/styles.js +207 -25
- package/dist/primitives/styles.js.map +1 -1
- package/dist/primitives/symbol_run_content.d.ts +42 -0
- package/dist/primitives/symbol_run_content.d.ts.map +1 -0
- package/dist/primitives/symbol_run_content.js +79 -0
- package/dist/primitives/symbol_run_content.js.map +1 -0
- package/dist/primitives/table_cells.d.ts +49 -0
- package/dist/primitives/table_cells.d.ts.map +1 -0
- package/dist/primitives/table_cells.js +149 -0
- package/dist/primitives/table_cells.js.map +1 -0
- package/dist/primitives/table_columns.d.ts +50 -0
- package/dist/primitives/table_columns.d.ts.map +1 -0
- package/dist/primitives/table_columns.js +138 -0
- package/dist/primitives/table_columns.js.map +1 -0
- package/dist/primitives/table_edit_common.d.ts +39 -0
- package/dist/primitives/table_edit_common.d.ts.map +1 -0
- package/dist/primitives/table_edit_common.js +163 -0
- package/dist/primitives/table_edit_common.js.map +1 -0
- package/dist/primitives/table_occupancy.d.ts +39 -0
- package/dist/primitives/table_occupancy.d.ts.map +1 -0
- package/dist/primitives/table_occupancy.js +145 -0
- package/dist/primitives/table_occupancy.js.map +1 -0
- package/dist/primitives/table_rows.d.ts +56 -0
- package/dist/primitives/table_rows.d.ts.map +1 -0
- package/dist/primitives/table_rows.js +390 -0
- package/dist/primitives/table_rows.js.map +1 -0
- package/dist/primitives/text.d.ts +69 -1
- package/dist/primitives/text.d.ts.map +1 -1
- package/dist/primitives/text.js +592 -102
- package/dist/primitives/text.js.map +1 -1
- package/dist/primitives/track-changes-emitter.d.ts +23 -0
- package/dist/primitives/track-changes-emitter.d.ts.map +1 -1
- package/dist/primitives/track-changes-emitter.js +64 -1
- package/dist/primitives/track-changes-emitter.js.map +1 -1
- package/dist/primitives/validate_document.d.ts.map +1 -1
- package/dist/primitives/validate_document.js +22 -1
- package/dist/primitives/validate_document.js.map +1 -1
- package/dist/primitives/zip.d.ts +22 -1
- package/dist/primitives/zip.d.ts.map +1 -1
- package/dist/primitives/zip.js +47 -8
- package/dist/primitives/zip.js.map +1 -1
- package/dist/shared/docx/DocxArchive.d.ts +6 -2
- package/dist/shared/docx/DocxArchive.d.ts.map +1 -1
- package/dist/shared/docx/DocxArchive.js +17 -4
- package/dist/shared/docx/DocxArchive.js.map +1 -1
- package/dist/shared/field-semantics.d.ts +26 -0
- package/dist/shared/field-semantics.d.ts.map +1 -0
- package/dist/shared/field-semantics.js +232 -0
- package/dist/shared/field-semantics.js.map +1 -0
- package/dist/shared/field-structure.d.ts +10 -1
- package/dist/shared/field-structure.d.ts.map +1 -1
- package/dist/shared/field-structure.js +31 -12
- package/dist/shared/field-structure.js.map +1 -1
- package/package.json +4 -5
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
* custom WmlElement AST).
|
|
20
20
|
*/
|
|
21
21
|
import { OOXML } from './namespaces.js';
|
|
22
|
+
import { retainLeadingParagraphFormatting, isEmptyParagraphFormattingRun, removeEmptyParagraphMarkProperties } from './paragraph_merge_formatting.js';
|
|
23
|
+
import { removeResolvedRowMarker, removeTableRowAndEmptyTable } from './table_rows.js';
|
|
24
|
+
import { RANGE_MARKUP_BLOCK_SIBLING_LOCALS, canSafelyRemoveEmptyParagraph } from './paragraph_structure.js';
|
|
22
25
|
const W_NS = OOXML.W_NS;
|
|
23
26
|
const ACCEPT_ALL = () => true;
|
|
24
27
|
/** The package-wide revision id (`w:id`) of a revision element, if any. */
|
|
@@ -43,10 +46,45 @@ function getDepth(node) {
|
|
|
43
46
|
function collectByLocalName(container, localName) {
|
|
44
47
|
return Array.from(container.getElementsByTagNameNS(W_NS, localName));
|
|
45
48
|
}
|
|
46
|
-
|
|
49
|
+
/**
|
|
50
|
+
* True iff this element is a row-level revision marker — a `w:ins`/`w:del`
|
|
51
|
+
* whose direct parent is `w:trPr`.
|
|
52
|
+
*
|
|
53
|
+
* These describe the ROW rather than wrapping a span of content:
|
|
54
|
+
* `w:tr > w:trPr > w:del` marks the row itself as deleted and
|
|
55
|
+
* `w:tr > w:trPr > w:ins` marks it as inserted. A sweep that matches on local
|
|
56
|
+
* name alone cannot tell them apart from the content wrappers, and removing one
|
|
57
|
+
* strips the `w:id`/`w:author`/`w:date` evidence while leaving the `w:tr` it
|
|
58
|
+
* described in the document.
|
|
59
|
+
*
|
|
60
|
+
* @see https://github.com/UseJunior/safe-docx/issues/845
|
|
61
|
+
*/
|
|
62
|
+
function isRowPropertyRevisionMarker(el) {
|
|
63
|
+
const parent = el.parentNode;
|
|
64
|
+
return parent !== null && isW(parent, 'trPr');
|
|
65
|
+
}
|
|
66
|
+
function acceptSelectedRowRevisions(root, filter) {
|
|
67
|
+
let insertions = 0;
|
|
68
|
+
let deletions = 0;
|
|
69
|
+
for (const marker of collectByLocalName(root, 'del').filter(filter).filter(isRowPropertyRevisionMarker)) {
|
|
70
|
+
const row = marker.parentNode?.parentNode;
|
|
71
|
+
if (row?.parentNode && isW(row, 'tr')) {
|
|
72
|
+
removeTableRowAndEmptyTable(root, row);
|
|
73
|
+
deletions++;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
for (const marker of collectByLocalName(root, 'ins').filter(filter).filter(isRowPropertyRevisionMarker)) {
|
|
77
|
+
removeResolvedRowMarker(marker);
|
|
78
|
+
insertions++;
|
|
79
|
+
}
|
|
80
|
+
return { insertions, deletions };
|
|
81
|
+
}
|
|
82
|
+
function removeAllByLocalName(container, localName, filter = ACCEPT_ALL, exclude) {
|
|
47
83
|
const elements = collectByLocalName(container, localName).filter(filter);
|
|
48
84
|
let count = 0;
|
|
49
85
|
for (const el of elements) {
|
|
86
|
+
if (exclude?.(el))
|
|
87
|
+
continue;
|
|
50
88
|
if (el.parentNode) {
|
|
51
89
|
el.parentNode.removeChild(el);
|
|
52
90
|
count++;
|
|
@@ -99,22 +137,6 @@ const PR_CHANGE_LOCALS = [
|
|
|
99
137
|
'rPrChange', 'pPrChange', 'sectPrChange',
|
|
100
138
|
'tblPrChange', 'trPrChange', 'tcPrChange',
|
|
101
139
|
];
|
|
102
|
-
// Marker-ish elements that may sit between two paragraphs at block level
|
|
103
|
-
// without ending the search for a merge target: the full EG_RangeMarkupElements
|
|
104
|
-
// schema group (wml.xsd), plus permStart/permEnd range markers and proofErr
|
|
105
|
-
// proofing anchors.
|
|
106
|
-
const RANGE_MARKUP_BLOCK_SIBLING_LOCALS = new Set([
|
|
107
|
-
'bookmarkStart', 'bookmarkEnd',
|
|
108
|
-
'commentRangeStart', 'commentRangeEnd',
|
|
109
|
-
'moveFromRangeStart', 'moveFromRangeEnd',
|
|
110
|
-
'moveToRangeStart', 'moveToRangeEnd',
|
|
111
|
-
'customXmlInsRangeStart', 'customXmlInsRangeEnd',
|
|
112
|
-
'customXmlDelRangeStart', 'customXmlDelRangeEnd',
|
|
113
|
-
'customXmlMoveFromRangeStart', 'customXmlMoveFromRangeEnd',
|
|
114
|
-
'customXmlMoveToRangeStart', 'customXmlMoveToRangeEnd',
|
|
115
|
-
'permStart', 'permEnd',
|
|
116
|
-
'proofErr',
|
|
117
|
-
]);
|
|
118
140
|
/**
|
|
119
141
|
* Find the next sibling paragraph a paragraph-mark revision can merge into,
|
|
120
142
|
* skipping block-level range/annotation markers. Returns null when the next
|
|
@@ -138,7 +160,7 @@ function findFollowingSiblingParagraph(p) {
|
|
|
138
160
|
return null;
|
|
139
161
|
}
|
|
140
162
|
/** True iff the paragraph still holds content beyond w:pPr and bare annotation markers. */
|
|
141
|
-
function paragraphHasContent(p) {
|
|
163
|
+
function paragraphHasContent(p, forFormatting = false) {
|
|
142
164
|
for (let i = 0; i < p.childNodes.length; i++) {
|
|
143
165
|
const child = p.childNodes[i];
|
|
144
166
|
if (child.nodeType !== 1)
|
|
@@ -146,53 +168,21 @@ function paragraphHasContent(p) {
|
|
|
146
168
|
if (isW(child, 'pPr'))
|
|
147
169
|
continue;
|
|
148
170
|
const el = child;
|
|
171
|
+
if (forFormatting && isEmptyParagraphFormattingRun(el))
|
|
172
|
+
continue;
|
|
149
173
|
if (el.namespaceURI === W_NS && RANGE_MARKUP_BLOCK_SIBLING_LOCALS.has(el.localName ?? ''))
|
|
150
174
|
continue;
|
|
151
175
|
return true;
|
|
152
176
|
}
|
|
153
177
|
return false;
|
|
154
178
|
}
|
|
155
|
-
/**
|
|
156
|
-
* True iff removing an emptied mark-revised paragraph keeps its parent
|
|
157
|
-
* structurally valid for Word: the parent must retain at least one block
|
|
158
|
-
* element, must not end on a w:tbl (a trailing table needs a following
|
|
159
|
-
* paragraph), and two tables must not become adjacent (Word merges
|
|
160
|
-
* back-to-back tables). w:sectPr is ignored — a trailing body sectPr is not a
|
|
161
|
-
* block element.
|
|
162
|
-
*/
|
|
163
|
-
function canSafelyRemoveEmptyParagraph(p) {
|
|
164
|
-
const blockSibling = (start, dir) => {
|
|
165
|
-
let sibling = start;
|
|
166
|
-
while (sibling) {
|
|
167
|
-
if (sibling.nodeType === 1) {
|
|
168
|
-
const el = sibling;
|
|
169
|
-
if ((el.namespaceURI === W_NS && RANGE_MARKUP_BLOCK_SIBLING_LOCALS.has(el.localName ?? '')) ||
|
|
170
|
-
isW(el, 'sectPr')) {
|
|
171
|
-
sibling = sibling[dir];
|
|
172
|
-
continue;
|
|
173
|
-
}
|
|
174
|
-
return el;
|
|
175
|
-
}
|
|
176
|
-
sibling = sibling[dir];
|
|
177
|
-
}
|
|
178
|
-
return null;
|
|
179
|
-
};
|
|
180
|
-
const prev = blockSibling(p.previousSibling, 'previousSibling');
|
|
181
|
-
const next = blockSibling(p.nextSibling, 'nextSibling');
|
|
182
|
-
if (!prev && !next)
|
|
183
|
-
return false;
|
|
184
|
-
if (prev && isW(prev, 'tbl') && !next)
|
|
185
|
-
return false;
|
|
186
|
-
if (prev && next && isW(prev, 'tbl') && isW(next, 'tbl'))
|
|
187
|
-
return false;
|
|
188
|
-
return true;
|
|
189
|
-
}
|
|
190
179
|
/**
|
|
191
180
|
* Resolve a paragraph whose paragraph MARK revision was applied (deleted mark
|
|
192
181
|
* accepted): the paragraph break disappears, so the paragraph's remaining
|
|
193
|
-
* content merges into the FOLLOWING paragraph.
|
|
194
|
-
*
|
|
195
|
-
*
|
|
182
|
+
* content merges into the FOLLOWING paragraph. When leading content survives,
|
|
183
|
+
* its base formatting survives too; otherwise the following formatting stays.
|
|
184
|
+
* This formatting choice is independently reader-characterized, not inferred
|
|
185
|
+
* from the paragraph-mark rule alone.
|
|
196
186
|
*
|
|
197
187
|
* The revision targets only the mark, never the paragraph's contents, so the
|
|
198
188
|
* contents must not be dropped wholesale. When no following sibling paragraph
|
|
@@ -210,11 +200,14 @@ function resolveParagraphMarkRevision(p) {
|
|
|
210
200
|
return;
|
|
211
201
|
const target = findFollowingSiblingParagraph(p);
|
|
212
202
|
if (!target) {
|
|
203
|
+
removeEmptyParagraphMarkProperties(p);
|
|
213
204
|
if (!paragraphHasContent(p) && canSafelyRemoveEmptyParagraph(p)) {
|
|
214
205
|
parent.removeChild(p);
|
|
215
206
|
}
|
|
216
207
|
return;
|
|
217
208
|
}
|
|
209
|
+
if (paragraphHasContent(p, true))
|
|
210
|
+
retainLeadingParagraphFormatting(p, target);
|
|
218
211
|
// Insertion point: before the target's first non-pPr child (the merged
|
|
219
212
|
// content precedes the target's own content in document order).
|
|
220
213
|
let ref = null;
|
|
@@ -237,6 +230,102 @@ function resolveParagraphMarkRevision(p) {
|
|
|
237
230
|
}
|
|
238
231
|
parent.removeChild(p);
|
|
239
232
|
}
|
|
233
|
+
/**
|
|
234
|
+
* An emptied paragraph with no following sibling paragraph has no break to
|
|
235
|
+
* merge into and is removed, taking its direct children with it. A bookmark
|
|
236
|
+
* boundary there whose opposite endpoint survives elsewhere would be orphaned,
|
|
237
|
+
* so move it first to the nearest same-story paragraph in document order
|
|
238
|
+
* (#1019): appended to the previous one, else prepended to the next.
|
|
239
|
+
*/
|
|
240
|
+
function rescueBookmarksFromUnmergedEmptyParagraph(root, p, bookmarksById) {
|
|
241
|
+
if (!Array.from(p.childNodes).some(c => isW(c, 'bookmarkStart') || isW(c, 'bookmarkEnd')))
|
|
242
|
+
return;
|
|
243
|
+
if (!p.parentNode || paragraphHasContent(p) || findFollowingSiblingParagraph(p) || !canSafelyRemoveEmptyParagraph(p))
|
|
244
|
+
return;
|
|
245
|
+
const idOf = (marker) => marker.getAttributeNS(W_NS, 'id') ?? marker.getAttribute('w:id');
|
|
246
|
+
// The story (text box content, else the root) holding an attached node.
|
|
247
|
+
const storyOf = (node) => {
|
|
248
|
+
let story;
|
|
249
|
+
let current = node;
|
|
250
|
+
for (; current && current !== root; current = current.parentNode) {
|
|
251
|
+
if (!story && isW(current, 'txbxContent'))
|
|
252
|
+
story = current;
|
|
253
|
+
}
|
|
254
|
+
return current === root ? story ?? root : undefined;
|
|
255
|
+
};
|
|
256
|
+
const story = storyOf(p);
|
|
257
|
+
// Rescue only a boundary that stays paired: exactly one attached endpoint of
|
|
258
|
+
// each kind with its id, both in this paragraph's story.
|
|
259
|
+
const attachedOfKind = (localName, id) => (bookmarksById.get(id) ?? [])
|
|
260
|
+
.filter(other => other.localName === localName && storyOf(other));
|
|
261
|
+
const pairedInStory = (marker, id) => {
|
|
262
|
+
const same = attachedOfKind(marker.localName, id);
|
|
263
|
+
const other = attachedOfKind(isW(marker, 'bookmarkStart') ? 'bookmarkEnd' : 'bookmarkStart', id);
|
|
264
|
+
return same.length === 1 && other.length === 1 && storyOf(other[0]) === story;
|
|
265
|
+
};
|
|
266
|
+
const boundaries = Array.from(p.childNodes).filter((marker) => isW(marker, 'bookmarkStart') || isW(marker, 'bookmarkEnd'));
|
|
267
|
+
let rescued = boundaries.filter((marker) => {
|
|
268
|
+
const id = idOf(marker);
|
|
269
|
+
return !!id && pairedInStory(marker, id);
|
|
270
|
+
});
|
|
271
|
+
// Descend into block containers (tables, content controls) beside the
|
|
272
|
+
// removed paragraph, but never into a nested story (a text box's
|
|
273
|
+
// paragraphs sit inside a w:p).
|
|
274
|
+
const sameStory = (candidate, container) => {
|
|
275
|
+
for (let a = candidate.parentNode; a && a !== container; a = a.parentNode) {
|
|
276
|
+
if (isW(a, 'p') || isW(a, 'txbxContent'))
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
279
|
+
return true;
|
|
280
|
+
};
|
|
281
|
+
const nearest = (step, last) => {
|
|
282
|
+
for (let n = step(p); n; n = step(n)) {
|
|
283
|
+
if (isW(n, 'p'))
|
|
284
|
+
return n;
|
|
285
|
+
if (n.nodeType !== 1)
|
|
286
|
+
continue;
|
|
287
|
+
const nested = Array.from(n.getElementsByTagNameNS(W_NS, 'p'))
|
|
288
|
+
.filter(candidate => sameStory(candidate, n));
|
|
289
|
+
if (nested.length > 0)
|
|
290
|
+
return nested[last ? nested.length - 1 : 0];
|
|
291
|
+
}
|
|
292
|
+
return null;
|
|
293
|
+
};
|
|
294
|
+
let previous = null;
|
|
295
|
+
let target = null;
|
|
296
|
+
if (rescued.length > 0) {
|
|
297
|
+
previous = nearest(n => n.previousSibling, true);
|
|
298
|
+
target = previous ?? nearest(n => n.nextSibling, false);
|
|
299
|
+
if (!target)
|
|
300
|
+
rescued = [];
|
|
301
|
+
}
|
|
302
|
+
// A boundary that cannot be rescued leaves with the paragraph. Unless a
|
|
303
|
+
// same-kind duplicate survives elsewhere, drop its counterparts too, as
|
|
304
|
+
// before #1019, so no endpoint is left orphaned.
|
|
305
|
+
for (const marker of boundaries) {
|
|
306
|
+
const id = idOf(marker);
|
|
307
|
+
if (!id || rescued.includes(marker))
|
|
308
|
+
continue;
|
|
309
|
+
const peers = bookmarksById.get(id) ?? [];
|
|
310
|
+
if (peers.some((other) => other.localName === marker.localName && other.parentNode !== p && storyOf(other)))
|
|
311
|
+
continue;
|
|
312
|
+
for (const other of peers) {
|
|
313
|
+
if (other !== marker)
|
|
314
|
+
other.parentNode?.removeChild(other);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
if (!target)
|
|
318
|
+
return;
|
|
319
|
+
let ref = null;
|
|
320
|
+
if (!previous) {
|
|
321
|
+
for (let i = 0; i < target.childNodes.length && !ref; i++) {
|
|
322
|
+
if (!isW(target.childNodes[i], 'pPr'))
|
|
323
|
+
ref = target.childNodes[i];
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
for (const marker of rescued)
|
|
327
|
+
target.insertBefore(marker, ref);
|
|
328
|
+
}
|
|
240
329
|
// ── Public API ──────────────────────────────────────────────────────
|
|
241
330
|
/**
|
|
242
331
|
* Accept all tracked changes in the document body or story root, producing a
|
|
@@ -254,6 +343,8 @@ function resolveParagraphMarkRevision(p) {
|
|
|
254
343
|
* @conformance ECMA-376 edition 5, Part 1 § 17.13.5.31
|
|
255
344
|
* @conformance ECMA-376 edition 5, Part 1 § 17.13.5.32
|
|
256
345
|
* @conformance ECMA-376 edition 5, Part 1 § 17.13.5.34
|
|
346
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.13.5.12
|
|
347
|
+
* @conformance ECMA-376 edition 5, Part 1 § 17.13.5.17
|
|
257
348
|
* @conformance ECMA-376 edition 5, Part 1 § 17.13.5.36
|
|
258
349
|
* @conformance ECMA-376 edition 5, Part 1 § 17.13.5.37
|
|
259
350
|
* @ooxmlSpec ooxml.ecma376.5ed.part1.revisions.moves
|
|
@@ -267,11 +358,24 @@ export function acceptChanges(doc, opts) {
|
|
|
267
358
|
const selective = filter !== ACCEPT_ALL;
|
|
268
359
|
const root = doc.getElementsByTagNameNS(W_NS, 'body').item(0) ?? doc.documentElement;
|
|
269
360
|
if (!root) {
|
|
270
|
-
return {
|
|
361
|
+
return {
|
|
362
|
+
insertionsAccepted: 0,
|
|
363
|
+
deletionsAccepted: 0,
|
|
364
|
+
movesResolved: 0,
|
|
365
|
+
propertyChangesResolved: 0,
|
|
366
|
+
unresolvedRowRevisions: 0,
|
|
367
|
+
};
|
|
271
368
|
}
|
|
272
|
-
//
|
|
369
|
+
// Resolve row topology before collecting paragraph-mark revisions: a selected
|
|
370
|
+
// deleted row disappears as one revision, while an inserted row is retained
|
|
371
|
+
// and only its row marker is stripped.
|
|
372
|
+
const rowRevisions = acceptSelectedRowRevisions(root, filter);
|
|
373
|
+
// Phase A — Identify deleted or moved-from paragraph marks.
|
|
273
374
|
const markDeletedParagraphs = [];
|
|
274
375
|
const allParagraphs = collectByLocalName(root, 'p');
|
|
376
|
+
// Capture selected direct mark/property histories before other phases remove
|
|
377
|
+
// them, including accepted insertions which do not remove a paragraph break.
|
|
378
|
+
const resolvedMarkProperties = allParagraphs.filter(p => ['ins', 'del', 'moveFrom', 'moveTo', 'rPrChange'].some(kind => paragraphHasParaMarker(p, kind, filter)));
|
|
275
379
|
for (const p of allParagraphs) {
|
|
276
380
|
// A paragraph-mark deletion (w:p > w:pPr > w:rPr > w:del) means the
|
|
277
381
|
// paragraph BREAK was deleted — accepting it merges the paragraph into the
|
|
@@ -283,19 +387,72 @@ export function acceptChanges(doc, opts) {
|
|
|
283
387
|
// accept. safe-docx's deleted paragraphs always carry the mark now, so the
|
|
284
388
|
// mark-based rule suffices and is Word-faithful. (Mirrors acceptAllChanges and the
|
|
285
389
|
// reject-side rule.)
|
|
286
|
-
if (paragraphHasParaMarker(p, 'del', filter)) {
|
|
390
|
+
if (paragraphHasParaMarker(p, 'del', filter) || paragraphHasParaMarker(p, 'moveFrom', filter)) {
|
|
287
391
|
markDeletedParagraphs.push(p);
|
|
288
392
|
}
|
|
289
393
|
}
|
|
290
|
-
//
|
|
291
|
-
|
|
394
|
+
// A bookmark endpoint inside a selected deletion can have its paired endpoint
|
|
395
|
+
// live outside that wrapper so the combined redline visibly brackets deleted
|
|
396
|
+
// text. Accepting the deletion must remove that live original-side endpoint
|
|
397
|
+
// as well; otherwise a cross-paragraph range becomes orphaned.
|
|
398
|
+
const deletedBookmarkIds = new Set();
|
|
399
|
+
for (const deletion of [...collectByLocalName(root, 'del'), ...collectByLocalName(root, 'moveFrom')].filter(filter)) {
|
|
400
|
+
for (const localName of ['bookmarkStart', 'bookmarkEnd']) {
|
|
401
|
+
for (const boundary of collectByLocalName(deletion, localName)) {
|
|
402
|
+
const id = boundary.getAttributeNS(W_NS, 'id') ?? boundary.getAttribute('w:id');
|
|
403
|
+
if (id)
|
|
404
|
+
deletedBookmarkIds.add(id);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
for (const paragraph of markDeletedParagraphs) {
|
|
409
|
+
const direct = Array.from(paragraph.childNodes)
|
|
410
|
+
.filter((child) => child.nodeType === 1);
|
|
411
|
+
const substantive = direct.filter((child) => !isW(child, 'pPr') && !isW(child, 'bookmarkStart') && !isW(child, 'bookmarkEnd'));
|
|
412
|
+
if (substantive.length === 0 || !substantive.every((child) => (isW(child, 'del') || isW(child, 'moveFrom')) && filter(child))) {
|
|
413
|
+
continue;
|
|
414
|
+
}
|
|
415
|
+
// Harvest only endpoint pairs local to this paragraph (the mirror of
|
|
416
|
+
// Reject's moveTo guard). A boundary whose counterpart lives in a kept
|
|
417
|
+
// paragraph rides the Phase-E merge into the surviving content instead of
|
|
418
|
+
// being dropped with its live counterpart (#1019).
|
|
419
|
+
const endIds = new Set(direct.filter((child) => isW(child, 'bookmarkEnd'))
|
|
420
|
+
.map((child) => child.getAttributeNS(W_NS, 'id') ?? child.getAttribute('w:id')));
|
|
421
|
+
for (const start of direct.filter((child) => isW(child, 'bookmarkStart'))) {
|
|
422
|
+
const id = start.getAttributeNS(W_NS, 'id') ?? start.getAttribute('w:id');
|
|
423
|
+
if (id && endIds.has(id))
|
|
424
|
+
deletedBookmarkIds.add(id);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
const isInsideRevision = (marker) => {
|
|
428
|
+
let current = marker.parentNode;
|
|
429
|
+
while (current && current !== root) {
|
|
430
|
+
if (isW(current, 'del') || isW(current, 'ins') || isW(current, 'moveFrom') || isW(current, 'moveTo')) {
|
|
431
|
+
return true;
|
|
432
|
+
}
|
|
433
|
+
current = current.parentNode;
|
|
434
|
+
}
|
|
435
|
+
return false;
|
|
436
|
+
};
|
|
437
|
+
if (deletedBookmarkIds.size > 0) {
|
|
438
|
+
for (const localName of ['bookmarkStart', 'bookmarkEnd']) {
|
|
439
|
+
for (const marker of collectByLocalName(root, localName)) {
|
|
440
|
+
const id = marker.getAttributeNS(W_NS, 'id') ?? marker.getAttribute('w:id');
|
|
441
|
+
if (id && deletedBookmarkIds.has(id) && !isInsideRevision(marker)) {
|
|
442
|
+
marker.parentNode?.removeChild(marker);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
// Phase B — Remove deletions and move sources.
|
|
448
|
+
const deletionsAccepted = rowRevisions.deletions + removeAllByLocalName(root, 'del', filter, isRowPropertyRevisionMarker);
|
|
292
449
|
const moveFromRemoved = removeAllByLocalName(root, 'moveFrom', filter);
|
|
293
450
|
removeAllByLocalName(root, 'moveFromRangeStart', filter);
|
|
294
451
|
removeAllByLocalName(root, 'moveFromRangeEnd', filter);
|
|
295
452
|
removeAllByLocalName(root, 'moveToRangeStart', filter);
|
|
296
453
|
removeAllByLocalName(root, 'moveToRangeEnd', filter);
|
|
297
454
|
// Phase C — Unwrap insertions and move destinations (depth-sorted)
|
|
298
|
-
const insertionsAccepted = unwrapAllByLocalName(root, 'ins', filter);
|
|
455
|
+
const insertionsAccepted = rowRevisions.insertions + unwrapAllByLocalName(root, 'ins', filter);
|
|
299
456
|
const moveToUnwrapped = unwrapAllByLocalName(root, 'moveTo', filter);
|
|
300
457
|
// Phase D — Remove property change records
|
|
301
458
|
let propertyChangesResolved = 0;
|
|
@@ -332,9 +489,25 @@ export function acceptChanges(doc, opts) {
|
|
|
332
489
|
// Resolve paragraphs collected in Phase A: merge each into its following
|
|
333
490
|
// paragraph (document order, so consecutive mark-deleted paragraphs cascade
|
|
334
491
|
// forward into the first surviving one).
|
|
492
|
+
const bookmarksById = new Map();
|
|
493
|
+
const indexed = markDeletedParagraphs.length === 0 ? []
|
|
494
|
+
: [...collectByLocalName(root, 'bookmarkStart'), ...collectByLocalName(root, 'bookmarkEnd')];
|
|
495
|
+
for (const marker of indexed) {
|
|
496
|
+
const id = marker.getAttributeNS(W_NS, 'id') ?? marker.getAttribute('w:id');
|
|
497
|
+
if (!id)
|
|
498
|
+
continue;
|
|
499
|
+
const bucket = bookmarksById.get(id);
|
|
500
|
+
if (bucket)
|
|
501
|
+
bucket.push(marker);
|
|
502
|
+
else
|
|
503
|
+
bookmarksById.set(id, [marker]);
|
|
504
|
+
}
|
|
335
505
|
for (const p of markDeletedParagraphs) {
|
|
506
|
+
rescueBookmarksFromUnmergedEmptyParagraph(root, p, bookmarksById);
|
|
336
507
|
resolveParagraphMarkRevision(p);
|
|
337
508
|
}
|
|
509
|
+
for (const p of resolvedMarkProperties)
|
|
510
|
+
removeEmptyParagraphMarkProperties(p);
|
|
338
511
|
// Strip w:rsidDel attributes on remaining elements. Skipped in selective
|
|
339
512
|
// mode: rsidDel is a document-wide save-id, and a selective accept must not
|
|
340
513
|
// mutate elements outside the targeted revision set (the mixed-author
|
|
@@ -358,6 +531,7 @@ export function acceptChanges(doc, opts) {
|
|
|
358
531
|
deletionsAccepted,
|
|
359
532
|
movesResolved: moveFromRemoved + moveToUnwrapped,
|
|
360
533
|
propertyChangesResolved,
|
|
534
|
+
unresolvedRowRevisions: 0,
|
|
361
535
|
};
|
|
362
536
|
}
|
|
363
537
|
//# sourceMappingURL=accept_changes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accept_changes.js","sourceRoot":"","sources":["../../src/primitives/accept_changes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"accept_changes.js","sourceRoot":"","sources":["../../src/primitives/accept_changes.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,12 @@ export type ParagraphBookmark = {
|
|
|
2
2
|
name: string;
|
|
3
3
|
numericId: number;
|
|
4
4
|
};
|
|
5
|
+
export type BookmarkReservation = {
|
|
6
|
+
usedNames: Set<string>;
|
|
7
|
+
nextNumericId: number;
|
|
8
|
+
};
|
|
9
|
+
export declare function getW14ParaId(p: Element): string | null;
|
|
10
|
+
export declare function collectBookmarkReservation(docs: Iterable<Document>): BookmarkReservation;
|
|
5
11
|
/**
|
|
6
12
|
* Collect every bookmark name attached to a paragraph, in discovery order.
|
|
7
13
|
*
|
|
@@ -35,10 +41,10 @@ export declare function getParagraphBookmarkId(p: Element): string | null;
|
|
|
35
41
|
export declare function cleanupInternalBookmarks(doc: Document, opts?: {
|
|
36
42
|
preserveBookmarkIds?: ReadonlySet<string>;
|
|
37
43
|
}): number;
|
|
38
|
-
export declare function insertParagraphBookmarks(doc: Document, _attachmentId: string): {
|
|
44
|
+
export declare function insertParagraphBookmarks(doc: Document, _attachmentId: string, reservation?: BookmarkReservation): {
|
|
39
45
|
indexedParagraphs: number;
|
|
40
46
|
};
|
|
41
|
-
export declare function insertSingleParagraphBookmark(doc: Document, p: Element): string;
|
|
47
|
+
export declare function insertSingleParagraphBookmark(doc: Document, p: Element, reservation?: BookmarkReservation): string;
|
|
42
48
|
/**
|
|
43
49
|
* Resolve a caller-supplied anchor to its paragraph.
|
|
44
50
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bookmarks.d.ts","sourceRoot":"","sources":["../../src/primitives/bookmarks.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;
|
|
1
|
+
{"version":3,"file":"bookmarks.d.ts","sourceRoot":"","sources":["../../src/primitives/bookmarks.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAwBF,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAUtD;AAoDD,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,mBAAmB,CAYxF;AA4HD;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CA4B9D;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAKhE;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,QAAQ,EACb,IAAI,CAAC,EAAE;IAAE,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,GACnD,MAAM,CAwBR;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,QAAQ,EACb,aAAa,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,mBAAmB,GAChC;IAAE,iBAAiB,EAAE,MAAM,CAAA;CAAE,CAsD/B;AAED,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,QAAQ,EACb,CAAC,EAAE,OAAO,EACV,WAAW,CAAC,EAAE,mBAAmB,GAChC,MAAM,CAuCR;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAa3F"}
|
|
@@ -20,7 +20,7 @@ function ancestorSignature(p) {
|
|
|
20
20
|
}
|
|
21
21
|
return parts.join('/');
|
|
22
22
|
}
|
|
23
|
-
function getW14ParaId(p) {
|
|
23
|
+
export function getW14ParaId(p) {
|
|
24
24
|
const namespaced = p.getAttributeNS(W14_NS, 'paraId');
|
|
25
25
|
if (namespaced)
|
|
26
26
|
return namespaced.toLowerCase();
|
|
@@ -72,6 +72,21 @@ function collectUsedJrParaNames(doc) {
|
|
|
72
72
|
}
|
|
73
73
|
return used;
|
|
74
74
|
}
|
|
75
|
+
export function collectBookmarkReservation(docs) {
|
|
76
|
+
const usedNames = new Set();
|
|
77
|
+
let maxNumericId = 0;
|
|
78
|
+
for (const doc of docs) {
|
|
79
|
+
for (const start of Array.from(doc.getElementsByTagNameNS(OOXML.W_NS, W.bookmarkStart))) {
|
|
80
|
+
const name = getAttr(start, 'name');
|
|
81
|
+
if (name)
|
|
82
|
+
usedNames.add(name);
|
|
83
|
+
const numericId = Number.parseInt(getAttr(start, 'id') ?? '', 10);
|
|
84
|
+
if (Number.isSafeInteger(numericId))
|
|
85
|
+
maxNumericId = Math.max(maxNumericId, numericId);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return { usedNames, nextNumericId: maxNumericId + 1 };
|
|
89
|
+
}
|
|
75
90
|
function getAttr(el, localName) {
|
|
76
91
|
return el.getAttributeNS(OOXML.W_NS, localName) ?? el.getAttribute(`w:${localName}`);
|
|
77
92
|
}
|
|
@@ -276,13 +291,13 @@ export function cleanupInternalBookmarks(doc, opts) {
|
|
|
276
291
|
}
|
|
277
292
|
return idsToRemove.size;
|
|
278
293
|
}
|
|
279
|
-
export function insertParagraphBookmarks(doc, _attachmentId) {
|
|
294
|
+
export function insertParagraphBookmarks(doc, _attachmentId, reservation) {
|
|
280
295
|
// Insert _bk_* bookmarks around ALL paragraphs (including empty), using sibling style.
|
|
281
296
|
// This avoids moving paragraphs out of tables by inserting into the paragraph's parent.
|
|
282
297
|
const paragraphs = Array.from(doc.getElementsByTagNameNS(OOXML.W_NS, W.p));
|
|
283
298
|
if (paragraphs.length === 0)
|
|
284
299
|
return { indexedParagraphs: 0 };
|
|
285
|
-
const usedNames = collectUsedJrParaNames(doc);
|
|
300
|
+
const usedNames = reservation?.usedNames ?? collectUsedJrParaNames(doc);
|
|
286
301
|
let maxNumeric = 0;
|
|
287
302
|
const existingStarts = Array.from(doc.getElementsByTagNameNS(OOXML.W_NS, W.bookmarkStart));
|
|
288
303
|
for (const s of existingStarts) {
|
|
@@ -303,7 +318,12 @@ export function insertParagraphBookmarks(doc, _attachmentId) {
|
|
|
303
318
|
const parent = p.parentNode;
|
|
304
319
|
if (!parent)
|
|
305
320
|
continue;
|
|
306
|
-
const numericId =
|
|
321
|
+
const numericId = reservation
|
|
322
|
+
? Math.max(reservation.nextNumericId, maxNumeric + 1)
|
|
323
|
+
: maxNumeric + 1;
|
|
324
|
+
maxNumeric = numericId;
|
|
325
|
+
if (reservation)
|
|
326
|
+
reservation.nextNumericId = numericId + 1;
|
|
307
327
|
const prevText = i > 0 ? getParagraphText(paragraphs[i - 1]) : '';
|
|
308
328
|
const nextText = i + 1 < paragraphs.length ? getParagraphText(paragraphs[i + 1]) : '';
|
|
309
329
|
const name = deriveDeterministicJrParaName({
|
|
@@ -322,7 +342,7 @@ export function insertParagraphBookmarks(doc, _attachmentId) {
|
|
|
322
342
|
}
|
|
323
343
|
return { indexedParagraphs: paragraphs.length };
|
|
324
344
|
}
|
|
325
|
-
export function insertSingleParagraphBookmark(doc, p) {
|
|
345
|
+
export function insertSingleParagraphBookmark(doc, p, reservation) {
|
|
326
346
|
const parent = p.parentNode;
|
|
327
347
|
if (!parent)
|
|
328
348
|
throw new Error('Paragraph has no parent');
|
|
@@ -330,7 +350,7 @@ export function insertSingleParagraphBookmark(doc, p) {
|
|
|
330
350
|
const idx = paragraphs.indexOf(p);
|
|
331
351
|
const prevText = idx > 0 ? getParagraphText(paragraphs[idx - 1]) : '';
|
|
332
352
|
const nextText = idx >= 0 && idx + 1 < paragraphs.length ? getParagraphText(paragraphs[idx + 1]) : '';
|
|
333
|
-
const usedNames = collectUsedJrParaNames(doc);
|
|
353
|
+
const usedNames = reservation?.usedNames ?? collectUsedJrParaNames(doc);
|
|
334
354
|
let maxNumeric = 0;
|
|
335
355
|
const existingStarts = Array.from(doc.getElementsByTagNameNS(OOXML.W_NS, W.bookmarkStart));
|
|
336
356
|
for (const s of existingStarts) {
|
|
@@ -339,7 +359,11 @@ export function insertSingleParagraphBookmark(doc, p) {
|
|
|
339
359
|
if (!Number.isNaN(val))
|
|
340
360
|
maxNumeric = Math.max(maxNumeric, val);
|
|
341
361
|
}
|
|
342
|
-
const numericId =
|
|
362
|
+
const numericId = reservation
|
|
363
|
+
? Math.max(reservation.nextNumericId, maxNumeric + 1)
|
|
364
|
+
: maxNumeric + 1;
|
|
365
|
+
if (reservation)
|
|
366
|
+
reservation.nextNumericId = numericId + 1;
|
|
343
367
|
const name = deriveDeterministicJrParaName({
|
|
344
368
|
paragraph: p,
|
|
345
369
|
prevText,
|