docxmlater 10.1.3 → 10.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +759 -754
- package/dist/constants/legacyCompatFlags.js +1 -1
- package/dist/constants/legacyCompatFlags.js.map +1 -1
- package/dist/constants/limits.js.map +1 -1
- package/dist/core/Document.d.ts +50 -50
- package/dist/core/Document.d.ts.map +1 -1
- package/dist/core/Document.js +483 -471
- package/dist/core/Document.js.map +1 -1
- package/dist/core/DocumentContent.d.ts +9 -9
- package/dist/core/DocumentContent.d.ts.map +1 -1
- package/dist/core/DocumentContent.js +1 -1
- package/dist/core/DocumentContent.js.map +1 -1
- package/dist/core/DocumentGenerator.d.ts +11 -11
- package/dist/core/DocumentGenerator.d.ts.map +1 -1
- package/dist/core/DocumentGenerator.js +251 -251
- package/dist/core/DocumentGenerator.js.map +1 -1
- package/dist/core/DocumentIdManager.js.map +1 -1
- package/dist/core/DocumentParser.d.ts +15 -15
- package/dist/core/DocumentParser.d.ts.map +1 -1
- package/dist/core/DocumentParser.js +2123 -2155
- package/dist/core/DocumentParser.js.map +1 -1
- package/dist/core/DocumentValidator.d.ts.map +1 -1
- package/dist/core/DocumentValidator.js +2 -5
- package/dist/core/DocumentValidator.js.map +1 -1
- package/dist/core/Relationship.js.map +1 -1
- package/dist/core/RelationshipManager.d.ts.map +1 -1
- package/dist/core/RelationshipManager.js +3 -3
- package/dist/core/RelationshipManager.js.map +1 -1
- package/dist/elements/AlternateContent.js.map +1 -1
- package/dist/elements/Bookmark.d.ts.map +1 -1
- package/dist/elements/Bookmark.js +3 -1
- package/dist/elements/Bookmark.js.map +1 -1
- package/dist/elements/BookmarkManager.d.ts.map +1 -1
- package/dist/elements/BookmarkManager.js.map +1 -1
- package/dist/elements/Comment.d.ts.map +1 -1
- package/dist/elements/Comment.js +9 -6
- package/dist/elements/Comment.js.map +1 -1
- package/dist/elements/CommentManager.d.ts.map +1 -1
- package/dist/elements/CommentManager.js +18 -17
- package/dist/elements/CommentManager.js.map +1 -1
- package/dist/elements/CommonTypes.d.ts +21 -21
- package/dist/elements/CommonTypes.d.ts.map +1 -1
- package/dist/elements/CommonTypes.js +56 -56
- package/dist/elements/CommonTypes.js.map +1 -1
- package/dist/elements/CustomXml.js.map +1 -1
- package/dist/elements/Endnote.d.ts.map +1 -1
- package/dist/elements/Endnote.js +6 -6
- package/dist/elements/Endnote.js.map +1 -1
- package/dist/elements/EndnoteManager.d.ts.map +1 -1
- package/dist/elements/EndnoteManager.js +6 -7
- package/dist/elements/EndnoteManager.js.map +1 -1
- package/dist/elements/Field.d.ts.map +1 -1
- package/dist/elements/Field.js +82 -25
- package/dist/elements/Field.js.map +1 -1
- package/dist/elements/FieldHelpers.d.ts.map +1 -1
- package/dist/elements/FieldHelpers.js.map +1 -1
- package/dist/elements/FontManager.d.ts.map +1 -1
- package/dist/elements/FontManager.js +1 -1
- package/dist/elements/FontManager.js.map +1 -1
- package/dist/elements/Footer.js +2 -2
- package/dist/elements/Footer.js.map +1 -1
- package/dist/elements/Footnote.d.ts.map +1 -1
- package/dist/elements/Footnote.js +6 -6
- package/dist/elements/Footnote.js.map +1 -1
- package/dist/elements/FootnoteManager.d.ts.map +1 -1
- package/dist/elements/FootnoteManager.js +6 -7
- package/dist/elements/FootnoteManager.js.map +1 -1
- package/dist/elements/Header.js +2 -2
- package/dist/elements/Header.js.map +1 -1
- package/dist/elements/HeaderFooterManager.js.map +1 -1
- package/dist/elements/Hyperlink.d.ts +5 -3
- package/dist/elements/Hyperlink.d.ts.map +1 -1
- package/dist/elements/Hyperlink.js +134 -76
- package/dist/elements/Hyperlink.js.map +1 -1
- package/dist/elements/Image.d.ts.map +1 -1
- package/dist/elements/Image.js +238 -106
- package/dist/elements/Image.js.map +1 -1
- package/dist/elements/ImageManager.d.ts.map +1 -1
- package/dist/elements/ImageManager.js +1 -1
- package/dist/elements/ImageManager.js.map +1 -1
- package/dist/elements/ImageRun.js +1 -1
- package/dist/elements/ImageRun.js.map +1 -1
- package/dist/elements/MathElement.js.map +1 -1
- package/dist/elements/Paragraph.d.ts +24 -24
- package/dist/elements/Paragraph.d.ts.map +1 -1
- package/dist/elements/Paragraph.js +181 -188
- package/dist/elements/Paragraph.js.map +1 -1
- package/dist/elements/PreservedElement.js.map +1 -1
- package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
- package/dist/elements/PropertyChangeTypes.js +6 -6
- package/dist/elements/PropertyChangeTypes.js.map +1 -1
- package/dist/elements/RangeMarker.d.ts.map +1 -1
- package/dist/elements/RangeMarker.js.map +1 -1
- package/dist/elements/Revision.d.ts.map +1 -1
- package/dist/elements/Revision.js +4 -5
- package/dist/elements/Revision.js.map +1 -1
- package/dist/elements/RevisionContent.js.map +1 -1
- package/dist/elements/RevisionManager.d.ts.map +1 -1
- package/dist/elements/RevisionManager.js +40 -48
- package/dist/elements/RevisionManager.js.map +1 -1
- package/dist/elements/Run.d.ts +16 -16
- package/dist/elements/Run.d.ts.map +1 -1
- package/dist/elements/Run.js +256 -238
- package/dist/elements/Run.js.map +1 -1
- package/dist/elements/Section.d.ts.map +1 -1
- package/dist/elements/Section.js +36 -11
- package/dist/elements/Section.js.map +1 -1
- package/dist/elements/Shape.d.ts.map +1 -1
- package/dist/elements/Shape.js.map +1 -1
- package/dist/elements/StructuredDocumentTag.d.ts +6 -6
- package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
- package/dist/elements/StructuredDocumentTag.js +99 -104
- package/dist/elements/StructuredDocumentTag.js.map +1 -1
- package/dist/elements/Table.d.ts +11 -11
- package/dist/elements/Table.d.ts.map +1 -1
- package/dist/elements/Table.js +102 -107
- package/dist/elements/Table.js.map +1 -1
- package/dist/elements/TableCell.d.ts +10 -10
- package/dist/elements/TableCell.d.ts.map +1 -1
- package/dist/elements/TableCell.js +105 -106
- package/dist/elements/TableCell.js.map +1 -1
- package/dist/elements/TableGridChange.d.ts.map +1 -1
- package/dist/elements/TableGridChange.js.map +1 -1
- package/dist/elements/TableOfContents.d.ts.map +1 -1
- package/dist/elements/TableOfContents.js +4 -4
- package/dist/elements/TableOfContents.js.map +1 -1
- package/dist/elements/TableOfContentsElement.js.map +1 -1
- package/dist/elements/TableRow.d.ts.map +1 -1
- package/dist/elements/TableRow.js +13 -6
- package/dist/elements/TableRow.js.map +1 -1
- package/dist/elements/TextBox.d.ts.map +1 -1
- package/dist/elements/TextBox.js +3 -5
- package/dist/elements/TextBox.js.map +1 -1
- package/dist/formatting/AbstractNumbering.d.ts +4 -4
- package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
- package/dist/formatting/AbstractNumbering.js +54 -49
- package/dist/formatting/AbstractNumbering.js.map +1 -1
- package/dist/formatting/NumberingInstance.d.ts.map +1 -1
- package/dist/formatting/NumberingInstance.js +1 -3
- package/dist/formatting/NumberingInstance.js.map +1 -1
- package/dist/formatting/NumberingLevel.d.ts +5 -5
- package/dist/formatting/NumberingLevel.d.ts.map +1 -1
- package/dist/formatting/NumberingLevel.js +119 -125
- package/dist/formatting/NumberingLevel.js.map +1 -1
- package/dist/formatting/NumberingManager.d.ts.map +1 -1
- package/dist/formatting/NumberingManager.js +9 -9
- package/dist/formatting/NumberingManager.js.map +1 -1
- package/dist/formatting/Style.d.ts +11 -11
- package/dist/formatting/Style.d.ts.map +1 -1
- package/dist/formatting/Style.js +219 -247
- package/dist/formatting/Style.js.map +1 -1
- package/dist/formatting/StylesManager.d.ts +2 -2
- package/dist/formatting/StylesManager.d.ts.map +1 -1
- package/dist/formatting/StylesManager.js +96 -102
- package/dist/formatting/StylesManager.js.map +1 -1
- package/dist/helpers/CleanupHelper.d.ts +1 -1
- package/dist/helpers/CleanupHelper.d.ts.map +1 -1
- package/dist/helpers/CleanupHelper.js +6 -6
- package/dist/helpers/CleanupHelper.js.map +1 -1
- package/dist/images/ImageOptimizer.js +7 -7
- package/dist/images/ImageOptimizer.js.map +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/managers/DrawingManager.js.map +1 -1
- package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
- package/dist/tracking/DocumentTrackingContext.js +23 -7
- package/dist/tracking/DocumentTrackingContext.js.map +1 -1
- package/dist/tracking/TrackingContext.d.ts.map +1 -1
- package/dist/tracking/TrackingContext.js.map +1 -1
- package/dist/types/compatibility-types.js.map +1 -1
- package/dist/types/formatting.js.map +1 -1
- package/dist/types/list-types.d.ts +6 -6
- package/dist/types/list-types.js.map +1 -1
- package/dist/types/settings-types.js.map +1 -1
- package/dist/types/styleConfig.d.ts +2 -2
- package/dist/types/styleConfig.js.map +1 -1
- package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
- package/dist/utils/ChangelogGenerator.js +97 -101
- package/dist/utils/ChangelogGenerator.js.map +1 -1
- package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
- package/dist/utils/CompatibilityUpgrader.js +1 -1
- package/dist/utils/CompatibilityUpgrader.js.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/InMemoryRevisionAcceptor.js +1 -6
- package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
- package/dist/utils/MoveOperationHelper.d.ts.map +1 -1
- package/dist/utils/MoveOperationHelper.js +1 -1
- package/dist/utils/MoveOperationHelper.js.map +1 -1
- package/dist/utils/RevisionAwareProcessor.d.ts.map +1 -1
- package/dist/utils/RevisionAwareProcessor.js +2 -4
- package/dist/utils/RevisionAwareProcessor.js.map +1 -1
- package/dist/utils/RevisionWalker.d.ts.map +1 -1
- package/dist/utils/RevisionWalker.js +4 -12
- package/dist/utils/RevisionWalker.js.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
- package/dist/utils/SelectiveRevisionAcceptor.js +2 -6
- package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
- package/dist/utils/ShadingResolver.d.ts.map +1 -1
- package/dist/utils/ShadingResolver.js +1 -1
- package/dist/utils/ShadingResolver.js.map +1 -1
- package/dist/utils/acceptRevisions.d.ts.map +1 -1
- package/dist/utils/acceptRevisions.js +23 -12
- package/dist/utils/acceptRevisions.js.map +1 -1
- package/dist/utils/cnfStyleDecoder.d.ts +1 -1
- package/dist/utils/cnfStyleDecoder.d.ts.map +1 -1
- package/dist/utils/cnfStyleDecoder.js +40 -40
- package/dist/utils/cnfStyleDecoder.js.map +1 -1
- package/dist/utils/corruptionDetection.d.ts.map +1 -1
- package/dist/utils/corruptionDetection.js.map +1 -1
- package/dist/utils/dateFormatting.js.map +1 -1
- package/dist/utils/deepClone.js +1 -1
- package/dist/utils/deepClone.js.map +1 -1
- package/dist/utils/diagnostics.d.ts.map +1 -1
- package/dist/utils/diagnostics.js +1 -1
- package/dist/utils/diagnostics.js.map +1 -1
- package/dist/utils/errorHandling.js.map +1 -1
- package/dist/utils/formatting.d.ts.map +1 -1
- package/dist/utils/formatting.js +10 -2
- package/dist/utils/formatting.js.map +1 -1
- package/dist/utils/list-detection.d.ts +2 -2
- package/dist/utils/list-detection.d.ts.map +1 -1
- package/dist/utils/list-detection.js +21 -23
- package/dist/utils/list-detection.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +12 -7
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/parsingHelpers.js.map +1 -1
- package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
- package/dist/utils/stripTrackedChanges.js +3 -3
- package/dist/utils/stripTrackedChanges.js.map +1 -1
- package/dist/utils/textDiff.d.ts +1 -1
- package/dist/utils/textDiff.js +8 -8
- package/dist/utils/textDiff.js.map +1 -1
- package/dist/utils/units.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +24 -7
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/xmlSanitization.d.ts.map +1 -1
- package/dist/utils/xmlSanitization.js +3 -3
- package/dist/utils/xmlSanitization.js.map +1 -1
- package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
- package/dist/validation/RevisionAutoFixer.js +5 -5
- package/dist/validation/RevisionAutoFixer.js.map +1 -1
- package/dist/validation/RevisionValidator.d.ts.map +1 -1
- package/dist/validation/RevisionValidator.js +7 -9
- package/dist/validation/RevisionValidator.js.map +1 -1
- package/dist/validation/ValidationRules.js +3 -3
- package/dist/validation/ValidationRules.js.map +1 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/xml/XMLBuilder.d.ts +1 -1
- package/dist/xml/XMLBuilder.d.ts.map +1 -1
- package/dist/xml/XMLBuilder.js +98 -100
- package/dist/xml/XMLBuilder.js.map +1 -1
- package/dist/xml/XMLParser.d.ts.map +1 -1
- package/dist/xml/XMLParser.js +61 -66
- package/dist/xml/XMLParser.js.map +1 -1
- package/dist/zip/ZipHandler.d.ts.map +1 -1
- package/dist/zip/ZipHandler.js.map +1 -1
- package/dist/zip/ZipReader.d.ts.map +1 -1
- package/dist/zip/ZipReader.js +1 -3
- package/dist/zip/ZipReader.js.map +1 -1
- package/dist/zip/ZipWriter.d.ts +1 -1
- package/dist/zip/ZipWriter.d.ts.map +1 -1
- package/dist/zip/ZipWriter.js +28 -36
- package/dist/zip/ZipWriter.js.map +1 -1
- package/dist/zip/types.js +1 -1
- package/dist/zip/types.js.map +1 -1
- package/package.json +92 -92
- package/src/__tests__/helper-methods.test.ts +512 -512
- package/src/constants/legacyCompatFlags.ts +138 -138
- package/src/constants/limits.ts +50 -50
- package/src/core/Document.ts +985 -1145
- package/src/core/DocumentContent.ts +461 -467
- package/src/core/DocumentGenerator.ts +1133 -1104
- package/src/core/DocumentIdManager.ts +158 -158
- package/src/core/DocumentParser.ts +2347 -2716
- package/src/core/DocumentValidator.ts +363 -372
- package/src/core/Relationship.ts +367 -367
- package/src/core/RelationshipManager.ts +429 -428
- package/src/elements/AlternateContent.ts +42 -42
- package/src/elements/Bookmark.ts +212 -210
- package/src/elements/BookmarkManager.ts +247 -250
- package/src/elements/Comment.ts +356 -359
- package/src/elements/CommentManager.ts +499 -502
- package/src/elements/CommonTypes.ts +524 -549
- package/src/elements/CustomXml.ts +36 -36
- package/src/elements/Endnote.ts +221 -217
- package/src/elements/EndnoteManager.ts +246 -249
- package/src/elements/Field.ts +1292 -1233
- package/src/elements/FieldHelpers.ts +329 -333
- package/src/elements/FontManager.ts +336 -339
- package/src/elements/Footer.ts +269 -269
- package/src/elements/Footnote.ts +221 -217
- package/src/elements/FootnoteManager.ts +246 -249
- package/src/elements/Header.ts +269 -269
- package/src/elements/HeaderFooterManager.ts +219 -219
- package/src/elements/Hyperlink.ts +1288 -1193
- package/src/elements/Image.ts +1982 -1756
- package/src/elements/ImageManager.ts +437 -432
- package/src/elements/ImageRun.ts +59 -59
- package/src/elements/MathElement.ts +65 -65
- package/src/elements/Paragraph.ts +4347 -4287
- package/src/elements/PreservedElement.ts +53 -53
- package/src/elements/PropertyChangeTypes.ts +458 -442
- package/src/elements/RangeMarker.ts +382 -400
- package/src/elements/Revision.ts +1198 -1217
- package/src/elements/RevisionContent.ts +73 -73
- package/src/elements/RevisionManager.ts +1070 -1070
- package/src/elements/Run.ts +3103 -3073
- package/src/elements/Section.ts +1521 -1421
- package/src/elements/Shape.ts +884 -873
- package/src/elements/StructuredDocumentTag.ts +1176 -1207
- package/src/elements/Table.ts +2468 -2524
- package/src/elements/TableCell.ts +1617 -1621
- package/src/elements/TableGridChange.ts +149 -151
- package/src/elements/TableOfContents.ts +701 -691
- package/src/elements/TableOfContentsElement.ts +89 -89
- package/src/elements/TableRow.ts +960 -929
- package/src/elements/TextBox.ts +766 -768
- package/src/formatting/AbstractNumbering.ts +580 -579
- package/src/formatting/NumberingInstance.ts +295 -299
- package/src/formatting/NumberingLevel.ts +981 -1040
- package/src/formatting/NumberingManager.ts +833 -827
- package/src/formatting/Style.ts +1785 -1879
- package/src/formatting/StylesManager.ts +1090 -1130
- package/src/helpers/CleanupHelper.ts +524 -524
- package/src/images/ImageOptimizer.ts +274 -274
- package/src/index.ts +559 -554
- package/src/managers/DrawingManager.ts +319 -319
- package/src/tracking/DocumentTrackingContext.ts +687 -674
- package/src/tracking/TrackingContext.ts +175 -173
- package/src/types/compatibility-types.ts +49 -49
- package/src/types/formatting.ts +210 -210
- package/src/types/list-types.ts +14 -14
- package/src/types/settings-types.ts +59 -59
- package/src/types/styleConfig.ts +189 -189
- package/src/utils/ChangelogGenerator.ts +1583 -1581
- package/src/utils/CompatibilityUpgrader.ts +235 -237
- package/src/utils/InMemoryRevisionAcceptor.ts +691 -696
- package/src/utils/MoveOperationHelper.ts +233 -238
- package/src/utils/RevisionAwareProcessor.ts +518 -526
- package/src/utils/RevisionWalker.ts +427 -457
- package/src/utils/SelectiveRevisionAcceptor.ts +662 -683
- package/src/utils/ShadingResolver.ts +105 -107
- package/src/utils/acceptRevisions.ts +723 -714
- package/src/utils/cnfStyleDecoder.ts +212 -217
- package/src/utils/corruptionDetection.ts +346 -345
- package/src/utils/dateFormatting.ts +20 -20
- package/src/utils/deepClone.ts +77 -78
- package/src/utils/diagnostics.ts +125 -129
- package/src/utils/errorHandling.ts +80 -80
- package/src/utils/formatting.ts +220 -213
- package/src/utils/list-detection.ts +32 -42
- package/src/utils/logger.ts +412 -404
- package/src/utils/parsingHelpers.ts +190 -190
- package/src/utils/stripTrackedChanges.ts +356 -353
- package/src/utils/textDiff.ts +100 -100
- package/src/utils/units.ts +421 -421
- package/src/utils/validation.ts +553 -542
- package/src/utils/xmlSanitization.ts +179 -182
- package/src/validation/RevisionAutoFixer.ts +541 -542
- package/src/validation/RevisionValidator.ts +470 -460
- package/src/validation/ValidationRules.ts +338 -338
- package/src/validation/index.ts +30 -30
- package/src/xml/XMLBuilder.ts +857 -871
- package/src/xml/XMLParser.ts +877 -919
- package/src/zip/ZipHandler.ts +629 -637
- package/src/zip/ZipReader.ts +295 -299
- package/src/zip/ZipWriter.ts +374 -390
- package/src/zip/types.ts +116 -116
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextBox.js","sourceRoot":"","sources":["../../src/elements/TextBox.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * TextBox - Represents a floating text box in a Word document\r\n *\r\n * Text boxes use DrawingML (a:) and WordprocessingML Drawing (wp:) namespaces,\r\n * plus WordprocessingShape (wps:) namespace for Word 2010+ features.\r\n *\r\n * Per ECMA-376 Part 4 (Transitional) and Office Open XML extensions,\r\n * text boxes in Word documents use the wps:wsp element with wps:txbx content.\r\n */\r\n\r\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder';\r\nimport { UNITS } from '../utils/units';\r\nimport { Paragraph } from './Paragraph';\r\nimport {\r\n ImagePosition,\r\n ImageAnchor,\r\n PositionAnchor,\r\n HorizontalAlignment,\r\n VerticalAlignment\r\n} from './Image';\r\nimport { BorderDefinition } from './Paragraph';\r\n\r\n/**\r\n * TextBox margins configuration\r\n */\r\nexport interface TextBoxMargins {\r\n /** Top margin in EMUs */\r\n top: number;\r\n /** Bottom margin in EMUs */\r\n bottom: number;\r\n /** Left margin in EMUs */\r\n left: number;\r\n /** Right margin in EMUs */\r\n right: number;\r\n}\r\n\r\n/**\r\n * TextBox fill configuration\r\n */\r\nexport interface TextBoxFill {\r\n /** Fill color in hex (e.g., 'F0F0F0') */\r\n color: string;\r\n /** Transparency percentage (0-100) */\r\n transparency?: number;\r\n}\r\n\r\n/**\r\n * TextBox properties\r\n */\r\nexport interface TextBoxProperties {\r\n /** Width in EMUs */\r\n width: number;\r\n /** Height in EMUs */\r\n height: number;\r\n /** Paragraphs within the text box */\r\n paragraphs?: Paragraph[];\r\n /** Position configuration */\r\n position?: ImagePosition;\r\n /** Anchor configuration */\r\n anchor?: ImageAnchor;\r\n /** Fill color and transparency */\r\n fill?: TextBoxFill;\r\n /** Border configuration */\r\n borders?: BorderDefinition;\r\n /** Internal margins */\r\n margins?: TextBoxMargins;\r\n /** TextBox name */\r\n name?: string;\r\n /** TextBox description (for accessibility) */\r\n description?: string;\r\n}\r\n\r\n/**\r\n * Represents a floating text box\r\n */\r\nexport class TextBox {\r\n private width: number;\r\n private height: number;\r\n private paragraphs: Paragraph[] = [];\r\n private position?: ImagePosition;\r\n private anchor?: ImageAnchor;\r\n private fill?: TextBoxFill;\r\n private borders?: BorderDefinition;\r\n private margins?: TextBoxMargins;\r\n private name: string;\r\n private description: string;\r\n private docPrId = 1;\r\n\r\n /**\r\n * Creates a new text box\r\n * @param properties TextBox properties\r\n * @private Use static factory methods instead (create)\r\n */\r\n private constructor(properties: TextBoxProperties) {\r\n this.width = properties.width;\r\n this.height = properties.height;\r\n if (properties.paragraphs) {\r\n this.paragraphs = properties.paragraphs;\r\n }\r\n this.position = properties.position;\r\n this.anchor = properties.anchor;\r\n this.fill = properties.fill;\r\n this.borders = properties.borders;\r\n this.margins = properties.margins;\r\n this.name = properties.name || 'TextBox';\r\n this.description = properties.description || '';\r\n }\r\n\r\n /**\r\n * Factory method for creating a text box\r\n * @param width Width in EMUs\r\n * @param height Height in EMUs\r\n * @returns New TextBox instance\r\n * @example\r\n * const textbox = TextBox.create(inchesToEmus(3), inchesToEmus(2));\r\n */\r\n static create(width: number, height: number): TextBox {\r\n return new TextBox({ width, height });\r\n }\r\n\r\n /**\r\n * Gets the width in EMUs\r\n * @returns Width\r\n */\r\n getWidth(): number {\r\n return this.width;\r\n }\r\n\r\n /**\r\n * Gets the height in EMUs\r\n * @returns Height\r\n */\r\n getHeight(): number {\r\n return this.height;\r\n }\r\n\r\n /**\r\n * Adds a paragraph to the text box\r\n * @param paragraph Paragraph to add\r\n * @returns This text box for chaining\r\n */\r\n addParagraph(paragraph: Paragraph): this {\r\n this.paragraphs.push(paragraph);\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets all paragraphs\r\n * @returns Array of paragraphs\r\n */\r\n getParagraphs(): Paragraph[] {\r\n return this.paragraphs;\r\n }\r\n\r\n /**\r\n * Sets text box position (for floating text boxes)\r\n * @param horizontal Horizontal positioning configuration\r\n * @param vertical Vertical positioning configuration\r\n * @returns This text box for chaining\r\n */\r\n setPosition(\r\n horizontal: { anchor: PositionAnchor; offset?: number; alignment?: HorizontalAlignment },\r\n vertical: { anchor: PositionAnchor; offset?: number; alignment?: VerticalAlignment }\r\n ): this {\r\n this.position = { horizontal, vertical };\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the position configuration\r\n * @returns Position or undefined\r\n */\r\n getPosition(): ImagePosition | undefined {\r\n return this.position;\r\n }\r\n\r\n /**\r\n * Sets anchor configuration\r\n * @param options Anchor configuration\r\n * @returns This text box for chaining\r\n */\r\n setAnchor(options: ImageAnchor): this {\r\n this.anchor = options;\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the anchor configuration\r\n * @returns Anchor configuration or undefined\r\n */\r\n getAnchor(): ImageAnchor | undefined {\r\n return this.anchor;\r\n }\r\n\r\n /**\r\n * Sets the fill color\r\n * @param color Fill color in hex\r\n * @param transparency Optional transparency percentage (0-100)\r\n * @returns This text box for chaining\r\n */\r\n setFill(color: string, transparency?: number): this {\r\n this.fill = { color, transparency };\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the fill configuration\r\n * @returns Fill or undefined\r\n */\r\n getFill(): TextBoxFill | undefined {\r\n return this.fill;\r\n }\r\n\r\n /**\r\n * Sets the borders\r\n * @param borders Border configuration\r\n * @returns This text box for chaining\r\n */\r\n setBorders(borders: BorderDefinition): this {\r\n this.borders = borders;\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the borders configuration\r\n * @returns Borders or undefined\r\n */\r\n getBorders(): BorderDefinition | undefined {\r\n return this.borders;\r\n }\r\n\r\n /**\r\n * Sets internal margins\r\n * @param margins Margin configuration\r\n * @returns This text box for chaining\r\n */\r\n setMargins(margins: TextBoxMargins): this {\r\n this.margins = margins;\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the margins configuration\r\n * @returns Margins or undefined\r\n */\r\n getMargins(): TextBoxMargins | undefined {\r\n return this.margins;\r\n }\r\n\r\n /**\r\n * Sets the text box name\r\n * @param name TextBox name\r\n * @returns This text box for chaining\r\n */\r\n setName(name: string): this {\r\n this.name = name;\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the text box name\r\n * @returns TextBox name\r\n */\r\n getName(): string {\r\n return this.name;\r\n }\r\n\r\n /**\r\n * Sets the text box description (for accessibility)\r\n * @param description TextBox description\r\n * @returns This text box for chaining\r\n */\r\n setDescription(description: string): this {\r\n this.description = description;\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the text box description\r\n * @returns TextBox description\r\n */\r\n getDescription(): string {\r\n return this.description;\r\n }\r\n\r\n /**\r\n * Sets the docPr ID (drawing object ID)\r\n * @param id Document property ID\r\n * @returns This text box for chaining\r\n */\r\n setDocPrId(id: number): this {\r\n this.docPrId = id;\r\n return this;\r\n }\r\n\r\n /**\r\n * Checks if this text box is floating (has anchor or position configuration)\r\n * @returns True if floating, false if inline\r\n */\r\n isFloating(): boolean {\r\n return this.anchor !== undefined || this.position !== undefined;\r\n }\r\n\r\n /**\r\n * Generates DrawingML XML for the text box\r\n * Creates either inline or floating (anchor) text box based on configuration\r\n * @returns XML element representing the text box\r\n */\r\n toXML(): XMLElement {\r\n // Text boxes are typically floating, but support inline as well\r\n const textboxElement = this.isFloating() ? this.createAnchor() : this.createInline();\r\n\r\n // Create the drawing structure\r\n return XMLBuilder.w('drawing', undefined, [textboxElement]);\r\n }\r\n\r\n /**\r\n * Creates the wp:inline element for inline text boxes\r\n * @private\r\n */\r\n private createInline(): XMLElement {\r\n const children: XMLElement[] = [];\r\n\r\n // Extent (size)\r\n children.push({\r\n name: 'wp:extent',\r\n attributes: {\r\n cx: this.width.toString(),\r\n cy: this.height.toString(),\r\n },\r\n selfClosing: true,\r\n });\r\n\r\n // Effect extent\r\n children.push({\r\n name: 'wp:effectExtent',\r\n attributes: {\r\n l: '0',\r\n t: '0',\r\n r: '0',\r\n b: '0',\r\n },\r\n selfClosing: true,\r\n });\r\n\r\n // Document properties\r\n children.push({\r\n name: 'wp:docPr',\r\n attributes: {\r\n id: this.docPrId.toString(),\r\n name: this.name,\r\n descr: this.description,\r\n },\r\n selfClosing: true,\r\n });\r\n\r\n // Non-visual graphic frame properties\r\n children.push({\r\n name: 'wp:cNvGraphicFramePr',\r\n selfClosing: true,\r\n });\r\n\r\n // Graphic data (the text box)\r\n children.push(this.createGraphic());\r\n\r\n return {\r\n name: 'wp:inline',\r\n attributes: {\r\n distT: '0',\r\n distB: '0',\r\n distL: '0',\r\n distR: '0',\r\n },\r\n children,\r\n };\r\n }\r\n\r\n /**\r\n * Creates the wp:anchor element for floating text boxes\r\n * @private\r\n */\r\n private createAnchor(): XMLElement {\r\n const children: XMLElement[] = [];\r\n\r\n const anchorConfig = this.anchor || {\r\n behindDoc: false,\r\n locked: false,\r\n layoutInCell: true,\r\n allowOverlap: false,\r\n relativeHeight: 251658240,\r\n };\r\n\r\n // Position H (horizontal)\r\n if (this.position) {\r\n const posH = this.position.horizontal;\r\n const posHChildren: XMLElement[] = [];\r\n\r\n if (posH.offset !== undefined) {\r\n posHChildren.push({\r\n name: 'wp:posOffset',\r\n children: [posH.offset.toString()],\r\n });\r\n } else if (posH.alignment) {\r\n posHChildren.push({\r\n name: 'wp:align',\r\n children: [posH.alignment],\r\n });\r\n }\r\n\r\n children.push({\r\n name: 'wp:positionH',\r\n attributes: {\r\n relativeFrom: posH.anchor,\r\n },\r\n children: posHChildren,\r\n });\r\n }\r\n\r\n // Position V (vertical)\r\n if (this.position) {\r\n const posV = this.position.vertical;\r\n const posVChildren: XMLElement[] = [];\r\n\r\n if (posV.offset !== undefined) {\r\n posVChildren.push({\r\n name: 'wp:posOffset',\r\n children: [posV.offset.toString()],\r\n });\r\n } else if (posV.alignment) {\r\n posVChildren.push({\r\n name: 'wp:align',\r\n children: [posV.alignment],\r\n });\r\n }\r\n\r\n children.push({\r\n name: 'wp:positionV',\r\n attributes: {\r\n relativeFrom: posV.anchor,\r\n },\r\n children: posVChildren,\r\n });\r\n }\r\n\r\n // Extent (size)\r\n children.push({\r\n name: 'wp:extent',\r\n attributes: {\r\n cx: this.width.toString(),\r\n cy: this.height.toString(),\r\n },\r\n selfClosing: true,\r\n });\r\n\r\n // Effect extent\r\n children.push({\r\n name: 'wp:effectExtent',\r\n attributes: {\r\n l: '0',\r\n t: '0',\r\n r: '0',\r\n b: '0',\r\n },\r\n selfClosing: true,\r\n });\r\n\r\n // Wrap square (default for text boxes)\r\n children.push({\r\n name: 'wp:wrapSquare',\r\n attributes: {\r\n wrapText: 'bothSides',\r\n },\r\n selfClosing: true,\r\n });\r\n\r\n // Document properties\r\n children.push({\r\n name: 'wp:docPr',\r\n attributes: {\r\n id: this.docPrId.toString(),\r\n name: this.name,\r\n descr: this.description,\r\n },\r\n selfClosing: true,\r\n });\r\n\r\n // Non-visual graphic frame properties\r\n children.push({\r\n name: 'wp:cNvGraphicFramePr',\r\n selfClosing: true,\r\n });\r\n\r\n // Graphic data (the text box)\r\n children.push(this.createGraphic());\r\n\r\n return {\r\n name: 'wp:anchor',\r\n attributes: {\r\n distT: '0',\r\n distB: '0',\r\n distL: '0',\r\n distR: '0',\r\n simplePos: '0',\r\n relativeHeight: anchorConfig.relativeHeight.toString(),\r\n behindDoc: anchorConfig.behindDoc ? '1' : '0',\r\n locked: anchorConfig.locked ? '1' : '0',\r\n layoutInCell: anchorConfig.layoutInCell ? '1' : '0',\r\n allowOverlap: anchorConfig.allowOverlap ? '1' : '0',\r\n },\r\n children,\r\n };\r\n }\r\n\r\n /**\r\n * Creates the a:graphic element containing the text box\r\n * @private\r\n */\r\n private createGraphic(): XMLElement {\r\n return {\r\n name: 'a:graphic',\r\n attributes: {\r\n 'xmlns:a': 'http://schemas.openxmlformats.org/drawingml/2006/main',\r\n },\r\n children: [\r\n {\r\n name: 'a:graphicData',\r\n attributes: {\r\n uri: 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',\r\n },\r\n children: [this.createWps()],\r\n },\r\n ],\r\n };\r\n }\r\n\r\n /**\r\n * Creates the wps:wsp element (WordprocessingShape for text box)\r\n * @private\r\n */\r\n private createWps(): XMLElement {\r\n const children: XMLElement[] = [];\r\n\r\n // Non-visual shape properties\r\n children.push({\r\n name: 'wps:cNvSpPr',\r\n attributes: {\r\n 'xmlns:wps': 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',\r\n txBox: '1', // Indicates this is a text box\r\n },\r\n selfClosing: true,\r\n });\r\n\r\n // Shape properties (size, fill, borders)\r\n children.push(this.createSpPr());\r\n\r\n // Text box content\r\n children.push(this.createTextBoxContent());\r\n\r\n // Body properties (margins/insets)\r\n children.push(this.createBodyPr());\r\n\r\n return {\r\n name: 'wps:wsp',\r\n attributes: {\r\n 'xmlns:wps': 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',\r\n },\r\n children,\r\n };\r\n }\r\n\r\n /**\r\n * Creates the wps:bodyPr element (text body properties including margins)\r\n * Per ECMA-376 Part 4, bodyPr specifies inset margins via lIns/tIns/rIns/bIns attributes\r\n * @private\r\n */\r\n private createBodyPr(): XMLElement {\r\n const attrs: Record<string, string> = {\r\n rot: '0',\r\n vert: 'horz',\r\n wrap: 'square',\r\n anchor: 't',\r\n };\r\n\r\n // Add margin insets if set\r\n if (this.margins) {\r\n if (this.margins.left !== undefined) attrs.lIns = this.margins.left.toString();\r\n if (this.margins.top !== undefined) attrs.tIns = this.margins.top.toString();\r\n if (this.margins.right !== undefined) attrs.rIns = this.margins.right.toString();\r\n if (this.margins.bottom !== undefined) attrs.bIns = this.margins.bottom.toString();\r\n }\r\n\r\n return {\r\n name: 'wps:bodyPr',\r\n attributes: attrs,\r\n selfClosing: true,\r\n };\r\n }\r\n\r\n /**\r\n * Creates the wps:spPr element (shape properties for text box)\r\n * @private\r\n */\r\n private createSpPr(): XMLElement {\r\n const children: XMLElement[] = [];\r\n\r\n // Transform (position and size)\r\n children.push({\r\n name: 'a:xfrm',\r\n children: [\r\n {\r\n name: 'a:off',\r\n attributes: { x: '0', y: '0' },\r\n selfClosing: true,\r\n },\r\n {\r\n name: 'a:ext',\r\n attributes: {\r\n cx: this.width.toString(),\r\n cy: this.height.toString(),\r\n },\r\n selfClosing: true,\r\n },\r\n ],\r\n });\r\n\r\n // Preset geometry (rectangle for text box)\r\n children.push({\r\n name: 'a:prstGeom',\r\n attributes: {\r\n prst: 'rect',\r\n },\r\n children: [\r\n {\r\n name: 'a:avLst',\r\n selfClosing: true,\r\n },\r\n ],\r\n });\r\n\r\n // Fill\r\n if (this.fill) {\r\n const fillChildren: XMLElement[] = [];\r\n\r\n // Transparency\r\n if (this.fill.transparency !== undefined) {\r\n const alpha = 100 - this.fill.transparency;\r\n fillChildren.push({\r\n name: 'a:alpha',\r\n attributes: {\r\n val: Math.round(alpha * 1000).toString(),\r\n },\r\n selfClosing: true,\r\n });\r\n }\r\n\r\n children.push({\r\n name: 'a:solidFill',\r\n children: [\r\n {\r\n name: 'a:srgbClr',\r\n attributes: {\r\n val: this.fill.color.toUpperCase(),\r\n },\r\n ...(fillChildren.length > 0 ? { children: fillChildren } : { selfClosing: true }),\r\n },\r\n ],\r\n });\r\n } else {\r\n // No fill (transparent background)\r\n children.push({\r\n name: 'a:noFill',\r\n selfClosing: true,\r\n });\r\n }\r\n\r\n // Borders\r\n if (this.borders?.size !== undefined) {\r\n const lnAttrs: Record<string, string> = {\r\n w: (this.borders.size * UNITS.EMUS_PER_POINT).toString(), // Convert points to EMUs\r\n };\r\n\r\n const lnChildren: XMLElement[] = [];\r\n\r\n // Border color\r\n lnChildren.push({\r\n name: 'a:solidFill',\r\n children: [\r\n {\r\n name: 'a:srgbClr',\r\n attributes: {\r\n val: (this.borders.color || '000000').toUpperCase(),\r\n },\r\n selfClosing: true,\r\n },\r\n ],\r\n });\r\n\r\n // Border style\r\n if (this.borders.style && this.borders.style !== 'single') {\r\n const dashMap: Record<string, string> = {\r\n dash: 'dash',\r\n dot: 'dot',\r\n dashDot: 'dashDot',\r\n dashDotDot: 'lgDashDotDot',\r\n };\r\n const dashStyle = dashMap[this.borders.style] || 'solid';\r\n if (dashStyle !== 'solid') {\r\n lnChildren.push({\r\n name: 'a:prstDash',\r\n attributes: {\r\n val: dashStyle,\r\n },\r\n selfClosing: true,\r\n });\r\n }\r\n }\r\n\r\n children.push({\r\n name: 'a:ln',\r\n attributes: lnAttrs,\r\n children: lnChildren,\r\n });\r\n }\r\n\r\n return {\r\n name: 'wps:spPr',\r\n children,\r\n };\r\n }\r\n\r\n /**\r\n * Creates the wps:txbx element (text box content)\r\n * @private\r\n */\r\n private createTextBoxContent(): XMLElement {\r\n if (this.paragraphs.length === 0) {\r\n // Empty text box - create empty paragraph\r\n return {\r\n name: 'wps:txbx',\r\n children: [\r\n {\r\n name: 'w:txbxContent',\r\n children: [\r\n XMLBuilder.w('p', undefined, [\r\n XMLBuilder.w('r', undefined, [\r\n XMLBuilder.w('t', undefined, [''])\r\n ])\r\n ])\r\n ],\r\n },\r\n ],\r\n };\r\n }\r\n\r\n // Convert paragraphs to XML\r\n const paragraphXml = this.paragraphs.map(p => p.toXML());\r\n\r\n return {\r\n name: 'wps:txbx',\r\n children: [\r\n {\r\n name: 'w:txbxContent',\r\n children: paragraphXml,\r\n },\r\n ],\r\n };\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"TextBox.js","sourceRoot":"","sources":["../../src/elements/TextBox.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * TextBox - Represents a floating text box in a Word document\n *\n * Text boxes use DrawingML (a:) and WordprocessingML Drawing (wp:) namespaces,\n * plus WordprocessingShape (wps:) namespace for Word 2010+ features.\n *\n * Per ECMA-376 Part 4 (Transitional) and Office Open XML extensions,\n * text boxes in Word documents use the wps:wsp element with wps:txbx content.\n */\n\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder';\nimport { UNITS } from '../utils/units';\nimport { Paragraph } from './Paragraph';\nimport {\n ImagePosition,\n ImageAnchor,\n PositionAnchor,\n HorizontalAlignment,\n VerticalAlignment,\n} from './Image';\nimport { BorderDefinition } from './Paragraph';\n\n/**\n * TextBox margins configuration\n */\nexport interface TextBoxMargins {\n /** Top margin in EMUs */\n top: number;\n /** Bottom margin in EMUs */\n bottom: number;\n /** Left margin in EMUs */\n left: number;\n /** Right margin in EMUs */\n right: number;\n}\n\n/**\n * TextBox fill configuration\n */\nexport interface TextBoxFill {\n /** Fill color in hex (e.g., 'F0F0F0') */\n color: string;\n /** Transparency percentage (0-100) */\n transparency?: number;\n}\n\n/**\n * TextBox properties\n */\nexport interface TextBoxProperties {\n /** Width in EMUs */\n width: number;\n /** Height in EMUs */\n height: number;\n /** Paragraphs within the text box */\n paragraphs?: Paragraph[];\n /** Position configuration */\n position?: ImagePosition;\n /** Anchor configuration */\n anchor?: ImageAnchor;\n /** Fill color and transparency */\n fill?: TextBoxFill;\n /** Border configuration */\n borders?: BorderDefinition;\n /** Internal margins */\n margins?: TextBoxMargins;\n /** TextBox name */\n name?: string;\n /** TextBox description (for accessibility) */\n description?: string;\n}\n\n/**\n * Represents a floating text box\n */\nexport class TextBox {\n private width: number;\n private height: number;\n private paragraphs: Paragraph[] = [];\n private position?: ImagePosition;\n private anchor?: ImageAnchor;\n private fill?: TextBoxFill;\n private borders?: BorderDefinition;\n private margins?: TextBoxMargins;\n private name: string;\n private description: string;\n private docPrId = 1;\n\n /**\n * Creates a new text box\n * @param properties TextBox properties\n * @private Use static factory methods instead (create)\n */\n private constructor(properties: TextBoxProperties) {\n this.width = properties.width;\n this.height = properties.height;\n if (properties.paragraphs) {\n this.paragraphs = properties.paragraphs;\n }\n this.position = properties.position;\n this.anchor = properties.anchor;\n this.fill = properties.fill;\n this.borders = properties.borders;\n this.margins = properties.margins;\n this.name = properties.name || 'TextBox';\n this.description = properties.description || '';\n }\n\n /**\n * Factory method for creating a text box\n * @param width Width in EMUs\n * @param height Height in EMUs\n * @returns New TextBox instance\n * @example\n * const textbox = TextBox.create(inchesToEmus(3), inchesToEmus(2));\n */\n static create(width: number, height: number): TextBox {\n return new TextBox({ width, height });\n }\n\n /**\n * Gets the width in EMUs\n * @returns Width\n */\n getWidth(): number {\n return this.width;\n }\n\n /**\n * Gets the height in EMUs\n * @returns Height\n */\n getHeight(): number {\n return this.height;\n }\n\n /**\n * Adds a paragraph to the text box\n * @param paragraph Paragraph to add\n * @returns This text box for chaining\n */\n addParagraph(paragraph: Paragraph): this {\n this.paragraphs.push(paragraph);\n return this;\n }\n\n /**\n * Gets all paragraphs\n * @returns Array of paragraphs\n */\n getParagraphs(): Paragraph[] {\n return this.paragraphs;\n }\n\n /**\n * Sets text box position (for floating text boxes)\n * @param horizontal Horizontal positioning configuration\n * @param vertical Vertical positioning configuration\n * @returns This text box for chaining\n */\n setPosition(\n horizontal: { anchor: PositionAnchor; offset?: number; alignment?: HorizontalAlignment },\n vertical: { anchor: PositionAnchor; offset?: number; alignment?: VerticalAlignment }\n ): this {\n this.position = { horizontal, vertical };\n return this;\n }\n\n /**\n * Gets the position configuration\n * @returns Position or undefined\n */\n getPosition(): ImagePosition | undefined {\n return this.position;\n }\n\n /**\n * Sets anchor configuration\n * @param options Anchor configuration\n * @returns This text box for chaining\n */\n setAnchor(options: ImageAnchor): this {\n this.anchor = options;\n return this;\n }\n\n /**\n * Gets the anchor configuration\n * @returns Anchor configuration or undefined\n */\n getAnchor(): ImageAnchor | undefined {\n return this.anchor;\n }\n\n /**\n * Sets the fill color\n * @param color Fill color in hex\n * @param transparency Optional transparency percentage (0-100)\n * @returns This text box for chaining\n */\n setFill(color: string, transparency?: number): this {\n this.fill = { color, transparency };\n return this;\n }\n\n /**\n * Gets the fill configuration\n * @returns Fill or undefined\n */\n getFill(): TextBoxFill | undefined {\n return this.fill;\n }\n\n /**\n * Sets the borders\n * @param borders Border configuration\n * @returns This text box for chaining\n */\n setBorders(borders: BorderDefinition): this {\n this.borders = borders;\n return this;\n }\n\n /**\n * Gets the borders configuration\n * @returns Borders or undefined\n */\n getBorders(): BorderDefinition | undefined {\n return this.borders;\n }\n\n /**\n * Sets internal margins\n * @param margins Margin configuration\n * @returns This text box for chaining\n */\n setMargins(margins: TextBoxMargins): this {\n this.margins = margins;\n return this;\n }\n\n /**\n * Gets the margins configuration\n * @returns Margins or undefined\n */\n getMargins(): TextBoxMargins | undefined {\n return this.margins;\n }\n\n /**\n * Sets the text box name\n * @param name TextBox name\n * @returns This text box for chaining\n */\n setName(name: string): this {\n this.name = name;\n return this;\n }\n\n /**\n * Gets the text box name\n * @returns TextBox name\n */\n getName(): string {\n return this.name;\n }\n\n /**\n * Sets the text box description (for accessibility)\n * @param description TextBox description\n * @returns This text box for chaining\n */\n setDescription(description: string): this {\n this.description = description;\n return this;\n }\n\n /**\n * Gets the text box description\n * @returns TextBox description\n */\n getDescription(): string {\n return this.description;\n }\n\n /**\n * Sets the docPr ID (drawing object ID)\n * @param id Document property ID\n * @returns This text box for chaining\n */\n setDocPrId(id: number): this {\n this.docPrId = id;\n return this;\n }\n\n /**\n * Checks if this text box is floating (has anchor or position configuration)\n * @returns True if floating, false if inline\n */\n isFloating(): boolean {\n return this.anchor !== undefined || this.position !== undefined;\n }\n\n /**\n * Generates DrawingML XML for the text box\n * Creates either inline or floating (anchor) text box based on configuration\n * @returns XML element representing the text box\n */\n toXML(): XMLElement {\n // Text boxes are typically floating, but support inline as well\n const textboxElement = this.isFloating() ? this.createAnchor() : this.createInline();\n\n // Create the drawing structure\n return XMLBuilder.w('drawing', undefined, [textboxElement]);\n }\n\n /**\n * Creates the wp:inline element for inline text boxes\n * @private\n */\n private createInline(): XMLElement {\n const children: XMLElement[] = [];\n\n // Extent (size)\n children.push({\n name: 'wp:extent',\n attributes: {\n cx: this.width.toString(),\n cy: this.height.toString(),\n },\n selfClosing: true,\n });\n\n // Effect extent\n children.push({\n name: 'wp:effectExtent',\n attributes: {\n l: '0',\n t: '0',\n r: '0',\n b: '0',\n },\n selfClosing: true,\n });\n\n // Document properties\n children.push({\n name: 'wp:docPr',\n attributes: {\n id: this.docPrId.toString(),\n name: this.name,\n descr: this.description,\n },\n selfClosing: true,\n });\n\n // Non-visual graphic frame properties\n children.push({\n name: 'wp:cNvGraphicFramePr',\n selfClosing: true,\n });\n\n // Graphic data (the text box)\n children.push(this.createGraphic());\n\n return {\n name: 'wp:inline',\n attributes: {\n distT: '0',\n distB: '0',\n distL: '0',\n distR: '0',\n },\n children,\n };\n }\n\n /**\n * Creates the wp:anchor element for floating text boxes\n * @private\n */\n private createAnchor(): XMLElement {\n const children: XMLElement[] = [];\n\n const anchorConfig = this.anchor || {\n behindDoc: false,\n locked: false,\n layoutInCell: true,\n allowOverlap: false,\n relativeHeight: 251658240,\n };\n\n // Position H (horizontal)\n if (this.position) {\n const posH = this.position.horizontal;\n const posHChildren: XMLElement[] = [];\n\n if (posH.offset !== undefined) {\n posHChildren.push({\n name: 'wp:posOffset',\n children: [posH.offset.toString()],\n });\n } else if (posH.alignment) {\n posHChildren.push({\n name: 'wp:align',\n children: [posH.alignment],\n });\n }\n\n children.push({\n name: 'wp:positionH',\n attributes: {\n relativeFrom: posH.anchor,\n },\n children: posHChildren,\n });\n }\n\n // Position V (vertical)\n if (this.position) {\n const posV = this.position.vertical;\n const posVChildren: XMLElement[] = [];\n\n if (posV.offset !== undefined) {\n posVChildren.push({\n name: 'wp:posOffset',\n children: [posV.offset.toString()],\n });\n } else if (posV.alignment) {\n posVChildren.push({\n name: 'wp:align',\n children: [posV.alignment],\n });\n }\n\n children.push({\n name: 'wp:positionV',\n attributes: {\n relativeFrom: posV.anchor,\n },\n children: posVChildren,\n });\n }\n\n // Extent (size)\n children.push({\n name: 'wp:extent',\n attributes: {\n cx: this.width.toString(),\n cy: this.height.toString(),\n },\n selfClosing: true,\n });\n\n // Effect extent\n children.push({\n name: 'wp:effectExtent',\n attributes: {\n l: '0',\n t: '0',\n r: '0',\n b: '0',\n },\n selfClosing: true,\n });\n\n // Wrap square (default for text boxes)\n children.push({\n name: 'wp:wrapSquare',\n attributes: {\n wrapText: 'bothSides',\n },\n selfClosing: true,\n });\n\n // Document properties\n children.push({\n name: 'wp:docPr',\n attributes: {\n id: this.docPrId.toString(),\n name: this.name,\n descr: this.description,\n },\n selfClosing: true,\n });\n\n // Non-visual graphic frame properties\n children.push({\n name: 'wp:cNvGraphicFramePr',\n selfClosing: true,\n });\n\n // Graphic data (the text box)\n children.push(this.createGraphic());\n\n return {\n name: 'wp:anchor',\n attributes: {\n distT: '0',\n distB: '0',\n distL: '0',\n distR: '0',\n simplePos: '0',\n relativeHeight: anchorConfig.relativeHeight.toString(),\n behindDoc: anchorConfig.behindDoc ? '1' : '0',\n locked: anchorConfig.locked ? '1' : '0',\n layoutInCell: anchorConfig.layoutInCell ? '1' : '0',\n allowOverlap: anchorConfig.allowOverlap ? '1' : '0',\n },\n children,\n };\n }\n\n /**\n * Creates the a:graphic element containing the text box\n * @private\n */\n private createGraphic(): XMLElement {\n return {\n name: 'a:graphic',\n attributes: {\n 'xmlns:a': 'http://schemas.openxmlformats.org/drawingml/2006/main',\n },\n children: [\n {\n name: 'a:graphicData',\n attributes: {\n uri: 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',\n },\n children: [this.createWps()],\n },\n ],\n };\n }\n\n /**\n * Creates the wps:wsp element (WordprocessingShape for text box)\n * @private\n */\n private createWps(): XMLElement {\n const children: XMLElement[] = [];\n\n // Non-visual shape properties\n children.push({\n name: 'wps:cNvSpPr',\n attributes: {\n 'xmlns:wps': 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',\n txBox: '1', // Indicates this is a text box\n },\n selfClosing: true,\n });\n\n // Shape properties (size, fill, borders)\n children.push(this.createSpPr());\n\n // Text box content\n children.push(this.createTextBoxContent());\n\n // Body properties (margins/insets)\n children.push(this.createBodyPr());\n\n return {\n name: 'wps:wsp',\n attributes: {\n 'xmlns:wps': 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape',\n },\n children,\n };\n }\n\n /**\n * Creates the wps:bodyPr element (text body properties including margins)\n * Per ECMA-376 Part 4, bodyPr specifies inset margins via lIns/tIns/rIns/bIns attributes\n * @private\n */\n private createBodyPr(): XMLElement {\n const attrs: Record<string, string> = {\n rot: '0',\n vert: 'horz',\n wrap: 'square',\n anchor: 't',\n };\n\n // Add margin insets if set\n if (this.margins) {\n if (this.margins.left !== undefined) attrs.lIns = this.margins.left.toString();\n if (this.margins.top !== undefined) attrs.tIns = this.margins.top.toString();\n if (this.margins.right !== undefined) attrs.rIns = this.margins.right.toString();\n if (this.margins.bottom !== undefined) attrs.bIns = this.margins.bottom.toString();\n }\n\n return {\n name: 'wps:bodyPr',\n attributes: attrs,\n selfClosing: true,\n };\n }\n\n /**\n * Creates the wps:spPr element (shape properties for text box)\n * @private\n */\n private createSpPr(): XMLElement {\n const children: XMLElement[] = [];\n\n // Transform (position and size)\n children.push({\n name: 'a:xfrm',\n children: [\n {\n name: 'a:off',\n attributes: { x: '0', y: '0' },\n selfClosing: true,\n },\n {\n name: 'a:ext',\n attributes: {\n cx: this.width.toString(),\n cy: this.height.toString(),\n },\n selfClosing: true,\n },\n ],\n });\n\n // Preset geometry (rectangle for text box)\n children.push({\n name: 'a:prstGeom',\n attributes: {\n prst: 'rect',\n },\n children: [\n {\n name: 'a:avLst',\n selfClosing: true,\n },\n ],\n });\n\n // Fill\n if (this.fill) {\n const fillChildren: XMLElement[] = [];\n\n // Transparency\n if (this.fill.transparency !== undefined) {\n const alpha = 100 - this.fill.transparency;\n fillChildren.push({\n name: 'a:alpha',\n attributes: {\n val: Math.round(alpha * 1000).toString(),\n },\n selfClosing: true,\n });\n }\n\n children.push({\n name: 'a:solidFill',\n children: [\n {\n name: 'a:srgbClr',\n attributes: {\n val: this.fill.color.toUpperCase(),\n },\n ...(fillChildren.length > 0 ? { children: fillChildren } : { selfClosing: true }),\n },\n ],\n });\n } else {\n // No fill (transparent background)\n children.push({\n name: 'a:noFill',\n selfClosing: true,\n });\n }\n\n // Borders\n if (this.borders?.size !== undefined) {\n const lnAttrs: Record<string, string> = {\n w: (this.borders.size * UNITS.EMUS_PER_POINT).toString(), // Convert points to EMUs\n };\n\n const lnChildren: XMLElement[] = [];\n\n // Border color\n lnChildren.push({\n name: 'a:solidFill',\n children: [\n {\n name: 'a:srgbClr',\n attributes: {\n val: (this.borders.color || '000000').toUpperCase(),\n },\n selfClosing: true,\n },\n ],\n });\n\n // Border style\n if (this.borders.style && this.borders.style !== 'single') {\n const dashMap: Record<string, string> = {\n dash: 'dash',\n dot: 'dot',\n dashDot: 'dashDot',\n dashDotDot: 'lgDashDotDot',\n };\n const dashStyle = dashMap[this.borders.style] || 'solid';\n if (dashStyle !== 'solid') {\n lnChildren.push({\n name: 'a:prstDash',\n attributes: {\n val: dashStyle,\n },\n selfClosing: true,\n });\n }\n }\n\n children.push({\n name: 'a:ln',\n attributes: lnAttrs,\n children: lnChildren,\n });\n }\n\n return {\n name: 'wps:spPr',\n children,\n };\n }\n\n /**\n * Creates the wps:txbx element (text box content)\n * @private\n */\n private createTextBoxContent(): XMLElement {\n if (this.paragraphs.length === 0) {\n // Empty text box - create empty paragraph\n return {\n name: 'wps:txbx',\n children: [\n {\n name: 'w:txbxContent',\n children: [\n XMLBuilder.w('p', undefined, [\n XMLBuilder.w('r', undefined, [XMLBuilder.w('t', undefined, [''])]),\n ]),\n ],\n },\n ],\n };\n }\n\n // Convert paragraphs to XML\n const paragraphXml = this.paragraphs.map((p) => p.toXML());\n\n return {\n name: 'wps:txbx',\n children: [\n {\n name: 'w:txbxContent',\n children: paragraphXml,\n },\n ],\n };\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { XMLElement } from
|
|
2
|
-
import { NumberingLevel } from
|
|
1
|
+
import { XMLElement } from '../xml/XMLBuilder';
|
|
2
|
+
import { NumberingLevel } from './NumberingLevel';
|
|
3
3
|
export interface AbstractNumberingProperties {
|
|
4
4
|
abstractNumId: number;
|
|
5
5
|
name?: string;
|
|
@@ -24,7 +24,7 @@ export declare class AbstractNumbering {
|
|
|
24
24
|
getName(): string | undefined;
|
|
25
25
|
setName(name: string): this;
|
|
26
26
|
getMultiLevelType(): string;
|
|
27
|
-
setMultiLevelType(type:
|
|
27
|
+
setMultiLevelType(type: 'multilevel' | 'singleLevel' | 'hybridMultilevel'): this;
|
|
28
28
|
getNumStyleLink(): string | undefined;
|
|
29
29
|
setNumStyleLink(link: string | undefined): this;
|
|
30
30
|
getStyleLink(): string | undefined;
|
|
@@ -41,7 +41,7 @@ export declare class AbstractNumbering {
|
|
|
41
41
|
removeLevel(levelIndex: number): boolean;
|
|
42
42
|
toXML(): XMLElement;
|
|
43
43
|
static createBulletList(abstractNumId: number, levels?: number, bullets?: string[]): AbstractNumbering;
|
|
44
|
-
static createNumberedList(abstractNumId: number, levels?: number, formats?: (
|
|
44
|
+
static createNumberedList(abstractNumId: number, levels?: number, formats?: ('decimal' | 'lowerLetter' | 'lowerRoman' | 'upperLetter' | 'upperRoman')[]): AbstractNumbering;
|
|
45
45
|
static createMultiLevelList(abstractNumId: number): AbstractNumbering;
|
|
46
46
|
static createOutlineList(abstractNumId: number): AbstractNumbering;
|
|
47
47
|
static create(properties: AbstractNumberingProperties): AbstractNumbering;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractNumbering.d.ts","sourceRoot":"","sources":["../../src/formatting/AbstractNumbering.ts"],"names":[],"mappings":"AAQA,OAAO,EAAc,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMlD,MAAM,WAAW,2BAA2B;IAE1C,aAAa,EAAE,MAAM,CAAC;IAGtB,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAG1B,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAQD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,IAAI,CAAC,CAAS;IACtB,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAS;gBAOV,SAAS,EAAE,MAAM,GAAG,2BAA2B,EAAE,IAAI,CAAC,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"AbstractNumbering.d.ts","sourceRoot":"","sources":["../../src/formatting/AbstractNumbering.ts"],"names":[],"mappings":"AAQA,OAAO,EAAc,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMlD,MAAM,WAAW,2BAA2B;IAE1C,aAAa,EAAE,MAAM,CAAC;IAGtB,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAG1B,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAQD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,IAAI,CAAC,CAAS;IACtB,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAS;gBAOV,SAAS,EAAE,MAAM,GAAG,2BAA2B,EAAE,IAAI,CAAC,EAAE,MAAM;IAgC1E,OAAO,CAAC,QAAQ;IAahB,gBAAgB,IAAI,MAAM;IAO1B,KAAK,IAAI,MAAM;IAOf,OAAO,IAAI,MAAM,GAAG,SAAS;IAQ7B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ3B,iBAAiB,IAAI,MAAM;IAc3B,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,GAAG,kBAAkB,GAAG,IAAI;IAchF,eAAe,IAAI,MAAM,GAAG,SAAS;IAQrC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAQ/C,YAAY,IAAI,MAAM,GAAG,SAAS;IAQlC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAQ5C,WAAW,IAAI,MAAM,GAAG,SAAS;IAQjC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAS/B,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAerC,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IASzC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAOxD,YAAY,IAAI,cAAc,EAAE;IAOhC,SAAS,IAAI,cAAc,EAAE;IAO7B,aAAa,IAAI,MAAM;IAQvB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAQrC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAOxC,KAAK,IAAI,UAAU;IAgFnB,MAAM,CAAC,gBAAgB,CACrB,aAAa,EAAE,MAAM,EACrB,MAAM,SAAI,EACV,OAAO,CAAC,EAAE,MAAM,EAAE,GACjB,iBAAiB;IA2BpB,MAAM,CAAC,kBAAkB,CACvB,aAAa,EAAE,MAAM,EACrB,MAAM,SAAI,EACV,OAAO,GAAE,CAAC,SAAS,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa,GAAG,YAAY,CAAC,EAMjF,GACA,iBAAiB;IAyCpB,MAAM,CAAC,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB;IA0BrE,MAAM,CAAC,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB;IAyClE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,2BAA2B,GAAG,iBAAiB;IASzE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB;CA+D/C"}
|
|
@@ -13,7 +13,7 @@ class AbstractNumbering {
|
|
|
13
13
|
styleLink;
|
|
14
14
|
tmpl;
|
|
15
15
|
constructor(idOrProps, name) {
|
|
16
|
-
if (typeof idOrProps ===
|
|
16
|
+
if (typeof idOrProps === 'number') {
|
|
17
17
|
this.abstractNumId = idOrProps;
|
|
18
18
|
this.name = name;
|
|
19
19
|
this.levels = new Map();
|
|
@@ -24,8 +24,7 @@ class AbstractNumbering {
|
|
|
24
24
|
this.abstractNumId = properties.abstractNumId;
|
|
25
25
|
this.name = properties.name;
|
|
26
26
|
this.levels = new Map();
|
|
27
|
-
this.multiLevelType =
|
|
28
|
-
properties.multiLevelType !== undefined ? properties.multiLevelType : 1;
|
|
27
|
+
this.multiLevelType = properties.multiLevelType !== undefined ? properties.multiLevelType : 1;
|
|
29
28
|
this.numStyleLink = properties.numStyleLink;
|
|
30
29
|
this.styleLink = properties.styleLink;
|
|
31
30
|
this.tmpl = properties.tmpl;
|
|
@@ -39,10 +38,10 @@ class AbstractNumbering {
|
|
|
39
38
|
}
|
|
40
39
|
validate() {
|
|
41
40
|
if (this.abstractNumId < 0) {
|
|
42
|
-
throw new Error(
|
|
41
|
+
throw new Error('Abstract numbering ID must be non-negative');
|
|
43
42
|
}
|
|
44
43
|
if (this.levels.size > 9) {
|
|
45
|
-
throw new Error(
|
|
44
|
+
throw new Error('Cannot have more than 9 levels (0-8)');
|
|
46
45
|
}
|
|
47
46
|
}
|
|
48
47
|
getAbstractNumId() {
|
|
@@ -60,20 +59,20 @@ class AbstractNumbering {
|
|
|
60
59
|
}
|
|
61
60
|
getMultiLevelType() {
|
|
62
61
|
if (this.multiLevelType === 1) {
|
|
63
|
-
return
|
|
62
|
+
return 'multilevel';
|
|
64
63
|
}
|
|
65
64
|
else if (this.multiLevelType === 2) {
|
|
66
|
-
return
|
|
65
|
+
return 'hybridMultilevel';
|
|
67
66
|
}
|
|
68
67
|
else {
|
|
69
|
-
return
|
|
68
|
+
return 'singleLevel';
|
|
70
69
|
}
|
|
71
70
|
}
|
|
72
71
|
setMultiLevelType(type) {
|
|
73
|
-
if (type ===
|
|
72
|
+
if (type === 'multilevel') {
|
|
74
73
|
this.multiLevelType = 1;
|
|
75
74
|
}
|
|
76
|
-
else if (type ===
|
|
75
|
+
else if (type === 'hybridMultilevel') {
|
|
77
76
|
this.multiLevelType = 2;
|
|
78
77
|
}
|
|
79
78
|
else {
|
|
@@ -136,28 +135,28 @@ class AbstractNumbering {
|
|
|
136
135
|
const children = [];
|
|
137
136
|
let multiLevelTypeValue;
|
|
138
137
|
if (this.multiLevelType === 1) {
|
|
139
|
-
multiLevelTypeValue =
|
|
138
|
+
multiLevelTypeValue = 'multilevel';
|
|
140
139
|
}
|
|
141
140
|
else if (this.multiLevelType === 2) {
|
|
142
|
-
multiLevelTypeValue =
|
|
141
|
+
multiLevelTypeValue = 'hybridMultilevel';
|
|
143
142
|
}
|
|
144
143
|
else {
|
|
145
|
-
multiLevelTypeValue =
|
|
144
|
+
multiLevelTypeValue = 'singleLevel';
|
|
146
145
|
}
|
|
147
|
-
children.push(XMLBuilder_1.XMLBuilder.wSelf(
|
|
148
|
-
|
|
146
|
+
children.push(XMLBuilder_1.XMLBuilder.wSelf('multiLevelType', {
|
|
147
|
+
'w:val': multiLevelTypeValue,
|
|
149
148
|
}));
|
|
150
149
|
if (this.tmpl) {
|
|
151
|
-
children.push(XMLBuilder_1.XMLBuilder.wSelf(
|
|
150
|
+
children.push(XMLBuilder_1.XMLBuilder.wSelf('tmpl', { 'w:val': this.tmpl }));
|
|
152
151
|
}
|
|
153
152
|
if (this.name) {
|
|
154
|
-
children.push(XMLBuilder_1.XMLBuilder.wSelf(
|
|
153
|
+
children.push(XMLBuilder_1.XMLBuilder.wSelf('name', { 'w:val': this.name }));
|
|
155
154
|
}
|
|
156
155
|
if (this.styleLink) {
|
|
157
|
-
children.push(XMLBuilder_1.XMLBuilder.wSelf(
|
|
156
|
+
children.push(XMLBuilder_1.XMLBuilder.wSelf('styleLink', { 'w:val': this.styleLink }));
|
|
158
157
|
}
|
|
159
158
|
if (this.numStyleLink) {
|
|
160
|
-
children.push(XMLBuilder_1.XMLBuilder.wSelf(
|
|
159
|
+
children.push(XMLBuilder_1.XMLBuilder.wSelf('numStyleLink', { 'w:val': this.numStyleLink }));
|
|
161
160
|
}
|
|
162
161
|
const sortedLevels = this.getAllLevels();
|
|
163
162
|
sortedLevels.forEach((level) => {
|
|
@@ -166,17 +165,17 @@ class AbstractNumbering {
|
|
|
166
165
|
if (sortedLevels.length === 0) {
|
|
167
166
|
children.push(NumberingLevel_1.NumberingLevel.createDecimalLevel(0).toXML());
|
|
168
167
|
}
|
|
169
|
-
return XMLBuilder_1.XMLBuilder.w(
|
|
168
|
+
return XMLBuilder_1.XMLBuilder.w('abstractNum', { 'w:abstractNumId': this.abstractNumId.toString() }, children);
|
|
170
169
|
}
|
|
171
170
|
static createBulletList(abstractNumId, levels = 9, bullets) {
|
|
172
171
|
const abstractNum = new AbstractNumbering({
|
|
173
172
|
abstractNumId,
|
|
174
|
-
name:
|
|
173
|
+
name: 'Bullet List',
|
|
175
174
|
multiLevelType: 1,
|
|
176
175
|
});
|
|
177
176
|
for (let i = 0; i < levels && i < 9; i++) {
|
|
178
177
|
if (bullets && bullets.length > 0) {
|
|
179
|
-
const bullet = bullets[i % bullets.length] ||
|
|
178
|
+
const bullet = bullets[i % bullets.length] || '•';
|
|
180
179
|
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createBulletLevel(i, bullet));
|
|
181
180
|
}
|
|
182
181
|
else {
|
|
@@ -185,30 +184,36 @@ class AbstractNumbering {
|
|
|
185
184
|
}
|
|
186
185
|
return abstractNum;
|
|
187
186
|
}
|
|
188
|
-
static createNumberedList(abstractNumId, levels = 9, formats = [
|
|
187
|
+
static createNumberedList(abstractNumId, levels = 9, formats = [
|
|
188
|
+
'decimal',
|
|
189
|
+
'lowerLetter',
|
|
190
|
+
'lowerRoman',
|
|
191
|
+
'upperLetter',
|
|
192
|
+
'upperRoman',
|
|
193
|
+
]) {
|
|
189
194
|
const abstractNum = new AbstractNumbering({
|
|
190
195
|
abstractNumId,
|
|
191
|
-
name:
|
|
196
|
+
name: 'Numbered List',
|
|
192
197
|
multiLevelType: 1,
|
|
193
198
|
});
|
|
194
199
|
for (let i = 0; i < levels && i < 9; i++) {
|
|
195
|
-
const format = formats[i % formats.length] ||
|
|
200
|
+
const format = formats[i % formats.length] || 'decimal';
|
|
196
201
|
const template = `%${i + 1}.`;
|
|
197
202
|
let level;
|
|
198
203
|
switch (format) {
|
|
199
|
-
case
|
|
204
|
+
case 'lowerLetter':
|
|
200
205
|
level = NumberingLevel_1.NumberingLevel.createLowerLetterLevel(i, template);
|
|
201
206
|
break;
|
|
202
|
-
case
|
|
207
|
+
case 'lowerRoman':
|
|
203
208
|
level = NumberingLevel_1.NumberingLevel.createLowerRomanLevel(i, template);
|
|
204
209
|
break;
|
|
205
|
-
case
|
|
210
|
+
case 'upperLetter':
|
|
206
211
|
level = NumberingLevel_1.NumberingLevel.createUpperLetterLevel(i, template);
|
|
207
212
|
break;
|
|
208
|
-
case
|
|
213
|
+
case 'upperRoman':
|
|
209
214
|
level = NumberingLevel_1.NumberingLevel.createUpperRomanLevel(i, template);
|
|
210
215
|
break;
|
|
211
|
-
case
|
|
216
|
+
case 'decimal':
|
|
212
217
|
default:
|
|
213
218
|
level = NumberingLevel_1.NumberingLevel.createDecimalLevel(i, template);
|
|
214
219
|
break;
|
|
@@ -220,30 +225,30 @@ class AbstractNumbering {
|
|
|
220
225
|
static createMultiLevelList(abstractNumId) {
|
|
221
226
|
const abstractNum = new AbstractNumbering({
|
|
222
227
|
abstractNumId,
|
|
223
|
-
name:
|
|
228
|
+
name: 'Multi-Level List',
|
|
224
229
|
multiLevelType: 1,
|
|
225
230
|
});
|
|
226
|
-
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createDecimalLevel(0,
|
|
227
|
-
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createLowerLetterLevel(1,
|
|
228
|
-
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createLowerRomanLevel(2,
|
|
229
|
-
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createDecimalLevel(3,
|
|
231
|
+
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createDecimalLevel(0, '%1.'));
|
|
232
|
+
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createLowerLetterLevel(1, '%2.'));
|
|
233
|
+
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createLowerRomanLevel(2, '%3.'));
|
|
234
|
+
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createDecimalLevel(3, '%4.'));
|
|
230
235
|
return abstractNum;
|
|
231
236
|
}
|
|
232
237
|
static createOutlineList(abstractNumId) {
|
|
233
238
|
const abstractNum = new AbstractNumbering({
|
|
234
239
|
abstractNumId,
|
|
235
|
-
name:
|
|
240
|
+
name: 'Outline List',
|
|
236
241
|
multiLevelType: 1,
|
|
237
242
|
});
|
|
238
|
-
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createUpperRomanLevel(0,
|
|
239
|
-
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createUpperLetterLevel(1,
|
|
240
|
-
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createDecimalLevel(2,
|
|
241
|
-
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createLowerLetterLevel(3,
|
|
242
|
-
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createLowerRomanLevel(4,
|
|
243
|
-
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createUpperLetterLevel(5,
|
|
244
|
-
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createDecimalLevel(6,
|
|
245
|
-
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createLowerLetterLevel(7,
|
|
246
|
-
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createLowerRomanLevel(8,
|
|
243
|
+
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createUpperRomanLevel(0, '%1.'));
|
|
244
|
+
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createUpperLetterLevel(1, '%2.'));
|
|
245
|
+
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createDecimalLevel(2, '%3.'));
|
|
246
|
+
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createLowerLetterLevel(3, '%4.'));
|
|
247
|
+
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createLowerRomanLevel(4, '%5.'));
|
|
248
|
+
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createUpperLetterLevel(5, '%6.'));
|
|
249
|
+
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createDecimalLevel(6, '%7.'));
|
|
250
|
+
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createLowerLetterLevel(7, '%8.'));
|
|
251
|
+
abstractNum.addLevel(NumberingLevel_1.NumberingLevel.createLowerRomanLevel(8, '%9.'));
|
|
247
252
|
return abstractNum;
|
|
248
253
|
}
|
|
249
254
|
static create(properties) {
|
|
@@ -252,7 +257,7 @@ class AbstractNumbering {
|
|
|
252
257
|
static fromXML(xml) {
|
|
253
258
|
const abstractNumIdMatch = /<w:abstractNum[^>]*w:abstractNumId="([^"]+)"/.exec(xml);
|
|
254
259
|
if (!abstractNumIdMatch?.[1]) {
|
|
255
|
-
throw new Error(
|
|
260
|
+
throw new Error('Missing required w:abstractNumId attribute');
|
|
256
261
|
}
|
|
257
262
|
const abstractNumId = parseInt(abstractNumIdMatch[1], 10);
|
|
258
263
|
const nameMatch = /<w:name[^>]*w:val="([^"]+)"/.exec(xml);
|
|
@@ -261,11 +266,11 @@ class AbstractNumbering {
|
|
|
261
266
|
let multiLevelType = 1;
|
|
262
267
|
if (multiLevelTypeMatch?.[1]) {
|
|
263
268
|
const value = multiLevelTypeMatch[1];
|
|
264
|
-
if (value ===
|
|
269
|
+
if (value === 'singleLevel')
|
|
265
270
|
multiLevelType = 0;
|
|
266
|
-
else if (value ===
|
|
271
|
+
else if (value === 'multilevel')
|
|
267
272
|
multiLevelType = 1;
|
|
268
|
-
else if (value ===
|
|
273
|
+
else if (value === 'hybridMultilevel')
|
|
269
274
|
multiLevelType = 2;
|
|
270
275
|
}
|
|
271
276
|
const numStyleLinkMatch = /<w:numStyleLink[^>]*w:val="([^"]+)"/.exec(xml);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractNumbering.js","sourceRoot":"","sources":["../../src/formatting/AbstractNumbering.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * AbstractNumbering - Defines a multi-level numbering scheme\r\n *\r\n * An abstract numbering definition is a template that defines up to 9 levels of\r\n * list formatting. It's referenced by numbering instances which link it to actual\r\n * paragraphs in the document.\r\n */\r\n\r\nimport { XMLBuilder, XMLElement } from \"../xml/XMLBuilder\";\r\nimport { NumberingLevel } from \"./NumberingLevel\";\r\nimport { defaultLogger } from \"../utils/logger\";\r\n\r\n/**\r\n * Properties for creating an abstract numbering definition\r\n */\r\nexport interface AbstractNumberingProperties {\r\n /** Unique identifier for this abstract numbering */\r\n abstractNumId: number;\r\n\r\n /** Optional name for the numbering scheme */\r\n name?: string;\r\n\r\n /** The numbering levels (up to 9 levels, 0-8) */\r\n levels?: NumberingLevel[];\r\n\r\n /** Optional multiLevel type (0 = single level, 1 = multilevel) */\r\n multiLevelType?: number;\r\n\r\n /** Optional link to a numbering style definition (ECMA-376 §17.9.21) */\r\n numStyleLink?: string;\r\n\r\n /** Optional link to a style that uses this abstract numbering (ECMA-376 §17.9.27) */\r\n styleLink?: string;\r\n\r\n /** Template code (ECMA-376 §17.9.30) - 8-char hex string identifying the template */\r\n tmpl?: string;\r\n}\r\n\r\n/**\r\n * Represents an abstract numbering definition\r\n *\r\n * Abstract numbering defines the template for a multi-level list. Each instance\r\n * of a list in the document references an abstract numbering definition.\r\n */\r\nexport class AbstractNumbering {\r\n private abstractNumId: number;\r\n private name?: string;\r\n private levels: Map<number, NumberingLevel>;\r\n private multiLevelType: number;\r\n private numStyleLink?: string;\r\n private styleLink?: string;\r\n private tmpl?: string;\r\n\r\n /**\r\n * Creates a new abstract numbering definition\r\n * @param idOrProps The abstract numbering ID (number) or properties object\r\n * @param name Optional name (if first param is a number)\r\n */\r\n constructor(idOrProps: number | AbstractNumberingProperties, name?: string) {\r\n // Support both simple (numId) and object constructor patterns\r\n if (typeof idOrProps === \"number\") {\r\n // Simple constructor: new AbstractNumbering(id)\r\n this.abstractNumId = idOrProps;\r\n this.name = name;\r\n this.levels = new Map();\r\n this.multiLevelType = 1; // default multilevel\r\n } else {\r\n // Object constructor: new AbstractNumbering({ abstractNumId, ... })\r\n const properties = idOrProps;\r\n this.abstractNumId = properties.abstractNumId;\r\n this.name = properties.name;\r\n this.levels = new Map();\r\n this.multiLevelType =\r\n properties.multiLevelType !== undefined ? properties.multiLevelType : 1;\r\n this.numStyleLink = properties.numStyleLink;\r\n this.styleLink = properties.styleLink;\r\n this.tmpl = properties.tmpl;\r\n\r\n if (properties.levels) {\r\n properties.levels.forEach((level) => {\r\n this.addLevel(level);\r\n });\r\n }\r\n }\r\n\r\n this.validate();\r\n }\r\n\r\n /**\r\n * Validates the abstract numbering\r\n */\r\n private validate(): void {\r\n if (this.abstractNumId < 0) {\r\n throw new Error(\"Abstract numbering ID must be non-negative\");\r\n }\r\n\r\n if (this.levels.size > 9) {\r\n throw new Error(\"Cannot have more than 9 levels (0-8)\");\r\n }\r\n }\r\n\r\n /**\r\n * Gets the abstract numbering ID\r\n */\r\n getAbstractNumId(): number {\r\n return this.abstractNumId;\r\n }\r\n\r\n /**\r\n * Alias for getAbstractNumId for backward compatibility\r\n */\r\n getId(): number {\r\n return this.abstractNumId;\r\n }\r\n\r\n /**\r\n * Gets the name\r\n */\r\n getName(): string | undefined {\r\n return this.name;\r\n }\r\n\r\n /**\r\n * Sets the name\r\n * @param name The numbering scheme name\r\n */\r\n setName(name: string): this {\r\n this.name = name;\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the multi-level type\r\n */\r\n getMultiLevelType(): string {\r\n if (this.multiLevelType === 1) {\r\n return \"multilevel\";\r\n } else if (this.multiLevelType === 2) {\r\n return \"hybridMultilevel\";\r\n } else {\r\n return \"singleLevel\";\r\n }\r\n }\r\n\r\n /**\r\n * Sets the multi-level type\r\n * @param type The multi-level type ('multilevel' or 'singleLevel')\r\n */\r\n setMultiLevelType(\r\n type: \"multilevel\" | \"singleLevel\" | \"hybridMultilevel\"\r\n ): this {\r\n if (type === \"multilevel\") {\r\n this.multiLevelType = 1;\r\n } else if (type === \"hybridMultilevel\") {\r\n this.multiLevelType = 2;\r\n } else {\r\n this.multiLevelType = 0;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the numStyleLink (reference to a numbering style definition)\r\n */\r\n getNumStyleLink(): string | undefined {\r\n return this.numStyleLink;\r\n }\r\n\r\n /**\r\n * Sets the numStyleLink\r\n * @param link The numbering style name\r\n */\r\n setNumStyleLink(link: string | undefined): this {\r\n this.numStyleLink = link;\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the styleLink (reference to a style that uses this abstract numbering)\r\n */\r\n getStyleLink(): string | undefined {\r\n return this.styleLink;\r\n }\r\n\r\n /**\r\n * Sets the styleLink\r\n * @param link The style name\r\n */\r\n setStyleLink(link: string | undefined): this {\r\n this.styleLink = link;\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the template code (w:tmpl per ECMA-376 §17.9.30)\r\n */\r\n getTemplate(): string | undefined {\r\n return this.tmpl;\r\n }\r\n\r\n /**\r\n * Sets the template code\r\n * @param tmpl 8-char hex string identifying the template\r\n */\r\n setTemplate(tmpl: string): this {\r\n this.tmpl = tmpl;\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a numbering level\r\n * @param level The numbering level to add\r\n */\r\n addLevel(level: NumberingLevel): this {\r\n const levelIndex = level.getLevel();\r\n\r\n if (levelIndex < 0 || levelIndex > 8) {\r\n throw new Error(`Level must be between 0 and 8, got ${levelIndex}`);\r\n }\r\n\r\n this.levels.set(levelIndex, level);\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds multiple numbering levels at once\r\n * @param levels The numbering levels to add\r\n */\r\n addLevels(levels: NumberingLevel[]): this {\r\n levels.forEach((level) => this.addLevel(level));\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets a numbering level by index\r\n * @param levelIndex The level index (0-8)\r\n */\r\n getLevel(levelIndex: number): NumberingLevel | undefined {\r\n return this.levels.get(levelIndex);\r\n }\r\n\r\n /**\r\n * Gets all levels\r\n */\r\n getAllLevels(): NumberingLevel[] {\r\n return Array.from(this.levels.values()).sort(\r\n (a, b) => a.getLevel() - b.getLevel()\r\n );\r\n }\r\n\r\n /**\r\n * Alias for getAllLevels for backward compatibility\r\n */\r\n getLevels(): NumberingLevel[] {\r\n return this.getAllLevels();\r\n }\r\n\r\n /**\r\n * Gets the number of levels defined\r\n */\r\n getLevelCount(): number {\r\n return this.levels.size;\r\n }\r\n\r\n /**\r\n * Checks if a level exists\r\n * @param levelIndex The level index (0-8)\r\n */\r\n hasLevel(levelIndex: number): boolean {\r\n return this.levels.has(levelIndex);\r\n }\r\n\r\n /**\r\n * Removes a level\r\n * @param levelIndex The level index (0-8)\r\n */\r\n removeLevel(levelIndex: number): boolean {\r\n return this.levels.delete(levelIndex);\r\n }\r\n\r\n /**\r\n * Generates the WordprocessingML XML for this abstract numbering\r\n */\r\n toXML(): XMLElement {\r\n const children: XMLElement[] = [];\r\n\r\n // CT_AbstractNum order per ECMA-376: nsid → multiLevelType → tmpl → name → styleLink → numStyleLink → lvl*\r\n\r\n // Add multiLevelType\r\n let multiLevelTypeValue: string;\r\n if (this.multiLevelType === 1) {\r\n multiLevelTypeValue = \"multilevel\";\r\n } else if (this.multiLevelType === 2) {\r\n multiLevelTypeValue = \"hybridMultilevel\";\r\n } else {\r\n multiLevelTypeValue = \"singleLevel\";\r\n }\r\n\r\n children.push(\r\n XMLBuilder.wSelf(\"multiLevelType\", {\r\n \"w:val\": multiLevelTypeValue,\r\n })\r\n );\r\n\r\n // Add template code (position 3 per CT_AbstractNum)\r\n if (this.tmpl) {\r\n children.push(XMLBuilder.wSelf(\"tmpl\", { \"w:val\": this.tmpl }));\r\n }\r\n\r\n // Add name if present\r\n if (this.name) {\r\n children.push(XMLBuilder.wSelf(\"name\", { \"w:val\": this.name }));\r\n }\r\n\r\n // Add styleLink / numStyleLink if present\r\n if (this.styleLink) {\r\n children.push(XMLBuilder.wSelf(\"styleLink\", { \"w:val\": this.styleLink }));\r\n }\r\n if (this.numStyleLink) {\r\n children.push(XMLBuilder.wSelf(\"numStyleLink\", { \"w:val\": this.numStyleLink }));\r\n }\r\n\r\n // Add all levels in order\r\n const sortedLevels = this.getAllLevels();\r\n sortedLevels.forEach((level) => {\r\n children.push(level.toXML());\r\n });\r\n\r\n // If no levels defined, add a default level 0\r\n if (sortedLevels.length === 0) {\r\n children.push(NumberingLevel.createDecimalLevel(0).toXML());\r\n }\r\n\r\n return XMLBuilder.w(\r\n \"abstractNum\",\r\n { \"w:abstractNumId\": this.abstractNumId.toString() },\r\n children\r\n );\r\n }\r\n\r\n /**\r\n * Creates a bullet list abstract numbering with specified levels\r\n *\r\n * Uses Calibri font for better UI compatibility. For advanced bullet symbol selection,\r\n * use NumberingLevel.getBulletSymbolWithFont() to get recommended symbol/font pairs.\r\n *\r\n * @param abstractNumId The abstract numbering ID\r\n * @param levels Number of levels (default: 9)\r\n * @param bullets Array of bullet characters (default: ['•', '○', '▪'])\r\n *\r\n * @example\r\n * // Standard bullet list\r\n * const bulletList = AbstractNumbering.createBulletList(1);\r\n *\r\n * @example\r\n * // Custom bullets using helper method\r\n * const bullets = [];\r\n * for (let i = 0; i < 9; i++) {\r\n * const { symbol } = NumberingLevel.getBulletSymbolWithFont(i, 'square');\r\n * bullets.push(symbol);\r\n * }\r\n * const squareList = AbstractNumbering.createBulletList(2, 9, bullets);\r\n */\r\n static createBulletList(\r\n abstractNumId: number,\r\n levels = 9,\r\n bullets?: string[] // Optional: custom bullets. If not provided, uses Word-native encoding\r\n ): AbstractNumbering {\r\n const abstractNum = new AbstractNumbering({\r\n abstractNumId,\r\n name: \"Bullet List\",\r\n multiLevelType: 1,\r\n });\r\n\r\n for (let i = 0; i < levels && i < 9; i++) {\r\n if (bullets && bullets.length > 0) {\r\n // Custom bullets provided - use them with default font\r\n const bullet = bullets[i % bullets.length] || \"•\";\r\n abstractNum.addLevel(NumberingLevel.createBulletLevel(i, bullet));\r\n } else {\r\n // No custom bullets - use Word-native encoding (correct font per level)\r\n abstractNum.addLevel(NumberingLevel.createBulletLevel(i));\r\n }\r\n }\r\n\r\n return abstractNum;\r\n }\r\n\r\n /**\r\n * Creates a numbered list abstract numbering with specified levels\r\n * @param abstractNumId The abstract numbering ID\r\n * @param levels Number of levels (default: 9)\r\n * @param formats Array of formats for each level\r\n */\r\n static createNumberedList(\r\n abstractNumId: number,\r\n levels = 9,\r\n formats: (\"decimal\" | \"lowerLetter\" | \"lowerRoman\" | \"upperLetter\" | \"upperRoman\")[] = [\"decimal\", \"lowerLetter\", \"lowerRoman\", \"upperLetter\", \"upperRoman\"]\r\n ): AbstractNumbering {\r\n const abstractNum = new AbstractNumbering({\r\n abstractNumId,\r\n name: \"Numbered List\",\r\n multiLevelType: 1,\r\n });\r\n\r\n for (let i = 0; i < levels && i < 9; i++) {\r\n const format = formats[i % formats.length] || \"decimal\";\r\n const template = `%${i + 1}.`;\r\n\r\n let level: NumberingLevel;\r\n switch (format) {\r\n case \"lowerLetter\":\r\n level = NumberingLevel.createLowerLetterLevel(i, template);\r\n break;\r\n case \"lowerRoman\":\r\n level = NumberingLevel.createLowerRomanLevel(i, template);\r\n break;\r\n case \"upperLetter\":\r\n level = NumberingLevel.createUpperLetterLevel(i, template);\r\n break;\r\n case \"upperRoman\":\r\n level = NumberingLevel.createUpperRomanLevel(i, template);\r\n break;\r\n case \"decimal\":\r\n default:\r\n level = NumberingLevel.createDecimalLevel(i, template);\r\n break;\r\n }\r\n\r\n abstractNum.addLevel(level);\r\n }\r\n\r\n return abstractNum;\r\n }\r\n\r\n /**\r\n * Creates a multi-level list with mixed formats\r\n * @param abstractNumId The abstract numbering ID\r\n */\r\n static createMultiLevelList(abstractNumId: number): AbstractNumbering {\r\n const abstractNum = new AbstractNumbering({\r\n abstractNumId,\r\n name: \"Multi-Level List\",\r\n multiLevelType: 1,\r\n });\r\n\r\n // Level 0: 1, 2, 3, ...\r\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(0, \"%1.\"));\r\n\r\n // Level 1: a, b, c, ...\r\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(1, \"%2.\"));\r\n\r\n // Level 2: i, ii, iii, ...\r\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(2, \"%3.\"));\r\n\r\n // Level 3: 1, 2, 3, ... (with more indent)\r\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(3, \"%4.\"));\r\n\r\n return abstractNum;\r\n }\r\n\r\n /**\r\n * Creates an outline list abstract numbering\r\n * @param abstractNumId The abstract numbering ID\r\n */\r\n static createOutlineList(abstractNumId: number): AbstractNumbering {\r\n const abstractNum = new AbstractNumbering({\r\n abstractNumId,\r\n name: \"Outline List\",\r\n multiLevelType: 1,\r\n });\r\n\r\n // Level 0: I, II, III, ...\r\n abstractNum.addLevel(NumberingLevel.createUpperRomanLevel(0, \"%1.\"));\r\n\r\n // Level 1: A, B, C, ...\r\n abstractNum.addLevel(NumberingLevel.createUpperLetterLevel(1, \"%2.\"));\r\n\r\n // Level 2: 1, 2, 3, ...\r\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(2, \"%3.\"));\r\n\r\n // Level 3: a, b, c, ...\r\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(3, \"%4.\"));\r\n\r\n // Level 4: i, ii, iii, ...\r\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(4, \"%5.\"));\r\n\r\n // Level 5: A, B, C, ... (repeating)\r\n abstractNum.addLevel(NumberingLevel.createUpperLetterLevel(5, \"%6.\"));\r\n\r\n // Level 6: 1, 2, 3, ... (repeating)\r\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(6, \"%7.\"));\r\n\r\n // Level 7: a, b, c, ... (repeating)\r\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(7, \"%8.\"));\r\n\r\n // Level 8: i, ii, iii, ... (repeating)\r\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(8, \"%9.\"));\r\n\r\n return abstractNum;\r\n }\r\n\r\n /**\r\n * Factory method for creating an abstract numbering definition\r\n * @param properties The abstract numbering properties\r\n */\r\n static create(properties: AbstractNumberingProperties): AbstractNumbering {\r\n return new AbstractNumbering(properties);\r\n }\r\n\r\n /**\r\n * Creates an AbstractNumbering from XML element\r\n * @param xml The XML string of the <w:abstractNum> element\r\n * @returns AbstractNumbering instance\r\n */\r\n static fromXML(xml: string): AbstractNumbering {\r\n // Extract abstractNumId (required)\r\n const abstractNumIdMatch = /<w:abstractNum[^>]*w:abstractNumId=\"([^\"]+)\"/.exec(xml);\r\n if (!abstractNumIdMatch?.[1]) {\r\n throw new Error(\"Missing required w:abstractNumId attribute\");\r\n }\r\n const abstractNumId = parseInt(abstractNumIdMatch[1], 10);\r\n\r\n // Extract name (optional)\r\n const nameMatch = /<w:name[^>]*w:val=\"([^\"]+)\"/.exec(xml);\r\n const name = nameMatch?.[1] ? nameMatch[1] : undefined;\r\n\r\n // Extract multiLevelType (optional)\r\n // Values: \"singleLevel\" = 0, \"multilevel\" = 1, \"hybridMultilevel\" = 2\r\n const multiLevelTypeMatch = /<w:multiLevelType[^>]*w:val=\"([^\"]+)\"/.exec(xml);\r\n let multiLevelType = 1; // default to multilevel\r\n if (multiLevelTypeMatch?.[1]) {\r\n const value = multiLevelTypeMatch[1];\r\n if (value === \"singleLevel\") multiLevelType = 0;\r\n else if (value === \"multilevel\") multiLevelType = 1;\r\n else if (value === \"hybridMultilevel\") multiLevelType = 2;\r\n }\r\n\r\n // Extract numStyleLink (optional, ECMA-376 §17.9.21)\r\n const numStyleLinkMatch = /<w:numStyleLink[^>]*w:val=\"([^\"]+)\"/.exec(xml);\r\n const numStyleLink = numStyleLinkMatch?.[1] || undefined;\r\n\r\n // Extract styleLink (optional, ECMA-376 §17.9.27)\r\n const styleLinkMatch = /<w:styleLink[^>]*w:val=\"([^\"]+)\"/.exec(xml);\r\n const styleLink = styleLinkMatch?.[1] || undefined;\r\n\r\n // Extract template code (optional, ECMA-376 §17.9.30)\r\n const tmplMatch = /<w:tmpl[^>]*w:val=\"([^\"]+)\"/.exec(xml);\r\n const tmpl = tmplMatch?.[1] || undefined;\r\n\r\n // Create abstract numbering\r\n const abstractNum = new AbstractNumbering({\r\n abstractNumId,\r\n name,\r\n multiLevelType,\r\n numStyleLink,\r\n styleLink,\r\n tmpl,\r\n });\r\n\r\n // Extract and parse all levels\r\n const lvlRegex = /<w:lvl[^>]*>[\\s\\S]*?<\\/w:lvl>/g;\r\n const lvlMatches = xml.match(lvlRegex);\r\n\r\n if (lvlMatches) {\r\n for (const lvlXml of lvlMatches) {\r\n try {\r\n const level = NumberingLevel.fromXML(lvlXml);\r\n abstractNum.addLevel(level);\r\n } catch (error: unknown) {\r\n // Skip malformed levels but continue parsing\r\n defaultLogger.warn(`Failed to parse level: ${error}`);\r\n }\r\n }\r\n }\r\n\r\n return abstractNum;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"AbstractNumbering.js","sourceRoot":"","sources":["../../src/formatting/AbstractNumbering.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AbstractNumbering - Defines a multi-level numbering scheme\n *\n * An abstract numbering definition is a template that defines up to 9 levels of\n * list formatting. It's referenced by numbering instances which link it to actual\n * paragraphs in the document.\n */\n\nimport { XMLBuilder, XMLElement } from '../xml/XMLBuilder';\nimport { NumberingLevel } from './NumberingLevel';\nimport { defaultLogger } from '../utils/logger';\n\n/**\n * Properties for creating an abstract numbering definition\n */\nexport interface AbstractNumberingProperties {\n /** Unique identifier for this abstract numbering */\n abstractNumId: number;\n\n /** Optional name for the numbering scheme */\n name?: string;\n\n /** The numbering levels (up to 9 levels, 0-8) */\n levels?: NumberingLevel[];\n\n /** Optional multiLevel type (0 = single level, 1 = multilevel) */\n multiLevelType?: number;\n\n /** Optional link to a numbering style definition (ECMA-376 §17.9.21) */\n numStyleLink?: string;\n\n /** Optional link to a style that uses this abstract numbering (ECMA-376 §17.9.27) */\n styleLink?: string;\n\n /** Template code (ECMA-376 §17.9.30) - 8-char hex string identifying the template */\n tmpl?: string;\n}\n\n/**\n * Represents an abstract numbering definition\n *\n * Abstract numbering defines the template for a multi-level list. Each instance\n * of a list in the document references an abstract numbering definition.\n */\nexport class AbstractNumbering {\n private abstractNumId: number;\n private name?: string;\n private levels: Map<number, NumberingLevel>;\n private multiLevelType: number;\n private numStyleLink?: string;\n private styleLink?: string;\n private tmpl?: string;\n\n /**\n * Creates a new abstract numbering definition\n * @param idOrProps The abstract numbering ID (number) or properties object\n * @param name Optional name (if first param is a number)\n */\n constructor(idOrProps: number | AbstractNumberingProperties, name?: string) {\n // Support both simple (numId) and object constructor patterns\n if (typeof idOrProps === 'number') {\n // Simple constructor: new AbstractNumbering(id)\n this.abstractNumId = idOrProps;\n this.name = name;\n this.levels = new Map();\n this.multiLevelType = 1; // default multilevel\n } else {\n // Object constructor: new AbstractNumbering({ abstractNumId, ... })\n const properties = idOrProps;\n this.abstractNumId = properties.abstractNumId;\n this.name = properties.name;\n this.levels = new Map();\n this.multiLevelType = properties.multiLevelType !== undefined ? properties.multiLevelType : 1;\n this.numStyleLink = properties.numStyleLink;\n this.styleLink = properties.styleLink;\n this.tmpl = properties.tmpl;\n\n if (properties.levels) {\n properties.levels.forEach((level) => {\n this.addLevel(level);\n });\n }\n }\n\n this.validate();\n }\n\n /**\n * Validates the abstract numbering\n */\n private validate(): void {\n if (this.abstractNumId < 0) {\n throw new Error('Abstract numbering ID must be non-negative');\n }\n\n if (this.levels.size > 9) {\n throw new Error('Cannot have more than 9 levels (0-8)');\n }\n }\n\n /**\n * Gets the abstract numbering ID\n */\n getAbstractNumId(): number {\n return this.abstractNumId;\n }\n\n /**\n * Alias for getAbstractNumId for backward compatibility\n */\n getId(): number {\n return this.abstractNumId;\n }\n\n /**\n * Gets the name\n */\n getName(): string | undefined {\n return this.name;\n }\n\n /**\n * Sets the name\n * @param name The numbering scheme name\n */\n setName(name: string): this {\n this.name = name;\n return this;\n }\n\n /**\n * Gets the multi-level type\n */\n getMultiLevelType(): string {\n if (this.multiLevelType === 1) {\n return 'multilevel';\n } else if (this.multiLevelType === 2) {\n return 'hybridMultilevel';\n } else {\n return 'singleLevel';\n }\n }\n\n /**\n * Sets the multi-level type\n * @param type The multi-level type ('multilevel' or 'singleLevel')\n */\n setMultiLevelType(type: 'multilevel' | 'singleLevel' | 'hybridMultilevel'): this {\n if (type === 'multilevel') {\n this.multiLevelType = 1;\n } else if (type === 'hybridMultilevel') {\n this.multiLevelType = 2;\n } else {\n this.multiLevelType = 0;\n }\n return this;\n }\n\n /**\n * Gets the numStyleLink (reference to a numbering style definition)\n */\n getNumStyleLink(): string | undefined {\n return this.numStyleLink;\n }\n\n /**\n * Sets the numStyleLink\n * @param link The numbering style name\n */\n setNumStyleLink(link: string | undefined): this {\n this.numStyleLink = link;\n return this;\n }\n\n /**\n * Gets the styleLink (reference to a style that uses this abstract numbering)\n */\n getStyleLink(): string | undefined {\n return this.styleLink;\n }\n\n /**\n * Sets the styleLink\n * @param link The style name\n */\n setStyleLink(link: string | undefined): this {\n this.styleLink = link;\n return this;\n }\n\n /**\n * Gets the template code (w:tmpl per ECMA-376 §17.9.30)\n */\n getTemplate(): string | undefined {\n return this.tmpl;\n }\n\n /**\n * Sets the template code\n * @param tmpl 8-char hex string identifying the template\n */\n setTemplate(tmpl: string): this {\n this.tmpl = tmpl;\n return this;\n }\n\n /**\n * Adds a numbering level\n * @param level The numbering level to add\n */\n addLevel(level: NumberingLevel): this {\n const levelIndex = level.getLevel();\n\n if (levelIndex < 0 || levelIndex > 8) {\n throw new Error(`Level must be between 0 and 8, got ${levelIndex}`);\n }\n\n this.levels.set(levelIndex, level);\n return this;\n }\n\n /**\n * Adds multiple numbering levels at once\n * @param levels The numbering levels to add\n */\n addLevels(levels: NumberingLevel[]): this {\n levels.forEach((level) => this.addLevel(level));\n return this;\n }\n\n /**\n * Gets a numbering level by index\n * @param levelIndex The level index (0-8)\n */\n getLevel(levelIndex: number): NumberingLevel | undefined {\n return this.levels.get(levelIndex);\n }\n\n /**\n * Gets all levels\n */\n getAllLevels(): NumberingLevel[] {\n return Array.from(this.levels.values()).sort((a, b) => a.getLevel() - b.getLevel());\n }\n\n /**\n * Alias for getAllLevels for backward compatibility\n */\n getLevels(): NumberingLevel[] {\n return this.getAllLevels();\n }\n\n /**\n * Gets the number of levels defined\n */\n getLevelCount(): number {\n return this.levels.size;\n }\n\n /**\n * Checks if a level exists\n * @param levelIndex The level index (0-8)\n */\n hasLevel(levelIndex: number): boolean {\n return this.levels.has(levelIndex);\n }\n\n /**\n * Removes a level\n * @param levelIndex The level index (0-8)\n */\n removeLevel(levelIndex: number): boolean {\n return this.levels.delete(levelIndex);\n }\n\n /**\n * Generates the WordprocessingML XML for this abstract numbering\n */\n toXML(): XMLElement {\n const children: XMLElement[] = [];\n\n // CT_AbstractNum order per ECMA-376: nsid → multiLevelType → tmpl → name → styleLink → numStyleLink → lvl*\n\n // Add multiLevelType\n let multiLevelTypeValue: string;\n if (this.multiLevelType === 1) {\n multiLevelTypeValue = 'multilevel';\n } else if (this.multiLevelType === 2) {\n multiLevelTypeValue = 'hybridMultilevel';\n } else {\n multiLevelTypeValue = 'singleLevel';\n }\n\n children.push(\n XMLBuilder.wSelf('multiLevelType', {\n 'w:val': multiLevelTypeValue,\n })\n );\n\n // Add template code (position 3 per CT_AbstractNum)\n if (this.tmpl) {\n children.push(XMLBuilder.wSelf('tmpl', { 'w:val': this.tmpl }));\n }\n\n // Add name if present\n if (this.name) {\n children.push(XMLBuilder.wSelf('name', { 'w:val': this.name }));\n }\n\n // Add styleLink / numStyleLink if present\n if (this.styleLink) {\n children.push(XMLBuilder.wSelf('styleLink', { 'w:val': this.styleLink }));\n }\n if (this.numStyleLink) {\n children.push(XMLBuilder.wSelf('numStyleLink', { 'w:val': this.numStyleLink }));\n }\n\n // Add all levels in order\n const sortedLevels = this.getAllLevels();\n sortedLevels.forEach((level) => {\n children.push(level.toXML());\n });\n\n // If no levels defined, add a default level 0\n if (sortedLevels.length === 0) {\n children.push(NumberingLevel.createDecimalLevel(0).toXML());\n }\n\n return XMLBuilder.w(\n 'abstractNum',\n { 'w:abstractNumId': this.abstractNumId.toString() },\n children\n );\n }\n\n /**\n * Creates a bullet list abstract numbering with specified levels\n *\n * Uses Calibri font for better UI compatibility. For advanced bullet symbol selection,\n * use NumberingLevel.getBulletSymbolWithFont() to get recommended symbol/font pairs.\n *\n * @param abstractNumId The abstract numbering ID\n * @param levels Number of levels (default: 9)\n * @param bullets Array of bullet characters (default: ['•', '○', '▪'])\n *\n * @example\n * // Standard bullet list\n * const bulletList = AbstractNumbering.createBulletList(1);\n *\n * @example\n * // Custom bullets using helper method\n * const bullets = [];\n * for (let i = 0; i < 9; i++) {\n * const { symbol } = NumberingLevel.getBulletSymbolWithFont(i, 'square');\n * bullets.push(symbol);\n * }\n * const squareList = AbstractNumbering.createBulletList(2, 9, bullets);\n */\n static createBulletList(\n abstractNumId: number,\n levels = 9,\n bullets?: string[] // Optional: custom bullets. If not provided, uses Word-native encoding\n ): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Bullet List',\n multiLevelType: 1,\n });\n\n for (let i = 0; i < levels && i < 9; i++) {\n if (bullets && bullets.length > 0) {\n // Custom bullets provided - use them with default font\n const bullet = bullets[i % bullets.length] || '•';\n abstractNum.addLevel(NumberingLevel.createBulletLevel(i, bullet));\n } else {\n // No custom bullets - use Word-native encoding (correct font per level)\n abstractNum.addLevel(NumberingLevel.createBulletLevel(i));\n }\n }\n\n return abstractNum;\n }\n\n /**\n * Creates a numbered list abstract numbering with specified levels\n * @param abstractNumId The abstract numbering ID\n * @param levels Number of levels (default: 9)\n * @param formats Array of formats for each level\n */\n static createNumberedList(\n abstractNumId: number,\n levels = 9,\n formats: ('decimal' | 'lowerLetter' | 'lowerRoman' | 'upperLetter' | 'upperRoman')[] = [\n 'decimal',\n 'lowerLetter',\n 'lowerRoman',\n 'upperLetter',\n 'upperRoman',\n ]\n ): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Numbered List',\n multiLevelType: 1,\n });\n\n for (let i = 0; i < levels && i < 9; i++) {\n const format = formats[i % formats.length] || 'decimal';\n const template = `%${i + 1}.`;\n\n let level: NumberingLevel;\n switch (format) {\n case 'lowerLetter':\n level = NumberingLevel.createLowerLetterLevel(i, template);\n break;\n case 'lowerRoman':\n level = NumberingLevel.createLowerRomanLevel(i, template);\n break;\n case 'upperLetter':\n level = NumberingLevel.createUpperLetterLevel(i, template);\n break;\n case 'upperRoman':\n level = NumberingLevel.createUpperRomanLevel(i, template);\n break;\n case 'decimal':\n default:\n level = NumberingLevel.createDecimalLevel(i, template);\n break;\n }\n\n abstractNum.addLevel(level);\n }\n\n return abstractNum;\n }\n\n /**\n * Creates a multi-level list with mixed formats\n * @param abstractNumId The abstract numbering ID\n */\n static createMultiLevelList(abstractNumId: number): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Multi-Level List',\n multiLevelType: 1,\n });\n\n // Level 0: 1, 2, 3, ...\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(0, '%1.'));\n\n // Level 1: a, b, c, ...\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(1, '%2.'));\n\n // Level 2: i, ii, iii, ...\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(2, '%3.'));\n\n // Level 3: 1, 2, 3, ... (with more indent)\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(3, '%4.'));\n\n return abstractNum;\n }\n\n /**\n * Creates an outline list abstract numbering\n * @param abstractNumId The abstract numbering ID\n */\n static createOutlineList(abstractNumId: number): AbstractNumbering {\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name: 'Outline List',\n multiLevelType: 1,\n });\n\n // Level 0: I, II, III, ...\n abstractNum.addLevel(NumberingLevel.createUpperRomanLevel(0, '%1.'));\n\n // Level 1: A, B, C, ...\n abstractNum.addLevel(NumberingLevel.createUpperLetterLevel(1, '%2.'));\n\n // Level 2: 1, 2, 3, ...\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(2, '%3.'));\n\n // Level 3: a, b, c, ...\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(3, '%4.'));\n\n // Level 4: i, ii, iii, ...\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(4, '%5.'));\n\n // Level 5: A, B, C, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createUpperLetterLevel(5, '%6.'));\n\n // Level 6: 1, 2, 3, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createDecimalLevel(6, '%7.'));\n\n // Level 7: a, b, c, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createLowerLetterLevel(7, '%8.'));\n\n // Level 8: i, ii, iii, ... (repeating)\n abstractNum.addLevel(NumberingLevel.createLowerRomanLevel(8, '%9.'));\n\n return abstractNum;\n }\n\n /**\n * Factory method for creating an abstract numbering definition\n * @param properties The abstract numbering properties\n */\n static create(properties: AbstractNumberingProperties): AbstractNumbering {\n return new AbstractNumbering(properties);\n }\n\n /**\n * Creates an AbstractNumbering from XML element\n * @param xml The XML string of the <w:abstractNum> element\n * @returns AbstractNumbering instance\n */\n static fromXML(xml: string): AbstractNumbering {\n // Extract abstractNumId (required)\n const abstractNumIdMatch = /<w:abstractNum[^>]*w:abstractNumId=\"([^\"]+)\"/.exec(xml);\n if (!abstractNumIdMatch?.[1]) {\n throw new Error('Missing required w:abstractNumId attribute');\n }\n const abstractNumId = parseInt(abstractNumIdMatch[1], 10);\n\n // Extract name (optional)\n const nameMatch = /<w:name[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const name = nameMatch?.[1] ? nameMatch[1] : undefined;\n\n // Extract multiLevelType (optional)\n // Values: \"singleLevel\" = 0, \"multilevel\" = 1, \"hybridMultilevel\" = 2\n const multiLevelTypeMatch = /<w:multiLevelType[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n let multiLevelType = 1; // default to multilevel\n if (multiLevelTypeMatch?.[1]) {\n const value = multiLevelTypeMatch[1];\n if (value === 'singleLevel') multiLevelType = 0;\n else if (value === 'multilevel') multiLevelType = 1;\n else if (value === 'hybridMultilevel') multiLevelType = 2;\n }\n\n // Extract numStyleLink (optional, ECMA-376 §17.9.21)\n const numStyleLinkMatch = /<w:numStyleLink[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const numStyleLink = numStyleLinkMatch?.[1] || undefined;\n\n // Extract styleLink (optional, ECMA-376 §17.9.27)\n const styleLinkMatch = /<w:styleLink[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const styleLink = styleLinkMatch?.[1] || undefined;\n\n // Extract template code (optional, ECMA-376 §17.9.30)\n const tmplMatch = /<w:tmpl[^>]*w:val=\"([^\"]+)\"/.exec(xml);\n const tmpl = tmplMatch?.[1] || undefined;\n\n // Create abstract numbering\n const abstractNum = new AbstractNumbering({\n abstractNumId,\n name,\n multiLevelType,\n numStyleLink,\n styleLink,\n tmpl,\n });\n\n // Extract and parse all levels\n const lvlRegex = /<w:lvl[^>]*>[\\s\\S]*?<\\/w:lvl>/g;\n const lvlMatches = xml.match(lvlRegex);\n\n if (lvlMatches) {\n for (const lvlXml of lvlMatches) {\n try {\n const level = NumberingLevel.fromXML(lvlXml);\n abstractNum.addLevel(level);\n } catch (error: unknown) {\n // Skip malformed levels but continue parsing\n defaultLogger.warn(`Failed to parse level: ${error}`);\n }\n }\n }\n\n return abstractNum;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberingInstance.d.ts","sourceRoot":"","sources":["../../src/formatting/NumberingInstance.ts"],"names":[],"mappings":"AAQA,OAAO,EAAc,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKlD,MAAM,WAAW,2BAA2B;IAE1C,KAAK,EAAE,MAAM,CAAC;IAGd,aAAa,EAAE,MAAM,CAAC;CACvB;AAQD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,kBAAkB,CAAqC;gBAOnD,YAAY,EAAE,MAAM,GAAG,2BAA2B,EAAE,aAAa,CAAC,EAAE,MAAM;IAiBtF,OAAO,CAAC,QAAQ;IAahB,QAAQ,IAAI,MAAM;IAOlB,gBAAgB,IAAI,MAAM;IAQ1B,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAW7C,KAAK,IAAI,MAAM;IAQf,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAYxC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAkBzD,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAWvC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAYnD,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAWnE,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAO/D,qBAAqB,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAOpD,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ3C,KAAK,IAAI,UAAU;
|
|
1
|
+
{"version":3,"file":"NumberingInstance.d.ts","sourceRoot":"","sources":["../../src/formatting/NumberingInstance.ts"],"names":[],"mappings":"AAQA,OAAO,EAAc,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKlD,MAAM,WAAW,2BAA2B;IAE1C,KAAK,EAAE,MAAM,CAAC;IAGd,aAAa,EAAE,MAAM,CAAC;CACvB;AAQD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,kBAAkB,CAAqC;gBAOnD,YAAY,EAAE,MAAM,GAAG,2BAA2B,EAAE,aAAa,CAAC,EAAE,MAAM;IAiBtF,OAAO,CAAC,QAAQ;IAahB,QAAQ,IAAI,MAAM;IAOlB,gBAAgB,IAAI,MAAM;IAQ1B,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAW7C,KAAK,IAAI,MAAM;IAQf,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAYxC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAkBzD,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAWvC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAYnD,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAWnE,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAO/D,qBAAqB,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAOpD,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ3C,KAAK,IAAI,UAAU;IA0CnB,MAAM,CAAC,MAAM,CACX,iBAAiB,EAAE,2BAA2B,GAAG,MAAM,EACvD,aAAa,CAAC,EAAE,MAAM,GACrB,iBAAiB;IAYpB,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB;CAgD/C"}
|
|
@@ -89,9 +89,7 @@ class NumberingInstance {
|
|
|
89
89
|
children.push({
|
|
90
90
|
name: 'w:lvlOverride',
|
|
91
91
|
attributes: { 'w:ilvl': level.toString() },
|
|
92
|
-
children: [
|
|
93
|
-
XMLBuilder_1.XMLBuilder.wSelf('startOverride', { 'w:val': startValue.toString() })
|
|
94
|
-
]
|
|
92
|
+
children: [XMLBuilder_1.XMLBuilder.wSelf('startOverride', { 'w:val': startValue.toString() })],
|
|
95
93
|
});
|
|
96
94
|
}
|
|
97
95
|
for (const [level, levelDef] of this.fullLevelOverrides) {
|