myrole-docx-editor 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. package/README.md +107 -0
  2. package/dist/chunks/sdk-BKkeAoJT.js +15065 -0
  3. package/dist/chunks/sdk-BKkeAoJT.js.map +1 -0
  4. package/dist/chunks/vars-blockly-C-cJRHx8.js +42 -0
  5. package/dist/chunks/vars-blockly-C-cJRHx8.js.map +1 -0
  6. package/dist/index.js +53 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/react.js +36 -0
  9. package/dist/react.js.map +1 -0
  10. package/dist/types/packages/docx-editor/src/chrome.d.ts +28 -0
  11. package/dist/types/packages/docx-editor/src/commands.d.ts +16 -0
  12. package/dist/types/packages/docx-editor/src/comments.d.ts +24 -0
  13. package/dist/types/packages/docx-editor/src/editor.d.ts +293 -0
  14. package/dist/types/packages/docx-editor/src/embed.d.ts +7 -0
  15. package/dist/types/packages/docx-editor/src/font-manifest.d.ts +7 -0
  16. package/dist/types/packages/docx-editor/src/fonts.d.ts +5 -0
  17. package/dist/types/packages/docx-editor/src/html.d.ts +13 -0
  18. package/dist/types/packages/docx-editor/src/index.d.ts +20 -0
  19. package/dist/types/packages/docx-editor/src/inspector-ui.d.ts +6 -0
  20. package/dist/types/packages/docx-editor/src/inspector.d.ts +101 -0
  21. package/dist/types/packages/docx-editor/src/react.d.ts +24 -0
  22. package/dist/types/packages/docx-editor/src/ruler.d.ts +4 -0
  23. package/dist/types/packages/docx-editor/src/sdk.d.ts +85 -0
  24. package/dist/types/packages/docx-editor/src/ui/icons.d.ts +2 -0
  25. package/dist/types/packages/docx-editor/src/ui/shell.d.ts +57 -0
  26. package/dist/types/packages/docx-editor/src/variables.d.ts +68 -0
  27. package/dist/types/packages/docx-editor/src/vars-blockly.d.ts +9 -0
  28. package/dist/types/packages/docx-editor/src/vars-complete.d.ts +60 -0
  29. package/dist/types/packages/docx-editor/src/vars-library.d.ts +59 -0
  30. package/dist/types/packages/docx-editor/src/vars-panel.d.ts +38 -0
  31. package/dist/types/packages/docx-model/src/edit.d.ts +64 -0
  32. package/dist/types/packages/docx-model/src/editor.d.ts +254 -0
  33. package/dist/types/packages/docx-model/src/fonts.d.ts +60 -0
  34. package/dist/types/packages/docx-model/src/heal.d.ts +28 -0
  35. package/dist/types/packages/docx-model/src/index.d.ts +113 -0
  36. package/dist/types/packages/docx-model/src/insert.d.ts +30 -0
  37. package/dist/types/packages/docx-model/src/layout.d.ts +411 -0
  38. package/dist/types/packages/docx-model/src/numbering.d.ts +63 -0
  39. package/dist/types/packages/docx-model/src/paste.d.ts +51 -0
  40. package/dist/types/packages/docx-model/src/rels.d.ts +18 -0
  41. package/dist/types/packages/docx-model/src/spans.d.ts +69 -0
  42. package/dist/types/packages/docx-model/src/styles.d.ts +42 -0
  43. package/dist/types/packages/docx-model/src/tables.d.ts +196 -0
  44. package/dist/types/packages/docx-model/src/textbox.d.ts +61 -0
  45. package/dist/types/packages/docx-render/src/border.d.ts +39 -0
  46. package/dist/types/packages/docx-render/src/document.d.ts +55 -0
  47. package/dist/types/packages/docx-render/src/font-advances.d.ts +1 -0
  48. package/dist/types/packages/docx-render/src/hit.d.ts +94 -0
  49. package/dist/types/packages/docx-render/src/index.d.ts +12 -0
  50. package/dist/types/packages/docx-render/src/metrics.d.ts +6 -0
  51. package/dist/types/packages/docx-render/src/node-ctx.d.ts +36 -0
  52. package/dist/types/packages/docx-render/src/paragraph.d.ts +18 -0
  53. package/dist/types/packages/docx-render/src/parts.d.ts +40 -0
  54. package/dist/types/packages/docx-render/src/renderer.d.ts +251 -0
  55. package/dist/types/packages/docx-render/src/table.d.ts +15 -0
  56. package/dist/types/packages/docx-render/src/text.d.ts +396 -0
  57. package/dist/types/packages/docx-render/src/types.d.ts +514 -0
  58. package/dist/types/packages/docx-tags/src/add-comments.d.ts +2 -0
  59. package/dist/types/packages/docx-tags/src/comments.d.ts +19 -0
  60. package/dist/types/packages/docx-tags/src/grammar.d.ts +71 -0
  61. package/dist/types/packages/docx-tags/src/highlight.d.ts +22 -0
  62. package/dist/types/packages/docx-tags/src/index.d.ts +4 -0
  63. package/dist/types/packages/docx-tags/src/scan.d.ts +27 -0
  64. package/dist/types/packages/docx-vars/src/audit.d.ts +44 -0
  65. package/dist/types/packages/docx-vars/src/blockify.d.ts +61 -0
  66. package/dist/types/packages/docx-vars/src/blocks.d.ts +46 -0
  67. package/dist/types/packages/docx-vars/src/describe.d.ts +21 -0
  68. package/dist/types/packages/docx-vars/src/generate.d.ts +11 -0
  69. package/dist/types/packages/docx-vars/src/icons.d.ts +52 -0
  70. package/dist/types/packages/docx-vars/src/idioms.d.ts +36 -0
  71. package/dist/types/packages/docx-vars/src/index.d.ts +31 -0
  72. package/dist/types/packages/docx-vars/src/labels.d.ts +42 -0
  73. package/dist/types/packages/docx-vars/src/library.d.ts +47 -0
  74. package/dist/types/packages/docx-vars/src/phrase.d.ts +3 -0
  75. package/dist/types/packages/docx-vars/src/picker.d.ts +19 -0
  76. package/dist/types/packages/docx-vars/src/plugin.d.ts +126 -0
  77. package/dist/types/packages/docx-vars/src/plugins.d.ts +29 -0
  78. package/dist/types/packages/docx-vars/src/preview.d.ts +25 -0
  79. package/dist/types/packages/docx-vars/src/scenario.d.ts +20 -0
  80. package/dist/types/packages/docx-vars/src/substitute.d.ts +28 -0
  81. package/dist/types/packages/docx-vars/src/sync.d.ts +56 -0
  82. package/dist/types/packages/docx-vars/src/target-canvas.d.ts +66 -0
  83. package/dist/types/packages/docx-vars/src/tokens.d.ts +18 -0
  84. package/dist/types/packages/fonts/src/advances.d.ts +90 -0
  85. package/dist/types/packages/fonts/src/aliases.d.ts +27 -0
  86. package/dist/types/packages/fonts/src/families.d.ts +1 -0
  87. package/dist/types/packages/fonts/src/load.d.ts +25 -0
  88. package/dist/types/packages/fonts/src/metrics.d.ts +44 -0
  89. package/fonts/ttf/abadi-mt-condensed-extra-bold-400-normal.ttf +0 -0
  90. package/fonts/ttf/abadi-mt-condensed-light-400-normal.ttf +0 -0
  91. package/fonts/ttf/angsana-new-400-italic.ttf +0 -0
  92. package/fonts/ttf/angsana-new-400-normal.ttf +0 -0
  93. package/fonts/ttf/angsana-new-700-italic.ttf +0 -0
  94. package/fonts/ttf/angsana-new-700-normal.ttf +0 -0
  95. package/fonts/ttf/apple-color-emoji-400-normal.ttf +0 -0
  96. package/fonts/ttf/apple-symbols-400-normal.ttf +0 -0
  97. package/fonts/ttf/aptos-400-italic.ttf +0 -0
  98. package/fonts/ttf/aptos-400-normal.ttf +0 -0
  99. package/fonts/ttf/aptos-700-italic.ttf +0 -0
  100. package/fonts/ttf/aptos-700-normal.ttf +0 -0
  101. package/fonts/ttf/aptos-narrow-400-italic.ttf +0 -0
  102. package/fonts/ttf/aptos-narrow-400-normal.ttf +0 -0
  103. package/fonts/ttf/aptos-narrow-700-italic.ttf +0 -0
  104. package/fonts/ttf/aptos-narrow-700-normal.ttf +0 -0
  105. package/fonts/ttf/arial-400-italic.ttf +0 -0
  106. package/fonts/ttf/arial-400-normal.ttf +0 -0
  107. package/fonts/ttf/arial-700-italic.ttf +0 -0
  108. package/fonts/ttf/arial-700-normal.ttf +0 -0
  109. package/fonts/ttf/arial-black-700-normal.ttf +0 -0
  110. package/fonts/ttf/arial-hebrew-400-normal.ttf +0 -0
  111. package/fonts/ttf/arial-hebrew-700-normal.ttf +0 -0
  112. package/fonts/ttf/arial-narrow-400-italic.ttf +0 -0
  113. package/fonts/ttf/arial-narrow-400-normal.ttf +0 -0
  114. package/fonts/ttf/arial-narrow-700-italic.ttf +0 -0
  115. package/fonts/ttf/arial-narrow-700-normal.ttf +0 -0
  116. package/fonts/ttf/arial-rounded-mt-bold-400-normal.ttf +0 -0
  117. package/fonts/ttf/arial-unicode-ms-400-normal.ttf +0 -0
  118. package/fonts/ttf/avenir-400-italic.ttf +0 -0
  119. package/fonts/ttf/avenir-400-normal.ttf +0 -0
  120. package/fonts/ttf/avenir-700-normal.ttf +0 -0
  121. package/fonts/ttf/avenir-black-700-normal.ttf +0 -0
  122. package/fonts/ttf/avenir-book-400-normal.ttf +0 -0
  123. package/fonts/ttf/avenir-heavy-700-italic.ttf +0 -0
  124. package/fonts/ttf/avenir-heavy-700-normal.ttf +0 -0
  125. package/fonts/ttf/avenir-light-400-italic.ttf +0 -0
  126. package/fonts/ttf/avenir-light-400-normal.ttf +0 -0
  127. package/fonts/ttf/avenir-next-400-italic.ttf +0 -0
  128. package/fonts/ttf/avenir-next-400-normal.ttf +0 -0
  129. package/fonts/ttf/avenir-next-700-italic.ttf +0 -0
  130. package/fonts/ttf/avenir-next-700-normal.ttf +0 -0
  131. package/fonts/ttf/baskerville-old-face-400-normal.ttf +0 -0
  132. package/fonts/ttf/batang-400-normal.ttf +0 -0
  133. package/fonts/ttf/bauhaus-93-400-normal.ttf +0 -0
  134. package/fonts/ttf/big-caslon-400-normal.ttf +0 -0
  135. package/fonts/ttf/bookman-old-style-400-italic.ttf +0 -0
  136. package/fonts/ttf/bookman-old-style-400-normal.ttf +0 -0
  137. package/fonts/ttf/bookman-old-style-700-italic.ttf +0 -0
  138. package/fonts/ttf/bookman-old-style-700-normal.ttf +0 -0
  139. package/fonts/ttf/calibri-400-italic.ttf +0 -0
  140. package/fonts/ttf/calibri-400-normal.ttf +0 -0
  141. package/fonts/ttf/calibri-700-italic.ttf +0 -0
  142. package/fonts/ttf/calibri-700-normal.ttf +0 -0
  143. package/fonts/ttf/calibri-light-400-italic.ttf +0 -0
  144. package/fonts/ttf/calibri-light-400-normal.ttf +0 -0
  145. package/fonts/ttf/cambria-400-italic.ttf +0 -0
  146. package/fonts/ttf/cambria-400-normal.ttf +0 -0
  147. package/fonts/ttf/cambria-700-italic.ttf +0 -0
  148. package/fonts/ttf/cambria-700-normal.ttf +0 -0
  149. package/fonts/ttf/cambria-math-400-normal.ttf +0 -0
  150. package/fonts/ttf/candara-400-italic.ttf +0 -0
  151. package/fonts/ttf/candara-400-normal.ttf +0 -0
  152. package/fonts/ttf/candara-700-italic.ttf +0 -0
  153. package/fonts/ttf/candara-700-normal.ttf +0 -0
  154. package/fonts/ttf/century-400-normal.ttf +0 -0
  155. package/fonts/ttf/century-gothic-400-italic.ttf +0 -0
  156. package/fonts/ttf/century-gothic-400-normal.ttf +0 -0
  157. package/fonts/ttf/century-gothic-700-italic.ttf +0 -0
  158. package/fonts/ttf/century-gothic-700-normal.ttf +0 -0
  159. package/fonts/ttf/century-schoolbook-400-italic.ttf +0 -0
  160. package/fonts/ttf/century-schoolbook-400-normal.ttf +0 -0
  161. package/fonts/ttf/century-schoolbook-700-italic.ttf +0 -0
  162. package/fonts/ttf/century-schoolbook-700-normal.ttf +0 -0
  163. package/fonts/ttf/comic-sans-ms-400-normal.ttf +0 -0
  164. package/fonts/ttf/comic-sans-ms-700-normal.ttf +0 -0
  165. package/fonts/ttf/consolas-400-italic.ttf +0 -0
  166. package/fonts/ttf/consolas-400-normal.ttf +0 -0
  167. package/fonts/ttf/consolas-700-normal.ttf +0 -0
  168. package/fonts/ttf/corbel-400-italic.ttf +0 -0
  169. package/fonts/ttf/corbel-400-normal.ttf +0 -0
  170. package/fonts/ttf/corbel-700-italic.ttf +0 -0
  171. package/fonts/ttf/corbel-700-normal.ttf +0 -0
  172. package/fonts/ttf/cordia-new-400-italic.ttf +0 -0
  173. package/fonts/ttf/cordia-new-400-normal.ttf +0 -0
  174. package/fonts/ttf/cordia-new-700-italic.ttf +0 -0
  175. package/fonts/ttf/cordia-new-700-normal.ttf +0 -0
  176. package/fonts/ttf/courier-400-normal.ttf +0 -0
  177. package/fonts/ttf/courier-new-400-italic.ttf +0 -0
  178. package/fonts/ttf/courier-new-400-normal.ttf +0 -0
  179. package/fonts/ttf/courier-new-700-normal.ttf +0 -0
  180. package/fonts/ttf/dengxian-400-normal.ttf +0 -0
  181. package/fonts/ttf/dengxian-700-normal.ttf +0 -0
  182. package/fonts/ttf/dengxian-light-400-normal.ttf +0 -0
  183. package/fonts/ttf/didot-400-italic.ttf +0 -0
  184. package/fonts/ttf/didot-400-normal.ttf +0 -0
  185. package/fonts/ttf/didot-700-normal.ttf +0 -0
  186. package/fonts/ttf/edwardian-script-itc-400-normal.ttf +0 -0
  187. package/fonts/ttf/euphemia-ucas-400-italic.ttf +0 -0
  188. package/fonts/ttf/euphemia-ucas-400-normal.ttf +0 -0
  189. package/fonts/ttf/euphemia-ucas-700-normal.ttf +0 -0
  190. package/fonts/ttf/eurostile-400-normal.ttf +0 -0
  191. package/fonts/ttf/eurostile-700-normal.ttf +0 -0
  192. package/fonts/ttf/franklin-gothic-book-400-italic.ttf +0 -0
  193. package/fonts/ttf/franklin-gothic-book-400-normal.ttf +0 -0
  194. package/fonts/ttf/franklin-gothic-demi-400-italic.ttf +0 -0
  195. package/fonts/ttf/franklin-gothic-demi-400-normal.ttf +0 -0
  196. package/fonts/ttf/franklin-gothic-demi-cond-400-normal.ttf +0 -0
  197. package/fonts/ttf/franklin-gothic-medium-400-italic.ttf +0 -0
  198. package/fonts/ttf/franklin-gothic-medium-400-normal.ttf +0 -0
  199. package/fonts/ttf/franklin-gothic-medium-cond-400-normal.ttf +0 -0
  200. package/fonts/ttf/futura-400-italic.ttf +0 -0
  201. package/fonts/ttf/futura-400-normal.ttf +0 -0
  202. package/fonts/ttf/futura-700-normal.ttf +0 -0
  203. package/fonts/ttf/garamond-400-italic.ttf +0 -0
  204. package/fonts/ttf/garamond-400-normal.ttf +0 -0
  205. package/fonts/ttf/garamond-700-italic.ttf +0 -0
  206. package/fonts/ttf/garamond-700-normal.ttf +0 -0
  207. package/fonts/ttf/geneva-400-normal.ttf +0 -0
  208. package/fonts/ttf/georgia-400-italic.ttf +0 -0
  209. package/fonts/ttf/georgia-400-normal.ttf +0 -0
  210. package/fonts/ttf/georgia-700-normal.ttf +0 -0
  211. package/fonts/ttf/gill-sans-400-italic.ttf +0 -0
  212. package/fonts/ttf/gill-sans-400-normal.ttf +0 -0
  213. package/fonts/ttf/gill-sans-700-italic.ttf +0 -0
  214. package/fonts/ttf/gill-sans-700-normal.ttf +0 -0
  215. package/fonts/ttf/gill-sans-light-400-italic.ttf +0 -0
  216. package/fonts/ttf/gill-sans-light-400-normal.ttf +0 -0
  217. package/fonts/ttf/gill-sans-mt-400-italic.ttf +0 -0
  218. package/fonts/ttf/gill-sans-mt-400-normal.ttf +0 -0
  219. package/fonts/ttf/gill-sans-mt-700-italic.ttf +0 -0
  220. package/fonts/ttf/gill-sans-mt-700-normal.ttf +0 -0
  221. package/fonts/ttf/helvetica-400-italic.ttf +0 -0
  222. package/fonts/ttf/helvetica-400-normal.ttf +0 -0
  223. package/fonts/ttf/helvetica-700-italic.ttf +0 -0
  224. package/fonts/ttf/helvetica-700-normal.ttf +0 -0
  225. package/fonts/ttf/helvetica-neue-400-italic.ttf +0 -0
  226. package/fonts/ttf/helvetica-neue-400-normal.ttf +0 -0
  227. package/fonts/ttf/helvetica-neue-700-italic.ttf +0 -0
  228. package/fonts/ttf/helvetica-neue-700-normal.ttf +0 -0
  229. package/fonts/ttf/hoefler-text-400-italic.ttf +0 -0
  230. package/fonts/ttf/hoefler-text-400-normal.ttf +0 -0
  231. package/fonts/ttf/hoefler-text-700-italic.ttf +0 -0
  232. package/fonts/ttf/hoefler-text-700-normal.ttf +0 -0
  233. package/fonts/ttf/lucida-grande-400-normal.ttf +0 -0
  234. package/fonts/ttf/lucida-grande-700-normal.ttf +0 -0
  235. package/fonts/ttf/lucida-sans-400-italic.ttf +0 -0
  236. package/fonts/ttf/lucida-sans-400-normal.ttf +0 -0
  237. package/fonts/ttf/lucida-sans-700-italic.ttf +0 -0
  238. package/fonts/ttf/lucida-sans-700-normal.ttf +0 -0
  239. package/fonts/ttf/lucida-sans-unicode-400-normal.ttf +0 -0
  240. package/fonts/ttf/malgun-gothic-400-normal.ttf +0 -0
  241. package/fonts/ttf/malgun-gothic-700-normal.ttf +0 -0
  242. package/fonts/ttf/mangal-400-normal.ttf +0 -0
  243. package/fonts/ttf/mangal-700-normal.ttf +0 -0
  244. package/fonts/ttf/microsoft-sans-serif-400-normal.ttf +0 -0
  245. package/fonts/ttf/microsoft-yahei-400-normal.ttf +0 -0
  246. package/fonts/ttf/microsoft-yahei-700-normal.ttf +0 -0
  247. package/fonts/ttf/microsoft-yi-baiti-400-normal.ttf +0 -0
  248. package/fonts/ttf/monotype-sorts-400-normal.ttf +0 -0
  249. package/fonts/ttf/ms-gothic-400-normal.ttf +0 -0
  250. package/fonts/ttf/ms-mincho-400-normal.ttf +0 -0
  251. package/fonts/ttf/ms-ui-gothic-400-normal.ttf +0 -0
  252. package/fonts/ttf/new-york-400-italic.ttf +0 -0
  253. package/fonts/ttf/new-york-400-normal.ttf +0 -0
  254. package/fonts/ttf/news-gothic-mt-400-italic.ttf +0 -0
  255. package/fonts/ttf/news-gothic-mt-400-normal.ttf +0 -0
  256. package/fonts/ttf/news-gothic-mt-700-italic.ttf +0 -0
  257. package/fonts/ttf/news-gothic-mt-700-normal.ttf +0 -0
  258. package/fonts/ttf/nsimsun-400-normal.ttf +0 -0
  259. package/fonts/ttf/optima-400-italic.ttf +0 -0
  260. package/fonts/ttf/optima-400-normal.ttf +0 -0
  261. package/fonts/ttf/optima-700-italic.ttf +0 -0
  262. package/fonts/ttf/optima-700-normal.ttf +0 -0
  263. package/fonts/ttf/palatino-400-italic.ttf +0 -0
  264. package/fonts/ttf/palatino-400-normal.ttf +0 -0
  265. package/fonts/ttf/palatino-700-italic.ttf +0 -0
  266. package/fonts/ttf/palatino-700-normal.ttf +0 -0
  267. package/fonts/ttf/palatino-linotype-400-italic.ttf +0 -0
  268. package/fonts/ttf/palatino-linotype-400-normal.ttf +0 -0
  269. package/fonts/ttf/palatino-linotype-700-italic.ttf +0 -0
  270. package/fonts/ttf/palatino-linotype-700-normal.ttf +0 -0
  271. package/fonts/ttf/pmingliu-400-normal.ttf +0 -0
  272. package/fonts/ttf/pt-mono-400-normal.ttf +0 -0
  273. package/fonts/ttf/pt-mono-700-normal.ttf +0 -0
  274. package/fonts/ttf/segoe-ui-symbol-400-normal.ttf +0 -0
  275. package/fonts/ttf/simsun-400-normal.ttf +0 -0
  276. package/fonts/ttf/skia-400-normal.ttf +0 -0
  277. package/fonts/ttf/stencil-400-normal.ttf +0 -0
  278. package/fonts/ttf/symbol-400-normal.ttf +0 -0
  279. package/fonts/ttf/tahoma-400-normal.ttf +0 -0
  280. package/fonts/ttf/tahoma-700-normal.ttf +0 -0
  281. package/fonts/ttf/times-400-italic.ttf +0 -0
  282. package/fonts/ttf/times-400-normal.ttf +0 -0
  283. package/fonts/ttf/times-700-italic.ttf +0 -0
  284. package/fonts/ttf/times-700-normal.ttf +0 -0
  285. package/fonts/ttf/times-new-roman-400-italic.ttf +0 -0
  286. package/fonts/ttf/times-new-roman-400-normal.ttf +0 -0
  287. package/fonts/ttf/times-new-roman-700-italic.ttf +0 -0
  288. package/fonts/ttf/times-new-roman-700-normal.ttf +0 -0
  289. package/fonts/ttf/trebuchet-ms-400-italic.ttf +0 -0
  290. package/fonts/ttf/trebuchet-ms-400-normal.ttf +0 -0
  291. package/fonts/ttf/trebuchet-ms-700-italic.ttf +0 -0
  292. package/fonts/ttf/trebuchet-ms-700-normal.ttf +0 -0
  293. package/fonts/ttf/tw-cen-mt-400-normal.ttf +0 -0
  294. package/fonts/ttf/tw-cen-mt-700-normal.ttf +0 -0
  295. package/fonts/ttf/tw-cen-mt-condensed-400-normal.ttf +0 -0
  296. package/fonts/ttf/tw-cen-mt-condensed-700-normal.ttf +0 -0
  297. package/fonts/ttf/verdana-400-italic.ttf +0 -0
  298. package/fonts/ttf/verdana-400-normal.ttf +0 -0
  299. package/fonts/ttf/verdana-700-italic.ttf +0 -0
  300. package/fonts/ttf/verdana-700-normal.ttf +0 -0
  301. package/fonts/ttf/webdings-400-normal.ttf +0 -0
  302. package/fonts/ttf/wingdings-2-400-normal.ttf +0 -0
  303. package/fonts/ttf/wingdings-3-400-normal.ttf +0 -0
  304. package/fonts/ttf/wingdings-400-normal.ttf +0 -0
  305. package/fonts/ttf/yu-gothic-light-400-normal.ttf +0 -0
  306. package/fonts/ttf/yu-mincho-400-normal.ttf +0 -0
  307. package/fonts/ttf/yu-mincho-700-normal.ttf +0 -0
  308. package/package.json +63 -0
@@ -0,0 +1,251 @@
1
+ import type { StyledParagraph, PageSetup, ListInfo, TableInfo, BodyBlock } from '../../docx-model/src/index';
2
+ import { type Footnotes, type ImageMap, type ImageRect, type LineTrace, type MarkRect, type PlacedTextBox, type RowTrace, type RuleTrace, type SectionParts, type TableRect } from './types';
3
+ export interface RenderInput extends RenderOptions {
4
+ /** Où accrocher les `<canvas>`. Inutile si `newPage` est fourni. */
5
+ container?: HTMLElement;
6
+ paragraphs: StyledParagraph[];
7
+ page: PageSetup;
8
+ blocks: BodyBlock[];
9
+ tables: TableInfo[];
10
+ numbering?: (ListInfo | undefined)[];
11
+ /**
12
+ * Sections du document. Sans elles, un document multi-sections se rend
13
+ * entièrement au format de la première — marges, orientation et colonnes des
14
+ * suivantes sont perdues.
15
+ */
16
+ sections?: PageSetup[];
17
+ /** Les notes de bas de page, si le document en a. */
18
+ footnotes?: Footnotes;
19
+ /**
20
+ * Où chaque note atterrit, relevé par la PASSE DE MESURE.
21
+ *
22
+ * Une note se pose au bas de la page où tombe son renvoi, et cette place
23
+ * enlevée au corps déplace le renvoi lui-même : c'est un point fixe. On le
24
+ * résout en composant deux fois — la première dit les pages, la seconde
25
+ * réserve la place. Une seule itération : c'est ce que fait Word dans les
26
+ * cas simples, et les quatre documents à notes du corpus en sont.
27
+ */
28
+ notesOnPage?: Map<number, number[]>;
29
+ }
30
+ export interface RenderOptions {
31
+ /** Chaque changement de page ou de colonne, avec sa cause — voir `DrawCtx.onBreak`. */
32
+ onBreak?(b: {
33
+ page: number;
34
+ y: number;
35
+ cause: string;
36
+ bloc?: number;
37
+ }): void;
38
+ headerDistPt?: number;
39
+ footerDistPt?: number;
40
+ firstPageHeader?: StyledParagraph[];
41
+ defaultHeader?: StyledParagraph[];
42
+ defaultFooter?: StyledParagraph[];
43
+ /**
44
+ * En-têtes/pieds par section, indexés comme `sections`.
45
+ *
46
+ * Word laisse chaque section déclarer les siens, et une section muette hérite
47
+ * de la précédente. N'utiliser que ceux de la première section coûtait 30 pt
48
+ * en haut de chaque page dès la deuxième sur Colo 2 : sa section 1 pose son
49
+ * en-tête à 0 pt du bord, les suivantes à 36 pt.
50
+ */
51
+ sectionParts?: SectionParts[];
52
+ images?: ImageMap;
53
+ /**
54
+ * Appelé pour chaque morceau dessiné d'un run marqué.
55
+ *
56
+ * Un run coupé par un retour à la ligne produit plusieurs rectangles ; c'est
57
+ * à l'appelant de les réunir. Le renderer ne sait pas ce que le marqueur
58
+ * désigne et n'a pas à le savoir.
59
+ */
60
+ onMark?(rect: MarkRect): void;
61
+ /**
62
+ * Trace de layout — appelé pour chaque ligne dessinée.
63
+ *
64
+ * Permet de comparer les positions calculées par le renderer avec celles
65
+ * extraites du PDF Word (pdftotext -bbox), sans passer par le pixel diff.
66
+ */
67
+ onLine?(line: LineTrace): void;
68
+ /**
69
+ * Appelé pour chaque image dessinée, avec son rectangle.
70
+ *
71
+ * Une image n'occupe aucun caractère : le hit-test du texte ne la trouvera
72
+ * jamais. Sans ce rectangle elle est invisible à la souris.
73
+ */
74
+ onImage?(rect: ImageRect): void;
75
+ /**
76
+ * Appelé pour chaque page qu'un tableau occupe, avec son rectangle.
77
+ *
78
+ * Un tableau ne s'attrape pas par son texte — le curseur y tombe toujours
79
+ * dans une cellule. C'est ce rectangle qui permet de le prendre comme un tout.
80
+ */
81
+ onTable?(rect: TableRect): void;
82
+ /**
83
+ * Publier aussi les lignes vides dans la trace.
84
+ *
85
+ * L'éditeur en a besoin pour poser un curseur sur une ligne vide ; le banc de
86
+ * mesure ne doit PAS les voir, il apparie ses lignes par le texte.
87
+ */
88
+ traceEmpty?: boolean;
89
+ /** Chaque TRAIT dessiné — voir `RuleTrace`. */
90
+ onRule?(rule: RuleTrace): void;
91
+ onRow?(row: RowTrace): void;
92
+ /** Passe de MESURE seulement : sur quelle page tombe le renvoi de la note n. */
93
+ onFootnoteAt?(n: number, page: number): void;
94
+ /** w:defaultTabStop du document, en points */
95
+ defaultTabPt?: number;
96
+ /** `w:doNotExpandShiftReturn` — voir `DrawCtx` */
97
+ noExpandShiftReturn?: boolean;
98
+ /** compatibilityMode < 15 — voir `DrawCtx` */
99
+ legacyWrap?: boolean;
100
+ /** `w:ulTrailSpace` — voir `DrawCtx` */
101
+ ulTrailSpace?: boolean;
102
+ /**
103
+ * Zones de texte ancrées, indexées par le paragraphe qui les porte.
104
+ *
105
+ * Word les pose à leurs coordonnées, hors du fil. Les ignorer perdait leur
106
+ * contenu — et sur un contrat, l'absence d'un bloc décalait la frontière de
107
+ * page qui suit, donc tout le reste du document.
108
+ */
109
+ textBoxes?: PlacedTextBox[];
110
+ /**
111
+ * Hauteurs de ligne par police, lues dans les fichiers réellement servis.
112
+ *
113
+ * Une table écrite à la main laisse toujours une police dehors, et celle-là
114
+ * compose 6 % trop court sans que rien ne le signale.
115
+ */
116
+ lineRatios?: Record<string, number>;
117
+ /**
118
+ * Première page à REPEINDRE, 1-based. Les précédentes gardent leurs pixels.
119
+ *
120
+ * Une frappe au milieu d'un document ne change rien à ce qui la précède : la
121
+ * mise en page y est déterministe et ne dépend que du contenu d'avant. On la
122
+ * calcule donc quand même — il faut bien savoir où l'on en est — mais on ne
123
+ * la peint pas.
124
+ *
125
+ * Mesuré sur une trace de session réelle : `fillText` pesait 915 ms et le
126
+ * téléversement des textures 680 ms de plus, pour neuf pages redessinées à
127
+ * chaque lettre.
128
+ *
129
+ * L'appelant est responsable de n'en profiter que quand c'est vrai : la page
130
+ * doit être celle où commence le paragraphe modifié, et un changement du
131
+ * NOMBRE de pages oblige à tout repeindre (les pieds portent « page X sur Y »).
132
+ */
133
+ paintFrom?: number;
134
+ /**
135
+ * Reprise incrémentale : ne recomposer qu'à partir de la page modifiée.
136
+ *
137
+ * L'appelant crée l'objet une fois et le REND tel quel à chaque composition —
138
+ * le renderer y range ses points de reprise et y écrit ce qu'il a refait.
139
+ */
140
+ resume?: ResumeState;
141
+ /**
142
+ * Facteur correctif Canvas→hmtx par police.
143
+ *
144
+ * Canvas mesure les glyphes ~1% plus large que les avances du TTF. Ce
145
+ * facteur corrige la mesure des tokens pour la césure.
146
+ */
147
+ widthCorrections?: Record<string, number>;
148
+ /**
149
+ * Nombre de pages maximal. Quand le renderer veut créer une page de plus,
150
+ * il la saute et continue sur la page courante (le contenu peut déborder
151
+ * dans la marge basse).
152
+ *
153
+ * C'est un GARDE-FOU, pas un alignement : le régler sur le compte de pages
154
+ * de Word rendait toute erreur de pagination invisible, le surplus étant
155
+ * peint par-dessus la dernière page au lieu d'en ouvrir une. Le banc y met
156
+ * le double plus cinq.
157
+ */
158
+ maxPages?: number;
159
+ /**
160
+ * Fabrique la surface d'une page, à la place d'un `<canvas>` du DOM.
161
+ *
162
+ * Le moteur n'a besoin du navigateur que pour DESSINER ; toutes ses décisions
163
+ * de mise en page passent par `measureText`. En laissant l'appelant fournir
164
+ * la surface, le même code compose un document dans Node — sans Vite, sans
165
+ * Chrome, sans capture d'écran — contre une surface qui mesure les glyphes
166
+ * dans les TTF servis et jette la peinture.
167
+ *
168
+ * Mesuré : 200 documents du corpus, 63 ms chacun contre 730 ms par le
169
+ * navigateur, pour une mise en page identique à 0,225 pt près en médiane —
170
+ * cent pour cent des lignes dans la tolérance de 2 pt du banc.
171
+ */
172
+ newPage?(wPx: number, hPx: number, dpr: number): CanvasRenderingContext2D;
173
+ /** Densité de la surface. `window.devicePixelRatio` par défaut. */
174
+ devicePixelRatio?: number;
175
+ }
176
+ /** Tout ce qu'il faut pour reprendre — ou reconnaître — une mise en page. */
177
+ interface LayoutState {
178
+ y: number;
179
+ page: number;
180
+ block: number;
181
+ /** Rang de tableau où l'on en est — 0 hors tableau. */
182
+ row: number;
183
+ /** Premier paragraphe qui reste à composer. */
184
+ para: number;
185
+ bodyStart: number;
186
+ sectionIdx: number;
187
+ /**
188
+ * Section sous laquelle la PAGE a été ouverte — pas forcément la section
189
+ * courante : une rupture continue peut changer de section au milieu d'une
190
+ * feuille, et c'est l'en-tête et le pied de l'OUVERTURE qui y sont posés.
191
+ */
192
+ pageSect: number;
193
+ /**
194
+ * Première page de la section — `applySection` la recalcule depuis
195
+ * `pageCount`, ce qui est FAUX à la reprise : on reprend au milieu d'une
196
+ * section et sa vraie première page est plus haut. `balanceFrom` s'en sert
197
+ * (`pageCount > sectionStartPage`), donc l'équilibrage des colonnes changeait
198
+ * et le document rendait deux lignes de moins qu'en composition complète.
199
+ */
200
+ sectionStartPage: number;
201
+ balancedBottom: number | undefined;
202
+ wrapFloor: number | undefined;
203
+ prevSpaceAfter: number | undefined;
204
+ prevStyleId: string | undefined;
205
+ prevContextual: boolean | undefined;
206
+ }
207
+ export interface ResumeState {
208
+ /** Paragraphe modifié. La composition reprend juste avant lui. */
209
+ at?: number;
210
+ /**
211
+ * Points de REPRISE : paragraphe → état au SOMMET de la page qu'il ouvre.
212
+ *
213
+ * Indexés par PARAGRAPHE et non par bloc : un contrat de 42 pages ne compte
214
+ * que dix blocs, ses tableaux enjambant les pages par dizaines. Un rang de
215
+ * tableau est un point de reprise comme un autre.
216
+ *
217
+ * Seuls les sommets de page en sont : reprendre à mi-page voudrait dire
218
+ * effacer ce qui vient dessous, et un rectangle ne sait pas distinguer la
219
+ * queue d'un jambage de l'encre qu'on remplace — la rangée du point de reprise
220
+ * n'était jamais tout à fait la bonne. Une page se reprend donc entière,
221
+ * en-tête compris.
222
+ */
223
+ snaps?: Map<number, LayoutState>;
224
+ /**
225
+ * Points de CONVERGENCE : page → état juste avant de l'ouvrir. Y retomber
226
+ * signifie que cette page et toutes les suivantes sont déjà à l'écran.
227
+ */
228
+ bounds?: Map<number, LayoutState>;
229
+ /** Nombre de blocs et de pages de la composition précédente. */
230
+ blocks?: number;
231
+ pages?: number;
232
+ /**
233
+ * Première et dernière page réellement recomposées — écrites par le renderer.
234
+ *
235
+ * Les pages de cet intervalle sont refaites ENTIÈREMENT, en-tête et pied
236
+ * compris ; celles d'avant et d'après gardent leurs pixels et leur trace.
237
+ */
238
+ from?: number;
239
+ to?: number;
240
+ }
241
+ /** Compose le document dans le conteneur et renvoie le nombre de pages. */
242
+ /**
243
+ * Compose le document dans le conteneur et renvoie le nombre de pages.
244
+ *
245
+ * Un document À NOTES est composé DEUX FOIS : la première pour savoir sur
246
+ * quelle page tombe chaque renvoi, la seconde pour réserver la place des notes
247
+ * au bas de ces pages-là. Un document sans notes — 1332 des 1336 du corpus —
248
+ * ne passe pas par là et ne paie rien.
249
+ */
250
+ export declare function render(input: RenderInput): number;
251
+ export {};
@@ -0,0 +1,15 @@
1
+ import type { ListInfo, StyledParagraph, TableInfo } from '../../docx-model/src/index';
2
+ import { type DrawCtx } from './types';
3
+ export declare function drawTable(dc: DrawCtx, table: TableInfo, paras: StyledParagraph[], paraStart: number,
4
+ /** Reprise : premier rang à composer, et le paragraphe où il commence. */
5
+ fromRow?: number, fromPara?: number,
6
+ /**
7
+ * Marqueurs de liste du document, indexés comme `paras`.
8
+ *
9
+ * Une cellule contient des paragraphes comme les autres, et rien n'empêche
10
+ * qu'ils soient numérotés. Ne pas les transmettre coûtait la puce ET le
11
+ * décalage du texte qu'elle entraîne : sur « Vanished », dont tout le corps
12
+ * tient dans une cellule, cinq « a) » manquaient et chaque paragraphe
13
+ * numéroté partait un mot en avance sur celui de Word jusqu'à sa fin.
14
+ */
15
+ numbering?: Array<ListInfo | undefined>): void;
@@ -0,0 +1,396 @@
1
+ import { type RunStyle, type StyledParagraph, type ListInfo } from '../../docx-model/src/index';
2
+ import { type ImageMap, type PageNums } from './types';
3
+ /**
4
+ * Composition d'une ligne : mesure des glyphes, découpage en unités
5
+ * insécables, et les quelques règles de Word qui s'y appliquent.
6
+ */
7
+ /**
8
+ * Échelle horizontale d'un run (`w:rPr/w:w`), en facteur.
9
+ *
10
+ * Word resserre ou étire chaque glyphe SANS toucher à sa hauteur. Le canvas ne
11
+ * l'exprime pas directement : on corrige les largeurs mesurées, ce qui suffit
12
+ * à la césure et au placement — le DESSIN reste à l'échelle 1, faute de quoi
13
+ * il faudrait une transformation par jeton.
14
+ */
15
+ export declare const scaleOf: (style: Partial<RunStyle>) => number;
16
+ export declare function canvasFont(style: Partial<RunStyle>, def: {
17
+ font: string;
18
+ sizePt: number;
19
+ }): string;
20
+ /**
21
+ * Pose police ET interlettrage d'un coup.
22
+ *
23
+ * `ctx.letterSpacing` est rémanent : le laisser d'un jeton à l'autre teintait
24
+ * tout le reste de la ligne. On le remet donc à zéro par défaut.
25
+ */
26
+ export declare function setFont(ctx: CanvasRenderingContext2D, font: string, ls?: string): void;
27
+ export declare function alignX(align: string | undefined, left: number, avail: number, w: number): number;
28
+ /**
29
+ * Les seize valeurs de `w:highlight`, plus `white`.
30
+ *
31
+ * `white` et `none` ne sont pas des absences : ce sont des valeurs légales que
32
+ * Word peint (ou non) sans rien changer à l'œil. Une valeur inconnue ne peint
33
+ * rien non plus — inventer une couleur, c'est afficher une information que le
34
+ * document ne porte pas. `dev-fixture.docx` porte `white` sur 194 de ses 202
35
+ * runs : avec un défaut jaune, la page entière était surlignée.
36
+ */
37
+ export declare const HL_COLORS: Record<string, string>;
38
+ export interface Tok {
39
+ /**
40
+ * Largeur sans l'espace finale.
41
+ *
42
+ * Word ne compte pas l'espace de fin de ligne quand il décide du retour :
43
+ * « mot » suivi d'une espace tient là où « mot␣ » déborderait.
44
+ */
45
+ inkWidth?: number;
46
+ /**
47
+ * Ce jeton prolonge le précédent au sein d'un même mot : aucune coupure
48
+ * n'est permise entre les deux.
49
+ *
50
+ * Word découpe ses runs où il veut — au gré des révisions et du correcteur
51
+ * orthographique — et une frontière de run tombe au milieu d'un mot une fois
52
+ * sur quatre dans ces matrices : « Sal|a|rié.e », « l|’|exploitation »,
53
+ * « stipul|e ». Chacune était pour nous une occasion de couper la ligne là
54
+ * où Word ne le ferait jamais.
55
+ */
56
+ noBreakBefore?: boolean;
57
+ text: string;
58
+ width: number;
59
+ font: string;
60
+ color: string;
61
+ /**
62
+ * `w:rPr/w:w` — l'échelle HORIZONTALE des glyphes, en fraction.
63
+ *
64
+ * Elle était appliquée à la MESURE (`scaleOf` dans `corr`) et pas au DESSIN :
65
+ * l'avance valait 90 % de la largeur naturelle, les glyphes 100 %, et les
66
+ * mots se recouvraient. 268 documents du corpus la posent, 97 433 fois, et
67
+ * `MATRICES QUAD ETE 36` en avait 209 lignes sur 304 illisibles — que le banc
68
+ * de référence comptait PLACÉES, puisqu'il ne lit que le texte et l'abscisse
69
+ * de départ.
70
+ */
71
+ scaleX?: number;
72
+ sizePx: number;
73
+ underline: boolean;
74
+ strike: boolean;
75
+ highlight?: string;
76
+ /** `w:lvlPicBulletId` — puce IMAGE : on peint le bitmap au lieu du glyphe */
77
+ markerBitmap?: CanvasImageSource;
78
+ markerImageSize?: {
79
+ w: number;
80
+ h: number;
81
+ };
82
+ /** `w:bdr` — cadre autour du run ; les jetons voisins qui le partagent n'en font qu'un */
83
+ border?: RunStyle['border'];
84
+ lineBreak?: boolean;
85
+ /** `w:br w:type="page"` ou `"column"` — force une nouvelle page/colonne */
86
+ pageBreak?: boolean;
87
+ /** `w:br w:type="column"` — passe à la colonne suivante, pas à la page */
88
+ columnBreak?: boolean;
89
+ /** puce ou numéro de liste — un mot à part, jamais collé au texte qui suit */
90
+ isListMarker?: boolean;
91
+ /**
92
+ * Texte réellement DESSINÉ, s'il diffère de la source.
93
+ *
94
+ * En petites capitales, Word compose des CAPITALES à deux corps : c'est cela
95
+ * qu'un lecteur voit et que `pdftotext` extrait. Publier la source dans la
96
+ * trace faisait compter chaque titre comme absent — dix lignes sur soixante
97
+ * rien qu'en page 6 de Colo 2 — alors qu'il était dessiné au bon endroit.
98
+ * On garde la source pour MESURER (elle seule dit quelles lettres sont
99
+ * petites) et on publie la forme dessinée.
100
+ */
101
+ drawnText?: string;
102
+ /** rang de l'image dans son paragraphe — le même que celui du contexte */
103
+ imgIndex?: number;
104
+ /**
105
+ * Image EN LIGNE : occupe sa place dans le fil, qu'on sache la peindre ou non.
106
+ *
107
+ * `bitmap` est FACULTATIF, et c'est tout l'intérêt. Ses dimensions viennent
108
+ * de `wp:extent`, donc du document — pas du fichier image. Ne poser le jeton
109
+ * que lorsqu'on avait su décoder les pixels faisait qu'une image illisible
110
+ * (EMF et WMF, que Word sème partout, et toute image sur un chemin sans
111
+ * décodeur) ne réservait AUCUNE place : le logo d'un en-tête disparaissait et
112
+ * le corps remontait de sa hauteur — sur toutes les pages du document.
113
+ */
114
+ image?: {
115
+ bitmap?: ImageBitmap;
116
+ widthPx: number;
117
+ heightPx: number;
118
+ crop?: {
119
+ l: number;
120
+ t: number;
121
+ r: number;
122
+ b: number;
123
+ };
124
+ };
125
+ /** boîte réservée pour un affichage tiers : occupe la place, ne peint rien */
126
+ box?: boolean;
127
+ /** tabulation : largeur calculée à la position de dessin (prochain tab stop) */
128
+ isTab?: boolean;
129
+ /** `w:ptab` — la position du taquet est ABSOLUE, pas cherchée dans la liste */
130
+ ptabAlign?: 'center' | 'right';
131
+ /** marqueur du run d'origine, recopié tel quel */
132
+ mark?: string;
133
+ /** petites capitales : police réduite pour les lettres qui étaient minuscules */
134
+ fontSmall?: string;
135
+ /** exposant/indice : décalage vertical en px (négatif = vers le haut) */
136
+ rise?: number;
137
+ /**
138
+ * Rang du premier caractère de ce jeton dans le TEXTE du paragraphe.
139
+ *
140
+ * C'est l'adresse du modèle (`runSpans`), pas un rang de jeton : elle survit
141
+ * au découpage en mots, à la césure et aux frontières de run. C'est elle qui
142
+ * permet de rendre un clic sous forme de position éditable — sans elle, le
143
+ * renderer sait où il a dessiné, mais pas QUOI.
144
+ *
145
+ * `undefined` quand le jeton ne correspond à aucun caractère du modèle : le
146
+ * marqueur d'une liste, un champ dont on a recalculé la valeur, une boîte
147
+ * d'extension. Un curseur ne s'y pose pas.
148
+ */
149
+ off?: number;
150
+ /** interlettrage CSS (`w:rPr/w:spacing`), ex. `0.13px` */
151
+ letterSpacing?: string;
152
+ }
153
+ /**
154
+ * Word compose exposants et indices à 65 % du corps, l'exposant remonté d'un
155
+ * tiers du corps et l'indice descendu d'un sixième. Les rendre en taille pleine
156
+ * élargit la ligne — « L1242-3ᵉ » débordait et cassait la césure une syllabe
157
+ * trop tôt, décalant tout le paragraphe.
158
+ */
159
+ export declare const VERT_ALIGN_RATIO = 0.65;
160
+ export declare const SUPER_RISE: number;
161
+ export declare const SUB_RISE: number;
162
+ /**
163
+ * Resserrement des espaces qu'on refuse quoi qu'il arrive.
164
+ *
165
+ * Le choix du moindre mal (voir `keepsWord`) suffit presque toujours ; ce
166
+ * plafond n'est là que pour les lignes à deux ou trois espaces, où le rapport
167
+ * des distorsions n'a plus de sens et où Word renvoie le mot sans discuter.
168
+ */
169
+ export declare const MAX_SHRINK = 0.25;
170
+ /**
171
+ * Débordement TOLÉRÉ sur une ligne non justifiée, en points.
172
+ *
173
+ * Le texte aligné à gauche coupe au dernier mot qui tient, sans marchander —
174
+ * mais « tient » se juge avec NOS largeurs, qui s'écartent de celles de Word de
175
+ * quelques dixièmes de pour cent (`widthtail.ts` : q05 0,9997, q95 1,0005).
176
+ * Un mot qui déborde de deux points sur une colonne de 550 déborde de 0,4 %,
177
+ * c'est-à-dire de rien. L'hypothèse était donc qu'une tolérance ABSOLUE
178
+ * absorberait l'écart de mesure sans marchander comme le fait le justifié.
179
+ *
180
+ * MESURÉE ET PERDANTE, sur les 400 documents :
181
+ *
182
+ * DEUX FORMES essayées, les deux perdantes sur les 400 documents.
183
+ *
184
+ * En POINTS : 0 -> 39,15 · 1 -> 38,97 · 2 -> 38,96 · 3 -> 38,55 (pondéré ligne)
185
+ * En EM : 0 -> 39,15 · 0,10 -> 38,91 · 0,20 -> 38,75 · 0,30 -> 38,53
186
+ *
187
+ * Décroissance monotone dans les deux cas. Et on sait maintenant POURQUOI, ce
188
+ * qui est plus utile que le chiffre.
189
+ *
190
+ * Sur la ligne qui a lancé l'enquête — « CONTRAT CASCADEURS », douze blocs
191
+ * cassés un mot trop tôt :
192
+ *
193
+ * somme des avances de Word 554,31 pt
194
+ * la même chaîne chez nous 554,41 pt (0,02 % d'écart : nos métriques
195
+ * sont exactes, voir `advdiff.ts`)
196
+ * colonne de la cellule 551,70 pt
197
+ * ENCRE de la ligne chez Word 551,70 pt
198
+ *
199
+ * Word dépasse sa colonne de 2,61 pt en AVANCE et la remplit exactement en
200
+ * ENCRE. **Il coupe donc sur l'encre, nous sur l'avance** — la différence est
201
+ * l'approche du premier et du dernier glyphe, qui pend dans la marge.
202
+ *
203
+ * Une tolérance, plate ou proportionnelle, accorde cette permission à TOUTES
204
+ * les lignes ; Word ne l'accorde qu'à celles dont le dernier glyphe a vraiment
205
+ * une approche à donner. D'où la décroissance monotone : on garde plus de mots
206
+ * à tort qu'à raison.
207
+ *
208
+ * Le correctif juste demanderait la BOÎTE D'ENCRE du dernier glyphe —
209
+ * `glyf`/`CFF` dans `advances.ts`, que le mesureur ne lit pas. Gardé à zéro
210
+ * avec sa mesure, et la piste nommée.
211
+ */
212
+ export declare const TOL_MESURE_EM = 0;
213
+ /**
214
+ * Resserrement toléré sur la DERNIÈRE ligne d'un paragraphe.
215
+ *
216
+ * Elle n'est pas justifiée : rien ne viendra rattraper un dépassement, il
217
+ * sortira tel quel dans la marge. Le budget y est donc bien plus étroit
218
+ * qu'ailleurs — mais pas nul, car nos largeurs naturelles s'écartent de celles
219
+ * de Word de quelques dixièmes de point sur une ligne pleine.
220
+ *
221
+ * La valeur venait de DEUX observations : Colo 2, « Additionnels »). » demande
222
+ * 24 % et Word le renvoie ; l'Avenant, « d'essai. » demande 8 % et Word le
223
+ * garde. Deux points ne font pas une courbe, et le 0,15 qu'ils suggéraient
224
+ * était loin de l'optimum.
225
+ *
226
+ * BALAYÉ sur les 400 documents du banc :
227
+ *
228
+ * valeur par document pondéré ligne
229
+ * 0,05 41,82 34,94
230
+ * 0,15 43,47 36,84 ← les deux observations
231
+ * 0,20 44,61 37,89
232
+ * 0,23 45,30 38,96
233
+ * 0,25 45,26 39,08 ← pic
234
+ * 0,26 44,69 38,56
235
+ * 0,28 43,47 37,41
236
+ * 0,32 42,38 36,00
237
+ * 0,40 40,48 34,07
238
+ *
239
+ * Word tolère donc BEAUCOUP plus de resserrement sur une dernière ligne qu'on
240
+ * ne le croyait — un quart, pas un septième. Et les deux constantes
241
+ * interagissent : `STRETCH_RATIO` a été rebalayé à cette valeur et reste à
242
+ * 0,50 (0,45 donne 38,35, 0,55 donne 38,34). Le couple est un optimum conjoint.
243
+ *
244
+ * 60 documents en hausse, 33 en baisse, et AUCUN des 33 ne change de
245
+ * pagination — ce sont des déplacements de lignes, pas des ruptures. Les
246
+ * documents au bon nombre de pages passent de 306 à 308.
247
+ */
248
+ export declare const FINAL_LINE_SHRINK = 0.25;
249
+ /**
250
+ * Découpage GLOBAL des paragraphes justifiés — voir `optimalBreaks`.
251
+ *
252
+ * MESURÉ, ET PERDANT. `optimalBreaks` est vérifié correct (test synthétique) et
253
+ * ses coupures sont plausibles, mais il reproduit Word NETTEMENT moins bien que
254
+ * le glouton `keepsWord`, et pour toute pénalité :
255
+ *
256
+ * glouton pén. 0,1 pén. 1,0 pén. 4,5
257
+ * Colo 2 95,95 37,6 38,2 45,1
258
+ * FIEF 96,42 66,6 72,5 80,3
259
+ * Stagiaire 95,54 71,4 71,4 79,7
260
+ *
261
+ * L'écart est structurel : le modèle global échange une bonne ligne contre une
262
+ * meilleure suivante, Word non — il coupe au dernier mot qui tient et ne
263
+ * marchande QUE le resserrement de la ligne courante. Les brevets décrivent un
264
+ * optimiseur global ; ce Word-là ne l'applique pas au découpage des lignes.
265
+ *
266
+ * REVÉRIFIÉ sur les 400 documents du banc, avec les constantes recalibrées —
267
+ * les trois chiffres ci-dessus venaient de TROIS documents :
268
+ *
269
+ * glouton 45,27 par document, 39,15 pondéré ligne
270
+ * global, pénalité 1,0 37,05 30,50
271
+ * global, pénalité 4,5 39,44 32,50
272
+ * global, pénalité 12 38,16 31,51
273
+ *
274
+ * Six points et demi d'écart à l'optimum du global. La réfutation tient, et
275
+ * elle tient maintenant sur le corpus.
276
+ *
277
+ * Gardé désactivé plutôt que supprimé : c'est la TROISIÈME tentative de modèle
278
+ * global, et sans cette mesure il y en aura une quatrième.
279
+ */
280
+ export declare const OPTIMAL_WRAP = false;
281
+ export declare const SHRINK_PENALTY = 4.5;
282
+ /**
283
+ * Étirement en deçà duquel Word ne resserre jamais.
284
+ *
285
+ * Une ligne justifiée trop courte s'étire, une ligne trop longue se resserre.
286
+ * Word ne marchande pas : il coupe au dernier mot qui tient et étire. Il ne
287
+ * resserre que lorsque l'étirement deviendrait grotesque.
288
+ *
289
+ * Deux décisions de Word sur Colo 2, au resserrement quasi identique et
290
+ * pourtant opposées, situent la frontière sur l'ÉTIREMENT et non sur le
291
+ * resserrement :
292
+ *
293
+ * « L7124- » resserrer 13,7 % ou étirer 159,6 % → Word garde
294
+ * « ceux » resserrer 15,1 % ou étirer 22,9 % → Word renvoie
295
+ */
296
+ export declare const MIN_STRETCH = 0;
297
+ /**
298
+ * Part de l'étirement en deçà de laquelle le resserrement l'emporte.
299
+ *
300
+ * `bench trace --rule` balayait la famille « plafond × ratio » sur les 116
301
+ * décisions de Colo 2 : le maximum y était à 0,75 (87,1 % de bonne
302
+ * classification) contre 1,00 (86,2 %). Word penche donc du côté du renvoi.
303
+ *
304
+ * REBALAYÉ sur les 400 documents du banc, ce qui est un tout autre échantillon
305
+ * que 116 décisions d'un seul contrat :
306
+ *
307
+ * ratio par document pondéré ligne
308
+ * 0,40 41,41 34,88
309
+ * 0,47 42,79 36,41 ← la valeur précédente
310
+ * 0,49 43,10 36,62
311
+ * 0,50 43,47 36,84 ← pic, les deux axes d'accord
312
+ * 0,51 43,37 36,76
313
+ * 0,52 43,20 36,52
314
+ * 0,55 42,95 36,24
315
+ * 0,65 42,04 35,34
316
+ *
317
+ * Courbe lisse, pic unique, voisins immédiats en dessous : c'est un optimum et
318
+ * non un accident de grille. 83 documents en hausse, 6 en baisse.
319
+ *
320
+ * Son voisin `MAX_SHRINK` a été balayé du même coup et reste à 0,25 : 0,20
321
+ * donne 33,33 et 0,30 donne 34,69 en pondéré ligne, contre 36,84. Le plafond
322
+ * est déjà juste, et il est RAIDE — un vingtième coûte un à trois points.
323
+ */
324
+ export declare const STRETCH_RATIO = 0.5;
325
+ /**
326
+ * Word garde-t-il ce mot sur la ligne, au prix d'un resserrement ?
327
+ *
328
+ * Oui si le resserrement demandé est PLUS FAIBLE que l'étirement qu'imposerait
329
+ * son renvoi — mais seulement lorsque cet étirement dépasse `MIN_STRETCH` : en
330
+ * deçà, Word se contente d'étirer, même si resserrer déformerait moins.
331
+ *
332
+ * @param over dépassement si l'on garde le mot
333
+ * @param under creux si on le renvoie
334
+ * @param gapsIn largeur totale des espaces, le mot gardé
335
+ * @param gapsOut largeur totale des espaces, le mot renvoyé
336
+ */
337
+ /**
338
+ * `ratio` est paramétrable pour un balayage séparé — celui des CELLULES a été
339
+ * fait le 28 août et donne le MÊME optimum que le fil : 0,40 → 48,04 ·
340
+ * **0,50 → 48,11** · 0,60 → 48,03 · 0,70 → 47,94 par document. La colonne
341
+ * étroite d'un tableau ne demande donc pas d'autre réglage que le fil ; c'est
342
+ * le NOMBRE de décisions qui l'expose, pas leur seuil.
343
+ */
344
+ export declare function keepsWord(over: number, under: number, gapsIn: number, gapsOut: number, ratio?: number): boolean;
345
+ /** Word compose les petites capitales à ~80 % du corps. */
346
+ export declare const SMALL_CAPS_RATIO = 0.8;
347
+ /**
348
+ * Coupe un mot après ses traits d'union : ce sont des points de césure.
349
+ *
350
+ * Word passe à la ligne après le tiret de « rendez-vous », pas nous — un mot
351
+ * composé de trop repoussait tout un paragraphe d'une ligne, et ces contrats en
352
+ * sont pleins (« Primo-Diffuseur », « post-synchronisation »). Sur les 1047
353
+ * lignes du rendu Word de Colo 2, treize finissent par un tiret.
354
+ *
355
+ * On exige au moins deux caractères avant et un après, pour ne pas isoler le
356
+ * tiret d'un « -113 » ou d'une puce.
357
+ *
358
+ * ponytail: la barre oblique est aussi une coupure possible chez Word (quatre
359
+ * lignes sur ce document), mais en DERNIER recours — il préfère renvoyer tout
360
+ * « interdiction/restriction/incapacité » à la ligne suivante. Notre césure
361
+ * gloutonne traite toutes les coupures à égalité et couperait trop tôt : à
362
+ * reprendre quand la césure saura hiérarchiser ses opportunités.
363
+ */
364
+ export declare function hyphenPieces(word: string): string[];
365
+ /** Découpe un texte en segments « était minuscule » / « était déjà capitale ». */
366
+ export declare function scSegments(text: string): Array<{
367
+ text: string;
368
+ small: boolean;
369
+ }>;
370
+ /**
371
+ * Découpage GLOBAL d'un paragraphe justifié — le modèle des brevets de Word
372
+ * (US 7444586, US 7783969) : au lieu de décider mot à mot, on choisit
373
+ * l'ensemble des coupures qui minimise la somme des carrés de l'ajustement.
374
+ *
375
+ * Pourquoi y revenir : sur 9 381 décisions réelles de Word, AUCUN trait local
376
+ * ne sépare les cas où il garde un mot de ceux où il le renvoie — resserrement,
377
+ * étirement, intervalles, largeur du mot, corps, interligne sont tous au niveau
378
+ * du témoin trivial. La décision dépend donc de ce qui vient APRÈS dans le
379
+ * paragraphe, ce qui est la définition d'un optimum global.
380
+ *
381
+ * Renvoie l'ensemble des index de jetons qui OUVRENT une ligne, ou `undefined`
382
+ * quand le paragraphe ne s'y prête pas — tabulation, saut, image, puce : leur
383
+ * largeur dépend de la position et le calcul n'a plus de sens.
384
+ */
385
+ export declare function optimalBreaks(toks: Tok[], availPremiere: number, availSuite: number, opts: {
386
+ maxShrink: number;
387
+ shrinkPenalty: number;
388
+ finalShrink: number;
389
+ }): Set<number> | undefined;
390
+ export declare function tokenize(ctx: CanvasRenderingContext2D, para: StyledParagraph, def: {
391
+ font: string;
392
+ sizePt: number;
393
+ }, listInfo?: ListInfo, images?: ImageMap, nums?: PageNums,
394
+ /** Facteur correctif Canvas→hmtx par police. `ctx.measureText` × ce ratio =
395
+ * largeur que Word utiliserait. Voir `canvasCorrection` dans @myrole/fonts. */
396
+ widthCorrections?: Record<string, number>): Tok[];