@cj-tech-master/excelts 9.5.4 → 9.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (767) hide show
  1. package/dist/browser/modules/archive/compression/streaming-compress.browser.js +29 -0
  2. package/dist/browser/modules/archive/compression/streaming-compress.js +9 -0
  3. package/dist/browser/modules/archive/compression/worker-pool/pool.browser.js +26 -1
  4. package/dist/browser/modules/archive/fs/archive-file.d.ts +8 -5
  5. package/dist/browser/modules/archive/fs/archive-file.js +78 -16
  6. package/dist/browser/modules/archive/unzip/stream.browser.js +43 -2
  7. package/dist/browser/modules/excel/chart/chart-ex-builder.js +7 -2
  8. package/dist/browser/modules/excel/chart/chart-ex-renderer.js +4 -9
  9. package/dist/browser/modules/excel/chart/chart-ex-types.d.ts +0 -12
  10. package/dist/browser/modules/excel/chart/chart.d.ts +1 -5
  11. package/dist/browser/modules/excel/chart/chart.js +1 -7
  12. package/dist/browser/modules/excel/chart/types.d.ts +0 -6
  13. package/dist/browser/modules/excel/stream/workbook-reader.browser.js +25 -1
  14. package/dist/browser/modules/excel/stream/workbook-reader.js +9 -0
  15. package/dist/browser/modules/excel/stream/workbook-writer.browser.d.ts +40 -0
  16. package/dist/browser/modules/excel/stream/workbook-writer.browser.js +228 -13
  17. package/dist/browser/modules/excel/utils/string-buf.d.ts +5 -26
  18. package/dist/browser/modules/excel/utils/string-buf.js +4 -81
  19. package/dist/browser/modules/excel/workbook.browser.js +135 -25
  20. package/dist/browser/modules/excel/xlsx/xform/chart/chart-space-xform.js +6 -20
  21. package/dist/browser/modules/excel/xlsx/xlsx.browser.d.ts +19 -9
  22. package/dist/browser/modules/excel/xlsx/xlsx.browser.js +32 -8
  23. package/dist/browser/modules/excel/xlsx/xlsx.d.ts +10 -2
  24. package/dist/browser/modules/excel/xlsx/xlsx.js +9 -1
  25. package/dist/browser/modules/pdf/excel-bridge.d.ts +30 -1
  26. package/dist/browser/modules/pdf/excel-bridge.js +32 -0
  27. package/dist/browser/modules/pdf/font/metrics.d.ts +3 -52
  28. package/dist/browser/modules/pdf/font/metrics.js +3 -237
  29. package/dist/browser/modules/pdf/index.d.ts +1 -1
  30. package/dist/browser/modules/pdf/index.js +1 -1
  31. package/dist/browser/modules/pdf/render-layout-to-pdf.d.ts +66 -0
  32. package/dist/browser/modules/pdf/render-layout-to-pdf.js +647 -0
  33. package/dist/browser/modules/pdf/word-bridge.d.ts +80 -12
  34. package/dist/browser/modules/pdf/word-bridge.js +122 -274
  35. package/dist/browser/modules/stream/index.base.d.ts +2 -0
  36. package/dist/browser/modules/stream/index.base.js +2 -1
  37. package/dist/browser/modules/stream/internal/sink-adapter.d.ts +65 -0
  38. package/dist/browser/modules/stream/internal/sink-adapter.js +198 -0
  39. package/dist/browser/modules/stream/pull-stream.d.ts +19 -2
  40. package/dist/browser/modules/stream/pull-stream.js +51 -5
  41. package/dist/browser/modules/stream/types.d.ts +13 -1
  42. package/dist/browser/modules/word/advanced/diff.d.ts +61 -0
  43. package/dist/browser/modules/word/advanced/diff.js +167 -0
  44. package/dist/browser/modules/word/advanced/drawing-shapes.d.ts +269 -0
  45. package/dist/browser/modules/word/advanced/drawing-shapes.js +268 -0
  46. package/dist/browser/modules/word/advanced/field-engine.d.ts +43 -0
  47. package/dist/browser/modules/word/advanced/field-engine.js +1225 -0
  48. package/dist/browser/modules/word/advanced/glossary.d.ts +86 -0
  49. package/dist/browser/modules/word/advanced/glossary.js +79 -0
  50. package/dist/browser/modules/word/advanced/math-convert.d.ts +30 -0
  51. package/dist/browser/modules/word/advanced/math-convert.js +595 -0
  52. package/dist/browser/modules/word/advanced/ole-objects.d.ts +115 -0
  53. package/dist/browser/modules/word/advanced/ole-objects.js +271 -0
  54. package/dist/browser/modules/word/advanced/style-map.d.ts +105 -0
  55. package/dist/browser/modules/word/advanced/style-map.js +322 -0
  56. package/dist/browser/modules/word/advanced/validation.d.ts +56 -0
  57. package/dist/browser/modules/word/advanced/validation.js +1065 -0
  58. package/dist/browser/modules/word/advanced/vba-project.d.ts +91 -0
  59. package/dist/browser/modules/word/advanced/vba-project.js +265 -0
  60. package/dist/browser/modules/word/bridge/excel-bridge.d.ts +127 -0
  61. package/dist/browser/modules/word/bridge/excel-bridge.js +980 -0
  62. package/dist/browser/modules/word/builder/document-handle.d.ts +151 -0
  63. package/dist/browser/modules/word/builder/document-handle.js +664 -0
  64. package/dist/browser/modules/word/builder/paragraph-builders.d.ts +61 -0
  65. package/dist/browser/modules/word/builder/paragraph-builders.js +90 -0
  66. package/dist/browser/modules/word/builder/run-builders.d.ts +374 -0
  67. package/dist/browser/modules/word/builder/run-builders.js +600 -0
  68. package/dist/browser/modules/word/builder/table-builders.d.ts +23 -0
  69. package/dist/browser/modules/word/builder/table-builders.js +45 -0
  70. package/dist/browser/modules/word/constants.d.ts +39 -1
  71. package/dist/browser/modules/word/constants.js +109 -1
  72. package/dist/browser/modules/word/convert/conversion-ir.d.ts +210 -0
  73. package/dist/browser/modules/word/convert/conversion-ir.js +31 -0
  74. package/dist/browser/modules/word/convert/docx-to-semantic.d.ts +39 -0
  75. package/dist/browser/modules/word/convert/docx-to-semantic.js +499 -0
  76. package/dist/browser/modules/word/convert/flat-opc.d.ts +44 -0
  77. package/dist/browser/modules/word/convert/flat-opc.js +385 -0
  78. package/dist/browser/modules/word/convert/html/html-import.d.ts +50 -0
  79. package/dist/browser/modules/word/convert/html/html-import.js +1907 -0
  80. package/dist/{types/modules/word → browser/modules/word/convert/html}/html-renderer.d.ts +14 -1
  81. package/dist/{esm/modules/word → browser/modules/word/convert/html}/html-renderer.js +420 -69
  82. package/dist/browser/modules/word/convert/html/html.d.ts +15 -0
  83. package/dist/browser/modules/word/convert/html/html.js +15 -0
  84. package/dist/browser/modules/word/convert/markdown/markdown-import.d.ts +68 -0
  85. package/dist/browser/modules/word/convert/markdown/markdown-import.js +1325 -0
  86. package/dist/browser/modules/word/convert/markdown/markdown-renderer.d.ts +25 -0
  87. package/dist/browser/modules/word/convert/markdown/markdown-renderer.js +634 -0
  88. package/dist/browser/modules/word/convert/markdown/markdown.d.ts +15 -0
  89. package/dist/browser/modules/word/convert/markdown/markdown.js +15 -0
  90. package/dist/browser/modules/word/convert/odt/odt.d.ts +41 -0
  91. package/dist/browser/modules/word/convert/odt/odt.js +1932 -0
  92. package/dist/browser/modules/word/{color-utils.d.ts → core/color-utils.d.ts} +8 -1
  93. package/dist/browser/modules/word/core/color-utils.js +43 -0
  94. package/dist/browser/modules/word/core/internal-utils.d.ts +90 -0
  95. package/dist/browser/modules/word/core/internal-utils.js +209 -0
  96. package/dist/browser/modules/word/core/mapper.d.ts +44 -0
  97. package/dist/browser/modules/word/core/mapper.js +427 -0
  98. package/dist/browser/modules/word/core/opc-paths.d.ts +33 -0
  99. package/dist/browser/modules/word/core/opc-paths.js +48 -0
  100. package/dist/browser/modules/word/core/text-utils.d.ts +38 -0
  101. package/dist/browser/modules/word/core/text-utils.js +202 -0
  102. package/dist/browser/modules/word/core/walker.d.ts +119 -0
  103. package/dist/browser/modules/word/core/walker.js +570 -0
  104. package/dist/browser/modules/word/crypto.d.ts +14 -9
  105. package/dist/browser/modules/word/crypto.js +13 -7
  106. package/dist/browser/modules/word/document-io.d.ts +59 -27
  107. package/dist/browser/modules/word/document-io.js +80 -197
  108. package/dist/browser/modules/word/errors.d.ts +44 -1
  109. package/dist/browser/modules/word/errors.js +54 -2
  110. package/dist/browser/modules/word/excel.d.ts +14 -0
  111. package/dist/browser/modules/word/excel.js +13 -0
  112. package/dist/browser/modules/word/font/font-embed.d.ts +112 -0
  113. package/dist/browser/modules/word/font/font-embed.js +646 -0
  114. package/dist/{esm/modules/word → browser/modules/word/font}/font-obfuscation.js +4 -9
  115. package/dist/browser/modules/word/font/hyphenation.d.ts +65 -0
  116. package/dist/browser/modules/word/font/hyphenation.js +4210 -0
  117. package/dist/browser/modules/word/font/text-shaping.d.ts +58 -0
  118. package/dist/browser/modules/word/font/text-shaping.js +635 -0
  119. package/dist/browser/modules/word/html.d.ts +7 -6
  120. package/dist/browser/modules/word/html.js +6 -5
  121. package/dist/browser/modules/word/incremental-edit.d.ts +123 -0
  122. package/dist/browser/modules/word/incremental-edit.js +361 -0
  123. package/dist/browser/modules/word/index.base.d.ts +194 -10
  124. package/dist/browser/modules/word/index.base.js +138 -29
  125. package/dist/browser/modules/word/layout/layout-constants.d.ts +17 -0
  126. package/dist/browser/modules/word/layout/layout-constants.js +17 -0
  127. package/dist/browser/modules/word/layout/layout-full.d.ts +53 -0
  128. package/dist/browser/modules/word/layout/layout-full.js +1696 -0
  129. package/dist/browser/modules/word/layout/layout-model.d.ts +344 -0
  130. package/dist/browser/modules/word/layout/layout-model.js +16 -0
  131. package/dist/browser/modules/word/layout/layout.d.ts +63 -0
  132. package/dist/browser/modules/word/layout/layout.js +1167 -0
  133. package/dist/browser/modules/word/layout/render-page.d.ts +57 -0
  134. package/dist/browser/modules/word/layout/render-page.js +1238 -0
  135. package/dist/browser/modules/word/markdown.d.ts +14 -0
  136. package/dist/browser/modules/word/markdown.js +13 -0
  137. package/dist/browser/modules/word/patcher.d.ts +62 -0
  138. package/dist/browser/modules/word/patcher.js +537 -0
  139. package/dist/browser/modules/word/query/compat.d.ts +25 -0
  140. package/dist/browser/modules/word/query/compat.js +58 -0
  141. package/dist/browser/modules/word/query/data-binding.d.ts +22 -0
  142. package/dist/browser/modules/word/query/data-binding.js +392 -0
  143. package/dist/browser/modules/word/query/form-fields.d.ts +41 -0
  144. package/dist/browser/modules/word/query/form-fields.js +268 -0
  145. package/dist/browser/modules/word/query/format-search.d.ts +99 -0
  146. package/dist/browser/modules/word/query/format-search.js +329 -0
  147. package/dist/browser/modules/word/query/mail-merge.d.ts +25 -0
  148. package/dist/browser/modules/word/query/mail-merge.js +111 -0
  149. package/dist/browser/modules/word/query/merge.d.ts +50 -0
  150. package/dist/browser/modules/word/query/merge.js +617 -0
  151. package/dist/browser/modules/word/query/replace.d.ts +47 -0
  152. package/dist/browser/modules/word/query/replace.js +301 -0
  153. package/dist/browser/modules/word/query/revisions.d.ts +67 -0
  154. package/dist/browser/modules/word/query/revisions.js +879 -0
  155. package/dist/browser/modules/word/query/search.d.ts +129 -0
  156. package/dist/browser/modules/word/query/search.js +346 -0
  157. package/dist/browser/modules/word/query/split.d.ts +44 -0
  158. package/dist/browser/modules/word/query/split.js +135 -0
  159. package/dist/browser/modules/word/query/style-resolve.d.ts +104 -0
  160. package/dist/browser/modules/word/query/style-resolve.js +368 -0
  161. package/dist/browser/modules/word/reader/chart-parser.d.ts +20 -0
  162. package/dist/browser/modules/word/reader/chart-parser.js +810 -0
  163. package/dist/browser/modules/word/reader/comments-parser.d.ts +26 -0
  164. package/dist/browser/modules/word/reader/comments-parser.js +92 -0
  165. package/dist/browser/modules/word/reader/doc-props-parsers.d.ts +15 -0
  166. package/dist/browser/modules/word/reader/doc-props-parsers.js +190 -0
  167. package/dist/browser/modules/word/reader/docx-reader.d.ts +27 -0
  168. package/dist/browser/modules/word/reader/docx-reader.js +2557 -0
  169. package/dist/browser/modules/word/reader/drawing-helpers.d.ts +27 -0
  170. package/dist/browser/modules/word/reader/drawing-helpers.js +84 -0
  171. package/dist/browser/modules/word/reader/form-field-parser.d.ts +21 -0
  172. package/dist/browser/modules/word/reader/form-field-parser.js +82 -0
  173. package/dist/browser/modules/word/reader/image-parsers.d.ts +11 -0
  174. package/dist/browser/modules/word/reader/image-parsers.js +291 -0
  175. package/dist/browser/modules/word/reader/math-parser.d.ts +12 -0
  176. package/dist/browser/modules/word/reader/math-parser.js +422 -0
  177. package/dist/browser/modules/word/reader/metadata-parsers.d.ts +17 -0
  178. package/dist/browser/modules/word/reader/metadata-parsers.js +87 -0
  179. package/dist/browser/modules/word/reader/numbering-parser.d.ts +13 -0
  180. package/dist/browser/modules/word/reader/numbering-parser.js +166 -0
  181. package/dist/browser/modules/word/reader/paragraph-section-parsers.d.ts +12 -0
  182. package/dist/browser/modules/word/reader/paragraph-section-parsers.js +503 -0
  183. package/dist/browser/modules/word/reader/parse-utils.d.ts +91 -0
  184. package/dist/browser/modules/word/reader/parse-utils.js +249 -0
  185. package/dist/browser/modules/word/reader/properties-parsers.d.ts +21 -0
  186. package/dist/browser/modules/word/reader/properties-parsers.js +332 -0
  187. package/dist/browser/modules/word/reader/reader-context.d.ts +69 -0
  188. package/dist/browser/modules/word/reader/reader-context.js +61 -0
  189. package/dist/browser/modules/word/reader/sdt-helpers.d.ts +29 -0
  190. package/dist/browser/modules/word/reader/sdt-helpers.js +111 -0
  191. package/dist/browser/modules/word/reader/settings-parser.d.ts +8 -0
  192. package/dist/browser/modules/word/reader/settings-parser.js +263 -0
  193. package/dist/browser/modules/word/reader/styles-parser.d.ts +12 -0
  194. package/dist/browser/modules/word/reader/styles-parser.js +147 -0
  195. package/dist/browser/modules/word/reader/table-properties-parsers.d.ts +12 -0
  196. package/dist/browser/modules/word/reader/table-properties-parsers.js +234 -0
  197. package/dist/browser/modules/word/reader/theme-parser.d.ts +8 -0
  198. package/dist/browser/modules/word/reader/theme-parser.js +167 -0
  199. package/dist/browser/modules/word/reader/watermark-parser.d.ts +15 -0
  200. package/dist/browser/modules/word/reader/watermark-parser.js +110 -0
  201. package/dist/browser/modules/word/security/cfb-reader.d.ts +37 -0
  202. package/dist/browser/modules/word/security/cfb-reader.js +410 -0
  203. package/dist/browser/modules/word/{digital-signatures.d.ts → security/digital-signatures.d.ts} +19 -11
  204. package/dist/browser/modules/word/{digital-signatures.js → security/digital-signatures.js} +34 -34
  205. package/dist/browser/modules/word/security/document-protection.d.ts +93 -0
  206. package/dist/browser/modules/word/security/document-protection.js +201 -0
  207. package/dist/{types/modules/word → browser/modules/word/security}/encryption.d.ts +51 -4
  208. package/dist/browser/modules/word/security/encryption.js +602 -0
  209. package/dist/browser/modules/word/security/policy.d.ts +80 -0
  210. package/dist/browser/modules/word/security/policy.js +102 -0
  211. package/dist/browser/modules/word/template/template-chart.d.ts +56 -0
  212. package/dist/browser/modules/word/template/template-chart.js +167 -0
  213. package/dist/browser/modules/word/template/template-datasource.d.ts +154 -0
  214. package/dist/browser/modules/word/template/template-datasource.js +541 -0
  215. package/dist/browser/modules/word/template/template-engine.d.ts +121 -0
  216. package/dist/browser/modules/word/template/template-engine.js +1435 -0
  217. package/dist/browser/modules/word/types.d.ts +224 -25
  218. package/dist/browser/modules/word/units.d.ts +26 -0
  219. package/dist/browser/modules/word/units.js +43 -14
  220. package/dist/browser/modules/word/{writers → writer}/chart-writer.js +164 -23
  221. package/dist/browser/modules/word/writer/checkbox-writer.d.ts +17 -0
  222. package/dist/browser/modules/word/writer/checkbox-writer.js +79 -0
  223. package/dist/{types/modules/word/writers → browser/modules/word/writer}/comment-writer.d.ts +2 -1
  224. package/dist/browser/modules/word/{writers → writer}/comment-writer.js +8 -6
  225. package/dist/browser/modules/word/writer/common-parts.d.ts +57 -0
  226. package/dist/browser/modules/word/writer/common-parts.js +101 -0
  227. package/dist/{types/modules/word → browser/modules/word/writer}/content-types.d.ts +2 -2
  228. package/dist/{esm/modules/word → browser/modules/word/writer}/content-types.js +14 -6
  229. package/dist/browser/modules/word/writer/document-writer.d.ts +24 -0
  230. package/dist/browser/modules/word/writer/document-writer.js +473 -0
  231. package/dist/browser/modules/word/writer/docx-packager.d.ts +35 -0
  232. package/dist/browser/modules/word/writer/docx-packager.js +1515 -0
  233. package/dist/{types/modules/word/writers → browser/modules/word/writer}/footnote-writer.d.ts +3 -2
  234. package/dist/{esm/modules/word/writers → browser/modules/word/writer}/footnote-writer.js +13 -10
  235. package/dist/{types/modules/word/writers → browser/modules/word/writer}/header-footer-writer.d.ts +3 -2
  236. package/dist/{esm/modules/word/writers → browser/modules/word/writer}/header-footer-writer.js +39 -21
  237. package/dist/{types/modules/word/writers → browser/modules/word/writer}/image-writer.d.ts +1 -1
  238. package/dist/browser/modules/word/{writers → writer}/image-writer.js +11 -7
  239. package/dist/browser/modules/word/writer/math-writer.d.ts +20 -0
  240. package/dist/{esm/modules/word/writers → browser/modules/word/writer}/math-writer.js +21 -1
  241. package/dist/browser/modules/word/{writers → writer}/numbering-writer.d.ts +1 -1
  242. package/dist/{esm/modules/word/writers → browser/modules/word/writer}/numbering-writer.js +11 -4
  243. package/dist/browser/modules/word/{writers → writer}/paragraph-writer.d.ts +2 -1
  244. package/dist/browser/modules/word/{writers → writer}/paragraph-writer.js +73 -38
  245. package/dist/browser/modules/word/{writers → writer}/parts-writer.d.ts +3 -3
  246. package/dist/{esm/modules/word/writers → browser/modules/word/writer}/parts-writer.js +91 -12
  247. package/dist/browser/modules/word/writer/reference-scanners.d.ts +42 -0
  248. package/dist/browser/modules/word/writer/reference-scanners.js +111 -0
  249. package/dist/browser/modules/word/writer/relationships.d.ts +52 -0
  250. package/dist/browser/modules/word/writer/relationships.js +117 -0
  251. package/dist/browser/modules/word/writer/render-context.d.ts +124 -0
  252. package/dist/browser/modules/word/writer/render-context.js +46 -0
  253. package/dist/browser/modules/word/{writers → writer}/run-writer.d.ts +10 -1
  254. package/dist/{esm/modules/word/writers → browser/modules/word/writer}/run-writer.js +126 -24
  255. package/dist/browser/modules/word/writer/sdt-writer.d.ts +25 -0
  256. package/dist/browser/modules/word/writer/sdt-writer.js +189 -0
  257. package/dist/browser/modules/word/writer/stream-buf.d.ts +37 -0
  258. package/dist/browser/modules/word/writer/stream-buf.js +73 -0
  259. package/dist/browser/modules/word/writer/streaming-writer.d.ts +344 -0
  260. package/dist/browser/modules/word/writer/streaming-writer.js +1382 -0
  261. package/dist/browser/modules/word/writer/string-buf.d.ts +8 -0
  262. package/dist/browser/modules/word/writer/string-buf.js +7 -0
  263. package/dist/browser/modules/word/{writers → writer}/styles-writer.js +32 -1
  264. package/dist/browser/modules/word/{writers → writer}/table-writer.d.ts +2 -1
  265. package/dist/browser/modules/word/{writers → writer}/table-writer.js +94 -11
  266. package/dist/browser/modules/xml/types.d.ts +22 -0
  267. package/dist/browser/utils/crypto.browser.d.ts +3 -1
  268. package/dist/browser/utils/crypto.browser.js +3 -1
  269. package/dist/browser/utils/crypto.d.ts +4 -1
  270. package/dist/browser/utils/crypto.js +4 -1
  271. package/dist/browser/utils/font-metrics.d.ts +63 -0
  272. package/dist/browser/utils/font-metrics.js +293 -0
  273. package/dist/browser/utils/string-buf.d.ts +42 -0
  274. package/dist/browser/utils/string-buf.js +89 -0
  275. package/dist/browser/utils/theme-colors.d.ts +55 -0
  276. package/dist/browser/utils/theme-colors.js +120 -0
  277. package/dist/cjs/modules/archive/compression/streaming-compress.browser.js +29 -0
  278. package/dist/cjs/modules/archive/compression/streaming-compress.js +9 -0
  279. package/dist/cjs/modules/archive/compression/worker-pool/pool.browser.js +26 -1
  280. package/dist/cjs/modules/archive/fs/archive-file.js +78 -16
  281. package/dist/cjs/modules/archive/unzip/stream.browser.js +43 -2
  282. package/dist/cjs/modules/excel/chart/chart-ex-builder.js +7 -2
  283. package/dist/cjs/modules/excel/chart/chart-ex-renderer.js +4 -9
  284. package/dist/cjs/modules/excel/chart/chart.js +1 -7
  285. package/dist/cjs/modules/excel/stream/workbook-reader.browser.js +25 -1
  286. package/dist/cjs/modules/excel/stream/workbook-reader.js +9 -0
  287. package/dist/cjs/modules/excel/stream/workbook-writer.browser.js +228 -13
  288. package/dist/cjs/modules/excel/utils/string-buf.js +5 -81
  289. package/dist/cjs/modules/excel/workbook.browser.js +135 -25
  290. package/dist/cjs/modules/excel/xlsx/xform/chart/chart-space-xform.js +6 -20
  291. package/dist/cjs/modules/excel/xlsx/xlsx.browser.js +32 -8
  292. package/dist/cjs/modules/excel/xlsx/xlsx.js +9 -1
  293. package/dist/cjs/modules/pdf/excel-bridge.js +33 -0
  294. package/dist/cjs/modules/pdf/font/metrics.js +11 -244
  295. package/dist/cjs/modules/pdf/index.js +2 -1
  296. package/dist/cjs/modules/pdf/render-layout-to-pdf.js +651 -0
  297. package/dist/cjs/modules/pdf/word-bridge.js +155 -274
  298. package/dist/cjs/modules/stream/index.base.js +4 -2
  299. package/dist/cjs/modules/stream/internal/sink-adapter.js +202 -0
  300. package/dist/cjs/modules/stream/pull-stream.js +51 -5
  301. package/dist/cjs/modules/word/advanced/diff.js +170 -0
  302. package/dist/cjs/modules/word/advanced/drawing-shapes.js +279 -0
  303. package/dist/cjs/modules/word/advanced/field-engine.js +1229 -0
  304. package/dist/cjs/modules/word/advanced/glossary.js +87 -0
  305. package/dist/cjs/modules/word/advanced/math-convert.js +599 -0
  306. package/dist/cjs/modules/word/advanced/ole-objects.js +277 -0
  307. package/dist/cjs/modules/word/advanced/style-map.js +329 -0
  308. package/dist/cjs/modules/word/advanced/validation.js +1068 -0
  309. package/dist/cjs/modules/word/advanced/vba-project.js +274 -0
  310. package/dist/cjs/modules/word/bridge/excel-bridge.js +1020 -0
  311. package/dist/cjs/modules/word/builder/document-handle.js +667 -0
  312. package/dist/cjs/modules/word/builder/paragraph-builders.js +109 -0
  313. package/dist/cjs/modules/word/builder/run-builders.js +676 -0
  314. package/dist/cjs/modules/word/builder/table-builders.js +53 -0
  315. package/dist/cjs/modules/word/constants.js +111 -2
  316. package/dist/cjs/modules/word/convert/conversion-ir.js +34 -0
  317. package/dist/cjs/modules/word/convert/docx-to-semantic.js +502 -0
  318. package/dist/cjs/modules/word/convert/flat-opc.js +390 -0
  319. package/dist/cjs/modules/word/convert/html/html-import.js +1910 -0
  320. package/dist/cjs/modules/word/{html-renderer.js → convert/html/html-renderer.js} +420 -69
  321. package/dist/cjs/modules/word/convert/html/html.js +20 -0
  322. package/dist/cjs/modules/word/convert/markdown/markdown-import.js +1329 -0
  323. package/dist/cjs/modules/word/convert/markdown/markdown-renderer.js +637 -0
  324. package/dist/cjs/modules/word/convert/markdown/markdown.js +21 -0
  325. package/dist/cjs/modules/word/convert/odt/odt.js +1936 -0
  326. package/dist/cjs/modules/word/core/color-utils.js +47 -0
  327. package/dist/cjs/modules/word/core/internal-utils.js +219 -0
  328. package/dist/cjs/modules/word/core/mapper.js +430 -0
  329. package/dist/cjs/modules/word/core/opc-paths.js +53 -0
  330. package/dist/cjs/modules/word/core/text-utils.js +210 -0
  331. package/dist/cjs/modules/word/core/walker.js +577 -0
  332. package/dist/cjs/modules/word/crypto.js +19 -8
  333. package/dist/cjs/modules/word/document-io.js +117 -197
  334. package/dist/cjs/modules/word/errors.js +59 -13
  335. package/dist/cjs/modules/word/excel.js +22 -0
  336. package/dist/cjs/modules/word/font/font-embed.js +652 -0
  337. package/dist/cjs/modules/word/{font-obfuscation.js → font/font-obfuscation.js} +4 -9
  338. package/dist/cjs/modules/word/font/hyphenation.js +4216 -0
  339. package/dist/cjs/modules/word/font/text-shaping.js +640 -0
  340. package/dist/cjs/modules/word/html.js +9 -7
  341. package/dist/cjs/modules/word/incremental-edit.js +366 -0
  342. package/dist/cjs/modules/word/index.base.js +370 -137
  343. package/dist/cjs/modules/word/layout/layout-constants.js +20 -0
  344. package/dist/cjs/modules/word/layout/layout-full.js +1699 -0
  345. package/dist/cjs/modules/word/layout/layout-model.js +17 -0
  346. package/dist/cjs/modules/word/layout/layout.js +1170 -0
  347. package/dist/cjs/modules/word/layout/render-page.js +1243 -0
  348. package/dist/cjs/modules/word/markdown.js +19 -0
  349. package/dist/cjs/modules/word/patcher.js +539 -0
  350. package/dist/cjs/modules/word/query/compat.js +61 -0
  351. package/dist/cjs/modules/word/query/data-binding.js +395 -0
  352. package/dist/cjs/modules/word/query/form-fields.js +272 -0
  353. package/dist/cjs/modules/word/query/format-search.js +334 -0
  354. package/dist/cjs/modules/word/query/mail-merge.js +114 -0
  355. package/dist/cjs/modules/word/query/merge.js +620 -0
  356. package/dist/cjs/modules/word/query/replace.js +304 -0
  357. package/dist/cjs/modules/word/query/revisions.js +885 -0
  358. package/dist/cjs/modules/word/query/search.js +361 -0
  359. package/dist/cjs/modules/word/query/split.js +138 -0
  360. package/dist/cjs/modules/word/query/style-resolve.js +374 -0
  361. package/dist/cjs/modules/word/reader/chart-parser.js +814 -0
  362. package/dist/cjs/modules/word/reader/comments-parser.js +96 -0
  363. package/dist/cjs/modules/word/reader/doc-props-parsers.js +194 -0
  364. package/dist/cjs/modules/word/reader/docx-reader.js +2560 -0
  365. package/dist/cjs/modules/word/reader/drawing-helpers.js +90 -0
  366. package/dist/cjs/modules/word/reader/form-field-parser.js +85 -0
  367. package/dist/cjs/modules/word/reader/image-parsers.js +293 -0
  368. package/dist/cjs/modules/word/reader/math-parser.js +424 -0
  369. package/dist/cjs/modules/word/reader/metadata-parsers.js +93 -0
  370. package/dist/cjs/modules/word/reader/numbering-parser.js +168 -0
  371. package/dist/cjs/modules/word/reader/paragraph-section-parsers.js +505 -0
  372. package/dist/cjs/modules/word/reader/parse-utils.js +271 -0
  373. package/dist/cjs/modules/word/reader/properties-parsers.js +338 -0
  374. package/dist/cjs/modules/word/reader/reader-context.js +66 -0
  375. package/dist/cjs/modules/word/reader/sdt-helpers.js +114 -0
  376. package/dist/cjs/modules/word/reader/settings-parser.js +265 -0
  377. package/dist/cjs/modules/word/reader/styles-parser.js +149 -0
  378. package/dist/cjs/modules/word/reader/table-properties-parsers.js +237 -0
  379. package/dist/cjs/modules/word/reader/theme-parser.js +169 -0
  380. package/dist/cjs/modules/word/reader/watermark-parser.js +113 -0
  381. package/dist/cjs/modules/word/security/cfb-reader.js +414 -0
  382. package/dist/cjs/modules/word/{digital-signatures.js → security/digital-signatures.js} +34 -34
  383. package/dist/cjs/modules/word/security/document-protection.js +208 -0
  384. package/dist/cjs/modules/word/security/encryption.js +612 -0
  385. package/dist/cjs/modules/word/security/policy.js +106 -0
  386. package/dist/cjs/modules/word/template/template-chart.js +170 -0
  387. package/dist/cjs/modules/word/template/template-datasource.js +549 -0
  388. package/dist/cjs/modules/word/template/template-engine.js +1430 -0
  389. package/dist/cjs/modules/word/units.js +44 -14
  390. package/dist/cjs/modules/word/{writers → writer}/chart-writer.js +163 -22
  391. package/dist/cjs/modules/word/writer/checkbox-writer.js +82 -0
  392. package/dist/cjs/modules/word/{writers → writer}/comment-writer.js +8 -6
  393. package/dist/cjs/modules/word/writer/common-parts.js +104 -0
  394. package/dist/cjs/modules/word/{content-types.js → writer/content-types.js} +14 -6
  395. package/dist/cjs/modules/word/writer/document-writer.js +478 -0
  396. package/dist/cjs/modules/word/writer/docx-packager.js +1551 -0
  397. package/dist/cjs/modules/word/{writers → writer}/footnote-writer.js +13 -10
  398. package/dist/cjs/modules/word/{writers → writer}/header-footer-writer.js +38 -20
  399. package/dist/cjs/modules/word/{writers → writer}/image-writer.js +11 -7
  400. package/dist/cjs/modules/word/{writers → writer}/math-writer.js +21 -1
  401. package/dist/cjs/modules/word/{writers → writer}/numbering-writer.js +11 -4
  402. package/dist/cjs/modules/word/{writers → writer}/paragraph-writer.js +72 -37
  403. package/dist/cjs/modules/word/{writers → writer}/parts-writer.js +91 -12
  404. package/dist/cjs/modules/word/writer/reference-scanners.js +120 -0
  405. package/dist/cjs/modules/word/writer/relationships.js +124 -0
  406. package/dist/cjs/modules/word/writer/render-context.js +51 -0
  407. package/dist/cjs/modules/word/{writers → writer}/run-writer.js +127 -24
  408. package/dist/cjs/modules/word/writer/sdt-writer.js +192 -0
  409. package/dist/cjs/modules/word/writer/stream-buf.js +76 -0
  410. package/dist/cjs/modules/word/writer/streaming-writer.js +1387 -0
  411. package/dist/cjs/modules/word/writer/string-buf.js +11 -0
  412. package/dist/cjs/modules/word/{writers → writer}/styles-writer.js +32 -1
  413. package/dist/cjs/modules/word/{writers → writer}/table-writer.js +94 -11
  414. package/dist/cjs/utils/crypto.browser.js +3 -1
  415. package/dist/cjs/utils/crypto.js +4 -1
  416. package/dist/cjs/utils/font-metrics.js +303 -0
  417. package/dist/cjs/utils/string-buf.js +92 -0
  418. package/dist/cjs/utils/theme-colors.js +126 -0
  419. package/dist/esm/modules/archive/compression/streaming-compress.browser.js +29 -0
  420. package/dist/esm/modules/archive/compression/streaming-compress.js +9 -0
  421. package/dist/esm/modules/archive/compression/worker-pool/pool.browser.js +26 -1
  422. package/dist/esm/modules/archive/fs/archive-file.js +78 -16
  423. package/dist/esm/modules/archive/unzip/stream.browser.js +43 -2
  424. package/dist/esm/modules/excel/chart/chart-ex-builder.js +7 -2
  425. package/dist/esm/modules/excel/chart/chart-ex-renderer.js +4 -9
  426. package/dist/esm/modules/excel/chart/chart.js +1 -7
  427. package/dist/esm/modules/excel/stream/workbook-reader.browser.js +25 -1
  428. package/dist/esm/modules/excel/stream/workbook-reader.js +9 -0
  429. package/dist/esm/modules/excel/stream/workbook-writer.browser.js +228 -13
  430. package/dist/esm/modules/excel/utils/string-buf.js +4 -81
  431. package/dist/esm/modules/excel/workbook.browser.js +135 -25
  432. package/dist/esm/modules/excel/xlsx/xform/chart/chart-space-xform.js +6 -20
  433. package/dist/esm/modules/excel/xlsx/xlsx.browser.js +32 -8
  434. package/dist/esm/modules/excel/xlsx/xlsx.js +9 -1
  435. package/dist/esm/modules/pdf/excel-bridge.js +32 -0
  436. package/dist/esm/modules/pdf/font/metrics.js +3 -237
  437. package/dist/esm/modules/pdf/index.js +1 -1
  438. package/dist/esm/modules/pdf/render-layout-to-pdf.js +647 -0
  439. package/dist/esm/modules/pdf/word-bridge.js +122 -274
  440. package/dist/esm/modules/stream/index.base.js +2 -1
  441. package/dist/esm/modules/stream/internal/sink-adapter.js +198 -0
  442. package/dist/esm/modules/stream/pull-stream.js +51 -5
  443. package/dist/esm/modules/word/advanced/diff.js +167 -0
  444. package/dist/esm/modules/word/advanced/drawing-shapes.js +268 -0
  445. package/dist/esm/modules/word/advanced/field-engine.js +1225 -0
  446. package/dist/esm/modules/word/advanced/glossary.js +79 -0
  447. package/dist/esm/modules/word/advanced/math-convert.js +595 -0
  448. package/dist/esm/modules/word/advanced/ole-objects.js +271 -0
  449. package/dist/esm/modules/word/advanced/style-map.js +322 -0
  450. package/dist/esm/modules/word/advanced/validation.js +1065 -0
  451. package/dist/esm/modules/word/advanced/vba-project.js +265 -0
  452. package/dist/esm/modules/word/bridge/excel-bridge.js +980 -0
  453. package/dist/esm/modules/word/builder/document-handle.js +664 -0
  454. package/dist/esm/modules/word/builder/paragraph-builders.js +90 -0
  455. package/dist/esm/modules/word/builder/run-builders.js +600 -0
  456. package/dist/esm/modules/word/builder/table-builders.js +45 -0
  457. package/dist/esm/modules/word/constants.js +109 -1
  458. package/dist/esm/modules/word/convert/conversion-ir.js +31 -0
  459. package/dist/esm/modules/word/convert/docx-to-semantic.js +499 -0
  460. package/dist/esm/modules/word/convert/flat-opc.js +385 -0
  461. package/dist/esm/modules/word/convert/html/html-import.js +1907 -0
  462. package/dist/{browser/modules/word → esm/modules/word/convert/html}/html-renderer.js +420 -69
  463. package/dist/esm/modules/word/convert/html/html.js +15 -0
  464. package/dist/esm/modules/word/convert/markdown/markdown-import.js +1325 -0
  465. package/dist/esm/modules/word/convert/markdown/markdown-renderer.js +634 -0
  466. package/dist/esm/modules/word/convert/markdown/markdown.js +15 -0
  467. package/dist/esm/modules/word/convert/odt/odt.js +1932 -0
  468. package/dist/esm/modules/word/core/color-utils.js +43 -0
  469. package/dist/esm/modules/word/core/internal-utils.js +209 -0
  470. package/dist/esm/modules/word/core/mapper.js +427 -0
  471. package/dist/esm/modules/word/core/opc-paths.js +48 -0
  472. package/dist/esm/modules/word/core/text-utils.js +202 -0
  473. package/dist/esm/modules/word/core/walker.js +570 -0
  474. package/dist/esm/modules/word/crypto.js +13 -7
  475. package/dist/esm/modules/word/document-io.js +80 -197
  476. package/dist/esm/modules/word/errors.js +54 -2
  477. package/dist/esm/modules/word/excel.js +13 -0
  478. package/dist/esm/modules/word/font/font-embed.js +646 -0
  479. package/dist/{browser/modules/word → esm/modules/word/font}/font-obfuscation.js +4 -9
  480. package/dist/esm/modules/word/font/hyphenation.js +4210 -0
  481. package/dist/esm/modules/word/font/text-shaping.js +635 -0
  482. package/dist/esm/modules/word/html.js +6 -5
  483. package/dist/esm/modules/word/incremental-edit.js +361 -0
  484. package/dist/esm/modules/word/index.base.js +138 -29
  485. package/dist/esm/modules/word/layout/layout-constants.js +17 -0
  486. package/dist/esm/modules/word/layout/layout-full.js +1696 -0
  487. package/dist/esm/modules/word/layout/layout-model.js +16 -0
  488. package/dist/esm/modules/word/layout/layout.js +1167 -0
  489. package/dist/esm/modules/word/layout/render-page.js +1238 -0
  490. package/dist/esm/modules/word/markdown.js +13 -0
  491. package/dist/esm/modules/word/patcher.js +537 -0
  492. package/dist/esm/modules/word/query/compat.js +58 -0
  493. package/dist/esm/modules/word/query/data-binding.js +392 -0
  494. package/dist/esm/modules/word/query/form-fields.js +268 -0
  495. package/dist/esm/modules/word/query/format-search.js +329 -0
  496. package/dist/esm/modules/word/query/mail-merge.js +111 -0
  497. package/dist/esm/modules/word/query/merge.js +617 -0
  498. package/dist/esm/modules/word/query/replace.js +301 -0
  499. package/dist/esm/modules/word/query/revisions.js +879 -0
  500. package/dist/esm/modules/word/query/search.js +346 -0
  501. package/dist/esm/modules/word/query/split.js +135 -0
  502. package/dist/esm/modules/word/query/style-resolve.js +368 -0
  503. package/dist/esm/modules/word/reader/chart-parser.js +810 -0
  504. package/dist/esm/modules/word/reader/comments-parser.js +92 -0
  505. package/dist/esm/modules/word/reader/doc-props-parsers.js +190 -0
  506. package/dist/esm/modules/word/reader/docx-reader.js +2557 -0
  507. package/dist/esm/modules/word/reader/drawing-helpers.js +84 -0
  508. package/dist/esm/modules/word/reader/form-field-parser.js +82 -0
  509. package/dist/esm/modules/word/reader/image-parsers.js +291 -0
  510. package/dist/esm/modules/word/reader/math-parser.js +422 -0
  511. package/dist/esm/modules/word/reader/metadata-parsers.js +87 -0
  512. package/dist/esm/modules/word/reader/numbering-parser.js +166 -0
  513. package/dist/esm/modules/word/reader/paragraph-section-parsers.js +503 -0
  514. package/dist/esm/modules/word/reader/parse-utils.js +249 -0
  515. package/dist/esm/modules/word/reader/properties-parsers.js +332 -0
  516. package/dist/esm/modules/word/reader/reader-context.js +61 -0
  517. package/dist/esm/modules/word/reader/sdt-helpers.js +111 -0
  518. package/dist/esm/modules/word/reader/settings-parser.js +263 -0
  519. package/dist/esm/modules/word/reader/styles-parser.js +147 -0
  520. package/dist/esm/modules/word/reader/table-properties-parsers.js +234 -0
  521. package/dist/esm/modules/word/reader/theme-parser.js +167 -0
  522. package/dist/esm/modules/word/reader/watermark-parser.js +110 -0
  523. package/dist/esm/modules/word/security/cfb-reader.js +410 -0
  524. package/dist/esm/modules/word/{digital-signatures.js → security/digital-signatures.js} +34 -34
  525. package/dist/esm/modules/word/security/document-protection.js +201 -0
  526. package/dist/esm/modules/word/security/encryption.js +602 -0
  527. package/dist/esm/modules/word/security/policy.js +102 -0
  528. package/dist/esm/modules/word/template/template-chart.js +167 -0
  529. package/dist/esm/modules/word/template/template-datasource.js +541 -0
  530. package/dist/esm/modules/word/template/template-engine.js +1435 -0
  531. package/dist/esm/modules/word/units.js +43 -14
  532. package/dist/esm/modules/word/{writers → writer}/chart-writer.js +164 -23
  533. package/dist/esm/modules/word/writer/checkbox-writer.js +79 -0
  534. package/dist/esm/modules/word/{writers → writer}/comment-writer.js +8 -6
  535. package/dist/esm/modules/word/writer/common-parts.js +101 -0
  536. package/dist/{browser/modules/word → esm/modules/word/writer}/content-types.js +14 -6
  537. package/dist/esm/modules/word/writer/document-writer.js +473 -0
  538. package/dist/esm/modules/word/writer/docx-packager.js +1515 -0
  539. package/dist/{browser/modules/word/writers → esm/modules/word/writer}/footnote-writer.js +13 -10
  540. package/dist/{browser/modules/word/writers → esm/modules/word/writer}/header-footer-writer.js +39 -21
  541. package/dist/esm/modules/word/{writers → writer}/image-writer.js +11 -7
  542. package/dist/{browser/modules/word/writers → esm/modules/word/writer}/math-writer.js +21 -1
  543. package/dist/{browser/modules/word/writers → esm/modules/word/writer}/numbering-writer.js +11 -4
  544. package/dist/esm/modules/word/{writers → writer}/paragraph-writer.js +73 -38
  545. package/dist/{browser/modules/word/writers → esm/modules/word/writer}/parts-writer.js +91 -12
  546. package/dist/esm/modules/word/writer/reference-scanners.js +111 -0
  547. package/dist/esm/modules/word/writer/relationships.js +117 -0
  548. package/dist/esm/modules/word/writer/render-context.js +46 -0
  549. package/dist/{browser/modules/word/writers → esm/modules/word/writer}/run-writer.js +126 -24
  550. package/dist/esm/modules/word/writer/sdt-writer.js +189 -0
  551. package/dist/esm/modules/word/writer/stream-buf.js +73 -0
  552. package/dist/esm/modules/word/writer/streaming-writer.js +1382 -0
  553. package/dist/esm/modules/word/writer/string-buf.js +7 -0
  554. package/dist/esm/modules/word/{writers → writer}/styles-writer.js +32 -1
  555. package/dist/esm/modules/word/{writers → writer}/table-writer.js +94 -11
  556. package/dist/esm/utils/crypto.browser.js +3 -1
  557. package/dist/esm/utils/crypto.js +4 -1
  558. package/dist/esm/utils/font-metrics.js +293 -0
  559. package/dist/esm/utils/string-buf.js +89 -0
  560. package/dist/esm/utils/theme-colors.js +120 -0
  561. package/dist/iife/excelts.iife.js +70692 -70337
  562. package/dist/iife/excelts.iife.js.map +1 -1
  563. package/dist/iife/excelts.iife.min.js +57 -57
  564. package/dist/types/modules/archive/fs/archive-file.d.ts +8 -5
  565. package/dist/types/modules/excel/chart/chart-ex-types.d.ts +0 -12
  566. package/dist/types/modules/excel/chart/chart.d.ts +1 -5
  567. package/dist/types/modules/excel/chart/types.d.ts +0 -6
  568. package/dist/types/modules/excel/stream/workbook-writer.browser.d.ts +40 -0
  569. package/dist/types/modules/excel/utils/string-buf.d.ts +5 -26
  570. package/dist/types/modules/excel/xlsx/xlsx.browser.d.ts +19 -9
  571. package/dist/types/modules/excel/xlsx/xlsx.d.ts +10 -2
  572. package/dist/types/modules/pdf/excel-bridge.d.ts +30 -1
  573. package/dist/types/modules/pdf/font/metrics.d.ts +3 -52
  574. package/dist/types/modules/pdf/index.d.ts +1 -1
  575. package/dist/types/modules/pdf/render-layout-to-pdf.d.ts +66 -0
  576. package/dist/types/modules/pdf/word-bridge.d.ts +80 -12
  577. package/dist/types/modules/stream/index.base.d.ts +2 -0
  578. package/dist/types/modules/stream/internal/sink-adapter.d.ts +65 -0
  579. package/dist/types/modules/stream/pull-stream.d.ts +19 -2
  580. package/dist/types/modules/stream/types.d.ts +13 -1
  581. package/dist/types/modules/word/advanced/diff.d.ts +61 -0
  582. package/dist/types/modules/word/advanced/drawing-shapes.d.ts +269 -0
  583. package/dist/types/modules/word/advanced/field-engine.d.ts +43 -0
  584. package/dist/types/modules/word/advanced/glossary.d.ts +86 -0
  585. package/dist/types/modules/word/advanced/math-convert.d.ts +30 -0
  586. package/dist/types/modules/word/advanced/ole-objects.d.ts +115 -0
  587. package/dist/types/modules/word/advanced/style-map.d.ts +105 -0
  588. package/dist/types/modules/word/advanced/validation.d.ts +56 -0
  589. package/dist/types/modules/word/advanced/vba-project.d.ts +91 -0
  590. package/dist/types/modules/word/bridge/excel-bridge.d.ts +127 -0
  591. package/dist/types/modules/word/builder/document-handle.d.ts +151 -0
  592. package/dist/types/modules/word/builder/paragraph-builders.d.ts +61 -0
  593. package/dist/types/modules/word/builder/run-builders.d.ts +374 -0
  594. package/dist/types/modules/word/builder/table-builders.d.ts +23 -0
  595. package/dist/types/modules/word/constants.d.ts +39 -1
  596. package/dist/types/modules/word/convert/conversion-ir.d.ts +210 -0
  597. package/dist/types/modules/word/convert/docx-to-semantic.d.ts +39 -0
  598. package/dist/types/modules/word/convert/flat-opc.d.ts +44 -0
  599. package/dist/types/modules/word/convert/html/html-import.d.ts +50 -0
  600. package/dist/{browser/modules/word → types/modules/word/convert/html}/html-renderer.d.ts +14 -1
  601. package/dist/types/modules/word/convert/html/html.d.ts +15 -0
  602. package/dist/types/modules/word/convert/markdown/markdown-import.d.ts +68 -0
  603. package/dist/types/modules/word/convert/markdown/markdown-renderer.d.ts +25 -0
  604. package/dist/types/modules/word/convert/markdown/markdown.d.ts +15 -0
  605. package/dist/types/modules/word/convert/odt/odt.d.ts +41 -0
  606. package/dist/types/modules/word/{color-utils.d.ts → core/color-utils.d.ts} +8 -1
  607. package/dist/types/modules/word/core/internal-utils.d.ts +90 -0
  608. package/dist/types/modules/word/core/mapper.d.ts +44 -0
  609. package/dist/types/modules/word/core/opc-paths.d.ts +33 -0
  610. package/dist/types/modules/word/core/text-utils.d.ts +38 -0
  611. package/dist/types/modules/word/core/walker.d.ts +119 -0
  612. package/dist/types/modules/word/crypto.d.ts +14 -9
  613. package/dist/types/modules/word/document-io.d.ts +59 -27
  614. package/dist/types/modules/word/errors.d.ts +44 -1
  615. package/dist/types/modules/word/excel.d.ts +14 -0
  616. package/dist/types/modules/word/font/font-embed.d.ts +112 -0
  617. package/dist/types/modules/word/font/hyphenation.d.ts +65 -0
  618. package/dist/types/modules/word/font/text-shaping.d.ts +58 -0
  619. package/dist/types/modules/word/html.d.ts +7 -6
  620. package/dist/types/modules/word/incremental-edit.d.ts +123 -0
  621. package/dist/types/modules/word/index.base.d.ts +194 -10
  622. package/dist/types/modules/word/layout/layout-constants.d.ts +17 -0
  623. package/dist/types/modules/word/layout/layout-full.d.ts +53 -0
  624. package/dist/types/modules/word/layout/layout-model.d.ts +344 -0
  625. package/dist/types/modules/word/layout/layout.d.ts +63 -0
  626. package/dist/types/modules/word/layout/render-page.d.ts +57 -0
  627. package/dist/types/modules/word/markdown.d.ts +14 -0
  628. package/dist/types/modules/word/patcher.d.ts +62 -0
  629. package/dist/types/modules/word/query/compat.d.ts +25 -0
  630. package/dist/types/modules/word/query/data-binding.d.ts +22 -0
  631. package/dist/types/modules/word/query/form-fields.d.ts +41 -0
  632. package/dist/types/modules/word/query/format-search.d.ts +99 -0
  633. package/dist/types/modules/word/query/mail-merge.d.ts +25 -0
  634. package/dist/types/modules/word/query/merge.d.ts +50 -0
  635. package/dist/types/modules/word/query/replace.d.ts +47 -0
  636. package/dist/types/modules/word/query/revisions.d.ts +67 -0
  637. package/dist/types/modules/word/query/search.d.ts +129 -0
  638. package/dist/types/modules/word/query/split.d.ts +44 -0
  639. package/dist/types/modules/word/query/style-resolve.d.ts +104 -0
  640. package/dist/types/modules/word/reader/chart-parser.d.ts +20 -0
  641. package/dist/types/modules/word/reader/comments-parser.d.ts +26 -0
  642. package/dist/types/modules/word/reader/doc-props-parsers.d.ts +15 -0
  643. package/dist/types/modules/word/reader/docx-reader.d.ts +27 -0
  644. package/dist/types/modules/word/reader/drawing-helpers.d.ts +27 -0
  645. package/dist/types/modules/word/reader/form-field-parser.d.ts +21 -0
  646. package/dist/types/modules/word/reader/image-parsers.d.ts +11 -0
  647. package/dist/types/modules/word/reader/math-parser.d.ts +12 -0
  648. package/dist/types/modules/word/reader/metadata-parsers.d.ts +17 -0
  649. package/dist/types/modules/word/reader/numbering-parser.d.ts +13 -0
  650. package/dist/types/modules/word/reader/paragraph-section-parsers.d.ts +12 -0
  651. package/dist/types/modules/word/reader/parse-utils.d.ts +91 -0
  652. package/dist/types/modules/word/reader/properties-parsers.d.ts +21 -0
  653. package/dist/types/modules/word/reader/reader-context.d.ts +69 -0
  654. package/dist/types/modules/word/reader/sdt-helpers.d.ts +29 -0
  655. package/dist/types/modules/word/reader/settings-parser.d.ts +8 -0
  656. package/dist/types/modules/word/reader/styles-parser.d.ts +12 -0
  657. package/dist/types/modules/word/reader/table-properties-parsers.d.ts +12 -0
  658. package/dist/types/modules/word/reader/theme-parser.d.ts +8 -0
  659. package/dist/types/modules/word/reader/watermark-parser.d.ts +15 -0
  660. package/dist/types/modules/word/security/cfb-reader.d.ts +37 -0
  661. package/dist/types/modules/word/{digital-signatures.d.ts → security/digital-signatures.d.ts} +19 -11
  662. package/dist/types/modules/word/security/document-protection.d.ts +93 -0
  663. package/dist/{browser/modules/word → types/modules/word/security}/encryption.d.ts +51 -4
  664. package/dist/types/modules/word/security/policy.d.ts +80 -0
  665. package/dist/types/modules/word/template/template-chart.d.ts +56 -0
  666. package/dist/types/modules/word/template/template-datasource.d.ts +154 -0
  667. package/dist/types/modules/word/template/template-engine.d.ts +121 -0
  668. package/dist/types/modules/word/types.d.ts +224 -25
  669. package/dist/types/modules/word/units.d.ts +26 -0
  670. package/dist/types/modules/word/writer/checkbox-writer.d.ts +17 -0
  671. package/dist/{browser/modules/word/writers → types/modules/word/writer}/comment-writer.d.ts +2 -1
  672. package/dist/types/modules/word/writer/common-parts.d.ts +57 -0
  673. package/dist/{browser/modules/word → types/modules/word/writer}/content-types.d.ts +2 -2
  674. package/dist/types/modules/word/writer/document-writer.d.ts +24 -0
  675. package/dist/types/modules/word/writer/docx-packager.d.ts +35 -0
  676. package/dist/{browser/modules/word/writers → types/modules/word/writer}/footnote-writer.d.ts +3 -2
  677. package/dist/{browser/modules/word/writers → types/modules/word/writer}/header-footer-writer.d.ts +3 -2
  678. package/dist/{browser/modules/word/writers → types/modules/word/writer}/image-writer.d.ts +1 -1
  679. package/dist/types/modules/word/writer/math-writer.d.ts +20 -0
  680. package/dist/types/modules/word/{writers → writer}/numbering-writer.d.ts +1 -1
  681. package/dist/types/modules/word/{writers → writer}/paragraph-writer.d.ts +2 -1
  682. package/dist/types/modules/word/{writers → writer}/parts-writer.d.ts +3 -3
  683. package/dist/types/modules/word/writer/reference-scanners.d.ts +42 -0
  684. package/dist/types/modules/word/writer/relationships.d.ts +52 -0
  685. package/dist/types/modules/word/writer/render-context.d.ts +124 -0
  686. package/dist/types/modules/word/{writers → writer}/run-writer.d.ts +10 -1
  687. package/dist/types/modules/word/writer/sdt-writer.d.ts +25 -0
  688. package/dist/types/modules/word/writer/stream-buf.d.ts +37 -0
  689. package/dist/types/modules/word/writer/streaming-writer.d.ts +344 -0
  690. package/dist/types/modules/word/writer/string-buf.d.ts +8 -0
  691. package/dist/types/modules/word/{writers → writer}/table-writer.d.ts +2 -1
  692. package/dist/types/modules/xml/types.d.ts +22 -0
  693. package/dist/types/utils/crypto.browser.d.ts +3 -1
  694. package/dist/types/utils/crypto.d.ts +4 -1
  695. package/dist/types/utils/font-metrics.d.ts +63 -0
  696. package/dist/types/utils/string-buf.d.ts +42 -0
  697. package/dist/types/utils/theme-colors.d.ts +55 -0
  698. package/package.json +121 -39
  699. package/dist/browser/modules/word/color-utils.js +0 -94
  700. package/dist/browser/modules/word/document.d.ts +0 -657
  701. package/dist/browser/modules/word/document.js +0 -1533
  702. package/dist/browser/modules/word/docx-packager.d.ts +0 -14
  703. package/dist/browser/modules/word/docx-packager.js +0 -822
  704. package/dist/browser/modules/word/docx-reader.d.ts +0 -11
  705. package/dist/browser/modules/word/docx-reader.js +0 -4929
  706. package/dist/browser/modules/word/encryption.js +0 -274
  707. package/dist/browser/modules/word/internal-utils.d.ts +0 -23
  708. package/dist/browser/modules/word/internal-utils.js +0 -54
  709. package/dist/browser/modules/word/namespaces.d.ts +0 -159
  710. package/dist/browser/modules/word/namespaces.js +0 -189
  711. package/dist/browser/modules/word/relationships.d.ts +0 -30
  712. package/dist/browser/modules/word/relationships.js +0 -48
  713. package/dist/browser/modules/word/writers/checkbox-writer.d.ts +0 -9
  714. package/dist/browser/modules/word/writers/checkbox-writer.js +0 -42
  715. package/dist/browser/modules/word/writers/document-writer.d.ts +0 -16
  716. package/dist/browser/modules/word/writers/document-writer.js +0 -461
  717. package/dist/browser/modules/word/writers/math-writer.d.ts +0 -9
  718. package/dist/cjs/modules/word/color-utils.js +0 -97
  719. package/dist/cjs/modules/word/document.js +0 -1645
  720. package/dist/cjs/modules/word/docx-packager.js +0 -825
  721. package/dist/cjs/modules/word/docx-reader.js +0 -4932
  722. package/dist/cjs/modules/word/encryption.js +0 -282
  723. package/dist/cjs/modules/word/internal-utils.js +0 -59
  724. package/dist/cjs/modules/word/namespaces.js +0 -192
  725. package/dist/cjs/modules/word/relationships.js +0 -55
  726. package/dist/cjs/modules/word/writers/checkbox-writer.js +0 -45
  727. package/dist/cjs/modules/word/writers/document-writer.js +0 -465
  728. package/dist/esm/modules/word/color-utils.js +0 -94
  729. package/dist/esm/modules/word/document.js +0 -1533
  730. package/dist/esm/modules/word/docx-packager.js +0 -822
  731. package/dist/esm/modules/word/docx-reader.js +0 -4929
  732. package/dist/esm/modules/word/encryption.js +0 -274
  733. package/dist/esm/modules/word/internal-utils.js +0 -54
  734. package/dist/esm/modules/word/namespaces.js +0 -189
  735. package/dist/esm/modules/word/relationships.js +0 -48
  736. package/dist/esm/modules/word/writers/checkbox-writer.js +0 -42
  737. package/dist/esm/modules/word/writers/document-writer.js +0 -461
  738. package/dist/types/modules/word/document.d.ts +0 -657
  739. package/dist/types/modules/word/docx-packager.d.ts +0 -14
  740. package/dist/types/modules/word/docx-reader.d.ts +0 -11
  741. package/dist/types/modules/word/internal-utils.d.ts +0 -23
  742. package/dist/types/modules/word/namespaces.d.ts +0 -159
  743. package/dist/types/modules/word/relationships.d.ts +0 -30
  744. package/dist/types/modules/word/writers/checkbox-writer.d.ts +0 -9
  745. package/dist/types/modules/word/writers/document-writer.d.ts +0 -16
  746. package/dist/types/modules/word/writers/math-writer.d.ts +0 -9
  747. /package/dist/browser/modules/word/{font-obfuscation.d.ts → font/font-obfuscation.d.ts} +0 -0
  748. /package/dist/browser/modules/word/{writers → writer}/chart-writer.d.ts +0 -0
  749. /package/dist/browser/modules/word/{writers → writer}/section-writer.d.ts +0 -0
  750. /package/dist/browser/modules/word/{writers → writer}/section-writer.js +0 -0
  751. /package/dist/browser/modules/word/{writers → writer}/styles-writer.d.ts +0 -0
  752. /package/dist/browser/modules/word/{writers → writer}/textbox-writer.d.ts +0 -0
  753. /package/dist/browser/modules/word/{writers → writer}/textbox-writer.js +0 -0
  754. /package/dist/browser/modules/word/{writers → writer}/toc-writer.d.ts +0 -0
  755. /package/dist/browser/modules/word/{writers → writer}/toc-writer.js +0 -0
  756. /package/dist/cjs/modules/word/{writers → writer}/section-writer.js +0 -0
  757. /package/dist/cjs/modules/word/{writers → writer}/textbox-writer.js +0 -0
  758. /package/dist/cjs/modules/word/{writers → writer}/toc-writer.js +0 -0
  759. /package/dist/esm/modules/word/{writers → writer}/section-writer.js +0 -0
  760. /package/dist/esm/modules/word/{writers → writer}/textbox-writer.js +0 -0
  761. /package/dist/esm/modules/word/{writers → writer}/toc-writer.js +0 -0
  762. /package/dist/types/modules/word/{font-obfuscation.d.ts → font/font-obfuscation.d.ts} +0 -0
  763. /package/dist/types/modules/word/{writers → writer}/chart-writer.d.ts +0 -0
  764. /package/dist/types/modules/word/{writers → writer}/section-writer.d.ts +0 -0
  765. /package/dist/types/modules/word/{writers → writer}/styles-writer.d.ts +0 -0
  766. /package/dist/types/modules/word/{writers → writer}/textbox-writer.d.ts +0 -0
  767. /package/dist/types/modules/word/{writers → writer}/toc-writer.d.ts +0 -0
@@ -0,0 +1,652 @@
1
+ "use strict";
2
+ /**
3
+ * DOCX Module - Embedded Font Writer
4
+ *
5
+ * Provides the ability to embed font files into DOCX documents.
6
+ * Supports TTF, OTF, and WOFF fonts with optional ODTTF obfuscation
7
+ * as required by the OOXML specification for embedded fonts.
8
+ *
9
+ * ECMA-376 Part 1, §17.8.3 describes how fonts are embedded:
10
+ * - Fonts are stored in word/fonts/ directory
11
+ * - Each embedded font has a relationship in fontTable.xml
12
+ * - Obfuscation uses a GUID-based XOR scheme (ODTTF format)
13
+ *
14
+ * Supports font subsetting to reduce file size by only including
15
+ * glyphs that are actually used in the document.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.subsetFont = subsetFont;
19
+ exports.embedFont = embedFont;
20
+ exports.embedFontFamily = embedFontFamily;
21
+ exports.addEmbeddedFonts = addEmbeddedFonts;
22
+ const font_obfuscation_1 = require("./font-obfuscation");
23
+ // =============================================================================
24
+ // Font Subsetting
25
+ // =============================================================================
26
+ /**
27
+ * Subset a TrueType/OpenType font to include only the specified characters.
28
+ *
29
+ * This performs a minimal subset by:
30
+ * 1. Parsing the cmap table to find glyph IDs for requested characters
31
+ * 2. Building a new glyf/loca table with only needed glyphs (+ composite dependencies)
32
+ * 3. Rebuilding the font with minimal tables
33
+ *
34
+ * For CFF (PostScript-outline) fonts, subsetting is more complex and we fall back
35
+ * to embedding the full font.
36
+ *
37
+ * @param fontData - Raw TTF/OTF font bytes
38
+ * @param characters - String of characters to keep
39
+ * @returns Subsetted font bytes, or original if subsetting fails/not applicable
40
+ */
41
+ function subsetFont(fontData, characters) {
42
+ try {
43
+ return _subsetTtf(fontData, characters);
44
+ }
45
+ catch {
46
+ // If subsetting fails for any reason, return original data
47
+ return fontData;
48
+ }
49
+ }
50
+ /** Read a uint16 big-endian from buffer. */
51
+ function readU16(data, offset) {
52
+ return (data[offset] << 8) | data[offset + 1];
53
+ }
54
+ /** Read a uint32 big-endian from buffer. */
55
+ function readU32(data, offset) {
56
+ return (((data[offset] << 24) |
57
+ (data[offset + 1] << 16) |
58
+ (data[offset + 2] << 8) |
59
+ data[offset + 3]) >>>
60
+ 0);
61
+ }
62
+ /** Read an int16 big-endian from buffer. */
63
+ function readI16(data, offset) {
64
+ const v = readU16(data, offset);
65
+ return v > 0x7fff ? v - 0x10000 : v;
66
+ }
67
+ /** Write uint16 big-endian. */
68
+ function writeU16(data, offset, value) {
69
+ data[offset] = (value >> 8) & 0xff;
70
+ data[offset + 1] = value & 0xff;
71
+ }
72
+ /** Write uint32 big-endian. */
73
+ function writeU32(data, offset, value) {
74
+ data[offset] = (value >>> 24) & 0xff;
75
+ data[offset + 1] = (value >>> 16) & 0xff;
76
+ data[offset + 2] = (value >>> 8) & 0xff;
77
+ data[offset + 3] = value & 0xff;
78
+ }
79
+ function parseTableDirectory(data) {
80
+ const numTables = readU16(data, 4);
81
+ const tables = new Map();
82
+ // numTables comes from a u16 → max 65535. Reject directories that
83
+ // claim more entries than the buffer can possibly hold so we don't
84
+ // walk off the end and accumulate garbage records.
85
+ const maxRecords = Math.floor((data.length - 12) / 16);
86
+ if (numTables > maxRecords) {
87
+ return { numTables: 0, tables };
88
+ }
89
+ for (let i = 0; i < numTables; i++) {
90
+ const recOffset = 12 + i * 16;
91
+ const tag = String.fromCharCode(data[recOffset], data[recOffset + 1], data[recOffset + 2], data[recOffset + 3]);
92
+ tables.set(tag, {
93
+ tag,
94
+ checksum: readU32(data, recOffset + 4),
95
+ offset: readU32(data, recOffset + 8),
96
+ length: readU32(data, recOffset + 12)
97
+ });
98
+ }
99
+ return { numTables, tables };
100
+ }
101
+ // Hard cap on how many codepoints we materialise from a cmap table.
102
+ // Real fonts reach ~150K glyphs at the upper end (CJK pan-Unicode);
103
+ // bigger numbers indicate a malformed or hostile table built to drive
104
+ // the parser into a multi-gigabyte Map allocation.
105
+ const CMAP_MAX_ENTRIES = 200000;
106
+ /**
107
+ * Parse cmap format 4 (BMP characters) to build codepoint → glyph ID map.
108
+ */
109
+ function parseCmapFormat4(data, offset) {
110
+ const map = new Map();
111
+ const segCountX2 = readU16(data, offset + 6);
112
+ const segCount = segCountX2 / 2;
113
+ const endCodes = offset + 14;
114
+ const startCodes = endCodes + segCountX2 + 2; // +2 for reservedPad
115
+ const idDeltas = startCodes + segCountX2;
116
+ const idRangeOffsets = idDeltas + segCountX2;
117
+ for (let i = 0; i < segCount; i++) {
118
+ const endCode = readU16(data, endCodes + i * 2);
119
+ const startCode = readU16(data, startCodes + i * 2);
120
+ const idDelta = readI16(data, idDeltas + i * 2);
121
+ const idRangeOffset = readU16(data, idRangeOffsets + i * 2);
122
+ if (startCode === 0xffff) {
123
+ break;
124
+ }
125
+ for (let c = startCode; c <= endCode; c++) {
126
+ if (map.size >= CMAP_MAX_ENTRIES) {
127
+ return map;
128
+ }
129
+ let glyphId;
130
+ if (idRangeOffset === 0) {
131
+ glyphId = (c + idDelta) & 0xffff;
132
+ }
133
+ else {
134
+ const glyphOffset = idRangeOffsets + i * 2 + idRangeOffset + (c - startCode) * 2;
135
+ glyphId = readU16(data, glyphOffset);
136
+ if (glyphId !== 0) {
137
+ glyphId = (glyphId + idDelta) & 0xffff;
138
+ }
139
+ }
140
+ if (glyphId !== 0) {
141
+ map.set(c, glyphId);
142
+ }
143
+ }
144
+ }
145
+ return map;
146
+ }
147
+ /**
148
+ * Parse cmap format 12 (full Unicode including supplementary planes).
149
+ */
150
+ function parseCmapFormat12(data, offset) {
151
+ const map = new Map();
152
+ const numGroups = readU32(data, offset + 12);
153
+ // numGroups is a u32 — without bounds it can claim 4×10⁹ groups and
154
+ // each group can claim a 4×10⁹-codepoint range. Reject crazy values
155
+ // up front. The 4-byte multiplier 12 (group record size) plus the
156
+ // 16-byte header puts an absolute ceiling on legitimate groups.
157
+ const maxGroups = Math.max(0, Math.floor((data.length - offset - 16) / 12));
158
+ if (numGroups > maxGroups) {
159
+ return map;
160
+ }
161
+ for (let i = 0; i < numGroups; i++) {
162
+ const groupOffset = offset + 16 + i * 12;
163
+ const startCharCode = readU32(data, groupOffset);
164
+ const endCharCode = readU32(data, groupOffset + 4);
165
+ const startGlyphID = readU32(data, groupOffset + 8);
166
+ if (endCharCode < startCharCode ||
167
+ endCharCode > 0x10ffff /* Unicode max */ ||
168
+ endCharCode - startCharCode > CMAP_MAX_ENTRIES) {
169
+ // Malformed or abusive range — skip rather than expand it.
170
+ continue;
171
+ }
172
+ for (let c = startCharCode; c <= endCharCode; c++) {
173
+ if (map.size >= CMAP_MAX_ENTRIES) {
174
+ return map;
175
+ }
176
+ const gid = startGlyphID + (c - startCharCode);
177
+ map.set(c, gid);
178
+ }
179
+ }
180
+ return map;
181
+ }
182
+ /**
183
+ * Get the glyph IDs for composite glyphs (compound glyphs referencing other glyphs).
184
+ */
185
+ function getCompositeGlyphDeps(data, glyfOffset, locaEntries, glyphId) {
186
+ const deps = [];
187
+ const glyphStart = glyfOffset + locaEntries[glyphId];
188
+ const glyphEnd = glyfOffset + locaEntries[glyphId + 1];
189
+ if (glyphStart >= glyphEnd) {
190
+ return deps; // empty glyph
191
+ }
192
+ const numContours = readI16(data, glyphStart);
193
+ if (numContours >= 0) {
194
+ return deps; // simple glyph
195
+ }
196
+ // Composite glyph
197
+ let pos = glyphStart + 10; // skip header
198
+ const MORE_COMPONENTS = 0x0020;
199
+ const ARG_1_AND_2_ARE_WORDS = 0x0001;
200
+ const WE_HAVE_A_SCALE = 0x0008;
201
+ const WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;
202
+ const WE_HAVE_A_TWO_BY_TWO = 0x0080;
203
+ let flags;
204
+ do {
205
+ flags = readU16(data, pos);
206
+ const componentGid = readU16(data, pos + 2);
207
+ deps.push(componentGid);
208
+ pos += 4;
209
+ // Skip arguments
210
+ if (flags & ARG_1_AND_2_ARE_WORDS) {
211
+ pos += 4;
212
+ }
213
+ else {
214
+ pos += 2;
215
+ }
216
+ // Skip transform data
217
+ if (flags & WE_HAVE_A_TWO_BY_TWO) {
218
+ pos += 8;
219
+ }
220
+ else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {
221
+ pos += 4;
222
+ }
223
+ else if (flags & WE_HAVE_A_SCALE) {
224
+ pos += 2;
225
+ }
226
+ } while (flags & MORE_COMPONENTS);
227
+ return deps;
228
+ }
229
+ function _subsetTtf(fontData, characters) {
230
+ // Check if it's a TrueType font (not CFF/OTF with PostScript outlines)
231
+ const sfVersion = readU32(fontData, 0);
232
+ const isTtf = sfVersion === 0x00010000 || // TrueType
233
+ sfVersion === 0x74727565; // 'true'
234
+ if (!isTtf) {
235
+ // CFF fonts require a full CFF subsetter which is much more complex.
236
+ // Return original for now.
237
+ return fontData;
238
+ }
239
+ const { tables } = parseTableDirectory(fontData);
240
+ const cmapTable = tables.get("cmap");
241
+ const glyfTable = tables.get("glyf");
242
+ const locaTable = tables.get("loca");
243
+ const headTable = tables.get("head");
244
+ const maxpTable = tables.get("maxp");
245
+ if (!cmapTable || !glyfTable || !locaTable || !headTable || !maxpTable) {
246
+ return fontData; // Missing required tables
247
+ }
248
+ // Determine loca format (0 = short, 1 = long)
249
+ const indexToLocFormat = readI16(fontData, headTable.offset + 50);
250
+ const numGlyphs = readU16(fontData, maxpTable.offset + 4);
251
+ // Parse loca table
252
+ const locaEntries = [];
253
+ for (let i = 0; i <= numGlyphs; i++) {
254
+ if (indexToLocFormat === 0) {
255
+ locaEntries.push(readU16(fontData, locaTable.offset + i * 2) * 2);
256
+ }
257
+ else {
258
+ locaEntries.push(readU32(fontData, locaTable.offset + i * 4));
259
+ }
260
+ }
261
+ // Parse cmap to get character → glyph mapping
262
+ const cmapOffset = cmapTable.offset;
263
+ const numSubtables = readU16(fontData, cmapOffset + 2);
264
+ let charToGlyph = new Map();
265
+ // Prefer format 12 (full Unicode), fall back to format 4 (BMP)
266
+ for (let i = 0; i < numSubtables; i++) {
267
+ const subOffset = cmapOffset + 4 + i * 8;
268
+ const platformId = readU16(fontData, subOffset);
269
+ const encodingId = readU16(fontData, subOffset + 2);
270
+ const subtableOffset = cmapOffset + readU32(fontData, subOffset + 4);
271
+ const format = readU16(fontData, subtableOffset);
272
+ // Prefer platform 3 (Windows), encoding 10 (full Unicode) with format 12
273
+ if (format === 12 && platformId === 3 && encodingId === 10) {
274
+ charToGlyph = parseCmapFormat12(fontData, subtableOffset);
275
+ break;
276
+ }
277
+ // Or platform 3, encoding 1 (BMP) with format 4
278
+ if (format === 4 && platformId === 3 && encodingId === 1 && charToGlyph.size === 0) {
279
+ charToGlyph = parseCmapFormat4(fontData, subtableOffset);
280
+ }
281
+ }
282
+ if (charToGlyph.size === 0) {
283
+ return fontData; // Can't parse cmap
284
+ }
285
+ // Collect glyph IDs we need
286
+ const neededGlyphs = new Set();
287
+ neededGlyphs.add(0); // .notdef is always required
288
+ for (const char of characters) {
289
+ const codePoint = char.codePointAt(0);
290
+ if (codePoint !== undefined) {
291
+ const gid = charToGlyph.get(codePoint);
292
+ if (gid !== undefined) {
293
+ neededGlyphs.add(gid);
294
+ }
295
+ }
296
+ }
297
+ // Handle surrogate pairs
298
+ for (let i = 0; i < characters.length; i++) {
299
+ const cp = characters.codePointAt(i);
300
+ if (cp > 0xffff) {
301
+ i++; // skip surrogate pair low
302
+ }
303
+ const gid = charToGlyph.get(cp);
304
+ if (gid !== undefined) {
305
+ neededGlyphs.add(gid);
306
+ }
307
+ }
308
+ // Resolve composite glyph dependencies
309
+ const resolved = new Set();
310
+ const queue = [...neededGlyphs];
311
+ while (queue.length > 0) {
312
+ const gid = queue.pop();
313
+ if (resolved.has(gid)) {
314
+ continue;
315
+ }
316
+ resolved.add(gid);
317
+ if (gid < numGlyphs) {
318
+ const deps = getCompositeGlyphDeps(fontData, glyfTable.offset, locaEntries, gid);
319
+ for (const dep of deps) {
320
+ if (!resolved.has(dep)) {
321
+ queue.push(dep);
322
+ }
323
+ }
324
+ }
325
+ }
326
+ // If subset is most of the font, not worth subsetting
327
+ if (resolved.size > numGlyphs * 0.7) {
328
+ return fontData;
329
+ }
330
+ // Build new glyf table: keep glyph data for needed glyphs, zero out others
331
+ const glyfData = fontData.slice(glyfTable.offset, glyfTable.offset + glyfTable.length);
332
+ const newGlyfParts = [];
333
+ const newLocaEntries = [];
334
+ let currentOffset = 0;
335
+ for (let gid = 0; gid < numGlyphs; gid++) {
336
+ newLocaEntries.push(currentOffset);
337
+ if (resolved.has(gid)) {
338
+ const start = locaEntries[gid];
339
+ const end = locaEntries[gid + 1];
340
+ const glyphBytes = glyfData.slice(start, end);
341
+ newGlyfParts.push(glyphBytes);
342
+ currentOffset += glyphBytes.length;
343
+ // Pad to 4-byte boundary (required for long loca format)
344
+ const padding = (4 - (glyphBytes.length % 4)) % 4;
345
+ if (padding > 0) {
346
+ newGlyfParts.push(new Uint8Array(padding));
347
+ currentOffset += padding;
348
+ }
349
+ }
350
+ // else: empty glyph (offset stays same)
351
+ }
352
+ newLocaEntries.push(currentOffset); // final sentinel
353
+ // Build new loca table (always use long format for simplicity)
354
+ const newLocaData = new Uint8Array((numGlyphs + 1) * 4);
355
+ for (let i = 0; i <= numGlyphs; i++) {
356
+ writeU32(newLocaData, i * 4, newLocaEntries[i]);
357
+ }
358
+ // Build new glyf table
359
+ const newGlyfData = new Uint8Array(currentOffset);
360
+ let writePos = 0;
361
+ for (const part of newGlyfParts) {
362
+ newGlyfData.set(part, writePos);
363
+ writePos += part.length;
364
+ }
365
+ // Rebuild the font, replacing glyf and loca tables
366
+ // Keep all other tables intact, including OpenType Layout tables
367
+ // for kerning, ligatures, and glyph substitution
368
+ const essentialTags = [
369
+ "head",
370
+ "hhea",
371
+ "maxp",
372
+ "OS/2",
373
+ "name",
374
+ "cmap",
375
+ "post",
376
+ "cvt ",
377
+ "fpgm",
378
+ "prep",
379
+ "hmtx",
380
+ "glyf",
381
+ "loca",
382
+ // OpenType Layout tables — preserved intact for kerning/ligatures
383
+ "GPOS", // Glyph Positioning (kerning, mark attachment)
384
+ "GSUB", // Glyph Substitution (ligatures, contextual alternates)
385
+ "GDEF", // Glyph Definition (glyph classes, mark attachment)
386
+ "kern", // Legacy kerning table
387
+ "DSIG" // Digital Signature (preserve for validation)
388
+ ];
389
+ const tablesToInclude = [];
390
+ for (const tag of essentialTags) {
391
+ const tableRec = tables.get(tag);
392
+ if (!tableRec) {
393
+ continue;
394
+ }
395
+ if (tag === "glyf") {
396
+ tablesToInclude.push({ tag, data: newGlyfData });
397
+ }
398
+ else if (tag === "loca") {
399
+ tablesToInclude.push({ tag, data: newLocaData });
400
+ }
401
+ else if (tag === "head") {
402
+ // Update indexToLocFormat to long (1)
403
+ const headData = fontData.slice(tableRec.offset, tableRec.offset + tableRec.length);
404
+ const headCopy = new Uint8Array(headData.length);
405
+ headCopy.set(headData);
406
+ writeU16(headCopy, 50, 1); // indexToLocFormat = 1 (long)
407
+ tablesToInclude.push({ tag, data: headCopy });
408
+ }
409
+ else {
410
+ tablesToInclude.push({
411
+ tag,
412
+ data: fontData.slice(tableRec.offset, tableRec.offset + tableRec.length)
413
+ });
414
+ }
415
+ }
416
+ // Calculate output size
417
+ const numOutputTables = tablesToInclude.length;
418
+ const headerSize = 12 + numOutputTables * 16;
419
+ let totalSize = headerSize;
420
+ for (const t of tablesToInclude) {
421
+ totalSize += (t.data.length + 3) & ~3; // pad each table to 4-byte
422
+ }
423
+ const output = new Uint8Array(totalSize);
424
+ // Write offset table header
425
+ writeU32(output, 0, 0x00010000); // sfVersion
426
+ writeU16(output, 4, numOutputTables);
427
+ // searchRange, entrySelector, rangeShift
428
+ let searchRange = 1;
429
+ let entrySelector = 0;
430
+ while (searchRange * 2 <= numOutputTables) {
431
+ searchRange *= 2;
432
+ entrySelector++;
433
+ }
434
+ searchRange *= 16;
435
+ writeU16(output, 6, searchRange);
436
+ writeU16(output, 8, entrySelector);
437
+ writeU16(output, 10, numOutputTables * 16 - searchRange);
438
+ // Write table records and data
439
+ let dataOffset = headerSize;
440
+ for (let i = 0; i < tablesToInclude.length; i++) {
441
+ const t = tablesToInclude[i];
442
+ const recOffset = 12 + i * 16;
443
+ // Write tag
444
+ for (let j = 0; j < 4; j++) {
445
+ output[recOffset + j] = t.tag.charCodeAt(j);
446
+ }
447
+ // Calculate checksum
448
+ const paddedLen = (t.data.length + 3) & ~3;
449
+ let checksum = 0;
450
+ for (let j = 0; j < paddedLen; j += 4) {
451
+ const b0 = j < t.data.length ? t.data[j] : 0;
452
+ const b1 = j + 1 < t.data.length ? t.data[j + 1] : 0;
453
+ const b2 = j + 2 < t.data.length ? t.data[j + 2] : 0;
454
+ const b3 = j + 3 < t.data.length ? t.data[j + 3] : 0;
455
+ checksum = (checksum + (((b0 << 24) | (b1 << 16) | (b2 << 8) | b3) >>> 0)) >>> 0;
456
+ }
457
+ writeU32(output, recOffset + 4, checksum);
458
+ writeU32(output, recOffset + 8, dataOffset);
459
+ writeU32(output, recOffset + 12, t.data.length);
460
+ // Write table data
461
+ output.set(t.data, dataOffset);
462
+ dataOffset += paddedLen;
463
+ }
464
+ return output;
465
+ }
466
+ // =============================================================================
467
+ // Font Embedding
468
+ // =============================================================================
469
+ /**
470
+ * Prepare a font for embedding into a DOCX document.
471
+ *
472
+ * Returns both the FontDef (for the font table) and the EmbeddedFont
473
+ * (for the embedded binary). The caller should add these to the document model.
474
+ *
475
+ * @param options - Font embedding options.
476
+ * @returns The font definition and embedded font data.
477
+ *
478
+ * @example
479
+ * ```ts
480
+ * const result = embedFont({
481
+ * name: "CustomFont",
482
+ * data: fontFileBytes,
483
+ * style: "regular",
484
+ * obfuscate: true
485
+ * });
486
+ *
487
+ * // Add to document
488
+ * const doc = {
489
+ * ...existingDoc,
490
+ * fonts: [...(existingDoc.fonts ?? []), result.fontDef],
491
+ * embeddedFonts: [...(existingDoc.embeddedFonts ?? []), result.embeddedFont]
492
+ * };
493
+ * ```
494
+ */
495
+ function embedFont(options) {
496
+ const style = options.style ?? "regular";
497
+ const shouldObfuscate = options.obfuscate !== false;
498
+ // Generate a font key for obfuscation
499
+ const fontKey = (0, font_obfuscation_1.generateFontKey)();
500
+ // Optionally subset the font to only include used glyphs
501
+ let fontData = options.data;
502
+ if (options.usedCharacters && options.usedCharacters.length > 0) {
503
+ fontData = subsetFont(new Uint8Array(fontData), options.usedCharacters);
504
+ }
505
+ // Prepare font data (optionally obfuscated)
506
+ let processedData;
507
+ let fileName;
508
+ if (shouldObfuscate) {
509
+ processedData = (0, font_obfuscation_1.obfuscateFont)(new Uint8Array(fontData), fontKey);
510
+ // ODTTF file naming: {GUID}.odttf (strip braces for filename)
511
+ const keyClean = fontKey.replace(/[{}]/g, "");
512
+ fileName = `${keyClean}.odttf`;
513
+ }
514
+ else {
515
+ processedData = new Uint8Array(fontData);
516
+ // Use the font name with appropriate extension
517
+ const ext = detectFontFormat(options.data);
518
+ fileName = `${sanitizeFileName(options.name)}_${style}.${ext}`;
519
+ }
520
+ // Allocate a unique rId per call. The packager will register this rId
521
+ // verbatim in `word/_rels/fontTable.xml.rels`, so re-using the same
522
+ // string across calls (the previous behaviour, which keyed off the font
523
+ // name + style) caused `Duplicate relationship ID` errors as soon as a
524
+ // caller embedded two distinct files claiming the same name/style.
525
+ const rId = `rIdFont${nextEmbeddedFontSequence()}`;
526
+ // Build the FontDef with embed key info
527
+ const fontDef = {
528
+ name: options.name,
529
+ family: options.family ?? "auto",
530
+ pitch: options.pitch ?? "variable",
531
+ charset: options.charset !== undefined ? String(options.charset) : undefined,
532
+ panose1: options.panose1,
533
+ embedRegular: style === "regular" ? rId : undefined,
534
+ embedRegularKey: style === "regular" ? fontKey : undefined,
535
+ embedBold: style === "bold" ? rId : undefined,
536
+ embedBoldKey: style === "bold" ? fontKey : undefined,
537
+ embedItalic: style === "italic" ? rId : undefined,
538
+ embedItalicKey: style === "italic" ? fontKey : undefined,
539
+ embedBoldItalic: style === "boldItalic" ? rId : undefined,
540
+ embedBoldItalicKey: style === "boldItalic" ? fontKey : undefined
541
+ };
542
+ // Build the EmbeddedFont
543
+ const embeddedFont = {
544
+ rId,
545
+ data: processedData,
546
+ fontKey: shouldObfuscate ? fontKey : undefined,
547
+ fileName
548
+ };
549
+ return { fontDef, embeddedFont };
550
+ }
551
+ /**
552
+ * Embed multiple font variants (regular, bold, italic, boldItalic) for a font family.
553
+ *
554
+ * @param name - Font family name.
555
+ * @param variants - Map of style to font data.
556
+ * @param options - Shared options for all variants.
557
+ * @returns Array of embed results.
558
+ */
559
+ function embedFontFamily(name, variants, options) {
560
+ const results = [];
561
+ for (const [style, data] of Object.entries(variants)) {
562
+ // `data` can legitimately be `undefined` when the caller spreads in
563
+ // a partial map. The previous truthy check let an empty Uint8Array
564
+ // through (which is truthy) but was correct for the undefined case.
565
+ if (data === undefined) {
566
+ continue;
567
+ }
568
+ if (data.byteLength === 0) {
569
+ // An empty buffer is never a real font. Skip rather than embed
570
+ // garbage that Word silently rejects.
571
+ continue;
572
+ }
573
+ results.push(embedFont({
574
+ name,
575
+ data,
576
+ style,
577
+ ...options
578
+ }));
579
+ }
580
+ return results;
581
+ }
582
+ /**
583
+ * Add embedded fonts to an existing document model.
584
+ * Merges new fonts with existing font definitions.
585
+ *
586
+ * @param doc - The existing document.
587
+ * @param results - Embed results from `embedFont` or `embedFontFamily`.
588
+ * @returns A new document with embedded fonts added.
589
+ */
590
+ function addEmbeddedFonts(doc, results) {
591
+ const existingFonts = doc.fonts ? [...doc.fonts] : [];
592
+ const existingEmbedded = doc.embeddedFonts ? [...doc.embeddedFonts] : [];
593
+ for (const result of results) {
594
+ // Check if font already exists and merge embed info
595
+ const existingIdx = existingFonts.findIndex(f => f.name === result.fontDef.name);
596
+ if (existingIdx >= 0) {
597
+ // Merge embed keys into existing font def
598
+ const existing = existingFonts[existingIdx];
599
+ existingFonts[existingIdx] = {
600
+ ...existing,
601
+ embedRegular: result.fontDef.embedRegular ?? existing.embedRegular,
602
+ embedRegularKey: result.fontDef.embedRegularKey ?? existing.embedRegularKey,
603
+ embedBold: result.fontDef.embedBold ?? existing.embedBold,
604
+ embedBoldKey: result.fontDef.embedBoldKey ?? existing.embedBoldKey,
605
+ embedItalic: result.fontDef.embedItalic ?? existing.embedItalic,
606
+ embedItalicKey: result.fontDef.embedItalicKey ?? existing.embedItalicKey,
607
+ embedBoldItalic: result.fontDef.embedBoldItalic ?? existing.embedBoldItalic,
608
+ embedBoldItalicKey: result.fontDef.embedBoldItalicKey ?? existing.embedBoldItalicKey
609
+ };
610
+ }
611
+ else {
612
+ existingFonts.push(result.fontDef);
613
+ }
614
+ existingEmbedded.push(result.embeddedFont);
615
+ }
616
+ return {
617
+ ...doc,
618
+ fonts: existingFonts,
619
+ embeddedFonts: existingEmbedded
620
+ };
621
+ }
622
+ // =============================================================================
623
+ // Internal Helpers
624
+ // =============================================================================
625
+ function detectFontFormat(data) {
626
+ // Check magic numbers
627
+ if (data.length >= 4) {
628
+ // OTF: "OTTO"
629
+ if (data[0] === 0x4f && data[1] === 0x54 && data[2] === 0x54 && data[3] === 0x4f) {
630
+ return "otf";
631
+ }
632
+ // TTF: 0x00010000 or "true"
633
+ if ((data[0] === 0x00 && data[1] === 0x01 && data[2] === 0x00 && data[3] === 0x00) ||
634
+ (data[0] === 0x74 && data[1] === 0x72 && data[2] === 0x75 && data[3] === 0x65)) {
635
+ return "ttf";
636
+ }
637
+ // WOFF: "wOFF"
638
+ if (data[0] === 0x77 && data[1] === 0x4f && data[2] === 0x46 && data[3] === 0x46) {
639
+ return "woff";
640
+ }
641
+ }
642
+ return "ttf"; // Default to TTF
643
+ }
644
+ function sanitizeFileName(name) {
645
+ return name.replace(/[^a-zA-Z0-9_-]/g, "_");
646
+ }
647
+ /** Module-level monotonic counter for embedded-font rIds. */
648
+ let _embeddedFontSeq = 0;
649
+ function nextEmbeddedFontSequence() {
650
+ _embeddedFontSeq++;
651
+ return _embeddedFontSeq;
652
+ }
@@ -12,12 +12,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.deobfuscateFont = deobfuscateFont;
13
13
  exports.obfuscateFont = obfuscateFont;
14
14
  exports.generateFontKey = generateFontKey;
15
+ const internal_utils_1 = require("../core/internal-utils");
16
+ const errors_1 = require("../errors");
15
17
  /** Parse a GUID string "{8-4-4-4-12}" into 16 bytes in obfuscation-apply order. */
16
18
  function parseGuid(guid) {
17
19
  // Strip braces
18
20
  const hex = guid.replace(/[{}]/g, "").replace(/-/g, "");
19
21
  if (hex.length !== 32) {
20
- throw new Error(`Invalid GUID: ${guid}`);
22
+ throw new errors_1.DocxError(`Invalid GUID: ${guid}`);
21
23
  }
22
24
  const bytes = new Uint8Array(16);
23
25
  for (let i = 0; i < 16; i++) {
@@ -77,12 +79,5 @@ function obfuscateFont(data, fontKey) {
77
79
  * @returns A GUID string in the form "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
78
80
  */
79
81
  function generateFontKey() {
80
- // Use crypto.getRandomValues (available in both Node and browser)
81
- const bytes = new Uint8Array(16);
82
- crypto.getRandomValues(bytes);
83
- // RFC 4122 v4 UUID: set version and variant bits
84
- bytes[6] = (bytes[6] & 0x0f) | 0x40;
85
- bytes[8] = (bytes[8] & 0x3f) | 0x80;
86
- const hex = Array.from(bytes, b => b.toString(16).padStart(2, "0")).join("");
87
- return `{${hex.substring(0, 8)}-${hex.substring(8, 12)}-${hex.substring(12, 16)}-${hex.substring(16, 20)}-${hex.substring(20, 32)}}`;
82
+ return (0, internal_utils_1.generateGuid)();
88
83
  }