docxmlater 11.0.10 → 12.1.0

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 (361) hide show
  1. package/README.md +53 -13
  2. package/dist/core/Document.d.ts +29 -3
  3. package/dist/core/Document.d.ts.map +1 -1
  4. package/dist/core/Document.js +733 -170
  5. package/dist/core/Document.js.map +1 -1
  6. package/dist/core/DocumentGenerator.d.ts +1 -0
  7. package/dist/core/DocumentGenerator.d.ts.map +1 -1
  8. package/dist/core/DocumentGenerator.js +77 -25
  9. package/dist/core/DocumentGenerator.js.map +1 -1
  10. package/dist/core/DocumentParser.d.ts +7 -3
  11. package/dist/core/DocumentParser.d.ts.map +1 -1
  12. package/dist/core/DocumentParser.js +427 -81
  13. package/dist/core/DocumentParser.js.map +1 -1
  14. package/dist/core/RelationshipManager.d.ts.map +1 -1
  15. package/dist/core/RelationshipManager.js +2 -2
  16. package/dist/core/RelationshipManager.js.map +1 -1
  17. package/dist/elements/Comment.d.ts +15 -1
  18. package/dist/elements/Comment.d.ts.map +1 -1
  19. package/dist/elements/Comment.js +67 -12
  20. package/dist/elements/Comment.js.map +1 -1
  21. package/dist/elements/CommentManager.d.ts +4 -0
  22. package/dist/elements/CommentManager.d.ts.map +1 -1
  23. package/dist/elements/CommentManager.js +74 -16
  24. package/dist/elements/CommentManager.js.map +1 -1
  25. package/dist/elements/EndnoteManager.d.ts.map +1 -1
  26. package/dist/elements/EndnoteManager.js.map +1 -1
  27. package/dist/elements/Field.d.ts +10 -1
  28. package/dist/elements/Field.d.ts.map +1 -1
  29. package/dist/elements/Field.js +76 -34
  30. package/dist/elements/Field.js.map +1 -1
  31. package/dist/elements/FieldHelpers.d.ts +1 -0
  32. package/dist/elements/FieldHelpers.d.ts.map +1 -1
  33. package/dist/elements/FieldHelpers.js +8 -4
  34. package/dist/elements/FieldHelpers.js.map +1 -1
  35. package/dist/elements/Footer.d.ts +3 -1
  36. package/dist/elements/Footer.d.ts.map +1 -1
  37. package/dist/elements/Footer.js +39 -53
  38. package/dist/elements/Footer.js.map +1 -1
  39. package/dist/elements/FootnoteManager.d.ts.map +1 -1
  40. package/dist/elements/FootnoteManager.js.map +1 -1
  41. package/dist/elements/Header.d.ts +3 -1
  42. package/dist/elements/Header.d.ts.map +1 -1
  43. package/dist/elements/Header.js +39 -53
  44. package/dist/elements/Header.js.map +1 -1
  45. package/dist/elements/HeaderFooterManager.d.ts +4 -2
  46. package/dist/elements/HeaderFooterManager.d.ts.map +1 -1
  47. package/dist/elements/HeaderFooterManager.js +36 -6
  48. package/dist/elements/HeaderFooterManager.js.map +1 -1
  49. package/dist/elements/Hyperlink.d.ts +6 -1
  50. package/dist/elements/Hyperlink.d.ts.map +1 -1
  51. package/dist/elements/Hyperlink.js +69 -44
  52. package/dist/elements/Hyperlink.js.map +1 -1
  53. package/dist/elements/Image.d.ts.map +1 -1
  54. package/dist/elements/Image.js +33 -6
  55. package/dist/elements/Image.js.map +1 -1
  56. package/dist/elements/ImageManager.d.ts +1 -0
  57. package/dist/elements/ImageManager.d.ts.map +1 -1
  58. package/dist/elements/ImageManager.js +11 -0
  59. package/dist/elements/ImageManager.js.map +1 -1
  60. package/dist/elements/Paragraph.d.ts +3 -0
  61. package/dist/elements/Paragraph.d.ts.map +1 -1
  62. package/dist/elements/Paragraph.js +91 -26
  63. package/dist/elements/Paragraph.js.map +1 -1
  64. package/dist/elements/Revision.d.ts +4 -0
  65. package/dist/elements/Revision.d.ts.map +1 -1
  66. package/dist/elements/Revision.js +369 -29
  67. package/dist/elements/Revision.js.map +1 -1
  68. package/dist/elements/Run.d.ts +1 -0
  69. package/dist/elements/Run.d.ts.map +1 -1
  70. package/dist/elements/Run.js +24 -4
  71. package/dist/elements/Run.js.map +1 -1
  72. package/dist/elements/Section.d.ts.map +1 -1
  73. package/dist/elements/Section.js +17 -7
  74. package/dist/elements/Section.js.map +1 -1
  75. package/dist/elements/Shape.d.ts.map +1 -1
  76. package/dist/elements/Shape.js +50 -42
  77. package/dist/elements/Shape.js.map +1 -1
  78. package/dist/elements/StructuredDocumentTag.d.ts +9 -1
  79. package/dist/elements/StructuredDocumentTag.d.ts.map +1 -1
  80. package/dist/elements/StructuredDocumentTag.js +46 -6
  81. package/dist/elements/StructuredDocumentTag.js.map +1 -1
  82. package/dist/elements/Table.d.ts +2 -0
  83. package/dist/elements/Table.d.ts.map +1 -1
  84. package/dist/elements/Table.js +90 -42
  85. package/dist/elements/Table.js.map +1 -1
  86. package/dist/elements/TableCell.d.ts +1 -0
  87. package/dist/elements/TableCell.d.ts.map +1 -1
  88. package/dist/elements/TableCell.js +32 -13
  89. package/dist/elements/TableCell.js.map +1 -1
  90. package/dist/elements/TableOfContents.d.ts.map +1 -1
  91. package/dist/elements/TableOfContents.js +5 -7
  92. package/dist/elements/TableOfContents.js.map +1 -1
  93. package/dist/elements/TableRow.d.ts +1 -0
  94. package/dist/elements/TableRow.d.ts.map +1 -1
  95. package/dist/elements/TableRow.js +16 -1
  96. package/dist/elements/TableRow.js.map +1 -1
  97. package/dist/elements/TextBox.d.ts.map +1 -1
  98. package/dist/elements/TextBox.js +55 -42
  99. package/dist/elements/TextBox.js.map +1 -1
  100. package/dist/esm/core/Document.js +735 -172
  101. package/dist/esm/core/Document.js.map +1 -1
  102. package/dist/esm/core/DocumentGenerator.js +77 -25
  103. package/dist/esm/core/DocumentGenerator.js.map +1 -1
  104. package/dist/esm/core/DocumentParser.js +427 -81
  105. package/dist/esm/core/DocumentParser.js.map +1 -1
  106. package/dist/esm/core/RelationshipManager.js +2 -2
  107. package/dist/esm/core/RelationshipManager.js.map +1 -1
  108. package/dist/esm/elements/Comment.js +67 -12
  109. package/dist/esm/elements/Comment.js.map +1 -1
  110. package/dist/esm/elements/CommentManager.js +74 -16
  111. package/dist/esm/elements/CommentManager.js.map +1 -1
  112. package/dist/esm/elements/EndnoteManager.js.map +1 -1
  113. package/dist/esm/elements/Field.js +77 -35
  114. package/dist/esm/elements/Field.js.map +1 -1
  115. package/dist/esm/elements/FieldHelpers.js +7 -4
  116. package/dist/esm/elements/FieldHelpers.js.map +1 -1
  117. package/dist/esm/elements/Footer.js +39 -53
  118. package/dist/esm/elements/Footer.js.map +1 -1
  119. package/dist/esm/elements/FootnoteManager.js.map +1 -1
  120. package/dist/esm/elements/Header.js +39 -53
  121. package/dist/esm/elements/Header.js.map +1 -1
  122. package/dist/esm/elements/HeaderFooterManager.js +36 -6
  123. package/dist/esm/elements/HeaderFooterManager.js.map +1 -1
  124. package/dist/esm/elements/Hyperlink.js +69 -44
  125. package/dist/esm/elements/Hyperlink.js.map +1 -1
  126. package/dist/esm/elements/Image.js +33 -6
  127. package/dist/esm/elements/Image.js.map +1 -1
  128. package/dist/esm/elements/ImageManager.js +11 -0
  129. package/dist/esm/elements/ImageManager.js.map +1 -1
  130. package/dist/esm/elements/Paragraph.js +91 -26
  131. package/dist/esm/elements/Paragraph.js.map +1 -1
  132. package/dist/esm/elements/Revision.js +369 -29
  133. package/dist/esm/elements/Revision.js.map +1 -1
  134. package/dist/esm/elements/Run.js +24 -4
  135. package/dist/esm/elements/Run.js.map +1 -1
  136. package/dist/esm/elements/Section.js +17 -7
  137. package/dist/esm/elements/Section.js.map +1 -1
  138. package/dist/esm/elements/Shape.js +50 -42
  139. package/dist/esm/elements/Shape.js.map +1 -1
  140. package/dist/esm/elements/StructuredDocumentTag.js +46 -6
  141. package/dist/esm/elements/StructuredDocumentTag.js.map +1 -1
  142. package/dist/esm/elements/Table.js +90 -42
  143. package/dist/esm/elements/Table.js.map +1 -1
  144. package/dist/esm/elements/TableCell.js +32 -13
  145. package/dist/esm/elements/TableCell.js.map +1 -1
  146. package/dist/esm/elements/TableOfContents.js +5 -7
  147. package/dist/esm/elements/TableOfContents.js.map +1 -1
  148. package/dist/esm/elements/TableRow.js +16 -1
  149. package/dist/esm/elements/TableRow.js.map +1 -1
  150. package/dist/esm/elements/TextBox.js +55 -42
  151. package/dist/esm/elements/TextBox.js.map +1 -1
  152. package/dist/esm/formatting/AbstractNumbering.js +1 -1
  153. package/dist/esm/formatting/AbstractNumbering.js.map +1 -1
  154. package/dist/esm/formatting/NumberingLevel.js +8 -6
  155. package/dist/esm/formatting/NumberingLevel.js.map +1 -1
  156. package/dist/esm/formatting/NumberingManager.js +16 -1
  157. package/dist/esm/formatting/NumberingManager.js.map +1 -1
  158. package/dist/esm/formatting/Style.js +14 -0
  159. package/dist/esm/formatting/Style.js.map +1 -1
  160. package/dist/esm/formatting/StylesManager.js +14 -2
  161. package/dist/esm/formatting/StylesManager.js.map +1 -1
  162. package/dist/esm/helpers/CleanupHelper.js +103 -26
  163. package/dist/esm/helpers/CleanupHelper.js.map +1 -1
  164. package/dist/esm/images/ImageOptimizer.js +52 -4
  165. package/dist/esm/images/ImageOptimizer.js.map +1 -1
  166. package/dist/esm/index.js +1 -0
  167. package/dist/esm/index.js.map +1 -1
  168. package/dist/esm/internal.js +1 -1
  169. package/dist/esm/internal.js.map +1 -1
  170. package/dist/esm/processors/CompatibilityUpgrader.js +7 -1
  171. package/dist/esm/processors/CompatibilityUpgrader.js.map +1 -1
  172. package/dist/esm/processors/InMemoryRevisionAcceptor.js +134 -13
  173. package/dist/esm/processors/InMemoryRevisionAcceptor.js.map +1 -1
  174. package/dist/esm/processors/RevisionWalker.js +223 -39
  175. package/dist/esm/processors/RevisionWalker.js.map +1 -1
  176. package/dist/esm/processors/SelectiveRevisionAcceptor.js +116 -17
  177. package/dist/esm/processors/SelectiveRevisionAcceptor.js.map +1 -1
  178. package/dist/esm/processors/acceptRevisions.js +20 -11
  179. package/dist/esm/processors/acceptRevisions.js.map +1 -1
  180. package/dist/esm/processors/cnfStyleDecoder.js +7 -7
  181. package/dist/esm/processors/cnfStyleDecoder.js.map +1 -1
  182. package/dist/esm/processors/stripTrackedChanges.js +16 -5
  183. package/dist/esm/processors/stripTrackedChanges.js.map +1 -1
  184. package/dist/esm/utils/deepClone.js +24 -11
  185. package/dist/esm/utils/deepClone.js.map +1 -1
  186. package/dist/esm/utils/units.js +1 -1
  187. package/dist/esm/utils/units.js.map +1 -1
  188. package/dist/esm/utils/validation.js +11 -23
  189. package/dist/esm/utils/validation.js.map +1 -1
  190. package/dist/esm/utils/xmlSanitization.js +131 -7
  191. package/dist/esm/utils/xmlSanitization.js.map +1 -1
  192. package/dist/esm/validation/RevisionAutoFixer.js +69 -55
  193. package/dist/esm/validation/RevisionAutoFixer.js.map +1 -1
  194. package/dist/esm/validation/RevisionValidator.js +24 -20
  195. package/dist/esm/validation/RevisionValidator.js.map +1 -1
  196. package/dist/esm/xml/XMLBuilder.js +52 -20
  197. package/dist/esm/xml/XMLBuilder.js.map +1 -1
  198. package/dist/esm/xml/XMLParser.js +55 -13
  199. package/dist/esm/xml/XMLParser.js.map +1 -1
  200. package/dist/esm/zip/ZipHandler.js +37 -13
  201. package/dist/esm/zip/ZipHandler.js.map +1 -1
  202. package/dist/esm/zip/ZipReader.js +53 -6
  203. package/dist/esm/zip/ZipReader.js.map +1 -1
  204. package/dist/esm/zip/errors.js +7 -0
  205. package/dist/esm/zip/errors.js.map +1 -1
  206. package/dist/esm/zip/types.js +4 -0
  207. package/dist/esm/zip/types.js.map +1 -1
  208. package/dist/formatting/AbstractNumbering.d.ts.map +1 -1
  209. package/dist/formatting/AbstractNumbering.js +1 -1
  210. package/dist/formatting/AbstractNumbering.js.map +1 -1
  211. package/dist/formatting/NumberingLevel.d.ts +1 -1
  212. package/dist/formatting/NumberingLevel.d.ts.map +1 -1
  213. package/dist/formatting/NumberingLevel.js +8 -6
  214. package/dist/formatting/NumberingLevel.js.map +1 -1
  215. package/dist/formatting/NumberingManager.d.ts.map +1 -1
  216. package/dist/formatting/NumberingManager.js +16 -1
  217. package/dist/formatting/NumberingManager.js.map +1 -1
  218. package/dist/formatting/Style.d.ts.map +1 -1
  219. package/dist/formatting/Style.js +14 -0
  220. package/dist/formatting/Style.js.map +1 -1
  221. package/dist/formatting/StylesManager.d.ts +2 -0
  222. package/dist/formatting/StylesManager.d.ts.map +1 -1
  223. package/dist/formatting/StylesManager.js +14 -2
  224. package/dist/formatting/StylesManager.js.map +1 -1
  225. package/dist/helpers/CleanupHelper.d.ts.map +1 -1
  226. package/dist/helpers/CleanupHelper.js +103 -26
  227. package/dist/helpers/CleanupHelper.js.map +1 -1
  228. package/dist/images/ImageOptimizer.d.ts.map +1 -1
  229. package/dist/images/ImageOptimizer.js +52 -4
  230. package/dist/images/ImageOptimizer.js.map +1 -1
  231. package/dist/index.d.ts +3 -1
  232. package/dist/index.d.ts.map +1 -1
  233. package/dist/index.js +4 -2
  234. package/dist/index.js.map +1 -1
  235. package/dist/internal.d.ts +1 -1
  236. package/dist/internal.d.ts.map +1 -1
  237. package/dist/internal.js +2 -1
  238. package/dist/internal.js.map +1 -1
  239. package/dist/processors/CompatibilityUpgrader.d.ts.map +1 -1
  240. package/dist/processors/CompatibilityUpgrader.js +7 -1
  241. package/dist/processors/CompatibilityUpgrader.js.map +1 -1
  242. package/dist/processors/InMemoryRevisionAcceptor.d.ts +1 -0
  243. package/dist/processors/InMemoryRevisionAcceptor.d.ts.map +1 -1
  244. package/dist/processors/InMemoryRevisionAcceptor.js +135 -13
  245. package/dist/processors/InMemoryRevisionAcceptor.js.map +1 -1
  246. package/dist/processors/RevisionWalker.d.ts +9 -3
  247. package/dist/processors/RevisionWalker.d.ts.map +1 -1
  248. package/dist/processors/RevisionWalker.js +223 -39
  249. package/dist/processors/RevisionWalker.js.map +1 -1
  250. package/dist/processors/SelectiveRevisionAcceptor.d.ts.map +1 -1
  251. package/dist/processors/SelectiveRevisionAcceptor.js +116 -17
  252. package/dist/processors/SelectiveRevisionAcceptor.js.map +1 -1
  253. package/dist/processors/acceptRevisions.d.ts +1 -0
  254. package/dist/processors/acceptRevisions.d.ts.map +1 -1
  255. package/dist/processors/acceptRevisions.js +21 -11
  256. package/dist/processors/acceptRevisions.js.map +1 -1
  257. package/dist/processors/cnfStyleDecoder.d.ts.map +1 -1
  258. package/dist/processors/cnfStyleDecoder.js +7 -7
  259. package/dist/processors/cnfStyleDecoder.js.map +1 -1
  260. package/dist/processors/stripTrackedChanges.d.ts.map +1 -1
  261. package/dist/processors/stripTrackedChanges.js +16 -5
  262. package/dist/processors/stripTrackedChanges.js.map +1 -1
  263. package/dist/utils/deepClone.d.ts.map +1 -1
  264. package/dist/utils/deepClone.js +24 -11
  265. package/dist/utils/deepClone.js.map +1 -1
  266. package/dist/utils/units.d.ts.map +1 -1
  267. package/dist/utils/units.js +1 -1
  268. package/dist/utils/units.js.map +1 -1
  269. package/dist/utils/validation.d.ts.map +1 -1
  270. package/dist/utils/validation.js +11 -23
  271. package/dist/utils/validation.js.map +1 -1
  272. package/dist/utils/xmlSanitization.d.ts +2 -0
  273. package/dist/utils/xmlSanitization.d.ts.map +1 -1
  274. package/dist/utils/xmlSanitization.js +133 -7
  275. package/dist/utils/xmlSanitization.js.map +1 -1
  276. package/dist/validation/RevisionAutoFixer.d.ts +6 -2
  277. package/dist/validation/RevisionAutoFixer.d.ts.map +1 -1
  278. package/dist/validation/RevisionAutoFixer.js +68 -54
  279. package/dist/validation/RevisionAutoFixer.js.map +1 -1
  280. package/dist/validation/RevisionValidator.d.ts +2 -0
  281. package/dist/validation/RevisionValidator.d.ts.map +1 -1
  282. package/dist/validation/RevisionValidator.js +26 -21
  283. package/dist/validation/RevisionValidator.js.map +1 -1
  284. package/dist/xml/XMLBuilder.d.ts +1 -0
  285. package/dist/xml/XMLBuilder.d.ts.map +1 -1
  286. package/dist/xml/XMLBuilder.js +52 -20
  287. package/dist/xml/XMLBuilder.js.map +1 -1
  288. package/dist/xml/XMLParser.d.ts +1 -0
  289. package/dist/xml/XMLParser.d.ts.map +1 -1
  290. package/dist/xml/XMLParser.js +55 -13
  291. package/dist/xml/XMLParser.js.map +1 -1
  292. package/dist/zip/ZipHandler.d.ts.map +1 -1
  293. package/dist/zip/ZipHandler.js +37 -13
  294. package/dist/zip/ZipHandler.js.map +1 -1
  295. package/dist/zip/ZipReader.d.ts.map +1 -1
  296. package/dist/zip/ZipReader.js +52 -5
  297. package/dist/zip/ZipReader.js.map +1 -1
  298. package/dist/zip/errors.d.ts +3 -0
  299. package/dist/zip/errors.d.ts.map +1 -1
  300. package/dist/zip/errors.js +9 -1
  301. package/dist/zip/errors.js.map +1 -1
  302. package/dist/zip/types.d.ts +4 -0
  303. package/dist/zip/types.d.ts.map +1 -1
  304. package/dist/zip/types.js +4 -0
  305. package/dist/zip/types.js.map +1 -1
  306. package/package.json +2 -2
  307. package/src/core/Document.ts +1184 -242
  308. package/src/core/DocumentGenerator.ts +106 -26
  309. package/src/core/DocumentParser.ts +681 -114
  310. package/src/core/RelationshipManager.ts +446 -442
  311. package/src/elements/Comment.ts +123 -18
  312. package/src/elements/CommentManager.ts +121 -22
  313. package/src/elements/EndnoteManager.ts +4 -1
  314. package/src/elements/Field.ts +134 -43
  315. package/src/elements/FieldHelpers.ts +20 -4
  316. package/src/elements/Footer.ts +62 -67
  317. package/src/elements/FootnoteManager.ts +4 -1
  318. package/src/elements/Header.ts +62 -67
  319. package/src/elements/HeaderFooterManager.ts +56 -8
  320. package/src/elements/Hyperlink.ts +150 -55
  321. package/src/elements/Image.ts +51 -7
  322. package/src/elements/ImageManager.ts +24 -0
  323. package/src/elements/Paragraph.ts +161 -40
  324. package/src/elements/Revision.ts +446 -47
  325. package/src/elements/Run.ts +44 -6
  326. package/src/elements/Section.ts +25 -9
  327. package/src/elements/Shape.ts +52 -44
  328. package/src/elements/StructuredDocumentTag.ts +83 -8
  329. package/src/elements/Table.ts +151 -50
  330. package/src/elements/TableCell.ts +57 -17
  331. package/src/elements/TableOfContents.ts +10 -9
  332. package/src/elements/TableRow.ts +35 -3
  333. package/src/elements/TextBox.ts +58 -43
  334. package/src/formatting/AbstractNumbering.ts +4 -2
  335. package/src/formatting/NumberingLevel.ts +50 -12
  336. package/src/formatting/NumberingManager.ts +32 -3
  337. package/src/formatting/Style.ts +14 -0
  338. package/src/formatting/StylesManager.ts +29 -2
  339. package/src/helpers/CleanupHelper.ts +122 -30
  340. package/src/images/ImageOptimizer.ts +64 -5
  341. package/src/index.ts +7 -0
  342. package/src/internal.ts +1 -0
  343. package/src/processors/CompatibilityUpgrader.ts +15 -2
  344. package/src/processors/InMemoryRevisionAcceptor.ts +276 -17
  345. package/src/processors/RevisionWalker.ts +390 -46
  346. package/src/processors/SelectiveRevisionAcceptor.ts +164 -28
  347. package/src/processors/acceptRevisions.ts +67 -17
  348. package/src/processors/cnfStyleDecoder.ts +18 -12
  349. package/src/processors/stripTrackedChanges.ts +47 -10
  350. package/src/utils/deepClone.ts +48 -14
  351. package/src/utils/units.ts +3 -1
  352. package/src/utils/validation.ts +30 -32
  353. package/src/utils/xmlSanitization.ts +218 -22
  354. package/src/validation/RevisionAutoFixer.ts +109 -65
  355. package/src/validation/RevisionValidator.ts +48 -23
  356. package/src/xml/XMLBuilder.ts +82 -22
  357. package/src/xml/XMLParser.ts +87 -20
  358. package/src/zip/ZipHandler.ts +61 -21
  359. package/src/zip/ZipReader.ts +135 -13
  360. package/src/zip/errors.ts +15 -0
  361. package/src/zip/types.ts +44 -2
@@ -68,6 +68,7 @@ const diagnostics_js_1 = require("../utils/diagnostics.js");
68
68
  const logger_js_1 = require("../utils/logger.js");
69
69
  const parsingHelpers_js_1 = require("../utils/parsingHelpers.js");
70
70
  const units_js_1 = require("../utils/units.js");
71
+ const xmlSanitization_js_1 = require("../utils/xmlSanitization.js");
71
72
  function getLogger() {
72
73
  return (0, logger_js_1.createScopedLogger)((0, logger_js_1.getGlobalLogger)(), 'DocumentParser');
73
74
  }
@@ -249,9 +250,13 @@ class DocumentParser {
249
250
  const parsed = XMLParser_js_1.XMLParser.parseToObject(elementXml, {
250
251
  trimValues: false,
251
252
  });
252
- const sdt = await this.parseSDTFromObject(parsed['w:sdt'], relationshipManager, zipHandler, imageManager);
253
- if (sdt)
253
+ const sdt = await this.parseSDTFromObject(parsed['w:sdt'], relationshipManager, zipHandler, imageManager, elementXml);
254
+ if (sdt) {
254
255
  bodyElements.push(sdt);
256
+ }
257
+ else {
258
+ bodyElements.push(new PreservedElement_js_1.PreservedElement(elementXml, 'sdt', 'block'));
259
+ }
255
260
  pos = next.pos + elementXml.length;
256
261
  }
257
262
  else {
@@ -677,6 +682,7 @@ class DocumentParser {
677
682
  let permEndIndex = 0;
678
683
  let oMathIndex = 0;
679
684
  let rubyIndex = 0;
685
+ let sdtIndex = 0;
680
686
  let commentRangeStartIndex = 0;
681
687
  let commentRangeEndIndex = 0;
682
688
  const findClosingTagEnd = (content, tagName, startPos) => {
@@ -828,6 +834,14 @@ class DocumentParser {
828
834
  });
829
835
  searchPos = selfClosing ? tagEnd + 1 : findClosingTagEnd(paraContent, 'w:ruby', tagEnd);
830
836
  }
837
+ else if (tagName === 'w:sdt') {
838
+ children.push({
839
+ type: 'w:sdt',
840
+ pos: tagStart,
841
+ index: sdtIndex++,
842
+ });
843
+ searchPos = selfClosing ? tagEnd + 1 : findClosingTagEnd(paraContent, 'w:sdt', tagEnd);
844
+ }
831
845
  else {
832
846
  searchPos = tagEnd + 1;
833
847
  }
@@ -908,12 +922,35 @@ class DocumentParser {
908
922
  paragraph.addContent(new PreservedElement_js_1.PreservedElement(runXml, 'w:r', 'inline'));
909
923
  }
910
924
  }
925
+ else if (runObj['mc:AlternateContent']) {
926
+ const runXml = extractRunXmlAtPosition(child.pos);
927
+ if (runXml) {
928
+ paragraph.addContent(new PreservedElement_js_1.PreservedElement(runXml, 'w:r', 'inline'));
929
+ }
930
+ }
911
931
  else if (runObj['w:drawing']) {
932
+ let imageRun = null;
912
933
  if (zipHandler && imageManager) {
913
- const imageRun = await this.parseDrawingFromObject(runObj['w:drawing'], zipHandler, relationshipManager, imageManager);
914
- if (imageRun) {
915
- this.parseRunPropertiesFromObject(runObj['w:rPr'], imageRun);
916
- paragraph.addRun(imageRun);
934
+ imageRun = await this.parseDrawingFromObject(runObj['w:drawing'], zipHandler, relationshipManager, imageManager);
935
+ }
936
+ if (imageRun) {
937
+ this.parseRunPropertiesFromObject(runObj['w:rPr'], imageRun);
938
+ paragraph.addRun(imageRun);
939
+ if (runObj['w:t'] ||
940
+ runObj['w:tab'] ||
941
+ runObj['w:br'] ||
942
+ runObj['w:cr'] ||
943
+ runObj['w:noBreakHyphen']) {
944
+ const siblingRun = this.parseRunFromObject(runObj);
945
+ if (siblingRun) {
946
+ paragraph.addRun(siblingRun);
947
+ }
948
+ }
949
+ }
950
+ else {
951
+ const runXml = extractRunXmlAtPosition(child.pos);
952
+ if (runXml) {
953
+ paragraph.addContent(new PreservedElement_js_1.PreservedElement(runXml, 'w:r', 'inline'));
917
954
  }
918
955
  }
919
956
  }
@@ -1100,6 +1137,12 @@ class DocumentParser {
1100
1137
  paragraph.addContent(new PreservedElement_js_1.PreservedElement(elementXml, child.type, 'inline'));
1101
1138
  }
1102
1139
  }
1140
+ else if (child.type === 'w:sdt') {
1141
+ const sdtXml = extractElementXmlAtPosition(child.pos, 'w:sdt');
1142
+ if (sdtXml) {
1143
+ paragraph.addContent(new PreservedElement_js_1.PreservedElement(sdtXml, 'w:sdt', 'inline'));
1144
+ }
1145
+ }
1103
1146
  }
1104
1147
  }
1105
1148
  async parseRevisionFromXml(revisionXml, tagName, relationshipManager, zipHandler, imageManager) {
@@ -1134,19 +1177,63 @@ class DocumentParser {
1134
1177
  const hyperlinkXmls = XMLParser_js_1.XMLParser.extractElements(revisionXml, 'w:hyperlink');
1135
1178
  let xmlWithoutHyperlinks = revisionXml;
1136
1179
  for (const hyperlinkXml of hyperlinkXmls) {
1137
- xmlWithoutHyperlinks = xmlWithoutHyperlinks.split(hyperlinkXml).join('');
1180
+ xmlWithoutHyperlinks = xmlWithoutHyperlinks
1181
+ .split(hyperlinkXml)
1182
+ .join(' '.repeat(hyperlinkXml.length));
1138
1183
  }
1139
1184
  const runXmls = XMLParser_js_1.XMLParser.extractElements(xmlWithoutHyperlinks, 'w:r');
1140
- const content = [];
1185
+ const orderedChildren = [];
1186
+ let runCursor = 0;
1141
1187
  for (const runXml of runXmls) {
1188
+ const pos = xmlWithoutHyperlinks.indexOf(runXml, runCursor);
1189
+ orderedChildren.push({ pos: pos === -1 ? runCursor : pos, type: 'w:r', xml: runXml });
1190
+ if (pos !== -1) {
1191
+ runCursor = pos + runXml.length;
1192
+ }
1193
+ }
1194
+ let hyperlinkCursor = 0;
1195
+ for (const hyperlinkXml of hyperlinkXmls) {
1196
+ const pos = revisionXml.indexOf(hyperlinkXml, hyperlinkCursor);
1197
+ orderedChildren.push({
1198
+ pos: pos === -1 ? hyperlinkCursor : pos,
1199
+ type: 'w:hyperlink',
1200
+ xml: hyperlinkXml,
1201
+ });
1202
+ if (pos !== -1) {
1203
+ hyperlinkCursor = pos + hyperlinkXml.length;
1204
+ }
1205
+ }
1206
+ orderedChildren.sort((a, b) => a.pos - b.pos);
1207
+ const content = [];
1208
+ for (const child of orderedChildren) {
1209
+ if (child.type === 'w:hyperlink') {
1210
+ const hyperlinkObj = XMLParser_js_1.XMLParser.parseToObject(child.xml, { trimValues: false });
1211
+ const hyperlinkResult = this.parseHyperlinkFromObject(hyperlinkObj['w:hyperlink'], relationshipManager);
1212
+ if (hyperlinkResult.hyperlink) {
1213
+ content.push(hyperlinkResult.hyperlink);
1214
+ }
1215
+ result.bookmarkStarts.push(...hyperlinkResult.bookmarkStarts);
1216
+ result.bookmarkEnds.push(...hyperlinkResult.bookmarkEnds);
1217
+ continue;
1218
+ }
1219
+ const runXml = child.xml;
1142
1220
  const runObj = XMLParser_js_1.XMLParser.parseToObject(runXml, { trimValues: false });
1143
1221
  const runElement = runObj['w:r'];
1144
1222
  if (runElement?.['w:drawing']) {
1223
+ let imageRun = null;
1145
1224
  if (zipHandler && imageManager) {
1146
- const imageRun = await this.parseDrawingFromObject(runElement['w:drawing'], zipHandler, relationshipManager, imageManager);
1147
- if (imageRun) {
1148
- imageRun.setRawRunXml(runXml);
1149
- content.push(imageRun);
1225
+ imageRun = await this.parseDrawingFromObject(runElement['w:drawing'], zipHandler, relationshipManager, imageManager);
1226
+ }
1227
+ if (imageRun) {
1228
+ imageRun.setRawRunXml(runXml);
1229
+ content.push(imageRun);
1230
+ }
1231
+ else {
1232
+ const drawingXmls = XMLParser_js_1.XMLParser.extractElements(runXml, 'w:drawing');
1233
+ if (drawingXmls.length > 0 && drawingXmls[0]) {
1234
+ const run = Run_js_1.Run.createFromContent([{ type: 'vml', rawXml: drawingXmls[0] }]);
1235
+ this.parseRunPropertiesFromObject(runElement['w:rPr'], run);
1236
+ content.push(run);
1150
1237
  }
1151
1238
  }
1152
1239
  }
@@ -1157,15 +1244,6 @@ class DocumentParser {
1157
1244
  }
1158
1245
  }
1159
1246
  }
1160
- for (const hyperlinkXml of hyperlinkXmls) {
1161
- const hyperlinkObj = XMLParser_js_1.XMLParser.parseToObject(hyperlinkXml, { trimValues: false });
1162
- const hyperlinkResult = this.parseHyperlinkFromObject(hyperlinkObj['w:hyperlink'], relationshipManager);
1163
- if (hyperlinkResult.hyperlink) {
1164
- content.push(hyperlinkResult.hyperlink);
1165
- }
1166
- result.bookmarkStarts.push(...hyperlinkResult.bookmarkStarts);
1167
- result.bookmarkEnds.push(...hyperlinkResult.bookmarkEnds);
1168
- }
1169
1247
  const bookmarkStartXmls = XMLParser_js_1.XMLParser.extractElements(xmlWithoutHyperlinks, 'w:bookmarkStart');
1170
1248
  const bookmarkEndXmls = XMLParser_js_1.XMLParser.extractElements(xmlWithoutHyperlinks, 'w:bookmarkEnd');
1171
1249
  for (const bookmarkXml of bookmarkStartXmls) {
@@ -1206,18 +1284,33 @@ class DocumentParser {
1206
1284
  return result;
1207
1285
  }
1208
1286
  }
1209
- parseCommentsXml(commentsXml) {
1287
+ parseCommentsXml(commentsXml, commentsExtendedXml) {
1210
1288
  const comments = [];
1289
+ const doneByParaId = commentsExtendedXml
1290
+ ? this.parseCommentsExtendedDone(commentsExtendedXml)
1291
+ : undefined;
1211
1292
  const commentXmls = XMLParser_js_1.XMLParser.extractElements(commentsXml, 'w:comment');
1212
1293
  for (const commentXml of commentXmls) {
1213
- const comment = this.parseCommentFromXml(commentXml);
1294
+ const comment = this.parseCommentFromXml(commentXml, doneByParaId);
1214
1295
  if (comment) {
1215
1296
  comments.push(comment);
1216
1297
  }
1217
1298
  }
1218
1299
  return comments;
1219
1300
  }
1220
- parseCommentFromXml(commentXml) {
1301
+ parseCommentsExtendedDone(commentsExtendedXml) {
1302
+ const doneByParaId = new Map();
1303
+ for (const commentExXml of XMLParser_js_1.XMLParser.extractElements(commentsExtendedXml, 'w15:commentEx')) {
1304
+ const paraId = XMLParser_js_1.XMLParser.extractAttribute(commentExXml, 'w15:paraId');
1305
+ if (!paraId) {
1306
+ continue;
1307
+ }
1308
+ const done = (0, parsingHelpers_js_1.parseOnOffAttribute)(XMLParser_js_1.XMLParser.extractAttribute(commentExXml, 'w15:done'));
1309
+ doneByParaId.set(paraId.toUpperCase(), done);
1310
+ }
1311
+ return doneByParaId;
1312
+ }
1313
+ parseCommentFromXml(commentXml, doneByParaId) {
1221
1314
  try {
1222
1315
  const idAttr = XMLParser_js_1.XMLParser.extractAttribute(commentXml, 'w:id');
1223
1316
  const author = XMLParser_js_1.XMLParser.extractAttribute(commentXml, 'w:author') || 'Unknown';
@@ -1233,15 +1326,33 @@ class DocumentParser {
1233
1326
  const id = parseInt(idAttr, 10);
1234
1327
  const date = dateAttr ? new Date(dateAttr) : new Date();
1235
1328
  const parentId = parentIdAttr ? parseInt(parentIdAttr, 10) : undefined;
1236
- const done = (0, parsingHelpers_js_1.parseOnOffAttribute)(doneAttr);
1329
+ let done = (0, parsingHelpers_js_1.parseOnOffAttribute)(doneAttr);
1237
1330
  const runs = [];
1238
- const runXmls = XMLParser_js_1.XMLParser.extractElements(commentXml, 'w:r');
1239
- for (const runXml of runXmls) {
1240
- const runObj = XMLParser_js_1.XMLParser.parseToObject(runXml, { trimValues: false });
1241
- const run = this.parseRunFromObject(runObj['w:r']);
1242
- if (run) {
1243
- runs.push(run);
1331
+ const paragraphs = [];
1332
+ const paraXmls = XMLParser_js_1.XMLParser.extractElements(commentXml, 'w:p');
1333
+ const runSources = paraXmls.length > 0 ? paraXmls : [commentXml];
1334
+ if (doneByParaId && paraXmls.length > 0) {
1335
+ const lastParaXml = paraXmls[paraXmls.length - 1];
1336
+ const lastParaId = XMLParser_js_1.XMLParser.extractAttribute(lastParaXml, 'w14:paraId');
1337
+ if (lastParaId) {
1338
+ const extendedDone = doneByParaId.get(lastParaId.toUpperCase());
1339
+ if (extendedDone !== undefined) {
1340
+ done = extendedDone;
1341
+ }
1342
+ }
1343
+ }
1344
+ for (const sourceXml of runSources) {
1345
+ const content = this.parseCommentParagraphContent(sourceXml);
1346
+ for (const item of content) {
1347
+ if (item instanceof Run_js_1.Run) {
1348
+ runs.push(item);
1349
+ }
1350
+ else {
1351
+ runs.push(...item.runs);
1352
+ }
1244
1353
  }
1354
+ const pPr = paraXmls.length > 0 ? XMLParser_js_1.XMLParser.extractElements(sourceXml, 'w:pPr')[0] : undefined;
1355
+ paragraphs.push({ pPr, content });
1245
1356
  }
1246
1357
  const comment = new Comment_js_1.Comment({
1247
1358
  id,
@@ -1252,6 +1363,9 @@ class DocumentParser {
1252
1363
  parentId,
1253
1364
  done,
1254
1365
  });
1366
+ if (paraXmls.length > 0) {
1367
+ comment.setParagraphs(paragraphs);
1368
+ }
1255
1369
  return comment;
1256
1370
  }
1257
1371
  catch (error) {
@@ -1259,18 +1373,59 @@ class DocumentParser {
1259
1373
  return null;
1260
1374
  }
1261
1375
  }
1262
- parseFootnotesXml(footnotesXml) {
1376
+ parseCommentParagraphContent(sourceXml) {
1377
+ const positioned = [];
1378
+ const hyperlinkRanges = [];
1379
+ let hyperlinkCursor = 0;
1380
+ for (const hyperlinkXml of XMLParser_js_1.XMLParser.extractElements(sourceXml, 'w:hyperlink')) {
1381
+ const start = sourceXml.indexOf(hyperlinkXml, hyperlinkCursor);
1382
+ if (start === -1) {
1383
+ continue;
1384
+ }
1385
+ hyperlinkCursor = start + hyperlinkXml.length;
1386
+ hyperlinkRanges.push({ start, end: hyperlinkCursor });
1387
+ const innerRuns = [];
1388
+ for (const runXml of XMLParser_js_1.XMLParser.extractElements(hyperlinkXml, 'w:r')) {
1389
+ const run = this.parseCommentRun(runXml);
1390
+ if (run) {
1391
+ innerRuns.push(run);
1392
+ }
1393
+ }
1394
+ positioned.push({ pos: start, item: { rawXml: hyperlinkXml, runs: innerRuns } });
1395
+ }
1396
+ let runCursor = 0;
1397
+ for (const runXml of XMLParser_js_1.XMLParser.extractElements(sourceXml, 'w:r')) {
1398
+ const start = sourceXml.indexOf(runXml, runCursor);
1399
+ if (start === -1) {
1400
+ continue;
1401
+ }
1402
+ runCursor = start + runXml.length;
1403
+ if (hyperlinkRanges.some((range) => start >= range.start && start < range.end)) {
1404
+ continue;
1405
+ }
1406
+ const run = this.parseCommentRun(runXml);
1407
+ if (run) {
1408
+ positioned.push({ pos: start, item: run });
1409
+ }
1410
+ }
1411
+ return positioned.sort((a, b) => a.pos - b.pos).map((entry) => entry.item);
1412
+ }
1413
+ parseCommentRun(runXml) {
1414
+ const runObj = XMLParser_js_1.XMLParser.parseToObject(runXml, { trimValues: false });
1415
+ return this.parseRunFromObject(runObj['w:r']);
1416
+ }
1417
+ parseFootnotesXml(footnotesXml, partRels) {
1263
1418
  const footnotes = [];
1264
1419
  const footnoteXmls = XMLParser_js_1.XMLParser.extractElements(footnotesXml, 'w:footnote');
1265
1420
  for (const footnoteXml of footnoteXmls) {
1266
- const footnote = this.parseFootnoteFromXml(footnoteXml);
1421
+ const footnote = this.parseFootnoteFromXml(footnoteXml, partRels);
1267
1422
  if (footnote) {
1268
1423
  footnotes.push(footnote);
1269
1424
  }
1270
1425
  }
1271
1426
  return footnotes;
1272
1427
  }
1273
- parseFootnoteFromXml(footnoteXml) {
1428
+ parseFootnoteFromXml(footnoteXml, partRels) {
1274
1429
  try {
1275
1430
  const idAttr = XMLParser_js_1.XMLParser.extractAttribute(footnoteXml, 'w:id');
1276
1431
  const typeAttr = XMLParser_js_1.XMLParser.extractAttribute(footnoteXml, 'w:type');
@@ -1291,7 +1446,7 @@ class DocumentParser {
1291
1446
  const footnote = new Footnote_js_1.Footnote({ id, type });
1292
1447
  const paraXmls = XMLParser_js_1.XMLParser.extractElements(footnoteXml, 'w:p');
1293
1448
  for (const paraXml of paraXmls) {
1294
- const para = this.parseNoteParaFromXml(paraXml);
1449
+ const para = this.parseNoteParaFromXml(paraXml, partRels);
1295
1450
  if (para) {
1296
1451
  footnote.addParagraph(para);
1297
1452
  }
@@ -1303,18 +1458,18 @@ class DocumentParser {
1303
1458
  return null;
1304
1459
  }
1305
1460
  }
1306
- parseEndnotesXml(endnotesXml) {
1461
+ parseEndnotesXml(endnotesXml, partRels) {
1307
1462
  const endnotes = [];
1308
1463
  const endnoteXmls = XMLParser_js_1.XMLParser.extractElements(endnotesXml, 'w:endnote');
1309
1464
  for (const endnoteXml of endnoteXmls) {
1310
- const endnote = this.parseEndnoteFromXml(endnoteXml);
1465
+ const endnote = this.parseEndnoteFromXml(endnoteXml, partRels);
1311
1466
  if (endnote) {
1312
1467
  endnotes.push(endnote);
1313
1468
  }
1314
1469
  }
1315
1470
  return endnotes;
1316
1471
  }
1317
- parseEndnoteFromXml(endnoteXml) {
1472
+ parseEndnoteFromXml(endnoteXml, partRels) {
1318
1473
  try {
1319
1474
  const idAttr = XMLParser_js_1.XMLParser.extractAttribute(endnoteXml, 'w:id');
1320
1475
  const typeAttr = XMLParser_js_1.XMLParser.extractAttribute(endnoteXml, 'w:type');
@@ -1335,7 +1490,7 @@ class DocumentParser {
1335
1490
  const endnote = new Endnote_js_1.Endnote({ id, type });
1336
1491
  const paraXmls = XMLParser_js_1.XMLParser.extractElements(endnoteXml, 'w:p');
1337
1492
  for (const paraXml of paraXmls) {
1338
- const para = this.parseNoteParaFromXml(paraXml);
1493
+ const para = this.parseNoteParaFromXml(paraXml, partRels);
1339
1494
  if (para) {
1340
1495
  endnote.addParagraph(para);
1341
1496
  }
@@ -1347,15 +1502,60 @@ class DocumentParser {
1347
1502
  return null;
1348
1503
  }
1349
1504
  }
1350
- parseNoteParaFromXml(paraXml) {
1505
+ parseNoteParaFromXml(paraXml, partRels) {
1351
1506
  try {
1352
1507
  const para = new Paragraph_js_1.Paragraph();
1353
- const runXmls = XMLParser_js_1.XMLParser.extractElements(paraXml, 'w:r');
1354
- for (const runXml of runXmls) {
1355
- const runObj = XMLParser_js_1.XMLParser.parseToObject(runXml, { trimValues: false });
1356
- const run = this.parseRunFromObject(runObj['w:r']);
1357
- if (run) {
1358
- para.addRun(run);
1508
+ const paraObj = XMLParser_js_1.XMLParser.parseToObject(paraXml, { trimValues: false });
1509
+ const pElement = paraObj['w:p'];
1510
+ if (pElement?.['w:pPr']) {
1511
+ this.parseParagraphPropertiesFromObject(pElement['w:pPr'], para);
1512
+ }
1513
+ const pPrEnd = paraXml.indexOf('</w:pPr>');
1514
+ const contentStart = pPrEnd !== -1 ? pPrEnd + '</w:pPr>'.length : paraXml.indexOf('>') + 1;
1515
+ const contentEnd = paraXml.lastIndexOf('</w:p>');
1516
+ if (contentEnd <= contentStart) {
1517
+ return para;
1518
+ }
1519
+ const content = paraXml.substring(contentStart, contentEnd);
1520
+ let searchPos = 0;
1521
+ while (searchPos < content.length) {
1522
+ const tagStart = content.indexOf('<', searchPos);
1523
+ if (tagStart === -1)
1524
+ break;
1525
+ const tagEnd = content.indexOf('>', tagStart);
1526
+ if (tagEnd === -1)
1527
+ break;
1528
+ const tagBody = content.substring(tagStart + 1, tagEnd);
1529
+ const tagName = tagBody.split(/[\s/>]/)[0];
1530
+ const selfClosing = tagBody.endsWith('/');
1531
+ if ((tagName === 'w:r' || tagName === 'w:hyperlink') && !selfClosing) {
1532
+ const closingTag = `</${tagName}>`;
1533
+ const closingPos = content.indexOf(closingTag, tagEnd);
1534
+ const childEnd = closingPos === -1 ? tagEnd + 1 : closingPos + closingTag.length;
1535
+ const childXml = content.substring(tagStart, childEnd);
1536
+ const childObj = XMLParser_js_1.XMLParser.parseToObject(childXml, { trimValues: false });
1537
+ if (tagName === 'w:r') {
1538
+ const run = this.parseRunFromObject(childObj['w:r']);
1539
+ if (run) {
1540
+ para.addRun(run);
1541
+ }
1542
+ }
1543
+ else {
1544
+ const result = this.parseHyperlinkFromObject(childObj['w:hyperlink'], partRels ?? RelationshipManager_js_1.RelationshipManager.create());
1545
+ if (result.hyperlink) {
1546
+ para.addHyperlink(result.hyperlink);
1547
+ }
1548
+ for (const bookmark of result.bookmarkStarts) {
1549
+ para.addBookmarkStart(bookmark);
1550
+ }
1551
+ for (const bookmark of result.bookmarkEnds) {
1552
+ para.addBookmarkEnd(bookmark);
1553
+ }
1554
+ }
1555
+ searchPos = childEnd;
1556
+ }
1557
+ else {
1558
+ searchPos = tagEnd + 1;
1359
1559
  }
1360
1560
  }
1361
1561
  return para;
@@ -1453,11 +1653,28 @@ class DocumentParser {
1453
1653
  if (elementIndex < runArray.length) {
1454
1654
  const child = runArray[elementIndex];
1455
1655
  if (child['w:drawing']) {
1656
+ let imageRun = null;
1456
1657
  if (zipHandler && imageManager) {
1457
- const imageRun = await this.parseDrawingFromObject(child['w:drawing'], zipHandler, relationshipManager, imageManager);
1458
- if (imageRun) {
1459
- this.parseRunPropertiesFromObject(child['w:rPr'], imageRun);
1460
- paragraph.addRun(imageRun);
1658
+ imageRun = await this.parseDrawingFromObject(child['w:drawing'], zipHandler, relationshipManager, imageManager);
1659
+ }
1660
+ if (imageRun) {
1661
+ this.parseRunPropertiesFromObject(child['w:rPr'], imageRun);
1662
+ paragraph.addRun(imageRun);
1663
+ if (child['w:t'] ||
1664
+ child['w:tab'] ||
1665
+ child['w:br'] ||
1666
+ child['w:cr'] ||
1667
+ child['w:noBreakHyphen']) {
1668
+ const siblingRun = this.parseRunFromObject(child);
1669
+ if (siblingRun) {
1670
+ paragraph.addRun(siblingRun);
1671
+ }
1672
+ }
1673
+ }
1674
+ else {
1675
+ const runXml = this.objectToXml({ 'w:r': child });
1676
+ if (runXml) {
1677
+ paragraph.addContent(new PreservedElement_js_1.PreservedElement(runXml, 'w:r', 'inline'));
1461
1678
  }
1462
1679
  }
1463
1680
  }
@@ -1506,11 +1723,28 @@ class DocumentParser {
1506
1723
  const runChildren = Array.isArray(runs) ? runs : runs ? [runs] : [];
1507
1724
  for (const child of runChildren) {
1508
1725
  if (child['w:drawing']) {
1726
+ let imageRun = null;
1509
1727
  if (zipHandler && imageManager) {
1510
- const imageRun = await this.parseDrawingFromObject(child['w:drawing'], zipHandler, relationshipManager, imageManager);
1511
- if (imageRun) {
1512
- this.parseRunPropertiesFromObject(child['w:rPr'], imageRun);
1513
- paragraph.addRun(imageRun);
1728
+ imageRun = await this.parseDrawingFromObject(child['w:drawing'], zipHandler, relationshipManager, imageManager);
1729
+ }
1730
+ if (imageRun) {
1731
+ this.parseRunPropertiesFromObject(child['w:rPr'], imageRun);
1732
+ paragraph.addRun(imageRun);
1733
+ if (child['w:t'] ||
1734
+ child['w:tab'] ||
1735
+ child['w:br'] ||
1736
+ child['w:cr'] ||
1737
+ child['w:noBreakHyphen']) {
1738
+ const siblingRun = this.parseRunFromObject(child);
1739
+ if (siblingRun) {
1740
+ paragraph.addRun(siblingRun);
1741
+ }
1742
+ }
1743
+ }
1744
+ else {
1745
+ const runXml = this.objectToXml({ 'w:r': child });
1746
+ if (runXml) {
1747
+ paragraph.addContent(new PreservedElement_js_1.PreservedElement(runXml, 'w:r', 'inline'));
1514
1748
  }
1515
1749
  }
1516
1750
  }
@@ -2935,9 +3169,9 @@ class DocumentParser {
2935
3169
  return '';
2936
3170
  }
2937
3171
  if (typeof node === 'object') {
2938
- return XMLBuilder_js_1.XMLBuilder.unescapeXml(node['#text'] || '');
3172
+ return node['#text'] != null ? String(node['#text']) : '';
2939
3173
  }
2940
- return XMLBuilder_js_1.XMLBuilder.unescapeXml(String(node));
3174
+ return String(node);
2941
3175
  };
2942
3176
  const parseBooleanAttr = (value) => {
2943
3177
  if (value === undefined || value === null) {
@@ -3540,13 +3774,18 @@ class DocumentParser {
3540
3774
  anchor: finalAnchor,
3541
3775
  text: displayText,
3542
3776
  formatting,
3777
+ preserveFormatting: true,
3543
3778
  tooltip,
3544
3779
  relationshipId: finalRelationshipId,
3545
3780
  tgtFrame,
3546
3781
  history,
3547
3782
  docLocation,
3548
3783
  });
3549
- if (parsedRun && parsedRun.getContent().length > 1) {
3784
+ if (parsedRuns.length > 1 && (text || parsedRuns.some((r) => r.getContent().length > 1))) {
3785
+ hyperlink.setRuns(parsedRuns);
3786
+ }
3787
+ else if (parsedRun &&
3788
+ ((parsedRuns.length === 1 && text) || parsedRun.getContent().length > 1)) {
3550
3789
  hyperlink.setRun(parsedRun);
3551
3790
  }
3552
3791
  result.hyperlink = hyperlink;
@@ -3700,6 +3939,26 @@ class DocumentParser {
3700
3939
  fldLock,
3701
3940
  dirty,
3702
3941
  });
3942
+ const resultRuns = fieldObj['w:r'];
3943
+ const resultRunArray = Array.isArray(resultRuns)
3944
+ ? resultRuns
3945
+ : resultRuns
3946
+ ? [resultRuns]
3947
+ : [];
3948
+ const cachedRuns = [];
3949
+ for (const runObj of resultRunArray) {
3950
+ const run = this.parseRunFromObject(runObj);
3951
+ if (run) {
3952
+ const runFormatting = run.getFormatting();
3953
+ cachedRuns.push({
3954
+ text: run.getText(),
3955
+ formatting: Object.keys(runFormatting).length > 0 ? runFormatting : undefined,
3956
+ });
3957
+ }
3958
+ }
3959
+ if (cachedRuns.length > 0) {
3960
+ field.setCachedResultRuns(cachedRuns);
3961
+ }
3703
3962
  return field;
3704
3963
  }
3705
3964
  catch (error) {
@@ -3886,7 +4145,7 @@ class DocumentParser {
3886
4145
  if (rPrObj['w:rFonts']) {
3887
4146
  const rFonts = rPrObj['w:rFonts'];
3888
4147
  if (rFonts['@_w:ascii'] !== undefined)
3889
- run.setFont(String(rFonts['@_w:ascii']));
4148
+ run.setFontAscii(String(rFonts['@_w:ascii']));
3890
4149
  if (rFonts['@_w:hAnsi'] !== undefined)
3891
4150
  run.setFontHAnsi(String(rFonts['@_w:hAnsi']));
3892
4151
  if (rFonts['@_w:eastAsia'] !== undefined)
@@ -4661,8 +4920,9 @@ class DocumentParser {
4661
4920
  'wp:cNvGraphicFramePr',
4662
4921
  'a:graphic',
4663
4922
  ]);
4664
- if (anchorExtras)
4665
- image._setRawPassthrough('anchor-extra', anchorExtras);
4923
+ if (anchorExtras) {
4924
+ image._setRawPassthrough('anchor-extra', (0, xmlSanitization_js_1.normalizeAnchorSizeRel)(anchorExtras));
4925
+ }
4666
4926
  }
4667
4927
  if (docPrObj) {
4668
4928
  const docPrExtras = this.collectUnmodeledChildren(docPrObj, []);
@@ -4711,7 +4971,9 @@ class DocumentParser {
4711
4971
  type = 'none';
4712
4972
  return {
4713
4973
  type,
4714
- side: wrapObj['@_wrapText'] || 'bothSides',
4974
+ side: type === 'none' || type === 'topAndBottom'
4975
+ ? wrapObj['@_wrapText']
4976
+ : wrapObj['@_wrapText'] || 'bothSides',
4715
4977
  distanceTop: wrapObj['@_distT'] ? parseInt(wrapObj['@_distT'], 10) : undefined,
4716
4978
  distanceBottom: wrapObj['@_distB'] ? parseInt(wrapObj['@_distB'], 10) : undefined,
4717
4979
  distanceLeft: wrapObj['@_distL'] ? parseInt(wrapObj['@_distL'], 10) : undefined,
@@ -5699,7 +5961,7 @@ class DocumentParser {
5699
5961
  }
5700
5962
  return depth === 0 ? pos : -1;
5701
5963
  }
5702
- async parseSDTFromObject(sdtObj, relationshipManager, zipHandler, imageManager) {
5964
+ async parseSDTFromObject(sdtObj, relationshipManager, zipHandler, imageManager, rawSdtXml) {
5703
5965
  try {
5704
5966
  if (!sdtObj)
5705
5967
  return null;
@@ -5760,10 +6022,14 @@ class DocumentParser {
5760
6022
  else if (sdtPr['w14:checkbox']) {
5761
6023
  properties.controlType = 'checkbox';
5762
6024
  const checkboxElement = sdtPr['w14:checkbox'];
6025
+ const rawCheckedFont = checkboxElement?.['w14:checkedState']?.['@_w14:font'];
6026
+ const rawUncheckedFont = checkboxElement?.['w14:uncheckedState']?.['@_w14:font'];
5763
6027
  properties.checkbox = {
5764
6028
  checked: (0, parsingHelpers_js_1.parseOoxmlBoolean)(checkboxElement?.['w14:checked'], '@_w14:val'),
5765
6029
  checkedState: String(checkboxElement?.['w14:checkedState']?.['@_w14:val'] ?? ''),
5766
6030
  uncheckedState: String(checkboxElement?.['w14:uncheckedState']?.['@_w14:val'] ?? ''),
6031
+ checkedFont: rawCheckedFont === undefined ? undefined : String(rawCheckedFont),
6032
+ uncheckedFont: rawUncheckedFont === undefined ? undefined : String(rawUncheckedFont),
5767
6033
  };
5768
6034
  }
5769
6035
  else if (sdtPr['w:picture']) {
@@ -5818,6 +6084,32 @@ class DocumentParser {
5818
6084
  properties.showingPlcHdr = (0, parsingHelpers_js_1.parseOoxmlBoolean)(showingPlcHdr);
5819
6085
  }
5820
6086
  }
6087
+ let rawSdtPrXml;
6088
+ if (sdtPr !== undefined) {
6089
+ if (rawSdtXml) {
6090
+ const prPos = rawSdtXml.indexOf('<w:sdtPr');
6091
+ if (prPos !== -1) {
6092
+ rawSdtPrXml = this.extractSingleElement(rawSdtXml, 'w:sdtPr', prPos) || undefined;
6093
+ }
6094
+ }
6095
+ if (rawSdtPrXml === undefined) {
6096
+ rawSdtPrXml = this.objectToXml({ 'w:sdtPr': sdtPr }) || undefined;
6097
+ }
6098
+ }
6099
+ let rawSdtEndPrXml;
6100
+ const sdtEndPr = sdtObj['w:sdtEndPr'];
6101
+ if (sdtEndPr !== undefined) {
6102
+ if (rawSdtXml) {
6103
+ const endPrPos = rawSdtXml.indexOf('<w:sdtEndPr');
6104
+ if (endPrPos !== -1) {
6105
+ rawSdtEndPrXml =
6106
+ this.extractSingleElement(rawSdtXml, 'w:sdtEndPr', endPrPos) || undefined;
6107
+ }
6108
+ }
6109
+ if (rawSdtEndPrXml === undefined) {
6110
+ rawSdtEndPrXml = this.objectToXml({ 'w:sdtEndPr': sdtEndPr }) || undefined;
6111
+ }
6112
+ }
5821
6113
  const content = [];
5822
6114
  const sdtContent = sdtObj['w:sdtContent'];
5823
6115
  if (sdtContent) {
@@ -5861,6 +6153,19 @@ class DocumentParser {
5861
6153
  content.push(nestedSdt);
5862
6154
  }
5863
6155
  }
6156
+ else if (!elementType.startsWith('@_') && elementType !== '#text') {
6157
+ const others = sdtContent[elementType];
6158
+ const otherArray = Array.isArray(others)
6159
+ ? others
6160
+ : others !== undefined
6161
+ ? [others]
6162
+ : [];
6163
+ if (elementIndex < otherArray.length) {
6164
+ const rawXml = this.objectToXml({ [elementType]: otherArray[elementIndex] });
6165
+ if (rawXml)
6166
+ content.push(new PreservedElement_js_1.PreservedElement(rawXml, elementType, 'block'));
6167
+ }
6168
+ }
5864
6169
  }
5865
6170
  }
5866
6171
  else {
@@ -5886,6 +6191,27 @@ class DocumentParser {
5886
6191
  if (nestedSdt)
5887
6192
  content.push(nestedSdt);
5888
6193
  }
6194
+ for (const key of Object.keys(sdtContent)) {
6195
+ if (key === 'w:p' ||
6196
+ key === 'w:tbl' ||
6197
+ key === 'w:sdt' ||
6198
+ key === '#text' ||
6199
+ key === '_orderedChildren' ||
6200
+ key.startsWith('@_')) {
6201
+ continue;
6202
+ }
6203
+ const others = sdtContent[key];
6204
+ const otherArray = Array.isArray(others)
6205
+ ? others
6206
+ : others !== undefined
6207
+ ? [others]
6208
+ : [];
6209
+ for (const otherObj of otherArray) {
6210
+ const rawXml = this.objectToXml({ [key]: otherObj });
6211
+ if (rawXml)
6212
+ content.push(new PreservedElement_js_1.PreservedElement(rawXml, key, 'block'));
6213
+ }
6214
+ }
5889
6215
  }
5890
6216
  }
5891
6217
  if (properties.buildingBlock?.gallery === 'Table of Contents') {
@@ -5894,7 +6220,12 @@ class DocumentParser {
5894
6220
  return new TableOfContentsElement_js_1.TableOfContentsElement(toc);
5895
6221
  }
5896
6222
  }
5897
- return new StructuredDocumentTag_js_1.StructuredDocumentTag(properties, content);
6223
+ const sdt = new StructuredDocumentTag_js_1.StructuredDocumentTag(properties, content);
6224
+ if (rawSdtPrXml !== undefined)
6225
+ sdt._setRawSdtPrXml(rawSdtPrXml);
6226
+ if (rawSdtEndPrXml !== undefined)
6227
+ sdt._setRawSdtEndPrXml(rawSdtEndPrXml);
6228
+ return sdt;
5898
6229
  }
5899
6230
  catch (error) {
5900
6231
  logger_js_1.defaultLogger.warn('[DocumentParser] Failed to parse SDT:', error instanceof Error
@@ -6153,10 +6484,10 @@ class DocumentParser {
6153
6484
  }
6154
6485
  objectToXml(obj) {
6155
6486
  const buildXml = (o, name) => {
6156
- if (typeof o === 'string')
6157
- return o;
6158
- if (typeof o !== 'object')
6159
- return String(o);
6487
+ if (typeof o !== 'object' || o === null) {
6488
+ const text = String(o ?? '');
6489
+ return name ? `<${name}>${text}</${name}>` : text;
6490
+ }
6160
6491
  const keys = Object.keys(o);
6161
6492
  if (keys.length === 0 && !name)
6162
6493
  return '';
@@ -6427,6 +6758,8 @@ class DocumentParser {
6427
6758
  return null;
6428
6759
  }
6429
6760
  }
6761
+ const sectPrWithChange = sectPr;
6762
+ sectPr = sectPr.replace(/<w:sectPrChange[\s\S]*?<\/w:sectPrChange>/, '');
6430
6763
  const sectionProps = {};
6431
6764
  const pgSzElements = XMLParser_js_1.XMLParser.extractElements(sectPr, 'w:pgSz');
6432
6765
  if (pgSzElements.length > 0) {
@@ -6788,7 +7121,7 @@ class DocumentParser {
6788
7121
  }
6789
7122
  }
6790
7123
  const section = new Section_js_1.Section(sectionProps);
6791
- const sectPrChangeElements = XMLParser_js_1.XMLParser.extractElements(sectPr, 'w:sectPrChange');
7124
+ const sectPrChangeElements = XMLParser_js_1.XMLParser.extractElements(sectPrWithChange, 'w:sectPrChange');
6792
7125
  if (sectPrChangeElements.length > 0 && sectPrChangeElements[0]) {
6793
7126
  const changeXml = sectPrChangeElements[0];
6794
7127
  const id = XMLParser_js_1.XMLParser.extractAttribute(changeXml, 'w:id') || '0';
@@ -6835,17 +7168,20 @@ class DocumentParser {
6835
7168
  }
6836
7169
  }
6837
7170
  }
6838
- const basedOnElement = XMLParser_js_1.XMLParser.extractBetweenTags(styleXml, '<w:basedOn', '</w:basedOn>');
6839
- const basedOn = basedOnElement
6840
- ? XMLParser_js_1.XMLParser.extractAttribute(`<w:basedOn${basedOnElement}`, 'w:val')
6841
- : undefined;
6842
- const nextElement = XMLParser_js_1.XMLParser.extractBetweenTags(styleXml, '<w:next', '</w:next>');
6843
- const next = nextElement
6844
- ? XMLParser_js_1.XMLParser.extractAttribute(`<w:next${nextElement}`, 'w:val')
6845
- : undefined;
7171
+ let basedOn;
7172
+ const basedOnAttrs = XMLParser_js_1.XMLParser.extractSelfClosingTag(styleXml, 'w:basedOn');
7173
+ if (basedOnAttrs) {
7174
+ basedOn = XMLParser_js_1.XMLParser.extractAttribute(`<w:basedOn${basedOnAttrs}/>`, 'w:val');
7175
+ }
7176
+ let next;
7177
+ const nextAttrs = XMLParser_js_1.XMLParser.extractSelfClosingTag(styleXml, 'w:next');
7178
+ if (nextAttrs) {
7179
+ next = XMLParser_js_1.XMLParser.extractAttribute(`<w:next${nextAttrs}/>`, 'w:val');
7180
+ }
7181
+ const styleBase = styleXml.replace(/<w:tblStylePr[\s\S]*?<\/w:tblStylePr>/g, '');
6846
7182
  let paragraphFormatting;
6847
7183
  let styleNumPr;
6848
- const pPrXml = XMLParser_js_1.XMLParser.extractBetweenTags(styleXml, '<w:pPr>', '</w:pPr>');
7184
+ const pPrXml = XMLParser_js_1.XMLParser.extractBetweenTags(styleBase, '<w:pPr>', '</w:pPr>');
6849
7185
  if (pPrXml) {
6850
7186
  paragraphFormatting = this.parseParagraphFormattingFromXml(pPrXml);
6851
7187
  const numPrXml = XMLParser_js_1.XMLParser.extractBetweenTags(pPrXml, '<w:numPr>', '</w:numPr>');
@@ -6862,7 +7198,7 @@ class DocumentParser {
6862
7198
  }
6863
7199
  }
6864
7200
  let runFormatting;
6865
- const rPrXml = XMLParser_js_1.XMLParser.extractBetweenTags(styleXml, '<w:rPr>', '</w:rPr>');
7201
+ const rPrXml = XMLParser_js_1.XMLParser.extractBetweenTags(styleBase, '<w:rPr>', '</w:rPr>');
6866
7202
  if (rPrXml) {
6867
7203
  runFormatting = this.parseRunFormattingFromXml(rPrXml);
6868
7204
  }
@@ -8065,11 +8401,21 @@ class DocumentParser {
8065
8401
  return namespaces;
8066
8402
  }
8067
8403
  parseDocumentBackground(docXml) {
8068
- const bgMatch = /<w:background([^>]*?)\/>/.exec(docXml);
8069
- if (!bgMatch?.[1])
8404
+ const bgMatch = /<w:background([^>]*?)(\/>|>)/.exec(docXml);
8405
+ if (!bgMatch)
8070
8406
  return undefined;
8071
- const attrStr = bgMatch[1];
8407
+ const attrStr = bgMatch[1] ?? '';
8072
8408
  const result = {};
8409
+ if (bgMatch[2] === '>') {
8410
+ const innerStart = bgMatch.index + bgMatch[0].length;
8411
+ const closeIndex = docXml.indexOf('</w:background>', innerStart);
8412
+ if (closeIndex !== -1) {
8413
+ const inner = docXml.substring(innerStart, closeIndex);
8414
+ if (inner.length > 0) {
8415
+ result.rawInnerXml = inner;
8416
+ }
8417
+ }
8418
+ }
8073
8419
  const colorMatch = /w:color="([^"]+)"/.exec(attrStr);
8074
8420
  if (colorMatch?.[1])
8075
8421
  result.color = colorMatch[1];