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,299 +1,295 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* NumberingInstance - Links paragraphs to abstract numbering definitions
|
|
3
|
-
*
|
|
4
|
-
* A numbering instance references an abstract numbering definition and provides
|
|
5
|
-
* the actual numId that paragraphs use. Multiple instances can reference the same
|
|
6
|
-
* abstract numbering, creating separate list sequences.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { XMLBuilder, XMLElement } from '../xml/XMLBuilder';
|
|
10
|
-
import { NumberingLevel } from './NumberingLevel';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Properties for creating a numbering instance
|
|
14
|
-
*/
|
|
15
|
-
export interface NumberingInstanceProperties {
|
|
16
|
-
/** Unique numbering instance ID (numId) */
|
|
17
|
-
numId: number;
|
|
18
|
-
|
|
19
|
-
/** Reference to the abstract numbering definition */
|
|
20
|
-
abstractNumId: number;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Represents a numbering instance
|
|
25
|
-
*
|
|
26
|
-
* Numbering instances link paragraphs to abstract numbering definitions.
|
|
27
|
-
* Each instance creates a separate numbering sequence in the document.
|
|
28
|
-
*/
|
|
29
|
-
export class NumberingInstance {
|
|
30
|
-
private numId: number;
|
|
31
|
-
private abstractNumId: number;
|
|
32
|
-
private levelOverrides = new Map<number, number>();
|
|
33
|
-
private fullLevelOverrides = new Map<number, NumberingLevel>();
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Creates a new numbering instance
|
|
37
|
-
* @param numIdOrProps The numbering instance ID or properties object
|
|
38
|
-
* @param abstractNumId The abstract numbering ID (if first param is a number)
|
|
39
|
-
*/
|
|
40
|
-
constructor(numIdOrProps: number | NumberingInstanceProperties, abstractNumId?: number) {
|
|
41
|
-
if (typeof numIdOrProps === 'number') {
|
|
42
|
-
// Support simple constructor: new NumberingInstance(numId, abstractNumId)
|
|
43
|
-
this.numId = numIdOrProps;
|
|
44
|
-
this.abstractNumId = abstractNumId ?? 0;
|
|
45
|
-
} else {
|
|
46
|
-
// Support object constructor: new NumberingInstance({ numId, abstractNumId })
|
|
47
|
-
this.numId = numIdOrProps.numId;
|
|
48
|
-
this.abstractNumId = numIdOrProps.abstractNumId;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
this.validate();
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Validates the numbering instance
|
|
56
|
-
*/
|
|
57
|
-
private validate(): void {
|
|
58
|
-
if (this.numId < 0) {
|
|
59
|
-
throw new Error('Numbering instance ID must be non-negative');
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
if (this.abstractNumId < 0) {
|
|
63
|
-
throw new Error('Abstract numbering ID must be non-negative');
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Gets the numbering instance ID
|
|
69
|
-
*/
|
|
70
|
-
getNumId(): number {
|
|
71
|
-
return this.numId;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Gets the abstract numbering ID
|
|
76
|
-
*/
|
|
77
|
-
getAbstractNumId(): number {
|
|
78
|
-
return this.abstractNumId;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Sets the abstract numbering ID this instance references
|
|
83
|
-
* @param abstractNumId The new abstract numbering ID
|
|
84
|
-
*/
|
|
85
|
-
setAbstractNumId(abstractNumId: number): this {
|
|
86
|
-
if (abstractNumId < 0) {
|
|
87
|
-
throw new Error('Abstract numbering ID must be non-negative');
|
|
88
|
-
}
|
|
89
|
-
this.abstractNumId = abstractNumId;
|
|
90
|
-
return this;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Alias for getNumId for backward compatibility
|
|
95
|
-
*/
|
|
96
|
-
getId(): number {
|
|
97
|
-
return this.numId;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Gets level overrides
|
|
102
|
-
* Returns a map of level indices to their override starting values
|
|
103
|
-
*/
|
|
104
|
-
getLevelOverrides(): Map<number, number> {
|
|
105
|
-
return new Map(this.levelOverrides);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Sets level override for a specific level
|
|
110
|
-
* Overrides the starting value for a particular numbering level
|
|
111
|
-
*
|
|
112
|
-
* @param level The level index (0-based)
|
|
113
|
-
* @param startValue The starting value for this level
|
|
114
|
-
* @returns This instance for method chaining
|
|
115
|
-
*/
|
|
116
|
-
setLevelOverride(level: number, startValue: number): this {
|
|
117
|
-
if (level < 0) {
|
|
118
|
-
throw new Error('Level index must be non-negative');
|
|
119
|
-
}
|
|
120
|
-
if (startValue < 0) {
|
|
121
|
-
throw new Error('Start value must be non-negative');
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
this.levelOverrides.set(level, startValue);
|
|
125
|
-
return this;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Clears a level override for a specific level
|
|
130
|
-
*
|
|
131
|
-
* @param level The level index to clear
|
|
132
|
-
* @returns This instance for method chaining
|
|
133
|
-
*/
|
|
134
|
-
clearLevelOverride(level: number): this {
|
|
135
|
-
this.levelOverrides.delete(level);
|
|
136
|
-
return this;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Gets the override value for a specific level, if set
|
|
141
|
-
*
|
|
142
|
-
* @param level The level index
|
|
143
|
-
* @returns The override starting value, or undefined if not set
|
|
144
|
-
*/
|
|
145
|
-
getLevelOverride(level: number): number | undefined {
|
|
146
|
-
return this.levelOverrides.get(level);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* Sets a full level definition override for a specific level
|
|
151
|
-
* This replaces the entire level definition from the abstract numbering
|
|
152
|
-
* (ECMA-376 §17.9.8 - w:lvlOverride with full w:lvl child)
|
|
153
|
-
*
|
|
154
|
-
* @param level The level index (0-based)
|
|
155
|
-
* @param levelDef The full NumberingLevel definition to use as override
|
|
156
|
-
*/
|
|
157
|
-
setFullLevelOverride(level: number, levelDef: NumberingLevel): this {
|
|
158
|
-
if (level < 0) {
|
|
159
|
-
throw new Error('Level index must be non-negative');
|
|
160
|
-
}
|
|
161
|
-
this.fullLevelOverrides.set(level, levelDef);
|
|
162
|
-
return this;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* Gets a full level definition override for a specific level
|
|
167
|
-
*/
|
|
168
|
-
getFullLevelOverride(level: number): NumberingLevel | undefined {
|
|
169
|
-
return this.fullLevelOverrides.get(level);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Gets all full level definition overrides
|
|
174
|
-
*/
|
|
175
|
-
getFullLevelOverrides(): Map<number, NumberingLevel> {
|
|
176
|
-
return new Map(this.fullLevelOverrides);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Clears a full level override
|
|
181
|
-
*/
|
|
182
|
-
clearFullLevelOverride(level: number): this {
|
|
183
|
-
this.fullLevelOverrides.delete(level);
|
|
184
|
-
return this;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* Generates the WordprocessingML XML for this numbering instance
|
|
189
|
-
*/
|
|
190
|
-
toXML(): XMLElement {
|
|
191
|
-
const children: XMLElement[] = [];
|
|
192
|
-
|
|
193
|
-
// Reference to abstract numbering
|
|
194
|
-
children.push(
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
const
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
const
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
const
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
return instance;
|
|
298
|
-
}
|
|
299
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* NumberingInstance - Links paragraphs to abstract numbering definitions
|
|
3
|
+
*
|
|
4
|
+
* A numbering instance references an abstract numbering definition and provides
|
|
5
|
+
* the actual numId that paragraphs use. Multiple instances can reference the same
|
|
6
|
+
* abstract numbering, creating separate list sequences.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { XMLBuilder, XMLElement } from '../xml/XMLBuilder';
|
|
10
|
+
import { NumberingLevel } from './NumberingLevel';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Properties for creating a numbering instance
|
|
14
|
+
*/
|
|
15
|
+
export interface NumberingInstanceProperties {
|
|
16
|
+
/** Unique numbering instance ID (numId) */
|
|
17
|
+
numId: number;
|
|
18
|
+
|
|
19
|
+
/** Reference to the abstract numbering definition */
|
|
20
|
+
abstractNumId: number;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Represents a numbering instance
|
|
25
|
+
*
|
|
26
|
+
* Numbering instances link paragraphs to abstract numbering definitions.
|
|
27
|
+
* Each instance creates a separate numbering sequence in the document.
|
|
28
|
+
*/
|
|
29
|
+
export class NumberingInstance {
|
|
30
|
+
private numId: number;
|
|
31
|
+
private abstractNumId: number;
|
|
32
|
+
private levelOverrides = new Map<number, number>();
|
|
33
|
+
private fullLevelOverrides = new Map<number, NumberingLevel>();
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Creates a new numbering instance
|
|
37
|
+
* @param numIdOrProps The numbering instance ID or properties object
|
|
38
|
+
* @param abstractNumId The abstract numbering ID (if first param is a number)
|
|
39
|
+
*/
|
|
40
|
+
constructor(numIdOrProps: number | NumberingInstanceProperties, abstractNumId?: number) {
|
|
41
|
+
if (typeof numIdOrProps === 'number') {
|
|
42
|
+
// Support simple constructor: new NumberingInstance(numId, abstractNumId)
|
|
43
|
+
this.numId = numIdOrProps;
|
|
44
|
+
this.abstractNumId = abstractNumId ?? 0;
|
|
45
|
+
} else {
|
|
46
|
+
// Support object constructor: new NumberingInstance({ numId, abstractNumId })
|
|
47
|
+
this.numId = numIdOrProps.numId;
|
|
48
|
+
this.abstractNumId = numIdOrProps.abstractNumId;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
this.validate();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Validates the numbering instance
|
|
56
|
+
*/
|
|
57
|
+
private validate(): void {
|
|
58
|
+
if (this.numId < 0) {
|
|
59
|
+
throw new Error('Numbering instance ID must be non-negative');
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (this.abstractNumId < 0) {
|
|
63
|
+
throw new Error('Abstract numbering ID must be non-negative');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Gets the numbering instance ID
|
|
69
|
+
*/
|
|
70
|
+
getNumId(): number {
|
|
71
|
+
return this.numId;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Gets the abstract numbering ID
|
|
76
|
+
*/
|
|
77
|
+
getAbstractNumId(): number {
|
|
78
|
+
return this.abstractNumId;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Sets the abstract numbering ID this instance references
|
|
83
|
+
* @param abstractNumId The new abstract numbering ID
|
|
84
|
+
*/
|
|
85
|
+
setAbstractNumId(abstractNumId: number): this {
|
|
86
|
+
if (abstractNumId < 0) {
|
|
87
|
+
throw new Error('Abstract numbering ID must be non-negative');
|
|
88
|
+
}
|
|
89
|
+
this.abstractNumId = abstractNumId;
|
|
90
|
+
return this;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Alias for getNumId for backward compatibility
|
|
95
|
+
*/
|
|
96
|
+
getId(): number {
|
|
97
|
+
return this.numId;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Gets level overrides
|
|
102
|
+
* Returns a map of level indices to their override starting values
|
|
103
|
+
*/
|
|
104
|
+
getLevelOverrides(): Map<number, number> {
|
|
105
|
+
return new Map(this.levelOverrides);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Sets level override for a specific level
|
|
110
|
+
* Overrides the starting value for a particular numbering level
|
|
111
|
+
*
|
|
112
|
+
* @param level The level index (0-based)
|
|
113
|
+
* @param startValue The starting value for this level
|
|
114
|
+
* @returns This instance for method chaining
|
|
115
|
+
*/
|
|
116
|
+
setLevelOverride(level: number, startValue: number): this {
|
|
117
|
+
if (level < 0) {
|
|
118
|
+
throw new Error('Level index must be non-negative');
|
|
119
|
+
}
|
|
120
|
+
if (startValue < 0) {
|
|
121
|
+
throw new Error('Start value must be non-negative');
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
this.levelOverrides.set(level, startValue);
|
|
125
|
+
return this;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Clears a level override for a specific level
|
|
130
|
+
*
|
|
131
|
+
* @param level The level index to clear
|
|
132
|
+
* @returns This instance for method chaining
|
|
133
|
+
*/
|
|
134
|
+
clearLevelOverride(level: number): this {
|
|
135
|
+
this.levelOverrides.delete(level);
|
|
136
|
+
return this;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Gets the override value for a specific level, if set
|
|
141
|
+
*
|
|
142
|
+
* @param level The level index
|
|
143
|
+
* @returns The override starting value, or undefined if not set
|
|
144
|
+
*/
|
|
145
|
+
getLevelOverride(level: number): number | undefined {
|
|
146
|
+
return this.levelOverrides.get(level);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Sets a full level definition override for a specific level
|
|
151
|
+
* This replaces the entire level definition from the abstract numbering
|
|
152
|
+
* (ECMA-376 §17.9.8 - w:lvlOverride with full w:lvl child)
|
|
153
|
+
*
|
|
154
|
+
* @param level The level index (0-based)
|
|
155
|
+
* @param levelDef The full NumberingLevel definition to use as override
|
|
156
|
+
*/
|
|
157
|
+
setFullLevelOverride(level: number, levelDef: NumberingLevel): this {
|
|
158
|
+
if (level < 0) {
|
|
159
|
+
throw new Error('Level index must be non-negative');
|
|
160
|
+
}
|
|
161
|
+
this.fullLevelOverrides.set(level, levelDef);
|
|
162
|
+
return this;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Gets a full level definition override for a specific level
|
|
167
|
+
*/
|
|
168
|
+
getFullLevelOverride(level: number): NumberingLevel | undefined {
|
|
169
|
+
return this.fullLevelOverrides.get(level);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Gets all full level definition overrides
|
|
174
|
+
*/
|
|
175
|
+
getFullLevelOverrides(): Map<number, NumberingLevel> {
|
|
176
|
+
return new Map(this.fullLevelOverrides);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Clears a full level override
|
|
181
|
+
*/
|
|
182
|
+
clearFullLevelOverride(level: number): this {
|
|
183
|
+
this.fullLevelOverrides.delete(level);
|
|
184
|
+
return this;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Generates the WordprocessingML XML for this numbering instance
|
|
189
|
+
*/
|
|
190
|
+
toXML(): XMLElement {
|
|
191
|
+
const children: XMLElement[] = [];
|
|
192
|
+
|
|
193
|
+
// Reference to abstract numbering
|
|
194
|
+
children.push(XMLBuilder.wSelf('abstractNumId', { 'w:val': this.abstractNumId.toString() }));
|
|
195
|
+
|
|
196
|
+
// Add level overrides if any are set
|
|
197
|
+
for (const [level, startValue] of this.levelOverrides) {
|
|
198
|
+
// Skip levels that have a full level override (they take precedence)
|
|
199
|
+
if (this.fullLevelOverrides.has(level)) continue;
|
|
200
|
+
children.push({
|
|
201
|
+
name: 'w:lvlOverride',
|
|
202
|
+
attributes: { 'w:ilvl': level.toString() },
|
|
203
|
+
children: [XMLBuilder.wSelf('startOverride', { 'w:val': startValue.toString() })],
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Add full level overrides
|
|
208
|
+
for (const [level, levelDef] of this.fullLevelOverrides) {
|
|
209
|
+
const overrideChildren: XMLElement[] = [];
|
|
210
|
+
// Include startOverride if also set for this level
|
|
211
|
+
if (this.levelOverrides.has(level)) {
|
|
212
|
+
overrideChildren.push(
|
|
213
|
+
XMLBuilder.wSelf('startOverride', { 'w:val': this.levelOverrides.get(level)!.toString() })
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
overrideChildren.push(levelDef.toXML());
|
|
217
|
+
children.push({
|
|
218
|
+
name: 'w:lvlOverride',
|
|
219
|
+
attributes: { 'w:ilvl': level.toString() },
|
|
220
|
+
children: overrideChildren,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
return XMLBuilder.w('num', { 'w:numId': this.numId.toString() }, children);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Factory method for creating a numbering instance
|
|
229
|
+
* @param propertiesOrNumId The instance properties object, or numId (number)
|
|
230
|
+
* @param abstractNumId The abstract numbering ID (if first param is a number)
|
|
231
|
+
*/
|
|
232
|
+
static create(
|
|
233
|
+
propertiesOrNumId: NumberingInstanceProperties | number,
|
|
234
|
+
abstractNumId?: number
|
|
235
|
+
): NumberingInstance {
|
|
236
|
+
if (typeof propertiesOrNumId === 'number') {
|
|
237
|
+
return new NumberingInstance(propertiesOrNumId, abstractNumId);
|
|
238
|
+
}
|
|
239
|
+
return new NumberingInstance(propertiesOrNumId);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Creates a NumberingInstance from XML element
|
|
244
|
+
* @param xml The XML string of the <w:num> element
|
|
245
|
+
* @returns NumberingInstance instance
|
|
246
|
+
*/
|
|
247
|
+
static fromXML(xml: string): NumberingInstance {
|
|
248
|
+
// Extract numId (required)
|
|
249
|
+
const numIdMatch = /<w:num[^>]*w:numId="([^"]+)"/.exec(xml);
|
|
250
|
+
if (!numIdMatch?.[1]) {
|
|
251
|
+
throw new Error('Missing required w:numId attribute');
|
|
252
|
+
}
|
|
253
|
+
const numId = parseInt(numIdMatch[1], 10);
|
|
254
|
+
|
|
255
|
+
// Extract abstractNumId (required)
|
|
256
|
+
const abstractNumIdMatch = /<w:abstractNumId[^>]*w:val="([^"]+)"/.exec(xml);
|
|
257
|
+
if (!abstractNumIdMatch?.[1]) {
|
|
258
|
+
throw new Error('Missing required w:abstractNumId element');
|
|
259
|
+
}
|
|
260
|
+
const abstractNumId = parseInt(abstractNumIdMatch[1], 10);
|
|
261
|
+
|
|
262
|
+
const instance = new NumberingInstance({
|
|
263
|
+
numId,
|
|
264
|
+
abstractNumId,
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
// Parse level overrides (w:lvlOverride)
|
|
268
|
+
const lvlOverrideRegex = /<w:lvlOverride[^>]*w:ilvl="(\d+)"[^>]*>([\s\S]*?)<\/w:lvlOverride>/g;
|
|
269
|
+
let match: RegExpExecArray | null;
|
|
270
|
+
while ((match = lvlOverrideRegex.exec(xml)) !== null) {
|
|
271
|
+
const levelStr = match[1]!;
|
|
272
|
+
const content = match[2]!;
|
|
273
|
+
const level = parseInt(levelStr, 10);
|
|
274
|
+
|
|
275
|
+
// Check for startOverride
|
|
276
|
+
const startOverrideMatch = /<w:startOverride[^>]*w:val="([^"]+)"/.exec(content);
|
|
277
|
+
if (startOverrideMatch?.[1]) {
|
|
278
|
+
instance.setLevelOverride(level, parseInt(startOverrideMatch[1], 10));
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// Check for full w:lvl element
|
|
282
|
+
const lvlMatch = /<w:lvl[^>]*>[\s\S]*?<\/w:lvl>/.exec(content);
|
|
283
|
+
if (lvlMatch) {
|
|
284
|
+
try {
|
|
285
|
+
const levelDef = NumberingLevel.fromXML(lvlMatch[0]);
|
|
286
|
+
instance.setFullLevelOverride(level, levelDef);
|
|
287
|
+
} catch {
|
|
288
|
+
// Skip invalid level definitions
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
return instance;
|
|
294
|
+
}
|
|
295
|
+
}
|