docxmlater 10.0.1 → 10.0.3
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 +3 -2
- package/dist/constants/legacyCompatFlags.d.ts.map +1 -1
- package/dist/constants/legacyCompatFlags.js.map +1 -1
- package/dist/constants/limits.d.ts +0 -27
- package/dist/constants/limits.d.ts.map +1 -1
- package/dist/constants/limits.js +13 -13
- package/dist/constants/limits.js.map +1 -1
- package/dist/core/Document.d.ts +24 -19
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +272 -71
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentContent.d.ts.map +1 -1
- package/dist/core/DocumentContent.js.map +1 -1
- package/dist/core/DocumentGenerator.d.ts.map +1 -1
- package/dist/core/DocumentGenerator.js +59 -24
- package/dist/core/DocumentGenerator.js.map +1 -1
- package/dist/core/DocumentIdManager.d.ts.map +1 -1
- package/dist/core/DocumentIdManager.js.map +1 -1
- package/dist/core/DocumentParser.d.ts +6 -6
- package/dist/core/DocumentParser.d.ts.map +1 -1
- package/dist/core/DocumentParser.js +60 -54
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/core/DocumentValidator.d.ts.map +1 -1
- package/dist/core/DocumentValidator.js.map +1 -1
- package/dist/core/Relationship.d.ts.map +1 -1
- package/dist/core/Relationship.js +1 -1
- package/dist/core/Relationship.js.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.map +1 -1
- package/dist/elements/BookmarkManager.d.ts.map +1 -1
- package/dist/elements/BookmarkManager.js.map +1 -1
- package/dist/elements/Comment.js +1 -1
- package/dist/elements/Comment.js.map +1 -1
- package/dist/elements/CommentManager.d.ts.map +1 -1
- package/dist/elements/CommentManager.js +8 -2
- package/dist/elements/CommentManager.js.map +1 -1
- package/dist/elements/CommonTypes.d.ts.map +1 -1
- package/dist/elements/CommonTypes.js +1 -2
- 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.map +1 -1
- package/dist/elements/EndnoteManager.d.ts.map +1 -1
- package/dist/elements/EndnoteManager.js.map +1 -1
- package/dist/elements/Field.d.ts.map +1 -1
- package/dist/elements/Field.js +31 -28
- package/dist/elements/Field.js.map +1 -1
- package/dist/elements/FieldHelpers.d.ts.map +1 -1
- package/dist/elements/FieldHelpers.js +6 -6
- package/dist/elements/FieldHelpers.js.map +1 -1
- package/dist/elements/FontManager.d.ts.map +1 -1
- package/dist/elements/FontManager.js.map +1 -1
- package/dist/elements/Footer.js.map +1 -1
- package/dist/elements/Footnote.d.ts.map +1 -1
- package/dist/elements/Footnote.js.map +1 -1
- package/dist/elements/FootnoteManager.d.ts.map +1 -1
- package/dist/elements/FootnoteManager.js.map +1 -1
- package/dist/elements/Header.js.map +1 -1
- package/dist/elements/HeaderFooterManager.js.map +1 -1
- package/dist/elements/Hyperlink.d.ts.map +1 -1
- package/dist/elements/Hyperlink.js +5 -5
- package/dist/elements/Hyperlink.js.map +1 -1
- package/dist/elements/Image.d.ts +2 -2
- package/dist/elements/Image.d.ts.map +1 -1
- package/dist/elements/Image.js +21 -5
- package/dist/elements/Image.js.map +1 -1
- package/dist/elements/ImageManager.d.ts.map +1 -1
- package/dist/elements/ImageManager.js +2 -2
- package/dist/elements/ImageManager.js.map +1 -1
- package/dist/elements/ImageRun.js.map +1 -1
- package/dist/elements/MathElement.js.map +1 -1
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +128 -117
- package/dist/elements/Paragraph.js.map +1 -1
- package/dist/elements/PreservedElement.js.map +1 -1
- package/dist/elements/PropertyChangeTypes.js.map +1 -1
- package/dist/elements/RangeMarker.js.map +1 -1
- package/dist/elements/Revision.d.ts +1 -0
- package/dist/elements/Revision.d.ts.map +1 -1
- package/dist/elements/Revision.js +44 -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.map +1 -1
- package/dist/elements/Run.d.ts.map +1 -1
- package/dist/elements/Run.js +1 -3
- package/dist/elements/Run.js.map +1 -1
- package/dist/elements/Section.d.ts.map +1 -1
- package/dist/elements/Section.js +127 -118
- package/dist/elements/Section.js.map +1 -1
- package/dist/elements/Shape.d.ts.map +1 -1
- package/dist/elements/Shape.js +21 -0
- package/dist/elements/Shape.js.map +1 -1
- package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
- package/dist/elements/StructuredDocumentTag.js +20 -8
- package/dist/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/elements/Table.d.ts +2 -2
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +29 -35
- package/dist/elements/Table.js.map +1 -1
- package/dist/elements/TableCell.d.ts +2 -2
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +63 -67
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/elements/TableGridChange.js.map +1 -1
- package/dist/elements/TableOfContents.d.ts +6 -6
- package/dist/elements/TableOfContents.d.ts.map +1 -1
- 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 +65 -47
- package/dist/elements/TableRow.js.map +1 -1
- package/dist/elements/TextBox.d.ts.map +1 -1
- package/dist/elements/TextBox.js +1 -1
- package/dist/elements/TextBox.js.map +1 -1
- package/dist/formatting/AbstractNumbering.d.ts +1 -1
- package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
- package/dist/formatting/AbstractNumbering.js +11 -11
- package/dist/formatting/AbstractNumbering.js.map +1 -1
- package/dist/formatting/NumberingInstance.d.ts.map +1 -1
- package/dist/formatting/NumberingInstance.js +4 -4
- package/dist/formatting/NumberingInstance.js.map +1 -1
- package/dist/formatting/NumberingLevel.d.ts.map +1 -1
- package/dist/formatting/NumberingLevel.js +26 -26
- package/dist/formatting/NumberingLevel.js.map +1 -1
- package/dist/formatting/NumberingManager.d.ts +1 -1
- package/dist/formatting/NumberingManager.d.ts.map +1 -1
- package/dist/formatting/NumberingManager.js.map +1 -1
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +87 -95
- package/dist/formatting/Style.js.map +1 -1
- package/dist/formatting/StylesManager.d.ts +3 -3
- package/dist/formatting/StylesManager.d.ts.map +1 -1
- package/dist/formatting/StylesManager.js.map +1 -1
- package/dist/helpers/CleanupHelper.d.ts.map +1 -1
- package/dist/helpers/CleanupHelper.js +1 -7
- package/dist/helpers/CleanupHelper.js.map +1 -1
- package/dist/images/ImageOptimizer.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/managers/DrawingManager.d.ts.map +1 -1
- package/dist/managers/DrawingManager.js.map +1 -1
- package/dist/tracking/DocumentTrackingContext.js.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 +4 -4
- package/dist/types/list-types.d.ts.map +1 -1
- package/dist/types/list-types.js.map +1 -1
- package/dist/types/settings-types.js.map +1 -1
- package/dist/types/styleConfig.js.map +1 -1
- package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
- package/dist/utils/ChangelogGenerator.js.map +1 -1
- package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
- package/dist/utils/CompatibilityUpgrader.js +7 -7
- package/dist/utils/CompatibilityUpgrader.js.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.js +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
- package/dist/utils/MoveOperationHelper.js.map +1 -1
- package/dist/utils/RevisionAwareProcessor.js.map +1 -1
- package/dist/utils/RevisionWalker.js.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
- package/dist/utils/ShadingResolver.js +1 -1
- package/dist/utils/ShadingResolver.js.map +1 -1
- package/dist/utils/acceptRevisions.d.ts +0 -28
- package/dist/utils/acceptRevisions.d.ts.map +1 -1
- package/dist/utils/acceptRevisions.js +5 -7
- package/dist/utils/acceptRevisions.js.map +1 -1
- package/dist/utils/cnfStyleDecoder.js +1 -1
- package/dist/utils/cnfStyleDecoder.js.map +1 -1
- package/dist/utils/corruptionDetection.js.map +1 -1
- package/dist/utils/dateFormatting.js.map +1 -1
- package/dist/utils/deepClone.d.ts +0 -1
- package/dist/utils/deepClone.d.ts.map +1 -1
- package/dist/utils/deepClone.js +0 -7
- package/dist/utils/deepClone.js.map +1 -1
- package/dist/utils/diagnostics.d.ts +2 -2
- package/dist/utils/diagnostics.d.ts.map +1 -1
- package/dist/utils/diagnostics.js.map +1 -1
- package/dist/utils/errorHandling.js.map +1 -1
- 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 +3 -3
- package/dist/utils/list-detection.js.map +1 -1
- package/dist/utils/logger.d.ts +2 -4
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +0 -2
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/parsingHelpers.js.map +1 -1
- package/dist/utils/stripTrackedChanges.d.ts +0 -19
- package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
- package/dist/utils/stripTrackedChanges.js +0 -2
- package/dist/utils/stripTrackedChanges.js.map +1 -1
- 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.map +1 -1
- package/dist/utils/xmlSanitization.js.map +1 -1
- package/dist/validation/RevisionAutoFixer.js.map +1 -1
- package/dist/validation/RevisionValidator.js.map +1 -1
- package/dist/validation/ValidationRules.js.map +1 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/xml/XMLBuilder.d.ts.map +1 -1
- package/dist/xml/XMLBuilder.js +10 -0
- package/dist/xml/XMLBuilder.js.map +1 -1
- package/dist/xml/XMLParser.d.ts.map +1 -1
- package/dist/xml/XMLParser.js +4 -5
- package/dist/xml/XMLParser.js.map +1 -1
- package/dist/zip/ZipHandler.js.map +1 -1
- package/dist/zip/ZipReader.js.map +1 -1
- package/dist/zip/ZipWriter.js.map +1 -1
- package/dist/zip/errors.js.map +1 -1
- package/dist/zip/types.js.map +1 -1
- package/package.json +34 -4
- package/src/__tests__/helper-methods.test.ts +512 -0
- package/src/constants/legacyCompatFlags.ts +138 -0
- package/src/constants/limits.ts +50 -0
- package/src/core/CLAUDE.md +109 -0
- package/src/core/Document.ts +15569 -0
- package/src/core/DocumentContent.ts +467 -0
- package/src/core/DocumentGenerator.ts +1104 -0
- package/src/core/DocumentIdManager.ts +158 -0
- package/src/core/DocumentParser.ts +10107 -0
- package/src/core/DocumentValidator.ts +372 -0
- package/src/core/Relationship.ts +367 -0
- package/src/core/RelationshipManager.ts +428 -0
- package/src/elements/AlternateContent.ts +42 -0
- package/src/elements/Bookmark.ts +210 -0
- package/src/elements/BookmarkManager.ts +250 -0
- package/src/elements/CLAUDE.md +126 -0
- package/src/elements/Comment.ts +359 -0
- package/src/elements/CommentManager.ts +502 -0
- package/src/elements/CommonTypes.ts +549 -0
- package/src/elements/CustomXml.ts +36 -0
- package/src/elements/Endnote.ts +217 -0
- package/src/elements/EndnoteManager.ts +249 -0
- package/src/elements/Field.ts +1233 -0
- package/src/elements/FieldHelpers.ts +333 -0
- package/src/elements/FontManager.ts +339 -0
- package/src/elements/Footer.ts +269 -0
- package/src/elements/Footnote.ts +217 -0
- package/src/elements/FootnoteManager.ts +249 -0
- package/src/elements/Header.ts +269 -0
- package/src/elements/HeaderFooterManager.ts +219 -0
- package/src/elements/Hyperlink.ts +1146 -0
- package/src/elements/Image.ts +1756 -0
- package/src/elements/ImageManager.ts +432 -0
- package/src/elements/ImageRun.ts +59 -0
- package/src/elements/MathElement.ts +65 -0
- package/src/elements/Paragraph.ts +4227 -0
- package/src/elements/PreservedElement.ts +53 -0
- package/src/elements/PropertyChangeTypes.ts +442 -0
- package/src/elements/RangeMarker.ts +400 -0
- package/src/elements/Revision.ts +1217 -0
- package/src/elements/RevisionContent.ts +73 -0
- package/src/elements/RevisionManager.ts +1070 -0
- package/src/elements/Run.ts +3068 -0
- package/src/elements/Section.ts +1421 -0
- package/src/elements/Shape.ts +873 -0
- package/src/elements/StructuredDocumentTag.ts +978 -0
- package/src/elements/Table.ts +2524 -0
- package/src/elements/TableCell.ts +1586 -0
- package/src/elements/TableGridChange.ts +151 -0
- package/src/elements/TableOfContents.ts +691 -0
- package/src/elements/TableOfContentsElement.ts +89 -0
- package/src/elements/TableRow.ts +906 -0
- package/src/elements/TextBox.ts +768 -0
- package/src/formatting/AbstractNumbering.ts +548 -0
- package/src/formatting/CLAUDE.md +74 -0
- package/src/formatting/NumberingInstance.ts +212 -0
- package/src/formatting/NumberingLevel.ts +1006 -0
- package/src/formatting/NumberingManager.ts +827 -0
- package/src/formatting/Style.ts +1833 -0
- package/src/formatting/StylesManager.ts +1005 -0
- package/src/helpers/CleanupHelper.ts +524 -0
- package/src/images/ImageOptimizer.ts +274 -0
- package/src/index.ts +554 -0
- package/src/managers/CLAUDE.md +47 -0
- package/src/managers/DrawingManager.ts +319 -0
- package/src/tracking/DocumentTrackingContext.ts +643 -0
- package/src/tracking/TrackingContext.ts +173 -0
- package/src/types/compatibility-types.ts +49 -0
- package/src/types/formatting.ts +210 -0
- package/src/types/list-types.ts +152 -0
- package/src/types/settings-types.ts +59 -0
- package/src/types/styleConfig.ts +189 -0
- package/src/utils/CLAUDE.md +153 -0
- package/src/utils/ChangelogGenerator.ts +1581 -0
- package/src/utils/CompatibilityUpgrader.ts +237 -0
- package/src/utils/InMemoryRevisionAcceptor.ts +668 -0
- package/src/utils/MoveOperationHelper.ts +238 -0
- package/src/utils/RevisionAwareProcessor.ts +526 -0
- package/src/utils/RevisionWalker.ts +457 -0
- package/src/utils/SelectiveRevisionAcceptor.ts +613 -0
- package/src/utils/ShadingResolver.ts +107 -0
- package/src/utils/acceptRevisions.ts +714 -0
- package/src/utils/cnfStyleDecoder.ts +217 -0
- package/src/utils/corruptionDetection.ts +345 -0
- package/src/utils/dateFormatting.ts +20 -0
- package/src/utils/deepClone.ts +78 -0
- package/src/utils/diagnostics.ts +129 -0
- package/src/utils/errorHandling.ts +80 -0
- package/src/utils/formatting.ts +213 -0
- package/src/utils/list-detection.ts +274 -0
- package/src/utils/logger.ts +404 -0
- package/src/utils/parsingHelpers.ts +190 -0
- package/src/utils/stripTrackedChanges.ts +353 -0
- package/src/utils/textDiff.ts +100 -0
- package/src/utils/units.ts +421 -0
- package/src/utils/validation.ts +542 -0
- package/src/utils/xmlSanitization.ts +182 -0
- package/src/validation/RevisionAutoFixer.ts +542 -0
- package/src/validation/RevisionValidator.ts +460 -0
- package/src/validation/ValidationRules.ts +338 -0
- package/src/validation/index.ts +30 -0
- package/src/xml/CLAUDE.md +65 -0
- package/src/xml/XMLBuilder.ts +871 -0
- package/src/xml/XMLParser.ts +919 -0
- package/src/zip/CLAUDE.md +55 -0
- package/src/zip/ZipHandler.ts +637 -0
- package/src/zip/ZipReader.ts +299 -0
- package/src/zip/ZipWriter.ts +390 -0
- package/src/zip/errors.ts +69 -0
- package/src/zip/types.ts +116 -0
- package/dist/core/ListNormalizer.d.ts +0 -23
- package/dist/core/ListNormalizer.d.ts.map +0 -1
- package/dist/core/ListNormalizer.js +0 -624
- package/dist/core/ListNormalizer.js.map +0 -1
- package/dist/images/index.d.ts +0 -2
- package/dist/images/index.d.ts.map +0 -1
- package/dist/images/index.js +0 -8
- package/dist/images/index.js.map +0 -1
- package/dist/ms-doc/cfb/CFBReader.d.ts +0 -35
- package/dist/ms-doc/cfb/CFBReader.d.ts.map +0 -1
- package/dist/ms-doc/cfb/CFBReader.js +0 -360
- package/dist/ms-doc/cfb/CFBReader.js.map +0 -1
- package/dist/ms-doc/converter/DocToDocxConverter.d.ts +0 -55
- package/dist/ms-doc/converter/DocToDocxConverter.d.ts.map +0 -1
- package/dist/ms-doc/converter/DocToDocxConverter.js +0 -324
- package/dist/ms-doc/converter/DocToDocxConverter.js.map +0 -1
- package/dist/ms-doc/fib/FIB.d.ts +0 -18
- package/dist/ms-doc/fib/FIB.d.ts.map +0 -1
- package/dist/ms-doc/fib/FIB.js +0 -342
- package/dist/ms-doc/fib/FIB.js.map +0 -1
- package/dist/ms-doc/fields/FieldParser.d.ts +0 -31
- package/dist/ms-doc/fields/FieldParser.d.ts.map +0 -1
- package/dist/ms-doc/fields/FieldParser.js +0 -266
- package/dist/ms-doc/fields/FieldParser.js.map +0 -1
- package/dist/ms-doc/images/PictureExtractor.d.ts +0 -22
- package/dist/ms-doc/images/PictureExtractor.d.ts.map +0 -1
- package/dist/ms-doc/images/PictureExtractor.js +0 -233
- package/dist/ms-doc/images/PictureExtractor.js.map +0 -1
- package/dist/ms-doc/index.d.ts +0 -20
- package/dist/ms-doc/index.d.ts.map +0 -1
- package/dist/ms-doc/index.js +0 -59
- package/dist/ms-doc/index.js.map +0 -1
- package/dist/ms-doc/properties/SPRM.d.ts +0 -210
- package/dist/ms-doc/properties/SPRM.d.ts.map +0 -1
- package/dist/ms-doc/properties/SPRM.js +0 -633
- package/dist/ms-doc/properties/SPRM.js.map +0 -1
- package/dist/ms-doc/sections/SectionParser.d.ts +0 -25
- package/dist/ms-doc/sections/SectionParser.d.ts.map +0 -1
- package/dist/ms-doc/sections/SectionParser.js +0 -214
- package/dist/ms-doc/sections/SectionParser.js.map +0 -1
- package/dist/ms-doc/styles/StyleSheet.d.ts +0 -23
- package/dist/ms-doc/styles/StyleSheet.d.ts.map +0 -1
- package/dist/ms-doc/styles/StyleSheet.js +0 -268
- package/dist/ms-doc/styles/StyleSheet.js.map +0 -1
- package/dist/ms-doc/subdocuments/SubdocumentParser.d.ts +0 -61
- package/dist/ms-doc/subdocuments/SubdocumentParser.d.ts.map +0 -1
- package/dist/ms-doc/subdocuments/SubdocumentParser.js +0 -208
- package/dist/ms-doc/subdocuments/SubdocumentParser.js.map +0 -1
- package/dist/ms-doc/tables/TableParser.d.ts +0 -29
- package/dist/ms-doc/tables/TableParser.d.ts.map +0 -1
- package/dist/ms-doc/tables/TableParser.js +0 -176
- package/dist/ms-doc/tables/TableParser.js.map +0 -1
- package/dist/ms-doc/text/PieceTable.d.ts +0 -21
- package/dist/ms-doc/text/PieceTable.d.ts.map +0 -1
- package/dist/ms-doc/text/PieceTable.js +0 -171
- package/dist/ms-doc/text/PieceTable.js.map +0 -1
- package/dist/ms-doc/types/Constants.d.ts +0 -99
- package/dist/ms-doc/types/Constants.d.ts.map +0 -1
- package/dist/ms-doc/types/Constants.js +0 -102
- package/dist/ms-doc/types/Constants.js.map +0 -1
- package/dist/ms-doc/types/DocTypes.d.ts +0 -368
- package/dist/ms-doc/types/DocTypes.d.ts.map +0 -1
- package/dist/ms-doc/types/DocTypes.js +0 -3
- package/dist/ms-doc/types/DocTypes.js.map +0 -1
- package/dist/tracking/index.d.ts +0 -3
- package/dist/tracking/index.d.ts.map +0 -1
- package/dist/tracking/index.js +0 -6
- package/dist/tracking/index.js.map +0 -1
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BookmarkManager - Manages bookmarks in a document
|
|
3
|
+
*
|
|
4
|
+
* Tracks all bookmarks, assigns unique IDs, and ensures name uniqueness.
|
|
5
|
+
*
|
|
6
|
+
* Per ECMA-376, bookmark IDs must be unique across ALL annotation types
|
|
7
|
+
* in a document. Use setIdProvider() to connect to a centralized ID allocator.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { Bookmark } from './Bookmark';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Type for the centralized ID provider callback.
|
|
14
|
+
* Returns the next available annotation ID from a shared counter.
|
|
15
|
+
*/
|
|
16
|
+
export type IdProviderCallback = () => number;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Type for callback to notify of existing IDs (for synchronization).
|
|
20
|
+
* Called when registering an existing bookmark to keep the central counter in sync.
|
|
21
|
+
*/
|
|
22
|
+
export type IdExistsCallback = (existingId: number) => void;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Manages document bookmarks
|
|
26
|
+
*/
|
|
27
|
+
export class BookmarkManager {
|
|
28
|
+
private bookmarks = new Map<string, Bookmark>();
|
|
29
|
+
private nextId = 0;
|
|
30
|
+
private idProvider: IdProviderCallback | null = null;
|
|
31
|
+
private idExistsNotifier: IdExistsCallback | null = null;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Sets the centralized ID provider callback.
|
|
35
|
+
* When set, IDs will be allocated from the centralized DocumentIdManager
|
|
36
|
+
* instead of the local nextId counter.
|
|
37
|
+
*
|
|
38
|
+
* @param provider - Callback that returns the next available ID
|
|
39
|
+
* @param existsNotifier - Optional callback to notify when existing IDs are found
|
|
40
|
+
*/
|
|
41
|
+
setIdProvider(provider: IdProviderCallback, existsNotifier?: IdExistsCallback): void {
|
|
42
|
+
this.idProvider = provider;
|
|
43
|
+
this.idExistsNotifier = existsNotifier || null;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Registers a bookmark with the manager
|
|
48
|
+
* Assigns a unique ID and ensures name uniqueness
|
|
49
|
+
* @param bookmark - Bookmark to register
|
|
50
|
+
* @returns The registered bookmark (same instance)
|
|
51
|
+
* @throws Error if a bookmark with the same name already exists
|
|
52
|
+
*/
|
|
53
|
+
register(bookmark: Bookmark): Bookmark {
|
|
54
|
+
const name = bookmark.getName();
|
|
55
|
+
|
|
56
|
+
// Check for duplicate names
|
|
57
|
+
if (this.bookmarks.has(name)) {
|
|
58
|
+
throw new Error(
|
|
59
|
+
`Bookmark with name "${name}" already exists. Bookmark names must be unique within a document.`
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Assign unique ID - use centralized provider if available
|
|
64
|
+
const id = this.idProvider ? this.idProvider() : this.nextId++;
|
|
65
|
+
bookmark.setId(id);
|
|
66
|
+
|
|
67
|
+
// Store bookmark
|
|
68
|
+
this.bookmarks.set(name, bookmark);
|
|
69
|
+
|
|
70
|
+
return bookmark;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Registers an existing bookmark, preserving its ID
|
|
75
|
+
* Used when loading documents to preserve original bookmark IDs and avoid collisions
|
|
76
|
+
* @param bookmark - Bookmark with existing ID to register
|
|
77
|
+
* @returns The registered bookmark (same instance)
|
|
78
|
+
* @throws Error if a bookmark with the same name already exists
|
|
79
|
+
*/
|
|
80
|
+
registerExisting(bookmark: Bookmark): Bookmark {
|
|
81
|
+
const name = bookmark.getName();
|
|
82
|
+
const existingId = bookmark.getId();
|
|
83
|
+
|
|
84
|
+
// Check for duplicate names
|
|
85
|
+
if (this.bookmarks.has(name)) {
|
|
86
|
+
throw new Error(
|
|
87
|
+
`Bookmark with name "${name}" already exists. Bookmark names must be unique within a document.`
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Notify centralized ID manager about this existing ID
|
|
92
|
+
if (this.idExistsNotifier) {
|
|
93
|
+
this.idExistsNotifier(existingId);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Also update local nextId to avoid collisions (for fallback)
|
|
97
|
+
if (existingId >= this.nextId) {
|
|
98
|
+
this.nextId = existingId + 1;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Store bookmark (keep its existing ID)
|
|
102
|
+
this.bookmarks.set(name, bookmark);
|
|
103
|
+
|
|
104
|
+
return bookmark;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Gets a bookmark by name
|
|
109
|
+
* @param name - Bookmark name
|
|
110
|
+
* @returns The bookmark, or undefined if not found
|
|
111
|
+
*/
|
|
112
|
+
getBookmark(name: string): Bookmark | undefined {
|
|
113
|
+
return this.bookmarks.get(name);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Checks if a bookmark exists
|
|
118
|
+
* @param name - Bookmark name
|
|
119
|
+
* @returns True if the bookmark exists
|
|
120
|
+
*/
|
|
121
|
+
hasBookmark(name: string): boolean {
|
|
122
|
+
return this.bookmarks.has(name);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Gets all bookmarks
|
|
127
|
+
* @returns Array of all bookmarks
|
|
128
|
+
*/
|
|
129
|
+
getAllBookmarks(): Bookmark[] {
|
|
130
|
+
return Array.from(this.bookmarks.values());
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Gets the number of bookmarks
|
|
135
|
+
* @returns Number of bookmarks
|
|
136
|
+
*/
|
|
137
|
+
getCount(): number {
|
|
138
|
+
return this.bookmarks.size;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Removes a bookmark
|
|
143
|
+
* @param name - Bookmark name
|
|
144
|
+
* @returns True if the bookmark was removed
|
|
145
|
+
*/
|
|
146
|
+
removeBookmark(name: string): boolean {
|
|
147
|
+
return this.bookmarks.delete(name);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Clears all bookmarks
|
|
152
|
+
*/
|
|
153
|
+
clear(): void {
|
|
154
|
+
this.bookmarks.clear();
|
|
155
|
+
this.nextId = 0;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Sets the next ID to be assigned
|
|
160
|
+
* Used when loading documents to avoid ID collisions with existing bookmarks
|
|
161
|
+
* @param id - The next ID value to use
|
|
162
|
+
*/
|
|
163
|
+
setNextId(id: number): void {
|
|
164
|
+
this.nextId = id;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Gets a unique bookmark name by adding a suffix if needed
|
|
169
|
+
* Ensures the returned name is always within the 40-character limit
|
|
170
|
+
* @param baseName - Base name for the bookmark
|
|
171
|
+
* @returns A unique bookmark name (max 40 characters)
|
|
172
|
+
*/
|
|
173
|
+
getUniqueName(baseName: string): string {
|
|
174
|
+
const maxLength = 40;
|
|
175
|
+
|
|
176
|
+
if (!this.hasBookmark(baseName)) {
|
|
177
|
+
return baseName;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Try adding numbers until we find a unique name
|
|
181
|
+
let counter = 1;
|
|
182
|
+
while (counter <= 1000) {
|
|
183
|
+
const suffix = `_${counter}`;
|
|
184
|
+
|
|
185
|
+
// Truncate base name to leave room for suffix within 40-char limit
|
|
186
|
+
const maxBase = maxLength - suffix.length;
|
|
187
|
+
const truncatedBase =
|
|
188
|
+
baseName.length > maxBase ? baseName.substring(0, maxBase) : baseName;
|
|
189
|
+
|
|
190
|
+
const uniqueName = `${truncatedBase}${suffix}`;
|
|
191
|
+
|
|
192
|
+
if (!this.hasBookmark(uniqueName)) {
|
|
193
|
+
return uniqueName;
|
|
194
|
+
}
|
|
195
|
+
counter++;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
throw new Error(
|
|
199
|
+
`Could not generate unique bookmark name from base "${baseName}"`
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Creates and registers a new bookmark with a unique name
|
|
205
|
+
* @param name - Desired bookmark name
|
|
206
|
+
* @returns The created and registered bookmark
|
|
207
|
+
*/
|
|
208
|
+
createBookmark(name: string): Bookmark {
|
|
209
|
+
const uniqueName = this.getUniqueName(name);
|
|
210
|
+
const bookmark = Bookmark.create(uniqueName);
|
|
211
|
+
return this.register(bookmark);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Creates and registers a bookmark for a heading
|
|
216
|
+
* Automatically generates a unique name from the heading text
|
|
217
|
+
* @param headingText - The text of the heading
|
|
218
|
+
* @returns The created and registered bookmark
|
|
219
|
+
*/
|
|
220
|
+
createHeadingBookmark(headingText: string): Bookmark {
|
|
221
|
+
const bookmark = Bookmark.createForHeading(headingText);
|
|
222
|
+
const uniqueName = this.getUniqueName(bookmark.getName());
|
|
223
|
+
bookmark.setName(uniqueName);
|
|
224
|
+
return this.register(bookmark);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Gets statistics about bookmarks
|
|
229
|
+
* @returns Object with bookmark statistics
|
|
230
|
+
*/
|
|
231
|
+
getStats(): {
|
|
232
|
+
total: number;
|
|
233
|
+
nextId: number;
|
|
234
|
+
names: string[];
|
|
235
|
+
} {
|
|
236
|
+
return {
|
|
237
|
+
total: this.bookmarks.size,
|
|
238
|
+
nextId: this.nextId,
|
|
239
|
+
names: Array.from(this.bookmarks.keys()),
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Creates a new BookmarkManager
|
|
245
|
+
* @returns New BookmarkManager instance
|
|
246
|
+
*/
|
|
247
|
+
static create(): BookmarkManager {
|
|
248
|
+
return new BookmarkManager();
|
|
249
|
+
}
|
|
250
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Elements Module
|
|
2
|
+
|
|
3
|
+
`src/elements/` — All document element classes (40 TypeScript files).
|
|
4
|
+
|
|
5
|
+
## Element Hierarchy
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
Body Elements (added to document body)
|
|
9
|
+
├── Paragraph
|
|
10
|
+
├── Table
|
|
11
|
+
├── TableOfContents / TableOfContentsElement
|
|
12
|
+
├── StructuredDocumentTag
|
|
13
|
+
├── AlternateContent # mc:AlternateContent raw XML passthrough
|
|
14
|
+
├── MathParagraph # m:oMathPara raw XML passthrough
|
|
15
|
+
├── CustomXmlBlock # w:customXml raw XML passthrough
|
|
16
|
+
└── PreservedElement # Generic XML passthrough (block context)
|
|
17
|
+
|
|
18
|
+
Inline Elements (within paragraphs)
|
|
19
|
+
├── Run (formatted text span)
|
|
20
|
+
├── ImageRun (inline image)
|
|
21
|
+
├── Hyperlink
|
|
22
|
+
├── Bookmark / RangeMarker
|
|
23
|
+
├── Field
|
|
24
|
+
├── Comment (anchor)
|
|
25
|
+
├── Footnote/Endnote (reference)
|
|
26
|
+
├── StructuredDocumentTag (inline)
|
|
27
|
+
├── MathExpression # m:oMath inline raw XML passthrough
|
|
28
|
+
└── PreservedElement (inline)
|
|
29
|
+
|
|
30
|
+
Header/Footer Elements
|
|
31
|
+
├── Header / Footer
|
|
32
|
+
└── Section (page setup, header/footer references)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Core Elements
|
|
36
|
+
|
|
37
|
+
### Paragraph (`Paragraph.ts`)
|
|
38
|
+
|
|
39
|
+
Container for text and inline content. Key formatting: `alignment`, `spacing`, `indentation`, `pPrChange` (revision tracking), `keepNext`/`keepLines`/`pageBreakBefore` (pagination).
|
|
40
|
+
|
|
41
|
+
**Rule:** `setKeepNext(true)` / `setKeepLines(true)` auto-clears `pageBreakBefore`.
|
|
42
|
+
|
|
43
|
+
CJK methods: `setKinsoku()`, `setWordWrap()`, `setOverflowPunct()`, `setTopLinePunct()`, `setAutoSpaceDE()`, `setAutoSpaceDN()`.
|
|
44
|
+
|
|
45
|
+
### Run (`Run.ts`)
|
|
46
|
+
|
|
47
|
+
Formatted text span. Character formatting (bold, italic, underline, strikethrough), font properties, color (normalized to uppercase 6-char hex), highlight, special chars (tabs, breaks, symbols), complex script support.
|
|
48
|
+
|
|
49
|
+
Theme fonts: `setFontAsciiTheme()`, `setFontHAnsiTheme()`, `setFontEastAsiaTheme()`, `setFontCsTheme()`.
|
|
50
|
+
Underline: `setUnderlineColor()`, `setUnderlineThemeColor()`.
|
|
51
|
+
w14 effects: `addRawW14Property(xml)` for Word 2010+ ligatures, numForm, textOutline.
|
|
52
|
+
Form fields: `FormFieldData`, `FormFieldTextInput`, `FormFieldCheckBox`, `FormFieldDropDownList` interfaces.
|
|
53
|
+
|
|
54
|
+
### Table (`Table.ts`, `TableRow.ts`, `TableCell.ts`)
|
|
55
|
+
|
|
56
|
+
Row/column management, cell merging (horizontal + vertical), border styling, property change tracking (`w:tblPrChange`), inter-row content preservation (bookmarks, comments between rows).
|
|
57
|
+
|
|
58
|
+
Navigation: `getFirstParagraph()`, `getLastParagraph()`.
|
|
59
|
+
Layout: `getLayout()` returns `'fixed'` or `'auto'`.
|
|
60
|
+
Legacy merge: `setHorizontalMerge()` / `getHorizontalMerge()` (hMerge).
|
|
61
|
+
|
|
62
|
+
**Nested Tables:** Raw XML passthrough via `TableCell.rawNestedContent[]`.
|
|
63
|
+
```typescript
|
|
64
|
+
cell.addRawNestedContent(position, xml, "table")
|
|
65
|
+
cell.getRawNestedContent()
|
|
66
|
+
cell.hasNestedTables()
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Inter-Row Content:** Per ECMA-376, elements like bookmarkEnd can appear between rows.
|
|
70
|
+
```typescript
|
|
71
|
+
table.addInterRowContent(afterRowIndex, xml, type)
|
|
72
|
+
table.getInterRowContent()
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Image (`Image.ts`, `ImageRun.ts`)
|
|
76
|
+
|
|
77
|
+
PNG/JPEG/GIF/SVG/EMF/WMF with buffer-based format detection. Inline and floating positioning. Full ECMA-376 attribute coverage: presetGeometry, compressionState, bwMode, picLocks, inline dist, transparency (`a:alphaModFix`), enhanced border model (`ImageBorder`), 9 raw XML passthrough slots, linked images (`r:link`), SVG dual-relationship (`asvg:svgBlip`).
|
|
78
|
+
|
|
79
|
+
## Revision System
|
|
80
|
+
|
|
81
|
+
### Revision (`Revision.ts`)
|
|
82
|
+
|
|
83
|
+
Types: `insert`, `delete`, `moveFrom`, `moveTo`, `runPropertiesChange`, `paragraphPropertiesChange`, `tablePropertiesChange`, `tableCellInsert`, `tableCellDelete`, `tableCellMerge`, `numberingChange`, `sectionPropertiesChange`.
|
|
84
|
+
|
|
85
|
+
### RevisionManager (`RevisionManager.ts`)
|
|
86
|
+
|
|
87
|
+
Registration, retrieval, category/author/date filtering, location-aware queries, statistics, validation (duplicate IDs, orphaned moves).
|
|
88
|
+
|
|
89
|
+
### MoveOperationHelper (`../utils/MoveOperationHelper.ts`)
|
|
90
|
+
|
|
91
|
+
Creates complete move operations with all required ECMA-376 range markers (`moveFromRangeStart/End`, `moveToRangeStart/End`). Without range markers, Word displays moves as separate delete+insert pairs.
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
MoveOperationHelper.addMoveOperation(sourcePara, destPara, {
|
|
95
|
+
author: 'John Doe',
|
|
96
|
+
content: new Run('moved text'),
|
|
97
|
+
});
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Other Elements
|
|
101
|
+
|
|
102
|
+
- **Hyperlink**: Internal/external URLs, tooltip, relationship management
|
|
103
|
+
- **Bookmark / BookmarkManager**: Named locations, cross-references, unique ID assignment
|
|
104
|
+
- **Field / FieldHelpers**: MERGEFIELD, DATE, TIME, PAGE, NUMPAGES, TOC, REF
|
|
105
|
+
- **Comment / CommentManager**: Author/date, reply threading, anchor positioning
|
|
106
|
+
- **Header / Footer / HeaderFooterManager**: Default, first page, even pages
|
|
107
|
+
- **Section**: Page size, margins, orientation, columns, page numbering
|
|
108
|
+
- **Footnote / Endnote / FootnoteManager / EndnoteManager**: Note content, numbering, separators
|
|
109
|
+
- **StructuredDocumentTag**: Rich/plain text, date pickers, dropdowns, checkboxes
|
|
110
|
+
- **Shape / TextBox**: Basic shapes, text boxes with content
|
|
111
|
+
- **FontManager**: Font table and declarations
|
|
112
|
+
- **ImageManager**: Image collection with relationship handling
|
|
113
|
+
|
|
114
|
+
## Preserved Element Classes
|
|
115
|
+
|
|
116
|
+
Store elements as raw XML for round-trip fidelity (internal structure not modified by framework):
|
|
117
|
+
- **AlternateContent**: `mc:AlternateContent` — Word 2010+ drawing with VML fallback
|
|
118
|
+
- **MathParagraph / MathExpression**: `m:oMathPara` / `m:oMath` — math content
|
|
119
|
+
- **CustomXmlBlock**: `w:customXml` — embedded custom XML
|
|
120
|
+
- **PreservedElement**: Generic wrapper for `w:proofErr`, `w:permStart`, `w:permEnd`, `w:altChunk`, `w:ruby`
|
|
121
|
+
|
|
122
|
+
All share the same API pattern: `constructor(rawXml)`, `toXML()`, `getRawXml()`, `getType()`.
|
|
123
|
+
|
|
124
|
+
## Serialization
|
|
125
|
+
|
|
126
|
+
Every element has `toXML()` returning `XMLElement { name, attributes, children }`. Elements don't hold references to their parent document.
|