docxmlater 10.4.0 → 11.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (699) hide show
  1. package/README.md +3 -3
  2. package/dist/constants/legacyCompatFlags.d.ts +1 -1
  3. package/dist/constants/legacyCompatFlags.d.ts.map +1 -1
  4. package/dist/constants/legacyCompatFlags.js.map +1 -1
  5. package/dist/core/Document.d.ts +75 -67
  6. package/dist/core/Document.d.ts.map +1 -1
  7. package/dist/core/Document.js +618 -414
  8. package/dist/core/Document.js.map +1 -1
  9. package/dist/core/DocumentContent.d.ts +11 -10
  10. package/dist/core/DocumentContent.d.ts.map +1 -1
  11. package/dist/core/DocumentContent.js +19 -19
  12. package/dist/core/DocumentContent.js.map +1 -1
  13. package/dist/core/DocumentEvents.d.ts +39 -0
  14. package/dist/core/DocumentEvents.d.ts.map +1 -0
  15. package/dist/core/DocumentEvents.js +51 -0
  16. package/dist/core/DocumentEvents.js.map +1 -0
  17. package/dist/core/DocumentGenerator.d.ts +11 -11
  18. package/dist/core/DocumentGenerator.d.ts.map +1 -1
  19. package/dist/core/DocumentGenerator.js +72 -52
  20. package/dist/core/DocumentGenerator.js.map +1 -1
  21. package/dist/core/DocumentParser.d.ts +15 -15
  22. package/dist/core/DocumentParser.d.ts.map +1 -1
  23. package/dist/core/DocumentParser.js +2100 -1076
  24. package/dist/core/DocumentParser.js.map +1 -1
  25. package/dist/core/DocumentValidator.d.ts +3 -3
  26. package/dist/core/DocumentValidator.d.ts.map +1 -1
  27. package/dist/core/DocumentValidator.js +31 -31
  28. package/dist/core/DocumentValidator.js.map +1 -1
  29. package/dist/core/ElementRegistry.d.ts +22 -0
  30. package/dist/core/ElementRegistry.d.ts.map +1 -0
  31. package/dist/core/ElementRegistry.js +27 -0
  32. package/dist/core/ElementRegistry.js.map +1 -0
  33. package/dist/core/Relationship.js +4 -4
  34. package/dist/core/Relationship.js.map +1 -1
  35. package/dist/core/RelationshipManager.d.ts +1 -1
  36. package/dist/core/RelationshipManager.d.ts.map +1 -1
  37. package/dist/core/RelationshipManager.js +32 -32
  38. package/dist/core/RelationshipManager.js.map +1 -1
  39. package/dist/elements/AlternateContent.d.ts +1 -1
  40. package/dist/elements/AlternateContent.d.ts.map +1 -1
  41. package/dist/elements/AlternateContent.js.map +1 -1
  42. package/dist/elements/Bookmark.d.ts +6 -1
  43. package/dist/elements/Bookmark.d.ts.map +1 -1
  44. package/dist/elements/Bookmark.js +19 -3
  45. package/dist/elements/Bookmark.js.map +1 -1
  46. package/dist/elements/BookmarkManager.d.ts +1 -1
  47. package/dist/elements/BookmarkManager.d.ts.map +1 -1
  48. package/dist/elements/BookmarkManager.js +7 -7
  49. package/dist/elements/BookmarkManager.js.map +1 -1
  50. package/dist/elements/Comment.d.ts +2 -2
  51. package/dist/elements/Comment.d.ts.map +1 -1
  52. package/dist/elements/Comment.js +4 -4
  53. package/dist/elements/Comment.js.map +1 -1
  54. package/dist/elements/CommentManager.d.ts +2 -2
  55. package/dist/elements/CommentManager.d.ts.map +1 -1
  56. package/dist/elements/CommentManager.js +9 -9
  57. package/dist/elements/CommentManager.js.map +1 -1
  58. package/dist/elements/CommonTypes.d.ts +9 -4
  59. package/dist/elements/CommonTypes.d.ts.map +1 -1
  60. package/dist/elements/CommonTypes.js +1 -0
  61. package/dist/elements/CommonTypes.js.map +1 -1
  62. package/dist/elements/CustomXml.d.ts +1 -1
  63. package/dist/elements/CustomXml.d.ts.map +1 -1
  64. package/dist/elements/CustomXml.js.map +1 -1
  65. package/dist/elements/Endnote.d.ts +2 -2
  66. package/dist/elements/Endnote.d.ts.map +1 -1
  67. package/dist/elements/Endnote.js +9 -9
  68. package/dist/elements/Endnote.js.map +1 -1
  69. package/dist/elements/EndnoteManager.d.ts +1 -1
  70. package/dist/elements/EndnoteManager.d.ts.map +1 -1
  71. package/dist/elements/EndnoteManager.js +11 -11
  72. package/dist/elements/EndnoteManager.js.map +1 -1
  73. package/dist/elements/Field.d.ts +9 -5
  74. package/dist/elements/Field.d.ts.map +1 -1
  75. package/dist/elements/Field.js +21 -9
  76. package/dist/elements/Field.js.map +1 -1
  77. package/dist/elements/FieldHelpers.d.ts +1 -1
  78. package/dist/elements/FieldHelpers.d.ts.map +1 -1
  79. package/dist/elements/FieldHelpers.js +10 -10
  80. package/dist/elements/FieldHelpers.js.map +1 -1
  81. package/dist/elements/Footer.d.ts +3 -3
  82. package/dist/elements/Footer.d.ts.map +1 -1
  83. package/dist/elements/Footer.js +5 -5
  84. package/dist/elements/Footer.js.map +1 -1
  85. package/dist/elements/Footnote.d.ts +2 -2
  86. package/dist/elements/Footnote.d.ts.map +1 -1
  87. package/dist/elements/Footnote.js +9 -9
  88. package/dist/elements/Footnote.js.map +1 -1
  89. package/dist/elements/FootnoteManager.d.ts +1 -1
  90. package/dist/elements/FootnoteManager.d.ts.map +1 -1
  91. package/dist/elements/FootnoteManager.js +11 -11
  92. package/dist/elements/FootnoteManager.js.map +1 -1
  93. package/dist/elements/Header.d.ts +3 -3
  94. package/dist/elements/Header.d.ts.map +1 -1
  95. package/dist/elements/Header.js +5 -5
  96. package/dist/elements/Header.js.map +1 -1
  97. package/dist/elements/HeaderFooterManager.d.ts +2 -2
  98. package/dist/elements/HeaderFooterManager.d.ts.map +1 -1
  99. package/dist/elements/HeaderFooterManager.js.map +1 -1
  100. package/dist/elements/Hyperlink.d.ts +5 -5
  101. package/dist/elements/Hyperlink.d.ts.map +1 -1
  102. package/dist/elements/Hyperlink.js +29 -29
  103. package/dist/elements/Hyperlink.js.map +1 -1
  104. package/dist/elements/Image.d.ts +1 -1
  105. package/dist/elements/Image.d.ts.map +1 -1
  106. package/dist/elements/Image.js +67 -67
  107. package/dist/elements/Image.js.map +1 -1
  108. package/dist/elements/ImageManager.d.ts +1 -1
  109. package/dist/elements/ImageManager.d.ts.map +1 -1
  110. package/dist/elements/ImageManager.js +4 -4
  111. package/dist/elements/ImageManager.js.map +1 -1
  112. package/dist/elements/ImageRun.d.ts +3 -3
  113. package/dist/elements/ImageRun.d.ts.map +1 -1
  114. package/dist/elements/ImageRun.js +2 -2
  115. package/dist/elements/ImageRun.js.map +1 -1
  116. package/dist/elements/MathElement.d.ts +1 -1
  117. package/dist/elements/MathElement.d.ts.map +1 -1
  118. package/dist/elements/MathElement.js.map +1 -1
  119. package/dist/elements/Paragraph.d.ts +34 -19
  120. package/dist/elements/Paragraph.d.ts.map +1 -1
  121. package/dist/elements/Paragraph.js +286 -231
  122. package/dist/elements/Paragraph.js.map +1 -1
  123. package/dist/elements/PreservedElement.d.ts +1 -1
  124. package/dist/elements/PreservedElement.d.ts.map +1 -1
  125. package/dist/elements/PreservedElement.js.map +1 -1
  126. package/dist/elements/PropertyChangeTypes.d.ts +2 -2
  127. package/dist/elements/PropertyChangeTypes.d.ts.map +1 -1
  128. package/dist/elements/PropertyChangeTypes.js.map +1 -1
  129. package/dist/elements/RangeMarker.d.ts +14 -1
  130. package/dist/elements/RangeMarker.d.ts.map +1 -1
  131. package/dist/elements/RangeMarker.js +46 -8
  132. package/dist/elements/RangeMarker.js.map +1 -1
  133. package/dist/elements/RegisteredBodyElement.d.ts +15 -0
  134. package/dist/elements/RegisteredBodyElement.d.ts.map +1 -0
  135. package/dist/elements/RegisteredBodyElement.js +44 -0
  136. package/dist/elements/RegisteredBodyElement.js.map +1 -0
  137. package/dist/elements/Revision.d.ts +8 -8
  138. package/dist/elements/Revision.d.ts.map +1 -1
  139. package/dist/elements/Revision.js +12 -12
  140. package/dist/elements/Revision.js.map +1 -1
  141. package/dist/elements/RevisionContent.d.ts +3 -3
  142. package/dist/elements/RevisionContent.d.ts.map +1 -1
  143. package/dist/elements/RevisionContent.js.map +1 -1
  144. package/dist/elements/RevisionManager.d.ts +2 -2
  145. package/dist/elements/RevisionManager.d.ts.map +1 -1
  146. package/dist/elements/RevisionManager.js +2 -2
  147. package/dist/elements/RevisionManager.js.map +1 -1
  148. package/dist/elements/Run.d.ts +16 -10
  149. package/dist/elements/Run.d.ts.map +1 -1
  150. package/dist/elements/Run.js +199 -173
  151. package/dist/elements/Run.js.map +1 -1
  152. package/dist/elements/Section.d.ts +4 -2
  153. package/dist/elements/Section.d.ts.map +1 -1
  154. package/dist/elements/Section.js +152 -145
  155. package/dist/elements/Section.js.map +1 -1
  156. package/dist/elements/Shape.d.ts +3 -3
  157. package/dist/elements/Shape.d.ts.map +1 -1
  158. package/dist/elements/Shape.js +12 -12
  159. package/dist/elements/Shape.js.map +1 -1
  160. package/dist/elements/StructuredDocumentTag.d.ts +3 -3
  161. package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
  162. package/dist/elements/StructuredDocumentTag.js +39 -39
  163. package/dist/elements/StructuredDocumentTag.js.map +1 -1
  164. package/dist/elements/Table.d.ts +16 -10
  165. package/dist/elements/Table.d.ts.map +1 -1
  166. package/dist/elements/Table.js +118 -89
  167. package/dist/elements/Table.js.map +1 -1
  168. package/dist/elements/TableCell.d.ts +11 -11
  169. package/dist/elements/TableCell.d.ts.map +1 -1
  170. package/dist/elements/TableCell.js +108 -78
  171. package/dist/elements/TableCell.js.map +1 -1
  172. package/dist/elements/TableGridChange.d.ts +1 -1
  173. package/dist/elements/TableGridChange.d.ts.map +1 -1
  174. package/dist/elements/TableGridChange.js +3 -3
  175. package/dist/elements/TableGridChange.js.map +1 -1
  176. package/dist/elements/TableOfContents.d.ts +1 -1
  177. package/dist/elements/TableOfContents.d.ts.map +1 -1
  178. package/dist/elements/TableOfContents.js +2 -2
  179. package/dist/elements/TableOfContents.js.map +1 -1
  180. package/dist/elements/TableOfContentsElement.d.ts +2 -2
  181. package/dist/elements/TableOfContentsElement.d.ts.map +1 -1
  182. package/dist/elements/TableOfContentsElement.js +5 -5
  183. package/dist/elements/TableOfContentsElement.js.map +1 -1
  184. package/dist/elements/TableRow.d.ts +18 -7
  185. package/dist/elements/TableRow.d.ts.map +1 -1
  186. package/dist/elements/TableRow.js +127 -74
  187. package/dist/elements/TableRow.js.map +1 -1
  188. package/dist/elements/TextBox.d.ts +4 -4
  189. package/dist/elements/TextBox.d.ts.map +1 -1
  190. package/dist/elements/TextBox.js +6 -6
  191. package/dist/elements/TextBox.js.map +1 -1
  192. package/dist/esm/constants/legacyCompatFlags.js +97 -0
  193. package/dist/esm/constants/legacyCompatFlags.js.map +1 -0
  194. package/dist/esm/constants/limits.js +36 -0
  195. package/dist/esm/constants/limits.js.map +1 -0
  196. package/dist/esm/core/Document.js +8498 -0
  197. package/dist/esm/core/Document.js.map +1 -0
  198. package/dist/esm/core/DocumentContent.js +190 -0
  199. package/dist/esm/core/DocumentContent.js.map +1 -0
  200. package/dist/esm/core/DocumentEvents.js +47 -0
  201. package/dist/esm/core/DocumentEvents.js.map +1 -0
  202. package/dist/esm/core/DocumentGenerator.js +764 -0
  203. package/dist/esm/core/DocumentGenerator.js.map +1 -0
  204. package/dist/esm/core/DocumentIdManager.js +67 -0
  205. package/dist/esm/core/DocumentIdManager.js.map +1 -0
  206. package/dist/esm/core/DocumentParser.js +8760 -0
  207. package/dist/esm/core/DocumentParser.js.map +1 -0
  208. package/dist/esm/core/DocumentValidator.js +222 -0
  209. package/dist/esm/core/DocumentValidator.js.map +1 -0
  210. package/dist/esm/core/ElementRegistry.js +24 -0
  211. package/dist/esm/core/ElementRegistry.js.map +1 -0
  212. package/dist/esm/core/Relationship.js +177 -0
  213. package/dist/esm/core/Relationship.js.map +1 -0
  214. package/dist/esm/core/RelationshipManager.js +202 -0
  215. package/dist/esm/core/RelationshipManager.js.map +1 -0
  216. package/dist/esm/elements/AlternateContent.js +19 -0
  217. package/dist/esm/elements/AlternateContent.js.map +1 -0
  218. package/dist/esm/elements/Bookmark.js +115 -0
  219. package/dist/esm/elements/Bookmark.js.map +1 -0
  220. package/dist/esm/elements/BookmarkManager.js +99 -0
  221. package/dist/esm/elements/BookmarkManager.js.map +1 -0
  222. package/dist/esm/elements/Comment.js +181 -0
  223. package/dist/esm/elements/Comment.js.map +1 -0
  224. package/dist/esm/elements/CommentManager.js +233 -0
  225. package/dist/esm/elements/CommentManager.js.map +1 -0
  226. package/dist/esm/elements/CommonTypes.js +106 -0
  227. package/dist/esm/elements/CommonTypes.js.map +1 -0
  228. package/dist/esm/elements/CustomXml.js +19 -0
  229. package/dist/esm/elements/CustomXml.js.map +1 -0
  230. package/dist/esm/elements/Endnote.js +107 -0
  231. package/dist/esm/elements/Endnote.js.map +1 -0
  232. package/dist/esm/elements/EndnoteManager.js +119 -0
  233. package/dist/esm/elements/EndnoteManager.js.map +1 -0
  234. package/dist/esm/elements/Field.js +856 -0
  235. package/dist/esm/elements/Field.js.map +1 -0
  236. package/dist/esm/elements/FieldHelpers.js +134 -0
  237. package/dist/esm/elements/FieldHelpers.js.map +1 -0
  238. package/dist/esm/elements/FontManager.js +158 -0
  239. package/dist/esm/elements/FontManager.js.map +1 -0
  240. package/dist/esm/elements/Footer.js +141 -0
  241. package/dist/esm/elements/Footer.js.map +1 -0
  242. package/dist/esm/elements/Footnote.js +107 -0
  243. package/dist/esm/elements/Footnote.js.map +1 -0
  244. package/dist/esm/elements/FootnoteManager.js +119 -0
  245. package/dist/esm/elements/FootnoteManager.js.map +1 -0
  246. package/dist/esm/elements/Header.js +141 -0
  247. package/dist/esm/elements/Header.js.map +1 -0
  248. package/dist/esm/elements/HeaderFooterManager.js +87 -0
  249. package/dist/esm/elements/HeaderFooterManager.js.map +1 -0
  250. package/dist/esm/elements/Hyperlink.js +586 -0
  251. package/dist/esm/elements/Hyperlink.js.map +1 -0
  252. package/dist/esm/elements/Image.js +1288 -0
  253. package/dist/esm/elements/Image.js.map +1 -0
  254. package/dist/esm/elements/ImageManager.js +223 -0
  255. package/dist/esm/elements/ImageManager.js.map +1 -0
  256. package/dist/esm/elements/ImageRun.js +29 -0
  257. package/dist/esm/elements/ImageRun.js.map +1 -0
  258. package/dist/esm/elements/MathElement.js +37 -0
  259. package/dist/esm/elements/MathElement.js.map +1 -0
  260. package/dist/esm/elements/Paragraph.js +2308 -0
  261. package/dist/esm/elements/Paragraph.js.map +1 -0
  262. package/dist/esm/elements/PreservedElement.js +29 -0
  263. package/dist/esm/elements/PreservedElement.js.map +1 -0
  264. package/dist/esm/elements/PropertyChangeTypes.js +53 -0
  265. package/dist/esm/elements/PropertyChangeTypes.js.map +1 -0
  266. package/dist/esm/elements/RangeMarker.js +219 -0
  267. package/dist/esm/elements/RangeMarker.js.map +1 -0
  268. package/dist/esm/elements/RegisteredBodyElement.js +40 -0
  269. package/dist/esm/elements/RegisteredBodyElement.js.map +1 -0
  270. package/dist/esm/elements/Revision.js +498 -0
  271. package/dist/esm/elements/Revision.js.map +1 -0
  272. package/dist/esm/elements/RevisionContent.js +18 -0
  273. package/dist/esm/elements/RevisionContent.js.map +1 -0
  274. package/dist/esm/elements/RevisionManager.js +486 -0
  275. package/dist/esm/elements/RevisionManager.js.map +1 -0
  276. package/dist/esm/elements/Run.js +1465 -0
  277. package/dist/esm/elements/Run.js.map +1 -0
  278. package/dist/esm/elements/Section.js +978 -0
  279. package/dist/esm/elements/Section.js.map +1 -0
  280. package/dist/esm/elements/Shape.js +493 -0
  281. package/dist/esm/elements/Shape.js.map +1 -0
  282. package/dist/esm/elements/StructuredDocumentTag.js +471 -0
  283. package/dist/esm/elements/StructuredDocumentTag.js.map +1 -0
  284. package/dist/esm/elements/Table.js +1456 -0
  285. package/dist/esm/elements/Table.js.map +1 -0
  286. package/dist/esm/elements/TableCell.js +835 -0
  287. package/dist/esm/elements/TableCell.js.map +1 -0
  288. package/dist/esm/elements/TableGridChange.js +52 -0
  289. package/dist/esm/elements/TableGridChange.js.map +1 -0
  290. package/dist/esm/elements/TableOfContents.js +389 -0
  291. package/dist/esm/elements/TableOfContents.js.map +1 -0
  292. package/dist/esm/elements/TableOfContentsElement.js +29 -0
  293. package/dist/esm/elements/TableOfContentsElement.js.map +1 -0
  294. package/dist/esm/elements/TableRow.js +555 -0
  295. package/dist/esm/elements/TableRow.js.map +1 -0
  296. package/dist/esm/elements/TextBox.js +459 -0
  297. package/dist/esm/elements/TextBox.js.map +1 -0
  298. package/dist/esm/formatting/AbstractNumbering.js +325 -0
  299. package/dist/esm/formatting/AbstractNumbering.js.map +1 -0
  300. package/dist/esm/formatting/NumberingInstance.js +150 -0
  301. package/dist/esm/formatting/NumberingInstance.js.map +1 -0
  302. package/dist/esm/formatting/NumberingLevel.js +608 -0
  303. package/dist/esm/formatting/NumberingLevel.js.map +1 -0
  304. package/dist/esm/formatting/NumberingManager.js +423 -0
  305. package/dist/esm/formatting/NumberingManager.js.map +1 -0
  306. package/dist/esm/formatting/Style.js +1151 -0
  307. package/dist/esm/formatting/Style.js.map +1 -0
  308. package/dist/esm/formatting/StylesManager.js +557 -0
  309. package/dist/esm/formatting/StylesManager.js.map +1 -0
  310. package/dist/esm/helpers/CleanupHelper.js +350 -0
  311. package/dist/esm/helpers/CleanupHelper.js.map +1 -0
  312. package/dist/esm/images/ImageOptimizer.js +161 -0
  313. package/dist/esm/images/ImageOptimizer.js.map +1 -0
  314. package/dist/esm/index.js +75 -0
  315. package/dist/esm/index.js.map +1 -0
  316. package/dist/esm/internal.js +16 -0
  317. package/dist/esm/internal.js.map +1 -0
  318. package/dist/esm/managers/DrawingManager.js +163 -0
  319. package/dist/esm/managers/DrawingManager.js.map +1 -0
  320. package/dist/esm/package.json +3 -0
  321. package/dist/esm/processors/ChangelogGenerator.js +970 -0
  322. package/dist/esm/processors/ChangelogGenerator.js.map +1 -0
  323. package/dist/esm/processors/CompatibilityUpgrader.js +130 -0
  324. package/dist/esm/processors/CompatibilityUpgrader.js.map +1 -0
  325. package/dist/esm/processors/InMemoryRevisionAcceptor.js +530 -0
  326. package/dist/esm/processors/InMemoryRevisionAcceptor.js.map +1 -0
  327. package/dist/esm/processors/MoveOperationHelper.js +57 -0
  328. package/dist/esm/processors/MoveOperationHelper.js.map +1 -0
  329. package/dist/esm/processors/RevisionAwareProcessor.js +232 -0
  330. package/dist/esm/processors/RevisionAwareProcessor.js.map +1 -0
  331. package/dist/esm/processors/RevisionWalker.js +278 -0
  332. package/dist/esm/processors/RevisionWalker.js.map +1 -0
  333. package/dist/{utils → esm/processors}/SelectiveRevisionAcceptor.js +81 -42
  334. package/dist/esm/processors/SelectiveRevisionAcceptor.js.map +1 -0
  335. package/dist/esm/processors/ShadingResolver.js +66 -0
  336. package/dist/esm/processors/ShadingResolver.js.map +1 -0
  337. package/dist/esm/processors/acceptRevisions.js +416 -0
  338. package/dist/esm/processors/acceptRevisions.js.map +1 -0
  339. package/dist/esm/processors/cnfStyleDecoder.js +89 -0
  340. package/dist/esm/processors/cnfStyleDecoder.js.map +1 -0
  341. package/dist/esm/processors/stripTrackedChanges.js +201 -0
  342. package/dist/esm/processors/stripTrackedChanges.js.map +1 -0
  343. package/dist/esm/tracking/DocumentTrackingContext.js +531 -0
  344. package/dist/esm/tracking/DocumentTrackingContext.js.map +1 -0
  345. package/dist/esm/tracking/TrackingContext.js +2 -0
  346. package/dist/esm/tracking/TrackingContext.js.map +1 -0
  347. package/dist/esm/types/compatibility-types.js +8 -0
  348. package/dist/esm/types/compatibility-types.js.map +1 -0
  349. package/dist/esm/types/document-types.js +2 -0
  350. package/dist/esm/types/document-types.js.map +1 -0
  351. package/dist/esm/types/formatting.js +2 -0
  352. package/dist/esm/types/formatting.js.map +1 -0
  353. package/dist/esm/types/list-types.js +2 -0
  354. package/dist/esm/types/list-types.js.map +1 -0
  355. package/dist/esm/types/settings-types.js +2 -0
  356. package/dist/esm/types/settings-types.js.map +1 -0
  357. package/dist/esm/types/styleConfig.js +2 -0
  358. package/dist/esm/types/styleConfig.js.map +1 -0
  359. package/dist/esm/utils/KeyedRegistry.js +32 -0
  360. package/dist/esm/utils/KeyedRegistry.js.map +1 -0
  361. package/dist/esm/utils/corruptionDetection.js +155 -0
  362. package/dist/esm/utils/corruptionDetection.js.map +1 -0
  363. package/dist/esm/utils/dateFormatting.js +4 -0
  364. package/dist/esm/utils/dateFormatting.js.map +1 -0
  365. package/dist/esm/utils/deepClone.js +40 -0
  366. package/dist/esm/utils/deepClone.js.map +1 -0
  367. package/dist/esm/utils/deepEqual.js +47 -0
  368. package/dist/esm/utils/deepEqual.js.map +1 -0
  369. package/dist/esm/utils/diagnostics.js +69 -0
  370. package/dist/esm/utils/diagnostics.js.map +1 -0
  371. package/dist/esm/utils/errorHandling.js +36 -0
  372. package/dist/esm/utils/errorHandling.js.map +1 -0
  373. package/dist/esm/utils/formatting.js +93 -0
  374. package/dist/esm/utils/formatting.js.map +1 -0
  375. package/dist/esm/utils/list-detection.js +148 -0
  376. package/dist/esm/utils/list-detection.js.map +1 -0
  377. package/dist/esm/utils/logger.js +205 -0
  378. package/dist/esm/utils/logger.js.map +1 -0
  379. package/dist/esm/utils/parsingHelpers.js +56 -0
  380. package/dist/esm/utils/parsingHelpers.js.map +1 -0
  381. package/dist/esm/utils/textDiff.js +42 -0
  382. package/dist/esm/utils/textDiff.js.map +1 -0
  383. package/dist/esm/utils/units.js +152 -0
  384. package/dist/esm/utils/units.js.map +1 -0
  385. package/dist/esm/utils/validation.js +285 -0
  386. package/dist/esm/utils/validation.js.map +1 -0
  387. package/dist/esm/utils/xmlSanitization.js +54 -0
  388. package/dist/esm/utils/xmlSanitization.js.map +1 -0
  389. package/dist/esm/validation/RevisionAutoFixer.js +340 -0
  390. package/dist/esm/validation/RevisionAutoFixer.js.map +1 -0
  391. package/dist/esm/validation/RevisionValidator.js +240 -0
  392. package/dist/esm/validation/RevisionValidator.js.map +1 -0
  393. package/dist/esm/validation/ValidationRuleRegistry.js +40 -0
  394. package/dist/esm/validation/ValidationRuleRegistry.js.map +1 -0
  395. package/dist/esm/validation/ValidationRules.js +92 -0
  396. package/dist/esm/validation/ValidationRules.js.map +1 -0
  397. package/dist/esm/validation/index.js +4 -0
  398. package/dist/esm/validation/index.js.map +1 -0
  399. package/dist/esm/xml/XMLBuilder.js +434 -0
  400. package/dist/esm/xml/XMLBuilder.js.map +1 -0
  401. package/dist/esm/xml/XMLParser.js +486 -0
  402. package/dist/esm/xml/XMLParser.js.map +1 -0
  403. package/dist/esm/zip/ZipHandler.js +298 -0
  404. package/dist/esm/zip/ZipHandler.js.map +1 -0
  405. package/dist/esm/zip/ZipReader.js +147 -0
  406. package/dist/esm/zip/ZipReader.js.map +1 -0
  407. package/dist/esm/zip/ZipWriter.js +199 -0
  408. package/dist/esm/zip/ZipWriter.js.map +1 -0
  409. package/dist/esm/zip/errors.js +43 -0
  410. package/dist/esm/zip/errors.js.map +1 -0
  411. package/dist/esm/zip/types.js +31 -0
  412. package/dist/esm/zip/types.js.map +1 -0
  413. package/dist/formatting/AbstractNumbering.d.ts +2 -2
  414. package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
  415. package/dist/formatting/AbstractNumbering.js +33 -33
  416. package/dist/formatting/AbstractNumbering.js.map +1 -1
  417. package/dist/formatting/NumberingInstance.d.ts +2 -2
  418. package/dist/formatting/NumberingInstance.d.ts.map +1 -1
  419. package/dist/formatting/NumberingInstance.js +7 -7
  420. package/dist/formatting/NumberingInstance.js.map +1 -1
  421. package/dist/formatting/NumberingLevel.d.ts +11 -2
  422. package/dist/formatting/NumberingLevel.d.ts.map +1 -1
  423. package/dist/formatting/NumberingLevel.js +111 -25
  424. package/dist/formatting/NumberingLevel.js.map +1 -1
  425. package/dist/formatting/NumberingManager.d.ts +4 -4
  426. package/dist/formatting/NumberingManager.d.ts.map +1 -1
  427. package/dist/formatting/NumberingManager.js +28 -28
  428. package/dist/formatting/NumberingManager.js.map +1 -1
  429. package/dist/formatting/Style.d.ts +14 -7
  430. package/dist/formatting/Style.d.ts.map +1 -1
  431. package/dist/formatting/Style.js +309 -112
  432. package/dist/formatting/Style.js.map +1 -1
  433. package/dist/formatting/StylesManager.d.ts +2 -2
  434. package/dist/formatting/StylesManager.d.ts.map +1 -1
  435. package/dist/formatting/StylesManager.js +52 -52
  436. package/dist/formatting/StylesManager.js.map +1 -1
  437. package/dist/helpers/CleanupHelper.d.ts +1 -1
  438. package/dist/helpers/CleanupHelper.d.ts.map +1 -1
  439. package/dist/helpers/CleanupHelper.js +15 -15
  440. package/dist/helpers/CleanupHelper.js.map +1 -1
  441. package/dist/index.d.ts +81 -90
  442. package/dist/index.d.ts.map +1 -1
  443. package/dist/index.js +286 -317
  444. package/dist/index.js.map +1 -1
  445. package/dist/internal.d.ts +16 -0
  446. package/dist/internal.d.ts.map +1 -0
  447. package/dist/internal.js +42 -0
  448. package/dist/internal.js.map +1 -0
  449. package/dist/managers/DrawingManager.d.ts +3 -3
  450. package/dist/managers/DrawingManager.d.ts.map +1 -1
  451. package/dist/managers/DrawingManager.js +12 -12
  452. package/dist/managers/DrawingManager.js.map +1 -1
  453. package/dist/{utils → processors}/ChangelogGenerator.d.ts +2 -2
  454. package/dist/processors/ChangelogGenerator.d.ts.map +1 -0
  455. package/dist/{utils → processors}/ChangelogGenerator.js +2 -2
  456. package/dist/processors/ChangelogGenerator.js.map +1 -0
  457. package/dist/processors/CompatibilityUpgrader.d.ts.map +1 -0
  458. package/dist/{utils → processors}/CompatibilityUpgrader.js +10 -10
  459. package/dist/processors/CompatibilityUpgrader.js.map +1 -0
  460. package/dist/{utils → processors}/InMemoryRevisionAcceptor.d.ts +3 -3
  461. package/dist/processors/InMemoryRevisionAcceptor.d.ts.map +1 -0
  462. package/dist/{utils → processors}/InMemoryRevisionAcceptor.js +84 -27
  463. package/dist/processors/InMemoryRevisionAcceptor.js.map +1 -0
  464. package/dist/{utils → processors}/MoveOperationHelper.d.ts +4 -4
  465. package/dist/processors/MoveOperationHelper.d.ts.map +1 -0
  466. package/dist/{utils → processors}/MoveOperationHelper.js +10 -10
  467. package/dist/processors/MoveOperationHelper.js.map +1 -0
  468. package/dist/{utils → processors}/RevisionAwareProcessor.d.ts +3 -3
  469. package/dist/processors/RevisionAwareProcessor.d.ts.map +1 -0
  470. package/dist/{utils → processors}/RevisionAwareProcessor.js +2 -2
  471. package/dist/processors/RevisionAwareProcessor.js.map +1 -0
  472. package/dist/{utils → processors}/RevisionWalker.d.ts +2 -1
  473. package/dist/processors/RevisionWalker.d.ts.map +1 -0
  474. package/dist/{utils → processors}/RevisionWalker.js +28 -0
  475. package/dist/processors/RevisionWalker.js.map +1 -0
  476. package/dist/{utils → processors}/SelectiveRevisionAcceptor.d.ts +4 -3
  477. package/dist/processors/SelectiveRevisionAcceptor.d.ts.map +1 -0
  478. package/dist/processors/SelectiveRevisionAcceptor.js +402 -0
  479. package/dist/processors/SelectiveRevisionAcceptor.js.map +1 -0
  480. package/dist/processors/ShadingResolver.d.ts +6 -0
  481. package/dist/processors/ShadingResolver.d.ts.map +1 -0
  482. package/dist/{utils → processors}/ShadingResolver.js +2 -2
  483. package/dist/processors/ShadingResolver.js.map +1 -0
  484. package/dist/{utils → processors}/acceptRevisions.d.ts +1 -1
  485. package/dist/processors/acceptRevisions.d.ts.map +1 -0
  486. package/dist/{utils → processors}/acceptRevisions.js +24 -4
  487. package/dist/processors/acceptRevisions.js.map +1 -0
  488. package/dist/{utils → processors}/cnfStyleDecoder.d.ts +1 -1
  489. package/dist/processors/cnfStyleDecoder.d.ts.map +1 -0
  490. package/dist/processors/cnfStyleDecoder.js.map +1 -0
  491. package/dist/processors/stripTrackedChanges.d.ts +3 -0
  492. package/dist/processors/stripTrackedChanges.d.ts.map +1 -0
  493. package/dist/{utils → processors}/stripTrackedChanges.js +16 -6
  494. package/dist/processors/stripTrackedChanges.js.map +1 -0
  495. package/dist/tracking/DocumentTrackingContext.d.ts +4 -4
  496. package/dist/tracking/DocumentTrackingContext.d.ts.map +1 -1
  497. package/dist/tracking/DocumentTrackingContext.js +38 -43
  498. package/dist/tracking/DocumentTrackingContext.js.map +1 -1
  499. package/dist/tracking/TrackingContext.d.ts +8 -8
  500. package/dist/tracking/TrackingContext.d.ts.map +1 -1
  501. package/dist/tracking/TrackingContext.js.map +1 -1
  502. package/dist/types/document-types.d.ts +28 -0
  503. package/dist/types/document-types.d.ts.map +1 -0
  504. package/dist/types/document-types.js +3 -0
  505. package/dist/types/document-types.js.map +1 -0
  506. package/dist/types/formatting.d.ts +4 -4
  507. package/dist/types/formatting.d.ts.map +1 -1
  508. package/dist/types/formatting.js.map +1 -1
  509. package/dist/types/settings-types.d.ts +6 -0
  510. package/dist/types/settings-types.d.ts.map +1 -1
  511. package/dist/types/settings-types.js.map +1 -1
  512. package/dist/utils/KeyedRegistry.d.ts +13 -0
  513. package/dist/utils/KeyedRegistry.d.ts.map +1 -0
  514. package/dist/utils/KeyedRegistry.js +36 -0
  515. package/dist/utils/KeyedRegistry.js.map +1 -0
  516. package/dist/utils/corruptionDetection.d.ts +1 -1
  517. package/dist/utils/corruptionDetection.d.ts.map +1 -1
  518. package/dist/utils/corruptionDetection.js +4 -4
  519. package/dist/utils/corruptionDetection.js.map +1 -1
  520. package/dist/utils/deepEqual.d.ts +2 -0
  521. package/dist/utils/deepEqual.d.ts.map +1 -0
  522. package/dist/utils/deepEqual.js +50 -0
  523. package/dist/utils/deepEqual.js.map +1 -0
  524. package/dist/utils/list-detection.d.ts +2 -2
  525. package/dist/utils/list-detection.d.ts.map +1 -1
  526. package/dist/utils/list-detection.js.map +1 -1
  527. package/dist/utils/parsingHelpers.d.ts +1 -1
  528. package/dist/utils/parsingHelpers.d.ts.map +1 -1
  529. package/dist/utils/parsingHelpers.js +2 -2
  530. package/dist/utils/parsingHelpers.js.map +1 -1
  531. package/dist/utils/validation.js +7 -7
  532. package/dist/utils/validation.js.map +1 -1
  533. package/dist/utils/xmlSanitization.js +2 -2
  534. package/dist/utils/xmlSanitization.js.map +1 -1
  535. package/dist/validation/RevisionAutoFixer.d.ts +4 -4
  536. package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
  537. package/dist/validation/RevisionAutoFixer.js +11 -11
  538. package/dist/validation/RevisionAutoFixer.js.map +1 -1
  539. package/dist/validation/RevisionValidator.d.ts +5 -4
  540. package/dist/validation/RevisionValidator.d.ts.map +1 -1
  541. package/dist/validation/RevisionValidator.js +29 -30
  542. package/dist/validation/RevisionValidator.js.map +1 -1
  543. package/dist/validation/ValidationRuleRegistry.d.ts +27 -0
  544. package/dist/validation/ValidationRuleRegistry.d.ts.map +1 -0
  545. package/dist/validation/ValidationRuleRegistry.js +43 -0
  546. package/dist/validation/ValidationRuleRegistry.js.map +1 -0
  547. package/dist/validation/index.d.ts +3 -3
  548. package/dist/validation/index.d.ts.map +1 -1
  549. package/dist/validation/index.js +10 -10
  550. package/dist/validation/index.js.map +1 -1
  551. package/dist/xml/XMLBuilder.d.ts +6 -1
  552. package/dist/xml/XMLBuilder.d.ts.map +1 -1
  553. package/dist/xml/XMLBuilder.js +11 -6
  554. package/dist/xml/XMLBuilder.js.map +1 -1
  555. package/dist/xml/XMLParser.js +6 -6
  556. package/dist/xml/XMLParser.js.map +1 -1
  557. package/dist/zip/ZipHandler.d.ts +1 -1
  558. package/dist/zip/ZipHandler.d.ts.map +1 -1
  559. package/dist/zip/ZipHandler.js +8 -8
  560. package/dist/zip/ZipHandler.js.map +1 -1
  561. package/dist/zip/ZipReader.d.ts +1 -1
  562. package/dist/zip/ZipReader.d.ts.map +1 -1
  563. package/dist/zip/ZipReader.js +14 -14
  564. package/dist/zip/ZipReader.js.map +1 -1
  565. package/dist/zip/ZipWriter.d.ts +1 -1
  566. package/dist/zip/ZipWriter.d.ts.map +1 -1
  567. package/dist/zip/ZipWriter.js +10 -10
  568. package/dist/zip/ZipWriter.js.map +1 -1
  569. package/package.json +20 -4
  570. package/src/constants/legacyCompatFlags.ts +1 -1
  571. package/src/core/Document.ts +478 -167
  572. package/src/core/DocumentContent.ts +14 -11
  573. package/src/core/DocumentEvents.ts +90 -0
  574. package/src/core/DocumentGenerator.ts +49 -22
  575. package/src/core/DocumentParser.ts +2235 -620
  576. package/src/core/DocumentValidator.ts +7 -7
  577. package/src/core/ElementRegistry.ts +69 -0
  578. package/src/core/Relationship.ts +1 -1
  579. package/src/core/RelationshipManager.ts +4 -4
  580. package/src/elements/AlternateContent.ts +1 -1
  581. package/src/elements/Bookmark.ts +52 -4
  582. package/src/elements/BookmarkManager.ts +2 -2
  583. package/src/elements/Comment.ts +3 -3
  584. package/src/elements/CommentManager.ts +4 -4
  585. package/src/elements/CommonTypes.ts +45 -7
  586. package/src/elements/CustomXml.ts +1 -1
  587. package/src/elements/Endnote.ts +2 -2
  588. package/src/elements/EndnoteManager.ts +3 -3
  589. package/src/elements/Field.ts +44 -10
  590. package/src/elements/FieldHelpers.ts +2 -2
  591. package/src/elements/Footer.ts +4 -4
  592. package/src/elements/Footnote.ts +2 -2
  593. package/src/elements/FootnoteManager.ts +3 -3
  594. package/src/elements/Header.ts +4 -4
  595. package/src/elements/HeaderFooterManager.ts +2 -2
  596. package/src/elements/Hyperlink.ts +16 -12
  597. package/src/elements/Image.ts +3 -3
  598. package/src/elements/ImageManager.ts +2 -2
  599. package/src/elements/ImageRun.ts +3 -3
  600. package/src/elements/MathElement.ts +1 -1
  601. package/src/elements/Paragraph.ts +221 -88
  602. package/src/elements/PreservedElement.ts +1 -1
  603. package/src/elements/PropertyChangeTypes.ts +2 -2
  604. package/src/elements/RangeMarker.ts +153 -12
  605. package/src/elements/RegisteredBodyElement.ts +52 -0
  606. package/src/elements/Revision.ts +14 -14
  607. package/src/elements/RevisionContent.ts +3 -3
  608. package/src/elements/RevisionManager.ts +3 -3
  609. package/src/elements/Run.ts +221 -94
  610. package/src/elements/Section.ts +136 -69
  611. package/src/elements/Shape.ts +4 -4
  612. package/src/elements/StructuredDocumentTag.ts +3 -3
  613. package/src/elements/Table.ts +91 -27
  614. package/src/elements/TableCell.ts +62 -34
  615. package/src/elements/TableGridChange.ts +1 -1
  616. package/src/elements/TableOfContents.ts +1 -1
  617. package/src/elements/TableOfContentsElement.ts +2 -2
  618. package/src/elements/TableRow.ts +192 -48
  619. package/src/elements/TextBox.ts +5 -5
  620. package/src/formatting/AbstractNumbering.ts +3 -3
  621. package/src/formatting/NumberingInstance.ts +2 -2
  622. package/src/formatting/NumberingLevel.ts +201 -10
  623. package/src/formatting/NumberingManager.ts +5 -5
  624. package/src/formatting/Style.ts +382 -86
  625. package/src/formatting/StylesManager.ts +4 -4
  626. package/src/helpers/CleanupHelper.ts +6 -6
  627. package/src/index.ts +118 -127
  628. package/src/internal.ts +79 -0
  629. package/src/managers/DrawingManager.ts +3 -3
  630. package/src/{utils → processors}/ChangelogGenerator.ts +3 -3
  631. package/src/{utils → processors}/CompatibilityUpgrader.ts +2 -2
  632. package/src/{utils → processors}/InMemoryRevisionAcceptor.ts +100 -12
  633. package/src/{utils → processors}/MoveOperationHelper.ts +5 -5
  634. package/src/{utils → processors}/RevisionAwareProcessor.ts +3 -3
  635. package/src/{utils → processors}/RevisionWalker.ts +42 -1
  636. package/src/{utils → processors}/SelectiveRevisionAcceptor.ts +98 -39
  637. package/src/{utils → processors}/ShadingResolver.ts +5 -5
  638. package/src/{utils → processors}/acceptRevisions.ts +77 -9
  639. package/src/{utils → processors}/cnfStyleDecoder.ts +1 -1
  640. package/src/{utils → processors}/stripTrackedChanges.ts +35 -10
  641. package/src/tracking/DocumentTrackingContext.ts +12 -14
  642. package/src/tracking/TrackingContext.ts +8 -8
  643. package/src/types/document-types.ts +53 -0
  644. package/src/types/formatting.ts +4 -4
  645. package/src/types/settings-types.ts +32 -0
  646. package/src/utils/KeyedRegistry.ts +41 -0
  647. package/src/utils/corruptionDetection.ts +2 -2
  648. package/src/utils/deepEqual.ts +58 -0
  649. package/src/utils/list-detection.ts +2 -2
  650. package/src/utils/parsingHelpers.ts +11 -3
  651. package/src/utils/validation.ts +3 -3
  652. package/src/utils/xmlSanitization.ts +1 -1
  653. package/src/validation/RevisionAutoFixer.ts +5 -5
  654. package/src/validation/RevisionValidator.ts +39 -28
  655. package/src/validation/ValidationRuleRegistry.ts +86 -0
  656. package/src/validation/index.ts +3 -3
  657. package/src/xml/XMLBuilder.ts +13 -3
  658. package/src/xml/XMLParser.ts +2 -2
  659. package/src/zip/ZipHandler.ts +4 -4
  660. package/src/zip/ZipReader.ts +3 -3
  661. package/src/zip/ZipWriter.ts +3 -3
  662. package/dist/utils/ChangelogGenerator.d.ts.map +0 -1
  663. package/dist/utils/ChangelogGenerator.js.map +0 -1
  664. package/dist/utils/CompatibilityUpgrader.d.ts.map +0 -1
  665. package/dist/utils/CompatibilityUpgrader.js.map +0 -1
  666. package/dist/utils/InMemoryRevisionAcceptor.d.ts.map +0 -1
  667. package/dist/utils/InMemoryRevisionAcceptor.js.map +0 -1
  668. package/dist/utils/MoveOperationHelper.d.ts.map +0 -1
  669. package/dist/utils/MoveOperationHelper.js.map +0 -1
  670. package/dist/utils/RevisionAwareProcessor.d.ts.map +0 -1
  671. package/dist/utils/RevisionAwareProcessor.js.map +0 -1
  672. package/dist/utils/RevisionWalker.d.ts.map +0 -1
  673. package/dist/utils/RevisionWalker.js.map +0 -1
  674. package/dist/utils/SelectiveRevisionAcceptor.d.ts.map +0 -1
  675. package/dist/utils/SelectiveRevisionAcceptor.js.map +0 -1
  676. package/dist/utils/ShadingResolver.d.ts +0 -6
  677. package/dist/utils/ShadingResolver.d.ts.map +0 -1
  678. package/dist/utils/ShadingResolver.js.map +0 -1
  679. package/dist/utils/acceptRevisions.d.ts.map +0 -1
  680. package/dist/utils/acceptRevisions.js.map +0 -1
  681. package/dist/utils/cnfStyleDecoder.d.ts.map +0 -1
  682. package/dist/utils/cnfStyleDecoder.js.map +0 -1
  683. package/dist/utils/stripTrackedChanges.d.ts +0 -3
  684. package/dist/utils/stripTrackedChanges.d.ts.map +0 -1
  685. package/dist/utils/stripTrackedChanges.js.map +0 -1
  686. package/src/__tests__/helper-methods.test.ts +0 -512
  687. package/src/constants/CLAUDE.md +0 -28
  688. package/src/core/CLAUDE.md +0 -113
  689. package/src/elements/CLAUDE.md +0 -142
  690. package/src/formatting/CLAUDE.md +0 -78
  691. package/src/managers/CLAUDE.md +0 -47
  692. package/src/tracking/CLAUDE.md +0 -30
  693. package/src/types/CLAUDE.md +0 -39
  694. package/src/utils/CLAUDE.md +0 -168
  695. package/src/validation/CLAUDE.md +0 -40
  696. package/src/xml/CLAUDE.md +0 -65
  697. package/src/zip/CLAUDE.md +0 -55
  698. /package/dist/{utils → processors}/CompatibilityUpgrader.d.ts +0 -0
  699. /package/dist/{utils → processors}/cnfStyleDecoder.js +0 -0
@@ -0,0 +1,1465 @@
1
+ import { deepClone } from '../utils/deepClone.js';
2
+ import { formatDateForXml } from '../utils/dateFormatting.js';
3
+ import { isEqualFormatting } from '../utils/formatting.js';
4
+ import { logSerialization, logTextDirection } from '../utils/diagnostics.js';
5
+ import { defaultLogger } from '../utils/logger.js';
6
+ import { normalizeColor, validateRunText } from '../utils/validation.js';
7
+ import { pointsToHalfPoints } from '../utils/units.js';
8
+ import { diffText, diffHasUnchangedParts } from '../utils/textDiff.js';
9
+ import { getActiveConditionalsInPriorityOrder } from '../processors/cnfStyleDecoder.js';
10
+ import { XMLBuilder } from '../xml/XMLBuilder.js';
11
+ import { buildShadingAttributes, } from './CommonTypes.js';
12
+ export class Run {
13
+ content;
14
+ formatting;
15
+ trackingContext;
16
+ propertyChangeRevision;
17
+ _parentParagraph;
18
+ constructor(text, formatting = {}) {
19
+ if (text === undefined || text === null) {
20
+ defaultLogger.warn(`DocXML Text Validation Warning [Run constructor]:\n` +
21
+ ` - Received ${text === undefined ? 'undefined' : 'null'} text value\n` +
22
+ ` - Converting to empty string for Word compatibility`);
23
+ }
24
+ const shouldClean = formatting.cleanXmlFromText !== false;
25
+ const validation = validateRunText(text, {
26
+ context: 'Run constructor',
27
+ autoClean: shouldClean,
28
+ warnToConsole: true,
29
+ });
30
+ const cleanedText = validation.cleanedText || text;
31
+ const normalizedText = cleanedText ?? '';
32
+ this.content = this.parseTextWithSpecialCharacters(normalizedText);
33
+ const { cleanXmlFromText, ...displayFormatting } = formatting;
34
+ this.formatting = displayFormatting;
35
+ }
36
+ parseTextWithSpecialCharacters(text) {
37
+ if (!text) {
38
+ return [{ type: 'text', value: '' }];
39
+ }
40
+ const content = [];
41
+ let currentText = '';
42
+ for (let i = 0; i < text.length; i++) {
43
+ const char = text[i];
44
+ switch (char) {
45
+ case '\t':
46
+ if (currentText) {
47
+ content.push({ type: 'text', value: currentText });
48
+ currentText = '';
49
+ }
50
+ content.push({ type: 'tab' });
51
+ break;
52
+ case '\n':
53
+ if (currentText) {
54
+ content.push({ type: 'text', value: currentText });
55
+ currentText = '';
56
+ }
57
+ content.push({ type: 'break' });
58
+ break;
59
+ case '\u2011':
60
+ if (currentText) {
61
+ content.push({ type: 'text', value: currentText });
62
+ currentText = '';
63
+ }
64
+ content.push({ type: 'noBreakHyphen' });
65
+ break;
66
+ case '\r':
67
+ if (currentText) {
68
+ content.push({ type: 'text', value: currentText });
69
+ currentText = '';
70
+ }
71
+ content.push({ type: 'carriageReturn' });
72
+ break;
73
+ case '\u00AD':
74
+ if (currentText) {
75
+ content.push({ type: 'text', value: currentText });
76
+ currentText = '';
77
+ }
78
+ content.push({ type: 'softHyphen' });
79
+ break;
80
+ default:
81
+ currentText += char;
82
+ break;
83
+ }
84
+ }
85
+ if (currentText) {
86
+ content.push({ type: 'text', value: currentText });
87
+ }
88
+ if (content.length === 0) {
89
+ content.push({ type: 'text', value: '' });
90
+ }
91
+ return content;
92
+ }
93
+ getText() {
94
+ return this.content
95
+ .map((c) => {
96
+ switch (c.type) {
97
+ case 'text':
98
+ return c.value || '';
99
+ case 'tab':
100
+ return '\t';
101
+ case 'break':
102
+ return '\n';
103
+ case 'carriageReturn':
104
+ return '\r';
105
+ case 'softHyphen':
106
+ return '\u00AD';
107
+ case 'noBreakHyphen':
108
+ return '\u2011';
109
+ case 'instructionText':
110
+ return '';
111
+ case 'fieldChar':
112
+ return '';
113
+ default:
114
+ return '';
115
+ }
116
+ })
117
+ .join('');
118
+ }
119
+ getPlainText() {
120
+ return this.content
121
+ .filter((c) => c.type === 'text')
122
+ .map((c) => c.value || '')
123
+ .join('');
124
+ }
125
+ equals(other) {
126
+ if (this.getText() !== other.getText())
127
+ return false;
128
+ return isEqualFormatting(this.getFormatting(), other.getFormatting());
129
+ }
130
+ hasSameFormatting(other) {
131
+ return isEqualFormatting(this.getFormatting(), other.getFormatting());
132
+ }
133
+ setText(text) {
134
+ const oldText = this.getText();
135
+ const oldContent = [...this.content];
136
+ if (text === undefined || text === null) {
137
+ defaultLogger.warn(`DocXML Text Validation Warning [Run.setText]:\n` +
138
+ ` - Received ${text === undefined ? 'undefined' : 'null'} text value\n` +
139
+ ` - Converting to empty string for Word compatibility`);
140
+ }
141
+ const shouldClean = this.formatting.cleanXmlFromText !== false;
142
+ const validation = validateRunText(text, {
143
+ context: 'Run.setText',
144
+ autoClean: shouldClean,
145
+ warnToConsole: true,
146
+ });
147
+ const cleanedText = validation.cleanedText || text;
148
+ const normalizedText = cleanedText ?? '';
149
+ const isAllInstructionText = this.content.length > 0 && this.content.every((c) => c.type === 'instructionText');
150
+ if (isAllInstructionText) {
151
+ this.content = [{ type: 'instructionText', value: normalizedText }];
152
+ }
153
+ else {
154
+ this.content = this.parseTextWithSpecialCharacters(normalizedText);
155
+ }
156
+ if (this.trackingContext?.isEnabled() &&
157
+ this._parentParagraph &&
158
+ oldText !== normalizedText &&
159
+ oldText) {
160
+ const hasNonTextContent = oldContent.some((c) => c.type === 'vml' ||
161
+ c.type === 'fieldChar' ||
162
+ c.type === 'symbol' ||
163
+ c.type === 'embeddedObject');
164
+ const segments = hasNonTextContent ? [] : diffText(oldText, normalizedText);
165
+ const useGranular = !hasNonTextContent && diffHasUnchangedParts(segments);
166
+ if (useGranular) {
167
+ const revManager = this.trackingContext.getRevisionManager();
168
+ const now = new Date();
169
+ const newContent = [];
170
+ for (const seg of segments) {
171
+ if (seg.type === 'equal') {
172
+ const equalRun = this.clone();
173
+ equalRun.content = this.parseTextWithSpecialCharacters(seg.text);
174
+ equalRun._setTrackingContext(this.trackingContext);
175
+ equalRun._setParentParagraph(this._parentParagraph);
176
+ newContent.push(equalRun);
177
+ }
178
+ else if (seg.type === 'delete') {
179
+ const delRun = this.clone();
180
+ delRun.content = this.parseTextWithSpecialCharacters(seg.text);
181
+ const delRev = this.trackingContext.createDeletion(delRun, now);
182
+ revManager.register(delRev);
183
+ newContent.push(delRev);
184
+ }
185
+ else if (seg.type === 'insert') {
186
+ const insRun = this.clone();
187
+ insRun.content = this.parseTextWithSpecialCharacters(seg.text);
188
+ const insRev = this.trackingContext.createInsertion(insRun, now);
189
+ revManager.register(insRev);
190
+ newContent.push(insRev);
191
+ }
192
+ }
193
+ this._parentParagraph.replaceContent(this, newContent);
194
+ }
195
+ else {
196
+ const revManager = this.trackingContext.getRevisionManager();
197
+ const now = new Date();
198
+ const deleteRun = this.clone();
199
+ deleteRun.content = this.parseTextWithSpecialCharacters(oldText);
200
+ const deleteRev = this.trackingContext.createDeletion(deleteRun, now);
201
+ revManager.register(deleteRev);
202
+ const insertRev = this.trackingContext.createInsertion(this, now);
203
+ revManager.register(insertRev);
204
+ this._parentParagraph.replaceContent(this, [deleteRev, insertRev]);
205
+ }
206
+ }
207
+ }
208
+ getFormatting() {
209
+ return { ...this.formatting };
210
+ }
211
+ getBold() {
212
+ return this.formatting.bold ?? false;
213
+ }
214
+ getItalic() {
215
+ return this.formatting.italic ?? false;
216
+ }
217
+ getUnderline() {
218
+ return this.formatting.underline;
219
+ }
220
+ getStrike() {
221
+ return this.formatting.strike ?? false;
222
+ }
223
+ getFont() {
224
+ return this.formatting.font;
225
+ }
226
+ getSize() {
227
+ return this.formatting.size;
228
+ }
229
+ getColor() {
230
+ return this.formatting.color;
231
+ }
232
+ getHighlight() {
233
+ return this.formatting.highlight;
234
+ }
235
+ getSubscript() {
236
+ return this.formatting.subscript ?? false;
237
+ }
238
+ getSuperscript() {
239
+ return this.formatting.superscript ?? false;
240
+ }
241
+ isRTL() {
242
+ return this.formatting.rtl ?? false;
243
+ }
244
+ getSmallCaps() {
245
+ return this.formatting.smallCaps ?? false;
246
+ }
247
+ getAllCaps() {
248
+ return this.formatting.allCaps ?? false;
249
+ }
250
+ getEffectiveBold() {
251
+ if (this.formatting.bold !== undefined) {
252
+ return this.formatting.bold;
253
+ }
254
+ return this.getConditionalFormattingProperty('bold');
255
+ }
256
+ getEffectiveItalic() {
257
+ if (this.formatting.italic !== undefined) {
258
+ return this.formatting.italic;
259
+ }
260
+ return this.getConditionalFormattingProperty('italic');
261
+ }
262
+ getEffectiveColor() {
263
+ if (this.formatting.color !== undefined) {
264
+ return this.formatting.color;
265
+ }
266
+ return this.getConditionalFormattingProperty('color');
267
+ }
268
+ getEffectiveFont() {
269
+ if (this.formatting.font !== undefined) {
270
+ return this.formatting.font;
271
+ }
272
+ return this.getConditionalFormattingProperty('font');
273
+ }
274
+ getEffectiveSize() {
275
+ if (this.formatting.size !== undefined) {
276
+ return this.formatting.size;
277
+ }
278
+ return this.getConditionalFormattingProperty('size');
279
+ }
280
+ isHyperlinkStyled() {
281
+ return this.formatting.characterStyle === 'Hyperlink';
282
+ }
283
+ getConditionalFormattingProperty(property) {
284
+ const para = this._parentParagraph;
285
+ if (!para)
286
+ return undefined;
287
+ const cell = para._getParentCell();
288
+ if (!cell)
289
+ return undefined;
290
+ const cnfStyle = para.getTableConditionalStyle();
291
+ if (!cnfStyle)
292
+ return undefined;
293
+ const activeConditionals = getActiveConditionalsInPriorityOrder(cnfStyle);
294
+ const tableStyleId = cell.getTableStyleId();
295
+ const stylesManager = para._getStylesManager();
296
+ if (tableStyleId && stylesManager) {
297
+ const style = stylesManager.getStyle(tableStyleId);
298
+ if (style) {
299
+ const tableStyleProps = style.getProperties().tableStyle;
300
+ if (tableStyleProps?.conditionalFormatting) {
301
+ for (const conditionalType of activeConditionals) {
302
+ const conditional = tableStyleProps.conditionalFormatting.find((cf) => cf.type === conditionalType);
303
+ if (conditional?.runFormatting?.[property] !== undefined) {
304
+ return conditional.runFormatting[property];
305
+ }
306
+ }
307
+ const wholeTable = tableStyleProps.conditionalFormatting.find((cf) => cf.type === 'wholeTable');
308
+ if (wholeTable?.runFormatting?.[property] !== undefined) {
309
+ return wholeTable.runFormatting[property];
310
+ }
311
+ }
312
+ }
313
+ }
314
+ if (property === 'bold' && activeConditionals.length > 0) {
315
+ const table = cell._getParentRow()?._getParentTable();
316
+ if (table) {
317
+ const tblLookFlags = table.getTblLookFlags();
318
+ for (const conditionalType of activeConditionals) {
319
+ if (conditionalType === 'firstRow' && tblLookFlags.firstRow)
320
+ return true;
321
+ if (conditionalType === 'lastRow' && tblLookFlags.lastRow)
322
+ return true;
323
+ if (conditionalType === 'firstCol' && tblLookFlags.firstColumn)
324
+ return true;
325
+ if (conditionalType === 'lastCol' && tblLookFlags.lastColumn)
326
+ return true;
327
+ }
328
+ }
329
+ }
330
+ return undefined;
331
+ }
332
+ setCharacterStyle(styleId) {
333
+ const previousValue = this.formatting.characterStyle;
334
+ this.formatting.characterStyle = styleId;
335
+ if (this.trackingContext?.isEnabled() && previousValue !== styleId) {
336
+ this.trackingContext.trackRunPropertyChange(this, 'characterStyle', previousValue, styleId);
337
+ }
338
+ return this;
339
+ }
340
+ setBorder(border) {
341
+ const previousValue = this.formatting.border;
342
+ this.formatting.border = border;
343
+ if (this.trackingContext?.isEnabled() && previousValue !== border) {
344
+ this.trackingContext.trackRunPropertyChange(this, 'border', previousValue, border);
345
+ }
346
+ return this;
347
+ }
348
+ setShading(shading) {
349
+ const previousValue = this.formatting.shading;
350
+ this.formatting.shading = shading;
351
+ if (this.trackingContext?.isEnabled() && previousValue !== shading) {
352
+ this.trackingContext.trackRunPropertyChange(this, 'shading', previousValue, shading);
353
+ }
354
+ return this;
355
+ }
356
+ setEmphasis(emphasis) {
357
+ const previousValue = this.formatting.emphasis;
358
+ this.formatting.emphasis = emphasis;
359
+ if (this.trackingContext?.isEnabled() && previousValue !== emphasis) {
360
+ this.trackingContext.trackRunPropertyChange(this, 'emphasis', previousValue, emphasis);
361
+ }
362
+ return this;
363
+ }
364
+ _setTrackingContext(context) {
365
+ this.trackingContext = context;
366
+ }
367
+ _setParentParagraph(paragraph) {
368
+ this._parentParagraph = paragraph;
369
+ }
370
+ _getParentParagraph() {
371
+ return this._parentParagraph;
372
+ }
373
+ getPropertyChangeRevision() {
374
+ return this.propertyChangeRevision;
375
+ }
376
+ setPropertyChangeRevision(propChange) {
377
+ this.propertyChangeRevision = propChange;
378
+ return this;
379
+ }
380
+ clearPropertyChangeRevision() {
381
+ this.propertyChangeRevision = undefined;
382
+ return this;
383
+ }
384
+ hasPropertyChangeRevision() {
385
+ return this.propertyChangeRevision !== undefined;
386
+ }
387
+ setBold(bold = true) {
388
+ const previousValue = this.formatting.bold;
389
+ this.formatting.bold = bold;
390
+ if (this.trackingContext?.isEnabled() && previousValue !== bold) {
391
+ this.trackingContext.trackRunPropertyChange(this, 'bold', previousValue, bold);
392
+ }
393
+ return this;
394
+ }
395
+ setItalic(italic = true) {
396
+ const previousValue = this.formatting.italic;
397
+ this.formatting.italic = italic;
398
+ if (this.trackingContext?.isEnabled() && previousValue !== italic) {
399
+ this.trackingContext.trackRunPropertyChange(this, 'italic', previousValue, italic);
400
+ }
401
+ return this;
402
+ }
403
+ setComplexScriptBold(bold = true) {
404
+ const previousValue = this.formatting.complexScriptBold;
405
+ this.formatting.complexScriptBold = bold;
406
+ if (this.trackingContext?.isEnabled() && previousValue !== bold) {
407
+ this.trackingContext.trackRunPropertyChange(this, 'complexScriptBold', previousValue, bold);
408
+ }
409
+ return this;
410
+ }
411
+ setComplexScriptItalic(italic = true) {
412
+ const previousValue = this.formatting.complexScriptItalic;
413
+ this.formatting.complexScriptItalic = italic;
414
+ if (this.trackingContext?.isEnabled() && previousValue !== italic) {
415
+ this.trackingContext.trackRunPropertyChange(this, 'complexScriptItalic', previousValue, italic);
416
+ }
417
+ return this;
418
+ }
419
+ setCharacterSpacing(spacing) {
420
+ const previousValue = this.formatting.characterSpacing;
421
+ this.formatting.characterSpacing = spacing;
422
+ if (this.trackingContext?.isEnabled() && previousValue !== spacing) {
423
+ this.trackingContext.trackRunPropertyChange(this, 'characterSpacing', previousValue, spacing);
424
+ }
425
+ return this;
426
+ }
427
+ setScaling(scaling) {
428
+ const previousValue = this.formatting.scaling;
429
+ this.formatting.scaling = scaling;
430
+ if (this.trackingContext?.isEnabled() && previousValue !== scaling) {
431
+ this.trackingContext.trackRunPropertyChange(this, 'scaling', previousValue, scaling);
432
+ }
433
+ return this;
434
+ }
435
+ setPosition(position) {
436
+ const previousValue = this.formatting.position;
437
+ this.formatting.position = position;
438
+ if (this.trackingContext?.isEnabled() && previousValue !== position) {
439
+ this.trackingContext.trackRunPropertyChange(this, 'position', previousValue, position);
440
+ }
441
+ return this;
442
+ }
443
+ setKerning(kerning) {
444
+ const previousValue = this.formatting.kerning;
445
+ this.formatting.kerning = kerning;
446
+ if (this.trackingContext?.isEnabled() && previousValue !== kerning) {
447
+ this.trackingContext.trackRunPropertyChange(this, 'kerning', previousValue, kerning);
448
+ }
449
+ return this;
450
+ }
451
+ setLanguage(language) {
452
+ const previousValue = this.formatting.language;
453
+ this.formatting.language = language;
454
+ if (this.trackingContext?.isEnabled() && previousValue !== language) {
455
+ this.trackingContext.trackRunPropertyChange(this, 'language', previousValue, language);
456
+ }
457
+ return this;
458
+ }
459
+ setUnderline(underline = true) {
460
+ const previousValue = this.formatting.underline;
461
+ this.formatting.underline = underline;
462
+ if (this.trackingContext?.isEnabled() && previousValue !== underline) {
463
+ this.trackingContext.trackRunPropertyChange(this, 'underline', previousValue, underline);
464
+ }
465
+ return this;
466
+ }
467
+ setUnderlineColor(color) {
468
+ this.formatting.underlineColor = normalizeColor(color);
469
+ return this;
470
+ }
471
+ setUnderlineThemeColor(themeColor, themeTint, themeShade) {
472
+ this.formatting.underlineThemeColor = themeColor;
473
+ if (themeTint !== undefined)
474
+ this.formatting.underlineThemeTint = themeTint;
475
+ if (themeShade !== undefined)
476
+ this.formatting.underlineThemeShade = themeShade;
477
+ return this;
478
+ }
479
+ setStrike(strike = true) {
480
+ const previousValue = this.formatting.strike;
481
+ this.formatting.strike = strike;
482
+ if (this.trackingContext?.isEnabled() && previousValue !== strike) {
483
+ this.trackingContext.trackRunPropertyChange(this, 'strike', previousValue, strike);
484
+ }
485
+ return this;
486
+ }
487
+ setSubscript(subscript = true) {
488
+ const previousValue = this.formatting.subscript;
489
+ this.formatting.subscript = subscript;
490
+ if (subscript) {
491
+ this.formatting.superscript = false;
492
+ }
493
+ if (this.trackingContext?.isEnabled() && previousValue !== subscript) {
494
+ this.trackingContext.trackRunPropertyChange(this, 'subscript', previousValue, subscript);
495
+ }
496
+ return this;
497
+ }
498
+ setSuperscript(superscript = true) {
499
+ const previousValue = this.formatting.superscript;
500
+ this.formatting.superscript = superscript;
501
+ if (superscript) {
502
+ this.formatting.subscript = false;
503
+ }
504
+ if (this.trackingContext?.isEnabled() && previousValue !== superscript) {
505
+ this.trackingContext.trackRunPropertyChange(this, 'superscript', previousValue, superscript);
506
+ }
507
+ return this;
508
+ }
509
+ setFont(font, size) {
510
+ const previousFont = this.formatting.font;
511
+ const previousSize = this.formatting.size;
512
+ this.formatting.font = font;
513
+ if (size !== undefined) {
514
+ this.formatting.size = size;
515
+ }
516
+ if (this.trackingContext?.isEnabled()) {
517
+ if (previousFont !== font) {
518
+ this.trackingContext.trackRunPropertyChange(this, 'font', previousFont, font);
519
+ }
520
+ if (size !== undefined && previousSize !== size) {
521
+ this.trackingContext.trackRunPropertyChange(this, 'size', previousSize, size);
522
+ }
523
+ }
524
+ return this;
525
+ }
526
+ setSize(size) {
527
+ const previousValue = this.formatting.size;
528
+ this.formatting.size = size;
529
+ if (this.trackingContext?.isEnabled() && previousValue !== size) {
530
+ this.trackingContext.trackRunPropertyChange(this, 'size', previousValue, size);
531
+ }
532
+ return this;
533
+ }
534
+ setSizeCs(size) {
535
+ const previousValue = this.formatting.sizeCs;
536
+ this.formatting.sizeCs = size;
537
+ if (this.trackingContext?.isEnabled() && previousValue !== size) {
538
+ this.trackingContext.trackRunPropertyChange(this, 'sizeCs', previousValue, size);
539
+ }
540
+ return this;
541
+ }
542
+ setColor(color) {
543
+ const previousValue = this.formatting.color;
544
+ const normalizedColor = normalizeColor(color);
545
+ this.formatting.color = normalizedColor;
546
+ if (this.trackingContext?.isEnabled() && previousValue !== normalizedColor) {
547
+ this.trackingContext.trackRunPropertyChange(this, 'color', previousValue, normalizedColor);
548
+ }
549
+ return this;
550
+ }
551
+ setThemeColor(themeColor) {
552
+ const previousValue = this.formatting.themeColor;
553
+ this.formatting.themeColor = themeColor;
554
+ if (this.trackingContext?.isEnabled() && previousValue !== themeColor) {
555
+ this.trackingContext.trackRunPropertyChange(this, 'themeColor', previousValue, themeColor);
556
+ }
557
+ return this;
558
+ }
559
+ setThemeTint(themeTint) {
560
+ const previousValue = this.formatting.themeTint;
561
+ this.formatting.themeTint = themeTint;
562
+ if (this.trackingContext?.isEnabled() && previousValue !== themeTint) {
563
+ this.trackingContext.trackRunPropertyChange(this, 'themeTint', previousValue, themeTint);
564
+ }
565
+ return this;
566
+ }
567
+ setThemeShade(themeShade) {
568
+ const previousValue = this.formatting.themeShade;
569
+ this.formatting.themeShade = themeShade;
570
+ if (this.trackingContext?.isEnabled() && previousValue !== themeShade) {
571
+ this.trackingContext.trackRunPropertyChange(this, 'themeShade', previousValue, themeShade);
572
+ }
573
+ return this;
574
+ }
575
+ setHighlight(highlight) {
576
+ const previousValue = this.formatting.highlight;
577
+ this.formatting.highlight = highlight;
578
+ if (this.trackingContext?.isEnabled() && previousValue !== highlight) {
579
+ this.trackingContext.trackRunPropertyChange(this, 'highlight', previousValue, highlight);
580
+ }
581
+ return this;
582
+ }
583
+ setSmallCaps(smallCaps = true) {
584
+ const previousValue = this.formatting.smallCaps;
585
+ this.formatting.smallCaps = smallCaps;
586
+ if (this.trackingContext?.isEnabled() && previousValue !== smallCaps) {
587
+ this.trackingContext.trackRunPropertyChange(this, 'smallCaps', previousValue, smallCaps);
588
+ }
589
+ return this;
590
+ }
591
+ setAllCaps(allCaps = true) {
592
+ const previousValue = this.formatting.allCaps;
593
+ this.formatting.allCaps = allCaps;
594
+ if (this.trackingContext?.isEnabled() && previousValue !== allCaps) {
595
+ this.trackingContext.trackRunPropertyChange(this, 'allCaps', previousValue, allCaps);
596
+ }
597
+ return this;
598
+ }
599
+ setOutline(outline = true) {
600
+ const previousValue = this.formatting.outline;
601
+ this.formatting.outline = outline;
602
+ if (this.trackingContext?.isEnabled() && previousValue !== outline) {
603
+ this.trackingContext.trackRunPropertyChange(this, 'outline', previousValue, outline);
604
+ }
605
+ return this;
606
+ }
607
+ setShadow(shadow = true) {
608
+ const previousValue = this.formatting.shadow;
609
+ this.formatting.shadow = shadow;
610
+ if (this.trackingContext?.isEnabled() && previousValue !== shadow) {
611
+ this.trackingContext.trackRunPropertyChange(this, 'shadow', previousValue, shadow);
612
+ }
613
+ return this;
614
+ }
615
+ setEmboss(emboss = true) {
616
+ const previousValue = this.formatting.emboss;
617
+ this.formatting.emboss = emboss;
618
+ if (this.trackingContext?.isEnabled() && previousValue !== emboss) {
619
+ this.trackingContext.trackRunPropertyChange(this, 'emboss', previousValue, emboss);
620
+ }
621
+ return this;
622
+ }
623
+ setImprint(imprint = true) {
624
+ const previousValue = this.formatting.imprint;
625
+ this.formatting.imprint = imprint;
626
+ if (this.trackingContext?.isEnabled() && previousValue !== imprint) {
627
+ this.trackingContext.trackRunPropertyChange(this, 'imprint', previousValue, imprint);
628
+ }
629
+ return this;
630
+ }
631
+ setRTL(rtl = true) {
632
+ const previousValue = this.formatting.rtl;
633
+ this.formatting.rtl = rtl;
634
+ if (this.trackingContext?.isEnabled() && previousValue !== rtl) {
635
+ this.trackingContext.trackRunPropertyChange(this, 'rtl', previousValue, rtl);
636
+ }
637
+ return this;
638
+ }
639
+ setVanish(vanish = true) {
640
+ const previousValue = this.formatting.vanish;
641
+ this.formatting.vanish = vanish;
642
+ if (this.trackingContext?.isEnabled() && previousValue !== vanish) {
643
+ this.trackingContext.trackRunPropertyChange(this, 'vanish', previousValue, vanish);
644
+ }
645
+ return this;
646
+ }
647
+ setNoProof(noProof = true) {
648
+ const previousValue = this.formatting.noProof;
649
+ this.formatting.noProof = noProof;
650
+ if (this.trackingContext?.isEnabled() && previousValue !== noProof) {
651
+ this.trackingContext.trackRunPropertyChange(this, 'noProof', previousValue, noProof);
652
+ }
653
+ return this;
654
+ }
655
+ setSnapToGrid(snapToGrid = true) {
656
+ const previousValue = this.formatting.snapToGrid;
657
+ this.formatting.snapToGrid = snapToGrid;
658
+ if (this.trackingContext?.isEnabled() && previousValue !== snapToGrid) {
659
+ this.trackingContext.trackRunPropertyChange(this, 'snapToGrid', previousValue, snapToGrid);
660
+ }
661
+ return this;
662
+ }
663
+ setSpecVanish(specVanish = true) {
664
+ const previousValue = this.formatting.specVanish;
665
+ this.formatting.specVanish = specVanish;
666
+ if (this.trackingContext?.isEnabled() && previousValue !== specVanish) {
667
+ this.trackingContext.trackRunPropertyChange(this, 'specVanish', previousValue, specVanish);
668
+ }
669
+ return this;
670
+ }
671
+ setComplexScript(complexScript = true) {
672
+ const previousValue = this.formatting.complexScript;
673
+ this.formatting.complexScript = complexScript;
674
+ if (this.trackingContext?.isEnabled() && previousValue !== complexScript) {
675
+ this.trackingContext.trackRunPropertyChange(this, 'complexScript', previousValue, complexScript);
676
+ }
677
+ return this;
678
+ }
679
+ setWebHidden(webHidden = true) {
680
+ const previousValue = this.formatting.webHidden;
681
+ this.formatting.webHidden = webHidden;
682
+ if (this.trackingContext?.isEnabled() && previousValue !== webHidden) {
683
+ this.trackingContext.trackRunPropertyChange(this, 'webHidden', previousValue, webHidden);
684
+ }
685
+ return this;
686
+ }
687
+ setFontHAnsi(font) {
688
+ const previousValue = this.formatting.fontHAnsi;
689
+ this.formatting.fontHAnsi = font;
690
+ if (this.trackingContext?.isEnabled() && previousValue !== font) {
691
+ this.trackingContext.trackRunPropertyChange(this, 'fontHAnsi', previousValue, font);
692
+ }
693
+ return this;
694
+ }
695
+ setFontEastAsia(font) {
696
+ const previousValue = this.formatting.fontEastAsia;
697
+ this.formatting.fontEastAsia = font;
698
+ if (this.trackingContext?.isEnabled() && previousValue !== font) {
699
+ this.trackingContext.trackRunPropertyChange(this, 'fontEastAsia', previousValue, font);
700
+ }
701
+ return this;
702
+ }
703
+ setFontCs(font) {
704
+ const previousValue = this.formatting.fontCs;
705
+ this.formatting.fontCs = font;
706
+ if (this.trackingContext?.isEnabled() && previousValue !== font) {
707
+ this.trackingContext.trackRunPropertyChange(this, 'fontCs', previousValue, font);
708
+ }
709
+ return this;
710
+ }
711
+ setFontHint(hint) {
712
+ const previousValue = this.formatting.fontHint;
713
+ this.formatting.fontHint = hint;
714
+ if (this.trackingContext?.isEnabled() && previousValue !== hint) {
715
+ this.trackingContext.trackRunPropertyChange(this, 'fontHint', previousValue, hint);
716
+ }
717
+ return this;
718
+ }
719
+ setFontAsciiTheme(theme) {
720
+ this.formatting.fontAsciiTheme = theme;
721
+ return this;
722
+ }
723
+ setFontHAnsiTheme(theme) {
724
+ this.formatting.fontHAnsiTheme = theme;
725
+ return this;
726
+ }
727
+ setFontEastAsiaTheme(theme) {
728
+ this.formatting.fontEastAsiaTheme = theme;
729
+ return this;
730
+ }
731
+ setFontCsTheme(theme) {
732
+ this.formatting.fontCsTheme = theme;
733
+ return this;
734
+ }
735
+ addRawW14Property(rawXml) {
736
+ if (!this.formatting.rawW14Properties) {
737
+ this.formatting.rawW14Properties = [];
738
+ }
739
+ this.formatting.rawW14Properties.push(rawXml);
740
+ return this;
741
+ }
742
+ setEffect(effect) {
743
+ const previousValue = this.formatting.effect;
744
+ this.formatting.effect = effect;
745
+ if (this.trackingContext?.isEnabled() && previousValue !== effect) {
746
+ this.trackingContext.trackRunPropertyChange(this, 'effect', previousValue, effect);
747
+ }
748
+ return this;
749
+ }
750
+ setFitText(width) {
751
+ const previousValue = this.formatting.fitText;
752
+ this.formatting.fitText = width;
753
+ if (this.trackingContext?.isEnabled() && previousValue !== width) {
754
+ this.trackingContext.trackRunPropertyChange(this, 'fitText', previousValue, width);
755
+ }
756
+ return this;
757
+ }
758
+ setEastAsianLayout(layout) {
759
+ const previousValue = this.formatting.eastAsianLayout;
760
+ this.formatting.eastAsianLayout = layout;
761
+ if (this.trackingContext?.isEnabled() && previousValue !== layout) {
762
+ this.trackingContext.trackRunPropertyChange(this, 'eastAsianLayout', previousValue, layout);
763
+ }
764
+ return this;
765
+ }
766
+ toXML() {
767
+ const text = this.getText();
768
+ logSerialization(`Serializing run: "${text}"`, {
769
+ rtl: this.formatting.rtl || false,
770
+ });
771
+ if (this.formatting.rtl) {
772
+ logTextDirection(`Run with RTL being serialized: "${text}"`);
773
+ }
774
+ const runChildren = [];
775
+ const rPr = Run.generateRunPropertiesXML(this.formatting);
776
+ if (rPr || this.propertyChangeRevision) {
777
+ const rPrElement = rPr || { name: 'w:rPr', attributes: {}, children: [] };
778
+ if (this.propertyChangeRevision) {
779
+ const prevRPr = this.propertyChangeRevision.previousProperties
780
+ ? Run.generateRunPropertiesXML(this.propertyChangeRevision.previousProperties)
781
+ : null;
782
+ if (prevRPr) {
783
+ const rPrChange = {
784
+ name: 'w:rPrChange',
785
+ attributes: {
786
+ 'w:id': this.propertyChangeRevision.id.toString(),
787
+ 'w:author': this.propertyChangeRevision.author,
788
+ 'w:date': formatDateForXml(this.propertyChangeRevision.date),
789
+ },
790
+ children: [prevRPr],
791
+ };
792
+ if (rPrElement.children) {
793
+ rPrElement.children.push(rPrChange);
794
+ }
795
+ else {
796
+ rPrElement.children = [rPrChange];
797
+ }
798
+ }
799
+ }
800
+ runChildren.push(rPrElement);
801
+ }
802
+ for (const contentElement of this.content) {
803
+ switch (contentElement.type) {
804
+ case 'text':
805
+ runChildren.push(XMLBuilder.w('t', {
806
+ 'xml:space': 'preserve',
807
+ }, [contentElement.value || '']));
808
+ break;
809
+ case 'tab':
810
+ runChildren.push(XMLBuilder.wSelf('tab'));
811
+ break;
812
+ case 'break':
813
+ {
814
+ const attrs = {};
815
+ if (contentElement.breakType) {
816
+ attrs['w:type'] = contentElement.breakType;
817
+ }
818
+ if (contentElement.breakClear) {
819
+ attrs['w:clear'] = contentElement.breakClear;
820
+ }
821
+ runChildren.push(XMLBuilder.wSelf('br', Object.keys(attrs).length > 0 ? attrs : undefined));
822
+ }
823
+ break;
824
+ case 'carriageReturn':
825
+ runChildren.push(XMLBuilder.wSelf('cr'));
826
+ break;
827
+ case 'softHyphen':
828
+ runChildren.push(XMLBuilder.wSelf('softHyphen'));
829
+ break;
830
+ case 'noBreakHyphen':
831
+ runChildren.push(XMLBuilder.wSelf('noBreakHyphen'));
832
+ break;
833
+ case 'instructionText':
834
+ runChildren.push(XMLBuilder.w('instrText', { 'xml:space': 'preserve' }, [contentElement.value || '']));
835
+ break;
836
+ case 'fieldChar': {
837
+ if (!contentElement.fieldCharType) {
838
+ break;
839
+ }
840
+ const fldCharAttrs = {
841
+ 'w:fldCharType': contentElement.fieldCharType,
842
+ };
843
+ if (contentElement.fieldCharDirty !== undefined) {
844
+ fldCharAttrs['w:dirty'] = contentElement.fieldCharDirty ? '1' : '0';
845
+ }
846
+ if (contentElement.fieldCharLocked !== undefined) {
847
+ fldCharAttrs['w:fldLock'] = contentElement.fieldCharLocked ? '1' : '0';
848
+ }
849
+ if (contentElement.formFieldData && contentElement.fieldCharType === 'begin') {
850
+ const ffDataChildren = [];
851
+ const ffd = contentElement.formFieldData;
852
+ if (ffd.name !== undefined) {
853
+ ffDataChildren.push(XMLBuilder.wSelf('name', { 'w:val': ffd.name }));
854
+ }
855
+ if (ffd.enabled !== undefined) {
856
+ if (ffd.enabled) {
857
+ ffDataChildren.push(XMLBuilder.wSelf('enabled'));
858
+ }
859
+ else {
860
+ ffDataChildren.push(XMLBuilder.wSelf('enabled', { 'w:val': '0' }));
861
+ }
862
+ }
863
+ if (ffd.calcOnExit !== undefined) {
864
+ ffDataChildren.push(XMLBuilder.wSelf('calcOnExit', { 'w:val': ffd.calcOnExit ? '1' : '0' }));
865
+ }
866
+ if (ffd.helpText) {
867
+ ffDataChildren.push(XMLBuilder.wSelf('helpText', { 'w:type': 'text', 'w:val': ffd.helpText }));
868
+ }
869
+ if (ffd.statusText) {
870
+ ffDataChildren.push(XMLBuilder.wSelf('statusText', { 'w:type': 'text', 'w:val': ffd.statusText }));
871
+ }
872
+ if (ffd.entryMacro) {
873
+ ffDataChildren.push(XMLBuilder.wSelf('entryMacro', { 'w:val': ffd.entryMacro }));
874
+ }
875
+ if (ffd.exitMacro) {
876
+ ffDataChildren.push(XMLBuilder.wSelf('exitMacro', { 'w:val': ffd.exitMacro }));
877
+ }
878
+ if (ffd.fieldType) {
879
+ switch (ffd.fieldType.type) {
880
+ case 'textInput': {
881
+ const tiChildren = [];
882
+ if (ffd.fieldType.inputType) {
883
+ tiChildren.push(XMLBuilder.wSelf('type', { 'w:val': ffd.fieldType.inputType }));
884
+ }
885
+ if (ffd.fieldType.defaultValue !== undefined) {
886
+ tiChildren.push(XMLBuilder.wSelf('default', { 'w:val': ffd.fieldType.defaultValue }));
887
+ }
888
+ if (ffd.fieldType.maxLength !== undefined) {
889
+ tiChildren.push(XMLBuilder.wSelf('maxLength', { 'w:val': ffd.fieldType.maxLength.toString() }));
890
+ }
891
+ if (ffd.fieldType.format) {
892
+ tiChildren.push(XMLBuilder.wSelf('format', { 'w:val': ffd.fieldType.format }));
893
+ }
894
+ ffDataChildren.push(XMLBuilder.w('textInput', {}, tiChildren));
895
+ break;
896
+ }
897
+ case 'checkBox': {
898
+ const cbChildren = [];
899
+ if (ffd.fieldType.size !== undefined && ffd.fieldType.size !== 'auto') {
900
+ cbChildren.push(XMLBuilder.wSelf('size', { 'w:val': ffd.fieldType.size.toString() }));
901
+ }
902
+ else {
903
+ cbChildren.push(XMLBuilder.wSelf('sizeAuto'));
904
+ }
905
+ if (ffd.fieldType.defaultChecked !== undefined) {
906
+ cbChildren.push(XMLBuilder.wSelf('default', {
907
+ 'w:val': ffd.fieldType.defaultChecked ? '1' : '0',
908
+ }));
909
+ }
910
+ if (ffd.fieldType.checked !== undefined) {
911
+ cbChildren.push(XMLBuilder.wSelf('checked', { 'w:val': ffd.fieldType.checked ? '1' : '0' }));
912
+ }
913
+ ffDataChildren.push(XMLBuilder.w('checkBox', {}, cbChildren));
914
+ break;
915
+ }
916
+ case 'dropDownList': {
917
+ const ddChildren = [];
918
+ if (ffd.fieldType.result !== undefined) {
919
+ ddChildren.push(XMLBuilder.wSelf('result', { 'w:val': ffd.fieldType.result.toString() }));
920
+ }
921
+ if (ffd.fieldType.defaultResult !== undefined) {
922
+ ddChildren.push(XMLBuilder.wSelf('default', {
923
+ 'w:val': ffd.fieldType.defaultResult.toString(),
924
+ }));
925
+ }
926
+ if (ffd.fieldType.listEntries) {
927
+ for (const entry of ffd.fieldType.listEntries) {
928
+ ddChildren.push(XMLBuilder.wSelf('listEntry', { 'w:val': entry }));
929
+ }
930
+ }
931
+ ffDataChildren.push(XMLBuilder.w('ddList', {}, ddChildren));
932
+ break;
933
+ }
934
+ }
935
+ }
936
+ if (ffDataChildren.length > 0) {
937
+ runChildren.push(XMLBuilder.w('fldChar', fldCharAttrs, [XMLBuilder.w('ffData', {}, ffDataChildren)]));
938
+ }
939
+ else {
940
+ runChildren.push(XMLBuilder.wSelf('fldChar', Object.keys(fldCharAttrs).length > 0 ? fldCharAttrs : undefined));
941
+ }
942
+ }
943
+ else {
944
+ runChildren.push(XMLBuilder.wSelf('fldChar', Object.keys(fldCharAttrs).length > 0 ? fldCharAttrs : undefined));
945
+ }
946
+ break;
947
+ }
948
+ case 'lastRenderedPageBreak':
949
+ runChildren.push(XMLBuilder.wSelf('lastRenderedPageBreak'));
950
+ break;
951
+ case 'separator':
952
+ runChildren.push(XMLBuilder.wSelf('separator'));
953
+ break;
954
+ case 'continuationSeparator':
955
+ runChildren.push(XMLBuilder.wSelf('continuationSeparator'));
956
+ break;
957
+ case 'pageNumber':
958
+ runChildren.push(XMLBuilder.wSelf('pgNum'));
959
+ break;
960
+ case 'annotationRef':
961
+ runChildren.push(XMLBuilder.wSelf('annotationRef'));
962
+ break;
963
+ case 'dayShort':
964
+ runChildren.push(XMLBuilder.wSelf('dayShort'));
965
+ break;
966
+ case 'dayLong':
967
+ runChildren.push(XMLBuilder.wSelf('dayLong'));
968
+ break;
969
+ case 'monthShort':
970
+ runChildren.push(XMLBuilder.wSelf('monthShort'));
971
+ break;
972
+ case 'monthLong':
973
+ runChildren.push(XMLBuilder.wSelf('monthLong'));
974
+ break;
975
+ case 'yearShort':
976
+ runChildren.push(XMLBuilder.wSelf('yearShort'));
977
+ break;
978
+ case 'yearLong':
979
+ runChildren.push(XMLBuilder.wSelf('yearLong'));
980
+ break;
981
+ case 'symbol': {
982
+ if (!contentElement.symbolFont || !contentElement.symbolChar)
983
+ break;
984
+ runChildren.push(XMLBuilder.wSelf('sym', {
985
+ 'w:font': contentElement.symbolFont,
986
+ 'w:char': contentElement.symbolChar,
987
+ }));
988
+ break;
989
+ }
990
+ case 'positionTab': {
991
+ const ptabAttrs = {
992
+ 'w:alignment': contentElement.ptabAlignment ?? 'left',
993
+ 'w:relativeTo': contentElement.ptabRelativeTo ?? 'margin',
994
+ 'w:leader': contentElement.ptabLeader ?? 'none',
995
+ };
996
+ runChildren.push(XMLBuilder.wSelf('ptab', ptabAttrs));
997
+ break;
998
+ }
999
+ case 'footnoteReference': {
1000
+ if (contentElement.footnoteId === undefined)
1001
+ break;
1002
+ const fnAttrs = {
1003
+ 'w:id': contentElement.footnoteId,
1004
+ };
1005
+ if (contentElement.customMarkFollows === true)
1006
+ fnAttrs['w:customMarkFollows'] = '1';
1007
+ runChildren.push(XMLBuilder.wSelf('footnoteReference', fnAttrs));
1008
+ break;
1009
+ }
1010
+ case 'endnoteReference': {
1011
+ if (contentElement.endnoteId === undefined)
1012
+ break;
1013
+ const enAttrs = {
1014
+ 'w:id': contentElement.endnoteId,
1015
+ };
1016
+ if (contentElement.customMarkFollows === true)
1017
+ enAttrs['w:customMarkFollows'] = '1';
1018
+ runChildren.push(XMLBuilder.wSelf('endnoteReference', enAttrs));
1019
+ break;
1020
+ }
1021
+ case 'footnoteRef':
1022
+ runChildren.push(XMLBuilder.wSelf('footnoteRef'));
1023
+ break;
1024
+ case 'endnoteRef':
1025
+ runChildren.push(XMLBuilder.wSelf('endnoteRef'));
1026
+ break;
1027
+ case 'embeddedObject':
1028
+ if (contentElement.rawXml) {
1029
+ runChildren.push({
1030
+ name: '__rawXml',
1031
+ rawXml: contentElement.rawXml,
1032
+ });
1033
+ }
1034
+ break;
1035
+ case 'vml':
1036
+ if (contentElement.rawXml) {
1037
+ runChildren.push({
1038
+ name: '__rawXml',
1039
+ rawXml: contentElement.rawXml,
1040
+ });
1041
+ }
1042
+ break;
1043
+ }
1044
+ }
1045
+ return XMLBuilder.w('r', undefined, runChildren);
1046
+ }
1047
+ hasText() {
1048
+ const text = this.getText();
1049
+ return text.length > 0;
1050
+ }
1051
+ hasFormatting() {
1052
+ return Object.keys(this.formatting).length > 0;
1053
+ }
1054
+ isValid() {
1055
+ return this.hasText() || this.hasFormatting();
1056
+ }
1057
+ getContent() {
1058
+ return [...this.content];
1059
+ }
1060
+ addTab() {
1061
+ this.content.push({ type: 'tab' });
1062
+ return this;
1063
+ }
1064
+ addBreak(breakType, breakClear) {
1065
+ this.content.push({ type: 'break', breakType, breakClear });
1066
+ return this;
1067
+ }
1068
+ appendText(text) {
1069
+ if (text) {
1070
+ this.content.push({ type: 'text', value: text });
1071
+ }
1072
+ return this;
1073
+ }
1074
+ addCarriageReturn() {
1075
+ this.content.push({ type: 'carriageReturn' });
1076
+ return this;
1077
+ }
1078
+ static createFromContent(content, formatting = {}) {
1079
+ const run = Object.create(Run.prototype);
1080
+ run.content = content;
1081
+ const { cleanXmlFromText, ...displayFormatting } = formatting;
1082
+ run.formatting = displayFormatting;
1083
+ return run;
1084
+ }
1085
+ static generateRunPropertiesXML(formatting) {
1086
+ const rPrChildren = [];
1087
+ if (formatting.characterStyle) {
1088
+ rPrChildren.push(XMLBuilder.wSelf('rStyle', {
1089
+ 'w:val': formatting.characterStyle,
1090
+ }));
1091
+ }
1092
+ if (formatting.font ||
1093
+ formatting.fontHAnsi ||
1094
+ formatting.fontEastAsia ||
1095
+ formatting.fontCs ||
1096
+ formatting.fontHint ||
1097
+ formatting.fontAsciiTheme ||
1098
+ formatting.fontHAnsiTheme ||
1099
+ formatting.fontEastAsiaTheme ||
1100
+ formatting.fontCsTheme) {
1101
+ const rFontsAttrs = {};
1102
+ if (formatting.font)
1103
+ rFontsAttrs['w:ascii'] = formatting.font;
1104
+ rFontsAttrs['w:hAnsi'] = formatting.fontHAnsi || formatting.font || '';
1105
+ if (formatting.fontEastAsia)
1106
+ rFontsAttrs['w:eastAsia'] = formatting.fontEastAsia;
1107
+ rFontsAttrs['w:cs'] = formatting.fontCs || formatting.font || '';
1108
+ if (formatting.fontHint)
1109
+ rFontsAttrs['w:hint'] = formatting.fontHint;
1110
+ if (formatting.fontAsciiTheme)
1111
+ rFontsAttrs['w:asciiTheme'] = formatting.fontAsciiTheme;
1112
+ if (formatting.fontHAnsiTheme)
1113
+ rFontsAttrs['w:hAnsiTheme'] = formatting.fontHAnsiTheme;
1114
+ if (formatting.fontEastAsiaTheme)
1115
+ rFontsAttrs['w:eastAsiaTheme'] = formatting.fontEastAsiaTheme;
1116
+ if (formatting.fontCsTheme)
1117
+ rFontsAttrs['w:cstheme'] = formatting.fontCsTheme;
1118
+ for (const key of Object.keys(rFontsAttrs)) {
1119
+ if (rFontsAttrs[key] === '')
1120
+ delete rFontsAttrs[key];
1121
+ }
1122
+ if (Object.keys(rFontsAttrs).length > 0) {
1123
+ rPrChildren.push(XMLBuilder.wSelf('rFonts', rFontsAttrs));
1124
+ }
1125
+ }
1126
+ if (formatting.bold !== undefined) {
1127
+ rPrChildren.push(XMLBuilder.wSelf('b', { 'w:val': formatting.bold ? '1' : '0' }));
1128
+ }
1129
+ if (formatting.complexScriptBold !== undefined) {
1130
+ rPrChildren.push(XMLBuilder.wSelf('bCs', { 'w:val': formatting.complexScriptBold ? '1' : '0' }));
1131
+ }
1132
+ if (formatting.italic !== undefined) {
1133
+ rPrChildren.push(XMLBuilder.wSelf('i', { 'w:val': formatting.italic ? '1' : '0' }));
1134
+ }
1135
+ if (formatting.complexScriptItalic !== undefined) {
1136
+ rPrChildren.push(XMLBuilder.wSelf('iCs', { 'w:val': formatting.complexScriptItalic ? '1' : '0' }));
1137
+ }
1138
+ if (formatting.allCaps !== undefined) {
1139
+ rPrChildren.push(XMLBuilder.wSelf('caps', { 'w:val': formatting.allCaps ? '1' : '0' }));
1140
+ }
1141
+ if (formatting.smallCaps !== undefined) {
1142
+ rPrChildren.push(XMLBuilder.wSelf('smallCaps', { 'w:val': formatting.smallCaps ? '1' : '0' }));
1143
+ }
1144
+ if (formatting.strike !== undefined) {
1145
+ rPrChildren.push(XMLBuilder.wSelf('strike', { 'w:val': formatting.strike ? '1' : '0' }));
1146
+ }
1147
+ if (formatting.dstrike !== undefined) {
1148
+ rPrChildren.push(XMLBuilder.wSelf('dstrike', { 'w:val': formatting.dstrike ? '1' : '0' }));
1149
+ }
1150
+ if (formatting.outline !== undefined) {
1151
+ rPrChildren.push(XMLBuilder.wSelf('outline', { 'w:val': formatting.outline ? '1' : '0' }));
1152
+ }
1153
+ if (formatting.shadow !== undefined) {
1154
+ rPrChildren.push(XMLBuilder.wSelf('shadow', { 'w:val': formatting.shadow ? '1' : '0' }));
1155
+ }
1156
+ if (formatting.emboss !== undefined) {
1157
+ rPrChildren.push(XMLBuilder.wSelf('emboss', { 'w:val': formatting.emboss ? '1' : '0' }));
1158
+ }
1159
+ if (formatting.imprint !== undefined) {
1160
+ rPrChildren.push(XMLBuilder.wSelf('imprint', { 'w:val': formatting.imprint ? '1' : '0' }));
1161
+ }
1162
+ if (formatting.noProof !== undefined) {
1163
+ rPrChildren.push(XMLBuilder.wSelf('noProof', { 'w:val': formatting.noProof ? '1' : '0' }));
1164
+ }
1165
+ if (formatting.snapToGrid !== undefined) {
1166
+ rPrChildren.push(XMLBuilder.wSelf('snapToGrid', { 'w:val': formatting.snapToGrid ? '1' : '0' }));
1167
+ }
1168
+ if (formatting.vanish !== undefined) {
1169
+ rPrChildren.push(XMLBuilder.wSelf('vanish', { 'w:val': formatting.vanish ? '1' : '0' }));
1170
+ }
1171
+ if (formatting.webHidden !== undefined) {
1172
+ rPrChildren.push(XMLBuilder.wSelf('webHidden', { 'w:val': formatting.webHidden ? '1' : '0' }));
1173
+ }
1174
+ if (formatting.color || formatting.themeColor) {
1175
+ const colorAttrs = {};
1176
+ colorAttrs['w:val'] = formatting.color || '000000';
1177
+ if (formatting.themeColor) {
1178
+ colorAttrs['w:themeColor'] = formatting.themeColor;
1179
+ }
1180
+ if (formatting.themeTint !== undefined) {
1181
+ colorAttrs['w:themeTint'] = formatting.themeTint
1182
+ .toString(16)
1183
+ .toUpperCase()
1184
+ .padStart(2, '0');
1185
+ }
1186
+ if (formatting.themeShade !== undefined) {
1187
+ colorAttrs['w:themeShade'] = formatting.themeShade
1188
+ .toString(16)
1189
+ .toUpperCase()
1190
+ .padStart(2, '0');
1191
+ }
1192
+ rPrChildren.push(XMLBuilder.wSelf('color', colorAttrs));
1193
+ }
1194
+ if (formatting.characterSpacing !== undefined) {
1195
+ rPrChildren.push(XMLBuilder.wSelf('spacing', { 'w:val': formatting.characterSpacing }));
1196
+ }
1197
+ if (formatting.scaling !== undefined) {
1198
+ rPrChildren.push(XMLBuilder.wSelf('w', { 'w:val': formatting.scaling }));
1199
+ }
1200
+ if (formatting.kerning !== undefined && formatting.kerning !== null) {
1201
+ rPrChildren.push(XMLBuilder.wSelf('kern', { 'w:val': formatting.kerning }));
1202
+ }
1203
+ if (formatting.position !== undefined) {
1204
+ rPrChildren.push(XMLBuilder.wSelf('position', { 'w:val': formatting.position }));
1205
+ }
1206
+ if (formatting.size !== undefined) {
1207
+ const halfPoints = pointsToHalfPoints(formatting.size);
1208
+ rPrChildren.push(XMLBuilder.wSelf('sz', { 'w:val': halfPoints }));
1209
+ const csHalfPoints = formatting.sizeCs !== undefined ? pointsToHalfPoints(formatting.sizeCs) : halfPoints;
1210
+ rPrChildren.push(XMLBuilder.wSelf('szCs', { 'w:val': csHalfPoints }));
1211
+ }
1212
+ else if (formatting.sizeCs !== undefined) {
1213
+ const csHalfPoints = pointsToHalfPoints(formatting.sizeCs);
1214
+ rPrChildren.push(XMLBuilder.wSelf('szCs', { 'w:val': csHalfPoints }));
1215
+ }
1216
+ if (formatting.highlight) {
1217
+ rPrChildren.push(XMLBuilder.wSelf('highlight', { 'w:val': formatting.highlight }));
1218
+ }
1219
+ if (formatting.underline) {
1220
+ const underlineValue = typeof formatting.underline === 'string' ? formatting.underline : 'single';
1221
+ const uAttrs = { 'w:val': underlineValue };
1222
+ if (formatting.underlineColor)
1223
+ uAttrs['w:color'] = formatting.underlineColor;
1224
+ if (formatting.underlineThemeColor)
1225
+ uAttrs['w:themeColor'] = formatting.underlineThemeColor;
1226
+ if (formatting.underlineThemeTint !== undefined)
1227
+ uAttrs['w:themeTint'] = formatting.underlineThemeTint
1228
+ .toString(16)
1229
+ .toUpperCase()
1230
+ .padStart(2, '0');
1231
+ if (formatting.underlineThemeShade !== undefined)
1232
+ uAttrs['w:themeShade'] = formatting.underlineThemeShade
1233
+ .toString(16)
1234
+ .toUpperCase()
1235
+ .padStart(2, '0');
1236
+ rPrChildren.push(XMLBuilder.wSelf('u', uAttrs));
1237
+ }
1238
+ else if (formatting.underline === false && formatting.characterStyle) {
1239
+ rPrChildren.push(XMLBuilder.wSelf('u', { 'w:val': 'none' }));
1240
+ }
1241
+ if (formatting.effect) {
1242
+ rPrChildren.push(XMLBuilder.wSelf('effect', { 'w:val': formatting.effect }));
1243
+ }
1244
+ if (formatting.border) {
1245
+ const b = formatting.border;
1246
+ const bdrAttrs = { 'w:val': b.style ?? 'nil' };
1247
+ if (b.size !== undefined)
1248
+ bdrAttrs['w:sz'] = b.size;
1249
+ if (b.color)
1250
+ bdrAttrs['w:color'] = b.color;
1251
+ if (b.space !== undefined)
1252
+ bdrAttrs['w:space'] = b.space;
1253
+ const bb = b;
1254
+ if (bb.themeColor)
1255
+ bdrAttrs['w:themeColor'] = bb.themeColor;
1256
+ if (bb.themeTint)
1257
+ bdrAttrs['w:themeTint'] = bb.themeTint;
1258
+ if (bb.themeShade)
1259
+ bdrAttrs['w:themeShade'] = bb.themeShade;
1260
+ if (bb.shadow !== undefined)
1261
+ bdrAttrs['w:shadow'] = bb.shadow ? '1' : '0';
1262
+ if (bb.frame !== undefined)
1263
+ bdrAttrs['w:frame'] = bb.frame ? '1' : '0';
1264
+ rPrChildren.push(XMLBuilder.wSelf('bdr', bdrAttrs));
1265
+ }
1266
+ if (formatting.shading) {
1267
+ const shdAttrs = buildShadingAttributes(formatting.shading);
1268
+ if (Object.keys(shdAttrs).length > 0) {
1269
+ rPrChildren.push(XMLBuilder.wSelf('shd', shdAttrs));
1270
+ }
1271
+ }
1272
+ if (formatting.fitText !== undefined) {
1273
+ rPrChildren.push(XMLBuilder.wSelf('fitText', { 'w:val': formatting.fitText }));
1274
+ }
1275
+ if (formatting.subscript) {
1276
+ rPrChildren.push(XMLBuilder.wSelf('vertAlign', { 'w:val': 'subscript' }));
1277
+ }
1278
+ else if (formatting.superscript) {
1279
+ rPrChildren.push(XMLBuilder.wSelf('vertAlign', { 'w:val': 'superscript' }));
1280
+ }
1281
+ else if (formatting.vertAlignBaseline) {
1282
+ rPrChildren.push(XMLBuilder.wSelf('vertAlign', { 'w:val': 'baseline' }));
1283
+ }
1284
+ if (formatting.rtl !== undefined) {
1285
+ rPrChildren.push(XMLBuilder.wSelf('rtl', { 'w:val': formatting.rtl ? '1' : '0' }));
1286
+ }
1287
+ if (formatting.complexScript !== undefined) {
1288
+ rPrChildren.push(XMLBuilder.wSelf('cs', { 'w:val': formatting.complexScript ? '1' : '0' }));
1289
+ }
1290
+ if (formatting.emphasis) {
1291
+ rPrChildren.push(XMLBuilder.wSelf('em', { 'w:val': formatting.emphasis }));
1292
+ }
1293
+ if (formatting.language) {
1294
+ const langAttrs = {};
1295
+ if (typeof formatting.language === 'string') {
1296
+ langAttrs['w:val'] = formatting.language;
1297
+ }
1298
+ else {
1299
+ if (formatting.language.val)
1300
+ langAttrs['w:val'] = formatting.language.val;
1301
+ if (formatting.language.eastAsia)
1302
+ langAttrs['w:eastAsia'] = formatting.language.eastAsia;
1303
+ if (formatting.language.bidi)
1304
+ langAttrs['w:bidi'] = formatting.language.bidi;
1305
+ }
1306
+ if (Object.keys(langAttrs).length > 0) {
1307
+ rPrChildren.push(XMLBuilder.wSelf('lang', langAttrs));
1308
+ }
1309
+ }
1310
+ if (formatting.eastAsianLayout) {
1311
+ const layout = formatting.eastAsianLayout;
1312
+ const attrs = {};
1313
+ if (layout.id !== undefined)
1314
+ attrs['w:id'] = layout.id;
1315
+ if (layout.vert !== undefined)
1316
+ attrs['w:vert'] = layout.vert ? '1' : '0';
1317
+ if (layout.vertCompress !== undefined) {
1318
+ attrs['w:vertCompress'] = layout.vertCompress ? '1' : '0';
1319
+ }
1320
+ if (layout.combine !== undefined)
1321
+ attrs['w:combine'] = layout.combine ? '1' : '0';
1322
+ if (layout.combineBrackets)
1323
+ attrs['w:combineBrackets'] = layout.combineBrackets;
1324
+ if (Object.keys(attrs).length > 0) {
1325
+ rPrChildren.push(XMLBuilder.wSelf('eastAsianLayout', attrs));
1326
+ }
1327
+ }
1328
+ if (formatting.specVanish !== undefined) {
1329
+ rPrChildren.push(XMLBuilder.wSelf('specVanish', { 'w:val': formatting.specVanish ? '1' : '0' }));
1330
+ }
1331
+ if (formatting.rawW14Properties && formatting.rawW14Properties.length > 0) {
1332
+ for (const rawXml of formatting.rawW14Properties) {
1333
+ rPrChildren.push({ name: '__rawXml', rawXml });
1334
+ }
1335
+ }
1336
+ if (rPrChildren.length === 0) {
1337
+ return null;
1338
+ }
1339
+ return XMLBuilder.w('rPr', undefined, rPrChildren);
1340
+ }
1341
+ static create(text, formatting) {
1342
+ return new Run(text, formatting);
1343
+ }
1344
+ clone() {
1345
+ const clonedContent = deepClone(this.content);
1346
+ const clonedFormatting = deepClone(this.formatting);
1347
+ return Run.createFromContent(clonedContent, clonedFormatting);
1348
+ }
1349
+ insertText(index, text) {
1350
+ const currentText = this.getText();
1351
+ if (index < 0)
1352
+ index = 0;
1353
+ if (index > currentText.length)
1354
+ index = currentText.length;
1355
+ const newText = currentText.slice(0, index) + text + currentText.slice(index);
1356
+ this.setText(newText);
1357
+ return this;
1358
+ }
1359
+ replaceText(start, end, text) {
1360
+ const currentText = this.getText();
1361
+ if (start < 0)
1362
+ start = 0;
1363
+ if (end > currentText.length)
1364
+ end = currentText.length;
1365
+ if (start > end)
1366
+ [start, end] = [end, start];
1367
+ const newText = currentText.slice(0, start) + text + currentText.slice(end);
1368
+ this.setText(newText);
1369
+ return this;
1370
+ }
1371
+ splitAt(offset) {
1372
+ const totalLength = this.getText().length;
1373
+ if (offset >= totalLength) {
1374
+ return Run.createFromContent([], deepClone(this.formatting));
1375
+ }
1376
+ if (offset <= 0) {
1377
+ const allContent = this.content;
1378
+ this.content = [];
1379
+ return Run.createFromContent(allContent, deepClone(this.formatting));
1380
+ }
1381
+ const beforeContent = [];
1382
+ const afterContent = [];
1383
+ let charPos = 0;
1384
+ let splitDone = false;
1385
+ for (const item of this.content) {
1386
+ if (splitDone) {
1387
+ afterContent.push(deepClone(item));
1388
+ continue;
1389
+ }
1390
+ const itemLength = this.getContentItemLength(item);
1391
+ if (charPos + itemLength <= offset) {
1392
+ beforeContent.push(deepClone(item));
1393
+ charPos += itemLength;
1394
+ }
1395
+ else if (charPos >= offset) {
1396
+ afterContent.push(deepClone(item));
1397
+ splitDone = true;
1398
+ }
1399
+ else {
1400
+ if (item.type === 'text' && item.value) {
1401
+ const splitIndex = offset - charPos;
1402
+ beforeContent.push({ type: 'text', value: item.value.slice(0, splitIndex) });
1403
+ afterContent.push({ type: 'text', value: item.value.slice(splitIndex) });
1404
+ }
1405
+ else {
1406
+ afterContent.push(deepClone(item));
1407
+ }
1408
+ splitDone = true;
1409
+ }
1410
+ }
1411
+ this.content = beforeContent;
1412
+ return Run.createFromContent(afterContent, deepClone(this.formatting));
1413
+ }
1414
+ getContentItemLength(item) {
1415
+ switch (item.type) {
1416
+ case 'text':
1417
+ return (item.value || '').length;
1418
+ case 'tab':
1419
+ case 'break':
1420
+ case 'carriageReturn':
1421
+ case 'softHyphen':
1422
+ case 'noBreakHyphen':
1423
+ return 1;
1424
+ default:
1425
+ return 0;
1426
+ }
1427
+ }
1428
+ clearFormattingConflicts(styleRunFormatting) {
1429
+ const conflictingProperties = [];
1430
+ for (const key in this.formatting) {
1431
+ const propKey = key;
1432
+ if (styleRunFormatting[propKey] === undefined) {
1433
+ continue;
1434
+ }
1435
+ if (this.formatting[propKey] !== styleRunFormatting[propKey]) {
1436
+ conflictingProperties.push(propKey);
1437
+ }
1438
+ }
1439
+ for (const prop of conflictingProperties) {
1440
+ delete this.formatting[prop];
1441
+ }
1442
+ return this;
1443
+ }
1444
+ clearMatchingFormatting(styleRunFormatting) {
1445
+ const matchingProperties = [];
1446
+ for (const key in this.formatting) {
1447
+ const propKey = key;
1448
+ if (styleRunFormatting[propKey] === undefined) {
1449
+ continue;
1450
+ }
1451
+ if (this.formatting[propKey] === styleRunFormatting[propKey]) {
1452
+ matchingProperties.push(propKey);
1453
+ }
1454
+ }
1455
+ for (const prop of matchingProperties) {
1456
+ delete this.formatting[prop];
1457
+ }
1458
+ return this;
1459
+ }
1460
+ clearFormatting() {
1461
+ this.formatting = {};
1462
+ return this;
1463
+ }
1464
+ }
1465
+ //# sourceMappingURL=Run.js.map