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