docxmlater 10.4.0 → 11.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 -3
- package/dist/constants/legacyCompatFlags.d.ts +1 -1
- package/dist/constants/legacyCompatFlags.d.ts.map +1 -1
- package/dist/constants/legacyCompatFlags.js.map +1 -1
- package/dist/core/Document.d.ts +75 -67
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +618 -414
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentContent.d.ts +11 -10
- package/dist/core/DocumentContent.d.ts.map +1 -1
- package/dist/core/DocumentContent.js +19 -19
- package/dist/core/DocumentContent.js.map +1 -1
- package/dist/core/DocumentEvents.d.ts +39 -0
- package/dist/core/DocumentEvents.d.ts.map +1 -0
- package/dist/core/DocumentEvents.js +51 -0
- package/dist/core/DocumentEvents.js.map +1 -0
- package/dist/core/DocumentGenerator.d.ts +11 -11
- package/dist/core/DocumentGenerator.d.ts.map +1 -1
- package/dist/core/DocumentGenerator.js +72 -52
- package/dist/core/DocumentGenerator.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 +2100 -1076
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/core/DocumentValidator.d.ts +3 -3
- package/dist/core/DocumentValidator.d.ts.map +1 -1
- package/dist/core/DocumentValidator.js +31 -31
- package/dist/core/DocumentValidator.js.map +1 -1
- package/dist/core/ElementRegistry.d.ts +22 -0
- package/dist/core/ElementRegistry.d.ts.map +1 -0
- package/dist/core/ElementRegistry.js +27 -0
- package/dist/core/ElementRegistry.js.map +1 -0
- package/dist/core/Relationship.js +4 -4
- package/dist/core/Relationship.js.map +1 -1
- package/dist/core/RelationshipManager.d.ts +1 -1
- package/dist/core/RelationshipManager.d.ts.map +1 -1
- package/dist/core/RelationshipManager.js +32 -32
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/elements/AlternateContent.d.ts +1 -1
- package/dist/elements/AlternateContent.d.ts.map +1 -1
- package/dist/elements/AlternateContent.js.map +1 -1
- package/dist/elements/Bookmark.d.ts +6 -1
- package/dist/elements/Bookmark.d.ts.map +1 -1
- package/dist/elements/Bookmark.js +19 -3
- package/dist/elements/Bookmark.js.map +1 -1
- package/dist/elements/BookmarkManager.d.ts +1 -1
- package/dist/elements/BookmarkManager.d.ts.map +1 -1
- package/dist/elements/BookmarkManager.js +7 -7
- package/dist/elements/BookmarkManager.js.map +1 -1
- package/dist/elements/Comment.d.ts +2 -2
- package/dist/elements/Comment.d.ts.map +1 -1
- package/dist/elements/Comment.js +4 -4
- package/dist/elements/Comment.js.map +1 -1
- package/dist/elements/CommentManager.d.ts +2 -2
- package/dist/elements/CommentManager.d.ts.map +1 -1
- package/dist/elements/CommentManager.js +9 -9
- package/dist/elements/CommentManager.js.map +1 -1
- package/dist/elements/CommonTypes.d.ts +9 -4
- package/dist/elements/CommonTypes.d.ts.map +1 -1
- package/dist/elements/CommonTypes.js +1 -0
- package/dist/elements/CommonTypes.js.map +1 -1
- package/dist/elements/CustomXml.d.ts +1 -1
- package/dist/elements/CustomXml.d.ts.map +1 -1
- package/dist/elements/CustomXml.js.map +1 -1
- package/dist/elements/Endnote.d.ts +2 -2
- package/dist/elements/Endnote.d.ts.map +1 -1
- package/dist/elements/Endnote.js +9 -9
- package/dist/elements/Endnote.js.map +1 -1
- package/dist/elements/EndnoteManager.d.ts +1 -1
- package/dist/elements/EndnoteManager.d.ts.map +1 -1
- package/dist/elements/EndnoteManager.js +11 -11
- package/dist/elements/EndnoteManager.js.map +1 -1
- package/dist/elements/Field.d.ts +9 -5
- package/dist/elements/Field.d.ts.map +1 -1
- package/dist/elements/Field.js +21 -9
- package/dist/elements/Field.js.map +1 -1
- package/dist/elements/FieldHelpers.d.ts +1 -1
- package/dist/elements/FieldHelpers.d.ts.map +1 -1
- package/dist/elements/FieldHelpers.js +10 -10
- package/dist/elements/FieldHelpers.js.map +1 -1
- package/dist/elements/Footer.d.ts +3 -3
- package/dist/elements/Footer.d.ts.map +1 -1
- package/dist/elements/Footer.js +5 -5
- package/dist/elements/Footer.js.map +1 -1
- package/dist/elements/Footnote.d.ts +2 -2
- package/dist/elements/Footnote.d.ts.map +1 -1
- package/dist/elements/Footnote.js +9 -9
- package/dist/elements/Footnote.js.map +1 -1
- package/dist/elements/FootnoteManager.d.ts +1 -1
- package/dist/elements/FootnoteManager.d.ts.map +1 -1
- package/dist/elements/FootnoteManager.js +11 -11
- package/dist/elements/FootnoteManager.js.map +1 -1
- package/dist/elements/Header.d.ts +3 -3
- package/dist/elements/Header.d.ts.map +1 -1
- package/dist/elements/Header.js +5 -5
- package/dist/elements/Header.js.map +1 -1
- package/dist/elements/HeaderFooterManager.d.ts +2 -2
- package/dist/elements/HeaderFooterManager.d.ts.map +1 -1
- package/dist/elements/HeaderFooterManager.js.map +1 -1
- package/dist/elements/Hyperlink.d.ts +5 -5
- package/dist/elements/Hyperlink.d.ts.map +1 -1
- package/dist/elements/Hyperlink.js +29 -29
- package/dist/elements/Hyperlink.js.map +1 -1
- package/dist/elements/Image.d.ts +1 -1
- package/dist/elements/Image.d.ts.map +1 -1
- package/dist/elements/Image.js +67 -67
- package/dist/elements/Image.js.map +1 -1
- package/dist/elements/ImageManager.d.ts +1 -1
- package/dist/elements/ImageManager.d.ts.map +1 -1
- package/dist/elements/ImageManager.js +4 -4
- package/dist/elements/ImageManager.js.map +1 -1
- package/dist/elements/ImageRun.d.ts +3 -3
- package/dist/elements/ImageRun.d.ts.map +1 -1
- package/dist/elements/ImageRun.js +2 -2
- package/dist/elements/ImageRun.js.map +1 -1
- package/dist/elements/MathElement.d.ts +1 -1
- package/dist/elements/MathElement.d.ts.map +1 -1
- package/dist/elements/MathElement.js.map +1 -1
- package/dist/elements/Paragraph.d.ts +34 -19
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +286 -231
- package/dist/elements/Paragraph.js.map +1 -1
- package/dist/elements/PreservedElement.d.ts +1 -1
- package/dist/elements/PreservedElement.d.ts.map +1 -1
- package/dist/elements/PreservedElement.js.map +1 -1
- package/dist/elements/PropertyChangeTypes.d.ts +2 -2
- package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
- package/dist/elements/PropertyChangeTypes.js.map +1 -1
- package/dist/elements/RangeMarker.d.ts +14 -1
- package/dist/elements/RangeMarker.d.ts.map +1 -1
- package/dist/elements/RangeMarker.js +46 -8
- package/dist/elements/RangeMarker.js.map +1 -1
- package/dist/elements/RegisteredBodyElement.d.ts +15 -0
- package/dist/elements/RegisteredBodyElement.d.ts.map +1 -0
- package/dist/elements/RegisteredBodyElement.js +44 -0
- package/dist/elements/RegisteredBodyElement.js.map +1 -0
- package/dist/elements/Revision.d.ts +8 -8
- package/dist/elements/Revision.d.ts.map +1 -1
- package/dist/elements/Revision.js +12 -12
- package/dist/elements/Revision.js.map +1 -1
- package/dist/elements/RevisionContent.d.ts +3 -3
- package/dist/elements/RevisionContent.d.ts.map +1 -1
- package/dist/elements/RevisionContent.js.map +1 -1
- package/dist/elements/RevisionManager.d.ts +2 -2
- package/dist/elements/RevisionManager.d.ts.map +1 -1
- package/dist/elements/RevisionManager.js +2 -2
- package/dist/elements/RevisionManager.js.map +1 -1
- package/dist/elements/Run.d.ts +16 -10
- package/dist/elements/Run.d.ts.map +1 -1
- package/dist/elements/Run.js +199 -173
- package/dist/elements/Run.js.map +1 -1
- package/dist/elements/Section.d.ts +4 -2
- package/dist/elements/Section.d.ts.map +1 -1
- package/dist/elements/Section.js +152 -145
- package/dist/elements/Section.js.map +1 -1
- package/dist/elements/Shape.d.ts +3 -3
- package/dist/elements/Shape.d.ts.map +1 -1
- package/dist/elements/Shape.js +12 -12
- package/dist/elements/Shape.js.map +1 -1
- package/dist/elements/StructuredDocumentTag.d.ts +3 -3
- package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
- package/dist/elements/StructuredDocumentTag.js +39 -39
- package/dist/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/elements/Table.d.ts +16 -10
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +118 -89
- package/dist/elements/Table.js.map +1 -1
- package/dist/elements/TableCell.d.ts +11 -11
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +108 -78
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/elements/TableGridChange.d.ts +1 -1
- package/dist/elements/TableGridChange.d.ts.map +1 -1
- package/dist/elements/TableGridChange.js +3 -3
- package/dist/elements/TableGridChange.js.map +1 -1
- package/dist/elements/TableOfContents.d.ts +1 -1
- package/dist/elements/TableOfContents.d.ts.map +1 -1
- package/dist/elements/TableOfContents.js +2 -2
- package/dist/elements/TableOfContents.js.map +1 -1
- package/dist/elements/TableOfContentsElement.d.ts +2 -2
- package/dist/elements/TableOfContentsElement.d.ts.map +1 -1
- package/dist/elements/TableOfContentsElement.js +5 -5
- package/dist/elements/TableOfContentsElement.js.map +1 -1
- package/dist/elements/TableRow.d.ts +18 -7
- package/dist/elements/TableRow.d.ts.map +1 -1
- package/dist/elements/TableRow.js +127 -74
- package/dist/elements/TableRow.js.map +1 -1
- package/dist/elements/TextBox.d.ts +4 -4
- package/dist/elements/TextBox.d.ts.map +1 -1
- package/dist/elements/TextBox.js +6 -6
- package/dist/elements/TextBox.js.map +1 -1
- package/dist/esm/constants/legacyCompatFlags.js +97 -0
- package/dist/esm/constants/legacyCompatFlags.js.map +1 -0
- package/dist/esm/constants/limits.js +36 -0
- package/dist/esm/constants/limits.js.map +1 -0
- package/dist/esm/core/Document.js +8498 -0
- package/dist/esm/core/Document.js.map +1 -0
- package/dist/esm/core/DocumentContent.js +190 -0
- package/dist/esm/core/DocumentContent.js.map +1 -0
- package/dist/esm/core/DocumentEvents.js +47 -0
- package/dist/esm/core/DocumentEvents.js.map +1 -0
- package/dist/esm/core/DocumentGenerator.js +764 -0
- package/dist/esm/core/DocumentGenerator.js.map +1 -0
- package/dist/esm/core/DocumentIdManager.js +67 -0
- package/dist/esm/core/DocumentIdManager.js.map +1 -0
- package/dist/esm/core/DocumentParser.js +8760 -0
- package/dist/esm/core/DocumentParser.js.map +1 -0
- package/dist/esm/core/DocumentValidator.js +222 -0
- package/dist/esm/core/DocumentValidator.js.map +1 -0
- package/dist/esm/core/ElementRegistry.js +24 -0
- package/dist/esm/core/ElementRegistry.js.map +1 -0
- package/dist/esm/core/Relationship.js +177 -0
- package/dist/esm/core/Relationship.js.map +1 -0
- package/dist/esm/core/RelationshipManager.js +202 -0
- package/dist/esm/core/RelationshipManager.js.map +1 -0
- package/dist/esm/elements/AlternateContent.js +19 -0
- package/dist/esm/elements/AlternateContent.js.map +1 -0
- package/dist/esm/elements/Bookmark.js +115 -0
- package/dist/esm/elements/Bookmark.js.map +1 -0
- package/dist/esm/elements/BookmarkManager.js +99 -0
- package/dist/esm/elements/BookmarkManager.js.map +1 -0
- package/dist/esm/elements/Comment.js +181 -0
- package/dist/esm/elements/Comment.js.map +1 -0
- package/dist/esm/elements/CommentManager.js +233 -0
- package/dist/esm/elements/CommentManager.js.map +1 -0
- package/dist/esm/elements/CommonTypes.js +106 -0
- package/dist/esm/elements/CommonTypes.js.map +1 -0
- package/dist/esm/elements/CustomXml.js +19 -0
- package/dist/esm/elements/CustomXml.js.map +1 -0
- package/dist/esm/elements/Endnote.js +107 -0
- package/dist/esm/elements/Endnote.js.map +1 -0
- package/dist/esm/elements/EndnoteManager.js +119 -0
- package/dist/esm/elements/EndnoteManager.js.map +1 -0
- package/dist/esm/elements/Field.js +856 -0
- package/dist/esm/elements/Field.js.map +1 -0
- package/dist/esm/elements/FieldHelpers.js +134 -0
- package/dist/esm/elements/FieldHelpers.js.map +1 -0
- package/dist/esm/elements/FontManager.js +158 -0
- package/dist/esm/elements/FontManager.js.map +1 -0
- package/dist/esm/elements/Footer.js +141 -0
- package/dist/esm/elements/Footer.js.map +1 -0
- package/dist/esm/elements/Footnote.js +107 -0
- package/dist/esm/elements/Footnote.js.map +1 -0
- package/dist/esm/elements/FootnoteManager.js +119 -0
- package/dist/esm/elements/FootnoteManager.js.map +1 -0
- package/dist/esm/elements/Header.js +141 -0
- package/dist/esm/elements/Header.js.map +1 -0
- package/dist/esm/elements/HeaderFooterManager.js +87 -0
- package/dist/esm/elements/HeaderFooterManager.js.map +1 -0
- package/dist/esm/elements/Hyperlink.js +586 -0
- package/dist/esm/elements/Hyperlink.js.map +1 -0
- package/dist/esm/elements/Image.js +1288 -0
- package/dist/esm/elements/Image.js.map +1 -0
- package/dist/esm/elements/ImageManager.js +223 -0
- package/dist/esm/elements/ImageManager.js.map +1 -0
- package/dist/esm/elements/ImageRun.js +29 -0
- package/dist/esm/elements/ImageRun.js.map +1 -0
- package/dist/esm/elements/MathElement.js +37 -0
- package/dist/esm/elements/MathElement.js.map +1 -0
- package/dist/esm/elements/Paragraph.js +2308 -0
- package/dist/esm/elements/Paragraph.js.map +1 -0
- package/dist/esm/elements/PreservedElement.js +29 -0
- package/dist/esm/elements/PreservedElement.js.map +1 -0
- package/dist/esm/elements/PropertyChangeTypes.js +53 -0
- package/dist/esm/elements/PropertyChangeTypes.js.map +1 -0
- package/dist/esm/elements/RangeMarker.js +219 -0
- package/dist/esm/elements/RangeMarker.js.map +1 -0
- package/dist/esm/elements/RegisteredBodyElement.js +40 -0
- package/dist/esm/elements/RegisteredBodyElement.js.map +1 -0
- package/dist/esm/elements/Revision.js +498 -0
- package/dist/esm/elements/Revision.js.map +1 -0
- package/dist/esm/elements/RevisionContent.js +18 -0
- package/dist/esm/elements/RevisionContent.js.map +1 -0
- package/dist/esm/elements/RevisionManager.js +486 -0
- package/dist/esm/elements/RevisionManager.js.map +1 -0
- package/dist/esm/elements/Run.js +1465 -0
- package/dist/esm/elements/Run.js.map +1 -0
- package/dist/esm/elements/Section.js +978 -0
- package/dist/esm/elements/Section.js.map +1 -0
- package/dist/esm/elements/Shape.js +493 -0
- package/dist/esm/elements/Shape.js.map +1 -0
- package/dist/esm/elements/StructuredDocumentTag.js +471 -0
- package/dist/esm/elements/StructuredDocumentTag.js.map +1 -0
- package/dist/esm/elements/Table.js +1456 -0
- package/dist/esm/elements/Table.js.map +1 -0
- package/dist/esm/elements/TableCell.js +835 -0
- package/dist/esm/elements/TableCell.js.map +1 -0
- package/dist/esm/elements/TableGridChange.js +52 -0
- package/dist/esm/elements/TableGridChange.js.map +1 -0
- package/dist/esm/elements/TableOfContents.js +389 -0
- package/dist/esm/elements/TableOfContents.js.map +1 -0
- package/dist/esm/elements/TableOfContentsElement.js +29 -0
- package/dist/esm/elements/TableOfContentsElement.js.map +1 -0
- package/dist/esm/elements/TableRow.js +555 -0
- package/dist/esm/elements/TableRow.js.map +1 -0
- package/dist/esm/elements/TextBox.js +459 -0
- package/dist/esm/elements/TextBox.js.map +1 -0
- package/dist/esm/formatting/AbstractNumbering.js +325 -0
- package/dist/esm/formatting/AbstractNumbering.js.map +1 -0
- package/dist/esm/formatting/NumberingInstance.js +150 -0
- package/dist/esm/formatting/NumberingInstance.js.map +1 -0
- package/dist/esm/formatting/NumberingLevel.js +608 -0
- package/dist/esm/formatting/NumberingLevel.js.map +1 -0
- package/dist/esm/formatting/NumberingManager.js +423 -0
- package/dist/esm/formatting/NumberingManager.js.map +1 -0
- package/dist/esm/formatting/Style.js +1151 -0
- package/dist/esm/formatting/Style.js.map +1 -0
- package/dist/esm/formatting/StylesManager.js +557 -0
- package/dist/esm/formatting/StylesManager.js.map +1 -0
- package/dist/esm/helpers/CleanupHelper.js +350 -0
- package/dist/esm/helpers/CleanupHelper.js.map +1 -0
- package/dist/esm/images/ImageOptimizer.js +161 -0
- package/dist/esm/images/ImageOptimizer.js.map +1 -0
- package/dist/esm/index.js +75 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal.js +16 -0
- package/dist/esm/internal.js.map +1 -0
- package/dist/esm/managers/DrawingManager.js +163 -0
- package/dist/esm/managers/DrawingManager.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/processors/ChangelogGenerator.js +970 -0
- package/dist/esm/processors/ChangelogGenerator.js.map +1 -0
- package/dist/esm/processors/CompatibilityUpgrader.js +130 -0
- package/dist/esm/processors/CompatibilityUpgrader.js.map +1 -0
- package/dist/esm/processors/InMemoryRevisionAcceptor.js +530 -0
- package/dist/esm/processors/InMemoryRevisionAcceptor.js.map +1 -0
- package/dist/esm/processors/MoveOperationHelper.js +57 -0
- package/dist/esm/processors/MoveOperationHelper.js.map +1 -0
- package/dist/esm/processors/RevisionAwareProcessor.js +232 -0
- package/dist/esm/processors/RevisionAwareProcessor.js.map +1 -0
- package/dist/esm/processors/RevisionWalker.js +278 -0
- package/dist/esm/processors/RevisionWalker.js.map +1 -0
- package/dist/{utils → esm/processors}/SelectiveRevisionAcceptor.js +81 -42
- package/dist/esm/processors/SelectiveRevisionAcceptor.js.map +1 -0
- package/dist/esm/processors/ShadingResolver.js +66 -0
- package/dist/esm/processors/ShadingResolver.js.map +1 -0
- package/dist/esm/processors/acceptRevisions.js +416 -0
- package/dist/esm/processors/acceptRevisions.js.map +1 -0
- package/dist/esm/processors/cnfStyleDecoder.js +89 -0
- package/dist/esm/processors/cnfStyleDecoder.js.map +1 -0
- package/dist/esm/processors/stripTrackedChanges.js +201 -0
- package/dist/esm/processors/stripTrackedChanges.js.map +1 -0
- package/dist/esm/tracking/DocumentTrackingContext.js +531 -0
- package/dist/esm/tracking/DocumentTrackingContext.js.map +1 -0
- package/dist/esm/tracking/TrackingContext.js +2 -0
- package/dist/esm/tracking/TrackingContext.js.map +1 -0
- package/dist/esm/types/compatibility-types.js +8 -0
- package/dist/esm/types/compatibility-types.js.map +1 -0
- package/dist/esm/types/document-types.js +2 -0
- package/dist/esm/types/document-types.js.map +1 -0
- package/dist/esm/types/formatting.js +2 -0
- package/dist/esm/types/formatting.js.map +1 -0
- package/dist/esm/types/list-types.js +2 -0
- package/dist/esm/types/list-types.js.map +1 -0
- package/dist/esm/types/settings-types.js +2 -0
- package/dist/esm/types/settings-types.js.map +1 -0
- package/dist/esm/types/styleConfig.js +2 -0
- package/dist/esm/types/styleConfig.js.map +1 -0
- package/dist/esm/utils/KeyedRegistry.js +32 -0
- package/dist/esm/utils/KeyedRegistry.js.map +1 -0
- package/dist/esm/utils/corruptionDetection.js +155 -0
- package/dist/esm/utils/corruptionDetection.js.map +1 -0
- package/dist/esm/utils/dateFormatting.js +4 -0
- package/dist/esm/utils/dateFormatting.js.map +1 -0
- package/dist/esm/utils/deepClone.js +40 -0
- package/dist/esm/utils/deepClone.js.map +1 -0
- package/dist/esm/utils/deepEqual.js +47 -0
- package/dist/esm/utils/deepEqual.js.map +1 -0
- package/dist/esm/utils/diagnostics.js +69 -0
- package/dist/esm/utils/diagnostics.js.map +1 -0
- package/dist/esm/utils/errorHandling.js +36 -0
- package/dist/esm/utils/errorHandling.js.map +1 -0
- package/dist/esm/utils/formatting.js +93 -0
- package/dist/esm/utils/formatting.js.map +1 -0
- package/dist/esm/utils/list-detection.js +148 -0
- package/dist/esm/utils/list-detection.js.map +1 -0
- package/dist/esm/utils/logger.js +205 -0
- package/dist/esm/utils/logger.js.map +1 -0
- package/dist/esm/utils/parsingHelpers.js +56 -0
- package/dist/esm/utils/parsingHelpers.js.map +1 -0
- package/dist/esm/utils/textDiff.js +42 -0
- package/dist/esm/utils/textDiff.js.map +1 -0
- package/dist/esm/utils/units.js +152 -0
- package/dist/esm/utils/units.js.map +1 -0
- package/dist/esm/utils/validation.js +285 -0
- package/dist/esm/utils/validation.js.map +1 -0
- package/dist/esm/utils/xmlSanitization.js +54 -0
- package/dist/esm/utils/xmlSanitization.js.map +1 -0
- package/dist/esm/validation/RevisionAutoFixer.js +340 -0
- package/dist/esm/validation/RevisionAutoFixer.js.map +1 -0
- package/dist/esm/validation/RevisionValidator.js +240 -0
- package/dist/esm/validation/RevisionValidator.js.map +1 -0
- package/dist/esm/validation/ValidationRuleRegistry.js +40 -0
- package/dist/esm/validation/ValidationRuleRegistry.js.map +1 -0
- package/dist/esm/validation/ValidationRules.js +92 -0
- package/dist/esm/validation/ValidationRules.js.map +1 -0
- package/dist/esm/validation/index.js +4 -0
- package/dist/esm/validation/index.js.map +1 -0
- package/dist/esm/xml/XMLBuilder.js +434 -0
- package/dist/esm/xml/XMLBuilder.js.map +1 -0
- package/dist/esm/xml/XMLParser.js +486 -0
- package/dist/esm/xml/XMLParser.js.map +1 -0
- package/dist/esm/zip/ZipHandler.js +298 -0
- package/dist/esm/zip/ZipHandler.js.map +1 -0
- package/dist/esm/zip/ZipReader.js +147 -0
- package/dist/esm/zip/ZipReader.js.map +1 -0
- package/dist/esm/zip/ZipWriter.js +199 -0
- package/dist/esm/zip/ZipWriter.js.map +1 -0
- package/dist/esm/zip/errors.js +43 -0
- package/dist/esm/zip/errors.js.map +1 -0
- package/dist/esm/zip/types.js +31 -0
- package/dist/esm/zip/types.js.map +1 -0
- package/dist/formatting/AbstractNumbering.d.ts +2 -2
- package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
- package/dist/formatting/AbstractNumbering.js +33 -33
- package/dist/formatting/AbstractNumbering.js.map +1 -1
- package/dist/formatting/NumberingInstance.d.ts +2 -2
- package/dist/formatting/NumberingInstance.d.ts.map +1 -1
- package/dist/formatting/NumberingInstance.js +7 -7
- package/dist/formatting/NumberingInstance.js.map +1 -1
- package/dist/formatting/NumberingLevel.d.ts +11 -2
- package/dist/formatting/NumberingLevel.d.ts.map +1 -1
- package/dist/formatting/NumberingLevel.js +111 -25
- package/dist/formatting/NumberingLevel.js.map +1 -1
- package/dist/formatting/NumberingManager.d.ts +4 -4
- package/dist/formatting/NumberingManager.d.ts.map +1 -1
- package/dist/formatting/NumberingManager.js +28 -28
- package/dist/formatting/NumberingManager.js.map +1 -1
- package/dist/formatting/Style.d.ts +14 -7
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +309 -112
- 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 +52 -52
- 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 +15 -15
- package/dist/helpers/CleanupHelper.js.map +1 -1
- package/dist/index.d.ts +81 -90
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +286 -317
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +16 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +42 -0
- package/dist/internal.js.map +1 -0
- package/dist/managers/DrawingManager.d.ts +3 -3
- package/dist/managers/DrawingManager.d.ts.map +1 -1
- package/dist/managers/DrawingManager.js +12 -12
- package/dist/managers/DrawingManager.js.map +1 -1
- package/dist/{utils → processors}/ChangelogGenerator.d.ts +2 -2
- package/dist/processors/ChangelogGenerator.d.ts.map +1 -0
- package/dist/{utils → processors}/ChangelogGenerator.js +2 -2
- package/dist/processors/ChangelogGenerator.js.map +1 -0
- package/dist/processors/CompatibilityUpgrader.d.ts.map +1 -0
- package/dist/{utils → processors}/CompatibilityUpgrader.js +10 -10
- package/dist/processors/CompatibilityUpgrader.js.map +1 -0
- package/dist/{utils → processors}/InMemoryRevisionAcceptor.d.ts +3 -3
- package/dist/processors/InMemoryRevisionAcceptor.d.ts.map +1 -0
- package/dist/{utils → processors}/InMemoryRevisionAcceptor.js +84 -27
- package/dist/processors/InMemoryRevisionAcceptor.js.map +1 -0
- package/dist/{utils → processors}/MoveOperationHelper.d.ts +4 -4
- package/dist/processors/MoveOperationHelper.d.ts.map +1 -0
- package/dist/{utils → processors}/MoveOperationHelper.js +10 -10
- package/dist/processors/MoveOperationHelper.js.map +1 -0
- package/dist/{utils → processors}/RevisionAwareProcessor.d.ts +3 -3
- package/dist/processors/RevisionAwareProcessor.d.ts.map +1 -0
- package/dist/{utils → processors}/RevisionAwareProcessor.js +2 -2
- package/dist/processors/RevisionAwareProcessor.js.map +1 -0
- package/dist/{utils → processors}/RevisionWalker.d.ts +2 -1
- package/dist/processors/RevisionWalker.d.ts.map +1 -0
- package/dist/{utils → processors}/RevisionWalker.js +28 -0
- package/dist/processors/RevisionWalker.js.map +1 -0
- package/dist/{utils → processors}/SelectiveRevisionAcceptor.d.ts +4 -3
- package/dist/processors/SelectiveRevisionAcceptor.d.ts.map +1 -0
- package/dist/processors/SelectiveRevisionAcceptor.js +402 -0
- package/dist/processors/SelectiveRevisionAcceptor.js.map +1 -0
- package/dist/processors/ShadingResolver.d.ts +6 -0
- package/dist/processors/ShadingResolver.d.ts.map +1 -0
- package/dist/{utils → processors}/ShadingResolver.js +2 -2
- package/dist/processors/ShadingResolver.js.map +1 -0
- package/dist/{utils → processors}/acceptRevisions.d.ts +1 -1
- package/dist/processors/acceptRevisions.d.ts.map +1 -0
- package/dist/{utils → processors}/acceptRevisions.js +24 -4
- package/dist/processors/acceptRevisions.js.map +1 -0
- package/dist/{utils → processors}/cnfStyleDecoder.d.ts +1 -1
- package/dist/processors/cnfStyleDecoder.d.ts.map +1 -0
- package/dist/processors/cnfStyleDecoder.js.map +1 -0
- package/dist/processors/stripTrackedChanges.d.ts +3 -0
- package/dist/processors/stripTrackedChanges.d.ts.map +1 -0
- package/dist/{utils → processors}/stripTrackedChanges.js +16 -6
- package/dist/processors/stripTrackedChanges.js.map +1 -0
- package/dist/tracking/DocumentTrackingContext.d.ts +4 -4
- package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
- package/dist/tracking/DocumentTrackingContext.js +38 -43
- package/dist/tracking/DocumentTrackingContext.js.map +1 -1
- package/dist/tracking/TrackingContext.d.ts +8 -8
- package/dist/tracking/TrackingContext.d.ts.map +1 -1
- package/dist/tracking/TrackingContext.js.map +1 -1
- package/dist/types/document-types.d.ts +28 -0
- package/dist/types/document-types.d.ts.map +1 -0
- package/dist/types/document-types.js +3 -0
- package/dist/types/document-types.js.map +1 -0
- package/dist/types/formatting.d.ts +4 -4
- package/dist/types/formatting.d.ts.map +1 -1
- package/dist/types/formatting.js.map +1 -1
- package/dist/types/settings-types.d.ts +6 -0
- package/dist/types/settings-types.d.ts.map +1 -1
- package/dist/types/settings-types.js.map +1 -1
- package/dist/utils/KeyedRegistry.d.ts +13 -0
- package/dist/utils/KeyedRegistry.d.ts.map +1 -0
- package/dist/utils/KeyedRegistry.js +36 -0
- package/dist/utils/KeyedRegistry.js.map +1 -0
- package/dist/utils/corruptionDetection.d.ts +1 -1
- package/dist/utils/corruptionDetection.d.ts.map +1 -1
- package/dist/utils/corruptionDetection.js +4 -4
- package/dist/utils/corruptionDetection.js.map +1 -1
- package/dist/utils/deepEqual.d.ts +2 -0
- package/dist/utils/deepEqual.d.ts.map +1 -0
- package/dist/utils/deepEqual.js +50 -0
- package/dist/utils/deepEqual.js.map +1 -0
- 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.map +1 -1
- package/dist/utils/parsingHelpers.d.ts +1 -1
- package/dist/utils/parsingHelpers.d.ts.map +1 -1
- package/dist/utils/parsingHelpers.js +2 -2
- package/dist/utils/parsingHelpers.js.map +1 -1
- package/dist/utils/validation.js +7 -7
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/xmlSanitization.js +2 -2
- package/dist/utils/xmlSanitization.js.map +1 -1
- package/dist/validation/RevisionAutoFixer.d.ts +4 -4
- package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
- package/dist/validation/RevisionAutoFixer.js +11 -11
- package/dist/validation/RevisionAutoFixer.js.map +1 -1
- package/dist/validation/RevisionValidator.d.ts +5 -4
- package/dist/validation/RevisionValidator.d.ts.map +1 -1
- package/dist/validation/RevisionValidator.js +29 -30
- package/dist/validation/RevisionValidator.js.map +1 -1
- package/dist/validation/ValidationRuleRegistry.d.ts +27 -0
- package/dist/validation/ValidationRuleRegistry.d.ts.map +1 -0
- package/dist/validation/ValidationRuleRegistry.js +43 -0
- package/dist/validation/ValidationRuleRegistry.js.map +1 -0
- package/dist/validation/index.d.ts +3 -3
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +10 -10
- package/dist/validation/index.js.map +1 -1
- package/dist/xml/XMLBuilder.d.ts +6 -1
- package/dist/xml/XMLBuilder.d.ts.map +1 -1
- package/dist/xml/XMLBuilder.js +11 -6
- package/dist/xml/XMLBuilder.js.map +1 -1
- package/dist/xml/XMLParser.js +6 -6
- package/dist/xml/XMLParser.js.map +1 -1
- package/dist/zip/ZipHandler.d.ts +1 -1
- package/dist/zip/ZipHandler.d.ts.map +1 -1
- package/dist/zip/ZipHandler.js +8 -8
- package/dist/zip/ZipHandler.js.map +1 -1
- package/dist/zip/ZipReader.d.ts +1 -1
- package/dist/zip/ZipReader.d.ts.map +1 -1
- package/dist/zip/ZipReader.js +14 -14
- 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 +10 -10
- package/dist/zip/ZipWriter.js.map +1 -1
- package/package.json +20 -4
- package/src/constants/legacyCompatFlags.ts +1 -1
- package/src/core/Document.ts +478 -167
- package/src/core/DocumentContent.ts +14 -11
- package/src/core/DocumentEvents.ts +90 -0
- package/src/core/DocumentGenerator.ts +49 -22
- package/src/core/DocumentParser.ts +2235 -620
- package/src/core/DocumentValidator.ts +7 -7
- package/src/core/ElementRegistry.ts +69 -0
- package/src/core/Relationship.ts +1 -1
- package/src/core/RelationshipManager.ts +4 -4
- package/src/elements/AlternateContent.ts +1 -1
- package/src/elements/Bookmark.ts +52 -4
- package/src/elements/BookmarkManager.ts +2 -2
- package/src/elements/Comment.ts +3 -3
- package/src/elements/CommentManager.ts +4 -4
- package/src/elements/CommonTypes.ts +45 -7
- package/src/elements/CustomXml.ts +1 -1
- package/src/elements/Endnote.ts +2 -2
- package/src/elements/EndnoteManager.ts +3 -3
- package/src/elements/Field.ts +44 -10
- package/src/elements/FieldHelpers.ts +2 -2
- package/src/elements/Footer.ts +4 -4
- package/src/elements/Footnote.ts +2 -2
- package/src/elements/FootnoteManager.ts +3 -3
- package/src/elements/Header.ts +4 -4
- package/src/elements/HeaderFooterManager.ts +2 -2
- package/src/elements/Hyperlink.ts +16 -12
- package/src/elements/Image.ts +3 -3
- package/src/elements/ImageManager.ts +2 -2
- package/src/elements/ImageRun.ts +3 -3
- package/src/elements/MathElement.ts +1 -1
- package/src/elements/Paragraph.ts +221 -88
- package/src/elements/PreservedElement.ts +1 -1
- package/src/elements/PropertyChangeTypes.ts +2 -2
- package/src/elements/RangeMarker.ts +153 -12
- package/src/elements/RegisteredBodyElement.ts +52 -0
- package/src/elements/Revision.ts +14 -14
- package/src/elements/RevisionContent.ts +3 -3
- package/src/elements/RevisionManager.ts +3 -3
- package/src/elements/Run.ts +221 -94
- package/src/elements/Section.ts +136 -69
- package/src/elements/Shape.ts +4 -4
- package/src/elements/StructuredDocumentTag.ts +3 -3
- package/src/elements/Table.ts +91 -27
- package/src/elements/TableCell.ts +62 -34
- package/src/elements/TableGridChange.ts +1 -1
- package/src/elements/TableOfContents.ts +1 -1
- package/src/elements/TableOfContentsElement.ts +2 -2
- package/src/elements/TableRow.ts +192 -48
- package/src/elements/TextBox.ts +5 -5
- package/src/formatting/AbstractNumbering.ts +3 -3
- package/src/formatting/NumberingInstance.ts +2 -2
- package/src/formatting/NumberingLevel.ts +201 -10
- package/src/formatting/NumberingManager.ts +5 -5
- package/src/formatting/Style.ts +382 -86
- package/src/formatting/StylesManager.ts +4 -4
- package/src/helpers/CleanupHelper.ts +6 -6
- package/src/index.ts +118 -127
- package/src/internal.ts +79 -0
- package/src/managers/DrawingManager.ts +3 -3
- package/src/{utils → processors}/ChangelogGenerator.ts +3 -3
- package/src/{utils → processors}/CompatibilityUpgrader.ts +2 -2
- package/src/{utils → processors}/InMemoryRevisionAcceptor.ts +100 -12
- package/src/{utils → processors}/MoveOperationHelper.ts +5 -5
- package/src/{utils → processors}/RevisionAwareProcessor.ts +3 -3
- package/src/{utils → processors}/RevisionWalker.ts +42 -1
- package/src/{utils → processors}/SelectiveRevisionAcceptor.ts +98 -39
- package/src/{utils → processors}/ShadingResolver.ts +5 -5
- package/src/{utils → processors}/acceptRevisions.ts +77 -9
- package/src/{utils → processors}/cnfStyleDecoder.ts +1 -1
- package/src/{utils → processors}/stripTrackedChanges.ts +35 -10
- package/src/tracking/DocumentTrackingContext.ts +12 -14
- package/src/tracking/TrackingContext.ts +8 -8
- package/src/types/document-types.ts +53 -0
- package/src/types/formatting.ts +4 -4
- package/src/types/settings-types.ts +32 -0
- package/src/utils/KeyedRegistry.ts +41 -0
- package/src/utils/corruptionDetection.ts +2 -2
- package/src/utils/deepEqual.ts +58 -0
- package/src/utils/list-detection.ts +2 -2
- package/src/utils/parsingHelpers.ts +11 -3
- package/src/utils/validation.ts +3 -3
- package/src/utils/xmlSanitization.ts +1 -1
- package/src/validation/RevisionAutoFixer.ts +5 -5
- package/src/validation/RevisionValidator.ts +39 -28
- package/src/validation/ValidationRuleRegistry.ts +86 -0
- package/src/validation/index.ts +3 -3
- package/src/xml/XMLBuilder.ts +13 -3
- package/src/xml/XMLParser.ts +2 -2
- package/src/zip/ZipHandler.ts +4 -4
- package/src/zip/ZipReader.ts +3 -3
- package/src/zip/ZipWriter.ts +3 -3
- package/dist/utils/ChangelogGenerator.d.ts.map +0 -1
- package/dist/utils/ChangelogGenerator.js.map +0 -1
- package/dist/utils/CompatibilityUpgrader.d.ts.map +0 -1
- package/dist/utils/CompatibilityUpgrader.js.map +0 -1
- package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +0 -1
- package/dist/utils/InMemoryRevisionAcceptor.js.map +0 -1
- package/dist/utils/MoveOperationHelper.d.ts.map +0 -1
- package/dist/utils/MoveOperationHelper.js.map +0 -1
- package/dist/utils/RevisionAwareProcessor.d.ts.map +0 -1
- package/dist/utils/RevisionAwareProcessor.js.map +0 -1
- package/dist/utils/RevisionWalker.d.ts.map +0 -1
- package/dist/utils/RevisionWalker.js.map +0 -1
- package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +0 -1
- package/dist/utils/SelectiveRevisionAcceptor.js.map +0 -1
- package/dist/utils/ShadingResolver.d.ts +0 -6
- package/dist/utils/ShadingResolver.d.ts.map +0 -1
- package/dist/utils/ShadingResolver.js.map +0 -1
- package/dist/utils/acceptRevisions.d.ts.map +0 -1
- package/dist/utils/acceptRevisions.js.map +0 -1
- package/dist/utils/cnfStyleDecoder.d.ts.map +0 -1
- package/dist/utils/cnfStyleDecoder.js.map +0 -1
- package/dist/utils/stripTrackedChanges.d.ts +0 -3
- package/dist/utils/stripTrackedChanges.d.ts.map +0 -1
- package/dist/utils/stripTrackedChanges.js.map +0 -1
- package/src/__tests__/helper-methods.test.ts +0 -512
- package/src/constants/CLAUDE.md +0 -28
- package/src/core/CLAUDE.md +0 -113
- package/src/elements/CLAUDE.md +0 -142
- package/src/formatting/CLAUDE.md +0 -78
- package/src/managers/CLAUDE.md +0 -47
- package/src/tracking/CLAUDE.md +0 -30
- package/src/types/CLAUDE.md +0 -39
- package/src/utils/CLAUDE.md +0 -168
- package/src/validation/CLAUDE.md +0 -40
- package/src/xml/CLAUDE.md +0 -65
- package/src/zip/CLAUDE.md +0 -55
- /package/dist/{utils → processors}/CompatibilityUpgrader.d.ts +0 -0
- /package/dist/{utils → processors}/cnfStyleDecoder.js +0 -0
package/src/formatting/Style.ts
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
* Supports paragraph, character, table, and numbering styles
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { XMLBuilder, XMLElement } from '../xml/XMLBuilder';
|
|
7
|
-
import { ParagraphFormatting } from '../elements/Paragraph';
|
|
8
|
-
import { Run, RunFormatting } from '../elements/Run';
|
|
9
|
-
import { ShadingConfig, buildShadingAttributes } from '../elements/CommonTypes';
|
|
10
|
-
import { Heading2TableOptions } from '../types/styleConfig';
|
|
11
|
-
import { deepClone } from '../utils/deepClone';
|
|
6
|
+
import { XMLBuilder, XMLElement } from '../xml/XMLBuilder.js';
|
|
7
|
+
import { ParagraphFormatting } from '../elements/Paragraph.js';
|
|
8
|
+
import { Run, RunFormatting } from '../elements/Run.js';
|
|
9
|
+
import { ShadingConfig, buildShadingAttributes } from '../elements/CommonTypes.js';
|
|
10
|
+
import { Heading2TableOptions } from '../types/styleConfig.js';
|
|
11
|
+
import { deepClone } from '../utils/deepClone.js';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Style type
|
|
@@ -16,12 +16,15 @@ import { deepClone } from '../utils/deepClone';
|
|
|
16
16
|
export type StyleType = 'paragraph' | 'character' | 'table' | 'numbering';
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
-
* Table alignment
|
|
19
|
+
* Table alignment per ECMA-376 Part 1 §17.18.45 ST_JcTable.
|
|
20
|
+
* `start` / `end` are the bidi-aware alternatives to `left` / `right`.
|
|
20
21
|
*/
|
|
21
|
-
export type TableAlignment = 'left' | 'center' | 'right';
|
|
22
|
+
export type TableAlignment = 'left' | 'center' | 'right' | 'start' | 'end';
|
|
22
23
|
|
|
23
24
|
/**
|
|
24
|
-
* Border properties
|
|
25
|
+
* Border properties (style-level). Mirrors `BorderDefinition` in
|
|
26
|
+
* `elements/CommonTypes.ts` — both represent CT_Border per ECMA-376
|
|
27
|
+
* §17.18.2.
|
|
25
28
|
*/
|
|
26
29
|
export interface BorderProperties {
|
|
27
30
|
/** Border style */
|
|
@@ -32,6 +35,16 @@ export interface BorderProperties {
|
|
|
32
35
|
space?: number;
|
|
33
36
|
/** Border color (hex without #) */
|
|
34
37
|
color?: string;
|
|
38
|
+
/** Theme color reference (ST_ThemeColor per §17.18.97) */
|
|
39
|
+
themeColor?: string;
|
|
40
|
+
/** Theme tint (2-hex-digit string) */
|
|
41
|
+
themeTint?: string;
|
|
42
|
+
/** Theme shade (2-hex-digit string) */
|
|
43
|
+
themeShade?: string;
|
|
44
|
+
/** Border casts a shadow (CT_OnOff attribute on CT_Border) */
|
|
45
|
+
shadow?: boolean;
|
|
46
|
+
/** Border is part of a frame around the content (CT_OnOff) */
|
|
47
|
+
frame?: boolean;
|
|
35
48
|
}
|
|
36
49
|
|
|
37
50
|
/**
|
|
@@ -109,7 +122,11 @@ export interface TableCellStyleFormatting {
|
|
|
109
122
|
/** Cell-specific margins */
|
|
110
123
|
margins?: CellMargins;
|
|
111
124
|
/** Vertical alignment in cell */
|
|
112
|
-
|
|
125
|
+
/**
|
|
126
|
+
* Cell vertical alignment per ECMA-376 Part 1 §17.18.101 ST_VerticalJc.
|
|
127
|
+
* `both` distributes content with equal top/bottom gaps.
|
|
128
|
+
*/
|
|
129
|
+
verticalAlignment?: 'top' | 'center' | 'both' | 'bottom';
|
|
113
130
|
}
|
|
114
131
|
|
|
115
132
|
/**
|
|
@@ -217,6 +234,13 @@ export interface StyleProperties {
|
|
|
217
234
|
uiPriority?: number;
|
|
218
235
|
/** Semi-hidden - hide from gallery unless in use */
|
|
219
236
|
semiHidden?: boolean;
|
|
237
|
+
/**
|
|
238
|
+
* Hidden - completely hide the style (stronger than semiHidden).
|
|
239
|
+
* Per ECMA-376 Part 1 §17.7.4 CT_Style, `<w:hidden>` between
|
|
240
|
+
* `autoRedefine` and `uiPriority`. OnOffOnlyType — explicit false
|
|
241
|
+
* is `w:val="off"`.
|
|
242
|
+
*/
|
|
243
|
+
hidden?: boolean;
|
|
220
244
|
/** Unhide when used - auto-show when applied */
|
|
221
245
|
unhideWhenUsed?: boolean;
|
|
222
246
|
/** Locked - prevent modification */
|
|
@@ -227,6 +251,13 @@ export interface StyleProperties {
|
|
|
227
251
|
personalCompose?: boolean;
|
|
228
252
|
/** Personal reply - style for replying to messages */
|
|
229
253
|
personalReply?: boolean;
|
|
254
|
+
/**
|
|
255
|
+
* Revision-save ID for the style definition (§17.7.4 CT_Style child
|
|
256
|
+
* `<w:rsid>`, CT_LongHexNumber §17.18.50). 8-character uppercase hex
|
|
257
|
+
* string matching the session-level `w:rsid` entries in settings.xml.
|
|
258
|
+
* Schema position: between `personalReply` and `pPr` in CT_Style.
|
|
259
|
+
*/
|
|
260
|
+
rsid?: string;
|
|
230
261
|
/** Link - linked character/paragraph style ID */
|
|
231
262
|
link?: string;
|
|
232
263
|
/** Auto-redefine - update style from manual formatting */
|
|
@@ -757,9 +788,29 @@ export class Style {
|
|
|
757
788
|
styleChildren.push(XMLBuilder.wSelf('link', { 'w:val': this.properties.link }));
|
|
758
789
|
}
|
|
759
790
|
|
|
760
|
-
// Add autoRedefine
|
|
761
|
-
|
|
762
|
-
|
|
791
|
+
// Add autoRedefine — OnOffOnlyType per ECMA-376 §17.7.4.5; w:val is
|
|
792
|
+
// restricted to "on"/"off" by ST_OnOffOnly. Emit w:val="off" for explicit
|
|
793
|
+
// false so an override of a based-on style's autoRedefine=true survives
|
|
794
|
+
// round-trip. (w:val="0" would fail Open XML SDK schema validation.)
|
|
795
|
+
if (this.properties.autoRedefine !== undefined) {
|
|
796
|
+
if (this.properties.autoRedefine) {
|
|
797
|
+
styleChildren.push(XMLBuilder.wSelf('autoRedefine'));
|
|
798
|
+
} else {
|
|
799
|
+
styleChildren.push(XMLBuilder.wSelf('autoRedefine', { 'w:val': 'off' }));
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
// hidden — CT_OnOff (OnOffOnlyType) per ECMA-376 §17.7.4, positioned
|
|
804
|
+
// BETWEEN autoRedefine and uiPriority per CT_Style schema order.
|
|
805
|
+
// Completely hides the style (stronger than semiHidden). Emit
|
|
806
|
+
// w:val="off" for explicit false so an override of a based-on
|
|
807
|
+
// style's hidden=true survives round-trip.
|
|
808
|
+
if (this.properties.hidden !== undefined) {
|
|
809
|
+
if (this.properties.hidden) {
|
|
810
|
+
styleChildren.push(XMLBuilder.wSelf('hidden'));
|
|
811
|
+
} else {
|
|
812
|
+
styleChildren.push(XMLBuilder.wSelf('hidden', { 'w:val': 'off' }));
|
|
813
|
+
}
|
|
763
814
|
}
|
|
764
815
|
|
|
765
816
|
// Add metadata properties — ordered per ECMA-376 CT_Style
|
|
@@ -772,44 +823,79 @@ export class Style {
|
|
|
772
823
|
);
|
|
773
824
|
}
|
|
774
825
|
|
|
775
|
-
// semiHidden
|
|
776
|
-
if (this.properties.semiHidden) {
|
|
777
|
-
|
|
826
|
+
// semiHidden — CT_OnOff. Emit explicit false to preserve override intent.
|
|
827
|
+
if (this.properties.semiHidden !== undefined) {
|
|
828
|
+
if (this.properties.semiHidden) {
|
|
829
|
+
styleChildren.push(XMLBuilder.wSelf('semiHidden'));
|
|
830
|
+
} else {
|
|
831
|
+
styleChildren.push(XMLBuilder.wSelf('semiHidden', { 'w:val': 'off' }));
|
|
832
|
+
}
|
|
778
833
|
}
|
|
779
834
|
|
|
780
|
-
// unhideWhenUsed
|
|
781
|
-
if (this.properties.unhideWhenUsed) {
|
|
782
|
-
|
|
835
|
+
// unhideWhenUsed — CT_OnOff.
|
|
836
|
+
if (this.properties.unhideWhenUsed !== undefined) {
|
|
837
|
+
if (this.properties.unhideWhenUsed) {
|
|
838
|
+
styleChildren.push(XMLBuilder.wSelf('unhideWhenUsed'));
|
|
839
|
+
} else {
|
|
840
|
+
styleChildren.push(XMLBuilder.wSelf('unhideWhenUsed', { 'w:val': 'off' }));
|
|
841
|
+
}
|
|
783
842
|
}
|
|
784
843
|
|
|
785
|
-
// qFormat -
|
|
844
|
+
// qFormat — CT_OnOff. Explicit false must round-trip (override a based-on
|
|
845
|
+
// style's qFormat=true). Built-in non-custom styles default to emitting
|
|
846
|
+
// qFormat when the field is absent entirely (legacy behaviour).
|
|
786
847
|
if (this.properties.qFormat !== undefined) {
|
|
787
848
|
if (this.properties.qFormat) {
|
|
788
849
|
styleChildren.push(XMLBuilder.wSelf('qFormat'));
|
|
850
|
+
} else {
|
|
851
|
+
styleChildren.push(XMLBuilder.wSelf('qFormat', { 'w:val': 'off' }));
|
|
789
852
|
}
|
|
790
853
|
} else if (!this.properties.customStyle) {
|
|
791
|
-
// Default: built-in styles have qFormat
|
|
792
854
|
styleChildren.push(XMLBuilder.wSelf('qFormat'));
|
|
793
855
|
}
|
|
794
856
|
|
|
795
|
-
// locked
|
|
796
|
-
if (this.properties.locked) {
|
|
797
|
-
|
|
857
|
+
// locked — CT_OnOff.
|
|
858
|
+
if (this.properties.locked !== undefined) {
|
|
859
|
+
if (this.properties.locked) {
|
|
860
|
+
styleChildren.push(XMLBuilder.wSelf('locked'));
|
|
861
|
+
} else {
|
|
862
|
+
styleChildren.push(XMLBuilder.wSelf('locked', { 'w:val': 'off' }));
|
|
863
|
+
}
|
|
798
864
|
}
|
|
799
865
|
|
|
800
|
-
// personal
|
|
801
|
-
if (this.properties.personal) {
|
|
802
|
-
|
|
866
|
+
// personal — CT_OnOff.
|
|
867
|
+
if (this.properties.personal !== undefined) {
|
|
868
|
+
if (this.properties.personal) {
|
|
869
|
+
styleChildren.push(XMLBuilder.wSelf('personal'));
|
|
870
|
+
} else {
|
|
871
|
+
styleChildren.push(XMLBuilder.wSelf('personal', { 'w:val': 'off' }));
|
|
872
|
+
}
|
|
803
873
|
}
|
|
804
874
|
|
|
805
|
-
// personalCompose
|
|
806
|
-
if (this.properties.personalCompose) {
|
|
807
|
-
|
|
875
|
+
// personalCompose — CT_OnOff.
|
|
876
|
+
if (this.properties.personalCompose !== undefined) {
|
|
877
|
+
if (this.properties.personalCompose) {
|
|
878
|
+
styleChildren.push(XMLBuilder.wSelf('personalCompose'));
|
|
879
|
+
} else {
|
|
880
|
+
styleChildren.push(XMLBuilder.wSelf('personalCompose', { 'w:val': 'off' }));
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
// personalReply — CT_OnOff.
|
|
885
|
+
if (this.properties.personalReply !== undefined) {
|
|
886
|
+
if (this.properties.personalReply) {
|
|
887
|
+
styleChildren.push(XMLBuilder.wSelf('personalReply'));
|
|
888
|
+
} else {
|
|
889
|
+
styleChildren.push(XMLBuilder.wSelf('personalReply', { 'w:val': 'off' }));
|
|
890
|
+
}
|
|
808
891
|
}
|
|
809
892
|
|
|
810
|
-
//
|
|
811
|
-
|
|
812
|
-
|
|
893
|
+
// rsid — CT_LongHexNumber (§17.18.50) per CT_Style §17.7.4. Schema
|
|
894
|
+
// position: between personalReply (#15) and pPr (#17). Emit only when
|
|
895
|
+
// an rsid stamp was carried over from load (we never synthesize one
|
|
896
|
+
// for programmatically authored styles).
|
|
897
|
+
if (this.properties.rsid !== undefined && this.properties.rsid !== '') {
|
|
898
|
+
styleChildren.push(XMLBuilder.wSelf('rsid', { 'w:val': this.properties.rsid }));
|
|
813
899
|
}
|
|
814
900
|
|
|
815
901
|
// Add paragraph properties
|
|
@@ -829,23 +915,23 @@ export class Style {
|
|
|
829
915
|
);
|
|
830
916
|
}
|
|
831
917
|
if (numPrChildren.length > 0) {
|
|
832
|
-
// Per CT_PPrBase, numPr is at position #7: after keepNext
|
|
833
|
-
//
|
|
918
|
+
// Per CT_PPrBase, numPr is at position #7: after keepNext (#2),
|
|
919
|
+
// keepLines (#3), pageBreakBefore (#4), framePr (#5), widowControl (#6).
|
|
920
|
+
// Insert after the last of these that's present in the serialized pPr.
|
|
834
921
|
const numPrEl = XMLBuilder.w('numPr', undefined, numPrChildren);
|
|
835
922
|
if (pPr.children && pPr.children.length > 0) {
|
|
836
|
-
|
|
837
|
-
|
|
923
|
+
const preNumPr = new Set([
|
|
924
|
+
'w:keepNext',
|
|
925
|
+
'w:keepLines',
|
|
926
|
+
'w:pageBreakBefore',
|
|
927
|
+
'w:framePr',
|
|
928
|
+
'w:widowControl',
|
|
929
|
+
]);
|
|
838
930
|
let insertIdx = 0;
|
|
839
931
|
for (let i = 0; i < pPr.children.length; i++) {
|
|
840
932
|
const child = pPr.children[i];
|
|
841
|
-
if (child && typeof child !== 'string') {
|
|
842
|
-
|
|
843
|
-
child.name === 'w:keepNext' ||
|
|
844
|
-
child.name === 'w:keepLines' ||
|
|
845
|
-
child.name === 'w:pageBreakBefore'
|
|
846
|
-
) {
|
|
847
|
-
insertIdx = i + 1;
|
|
848
|
-
}
|
|
933
|
+
if (child && typeof child !== 'string' && preNumPr.has(child.name)) {
|
|
934
|
+
insertIdx = i + 1;
|
|
849
935
|
}
|
|
850
936
|
}
|
|
851
937
|
pPr.children.splice(insertIdx, 0, numPrEl);
|
|
@@ -916,23 +1002,169 @@ export class Style {
|
|
|
916
1002
|
private generateParagraphProperties(formatting: ParagraphFormatting): XMLElement {
|
|
917
1003
|
const pPrChildren: XMLElement[] = [];
|
|
918
1004
|
|
|
919
|
-
//
|
|
920
|
-
|
|
921
|
-
|
|
1005
|
+
// CT_OnOff paragraph flags use ST_OnOff. Emit bare `<w:x/>` for explicit
|
|
1006
|
+
// true and `<w:x w:val="0"/>` for explicit false. Undefined means
|
|
1007
|
+
// "inherit from base style" — omit the element entirely. Omitting an
|
|
1008
|
+
// explicit-false value would silently revert to the inherited true,
|
|
1009
|
+
// losing the user's override. Mirrors the Paragraph-level generator.
|
|
1010
|
+
const emitCtOnOff = (tag: string, value: boolean | undefined): void => {
|
|
1011
|
+
if (value === undefined) return;
|
|
1012
|
+
pPrChildren.push(value ? XMLBuilder.wSelf(tag) : XMLBuilder.wSelf(tag, { 'w:val': '0' }));
|
|
1013
|
+
};
|
|
1014
|
+
|
|
1015
|
+
// Children ordered per ECMA-376 CT_PPrBase schema (§17.3.1.26).
|
|
1016
|
+
// Note: numPr (#7) is inserted post-hoc by the caller because it
|
|
1017
|
+
// depends on `this.properties.numPr`, not `formatting`. The insertion
|
|
1018
|
+
// logic searches for the last CT_PPrBase child that appears before
|
|
1019
|
+
// numPr in the schema.
|
|
1020
|
+
|
|
1021
|
+
emitCtOnOff('keepNext', formatting.keepNext); // #2
|
|
1022
|
+
emitCtOnOff('keepLines', formatting.keepLines); // #3
|
|
1023
|
+
emitCtOnOff('pageBreakBefore', formatting.pageBreakBefore); // #4
|
|
1024
|
+
|
|
1025
|
+
// framePr (#5) — text frame properties (drop cap, floating-frame
|
|
1026
|
+
// positioning) per ECMA-376 §17.3.1.11 CT_FramePr. Previously dropped on
|
|
1027
|
+
// the style serializer, so a custom drop-cap paragraph style lost its
|
|
1028
|
+
// frame configuration on any managed save. Mirrors the Paragraph-level
|
|
1029
|
+
// serializer emission order for attribute output.
|
|
1030
|
+
if (formatting.framePr) {
|
|
1031
|
+
const f = formatting.framePr;
|
|
1032
|
+
const attrs: Record<string, string> = {};
|
|
1033
|
+
if (f.w !== undefined) attrs['w:w'] = f.w.toString();
|
|
1034
|
+
if (f.h !== undefined) attrs['w:h'] = f.h.toString();
|
|
1035
|
+
if (f.hRule) attrs['w:hRule'] = f.hRule;
|
|
1036
|
+
if (f.x !== undefined) attrs['w:x'] = f.x.toString();
|
|
1037
|
+
if (f.y !== undefined) attrs['w:y'] = f.y.toString();
|
|
1038
|
+
if (f.xAlign) attrs['w:xAlign'] = f.xAlign;
|
|
1039
|
+
if (f.yAlign) attrs['w:yAlign'] = f.yAlign;
|
|
1040
|
+
if (f.hAnchor) attrs['w:hAnchor'] = f.hAnchor;
|
|
1041
|
+
if (f.vAnchor) attrs['w:vAnchor'] = f.vAnchor;
|
|
1042
|
+
if (f.hSpace !== undefined) attrs['w:hSpace'] = f.hSpace.toString();
|
|
1043
|
+
if (f.vSpace !== undefined) attrs['w:vSpace'] = f.vSpace.toString();
|
|
1044
|
+
if (f.wrap) attrs['w:wrap'] = f.wrap;
|
|
1045
|
+
if (f.dropCap) attrs['w:dropCap'] = f.dropCap;
|
|
1046
|
+
if (f.lines !== undefined) attrs['w:lines'] = f.lines.toString();
|
|
1047
|
+
if (f.anchorLock !== undefined) attrs['w:anchorLock'] = f.anchorLock ? '1' : '0';
|
|
1048
|
+
if (Object.keys(attrs).length > 0) {
|
|
1049
|
+
pPrChildren.push(XMLBuilder.wSelf('framePr', attrs));
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
emitCtOnOff('widowControl', formatting.widowControl); // #6
|
|
1054
|
+
// numPr (#7) inserted post-hoc by caller.
|
|
1055
|
+
emitCtOnOff('suppressLineNumbers', formatting.suppressLineNumbers); // #8
|
|
1056
|
+
|
|
1057
|
+
// pBdr (#9) — paragraph borders (six sides: top, left, bottom, right,
|
|
1058
|
+
// between, bar) per ECMA-376 §17.3.1.24. Mirrors the Paragraph-level
|
|
1059
|
+
// serializer's order. Previously dropped on the style serializer even
|
|
1060
|
+
// though the style parser reads borders into `formatting.borders`.
|
|
1061
|
+
if (formatting.borders) {
|
|
1062
|
+
const borderChildren: XMLElement[] = [];
|
|
1063
|
+
const b = formatting.borders;
|
|
1064
|
+
const createBorder = (
|
|
1065
|
+
tag: string,
|
|
1066
|
+
def:
|
|
1067
|
+
| {
|
|
1068
|
+
style?: string;
|
|
1069
|
+
size?: number;
|
|
1070
|
+
space?: number;
|
|
1071
|
+
color?: string;
|
|
1072
|
+
themeColor?: string;
|
|
1073
|
+
themeTint?: string;
|
|
1074
|
+
themeShade?: string;
|
|
1075
|
+
shadow?: boolean;
|
|
1076
|
+
frame?: boolean;
|
|
1077
|
+
}
|
|
1078
|
+
| undefined
|
|
1079
|
+
): void => {
|
|
1080
|
+
if (!def) return;
|
|
1081
|
+
// CT_Border §17.18.2: `w:val` (ST_Border) is REQUIRED. Default to
|
|
1082
|
+
// "nil" when caller set only size/color/space so the style-level
|
|
1083
|
+
// pBdr survives strict OOXML validation even for the common
|
|
1084
|
+
// "turn off this inherited side" override pattern. Full attribute
|
|
1085
|
+
// set (themeColor/themeTint/themeShade/shadow/frame) emitted for
|
|
1086
|
+
// themed-border fidelity.
|
|
1087
|
+
const attrs: Record<string, string | number> = { 'w:val': def.style ?? 'nil' };
|
|
1088
|
+
if (def.size !== undefined) attrs['w:sz'] = def.size;
|
|
1089
|
+
if (def.space !== undefined) attrs['w:space'] = def.space;
|
|
1090
|
+
if (def.color) attrs['w:color'] = def.color;
|
|
1091
|
+
if (def.themeColor) attrs['w:themeColor'] = def.themeColor;
|
|
1092
|
+
if (def.themeTint) attrs['w:themeTint'] = def.themeTint;
|
|
1093
|
+
if (def.themeShade) attrs['w:themeShade'] = def.themeShade;
|
|
1094
|
+
if (def.shadow !== undefined) attrs['w:shadow'] = def.shadow ? '1' : '0';
|
|
1095
|
+
if (def.frame !== undefined) attrs['w:frame'] = def.frame ? '1' : '0';
|
|
1096
|
+
borderChildren.push(XMLBuilder.wSelf(tag, attrs));
|
|
1097
|
+
};
|
|
1098
|
+
// Ordered per CT_PBdr (top → left → bottom → right → between → bar).
|
|
1099
|
+
createBorder('top', b.top);
|
|
1100
|
+
createBorder('left', b.left);
|
|
1101
|
+
createBorder('bottom', b.bottom);
|
|
1102
|
+
createBorder('right', b.right);
|
|
1103
|
+
createBorder('between', b.between);
|
|
1104
|
+
createBorder('bar', b.bar);
|
|
1105
|
+
if (borderChildren.length > 0) {
|
|
1106
|
+
pPrChildren.push(XMLBuilder.w('pBdr', undefined, borderChildren));
|
|
1107
|
+
}
|
|
922
1108
|
}
|
|
923
|
-
|
|
924
|
-
|
|
1109
|
+
|
|
1110
|
+
// shd (#10) — paragraph shading. Previously dropped on the style
|
|
1111
|
+
// serializer; the parser reads it into `formatting.shading` already.
|
|
1112
|
+
if (formatting.shading) {
|
|
1113
|
+
const shdAttrs = buildShadingAttributes(formatting.shading);
|
|
1114
|
+
if (Object.keys(shdAttrs).length > 0) {
|
|
1115
|
+
pPrChildren.push(XMLBuilder.wSelf('shd', shdAttrs));
|
|
1116
|
+
}
|
|
925
1117
|
}
|
|
926
|
-
|
|
927
|
-
|
|
1118
|
+
|
|
1119
|
+
// tabs (#11) — paragraph tab stops per ECMA-376 §17.3.1.38 / CT_TabStop
|
|
1120
|
+
// §17.3.1.37. BOTH `w:val` (ST_TabJc) and `w:pos` (ST_SignedTwipsMeasure)
|
|
1121
|
+
// are REQUIRED. Default `w:val` to "left" so consumers setting only
|
|
1122
|
+
// position produce validator-clean output.
|
|
1123
|
+
if (formatting.tabs && formatting.tabs.length > 0) {
|
|
1124
|
+
const tabChildren: XMLElement[] = [];
|
|
1125
|
+
for (const tab of formatting.tabs) {
|
|
1126
|
+
const attrs: Record<string, string | number> = {
|
|
1127
|
+
'w:val': tab.val ?? 'left',
|
|
1128
|
+
'w:pos': tab.position,
|
|
1129
|
+
};
|
|
1130
|
+
if (tab.leader) attrs['w:leader'] = tab.leader;
|
|
1131
|
+
tabChildren.push(XMLBuilder.wSelf('tab', attrs));
|
|
1132
|
+
}
|
|
1133
|
+
if (tabChildren.length > 0) {
|
|
1134
|
+
pPrChildren.push(XMLBuilder.w('tabs', undefined, tabChildren));
|
|
1135
|
+
}
|
|
928
1136
|
}
|
|
929
1137
|
|
|
930
|
-
//
|
|
1138
|
+
emitCtOnOff('suppressAutoHyphens', formatting.suppressAutoHyphens); // #12
|
|
1139
|
+
emitCtOnOff('kinsoku', formatting.kinsoku); // #13
|
|
1140
|
+
emitCtOnOff('wordWrap', formatting.wordWrap); // #14
|
|
1141
|
+
emitCtOnOff('overflowPunct', formatting.overflowPunct); // #15
|
|
1142
|
+
emitCtOnOff('topLinePunct', formatting.topLinePunct); // #16
|
|
1143
|
+
emitCtOnOff('autoSpaceDE', formatting.autoSpaceDE); // #17
|
|
1144
|
+
emitCtOnOff('autoSpaceDN', formatting.autoSpaceDN); // #18
|
|
1145
|
+
emitCtOnOff('bidi', formatting.bidi); // #19
|
|
1146
|
+
emitCtOnOff('adjustRightInd', formatting.adjustRightInd); // #20
|
|
1147
|
+
// snapToGrid (#21) is a run property, not paragraph.
|
|
1148
|
+
|
|
1149
|
+
// Add spacing — full CT_Spacing attribute coverage per ECMA-376 §17.3.1.33.
|
|
1150
|
+
// Previously emitted only w:before / w:after / w:line / w:lineRule; the
|
|
1151
|
+
// four line-unit / auto-spacing attributes (beforeLines, afterLines,
|
|
1152
|
+
// beforeAutospacing, afterAutospacing) were silently dropped on save
|
|
1153
|
+
// even though the parser already read them correctly, creating a
|
|
1154
|
+
// parser/generator asymmetry for CJK-authored styles.
|
|
931
1155
|
if (formatting.spacing) {
|
|
932
1156
|
const spc = formatting.spacing;
|
|
933
1157
|
const attributes: Record<string, number | string> = {};
|
|
934
1158
|
if (spc.before !== undefined) attributes['w:before'] = spc.before;
|
|
1159
|
+
if (spc.beforeLines !== undefined) attributes['w:beforeLines'] = spc.beforeLines;
|
|
1160
|
+
if (spc.beforeAutospacing !== undefined) {
|
|
1161
|
+
attributes['w:beforeAutospacing'] = spc.beforeAutospacing ? '1' : '0';
|
|
1162
|
+
}
|
|
935
1163
|
if (spc.after !== undefined) attributes['w:after'] = spc.after;
|
|
1164
|
+
if (spc.afterLines !== undefined) attributes['w:afterLines'] = spc.afterLines;
|
|
1165
|
+
if (spc.afterAutospacing !== undefined) {
|
|
1166
|
+
attributes['w:afterAutospacing'] = spc.afterAutospacing ? '1' : '0';
|
|
1167
|
+
}
|
|
936
1168
|
if (spc.line !== undefined) attributes['w:line'] = spc.line;
|
|
937
1169
|
if (spc.lineRule) attributes['w:lineRule'] = spc.lineRule;
|
|
938
1170
|
if (Object.keys(attributes).length > 0) {
|
|
@@ -940,32 +1172,65 @@ export class Style {
|
|
|
940
1172
|
}
|
|
941
1173
|
}
|
|
942
1174
|
|
|
943
|
-
// Add indentation
|
|
1175
|
+
// Add indentation — twips + CJK character-unit variants per ECMA-376
|
|
1176
|
+
// §17.3.1.12. hanging / firstLine are mutually exclusive; same for
|
|
1177
|
+
// hangingChars / firstLineChars. When both are set we emit hanging
|
|
1178
|
+
// (matching the Paragraph-level generator's precedence).
|
|
944
1179
|
if (formatting.indentation) {
|
|
945
1180
|
const ind = formatting.indentation;
|
|
946
1181
|
const attributes: Record<string, number> = {};
|
|
947
1182
|
if (ind.left !== undefined) attributes['w:left'] = ind.left;
|
|
948
1183
|
if (ind.right !== undefined) attributes['w:right'] = ind.right;
|
|
949
|
-
if (ind.
|
|
950
|
-
|
|
1184
|
+
if (ind.hanging !== undefined) {
|
|
1185
|
+
attributes['w:hanging'] = ind.hanging;
|
|
1186
|
+
} else if (ind.firstLine !== undefined) {
|
|
1187
|
+
attributes['w:firstLine'] = ind.firstLine;
|
|
1188
|
+
}
|
|
1189
|
+
if (ind.leftChars !== undefined) attributes['w:leftChars'] = ind.leftChars;
|
|
1190
|
+
if (ind.rightChars !== undefined) attributes['w:rightChars'] = ind.rightChars;
|
|
1191
|
+
if (ind.hangingChars !== undefined) {
|
|
1192
|
+
attributes['w:hangingChars'] = ind.hangingChars;
|
|
1193
|
+
} else if (ind.firstLineChars !== undefined) {
|
|
1194
|
+
attributes['w:firstLineChars'] = ind.firstLineChars;
|
|
1195
|
+
}
|
|
951
1196
|
if (Object.keys(attributes).length > 0) {
|
|
952
1197
|
pPrChildren.push(XMLBuilder.wSelf('ind', attributes));
|
|
953
1198
|
}
|
|
954
1199
|
}
|
|
955
1200
|
|
|
956
1201
|
// Contextual spacing per ECMA-376 Part 1 §17.3.1.8
|
|
957
|
-
// Removes spacing between paragraphs of the same style
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
}
|
|
1202
|
+
// Removes spacing between paragraphs of the same style.
|
|
1203
|
+
// Position #24 in CT_PPrBase — after ind, before mirrorIndents.
|
|
1204
|
+
emitCtOnOff('contextualSpacing', formatting.contextualSpacing);
|
|
961
1205
|
|
|
962
|
-
//
|
|
1206
|
+
emitCtOnOff('mirrorIndents', formatting.mirrorIndents); // #25
|
|
1207
|
+
emitCtOnOff('suppressOverlap', formatting.suppressOverlap); // #26
|
|
1208
|
+
|
|
1209
|
+
// Add alignment (jc, CT_PPrBase #27)
|
|
963
1210
|
if (formatting.alignment) {
|
|
964
1211
|
// Map 'justify' to 'both' per ECMA-376 (Word uses 'both' for justified text)
|
|
965
1212
|
const alignmentValue = formatting.alignment === 'justify' ? 'both' : formatting.alignment;
|
|
966
1213
|
pPrChildren.push(XMLBuilder.wSelf('jc', { 'w:val': alignmentValue }));
|
|
967
1214
|
}
|
|
968
1215
|
|
|
1216
|
+
// textDirection / textAlignment / textboxTightWrap per CT_PPrBase
|
|
1217
|
+
// positions #28-#30. Previously dropped on the style serializer even
|
|
1218
|
+
// though the Paragraph-level generator and the style parser handle
|
|
1219
|
+
// them — a paragraph style that set any of these (e.g. `textDirection:
|
|
1220
|
+
// "tbRl"` for vertical CJK flow) lost the override on any programmatic
|
|
1221
|
+
// save that bypassed raw XML passthrough.
|
|
1222
|
+
if (formatting.textDirection) {
|
|
1223
|
+
pPrChildren.push(XMLBuilder.wSelf('textDirection', { 'w:val': formatting.textDirection }));
|
|
1224
|
+
}
|
|
1225
|
+
if (formatting.textAlignment) {
|
|
1226
|
+
pPrChildren.push(XMLBuilder.wSelf('textAlignment', { 'w:val': formatting.textAlignment }));
|
|
1227
|
+
}
|
|
1228
|
+
if (formatting.textboxTightWrap) {
|
|
1229
|
+
pPrChildren.push(
|
|
1230
|
+
XMLBuilder.wSelf('textboxTightWrap', { 'w:val': formatting.textboxTightWrap })
|
|
1231
|
+
);
|
|
1232
|
+
}
|
|
1233
|
+
|
|
969
1234
|
// Add outline level for TOC support (Heading 1 = 0, Heading 2 = 1, etc.)
|
|
970
1235
|
if (formatting.outlineLevel !== undefined) {
|
|
971
1236
|
pPrChildren.push(
|
|
@@ -973,6 +1238,18 @@ export class Style {
|
|
|
973
1238
|
);
|
|
974
1239
|
}
|
|
975
1240
|
|
|
1241
|
+
// CT_PPrBase #32 divId (§17.3.1.10) — HTML div association. Numeric.
|
|
1242
|
+
// Previously never emitted on styles; the parser also used to drop it.
|
|
1243
|
+
if (formatting.divId !== undefined) {
|
|
1244
|
+
pPrChildren.push(XMLBuilder.wSelf('divId', { 'w:val': formatting.divId.toString() }));
|
|
1245
|
+
}
|
|
1246
|
+
|
|
1247
|
+
// CT_PPrBase #33 cnfStyle (§17.3.1.8) — conditional formatting bitmask.
|
|
1248
|
+
// Positioned last per schema, after divId and outlineLvl.
|
|
1249
|
+
if (formatting.cnfStyle) {
|
|
1250
|
+
pPrChildren.push(XMLBuilder.wSelf('cnfStyle', { 'w:val': formatting.cnfStyle }));
|
|
1251
|
+
}
|
|
1252
|
+
|
|
976
1253
|
return XMLBuilder.w('pPr', undefined, pPrChildren);
|
|
977
1254
|
}
|
|
978
1255
|
|
|
@@ -1257,42 +1534,61 @@ export class Style {
|
|
|
1257
1534
|
for (const prop of borderProps) {
|
|
1258
1535
|
const border = borders[prop];
|
|
1259
1536
|
if (border) {
|
|
1260
|
-
|
|
1261
|
-
|
|
1537
|
+
// CT_Border §17.18.2: w:val required. Default to "nil" so size/color-
|
|
1538
|
+
// only borders in style-level tblBorders/tcBorders still validate.
|
|
1539
|
+
// Emit full CT_Border attribute set for themed-border fidelity.
|
|
1540
|
+
const attrs: Record<string, string | number> = { 'w:val': border.style ?? 'nil' };
|
|
1262
1541
|
if (border.size !== undefined) attrs['w:sz'] = border.size;
|
|
1263
1542
|
if (border.space !== undefined) attrs['w:space'] = border.space;
|
|
1264
1543
|
if (border.color) attrs['w:color'] = border.color;
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1544
|
+
const b = border as {
|
|
1545
|
+
themeColor?: string;
|
|
1546
|
+
themeTint?: string;
|
|
1547
|
+
themeShade?: string;
|
|
1548
|
+
shadow?: boolean;
|
|
1549
|
+
frame?: boolean;
|
|
1550
|
+
};
|
|
1551
|
+
if (b.themeColor) attrs['w:themeColor'] = b.themeColor;
|
|
1552
|
+
if (b.themeTint) attrs['w:themeTint'] = b.themeTint;
|
|
1553
|
+
if (b.themeShade) attrs['w:themeShade'] = b.themeShade;
|
|
1554
|
+
if (b.shadow !== undefined) attrs['w:shadow'] = b.shadow ? '1' : '0';
|
|
1555
|
+
if (b.frame !== undefined) attrs['w:frame'] = b.frame ? '1' : '0';
|
|
1556
|
+
borderElements.push(XMLBuilder.wSelf(prop, attrs));
|
|
1269
1557
|
}
|
|
1270
1558
|
}
|
|
1271
1559
|
|
|
1272
|
-
// Add diagonal borders for cells
|
|
1560
|
+
// Add diagonal borders for cells. CT_Border §17.18.2 requires w:val;
|
|
1561
|
+
// default "nil" matches the other cell-border paths. Full CT_Border
|
|
1562
|
+
// attribute set emitted.
|
|
1563
|
+
const buildDiagonalAttrs = (b: {
|
|
1564
|
+
style?: string;
|
|
1565
|
+
size?: number;
|
|
1566
|
+
space?: number;
|
|
1567
|
+
color?: string;
|
|
1568
|
+
themeColor?: string;
|
|
1569
|
+
themeTint?: string;
|
|
1570
|
+
themeShade?: string;
|
|
1571
|
+
shadow?: boolean;
|
|
1572
|
+
frame?: boolean;
|
|
1573
|
+
}): Record<string, string | number> => {
|
|
1574
|
+
const attrs: Record<string, string | number> = { 'w:val': b.style ?? 'nil' };
|
|
1575
|
+
if (b.size !== undefined) attrs['w:sz'] = b.size;
|
|
1576
|
+
if (b.space !== undefined) attrs['w:space'] = b.space;
|
|
1577
|
+
if (b.color) attrs['w:color'] = b.color;
|
|
1578
|
+
if (b.themeColor) attrs['w:themeColor'] = b.themeColor;
|
|
1579
|
+
if (b.themeTint) attrs['w:themeTint'] = b.themeTint;
|
|
1580
|
+
if (b.themeShade) attrs['w:themeShade'] = b.themeShade;
|
|
1581
|
+
if (b.shadow !== undefined) attrs['w:shadow'] = b.shadow ? '1' : '0';
|
|
1582
|
+
if (b.frame !== undefined) attrs['w:frame'] = b.frame ? '1' : '0';
|
|
1583
|
+
return attrs;
|
|
1584
|
+
};
|
|
1273
1585
|
if (includeDiagonals) {
|
|
1274
1586
|
const cellBorders = borders as CellBorders;
|
|
1275
1587
|
if (cellBorders.tl2br) {
|
|
1276
|
-
|
|
1277
|
-
if (cellBorders.tl2br.style) attrs['w:val'] = cellBorders.tl2br.style;
|
|
1278
|
-
if (cellBorders.tl2br.size !== undefined) attrs['w:sz'] = cellBorders.tl2br.size;
|
|
1279
|
-
if (cellBorders.tl2br.space !== undefined) attrs['w:space'] = cellBorders.tl2br.space;
|
|
1280
|
-
if (cellBorders.tl2br.color) attrs['w:color'] = cellBorders.tl2br.color;
|
|
1281
|
-
|
|
1282
|
-
if (Object.keys(attrs).length > 0) {
|
|
1283
|
-
borderElements.push(XMLBuilder.wSelf('tl2br', attrs));
|
|
1284
|
-
}
|
|
1588
|
+
borderElements.push(XMLBuilder.wSelf('tl2br', buildDiagonalAttrs(cellBorders.tl2br)));
|
|
1285
1589
|
}
|
|
1286
1590
|
if (cellBorders.tr2bl) {
|
|
1287
|
-
|
|
1288
|
-
if (cellBorders.tr2bl.style) attrs['w:val'] = cellBorders.tr2bl.style;
|
|
1289
|
-
if (cellBorders.tr2bl.size !== undefined) attrs['w:sz'] = cellBorders.tr2bl.size;
|
|
1290
|
-
if (cellBorders.tr2bl.space !== undefined) attrs['w:space'] = cellBorders.tr2bl.space;
|
|
1291
|
-
if (cellBorders.tr2bl.color) attrs['w:color'] = cellBorders.tr2bl.color;
|
|
1292
|
-
|
|
1293
|
-
if (Object.keys(attrs).length > 0) {
|
|
1294
|
-
borderElements.push(XMLBuilder.wSelf('tr2bl', attrs));
|
|
1295
|
-
}
|
|
1591
|
+
borderElements.push(XMLBuilder.wSelf('tr2bl', buildDiagonalAttrs(cellBorders.tr2bl)));
|
|
1296
1592
|
}
|
|
1297
1593
|
}
|
|
1298
1594
|
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* Handles style registration, retrieval, and styles.xml generation
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { Paragraph } from '../elements/Paragraph';
|
|
7
|
-
import { XMLBuilder } from '../xml/XMLBuilder';
|
|
8
|
-
import { XMLParser } from '../xml/XMLParser';
|
|
9
|
-
import { Style, StyleType } from './Style';
|
|
6
|
+
import { Paragraph } from '../elements/Paragraph.js';
|
|
7
|
+
import { XMLBuilder } from '../xml/XMLBuilder.js';
|
|
8
|
+
import { XMLParser } from '../xml/XMLParser.js';
|
|
9
|
+
import { Style, StyleType } from './Style.js';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Configuration for latent styles (w:latentStyles per ECMA-376 §17.7.4.6)
|
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
* cleanup.all(); // Run all cleanups
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import type { Document } from '../core/Document';
|
|
19
|
-
import { Field, ComplexField } from '../elements/Field';
|
|
20
|
-
import { Hyperlink } from '../elements/Hyperlink';
|
|
21
|
-
import { Paragraph } from '../elements/Paragraph';
|
|
22
|
-
import { Table } from '../elements/Table';
|
|
23
|
-
import { StructuredDocumentTag } from '../elements/StructuredDocumentTag';
|
|
18
|
+
import type { Document } from '../core/Document.js';
|
|
19
|
+
import { Field, ComplexField } from '../elements/Field.js';
|
|
20
|
+
import { Hyperlink } from '../elements/Hyperlink.js';
|
|
21
|
+
import { Paragraph } from '../elements/Paragraph.js';
|
|
22
|
+
import { Table } from '../elements/Table.js';
|
|
23
|
+
import { StructuredDocumentTag } from '../elements/StructuredDocumentTag.js';
|
|
24
24
|
|
|
25
25
|
export interface CleanupOptions {
|
|
26
26
|
/** Unlock all SDTs to enable editing */
|