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.
Files changed (371) hide show
  1. package/README.md +759 -754
  2. package/dist/constants/legacyCompatFlags.js +1 -1
  3. package/dist/constants/legacyCompatFlags.js.map +1 -1
  4. package/dist/constants/limits.js.map +1 -1
  5. package/dist/core/Document.d.ts +50 -50
  6. package/dist/core/Document.d.ts.map +1 -1
  7. package/dist/core/Document.js +483 -471
  8. package/dist/core/Document.js.map +1 -1
  9. package/dist/core/DocumentContent.d.ts +9 -9
  10. package/dist/core/DocumentContent.d.ts.map +1 -1
  11. package/dist/core/DocumentContent.js +1 -1
  12. package/dist/core/DocumentContent.js.map +1 -1
  13. package/dist/core/DocumentGenerator.d.ts +11 -11
  14. package/dist/core/DocumentGenerator.d.ts.map +1 -1
  15. package/dist/core/DocumentGenerator.js +251 -251
  16. package/dist/core/DocumentGenerator.js.map +1 -1
  17. package/dist/core/DocumentIdManager.js.map +1 -1
  18. package/dist/core/DocumentParser.d.ts +15 -15
  19. package/dist/core/DocumentParser.d.ts.map +1 -1
  20. package/dist/core/DocumentParser.js +2123 -2155
  21. package/dist/core/DocumentParser.js.map +1 -1
  22. package/dist/core/DocumentValidator.d.ts.map +1 -1
  23. package/dist/core/DocumentValidator.js +2 -5
  24. package/dist/core/DocumentValidator.js.map +1 -1
  25. package/dist/core/Relationship.js.map +1 -1
  26. package/dist/core/RelationshipManager.d.ts.map +1 -1
  27. package/dist/core/RelationshipManager.js +3 -3
  28. package/dist/core/RelationshipManager.js.map +1 -1
  29. package/dist/elements/AlternateContent.js.map +1 -1
  30. package/dist/elements/Bookmark.d.ts.map +1 -1
  31. package/dist/elements/Bookmark.js +3 -1
  32. package/dist/elements/Bookmark.js.map +1 -1
  33. package/dist/elements/BookmarkManager.d.ts.map +1 -1
  34. package/dist/elements/BookmarkManager.js.map +1 -1
  35. package/dist/elements/Comment.d.ts.map +1 -1
  36. package/dist/elements/Comment.js +9 -6
  37. package/dist/elements/Comment.js.map +1 -1
  38. package/dist/elements/CommentManager.d.ts.map +1 -1
  39. package/dist/elements/CommentManager.js +18 -17
  40. package/dist/elements/CommentManager.js.map +1 -1
  41. package/dist/elements/CommonTypes.d.ts +21 -21
  42. package/dist/elements/CommonTypes.d.ts.map +1 -1
  43. package/dist/elements/CommonTypes.js +56 -56
  44. package/dist/elements/CommonTypes.js.map +1 -1
  45. package/dist/elements/CustomXml.js.map +1 -1
  46. package/dist/elements/Endnote.d.ts.map +1 -1
  47. package/dist/elements/Endnote.js +6 -6
  48. package/dist/elements/Endnote.js.map +1 -1
  49. package/dist/elements/EndnoteManager.d.ts.map +1 -1
  50. package/dist/elements/EndnoteManager.js +6 -7
  51. package/dist/elements/EndnoteManager.js.map +1 -1
  52. package/dist/elements/Field.d.ts.map +1 -1
  53. package/dist/elements/Field.js +82 -25
  54. package/dist/elements/Field.js.map +1 -1
  55. package/dist/elements/FieldHelpers.d.ts.map +1 -1
  56. package/dist/elements/FieldHelpers.js.map +1 -1
  57. package/dist/elements/FontManager.d.ts.map +1 -1
  58. package/dist/elements/FontManager.js +1 -1
  59. package/dist/elements/FontManager.js.map +1 -1
  60. package/dist/elements/Footer.js +2 -2
  61. package/dist/elements/Footer.js.map +1 -1
  62. package/dist/elements/Footnote.d.ts.map +1 -1
  63. package/dist/elements/Footnote.js +6 -6
  64. package/dist/elements/Footnote.js.map +1 -1
  65. package/dist/elements/FootnoteManager.d.ts.map +1 -1
  66. package/dist/elements/FootnoteManager.js +6 -7
  67. package/dist/elements/FootnoteManager.js.map +1 -1
  68. package/dist/elements/Header.js +2 -2
  69. package/dist/elements/Header.js.map +1 -1
  70. package/dist/elements/HeaderFooterManager.js.map +1 -1
  71. package/dist/elements/Hyperlink.d.ts +5 -3
  72. package/dist/elements/Hyperlink.d.ts.map +1 -1
  73. package/dist/elements/Hyperlink.js +134 -76
  74. package/dist/elements/Hyperlink.js.map +1 -1
  75. package/dist/elements/Image.d.ts.map +1 -1
  76. package/dist/elements/Image.js +238 -106
  77. package/dist/elements/Image.js.map +1 -1
  78. package/dist/elements/ImageManager.d.ts.map +1 -1
  79. package/dist/elements/ImageManager.js +1 -1
  80. package/dist/elements/ImageManager.js.map +1 -1
  81. package/dist/elements/ImageRun.js +1 -1
  82. package/dist/elements/ImageRun.js.map +1 -1
  83. package/dist/elements/MathElement.js.map +1 -1
  84. package/dist/elements/Paragraph.d.ts +24 -24
  85. package/dist/elements/Paragraph.d.ts.map +1 -1
  86. package/dist/elements/Paragraph.js +181 -188
  87. package/dist/elements/Paragraph.js.map +1 -1
  88. package/dist/elements/PreservedElement.js.map +1 -1
  89. package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
  90. package/dist/elements/PropertyChangeTypes.js +6 -6
  91. package/dist/elements/PropertyChangeTypes.js.map +1 -1
  92. package/dist/elements/RangeMarker.d.ts.map +1 -1
  93. package/dist/elements/RangeMarker.js.map +1 -1
  94. package/dist/elements/Revision.d.ts.map +1 -1
  95. package/dist/elements/Revision.js +4 -5
  96. package/dist/elements/Revision.js.map +1 -1
  97. package/dist/elements/RevisionContent.js.map +1 -1
  98. package/dist/elements/RevisionManager.d.ts.map +1 -1
  99. package/dist/elements/RevisionManager.js +40 -48
  100. package/dist/elements/RevisionManager.js.map +1 -1
  101. package/dist/elements/Run.d.ts +16 -16
  102. package/dist/elements/Run.d.ts.map +1 -1
  103. package/dist/elements/Run.js +256 -238
  104. package/dist/elements/Run.js.map +1 -1
  105. package/dist/elements/Section.d.ts.map +1 -1
  106. package/dist/elements/Section.js +36 -11
  107. package/dist/elements/Section.js.map +1 -1
  108. package/dist/elements/Shape.d.ts.map +1 -1
  109. package/dist/elements/Shape.js.map +1 -1
  110. package/dist/elements/StructuredDocumentTag.d.ts +6 -6
  111. package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
  112. package/dist/elements/StructuredDocumentTag.js +99 -104
  113. package/dist/elements/StructuredDocumentTag.js.map +1 -1
  114. package/dist/elements/Table.d.ts +11 -11
  115. package/dist/elements/Table.d.ts.map +1 -1
  116. package/dist/elements/Table.js +102 -107
  117. package/dist/elements/Table.js.map +1 -1
  118. package/dist/elements/TableCell.d.ts +10 -10
  119. package/dist/elements/TableCell.d.ts.map +1 -1
  120. package/dist/elements/TableCell.js +105 -106
  121. package/dist/elements/TableCell.js.map +1 -1
  122. package/dist/elements/TableGridChange.d.ts.map +1 -1
  123. package/dist/elements/TableGridChange.js.map +1 -1
  124. package/dist/elements/TableOfContents.d.ts.map +1 -1
  125. package/dist/elements/TableOfContents.js +4 -4
  126. package/dist/elements/TableOfContents.js.map +1 -1
  127. package/dist/elements/TableOfContentsElement.js.map +1 -1
  128. package/dist/elements/TableRow.d.ts.map +1 -1
  129. package/dist/elements/TableRow.js +13 -6
  130. package/dist/elements/TableRow.js.map +1 -1
  131. package/dist/elements/TextBox.d.ts.map +1 -1
  132. package/dist/elements/TextBox.js +3 -5
  133. package/dist/elements/TextBox.js.map +1 -1
  134. package/dist/formatting/AbstractNumbering.d.ts +4 -4
  135. package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
  136. package/dist/formatting/AbstractNumbering.js +54 -49
  137. package/dist/formatting/AbstractNumbering.js.map +1 -1
  138. package/dist/formatting/NumberingInstance.d.ts.map +1 -1
  139. package/dist/formatting/NumberingInstance.js +1 -3
  140. package/dist/formatting/NumberingInstance.js.map +1 -1
  141. package/dist/formatting/NumberingLevel.d.ts +5 -5
  142. package/dist/formatting/NumberingLevel.d.ts.map +1 -1
  143. package/dist/formatting/NumberingLevel.js +119 -125
  144. package/dist/formatting/NumberingLevel.js.map +1 -1
  145. package/dist/formatting/NumberingManager.d.ts.map +1 -1
  146. package/dist/formatting/NumberingManager.js +9 -9
  147. package/dist/formatting/NumberingManager.js.map +1 -1
  148. package/dist/formatting/Style.d.ts +11 -11
  149. package/dist/formatting/Style.d.ts.map +1 -1
  150. package/dist/formatting/Style.js +219 -247
  151. package/dist/formatting/Style.js.map +1 -1
  152. package/dist/formatting/StylesManager.d.ts +2 -2
  153. package/dist/formatting/StylesManager.d.ts.map +1 -1
  154. package/dist/formatting/StylesManager.js +96 -102
  155. package/dist/formatting/StylesManager.js.map +1 -1
  156. package/dist/helpers/CleanupHelper.d.ts +1 -1
  157. package/dist/helpers/CleanupHelper.d.ts.map +1 -1
  158. package/dist/helpers/CleanupHelper.js +6 -6
  159. package/dist/helpers/CleanupHelper.js.map +1 -1
  160. package/dist/images/ImageOptimizer.js +7 -7
  161. package/dist/images/ImageOptimizer.js.map +1 -1
  162. package/dist/index.d.ts +9 -9
  163. package/dist/index.d.ts.map +1 -1
  164. package/dist/index.js.map +1 -1
  165. package/dist/managers/DrawingManager.js.map +1 -1
  166. package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
  167. package/dist/tracking/DocumentTrackingContext.js +23 -7
  168. package/dist/tracking/DocumentTrackingContext.js.map +1 -1
  169. package/dist/tracking/TrackingContext.d.ts.map +1 -1
  170. package/dist/tracking/TrackingContext.js.map +1 -1
  171. package/dist/types/compatibility-types.js.map +1 -1
  172. package/dist/types/formatting.js.map +1 -1
  173. package/dist/types/list-types.d.ts +6 -6
  174. package/dist/types/list-types.js.map +1 -1
  175. package/dist/types/settings-types.js.map +1 -1
  176. package/dist/types/styleConfig.d.ts +2 -2
  177. package/dist/types/styleConfig.js.map +1 -1
  178. package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
  179. package/dist/utils/ChangelogGenerator.js +97 -101
  180. package/dist/utils/ChangelogGenerator.js.map +1 -1
  181. package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
  182. package/dist/utils/CompatibilityUpgrader.js +1 -1
  183. package/dist/utils/CompatibilityUpgrader.js.map +1 -1
  184. package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +1 -1
  185. package/dist/utils/InMemoryRevisionAcceptor.js +1 -6
  186. package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
  187. package/dist/utils/MoveOperationHelper.d.ts.map +1 -1
  188. package/dist/utils/MoveOperationHelper.js +1 -1
  189. package/dist/utils/MoveOperationHelper.js.map +1 -1
  190. package/dist/utils/RevisionAwareProcessor.d.ts.map +1 -1
  191. package/dist/utils/RevisionAwareProcessor.js +2 -4
  192. package/dist/utils/RevisionAwareProcessor.js.map +1 -1
  193. package/dist/utils/RevisionWalker.d.ts.map +1 -1
  194. package/dist/utils/RevisionWalker.js +4 -12
  195. package/dist/utils/RevisionWalker.js.map +1 -1
  196. package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
  197. package/dist/utils/SelectiveRevisionAcceptor.js +2 -6
  198. package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
  199. package/dist/utils/ShadingResolver.d.ts.map +1 -1
  200. package/dist/utils/ShadingResolver.js +1 -1
  201. package/dist/utils/ShadingResolver.js.map +1 -1
  202. package/dist/utils/acceptRevisions.d.ts.map +1 -1
  203. package/dist/utils/acceptRevisions.js +23 -12
  204. package/dist/utils/acceptRevisions.js.map +1 -1
  205. package/dist/utils/cnfStyleDecoder.d.ts +1 -1
  206. package/dist/utils/cnfStyleDecoder.d.ts.map +1 -1
  207. package/dist/utils/cnfStyleDecoder.js +40 -40
  208. package/dist/utils/cnfStyleDecoder.js.map +1 -1
  209. package/dist/utils/corruptionDetection.d.ts.map +1 -1
  210. package/dist/utils/corruptionDetection.js.map +1 -1
  211. package/dist/utils/dateFormatting.js.map +1 -1
  212. package/dist/utils/deepClone.js +1 -1
  213. package/dist/utils/deepClone.js.map +1 -1
  214. package/dist/utils/diagnostics.d.ts.map +1 -1
  215. package/dist/utils/diagnostics.js +1 -1
  216. package/dist/utils/diagnostics.js.map +1 -1
  217. package/dist/utils/errorHandling.js.map +1 -1
  218. package/dist/utils/formatting.d.ts.map +1 -1
  219. package/dist/utils/formatting.js +10 -2
  220. package/dist/utils/formatting.js.map +1 -1
  221. package/dist/utils/list-detection.d.ts +2 -2
  222. package/dist/utils/list-detection.d.ts.map +1 -1
  223. package/dist/utils/list-detection.js +21 -23
  224. package/dist/utils/list-detection.js.map +1 -1
  225. package/dist/utils/logger.d.ts.map +1 -1
  226. package/dist/utils/logger.js +12 -7
  227. package/dist/utils/logger.js.map +1 -1
  228. package/dist/utils/parsingHelpers.js.map +1 -1
  229. package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
  230. package/dist/utils/stripTrackedChanges.js +3 -3
  231. package/dist/utils/stripTrackedChanges.js.map +1 -1
  232. package/dist/utils/textDiff.d.ts +1 -1
  233. package/dist/utils/textDiff.js +8 -8
  234. package/dist/utils/textDiff.js.map +1 -1
  235. package/dist/utils/units.js.map +1 -1
  236. package/dist/utils/validation.d.ts.map +1 -1
  237. package/dist/utils/validation.js +24 -7
  238. package/dist/utils/validation.js.map +1 -1
  239. package/dist/utils/xmlSanitization.d.ts.map +1 -1
  240. package/dist/utils/xmlSanitization.js +3 -3
  241. package/dist/utils/xmlSanitization.js.map +1 -1
  242. package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
  243. package/dist/validation/RevisionAutoFixer.js +5 -5
  244. package/dist/validation/RevisionAutoFixer.js.map +1 -1
  245. package/dist/validation/RevisionValidator.d.ts.map +1 -1
  246. package/dist/validation/RevisionValidator.js +7 -9
  247. package/dist/validation/RevisionValidator.js.map +1 -1
  248. package/dist/validation/ValidationRules.js +3 -3
  249. package/dist/validation/ValidationRules.js.map +1 -1
  250. package/dist/validation/index.js.map +1 -1
  251. package/dist/xml/XMLBuilder.d.ts +1 -1
  252. package/dist/xml/XMLBuilder.d.ts.map +1 -1
  253. package/dist/xml/XMLBuilder.js +98 -100
  254. package/dist/xml/XMLBuilder.js.map +1 -1
  255. package/dist/xml/XMLParser.d.ts.map +1 -1
  256. package/dist/xml/XMLParser.js +61 -66
  257. package/dist/xml/XMLParser.js.map +1 -1
  258. package/dist/zip/ZipHandler.d.ts.map +1 -1
  259. package/dist/zip/ZipHandler.js.map +1 -1
  260. package/dist/zip/ZipReader.d.ts.map +1 -1
  261. package/dist/zip/ZipReader.js +1 -3
  262. package/dist/zip/ZipReader.js.map +1 -1
  263. package/dist/zip/ZipWriter.d.ts +1 -1
  264. package/dist/zip/ZipWriter.d.ts.map +1 -1
  265. package/dist/zip/ZipWriter.js +28 -36
  266. package/dist/zip/ZipWriter.js.map +1 -1
  267. package/dist/zip/types.js +1 -1
  268. package/dist/zip/types.js.map +1 -1
  269. package/package.json +92 -92
  270. package/src/__tests__/helper-methods.test.ts +512 -512
  271. package/src/constants/legacyCompatFlags.ts +138 -138
  272. package/src/constants/limits.ts +50 -50
  273. package/src/core/Document.ts +985 -1145
  274. package/src/core/DocumentContent.ts +461 -467
  275. package/src/core/DocumentGenerator.ts +1133 -1104
  276. package/src/core/DocumentIdManager.ts +158 -158
  277. package/src/core/DocumentParser.ts +2347 -2716
  278. package/src/core/DocumentValidator.ts +363 -372
  279. package/src/core/Relationship.ts +367 -367
  280. package/src/core/RelationshipManager.ts +429 -428
  281. package/src/elements/AlternateContent.ts +42 -42
  282. package/src/elements/Bookmark.ts +212 -210
  283. package/src/elements/BookmarkManager.ts +247 -250
  284. package/src/elements/Comment.ts +356 -359
  285. package/src/elements/CommentManager.ts +499 -502
  286. package/src/elements/CommonTypes.ts +524 -549
  287. package/src/elements/CustomXml.ts +36 -36
  288. package/src/elements/Endnote.ts +221 -217
  289. package/src/elements/EndnoteManager.ts +246 -249
  290. package/src/elements/Field.ts +1292 -1233
  291. package/src/elements/FieldHelpers.ts +329 -333
  292. package/src/elements/FontManager.ts +336 -339
  293. package/src/elements/Footer.ts +269 -269
  294. package/src/elements/Footnote.ts +221 -217
  295. package/src/elements/FootnoteManager.ts +246 -249
  296. package/src/elements/Header.ts +269 -269
  297. package/src/elements/HeaderFooterManager.ts +219 -219
  298. package/src/elements/Hyperlink.ts +1288 -1193
  299. package/src/elements/Image.ts +1982 -1756
  300. package/src/elements/ImageManager.ts +437 -432
  301. package/src/elements/ImageRun.ts +59 -59
  302. package/src/elements/MathElement.ts +65 -65
  303. package/src/elements/Paragraph.ts +4347 -4287
  304. package/src/elements/PreservedElement.ts +53 -53
  305. package/src/elements/PropertyChangeTypes.ts +458 -442
  306. package/src/elements/RangeMarker.ts +382 -400
  307. package/src/elements/Revision.ts +1198 -1217
  308. package/src/elements/RevisionContent.ts +73 -73
  309. package/src/elements/RevisionManager.ts +1070 -1070
  310. package/src/elements/Run.ts +3103 -3073
  311. package/src/elements/Section.ts +1521 -1421
  312. package/src/elements/Shape.ts +884 -873
  313. package/src/elements/StructuredDocumentTag.ts +1176 -1207
  314. package/src/elements/Table.ts +2468 -2524
  315. package/src/elements/TableCell.ts +1617 -1621
  316. package/src/elements/TableGridChange.ts +149 -151
  317. package/src/elements/TableOfContents.ts +701 -691
  318. package/src/elements/TableOfContentsElement.ts +89 -89
  319. package/src/elements/TableRow.ts +960 -929
  320. package/src/elements/TextBox.ts +766 -768
  321. package/src/formatting/AbstractNumbering.ts +580 -579
  322. package/src/formatting/NumberingInstance.ts +295 -299
  323. package/src/formatting/NumberingLevel.ts +981 -1040
  324. package/src/formatting/NumberingManager.ts +833 -827
  325. package/src/formatting/Style.ts +1785 -1879
  326. package/src/formatting/StylesManager.ts +1090 -1130
  327. package/src/helpers/CleanupHelper.ts +524 -524
  328. package/src/images/ImageOptimizer.ts +274 -274
  329. package/src/index.ts +559 -554
  330. package/src/managers/DrawingManager.ts +319 -319
  331. package/src/tracking/DocumentTrackingContext.ts +687 -674
  332. package/src/tracking/TrackingContext.ts +175 -173
  333. package/src/types/compatibility-types.ts +49 -49
  334. package/src/types/formatting.ts +210 -210
  335. package/src/types/list-types.ts +14 -14
  336. package/src/types/settings-types.ts +59 -59
  337. package/src/types/styleConfig.ts +189 -189
  338. package/src/utils/ChangelogGenerator.ts +1583 -1581
  339. package/src/utils/CompatibilityUpgrader.ts +235 -237
  340. package/src/utils/InMemoryRevisionAcceptor.ts +691 -696
  341. package/src/utils/MoveOperationHelper.ts +233 -238
  342. package/src/utils/RevisionAwareProcessor.ts +518 -526
  343. package/src/utils/RevisionWalker.ts +427 -457
  344. package/src/utils/SelectiveRevisionAcceptor.ts +662 -683
  345. package/src/utils/ShadingResolver.ts +105 -107
  346. package/src/utils/acceptRevisions.ts +723 -714
  347. package/src/utils/cnfStyleDecoder.ts +212 -217
  348. package/src/utils/corruptionDetection.ts +346 -345
  349. package/src/utils/dateFormatting.ts +20 -20
  350. package/src/utils/deepClone.ts +77 -78
  351. package/src/utils/diagnostics.ts +125 -129
  352. package/src/utils/errorHandling.ts +80 -80
  353. package/src/utils/formatting.ts +220 -213
  354. package/src/utils/list-detection.ts +32 -42
  355. package/src/utils/logger.ts +412 -404
  356. package/src/utils/parsingHelpers.ts +190 -190
  357. package/src/utils/stripTrackedChanges.ts +356 -353
  358. package/src/utils/textDiff.ts +100 -100
  359. package/src/utils/units.ts +421 -421
  360. package/src/utils/validation.ts +553 -542
  361. package/src/utils/xmlSanitization.ts +179 -182
  362. package/src/validation/RevisionAutoFixer.ts +541 -542
  363. package/src/validation/RevisionValidator.ts +470 -460
  364. package/src/validation/ValidationRules.ts +338 -338
  365. package/src/validation/index.ts +30 -30
  366. package/src/xml/XMLBuilder.ts +857 -871
  367. package/src/xml/XMLParser.ts +877 -919
  368. package/src/zip/ZipHandler.ts +629 -637
  369. package/src/zip/ZipReader.ts +295 -299
  370. package/src/zip/ZipWriter.ts +374 -390
  371. 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
- XMLBuilder.wSelf('abstractNumId', { 'w:val': this.abstractNumId.toString() })
196
- );
197
-
198
- // Add level overrides if any are set
199
- for (const [level, startValue] of this.levelOverrides) {
200
- // Skip levels that have a full level override (they take precedence)
201
- if (this.fullLevelOverrides.has(level)) continue;
202
- children.push({
203
- name: 'w:lvlOverride',
204
- attributes: { 'w:ilvl': level.toString() },
205
- children: [
206
- XMLBuilder.wSelf('startOverride', { 'w:val': startValue.toString() })
207
- ]
208
- });
209
- }
210
-
211
- // Add full level overrides
212
- for (const [level, levelDef] of this.fullLevelOverrides) {
213
- const overrideChildren: XMLElement[] = [];
214
- // Include startOverride if also set for this level
215
- if (this.levelOverrides.has(level)) {
216
- overrideChildren.push(
217
- XMLBuilder.wSelf('startOverride', { 'w:val': this.levelOverrides.get(level)!.toString() })
218
- );
219
- }
220
- overrideChildren.push(levelDef.toXML());
221
- children.push({
222
- name: 'w:lvlOverride',
223
- attributes: { 'w:ilvl': level.toString() },
224
- children: overrideChildren,
225
- });
226
- }
227
-
228
- return XMLBuilder.w('num', { 'w:numId': this.numId.toString() }, children);
229
- }
230
-
231
- /**
232
- * Factory method for creating a numbering instance
233
- * @param propertiesOrNumId The instance properties object, or numId (number)
234
- * @param abstractNumId The abstract numbering ID (if first param is a number)
235
- */
236
- static create(
237
- propertiesOrNumId: NumberingInstanceProperties | number,
238
- abstractNumId?: number
239
- ): NumberingInstance {
240
- if (typeof propertiesOrNumId === 'number') {
241
- return new NumberingInstance(propertiesOrNumId, abstractNumId);
242
- }
243
- return new NumberingInstance(propertiesOrNumId);
244
- }
245
-
246
- /**
247
- * Creates a NumberingInstance from XML element
248
- * @param xml The XML string of the <w:num> element
249
- * @returns NumberingInstance instance
250
- */
251
- static fromXML(xml: string): NumberingInstance {
252
- // Extract numId (required)
253
- const numIdMatch = /<w:num[^>]*w:numId="([^"]+)"/.exec(xml);
254
- if (!numIdMatch?.[1]) {
255
- throw new Error('Missing required w:numId attribute');
256
- }
257
- const numId = parseInt(numIdMatch[1], 10);
258
-
259
- // Extract abstractNumId (required)
260
- const abstractNumIdMatch = /<w:abstractNumId[^>]*w:val="([^"]+)"/.exec(xml);
261
- if (!abstractNumIdMatch?.[1]) {
262
- throw new Error('Missing required w:abstractNumId element');
263
- }
264
- const abstractNumId = parseInt(abstractNumIdMatch[1], 10);
265
-
266
- const instance = new NumberingInstance({
267
- numId,
268
- abstractNumId,
269
- });
270
-
271
- // Parse level overrides (w:lvlOverride)
272
- const lvlOverrideRegex = /<w:lvlOverride[^>]*w:ilvl="(\d+)"[^>]*>([\s\S]*?)<\/w:lvlOverride>/g;
273
- let match: RegExpExecArray | null;
274
- while ((match = lvlOverrideRegex.exec(xml)) !== null) {
275
- const levelStr = match[1]!;
276
- const content = match[2]!;
277
- const level = parseInt(levelStr, 10);
278
-
279
- // Check for startOverride
280
- const startOverrideMatch = /<w:startOverride[^>]*w:val="([^"]+)"/.exec(content);
281
- if (startOverrideMatch?.[1]) {
282
- instance.setLevelOverride(level, parseInt(startOverrideMatch[1], 10));
283
- }
284
-
285
- // Check for full w:lvl element
286
- const lvlMatch = /<w:lvl[^>]*>[\s\S]*?<\/w:lvl>/.exec(content);
287
- if (lvlMatch) {
288
- try {
289
- const levelDef = NumberingLevel.fromXML(lvlMatch[0]);
290
- instance.setFullLevelOverride(level, levelDef);
291
- } catch {
292
- // Skip invalid level definitions
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
+ }