docxmlater 10.1.4 → 10.1.6

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 (372) 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 +51 -50
  6. package/dist/core/Document.d.ts.map +1 -1
  7. package/dist/core/Document.js +486 -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 +1 -0
  146. package/dist/formatting/NumberingManager.d.ts.map +1 -1
  147. package/dist/formatting/NumberingManager.js +27 -9
  148. package/dist/formatting/NumberingManager.js.map +1 -1
  149. package/dist/formatting/Style.d.ts +11 -11
  150. package/dist/formatting/Style.d.ts.map +1 -1
  151. package/dist/formatting/Style.js +219 -247
  152. package/dist/formatting/Style.js.map +1 -1
  153. package/dist/formatting/StylesManager.d.ts +2 -2
  154. package/dist/formatting/StylesManager.d.ts.map +1 -1
  155. package/dist/formatting/StylesManager.js +96 -102
  156. package/dist/formatting/StylesManager.js.map +1 -1
  157. package/dist/helpers/CleanupHelper.d.ts +1 -1
  158. package/dist/helpers/CleanupHelper.d.ts.map +1 -1
  159. package/dist/helpers/CleanupHelper.js +6 -6
  160. package/dist/helpers/CleanupHelper.js.map +1 -1
  161. package/dist/images/ImageOptimizer.js +7 -7
  162. package/dist/images/ImageOptimizer.js.map +1 -1
  163. package/dist/index.d.ts +9 -9
  164. package/dist/index.d.ts.map +1 -1
  165. package/dist/index.js.map +1 -1
  166. package/dist/managers/DrawingManager.js.map +1 -1
  167. package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
  168. package/dist/tracking/DocumentTrackingContext.js +23 -7
  169. package/dist/tracking/DocumentTrackingContext.js.map +1 -1
  170. package/dist/tracking/TrackingContext.d.ts.map +1 -1
  171. package/dist/tracking/TrackingContext.js.map +1 -1
  172. package/dist/types/compatibility-types.js.map +1 -1
  173. package/dist/types/formatting.js.map +1 -1
  174. package/dist/types/list-types.d.ts +6 -6
  175. package/dist/types/list-types.js.map +1 -1
  176. package/dist/types/settings-types.js.map +1 -1
  177. package/dist/types/styleConfig.d.ts +2 -2
  178. package/dist/types/styleConfig.js.map +1 -1
  179. package/dist/utils/ChangelogGenerator.d.ts.map +1 -1
  180. package/dist/utils/ChangelogGenerator.js +97 -101
  181. package/dist/utils/ChangelogGenerator.js.map +1 -1
  182. package/dist/utils/CompatibilityUpgrader.d.ts.map +1 -1
  183. package/dist/utils/CompatibilityUpgrader.js +1 -1
  184. package/dist/utils/CompatibilityUpgrader.js.map +1 -1
  185. package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +1 -1
  186. package/dist/utils/InMemoryRevisionAcceptor.js +1 -6
  187. package/dist/utils/InMemoryRevisionAcceptor.js.map +1 -1
  188. package/dist/utils/MoveOperationHelper.d.ts.map +1 -1
  189. package/dist/utils/MoveOperationHelper.js +1 -1
  190. package/dist/utils/MoveOperationHelper.js.map +1 -1
  191. package/dist/utils/RevisionAwareProcessor.d.ts.map +1 -1
  192. package/dist/utils/RevisionAwareProcessor.js +2 -4
  193. package/dist/utils/RevisionAwareProcessor.js.map +1 -1
  194. package/dist/utils/RevisionWalker.d.ts.map +1 -1
  195. package/dist/utils/RevisionWalker.js +4 -12
  196. package/dist/utils/RevisionWalker.js.map +1 -1
  197. package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +1 -1
  198. package/dist/utils/SelectiveRevisionAcceptor.js +2 -6
  199. package/dist/utils/SelectiveRevisionAcceptor.js.map +1 -1
  200. package/dist/utils/ShadingResolver.d.ts.map +1 -1
  201. package/dist/utils/ShadingResolver.js +1 -1
  202. package/dist/utils/ShadingResolver.js.map +1 -1
  203. package/dist/utils/acceptRevisions.d.ts.map +1 -1
  204. package/dist/utils/acceptRevisions.js +23 -12
  205. package/dist/utils/acceptRevisions.js.map +1 -1
  206. package/dist/utils/cnfStyleDecoder.d.ts +1 -1
  207. package/dist/utils/cnfStyleDecoder.d.ts.map +1 -1
  208. package/dist/utils/cnfStyleDecoder.js +40 -40
  209. package/dist/utils/cnfStyleDecoder.js.map +1 -1
  210. package/dist/utils/corruptionDetection.d.ts.map +1 -1
  211. package/dist/utils/corruptionDetection.js.map +1 -1
  212. package/dist/utils/dateFormatting.js.map +1 -1
  213. package/dist/utils/deepClone.js +1 -1
  214. package/dist/utils/deepClone.js.map +1 -1
  215. package/dist/utils/diagnostics.d.ts.map +1 -1
  216. package/dist/utils/diagnostics.js +1 -1
  217. package/dist/utils/diagnostics.js.map +1 -1
  218. package/dist/utils/errorHandling.js.map +1 -1
  219. package/dist/utils/formatting.d.ts.map +1 -1
  220. package/dist/utils/formatting.js +10 -2
  221. package/dist/utils/formatting.js.map +1 -1
  222. package/dist/utils/list-detection.d.ts +2 -2
  223. package/dist/utils/list-detection.d.ts.map +1 -1
  224. package/dist/utils/list-detection.js +21 -23
  225. package/dist/utils/list-detection.js.map +1 -1
  226. package/dist/utils/logger.d.ts.map +1 -1
  227. package/dist/utils/logger.js +12 -7
  228. package/dist/utils/logger.js.map +1 -1
  229. package/dist/utils/parsingHelpers.js.map +1 -1
  230. package/dist/utils/stripTrackedChanges.d.ts.map +1 -1
  231. package/dist/utils/stripTrackedChanges.js +3 -3
  232. package/dist/utils/stripTrackedChanges.js.map +1 -1
  233. package/dist/utils/textDiff.d.ts +1 -1
  234. package/dist/utils/textDiff.js +8 -8
  235. package/dist/utils/textDiff.js.map +1 -1
  236. package/dist/utils/units.js.map +1 -1
  237. package/dist/utils/validation.d.ts.map +1 -1
  238. package/dist/utils/validation.js +24 -7
  239. package/dist/utils/validation.js.map +1 -1
  240. package/dist/utils/xmlSanitization.d.ts.map +1 -1
  241. package/dist/utils/xmlSanitization.js +3 -3
  242. package/dist/utils/xmlSanitization.js.map +1 -1
  243. package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
  244. package/dist/validation/RevisionAutoFixer.js +5 -5
  245. package/dist/validation/RevisionAutoFixer.js.map +1 -1
  246. package/dist/validation/RevisionValidator.d.ts.map +1 -1
  247. package/dist/validation/RevisionValidator.js +7 -9
  248. package/dist/validation/RevisionValidator.js.map +1 -1
  249. package/dist/validation/ValidationRules.js +3 -3
  250. package/dist/validation/ValidationRules.js.map +1 -1
  251. package/dist/validation/index.js.map +1 -1
  252. package/dist/xml/XMLBuilder.d.ts +1 -1
  253. package/dist/xml/XMLBuilder.d.ts.map +1 -1
  254. package/dist/xml/XMLBuilder.js +98 -100
  255. package/dist/xml/XMLBuilder.js.map +1 -1
  256. package/dist/xml/XMLParser.d.ts.map +1 -1
  257. package/dist/xml/XMLParser.js +61 -66
  258. package/dist/xml/XMLParser.js.map +1 -1
  259. package/dist/zip/ZipHandler.d.ts.map +1 -1
  260. package/dist/zip/ZipHandler.js.map +1 -1
  261. package/dist/zip/ZipReader.d.ts.map +1 -1
  262. package/dist/zip/ZipReader.js +1 -3
  263. package/dist/zip/ZipReader.js.map +1 -1
  264. package/dist/zip/ZipWriter.d.ts +1 -1
  265. package/dist/zip/ZipWriter.d.ts.map +1 -1
  266. package/dist/zip/ZipWriter.js +28 -36
  267. package/dist/zip/ZipWriter.js.map +1 -1
  268. package/dist/zip/types.js +1 -1
  269. package/dist/zip/types.js.map +1 -1
  270. package/package.json +92 -92
  271. package/src/__tests__/helper-methods.test.ts +512 -512
  272. package/src/constants/legacyCompatFlags.ts +138 -138
  273. package/src/constants/limits.ts +50 -50
  274. package/src/core/Document.ts +1010 -1145
  275. package/src/core/DocumentContent.ts +461 -467
  276. package/src/core/DocumentGenerator.ts +1133 -1104
  277. package/src/core/DocumentIdManager.ts +158 -158
  278. package/src/core/DocumentParser.ts +2347 -2716
  279. package/src/core/DocumentValidator.ts +363 -372
  280. package/src/core/Relationship.ts +367 -367
  281. package/src/core/RelationshipManager.ts +429 -428
  282. package/src/elements/AlternateContent.ts +42 -42
  283. package/src/elements/Bookmark.ts +212 -210
  284. package/src/elements/BookmarkManager.ts +247 -250
  285. package/src/elements/Comment.ts +356 -359
  286. package/src/elements/CommentManager.ts +499 -502
  287. package/src/elements/CommonTypes.ts +524 -549
  288. package/src/elements/CustomXml.ts +36 -36
  289. package/src/elements/Endnote.ts +221 -217
  290. package/src/elements/EndnoteManager.ts +246 -249
  291. package/src/elements/Field.ts +1292 -1233
  292. package/src/elements/FieldHelpers.ts +329 -333
  293. package/src/elements/FontManager.ts +336 -339
  294. package/src/elements/Footer.ts +269 -269
  295. package/src/elements/Footnote.ts +221 -217
  296. package/src/elements/FootnoteManager.ts +246 -249
  297. package/src/elements/Header.ts +269 -269
  298. package/src/elements/HeaderFooterManager.ts +219 -219
  299. package/src/elements/Hyperlink.ts +1288 -1193
  300. package/src/elements/Image.ts +1982 -1756
  301. package/src/elements/ImageManager.ts +437 -432
  302. package/src/elements/ImageRun.ts +59 -59
  303. package/src/elements/MathElement.ts +65 -65
  304. package/src/elements/Paragraph.ts +4347 -4287
  305. package/src/elements/PreservedElement.ts +53 -53
  306. package/src/elements/PropertyChangeTypes.ts +458 -442
  307. package/src/elements/RangeMarker.ts +382 -400
  308. package/src/elements/Revision.ts +1198 -1217
  309. package/src/elements/RevisionContent.ts +73 -73
  310. package/src/elements/RevisionManager.ts +1070 -1070
  311. package/src/elements/Run.ts +3103 -3073
  312. package/src/elements/Section.ts +1521 -1421
  313. package/src/elements/Shape.ts +884 -873
  314. package/src/elements/StructuredDocumentTag.ts +1176 -1207
  315. package/src/elements/Table.ts +2468 -2524
  316. package/src/elements/TableCell.ts +1617 -1621
  317. package/src/elements/TableGridChange.ts +149 -151
  318. package/src/elements/TableOfContents.ts +701 -691
  319. package/src/elements/TableOfContentsElement.ts +89 -89
  320. package/src/elements/TableRow.ts +960 -929
  321. package/src/elements/TextBox.ts +766 -768
  322. package/src/formatting/AbstractNumbering.ts +580 -579
  323. package/src/formatting/NumberingInstance.ts +295 -299
  324. package/src/formatting/NumberingLevel.ts +981 -1040
  325. package/src/formatting/NumberingManager.ts +875 -827
  326. package/src/formatting/Style.ts +1785 -1879
  327. package/src/formatting/StylesManager.ts +1090 -1130
  328. package/src/helpers/CleanupHelper.ts +524 -524
  329. package/src/images/ImageOptimizer.ts +274 -274
  330. package/src/index.ts +559 -554
  331. package/src/managers/DrawingManager.ts +319 -319
  332. package/src/tracking/DocumentTrackingContext.ts +687 -674
  333. package/src/tracking/TrackingContext.ts +175 -173
  334. package/src/types/compatibility-types.ts +49 -49
  335. package/src/types/formatting.ts +210 -210
  336. package/src/types/list-types.ts +14 -14
  337. package/src/types/settings-types.ts +59 -59
  338. package/src/types/styleConfig.ts +189 -189
  339. package/src/utils/ChangelogGenerator.ts +1583 -1581
  340. package/src/utils/CompatibilityUpgrader.ts +235 -237
  341. package/src/utils/InMemoryRevisionAcceptor.ts +691 -696
  342. package/src/utils/MoveOperationHelper.ts +233 -238
  343. package/src/utils/RevisionAwareProcessor.ts +518 -526
  344. package/src/utils/RevisionWalker.ts +427 -457
  345. package/src/utils/SelectiveRevisionAcceptor.ts +662 -683
  346. package/src/utils/ShadingResolver.ts +105 -107
  347. package/src/utils/acceptRevisions.ts +723 -714
  348. package/src/utils/cnfStyleDecoder.ts +212 -217
  349. package/src/utils/corruptionDetection.ts +346 -345
  350. package/src/utils/dateFormatting.ts +20 -20
  351. package/src/utils/deepClone.ts +77 -78
  352. package/src/utils/diagnostics.ts +125 -129
  353. package/src/utils/errorHandling.ts +80 -80
  354. package/src/utils/formatting.ts +220 -213
  355. package/src/utils/list-detection.ts +32 -42
  356. package/src/utils/logger.ts +412 -404
  357. package/src/utils/parsingHelpers.ts +190 -190
  358. package/src/utils/stripTrackedChanges.ts +356 -353
  359. package/src/utils/textDiff.ts +100 -100
  360. package/src/utils/units.ts +421 -421
  361. package/src/utils/validation.ts +553 -542
  362. package/src/utils/xmlSanitization.ts +179 -182
  363. package/src/validation/RevisionAutoFixer.ts +541 -542
  364. package/src/validation/RevisionValidator.ts +470 -460
  365. package/src/validation/ValidationRules.ts +338 -338
  366. package/src/validation/index.ts +30 -30
  367. package/src/xml/XMLBuilder.ts +857 -871
  368. package/src/xml/XMLParser.ts +877 -919
  369. package/src/zip/ZipHandler.ts +629 -637
  370. package/src/zip/ZipReader.ts +295 -299
  371. package/src/zip/ZipWriter.ts +374 -390
  372. 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
+ }