docxmlater 10.0.2 → 10.0.4
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 +23 -19
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +197 -63
- 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 +86 -55
- 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 +8 -0
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +153 -118
- 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.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.d.ts.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.js +23 -2
- 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.d.ts +1 -0
- package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.js +46 -0
- 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 +10140 -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 +4287 -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 +696 -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 +683 -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,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Endnote - Represents an endnote in a Word document
|
|
3
|
+
*
|
|
4
|
+
* Endnotes appear at the end of the document or section and are referenced
|
|
5
|
+
* within the document text via endnote references.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { Paragraph } from './Paragraph';
|
|
9
|
+
import { XMLBuilder, XMLElement } from '../xml/XMLBuilder';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Endnote type
|
|
13
|
+
*/
|
|
14
|
+
export enum EndnoteType {
|
|
15
|
+
/** Normal endnote */
|
|
16
|
+
Normal = 'normal',
|
|
17
|
+
/** Separator between document text and endnotes */
|
|
18
|
+
Separator = 'separator',
|
|
19
|
+
/** Continuation separator for endnotes that continue to next page */
|
|
20
|
+
ContinuationSeparator = 'continuationSeparator',
|
|
21
|
+
/** Continuation notice at bottom of page when endnotes continue */
|
|
22
|
+
ContinuationNotice = 'continuationNotice',
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Endnote properties
|
|
27
|
+
*/
|
|
28
|
+
export interface EndnoteProperties {
|
|
29
|
+
/** Endnote ID (required, must be unique) */
|
|
30
|
+
id: number;
|
|
31
|
+
/** Type of endnote */
|
|
32
|
+
type?: EndnoteType;
|
|
33
|
+
/** Custom mark/symbol (optional, otherwise uses numbering) */
|
|
34
|
+
customMark?: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Represents an endnote in a document
|
|
39
|
+
*/
|
|
40
|
+
export class Endnote {
|
|
41
|
+
private id: number;
|
|
42
|
+
private type: EndnoteType;
|
|
43
|
+
private customMark?: string;
|
|
44
|
+
private paragraphs: Paragraph[] = [];
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Creates a new endnote
|
|
48
|
+
* @param properties Endnote properties
|
|
49
|
+
*/
|
|
50
|
+
constructor(properties: EndnoteProperties) {
|
|
51
|
+
this.id = properties.id;
|
|
52
|
+
this.type = properties.type || EndnoteType.Normal;
|
|
53
|
+
this.customMark = properties.customMark;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Gets the endnote ID
|
|
58
|
+
*/
|
|
59
|
+
getId(): number {
|
|
60
|
+
return this.id;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Gets the endnote type
|
|
65
|
+
*/
|
|
66
|
+
getType(): EndnoteType {
|
|
67
|
+
return this.type;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Gets the custom mark
|
|
72
|
+
*/
|
|
73
|
+
getCustomMark(): string | undefined {
|
|
74
|
+
return this.customMark;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Sets the custom mark
|
|
79
|
+
* @param mark Custom mark/symbol
|
|
80
|
+
*/
|
|
81
|
+
setCustomMark(mark: string): this {
|
|
82
|
+
this.customMark = mark;
|
|
83
|
+
return this;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Adds a paragraph to the endnote
|
|
88
|
+
* @param paragraph Paragraph to add
|
|
89
|
+
*/
|
|
90
|
+
addParagraph(paragraph: Paragraph): this {
|
|
91
|
+
this.paragraphs.push(paragraph);
|
|
92
|
+
return this;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Creates and adds a new paragraph
|
|
97
|
+
* @param text Optional text content
|
|
98
|
+
* @returns The created paragraph
|
|
99
|
+
*/
|
|
100
|
+
createParagraph(text?: string): Paragraph {
|
|
101
|
+
const para = new Paragraph();
|
|
102
|
+
if (text) {
|
|
103
|
+
para.addText(text);
|
|
104
|
+
}
|
|
105
|
+
this.paragraphs.push(para);
|
|
106
|
+
return para;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Gets all paragraphs in the endnote
|
|
111
|
+
*/
|
|
112
|
+
getParagraphs(): Paragraph[] {
|
|
113
|
+
return [...this.paragraphs];
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Gets the text content of the endnote
|
|
118
|
+
*/
|
|
119
|
+
getText(): string {
|
|
120
|
+
return this.paragraphs.map(p => p.getText()).join('\n');
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Generates the XML for this endnote
|
|
125
|
+
*/
|
|
126
|
+
toXML(): XMLElement {
|
|
127
|
+
const attrs: Record<string, any> = {
|
|
128
|
+
'w:id': this.id.toString(),
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
if (this.type !== EndnoteType.Normal) {
|
|
132
|
+
attrs['w:type'] = this.type;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const children: XMLElement[] = [];
|
|
136
|
+
|
|
137
|
+
// Separator types require specific child elements per ECMA-376
|
|
138
|
+
if (this.type === EndnoteType.Separator) {
|
|
139
|
+
// <w:p><w:r><w:separator/></w:r></w:p>
|
|
140
|
+
children.push(XMLBuilder.w('p', undefined, [
|
|
141
|
+
XMLBuilder.w('r', undefined, [XMLBuilder.wSelf('separator')])
|
|
142
|
+
]));
|
|
143
|
+
} else if (this.type === EndnoteType.ContinuationSeparator) {
|
|
144
|
+
// <w:p><w:r><w:continuationSeparator/></w:r></w:p>
|
|
145
|
+
children.push(XMLBuilder.w('p', undefined, [
|
|
146
|
+
XMLBuilder.w('r', undefined, [XMLBuilder.wSelf('continuationSeparator')])
|
|
147
|
+
]));
|
|
148
|
+
} else {
|
|
149
|
+
// Add paragraphs
|
|
150
|
+
for (const para of this.paragraphs) {
|
|
151
|
+
children.push(para.toXML());
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// If no paragraphs, add an empty one (required)
|
|
155
|
+
if (children.length === 0) {
|
|
156
|
+
children.push(XMLBuilder.w('p'));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return XMLBuilder.w('endnote', attrs, children);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Creates an endnote from text
|
|
165
|
+
* @param id Endnote ID
|
|
166
|
+
* @param text Text content
|
|
167
|
+
* @returns New endnote instance
|
|
168
|
+
*/
|
|
169
|
+
static fromText(id: number, text: string): Endnote {
|
|
170
|
+
const endnote = new Endnote({ id });
|
|
171
|
+
endnote.createParagraph(text);
|
|
172
|
+
return endnote;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Creates a separator endnote
|
|
177
|
+
* @param id Endnote ID
|
|
178
|
+
* @returns New separator endnote
|
|
179
|
+
*/
|
|
180
|
+
static createSeparator(id: number): Endnote {
|
|
181
|
+
const endnote = new Endnote({
|
|
182
|
+
id,
|
|
183
|
+
type: EndnoteType.Separator
|
|
184
|
+
});
|
|
185
|
+
// Separator typically has a horizontal line
|
|
186
|
+
endnote.createParagraph();
|
|
187
|
+
// Add separator formatting if needed
|
|
188
|
+
return endnote;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Creates a continuation separator endnote
|
|
193
|
+
* @param id Endnote ID
|
|
194
|
+
* @returns New continuation separator endnote
|
|
195
|
+
*/
|
|
196
|
+
static createContinuationSeparator(id: number): Endnote {
|
|
197
|
+
return new Endnote({
|
|
198
|
+
id,
|
|
199
|
+
type: EndnoteType.ContinuationSeparator
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Creates a continuation notice endnote
|
|
205
|
+
* @param id Endnote ID
|
|
206
|
+
* @param text Notice text (e.g., "Continued on next page...")
|
|
207
|
+
* @returns New continuation notice endnote
|
|
208
|
+
*/
|
|
209
|
+
static createContinuationNotice(id: number, text = 'Continued...'): Endnote {
|
|
210
|
+
const endnote = new Endnote({
|
|
211
|
+
id,
|
|
212
|
+
type: EndnoteType.ContinuationNotice
|
|
213
|
+
});
|
|
214
|
+
endnote.createParagraph(text);
|
|
215
|
+
return endnote;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EndnoteManager - Manages endnotes in a document
|
|
3
|
+
*
|
|
4
|
+
* Handles creation, registration, and XML generation for endnotes.
|
|
5
|
+
* Maintains unique IDs and proper ordering.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { Endnote, EndnoteType } from './Endnote';
|
|
9
|
+
import { XMLBuilder, XMLElement } from '../xml/XMLBuilder';
|
|
10
|
+
import { XMLParser } from '../xml/XMLParser';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Manages endnotes in a document
|
|
14
|
+
*/
|
|
15
|
+
export class EndnoteManager {
|
|
16
|
+
private endnotes = new Map<number, Endnote>();
|
|
17
|
+
private nextId = 1;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Creates a new EndnoteManager
|
|
21
|
+
* @private Use static factory method
|
|
22
|
+
*/
|
|
23
|
+
private constructor() {
|
|
24
|
+
// Add special endnotes (separators) with negative IDs
|
|
25
|
+
this.addSpecialEndnotes();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Adds special endnotes (separator, continuation)
|
|
30
|
+
* These use negative IDs as per OOXML specification
|
|
31
|
+
*/
|
|
32
|
+
private addSpecialEndnotes(): void {
|
|
33
|
+
// Separator endnote (ID -1)
|
|
34
|
+
const separator = Endnote.createSeparator(-1);
|
|
35
|
+
this.endnotes.set(-1, separator);
|
|
36
|
+
|
|
37
|
+
// Continuation separator (ID 0)
|
|
38
|
+
const continuationSep = Endnote.createContinuationSeparator(0);
|
|
39
|
+
this.endnotes.set(0, continuationSep);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Checks if an endnote is a special/system type (separator, continuationSeparator,
|
|
44
|
+
* continuationNotice) that should be preserved across clear() operations.
|
|
45
|
+
* Uses type-based detection rather than ID-based, because continuationNotice
|
|
46
|
+
* has a positive ID (typically 1) but is still a system endnote.
|
|
47
|
+
*/
|
|
48
|
+
private isSpecialEndnote(endnote: Endnote): boolean {
|
|
49
|
+
const type = endnote.getType();
|
|
50
|
+
return type === EndnoteType.Separator ||
|
|
51
|
+
type === EndnoteType.ContinuationSeparator ||
|
|
52
|
+
type === EndnoteType.ContinuationNotice;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Creates a new EndnoteManager instance
|
|
57
|
+
*/
|
|
58
|
+
static create(): EndnoteManager {
|
|
59
|
+
return new EndnoteManager();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Registers an endnote
|
|
64
|
+
* @param endnote Endnote to register
|
|
65
|
+
* @returns The registered endnote
|
|
66
|
+
*/
|
|
67
|
+
register(endnote: Endnote): Endnote {
|
|
68
|
+
const id = endnote.getId();
|
|
69
|
+
|
|
70
|
+
// Ensure ID is not already used (except for special endnotes)
|
|
71
|
+
if (id > 0 && this.endnotes.has(id)) {
|
|
72
|
+
throw new Error(`Endnote with ID ${id} already exists`);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
this.endnotes.set(id, endnote);
|
|
76
|
+
|
|
77
|
+
// Update next ID if needed
|
|
78
|
+
if (id >= this.nextId) {
|
|
79
|
+
this.nextId = id + 1;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return endnote;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Creates and registers a new endnote
|
|
87
|
+
* @param text Endnote text
|
|
88
|
+
* @returns The created endnote
|
|
89
|
+
*/
|
|
90
|
+
createEndnote(text: string): Endnote {
|
|
91
|
+
const endnote = Endnote.fromText(this.nextId++, text);
|
|
92
|
+
this.endnotes.set(endnote.getId(), endnote);
|
|
93
|
+
return endnote;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Gets an endnote by ID
|
|
98
|
+
* @param id Endnote ID
|
|
99
|
+
* @returns The endnote, or undefined if not found
|
|
100
|
+
*/
|
|
101
|
+
getEndnote(id: number): Endnote | undefined {
|
|
102
|
+
return this.endnotes.get(id);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Gets all user endnotes (excluding special system types: separator,
|
|
107
|
+
* continuationSeparator, continuationNotice)
|
|
108
|
+
*/
|
|
109
|
+
getAllEndnotes(): Endnote[] {
|
|
110
|
+
return Array.from(this.endnotes.values())
|
|
111
|
+
.filter(e => !this.isSpecialEndnote(e))
|
|
112
|
+
.sort((a, b) => a.getId() - b.getId());
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Gets all endnotes including special ones
|
|
117
|
+
*/
|
|
118
|
+
getAllEndnotesWithSpecial(): Endnote[] {
|
|
119
|
+
return Array.from(this.endnotes.values())
|
|
120
|
+
.sort((a, b) => a.getId() - b.getId());
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Checks if an endnote exists
|
|
125
|
+
* @param id Endnote ID
|
|
126
|
+
*/
|
|
127
|
+
hasEndnote(id: number): boolean {
|
|
128
|
+
return this.endnotes.has(id);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Removes an endnote
|
|
133
|
+
* @param id Endnote ID
|
|
134
|
+
* @returns True if removed, false if not found or if it's a special type
|
|
135
|
+
*/
|
|
136
|
+
removeEndnote(id: number): boolean {
|
|
137
|
+
const endnote = this.endnotes.get(id);
|
|
138
|
+
if (!endnote || this.isSpecialEndnote(endnote)) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
return this.endnotes.delete(id);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Gets the next available ID
|
|
146
|
+
*/
|
|
147
|
+
getNextId(): number {
|
|
148
|
+
return this.nextId;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Gets the count of endnotes (excluding special ones)
|
|
153
|
+
*/
|
|
154
|
+
getCount(): number {
|
|
155
|
+
return this.getAllEndnotes().length;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Checks if there are any endnotes (excluding special ones)
|
|
160
|
+
*/
|
|
161
|
+
isEmpty(): boolean {
|
|
162
|
+
return this.getCount() === 0;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Clears all user endnotes (preserves special system types: separator,
|
|
167
|
+
* continuationSeparator, continuationNotice)
|
|
168
|
+
*/
|
|
169
|
+
clear(): void {
|
|
170
|
+
const specialEndnotes = new Map<number, Endnote>();
|
|
171
|
+
let maxSpecialId = 0;
|
|
172
|
+
|
|
173
|
+
for (const [id, endnote] of this.endnotes) {
|
|
174
|
+
if (this.isSpecialEndnote(endnote)) {
|
|
175
|
+
specialEndnotes.set(id, endnote);
|
|
176
|
+
if (id > maxSpecialId) {
|
|
177
|
+
maxSpecialId = id;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
this.endnotes = specialEndnotes;
|
|
183
|
+
// Ensure nextId doesn't collide with special endnotes that have positive IDs
|
|
184
|
+
this.nextId = Math.max(maxSpecialId + 1, 1);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Gets statistics about endnotes
|
|
189
|
+
*/
|
|
190
|
+
getStats(): {
|
|
191
|
+
total: number;
|
|
192
|
+
nextId: number;
|
|
193
|
+
} {
|
|
194
|
+
return {
|
|
195
|
+
total: this.getCount(),
|
|
196
|
+
nextId: this.nextId,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Generates the endnotes.xml content
|
|
202
|
+
*/
|
|
203
|
+
generateEndnotesXml(): string {
|
|
204
|
+
const endnotes = this.getAllEndnotesWithSpecial();
|
|
205
|
+
|
|
206
|
+
// Build endnotes element
|
|
207
|
+
const endnotesElement: XMLElement = {
|
|
208
|
+
name: 'w:endnotes',
|
|
209
|
+
attributes: {
|
|
210
|
+
'xmlns:w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main',
|
|
211
|
+
'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'
|
|
212
|
+
},
|
|
213
|
+
children: endnotes.map(e => e.toXML())
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
// Build XML using XMLBuilder
|
|
217
|
+
const builder = new XMLBuilder();
|
|
218
|
+
builder.element(
|
|
219
|
+
endnotesElement.name,
|
|
220
|
+
endnotesElement.attributes,
|
|
221
|
+
endnotesElement.children
|
|
222
|
+
);
|
|
223
|
+
return builder.build(true);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Validates endnotes XML
|
|
228
|
+
* @param xml XML string to validate
|
|
229
|
+
* @returns True if valid
|
|
230
|
+
*/
|
|
231
|
+
static validate(xml: string): boolean {
|
|
232
|
+
// Use XMLParser to extract root element
|
|
233
|
+
if (!xml) {
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
const endnotesContent = XMLParser.extractBetweenTags(xml, '<w:endnotes', '</w:endnotes>');
|
|
238
|
+
if (!endnotesContent) {
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// Check for proper structure - namespace declaration
|
|
243
|
+
if (!xml.includes('xmlns:w=')) {
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return true;
|
|
248
|
+
}
|
|
249
|
+
}
|