docxmlater 10.1.3 → 10.1.5
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 +759 -754
- package/dist/constants/legacyCompatFlags.js +1 -1
- package/dist/constants/legacyCompatFlags.js.map +1 -1
- package/dist/constants/limits.js.map +1 -1
- package/dist/core/Document.d.ts +50 -50
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +483 -471
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentContent.d.ts +9 -9
- package/dist/core/DocumentContent.d.ts.map +1 -1
- package/dist/core/DocumentContent.js +1 -1
- package/dist/core/DocumentContent.js.map +1 -1
- package/dist/core/DocumentGenerator.d.ts +11 -11
- package/dist/core/DocumentGenerator.d.ts.map +1 -1
- package/dist/core/DocumentGenerator.js +251 -251
- package/dist/core/DocumentGenerator.js.map +1 -1
- package/dist/core/DocumentIdManager.js.map +1 -1
- package/dist/core/DocumentParser.d.ts +15 -15
- package/dist/core/DocumentParser.d.ts.map +1 -1
- package/dist/core/DocumentParser.js +2123 -2155
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/core/DocumentValidator.d.ts.map +1 -1
- package/dist/core/DocumentValidator.js +2 -5
- package/dist/core/DocumentValidator.js.map +1 -1
- package/dist/core/Relationship.js.map +1 -1
- package/dist/core/RelationshipManager.d.ts.map +1 -1
- package/dist/core/RelationshipManager.js +3 -3
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/elements/AlternateContent.js.map +1 -1
- package/dist/elements/Bookmark.d.ts.map +1 -1
- package/dist/elements/Bookmark.js +3 -1
- package/dist/elements/Bookmark.js.map +1 -1
- package/dist/elements/BookmarkManager.d.ts.map +1 -1
- package/dist/elements/BookmarkManager.js.map +1 -1
- package/dist/elements/Comment.d.ts.map +1 -1
- package/dist/elements/Comment.js +9 -6
- package/dist/elements/Comment.js.map +1 -1
- package/dist/elements/CommentManager.d.ts.map +1 -1
- package/dist/elements/CommentManager.js +18 -17
- package/dist/elements/CommentManager.js.map +1 -1
- package/dist/elements/CommonTypes.d.ts +21 -21
- package/dist/elements/CommonTypes.d.ts.map +1 -1
- package/dist/elements/CommonTypes.js +56 -56
- package/dist/elements/CommonTypes.js.map +1 -1
- package/dist/elements/CustomXml.js.map +1 -1
- package/dist/elements/Endnote.d.ts.map +1 -1
- package/dist/elements/Endnote.js +6 -6
- package/dist/elements/Endnote.js.map +1 -1
- package/dist/elements/EndnoteManager.d.ts.map +1 -1
- package/dist/elements/EndnoteManager.js +6 -7
- package/dist/elements/EndnoteManager.js.map +1 -1
- package/dist/elements/Field.d.ts.map +1 -1
- package/dist/elements/Field.js +82 -25
- package/dist/elements/Field.js.map +1 -1
- package/dist/elements/FieldHelpers.d.ts.map +1 -1
- package/dist/elements/FieldHelpers.js.map +1 -1
- package/dist/elements/FontManager.d.ts.map +1 -1
- package/dist/elements/FontManager.js +1 -1
- package/dist/elements/FontManager.js.map +1 -1
- package/dist/elements/Footer.js +2 -2
- package/dist/elements/Footer.js.map +1 -1
- package/dist/elements/Footnote.d.ts.map +1 -1
- package/dist/elements/Footnote.js +6 -6
- package/dist/elements/Footnote.js.map +1 -1
- package/dist/elements/FootnoteManager.d.ts.map +1 -1
- package/dist/elements/FootnoteManager.js +6 -7
- package/dist/elements/FootnoteManager.js.map +1 -1
- package/dist/elements/Header.js +2 -2
- package/dist/elements/Header.js.map +1 -1
- package/dist/elements/HeaderFooterManager.js.map +1 -1
- package/dist/elements/Hyperlink.d.ts +5 -3
- package/dist/elements/Hyperlink.d.ts.map +1 -1
- package/dist/elements/Hyperlink.js +134 -76
- package/dist/elements/Hyperlink.js.map +1 -1
- package/dist/elements/Image.d.ts.map +1 -1
- package/dist/elements/Image.js +238 -106
- package/dist/elements/Image.js.map +1 -1
- package/dist/elements/ImageManager.d.ts.map +1 -1
- package/dist/elements/ImageManager.js +1 -1
- package/dist/elements/ImageManager.js.map +1 -1
- package/dist/elements/ImageRun.js +1 -1
- package/dist/elements/ImageRun.js.map +1 -1
- package/dist/elements/MathElement.js.map +1 -1
- package/dist/elements/Paragraph.d.ts +24 -24
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +181 -188
- package/dist/elements/Paragraph.js.map +1 -1
- package/dist/elements/PreservedElement.js.map +1 -1
- package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
- package/dist/elements/PropertyChangeTypes.js +6 -6
- package/dist/elements/PropertyChangeTypes.js.map +1 -1
- package/dist/elements/RangeMarker.d.ts.map +1 -1
- package/dist/elements/RangeMarker.js.map +1 -1
- package/dist/elements/Revision.d.ts.map +1 -1
- package/dist/elements/Revision.js +4 -5
- package/dist/elements/Revision.js.map +1 -1
- package/dist/elements/RevisionContent.js.map +1 -1
- package/dist/elements/RevisionManager.d.ts.map +1 -1
- package/dist/elements/RevisionManager.js +40 -48
- package/dist/elements/RevisionManager.js.map +1 -1
- package/dist/elements/Run.d.ts +16 -16
- package/dist/elements/Run.d.ts.map +1 -1
- package/dist/elements/Run.js +256 -238
- package/dist/elements/Run.js.map +1 -1
- package/dist/elements/Section.d.ts.map +1 -1
- package/dist/elements/Section.js +36 -11
- package/dist/elements/Section.js.map +1 -1
- package/dist/elements/Shape.d.ts.map +1 -1
- package/dist/elements/Shape.js.map +1 -1
- package/dist/elements/StructuredDocumentTag.d.ts +6 -6
- package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
- package/dist/elements/StructuredDocumentTag.js +99 -104
- package/dist/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/elements/Table.d.ts +11 -11
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +102 -107
- package/dist/elements/Table.js.map +1 -1
- package/dist/elements/TableCell.d.ts +10 -10
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +105 -106
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/elements/TableGridChange.d.ts.map +1 -1
- package/dist/elements/TableGridChange.js.map +1 -1
- package/dist/elements/TableOfContents.d.ts.map +1 -1
- package/dist/elements/TableOfContents.js +4 -4
- package/dist/elements/TableOfContents.js.map +1 -1
- package/dist/elements/TableOfContentsElement.js.map +1 -1
- package/dist/elements/TableRow.d.ts.map +1 -1
- package/dist/elements/TableRow.js +13 -6
- package/dist/elements/TableRow.js.map +1 -1
- package/dist/elements/TextBox.d.ts.map +1 -1
- package/dist/elements/TextBox.js +3 -5
- package/dist/elements/TextBox.js.map +1 -1
- package/dist/formatting/AbstractNumbering.d.ts +4 -4
- package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
- package/dist/formatting/AbstractNumbering.js +54 -49
- package/dist/formatting/AbstractNumbering.js.map +1 -1
- package/dist/formatting/NumberingInstance.d.ts.map +1 -1
- package/dist/formatting/NumberingInstance.js +1 -3
- package/dist/formatting/NumberingInstance.js.map +1 -1
- package/dist/formatting/NumberingLevel.d.ts +5 -5
- package/dist/formatting/NumberingLevel.d.ts.map +1 -1
- package/dist/formatting/NumberingLevel.js +119 -125
- package/dist/formatting/NumberingLevel.js.map +1 -1
- package/dist/formatting/NumberingManager.d.ts.map +1 -1
- package/dist/formatting/NumberingManager.js +9 -9
- package/dist/formatting/NumberingManager.js.map +1 -1
- package/dist/formatting/Style.d.ts +11 -11
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +219 -247
- package/dist/formatting/Style.js.map +1 -1
- package/dist/formatting/StylesManager.d.ts +2 -2
- package/dist/formatting/StylesManager.d.ts.map +1 -1
- package/dist/formatting/StylesManager.js +96 -102
- package/dist/formatting/StylesManager.js.map +1 -1
- package/dist/helpers/CleanupHelper.d.ts +1 -1
- package/dist/helpers/CleanupHelper.d.ts.map +1 -1
- package/dist/helpers/CleanupHelper.js +6 -6
- package/dist/helpers/CleanupHelper.js.map +1 -1
- package/dist/images/ImageOptimizer.js +7 -7
- package/dist/images/ImageOptimizer.js.map +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/managers/DrawingManager.js.map +1 -1
- package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
- package/dist/tracking/DocumentTrackingContext.js +23 -7
- package/dist/tracking/DocumentTrackingContext.js.map +1 -1
- package/dist/tracking/TrackingContext.d.ts.map +1 -1
- package/dist/tracking/TrackingContext.js.map +1 -1
- package/dist/types/compatibility-types.js.map +1 -1
- package/dist/types/formatting.js.map +1 -1
- package/dist/types/list-types.d.ts +6 -6
- package/dist/types/list-types.js.map +1 -1
- package/dist/types/settings-types.js.map +1 -1
- package/dist/types/styleConfig.d.ts +2 -2
- package/dist/types/styleConfig.js.map +1 -1
- package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
- package/dist/utils/ChangelogGenerator.js +97 -101
- package/dist/utils/ChangelogGenerator.js.map +1 -1
- package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
- package/dist/utils/CompatibilityUpgrader.js +1 -1
- package/dist/utils/CompatibilityUpgrader.js.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.js +1 -6
- package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
- package/dist/utils/MoveOperationHelper.d.ts.map +1 -1
- package/dist/utils/MoveOperationHelper.js +1 -1
- package/dist/utils/MoveOperationHelper.js.map +1 -1
- package/dist/utils/RevisionAwareProcessor.d.ts.map +1 -1
- package/dist/utils/RevisionAwareProcessor.js +2 -4
- package/dist/utils/RevisionAwareProcessor.js.map +1 -1
- package/dist/utils/RevisionWalker.d.ts.map +1 -1
- package/dist/utils/RevisionWalker.js +4 -12
- package/dist/utils/RevisionWalker.js.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.js +2 -6
- package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
- package/dist/utils/ShadingResolver.d.ts.map +1 -1
- package/dist/utils/ShadingResolver.js +1 -1
- package/dist/utils/ShadingResolver.js.map +1 -1
- package/dist/utils/acceptRevisions.d.ts.map +1 -1
- package/dist/utils/acceptRevisions.js +23 -12
- package/dist/utils/acceptRevisions.js.map +1 -1
- package/dist/utils/cnfStyleDecoder.d.ts +1 -1
- package/dist/utils/cnfStyleDecoder.d.ts.map +1 -1
- package/dist/utils/cnfStyleDecoder.js +40 -40
- package/dist/utils/cnfStyleDecoder.js.map +1 -1
- package/dist/utils/corruptionDetection.d.ts.map +1 -1
- package/dist/utils/corruptionDetection.js.map +1 -1
- package/dist/utils/dateFormatting.js.map +1 -1
- package/dist/utils/deepClone.js +1 -1
- package/dist/utils/deepClone.js.map +1 -1
- package/dist/utils/diagnostics.d.ts.map +1 -1
- package/dist/utils/diagnostics.js +1 -1
- package/dist/utils/diagnostics.js.map +1 -1
- package/dist/utils/errorHandling.js.map +1 -1
- package/dist/utils/formatting.d.ts.map +1 -1
- package/dist/utils/formatting.js +10 -2
- package/dist/utils/formatting.js.map +1 -1
- package/dist/utils/list-detection.d.ts +2 -2
- package/dist/utils/list-detection.d.ts.map +1 -1
- package/dist/utils/list-detection.js +21 -23
- package/dist/utils/list-detection.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +12 -7
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/parsingHelpers.js.map +1 -1
- package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
- package/dist/utils/stripTrackedChanges.js +3 -3
- package/dist/utils/stripTrackedChanges.js.map +1 -1
- package/dist/utils/textDiff.d.ts +1 -1
- package/dist/utils/textDiff.js +8 -8
- package/dist/utils/textDiff.js.map +1 -1
- package/dist/utils/units.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +24 -7
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/xmlSanitization.d.ts.map +1 -1
- package/dist/utils/xmlSanitization.js +3 -3
- package/dist/utils/xmlSanitization.js.map +1 -1
- package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
- package/dist/validation/RevisionAutoFixer.js +5 -5
- package/dist/validation/RevisionAutoFixer.js.map +1 -1
- package/dist/validation/RevisionValidator.d.ts.map +1 -1
- package/dist/validation/RevisionValidator.js +7 -9
- package/dist/validation/RevisionValidator.js.map +1 -1
- package/dist/validation/ValidationRules.js +3 -3
- package/dist/validation/ValidationRules.js.map +1 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/xml/XMLBuilder.d.ts +1 -1
- package/dist/xml/XMLBuilder.d.ts.map +1 -1
- package/dist/xml/XMLBuilder.js +98 -100
- package/dist/xml/XMLBuilder.js.map +1 -1
- package/dist/xml/XMLParser.d.ts.map +1 -1
- package/dist/xml/XMLParser.js +61 -66
- package/dist/xml/XMLParser.js.map +1 -1
- package/dist/zip/ZipHandler.d.ts.map +1 -1
- package/dist/zip/ZipHandler.js.map +1 -1
- package/dist/zip/ZipReader.d.ts.map +1 -1
- package/dist/zip/ZipReader.js +1 -3
- package/dist/zip/ZipReader.js.map +1 -1
- package/dist/zip/ZipWriter.d.ts +1 -1
- package/dist/zip/ZipWriter.d.ts.map +1 -1
- package/dist/zip/ZipWriter.js +28 -36
- package/dist/zip/ZipWriter.js.map +1 -1
- package/dist/zip/types.js +1 -1
- package/dist/zip/types.js.map +1 -1
- package/package.json +92 -92
- package/src/__tests__/helper-methods.test.ts +512 -512
- package/src/constants/legacyCompatFlags.ts +138 -138
- package/src/constants/limits.ts +50 -50
- package/src/core/Document.ts +985 -1145
- package/src/core/DocumentContent.ts +461 -467
- package/src/core/DocumentGenerator.ts +1133 -1104
- package/src/core/DocumentIdManager.ts +158 -158
- package/src/core/DocumentParser.ts +2347 -2716
- package/src/core/DocumentValidator.ts +363 -372
- package/src/core/Relationship.ts +367 -367
- package/src/core/RelationshipManager.ts +429 -428
- package/src/elements/AlternateContent.ts +42 -42
- package/src/elements/Bookmark.ts +212 -210
- package/src/elements/BookmarkManager.ts +247 -250
- package/src/elements/Comment.ts +356 -359
- package/src/elements/CommentManager.ts +499 -502
- package/src/elements/CommonTypes.ts +524 -549
- package/src/elements/CustomXml.ts +36 -36
- package/src/elements/Endnote.ts +221 -217
- package/src/elements/EndnoteManager.ts +246 -249
- package/src/elements/Field.ts +1292 -1233
- package/src/elements/FieldHelpers.ts +329 -333
- package/src/elements/FontManager.ts +336 -339
- package/src/elements/Footer.ts +269 -269
- package/src/elements/Footnote.ts +221 -217
- package/src/elements/FootnoteManager.ts +246 -249
- package/src/elements/Header.ts +269 -269
- package/src/elements/HeaderFooterManager.ts +219 -219
- package/src/elements/Hyperlink.ts +1288 -1193
- package/src/elements/Image.ts +1982 -1756
- package/src/elements/ImageManager.ts +437 -432
- package/src/elements/ImageRun.ts +59 -59
- package/src/elements/MathElement.ts +65 -65
- package/src/elements/Paragraph.ts +4347 -4287
- package/src/elements/PreservedElement.ts +53 -53
- package/src/elements/PropertyChangeTypes.ts +458 -442
- package/src/elements/RangeMarker.ts +382 -400
- package/src/elements/Revision.ts +1198 -1217
- package/src/elements/RevisionContent.ts +73 -73
- package/src/elements/RevisionManager.ts +1070 -1070
- package/src/elements/Run.ts +3103 -3073
- package/src/elements/Section.ts +1521 -1421
- package/src/elements/Shape.ts +884 -873
- package/src/elements/StructuredDocumentTag.ts +1176 -1207
- package/src/elements/Table.ts +2468 -2524
- package/src/elements/TableCell.ts +1617 -1621
- package/src/elements/TableGridChange.ts +149 -151
- package/src/elements/TableOfContents.ts +701 -691
- package/src/elements/TableOfContentsElement.ts +89 -89
- package/src/elements/TableRow.ts +960 -929
- package/src/elements/TextBox.ts +766 -768
- package/src/formatting/AbstractNumbering.ts +580 -579
- package/src/formatting/NumberingInstance.ts +295 -299
- package/src/formatting/NumberingLevel.ts +981 -1040
- package/src/formatting/NumberingManager.ts +833 -827
- package/src/formatting/Style.ts +1785 -1879
- package/src/formatting/StylesManager.ts +1090 -1130
- package/src/helpers/CleanupHelper.ts +524 -524
- package/src/images/ImageOptimizer.ts +274 -274
- package/src/index.ts +559 -554
- package/src/managers/DrawingManager.ts +319 -319
- package/src/tracking/DocumentTrackingContext.ts +687 -674
- package/src/tracking/TrackingContext.ts +175 -173
- package/src/types/compatibility-types.ts +49 -49
- package/src/types/formatting.ts +210 -210
- package/src/types/list-types.ts +14 -14
- package/src/types/settings-types.ts +59 -59
- package/src/types/styleConfig.ts +189 -189
- package/src/utils/ChangelogGenerator.ts +1583 -1581
- package/src/utils/CompatibilityUpgrader.ts +235 -237
- package/src/utils/InMemoryRevisionAcceptor.ts +691 -696
- package/src/utils/MoveOperationHelper.ts +233 -238
- package/src/utils/RevisionAwareProcessor.ts +518 -526
- package/src/utils/RevisionWalker.ts +427 -457
- package/src/utils/SelectiveRevisionAcceptor.ts +662 -683
- package/src/utils/ShadingResolver.ts +105 -107
- package/src/utils/acceptRevisions.ts +723 -714
- package/src/utils/cnfStyleDecoder.ts +212 -217
- package/src/utils/corruptionDetection.ts +346 -345
- package/src/utils/dateFormatting.ts +20 -20
- package/src/utils/deepClone.ts +77 -78
- package/src/utils/diagnostics.ts +125 -129
- package/src/utils/errorHandling.ts +80 -80
- package/src/utils/formatting.ts +220 -213
- package/src/utils/list-detection.ts +32 -42
- package/src/utils/logger.ts +412 -404
- package/src/utils/parsingHelpers.ts +190 -190
- package/src/utils/stripTrackedChanges.ts +356 -353
- package/src/utils/textDiff.ts +100 -100
- package/src/utils/units.ts +421 -421
- package/src/utils/validation.ts +553 -542
- package/src/utils/xmlSanitization.ts +179 -182
- package/src/validation/RevisionAutoFixer.ts +541 -542
- package/src/validation/RevisionValidator.ts +470 -460
- package/src/validation/ValidationRules.ts +338 -338
- package/src/validation/index.ts +30 -30
- package/src/xml/XMLBuilder.ts +857 -871
- package/src/xml/XMLParser.ts +877 -919
- package/src/zip/ZipHandler.ts +629 -637
- package/src/zip/ZipReader.ts +295 -299
- package/src/zip/ZipWriter.ts +374 -390
- package/src/zip/types.ts +116 -116
|
@@ -1,158 +1,158 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DocumentIdManager - Centralized annotation ID allocator
|
|
3
|
-
*
|
|
4
|
-
* Per ECMA-376, w:id attributes must be UNIQUE across ALL annotation types:
|
|
5
|
-
* - w:bookmarkStart / w:bookmarkEnd
|
|
6
|
-
* - w:ins / w:del (revisions)
|
|
7
|
-
* - w:pPrChange / w:rPrChange / w:tblPrChange (property changes)
|
|
8
|
-
* - w:moveFrom / w:moveTo
|
|
9
|
-
* - w:commentRangeStart / w:commentRangeEnd
|
|
10
|
-
* - w:comment
|
|
11
|
-
*
|
|
12
|
-
* This class provides a single source of truth for annotation IDs,
|
|
13
|
-
* ensuring that BookmarkManager, RevisionManager, and CommentManager
|
|
14
|
-
* all allocate from the same counter.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
export class DocumentIdManager {
|
|
18
|
-
private nextId = 0;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Creates a new DocumentIdManager
|
|
22
|
-
* @param initialNextId - Optional starting ID (default 0)
|
|
23
|
-
*/
|
|
24
|
-
constructor(initialNextId = 0) {
|
|
25
|
-
this.nextId = initialNextId;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Initializes the ID counter from existing document content.
|
|
30
|
-
* Scans ALL w:id attributes to find the global maximum.
|
|
31
|
-
*
|
|
32
|
-
* @param documentXml - Content of word/document.xml
|
|
33
|
-
* @param commentsXml - Optional content of word/comments.xml
|
|
34
|
-
*/
|
|
35
|
-
initializeFromDocument(documentXml?: string, commentsXml?: string): void {
|
|
36
|
-
let globalMaxId = -1;
|
|
37
|
-
|
|
38
|
-
// Scan document.xml for all w:id attributes
|
|
39
|
-
if (documentXml) {
|
|
40
|
-
const idRegex = /w:id="(\d+)"/g;
|
|
41
|
-
let match: RegExpExecArray | null;
|
|
42
|
-
|
|
43
|
-
while ((match = idRegex.exec(documentXml)) !== null) {
|
|
44
|
-
const idStr = match[1];
|
|
45
|
-
if (idStr) {
|
|
46
|
-
const id = parseInt(idStr, 10);
|
|
47
|
-
if (!isNaN(id) && id > globalMaxId) {
|
|
48
|
-
globalMaxId = id;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Also scan comments.xml for w:id attributes
|
|
55
|
-
if (commentsXml) {
|
|
56
|
-
const idRegex = /w:id="(\d+)"/g;
|
|
57
|
-
let match: RegExpExecArray | null;
|
|
58
|
-
|
|
59
|
-
while ((match = idRegex.exec(commentsXml)) !== null) {
|
|
60
|
-
const idStr = match[1];
|
|
61
|
-
if (idStr) {
|
|
62
|
-
const id = parseInt(idStr, 10);
|
|
63
|
-
if (!isNaN(id) && id > globalMaxId) {
|
|
64
|
-
globalMaxId = id;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Set nextId to one more than the highest existing ID
|
|
71
|
-
if (globalMaxId >= 0) {
|
|
72
|
-
this.nextId = globalMaxId + 1;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Gets the next available ID and increments the counter.
|
|
78
|
-
* This is the primary method for allocating new annotation IDs.
|
|
79
|
-
*
|
|
80
|
-
* @returns The next available ID
|
|
81
|
-
*/
|
|
82
|
-
getNextId(): number {
|
|
83
|
-
return this.nextId++;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Peeks at the next ID without consuming it.
|
|
88
|
-
* Use this when you need to know what the next ID will be
|
|
89
|
-
* without actually allocating it.
|
|
90
|
-
*
|
|
91
|
-
* @returns The next ID that would be allocated
|
|
92
|
-
*/
|
|
93
|
-
peekNextId(): number {
|
|
94
|
-
return this.nextId;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Gets the current next ID value.
|
|
99
|
-
* Alias for peekNextId() for backwards compatibility.
|
|
100
|
-
*
|
|
101
|
-
* @returns The current nextId value
|
|
102
|
-
*/
|
|
103
|
-
getCurrentNextId(): number {
|
|
104
|
-
return this.nextId;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Sets the next ID to a specific value.
|
|
109
|
-
* Use with caution - primarily for testing or special cases.
|
|
110
|
-
*
|
|
111
|
-
* @param id - The new next ID value
|
|
112
|
-
*/
|
|
113
|
-
setNextId(id: number): void {
|
|
114
|
-
this.nextId = id;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Ensures the next ID is at least the given value.
|
|
119
|
-
* If an existing ID is found that's >= current nextId, update to avoid collision.
|
|
120
|
-
*
|
|
121
|
-
* @param existingId - An ID that was found in existing content
|
|
122
|
-
*/
|
|
123
|
-
ensureNextIdAbove(existingId: number): void {
|
|
124
|
-
if (existingId >= this.nextId) {
|
|
125
|
-
this.nextId = existingId + 1;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Resets the ID counter to 0.
|
|
131
|
-
* Use when creating a new document from scratch.
|
|
132
|
-
*/
|
|
133
|
-
reset(): void {
|
|
134
|
-
this.nextId = 0;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Gets statistics about the ID manager.
|
|
139
|
-
*
|
|
140
|
-
* @returns Object with nextId value
|
|
141
|
-
*/
|
|
142
|
-
getStats(): { nextId: number } {
|
|
143
|
-
return {
|
|
144
|
-
nextId: this.nextId,
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Creates a new DocumentIdManager instance.
|
|
150
|
-
* Factory method for consistency with other managers.
|
|
151
|
-
*
|
|
152
|
-
* @param initialNextId - Optional starting ID (default 0)
|
|
153
|
-
* @returns New DocumentIdManager instance
|
|
154
|
-
*/
|
|
155
|
-
static create(initialNextId = 0): DocumentIdManager {
|
|
156
|
-
return new DocumentIdManager(initialNextId);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* DocumentIdManager - Centralized annotation ID allocator
|
|
3
|
+
*
|
|
4
|
+
* Per ECMA-376, w:id attributes must be UNIQUE across ALL annotation types:
|
|
5
|
+
* - w:bookmarkStart / w:bookmarkEnd
|
|
6
|
+
* - w:ins / w:del (revisions)
|
|
7
|
+
* - w:pPrChange / w:rPrChange / w:tblPrChange (property changes)
|
|
8
|
+
* - w:moveFrom / w:moveTo
|
|
9
|
+
* - w:commentRangeStart / w:commentRangeEnd
|
|
10
|
+
* - w:comment
|
|
11
|
+
*
|
|
12
|
+
* This class provides a single source of truth for annotation IDs,
|
|
13
|
+
* ensuring that BookmarkManager, RevisionManager, and CommentManager
|
|
14
|
+
* all allocate from the same counter.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
export class DocumentIdManager {
|
|
18
|
+
private nextId = 0;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Creates a new DocumentIdManager
|
|
22
|
+
* @param initialNextId - Optional starting ID (default 0)
|
|
23
|
+
*/
|
|
24
|
+
constructor(initialNextId = 0) {
|
|
25
|
+
this.nextId = initialNextId;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Initializes the ID counter from existing document content.
|
|
30
|
+
* Scans ALL w:id attributes to find the global maximum.
|
|
31
|
+
*
|
|
32
|
+
* @param documentXml - Content of word/document.xml
|
|
33
|
+
* @param commentsXml - Optional content of word/comments.xml
|
|
34
|
+
*/
|
|
35
|
+
initializeFromDocument(documentXml?: string, commentsXml?: string): void {
|
|
36
|
+
let globalMaxId = -1;
|
|
37
|
+
|
|
38
|
+
// Scan document.xml for all w:id attributes
|
|
39
|
+
if (documentXml) {
|
|
40
|
+
const idRegex = /w:id="(\d+)"/g;
|
|
41
|
+
let match: RegExpExecArray | null;
|
|
42
|
+
|
|
43
|
+
while ((match = idRegex.exec(documentXml)) !== null) {
|
|
44
|
+
const idStr = match[1];
|
|
45
|
+
if (idStr) {
|
|
46
|
+
const id = parseInt(idStr, 10);
|
|
47
|
+
if (!isNaN(id) && id > globalMaxId) {
|
|
48
|
+
globalMaxId = id;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Also scan comments.xml for w:id attributes
|
|
55
|
+
if (commentsXml) {
|
|
56
|
+
const idRegex = /w:id="(\d+)"/g;
|
|
57
|
+
let match: RegExpExecArray | null;
|
|
58
|
+
|
|
59
|
+
while ((match = idRegex.exec(commentsXml)) !== null) {
|
|
60
|
+
const idStr = match[1];
|
|
61
|
+
if (idStr) {
|
|
62
|
+
const id = parseInt(idStr, 10);
|
|
63
|
+
if (!isNaN(id) && id > globalMaxId) {
|
|
64
|
+
globalMaxId = id;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Set nextId to one more than the highest existing ID
|
|
71
|
+
if (globalMaxId >= 0) {
|
|
72
|
+
this.nextId = globalMaxId + 1;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Gets the next available ID and increments the counter.
|
|
78
|
+
* This is the primary method for allocating new annotation IDs.
|
|
79
|
+
*
|
|
80
|
+
* @returns The next available ID
|
|
81
|
+
*/
|
|
82
|
+
getNextId(): number {
|
|
83
|
+
return this.nextId++;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Peeks at the next ID without consuming it.
|
|
88
|
+
* Use this when you need to know what the next ID will be
|
|
89
|
+
* without actually allocating it.
|
|
90
|
+
*
|
|
91
|
+
* @returns The next ID that would be allocated
|
|
92
|
+
*/
|
|
93
|
+
peekNextId(): number {
|
|
94
|
+
return this.nextId;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Gets the current next ID value.
|
|
99
|
+
* Alias for peekNextId() for backwards compatibility.
|
|
100
|
+
*
|
|
101
|
+
* @returns The current nextId value
|
|
102
|
+
*/
|
|
103
|
+
getCurrentNextId(): number {
|
|
104
|
+
return this.nextId;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Sets the next ID to a specific value.
|
|
109
|
+
* Use with caution - primarily for testing or special cases.
|
|
110
|
+
*
|
|
111
|
+
* @param id - The new next ID value
|
|
112
|
+
*/
|
|
113
|
+
setNextId(id: number): void {
|
|
114
|
+
this.nextId = id;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Ensures the next ID is at least the given value.
|
|
119
|
+
* If an existing ID is found that's >= current nextId, update to avoid collision.
|
|
120
|
+
*
|
|
121
|
+
* @param existingId - An ID that was found in existing content
|
|
122
|
+
*/
|
|
123
|
+
ensureNextIdAbove(existingId: number): void {
|
|
124
|
+
if (existingId >= this.nextId) {
|
|
125
|
+
this.nextId = existingId + 1;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Resets the ID counter to 0.
|
|
131
|
+
* Use when creating a new document from scratch.
|
|
132
|
+
*/
|
|
133
|
+
reset(): void {
|
|
134
|
+
this.nextId = 0;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Gets statistics about the ID manager.
|
|
139
|
+
*
|
|
140
|
+
* @returns Object with nextId value
|
|
141
|
+
*/
|
|
142
|
+
getStats(): { nextId: number } {
|
|
143
|
+
return {
|
|
144
|
+
nextId: this.nextId,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Creates a new DocumentIdManager instance.
|
|
150
|
+
* Factory method for consistency with other managers.
|
|
151
|
+
*
|
|
152
|
+
* @param initialNextId - Optional starting ID (default 0)
|
|
153
|
+
* @returns New DocumentIdManager instance
|
|
154
|
+
*/
|
|
155
|
+
static create(initialNextId = 0): DocumentIdManager {
|
|
156
|
+
return new DocumentIdManager(initialNextId);
|
|
157
|
+
}
|
|
158
|
+
}
|