@usejunior/docx-core 0.9.1 → 0.11.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 (335) hide show
  1. package/LICENSE +202 -21
  2. package/NOTICE +2 -0
  3. package/README.md +2 -2
  4. package/dist/.tsbuildinfo +1 -1
  5. package/dist/atomizer.d.ts +28 -8
  6. package/dist/atomizer.d.ts.map +1 -1
  7. package/dist/atomizer.js +96 -25
  8. package/dist/atomizer.js.map +1 -1
  9. package/dist/baselines/atomizer/auxiliaryIdCollision.d.ts +99 -0
  10. package/dist/baselines/atomizer/auxiliaryIdCollision.d.ts.map +1 -0
  11. package/dist/baselines/atomizer/auxiliaryIdCollision.js +415 -0
  12. package/dist/baselines/atomizer/auxiliaryIdCollision.js.map +1 -0
  13. package/dist/baselines/atomizer/documentReconstructor.d.ts.map +1 -1
  14. package/dist/baselines/atomizer/documentReconstructor.js +333 -112
  15. package/dist/baselines/atomizer/documentReconstructor.js.map +1 -1
  16. package/dist/baselines/atomizer/formattingFidelity.d.ts +99 -0
  17. package/dist/baselines/atomizer/formattingFidelity.d.ts.map +1 -0
  18. package/dist/baselines/atomizer/formattingFidelity.js +449 -0
  19. package/dist/baselines/atomizer/formattingFidelity.js.map +1 -0
  20. package/dist/baselines/atomizer/inPlaceModifier-bookmarks.d.ts +37 -0
  21. package/dist/baselines/atomizer/inPlaceModifier-bookmarks.d.ts.map +1 -0
  22. package/dist/baselines/atomizer/inPlaceModifier-bookmarks.js +189 -0
  23. package/dist/baselines/atomizer/inPlaceModifier-bookmarks.js.map +1 -0
  24. package/dist/baselines/atomizer/inPlaceModifier-containers.d.ts +74 -0
  25. package/dist/baselines/atomizer/inPlaceModifier-containers.d.ts.map +1 -0
  26. package/dist/baselines/atomizer/inPlaceModifier-containers.js +171 -0
  27. package/dist/baselines/atomizer/inPlaceModifier-containers.js.map +1 -0
  28. package/dist/baselines/atomizer/inPlaceModifier-deletion.d.ts +88 -0
  29. package/dist/baselines/atomizer/inPlaceModifier-deletion.d.ts.map +1 -0
  30. package/dist/baselines/atomizer/inPlaceModifier-deletion.js +326 -0
  31. package/dist/baselines/atomizer/inPlaceModifier-deletion.js.map +1 -0
  32. package/dist/baselines/atomizer/inPlaceModifier-postprocess.d.ts +85 -0
  33. package/dist/baselines/atomizer/inPlaceModifier-postprocess.d.ts.map +1 -0
  34. package/dist/baselines/atomizer/inPlaceModifier-postprocess.js +402 -0
  35. package/dist/baselines/atomizer/inPlaceModifier-postprocess.js.map +1 -0
  36. package/dist/baselines/atomizer/inPlaceModifier-presplit.d.ts +39 -0
  37. package/dist/baselines/atomizer/inPlaceModifier-presplit.d.ts.map +1 -0
  38. package/dist/baselines/atomizer/inPlaceModifier-presplit.js +265 -0
  39. package/dist/baselines/atomizer/inPlaceModifier-presplit.js.map +1 -0
  40. package/dist/baselines/atomizer/inPlaceModifier-shared.d.ts +62 -0
  41. package/dist/baselines/atomizer/inPlaceModifier-shared.d.ts.map +1 -0
  42. package/dist/baselines/atomizer/inPlaceModifier-shared.js +139 -0
  43. package/dist/baselines/atomizer/inPlaceModifier-shared.js.map +1 -0
  44. package/dist/baselines/atomizer/inPlaceModifier-wrappers.d.ts +198 -0
  45. package/dist/baselines/atomizer/inPlaceModifier-wrappers.d.ts.map +1 -0
  46. package/dist/baselines/atomizer/inPlaceModifier-wrappers.js +475 -0
  47. package/dist/baselines/atomizer/inPlaceModifier-wrappers.js.map +1 -0
  48. package/dist/baselines/atomizer/inPlaceModifier.d.ts +6 -290
  49. package/dist/baselines/atomizer/inPlaceModifier.d.ts.map +1 -1
  50. package/dist/baselines/atomizer/inPlaceModifier.js +23 -1828
  51. package/dist/baselines/atomizer/inPlaceModifier.js.map +1 -1
  52. package/dist/baselines/atomizer/pipeline.d.ts +36 -2
  53. package/dist/baselines/atomizer/pipeline.d.ts.map +1 -1
  54. package/dist/baselines/atomizer/pipeline.js +216 -144
  55. package/dist/baselines/atomizer/pipeline.js.map +1 -1
  56. package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts.map +1 -1
  57. package/dist/baselines/atomizer/trackChangesAcceptorAst.js +199 -173
  58. package/dist/baselines/atomizer/trackChangesAcceptorAst.js.map +1 -1
  59. package/dist/baselines/wmlcomparer/DotnetCli.d.ts.map +1 -1
  60. package/dist/baselines/wmlcomparer/DotnetCli.js +7 -0
  61. package/dist/baselines/wmlcomparer/DotnetCli.js.map +1 -1
  62. package/dist/cli/compare-two.d.ts.map +1 -1
  63. package/dist/cli/compare-two.js +3 -1
  64. package/dist/cli/compare-two.js.map +1 -1
  65. package/dist/cli/conformance-adapter.d.ts +3 -0
  66. package/dist/cli/conformance-adapter.d.ts.map +1 -0
  67. package/dist/cli/conformance-adapter.js +93 -0
  68. package/dist/cli/conformance-adapter.js.map +1 -0
  69. package/dist/cli/index.d.ts.map +1 -1
  70. package/dist/cli/index.js +5 -1
  71. package/dist/cli/index.js.map +1 -1
  72. package/dist/compare-types.d.ts +197 -0
  73. package/dist/compare-types.d.ts.map +1 -0
  74. package/dist/compare-types.js +2 -0
  75. package/dist/compare-types.js.map +1 -0
  76. package/dist/core-types.d.ts +5 -1
  77. package/dist/core-types.d.ts.map +1 -1
  78. package/dist/core-types.js +5 -1
  79. package/dist/core-types.js.map +1 -1
  80. package/dist/footnotes.d.ts +8 -3
  81. package/dist/footnotes.d.ts.map +1 -1
  82. package/dist/footnotes.js +8 -3
  83. package/dist/footnotes.js.map +1 -1
  84. package/dist/generation/compile.d.ts +21 -0
  85. package/dist/generation/compile.d.ts.map +1 -0
  86. package/dist/generation/compile.js +46 -0
  87. package/dist/generation/compile.js.map +1 -0
  88. package/dist/generation/context.d.ts +42 -0
  89. package/dist/generation/context.d.ts.map +1 -0
  90. package/dist/generation/context.js +65 -0
  91. package/dist/generation/context.js.map +1 -0
  92. package/dist/generation/emit/comments-part.d.ts +36 -0
  93. package/dist/generation/emit/comments-part.d.ts.map +1 -0
  94. package/dist/generation/emit/comments-part.js +116 -0
  95. package/dist/generation/emit/comments-part.js.map +1 -0
  96. package/dist/generation/emit/document-part.d.ts +24 -0
  97. package/dist/generation/emit/document-part.d.ts.map +1 -0
  98. package/dist/generation/emit/document-part.js +60 -0
  99. package/dist/generation/emit/document-part.js.map +1 -0
  100. package/dist/generation/emit/emit-context.d.ts +26 -0
  101. package/dist/generation/emit/emit-context.d.ts.map +1 -0
  102. package/dist/generation/emit/emit-context.js +19 -0
  103. package/dist/generation/emit/emit-context.js.map +1 -0
  104. package/dist/generation/emit/header-footer-part.d.ts +23 -0
  105. package/dist/generation/emit/header-footer-part.d.ts.map +1 -0
  106. package/dist/generation/emit/header-footer-part.js +57 -0
  107. package/dist/generation/emit/header-footer-part.js.map +1 -0
  108. package/dist/generation/emit/numbering-part.d.ts +29 -0
  109. package/dist/generation/emit/numbering-part.d.ts.map +1 -0
  110. package/dist/generation/emit/numbering-part.js +100 -0
  111. package/dist/generation/emit/numbering-part.js.map +1 -0
  112. package/dist/generation/emit/package-parts.d.ts +24 -0
  113. package/dist/generation/emit/package-parts.d.ts.map +1 -0
  114. package/dist/generation/emit/package-parts.js +121 -0
  115. package/dist/generation/emit/package-parts.js.map +1 -0
  116. package/dist/generation/emit/paragraph.d.ts +24 -0
  117. package/dist/generation/emit/paragraph.d.ts.map +1 -0
  118. package/dist/generation/emit/paragraph.js +63 -0
  119. package/dist/generation/emit/paragraph.js.map +1 -0
  120. package/dist/generation/emit/properties.d.ts +34 -0
  121. package/dist/generation/emit/properties.d.ts.map +1 -0
  122. package/dist/generation/emit/properties.js +138 -0
  123. package/dist/generation/emit/properties.js.map +1 -0
  124. package/dist/generation/emit/run.d.ts +15 -0
  125. package/dist/generation/emit/run.d.ts.map +1 -0
  126. package/dist/generation/emit/run.js +71 -0
  127. package/dist/generation/emit/run.js.map +1 -0
  128. package/dist/generation/emit/section.d.ts +29 -0
  129. package/dist/generation/emit/section.d.ts.map +1 -0
  130. package/dist/generation/emit/section.js +117 -0
  131. package/dist/generation/emit/section.js.map +1 -0
  132. package/dist/generation/emit/settings-part.d.ts +13 -0
  133. package/dist/generation/emit/settings-part.d.ts.map +1 -0
  134. package/dist/generation/emit/settings-part.js +24 -0
  135. package/dist/generation/emit/settings-part.js.map +1 -0
  136. package/dist/generation/emit/styles-part.d.ts +16 -0
  137. package/dist/generation/emit/styles-part.d.ts.map +1 -0
  138. package/dist/generation/emit/styles-part.js +80 -0
  139. package/dist/generation/emit/styles-part.js.map +1 -0
  140. package/dist/generation/emit/table.d.ts +26 -0
  141. package/dist/generation/emit/table.d.ts.map +1 -0
  142. package/dist/generation/emit/table.js +196 -0
  143. package/dist/generation/emit/table.js.map +1 -0
  144. package/dist/generation/errors.d.ts +22 -0
  145. package/dist/generation/errors.d.ts.map +1 -0
  146. package/dist/generation/errors.js +29 -0
  147. package/dist/generation/errors.js.map +1 -0
  148. package/dist/generation/index.d.ts +13 -0
  149. package/dist/generation/index.d.ts.map +1 -0
  150. package/dist/generation/index.js +12 -0
  151. package/dist/generation/index.js.map +1 -0
  152. package/dist/generation/ordering.d.ts +46 -0
  153. package/dist/generation/ordering.d.ts.map +1 -0
  154. package/dist/generation/ordering.js +119 -0
  155. package/dist/generation/ordering.js.map +1 -0
  156. package/dist/generation/recipes.d.ts +47 -0
  157. package/dist/generation/recipes.d.ts.map +1 -0
  158. package/dist/generation/recipes.js +84 -0
  159. package/dist/generation/recipes.js.map +1 -0
  160. package/dist/generation/structural-checks.d.ts +24 -0
  161. package/dist/generation/structural-checks.d.ts.map +1 -0
  162. package/dist/generation/structural-checks.js +318 -0
  163. package/dist/generation/structural-checks.js.map +1 -0
  164. package/dist/generation/types.d.ts +217 -0
  165. package/dist/generation/types.d.ts.map +1 -0
  166. package/dist/generation/types.js +16 -0
  167. package/dist/generation/types.js.map +1 -0
  168. package/dist/generation/validate-spec.d.ts +27 -0
  169. package/dist/generation/validate-spec.d.ts.map +1 -0
  170. package/dist/generation/validate-spec.js +307 -0
  171. package/dist/generation/validate-spec.js.map +1 -0
  172. package/dist/index.d.ts +9 -150
  173. package/dist/index.d.ts.map +1 -1
  174. package/dist/index.js +14 -0
  175. package/dist/index.js.map +1 -1
  176. package/dist/integration/generation-probes.d.ts +15 -0
  177. package/dist/integration/generation-probes.d.ts.map +1 -0
  178. package/dist/integration/generation-probes.js +84 -0
  179. package/dist/integration/generation-probes.js.map +1 -0
  180. package/dist/integration/libreoffice-oracle.d.ts +49 -0
  181. package/dist/integration/libreoffice-oracle.d.ts.map +1 -0
  182. package/dist/integration/libreoffice-oracle.js +290 -0
  183. package/dist/integration/libreoffice-oracle.js.map +1 -0
  184. package/dist/integration/synthetic-docx-fixture.d.ts +72 -0
  185. package/dist/integration/synthetic-docx-fixture.d.ts.map +1 -1
  186. package/dist/integration/synthetic-docx-fixture.js +131 -4
  187. package/dist/integration/synthetic-docx-fixture.js.map +1 -1
  188. package/dist/primitives/accept_changes.d.ts +4 -3
  189. package/dist/primitives/accept_changes.d.ts.map +1 -1
  190. package/dist/primitives/accept_changes.js +163 -77
  191. package/dist/primitives/accept_changes.js.map +1 -1
  192. package/dist/primitives/comments.d.ts +12 -3
  193. package/dist/primitives/comments.d.ts.map +1 -1
  194. package/dist/primitives/comments.js +374 -97
  195. package/dist/primitives/comments.js.map +1 -1
  196. package/dist/primitives/content_fingerprint.d.ts +29 -0
  197. package/dist/primitives/content_fingerprint.d.ts.map +1 -0
  198. package/dist/primitives/content_fingerprint.js +63 -0
  199. package/dist/primitives/content_fingerprint.js.map +1 -0
  200. package/dist/primitives/document.d.ts +94 -15
  201. package/dist/primitives/document.d.ts.map +1 -1
  202. package/dist/primitives/document.js +373 -36
  203. package/dist/primitives/document.js.map +1 -1
  204. package/dist/primitives/document_view-comments.d.ts +18 -0
  205. package/dist/primitives/document_view-comments.d.ts.map +1 -0
  206. package/dist/primitives/document_view-comments.js +160 -0
  207. package/dist/primitives/document_view-comments.js.map +1 -0
  208. package/dist/primitives/document_view-headings.d.ts +45 -0
  209. package/dist/primitives/document_view-headings.d.ts.map +1 -0
  210. package/dist/primitives/document_view-headings.js +247 -0
  211. package/dist/primitives/document_view-headings.js.map +1 -0
  212. package/dist/primitives/document_view-styles.d.ts +11 -0
  213. package/dist/primitives/document_view-styles.d.ts.map +1 -0
  214. package/dist/primitives/document_view-styles.js +104 -0
  215. package/dist/primitives/document_view-styles.js.map +1 -0
  216. package/dist/primitives/document_view-toon.d.ts +37 -0
  217. package/dist/primitives/document_view-toon.d.ts.map +1 -0
  218. package/dist/primitives/document_view-toon.js +199 -0
  219. package/dist/primitives/document_view-toon.js.map +1 -0
  220. package/dist/primitives/document_view-types.d.ts +152 -0
  221. package/dist/primitives/document_view-types.d.ts.map +1 -0
  222. package/dist/primitives/document_view-types.js +2 -0
  223. package/dist/primitives/document_view-types.js.map +1 -0
  224. package/dist/primitives/document_view.d.ts +8 -106
  225. package/dist/primitives/document_view.d.ts.map +1 -1
  226. package/dist/primitives/document_view.js +153 -312
  227. package/dist/primitives/document_view.js.map +1 -1
  228. package/dist/primitives/dom-helpers.d.ts +9 -0
  229. package/dist/primitives/dom-helpers.d.ts.map +1 -1
  230. package/dist/primitives/dom-helpers.js +10 -1
  231. package/dist/primitives/dom-helpers.js.map +1 -1
  232. package/dist/primitives/footnotes.d.ts +4 -3
  233. package/dist/primitives/footnotes.d.ts.map +1 -1
  234. package/dist/primitives/footnotes.js +232 -44
  235. package/dist/primitives/footnotes.js.map +1 -1
  236. package/dist/primitives/formatting_tags.d.ts +7 -0
  237. package/dist/primitives/formatting_tags.d.ts.map +1 -1
  238. package/dist/primitives/formatting_tags.js +22 -11
  239. package/dist/primitives/formatting_tags.js.map +1 -1
  240. package/dist/primitives/index.d.ts +10 -0
  241. package/dist/primitives/index.d.ts.map +1 -1
  242. package/dist/primitives/index.js +9 -0
  243. package/dist/primitives/index.js.map +1 -1
  244. package/dist/primitives/layout.d.ts +4 -3
  245. package/dist/primitives/layout.d.ts.map +1 -1
  246. package/dist/primitives/layout.js +45 -3
  247. package/dist/primitives/layout.js.map +1 -1
  248. package/dist/primitives/merge_runs.d.ts +21 -3
  249. package/dist/primitives/merge_runs.d.ts.map +1 -1
  250. package/dist/primitives/merge_runs.js +32 -10
  251. package/dist/primitives/merge_runs.js.map +1 -1
  252. package/dist/primitives/minimal_save.d.ts +38 -0
  253. package/dist/primitives/minimal_save.d.ts.map +1 -0
  254. package/dist/primitives/minimal_save.js +323 -0
  255. package/dist/primitives/minimal_save.js.map +1 -0
  256. package/dist/primitives/namespaces.d.ts +47 -0
  257. package/dist/primitives/namespaces.d.ts.map +1 -1
  258. package/dist/primitives/namespaces.js +52 -0
  259. package/dist/primitives/namespaces.js.map +1 -1
  260. package/dist/primitives/reject_changes.d.ts +6 -4
  261. package/dist/primitives/reject_changes.d.ts.map +1 -1
  262. package/dist/primitives/reject_changes.js +187 -91
  263. package/dist/primitives/reject_changes.js.map +1 -1
  264. package/dist/primitives/revision-parts.d.ts +7 -0
  265. package/dist/primitives/revision-parts.d.ts.map +1 -0
  266. package/dist/primitives/revision-parts.js +27 -0
  267. package/dist/primitives/revision-parts.js.map +1 -0
  268. package/dist/primitives/revision-vocabulary.d.ts +7 -0
  269. package/dist/primitives/revision-vocabulary.d.ts.map +1 -0
  270. package/dist/primitives/revision-vocabulary.js +39 -0
  271. package/dist/primitives/revision-vocabulary.js.map +1 -0
  272. package/dist/primitives/schema-corpus-capture.d.ts +19 -0
  273. package/dist/primitives/schema-corpus-capture.d.ts.map +1 -0
  274. package/dist/primitives/schema-corpus-capture.js +29 -0
  275. package/dist/primitives/schema-corpus-capture.js.map +1 -0
  276. package/dist/primitives/sectPrAudit.d.ts +19 -0
  277. package/dist/primitives/sectPrAudit.d.ts.map +1 -0
  278. package/dist/primitives/sectPrAudit.js +165 -0
  279. package/dist/primitives/sectPrAudit.js.map +1 -0
  280. package/dist/primitives/semantic_tags.d.ts +7 -0
  281. package/dist/primitives/semantic_tags.d.ts.map +1 -1
  282. package/dist/primitives/semantic_tags.js +23 -4
  283. package/dist/primitives/semantic_tags.js.map +1 -1
  284. package/dist/primitives/serialize_html.d.ts +37 -0
  285. package/dist/primitives/serialize_html.d.ts.map +1 -0
  286. package/dist/primitives/serialize_html.js +395 -0
  287. package/dist/primitives/serialize_html.js.map +1 -0
  288. package/dist/primitives/serialize_markdown.d.ts +16 -0
  289. package/dist/primitives/serialize_markdown.d.ts.map +1 -0
  290. package/dist/primitives/serialize_markdown.js +300 -0
  291. package/dist/primitives/serialize_markdown.js.map +1 -0
  292. package/dist/primitives/serialize_plaintext.d.ts +15 -0
  293. package/dist/primitives/serialize_plaintext.d.ts.map +1 -0
  294. package/dist/primitives/serialize_plaintext.js +154 -0
  295. package/dist/primitives/serialize_plaintext.js.map +1 -0
  296. package/dist/primitives/styles.d.ts +15 -0
  297. package/dist/primitives/styles.d.ts.map +1 -1
  298. package/dist/primitives/styles.js +33 -22
  299. package/dist/primitives/styles.js.map +1 -1
  300. package/dist/primitives/tables.d.ts.map +1 -1
  301. package/dist/primitives/tables.js +13 -3
  302. package/dist/primitives/tables.js.map +1 -1
  303. package/dist/primitives/text.d.ts +2 -1
  304. package/dist/primitives/text.d.ts.map +1 -1
  305. package/dist/primitives/text.js +116 -12
  306. package/dist/primitives/text.js.map +1 -1
  307. package/dist/primitives/track-changes-emitter.d.ts +148 -0
  308. package/dist/primitives/track-changes-emitter.d.ts.map +1 -0
  309. package/dist/primitives/track-changes-emitter.js +291 -0
  310. package/dist/primitives/track-changes-emitter.js.map +1 -0
  311. package/dist/primitives/validate_ai_revisions.d.ts +35 -0
  312. package/dist/primitives/validate_ai_revisions.d.ts.map +1 -0
  313. package/dist/primitives/validate_ai_revisions.js +323 -0
  314. package/dist/primitives/validate_ai_revisions.js.map +1 -0
  315. package/dist/primitives/xml-helpers.d.ts +29 -0
  316. package/dist/primitives/xml-helpers.d.ts.map +1 -0
  317. package/dist/primitives/xml-helpers.js +35 -0
  318. package/dist/primitives/xml-helpers.js.map +1 -0
  319. package/dist/primitives/xml.d.ts +5 -0
  320. package/dist/primitives/xml.d.ts.map +1 -1
  321. package/dist/primitives/xml.js +5 -0
  322. package/dist/primitives/xml.js.map +1 -1
  323. package/dist/primitives/zip.d.ts +1 -0
  324. package/dist/primitives/zip.d.ts.map +1 -1
  325. package/dist/primitives/zip.js +21 -3
  326. package/dist/primitives/zip.js.map +1 -1
  327. package/dist/shared/field-structure.d.ts +14 -0
  328. package/dist/shared/field-structure.d.ts.map +1 -0
  329. package/dist/shared/field-structure.js +166 -0
  330. package/dist/shared/field-structure.js.map +1 -0
  331. package/dist/shared/ooxml/namespaces.d.ts +4 -1
  332. package/dist/shared/ooxml/namespaces.d.ts.map +1 -1
  333. package/dist/shared/ooxml/namespaces.js +4 -1
  334. package/dist/shared/ooxml/namespaces.js.map +1 -1
  335. package/package.json +13 -9
@@ -1 +1 @@
1
- {"version":3,"file":"footnotes.d.ts","sourceRoot":"","sources":["../src/footnotes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,iBAAiB,EAEjB,UAAU,EACX,MAAM,iBAAiB,CAAC;AAOzB;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,qBAAqB,GAAG,oBAAoB,GACpD,UAAU,EAAE,CAcd;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAKnD;AAMD;;;;;;;;;GASG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,yBAAyB,CAAkC;IACnE,OAAO,CAAC,wBAAwB,CAAkC;IAClE,OAAO,CAAC,mBAAmB,CAA0B;IACrD,OAAO,CAAC,kBAAkB,CAA0B;IAEpD;;;;OAIG;gBACS,YAAY,EAAE,UAAU;IAIpC;;OAEG;IACH,OAAO,CAAC,YAAY;IAwBpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAmCtB;;;;;OAKG;IACH,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3D;;;;;OAKG;IACH,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI1D;;;;;;;OAOG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOnD;;;;;OAKG;IACH,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI7C;;;;;OAKG;IACH,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI5C;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;;;OAIG;IACH,qBAAqB,IAAI,iBAAiB,EAAE;IAwB5C;;;;OAIG;IACH,oBAAoB,IAAI,iBAAiB,EAAE;CAuB5C;AAMD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,UAAU,EACzB,KAAK,EAAE,MAAM,GACZ,UAAU,GAAG,SAAS,CAYxB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,UAAU,EACxB,KAAK,EAAE,MAAM,GACZ,UAAU,GAAG,SAAS,CAYxB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,UAAU,GAAG,MAAM,CAiB/D"}
1
+ {"version":3,"file":"footnotes.d.ts","sourceRoot":"","sources":["../src/footnotes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,iBAAiB,EAEjB,UAAU,EACX,MAAM,iBAAiB,CAAC;AAOzB;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,qBAAqB,GAAG,oBAAoB,GACpD,UAAU,EAAE,CAcd;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAKnD;AAMD;;;;;;;;;GASG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,yBAAyB,CAAkC;IACnE,OAAO,CAAC,wBAAwB,CAAkC;IAClE,OAAO,CAAC,mBAAmB,CAA0B;IACrD,OAAO,CAAC,kBAAkB,CAA0B;IAEpD;;;;OAIG;gBACS,YAAY,EAAE,UAAU;IAIpC;;OAEG;IACH,OAAO,CAAC,YAAY;IAwBpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAmCtB;;;;;OAKG;IACH,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3D;;;;;OAKG;IACH,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI1D;;;;;;;OAOG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOnD;;;;;OAKG;IACH,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI7C;;;;;OAKG;IACH,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI5C;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;;;OAIG;IACH,qBAAqB,IAAI,iBAAiB,EAAE;IAwB5C;;;;OAIG;IACH,oBAAoB,IAAI,iBAAiB,EAAE;CAuB5C;AAMD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,UAAU,EACzB,KAAK,EAAE,MAAM,GACZ,UAAU,GAAG,SAAS,CAYxB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,UAAU,EACxB,KAAK,EAAE,MAAM,GACZ,UAAU,GAAG,SAAS,CAYxB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,UAAU,GAAG,MAAM,CAiB/D"}
package/dist/footnotes.js CHANGED
@@ -3,13 +3,15 @@
3
3
  *
4
4
  * Handles sequential footnote/endnote numbering by document order.
5
5
  *
6
- * Per ECMA-376, w:id on footnoteReference is a reference identifier, NOT the
7
- * display number. Display numbers are sequential based on document order.
6
+ * `w:id` on `w:footnoteReference` is a reference identifier, NOT the display
7
+ * number. Display numbers are sequential based on document order.
8
8
  *
9
9
  * @example
10
10
  * Document has 91 footnotes with XML IDs 2-92 (IDs 0, 1 are reserved):
11
11
  * - Incorrect: Display as 2, 3, 4, ..., 92
12
12
  * - Correct: Display as 1, 2, 3, ..., 91
13
+ *
14
+ * @conformance ECMA-376 edition 5, Part 1 § 17.11.14
13
15
  */
14
16
  import { RESERVED_FOOTNOTE_IDS, } from './core-types.js';
15
17
  import { childElements, getLeafText } from './primitives/index.js';
@@ -41,10 +43,13 @@ export function findReferencesInOrder(element, tagName) {
41
43
  /**
42
44
  * Check if a footnote/endnote ID is reserved.
43
45
  *
44
- * IDs 0 and 1 are reserved for separator types per ECMA-376.
46
+ * IDs 0 and 1 are treated as reserved, matching the special separator and
47
+ * continuation-separator footnote examples in ECMA-376 5th edition Part 1
48
+ * §17.11.9 / §17.11.10.
45
49
  *
46
50
  * @param xmlId - The XML ID to check
47
51
  * @returns True if this is a reserved ID
52
+ * @conformance ECMA-376 edition 5, Part 1 § 17.11.14
48
53
  */
49
54
  export function isReservedId(xmlId) {
50
55
  return (xmlId === RESERVED_FOOTNOTE_IDS.SEPARATOR ||
@@ -1 +1 @@
1
- {"version":3,"file":"footnotes.js","sourceRoot":"","sources":["../src/footnotes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"footnotes.js","sourceRoot":"","sources":["../src/footnotes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * The generation compiler: DocumentSpec → validated spec → per-part emitters
3
+ * → ordered file record → zip buffer.
4
+ *
5
+ * Determinism contract: identical specs compile to byte-identical buffers.
6
+ * No emitter reads the clock or randomness; zip entry dates are pinned to a
7
+ * fixed epoch (document-facing dates come from spec.meta.createdIso).
8
+ *
9
+ * Ordering: header/footer parts are allocated first so their relationship
10
+ * ids exist when the document part binds section references; the package
11
+ * plumbing runs last because [Content_Types].xml is assembled from the part
12
+ * registry.
13
+ */
14
+ import type { DocumentSpec } from './types.js';
15
+ export type GenerateDocxOptions = {
16
+ /** Overrides spec.options.includeDraftingNotes when provided. */
17
+ includeDraftingNotes?: boolean;
18
+ };
19
+ /** Compile a DocumentSpec into a complete DOCX package. */
20
+ export declare function generateDocx(spec: DocumentSpec, opts?: GenerateDocxOptions): Promise<Buffer>;
21
+ //# sourceMappingURL=compile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/generation/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAaH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,MAAM,MAAM,mBAAmB,GAAG;IAChC,iEAAiE;IACjE,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,2DAA2D;AAC3D,wBAAsB,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBlG"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * The generation compiler: DocumentSpec → validated spec → per-part emitters
3
+ * → ordered file record → zip buffer.
4
+ *
5
+ * Determinism contract: identical specs compile to byte-identical buffers.
6
+ * No emitter reads the clock or randomness; zip entry dates are pinned to a
7
+ * fixed epoch (document-facing dates come from spec.meta.createdIso).
8
+ *
9
+ * Ordering: header/footer parts are allocated first so their relationship
10
+ * ids exist when the document part binds section references; the package
11
+ * plumbing runs last because [Content_Types].xml is assembled from the part
12
+ * registry.
13
+ */
14
+ import { createZipBuffer } from '../primitives/zip.js';
15
+ import { maybeCaptureEmittedDocumentXml } from '../primitives/schema-corpus-capture.js';
16
+ import { CompileContext } from './context.js';
17
+ import { emitCommentsPartsIfNeeded } from './emit/comments-part.js';
18
+ import { DraftingNoteCollector } from './emit/emit-context.js';
19
+ import { emitDocumentPart } from './emit/document-part.js';
20
+ import { emitHeaderFooterParts } from './emit/header-footer-part.js';
21
+ import { emitNumberingPartIfNeeded } from './emit/numbering-part.js';
22
+ import { emitPackageParts } from './emit/package-parts.js';
23
+ import { emitSettingsPartIfNeeded } from './emit/settings-part.js';
24
+ import { emitStylesPart } from './emit/styles-part.js';
25
+ import { validateSpec } from './validate-spec.js';
26
+ /** Fixed zip-entry timestamp (2006-01-01T00:00:00Z, the OOXML vintage). */
27
+ const ZIP_EPOCH = new Date(Date.UTC(2006, 0, 1));
28
+ /** Compile a DocumentSpec into a complete DOCX package. */
29
+ export async function generateDocx(spec, opts) {
30
+ validateSpec(spec);
31
+ const notesEnabled = opts?.includeDraftingNotes ?? spec.options?.includeDraftingNotes ?? true;
32
+ const ctx = new CompileContext();
33
+ const numberingIds = emitNumberingPartIfNeeded(spec, ctx);
34
+ const headerFooterRefs = emitHeaderFooterParts(spec, ctx, { numberingIds });
35
+ const notes = notesEnabled ? new DraftingNoteCollector() : undefined;
36
+ const documentPartXml = emitDocumentPart(spec, headerFooterRefs, { numberingIds, notes });
37
+ maybeCaptureEmittedDocumentXml(documentPartXml);
38
+ ctx.setFileContent('word/document.xml', documentPartXml);
39
+ if (notes)
40
+ emitCommentsPartsIfNeeded(spec, ctx, notes);
41
+ emitStylesPart(spec, ctx);
42
+ emitSettingsPartIfNeeded(spec, ctx);
43
+ emitPackageParts(spec, ctx);
44
+ return createZipBuffer(ctx.toFileRecord(), { fileDate: ZIP_EPOCH });
45
+ }
46
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/generation/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,2EAA2E;AAC3E,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAOjD,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAkB,EAAE,IAA0B;IAC/E,YAAY,CAAC,IAAI,CAAC,CAAC;IAEnB,MAAM,YAAY,GAAG,IAAI,EAAE,oBAAoB,IAAI,IAAI,CAAC,OAAO,EAAE,oBAAoB,IAAI,IAAI,CAAC;IAC9F,MAAM,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;IACjC,MAAM,YAAY,GAAG,yBAAyB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,MAAM,eAAe,GAAG,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1F,8BAA8B,CAAC,eAAe,CAAC,CAAC;IAChD,GAAG,CAAC,cAAc,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;IACzD,IAAI,KAAK;QAAE,yBAAyB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACvD,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1B,wBAAwB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACpC,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAE5B,OAAO,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;AACtE,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Compile-time state shared by the part emitters.
3
+ *
4
+ * The context owns the part registry (part name → content type + optional
5
+ * document-level relationship), the relationship-id allocator, and the
6
+ * ordered file map handed to the zip assembler. All allocation is
7
+ * deterministic: ids are sequential counters, never random, and no part of
8
+ * the compiler reads the clock.
9
+ */
10
+ export type RegisteredPart = {
11
+ /** Zip path, e.g. 'word/header1.xml'. */
12
+ name: string;
13
+ /** Content type registered as an Override in [Content_Types].xml. */
14
+ contentType: string;
15
+ /** Relationship from word/document.xml, when the part is document-attached. */
16
+ documentRel?: {
17
+ type: string;
18
+ rId: string;
19
+ };
20
+ };
21
+ export declare class CompileContext {
22
+ private readonly partsByName;
23
+ private readonly fileContents;
24
+ private nextRid;
25
+ private nextHeaderIndex;
26
+ private nextFooterIndex;
27
+ /** Register a part that needs a content-type Override (content set separately). */
28
+ registerPart(name: string, contentType: string, documentRelType?: string): RegisteredPart;
29
+ allocateRid(): string;
30
+ allocateHeaderPartName(): string;
31
+ allocateFooterPartName(): string;
32
+ setFileContent(name: string, content: string): void;
33
+ registeredParts(): RegisteredPart[];
34
+ documentRelParts(): RegisteredPart[];
35
+ /**
36
+ * Assemble the final zip-file record. [Content_Types].xml is placed first —
37
+ * createZipBuffer preserves insertion order but does not enforce ordering
38
+ * itself, so the contract lives here.
39
+ */
40
+ toFileRecord(): Record<string, string>;
41
+ }
42
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/generation/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,cAAc,GAAG;IAC3B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C,CAAC;AAEF,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqC;IACjE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,eAAe,CAAK;IAE5B,mFAAmF;IACnF,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,cAAc;IAYzF,WAAW,IAAI,MAAM;IAIrB,sBAAsB,IAAI,MAAM;IAIhC,sBAAsB,IAAI,MAAM;IAIhC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAInD,eAAe,IAAI,cAAc,EAAE;IAInC,gBAAgB,IAAI,cAAc,EAAE;IAIpC;;;;OAIG;IACH,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAYvC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Compile-time state shared by the part emitters.
3
+ *
4
+ * The context owns the part registry (part name → content type + optional
5
+ * document-level relationship), the relationship-id allocator, and the
6
+ * ordered file map handed to the zip assembler. All allocation is
7
+ * deterministic: ids are sequential counters, never random, and no part of
8
+ * the compiler reads the clock.
9
+ */
10
+ export class CompileContext {
11
+ partsByName = new Map();
12
+ fileContents = new Map();
13
+ nextRid = 1;
14
+ nextHeaderIndex = 1;
15
+ nextFooterIndex = 1;
16
+ /** Register a part that needs a content-type Override (content set separately). */
17
+ registerPart(name, contentType, documentRelType) {
18
+ if (this.partsByName.has(name)) {
19
+ return this.partsByName.get(name);
20
+ }
21
+ const part = { name, contentType };
22
+ if (documentRelType) {
23
+ part.documentRel = { type: documentRelType, rId: this.allocateRid() };
24
+ }
25
+ this.partsByName.set(name, part);
26
+ return part;
27
+ }
28
+ allocateRid() {
29
+ return `rId${this.nextRid++}`;
30
+ }
31
+ allocateHeaderPartName() {
32
+ return `word/header${this.nextHeaderIndex++}.xml`;
33
+ }
34
+ allocateFooterPartName() {
35
+ return `word/footer${this.nextFooterIndex++}.xml`;
36
+ }
37
+ setFileContent(name, content) {
38
+ this.fileContents.set(name, content);
39
+ }
40
+ registeredParts() {
41
+ return Array.from(this.partsByName.values());
42
+ }
43
+ documentRelParts() {
44
+ return this.registeredParts().filter((p) => p.documentRel);
45
+ }
46
+ /**
47
+ * Assemble the final zip-file record. [Content_Types].xml is placed first —
48
+ * createZipBuffer preserves insertion order but does not enforce ordering
49
+ * itself, so the contract lives here.
50
+ */
51
+ toFileRecord() {
52
+ const contentTypes = this.fileContents.get('[Content_Types].xml');
53
+ if (contentTypes === undefined) {
54
+ throw new Error('compile bug: [Content_Types].xml was never emitted');
55
+ }
56
+ const record = { '[Content_Types].xml': contentTypes };
57
+ for (const [name, content] of this.fileContents) {
58
+ if (name === '[Content_Types].xml')
59
+ continue;
60
+ record[name] = content;
61
+ }
62
+ return record;
63
+ }
64
+ }
65
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/generation/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,MAAM,OAAO,cAAc;IACR,WAAW,GAAG,IAAI,GAAG,EAA0B,CAAC;IAChD,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClD,OAAO,GAAG,CAAC,CAAC;IACZ,eAAe,GAAG,CAAC,CAAC;IACpB,eAAe,GAAG,CAAC,CAAC;IAE5B,mFAAmF;IACnF,YAAY,CAAC,IAAY,EAAE,WAAmB,EAAE,eAAwB;QACtE,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;QACrC,CAAC;QACD,MAAM,IAAI,GAAmB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QACnD,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,WAAW,GAAG,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW;QACT,OAAO,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;IAChC,CAAC;IAED,sBAAsB;QACpB,OAAO,cAAc,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;IACpD,CAAC;IAED,sBAAsB;QACpB,OAAO,cAAc,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;IACpD,CAAC;IAED,cAAc,CAAC,IAAY,EAAE,OAAe;QAC1C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,eAAe;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACH,YAAY;QACV,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAClE,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,MAAM,GAA2B,EAAE,qBAAqB,EAAE,YAAY,EAAE,CAAC;QAC/E,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAChD,IAAI,IAAI,KAAK,qBAAqB;gBAAE,SAAS;YAC7C,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;QACzB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Drafting-note comment parts: word/comments.xml plus the Word-extension
3
+ * ancillary parts word/commentsExtended.xml and word/people.xml.
4
+ *
5
+ * All three are always emitted together when notes are enabled. The
6
+ * ancillary pair is deliberately on by default: plain comments.xml loads in
7
+ * every reader we test, but Word 2013+ writes the trio and its own comment
8
+ * UI degrades (no resolve state, no people presence) without them. Content
9
+ * and relationship types match what Word itself writes — verified against
10
+ * the Open XML SDK's WordprocessingCommentsExPart/WordprocessingPeoplePart
11
+ * constants (the `application/vnd.ms-word.commentsExtended+xml` variant
12
+ * found in some third-party packages is NOT what Word emits). They also
13
+ * match the editing path in primitives/comments.ts, so a generated document
14
+ * is indistinguishable from an edited one to the comment APIs.
15
+ *
16
+ * Determinism: comment ids are allocated in document order by the
17
+ * DraftingNoteCollector; w14:paraId values derive from those ids; dates come
18
+ * only from DraftingNoteSpec.dateIso (falling back to meta.createdIso);
19
+ * authors fall back note.author → meta.author → 'safe-docx'. No clock, no
20
+ * randomness — identical specs produce byte-identical comment parts.
21
+ *
22
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.4.6
23
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.4.2
24
+ */
25
+ import type { CompileContext } from '../context.js';
26
+ import type { DocumentSpec } from '../types.js';
27
+ import type { DraftingNoteCollector } from './emit-context.js';
28
+ export declare const COMMENTS_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml";
29
+ export declare const COMMENTS_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments";
30
+ export declare const COMMENTS_EXTENDED_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtended+xml";
31
+ export declare const COMMENTS_EXTENDED_REL_TYPE = "http://schemas.microsoft.com/office/2011/relationships/commentsExtended";
32
+ export declare const PEOPLE_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.people+xml";
33
+ export declare const PEOPLE_REL_TYPE = "http://schemas.microsoft.com/office/2011/relationships/people";
34
+ /** Emit the comment trio from the notes collected during body emission. */
35
+ export declare function emitCommentsPartsIfNeeded(spec: DocumentSpec, ctx: CompileContext, collector: DraftingNoteCollector): void;
36
+ //# sourceMappingURL=comments-part.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comments-part.d.ts","sourceRoot":"","sources":["../../../src/generation/emit/comments-part.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D,eAAO,MAAM,qBAAqB,gFAAgF,CAAC;AACnH,eAAO,MAAM,iBAAiB,iFAAiF,CAAC;AAChH,eAAO,MAAM,8BAA8B,wFAC4C,CAAC;AACxF,eAAO,MAAM,0BAA0B,4EAA4E,CAAC;AACpH,eAAO,MAAM,mBAAmB,8EAA8E,CAAC;AAC/G,eAAO,MAAM,eAAe,kEAAkE,CAAC;AAyB/F,2EAA2E;AAC3E,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,YAAY,EAClB,GAAG,EAAE,cAAc,EACnB,SAAS,EAAE,qBAAqB,GAC/B,IAAI,CAUN"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Drafting-note comment parts: word/comments.xml plus the Word-extension
3
+ * ancillary parts word/commentsExtended.xml and word/people.xml.
4
+ *
5
+ * All three are always emitted together when notes are enabled. The
6
+ * ancillary pair is deliberately on by default: plain comments.xml loads in
7
+ * every reader we test, but Word 2013+ writes the trio and its own comment
8
+ * UI degrades (no resolve state, no people presence) without them. Content
9
+ * and relationship types match what Word itself writes — verified against
10
+ * the Open XML SDK's WordprocessingCommentsExPart/WordprocessingPeoplePart
11
+ * constants (the `application/vnd.ms-word.commentsExtended+xml` variant
12
+ * found in some third-party packages is NOT what Word emits). They also
13
+ * match the editing path in primitives/comments.ts, so a generated document
14
+ * is indistinguishable from an edited one to the comment APIs.
15
+ *
16
+ * Determinism: comment ids are allocated in document order by the
17
+ * DraftingNoteCollector; w14:paraId values derive from those ids; dates come
18
+ * only from DraftingNoteSpec.dateIso (falling back to meta.createdIso);
19
+ * authors fall back note.author → meta.author → 'safe-docx'. No clock, no
20
+ * randomness — identical specs produce byte-identical comment parts.
21
+ *
22
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.4.6
23
+ * @conformance ECMA-376 edition 5, Part 1 § 17.13.4.2
24
+ */
25
+ import { createWmlElement, createWmlTextElement } from '../../primitives/dom-helpers.js';
26
+ import { OOXML, W } from '../../primitives/namespaces.js';
27
+ import { parseXml, serializeXml, XML_DECL } from '../../primitives/xml.js';
28
+ export const COMMENTS_CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml';
29
+ export const COMMENTS_REL_TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments';
30
+ export const COMMENTS_EXTENDED_CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtended+xml';
31
+ export const COMMENTS_EXTENDED_REL_TYPE = 'http://schemas.microsoft.com/office/2011/relationships/commentsExtended';
32
+ export const PEOPLE_CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.wordprocessingml.people+xml';
33
+ export const PEOPLE_REL_TYPE = 'http://schemas.microsoft.com/office/2011/relationships/people';
34
+ const COMMENTS_SKELETON = `<w:comments xmlns:w="${OOXML.W_NS}" xmlns:w14="${OOXML.W14_NS}"/>`;
35
+ const DEFAULT_AUTHOR = 'safe-docx';
36
+ /** Deterministic w14:paraId for a comment id: zero-padded uppercase hex. */
37
+ function paraIdFor(id) {
38
+ return id.toString(16).toUpperCase().padStart(8, '0');
39
+ }
40
+ function authorFor(spec, note) {
41
+ return note.author ?? spec.meta?.author ?? DEFAULT_AUTHOR;
42
+ }
43
+ /** Up-to-three-letter initials from the author's words, deterministic. */
44
+ function initialsFor(author) {
45
+ const letters = author
46
+ .split(/\s+/)
47
+ .map((word) => word.replace(/[^\p{L}\p{N}]/gu, '').charAt(0))
48
+ .filter((c) => c.length > 0);
49
+ const initials = letters.slice(0, 3).join('').toUpperCase();
50
+ return initials.length > 0 ? initials : 'SD';
51
+ }
52
+ /** Emit the comment trio from the notes collected during body emission. */
53
+ export function emitCommentsPartsIfNeeded(spec, ctx, collector) {
54
+ if (collector.collected.length === 0)
55
+ return;
56
+ ctx.registerPart('word/comments.xml', COMMENTS_CONTENT_TYPE, COMMENTS_REL_TYPE);
57
+ ctx.registerPart('word/commentsExtended.xml', COMMENTS_EXTENDED_CONTENT_TYPE, COMMENTS_EXTENDED_REL_TYPE);
58
+ ctx.registerPart('word/people.xml', PEOPLE_CONTENT_TYPE, PEOPLE_REL_TYPE);
59
+ ctx.setFileContent('word/comments.xml', emitCommentsXml(spec, collector));
60
+ ctx.setFileContent('word/commentsExtended.xml', emitCommentsExtendedXml(collector));
61
+ ctx.setFileContent('word/people.xml', emitPeopleXml(spec, collector));
62
+ }
63
+ function emitCommentsXml(spec, collector) {
64
+ const doc = parseXml(COMMENTS_SKELETON);
65
+ const root = doc.documentElement;
66
+ for (const { id, note } of collector.collected) {
67
+ const attrs = {
68
+ 'w:id': String(id),
69
+ 'w:author': authorFor(spec, note),
70
+ 'w:initials': initialsFor(authorFor(spec, note)),
71
+ };
72
+ const dateIso = note.dateIso ?? spec.meta?.createdIso;
73
+ if (dateIso !== undefined)
74
+ attrs['w:date'] = dateIso;
75
+ const comment = createWmlElement(doc, W.comment, attrs);
76
+ const p = createWmlElement(doc, W.p);
77
+ p.setAttributeNS(OOXML.W14_NS, 'w14:paraId', paraIdFor(id));
78
+ const run = createWmlElement(doc, W.r);
79
+ run.appendChild(createWmlTextElement(doc, note.text));
80
+ p.appendChild(run);
81
+ comment.appendChild(p);
82
+ root.appendChild(comment);
83
+ }
84
+ return XML_DECL + serializeXml(doc);
85
+ }
86
+ function emitCommentsExtendedXml(collector) {
87
+ const doc = parseXml(`<w15:commentsEx xmlns:w15="${OOXML.W15_NS}"/>`);
88
+ const root = doc.documentElement;
89
+ for (const { id } of collector.collected) {
90
+ const commentEx = doc.createElementNS(OOXML.W15_NS, 'w15:commentEx');
91
+ commentEx.setAttributeNS(OOXML.W15_NS, 'w15:paraId', paraIdFor(id));
92
+ commentEx.setAttributeNS(OOXML.W15_NS, 'w15:done', '0');
93
+ root.appendChild(commentEx);
94
+ }
95
+ return XML_DECL + serializeXml(doc);
96
+ }
97
+ function emitPeopleXml(spec, collector) {
98
+ const doc = parseXml(`<w15:people xmlns:w15="${OOXML.W15_NS}"/>`);
99
+ const root = doc.documentElement;
100
+ const seen = new Set();
101
+ for (const { note } of collector.collected) {
102
+ const author = authorFor(spec, note);
103
+ if (seen.has(author))
104
+ continue;
105
+ seen.add(author);
106
+ const person = doc.createElementNS(OOXML.W15_NS, 'w15:person');
107
+ person.setAttributeNS(OOXML.W15_NS, 'w15:author', author);
108
+ const presence = doc.createElementNS(OOXML.W15_NS, 'w15:presenceInfo');
109
+ presence.setAttributeNS(OOXML.W15_NS, 'w15:providerId', 'None');
110
+ presence.setAttributeNS(OOXML.W15_NS, 'w15:userId', author);
111
+ person.appendChild(presence);
112
+ root.appendChild(person);
113
+ }
114
+ return XML_DECL + serializeXml(doc);
115
+ }
116
+ //# sourceMappingURL=comments-part.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comments-part.js","sourceRoot":"","sources":["../../../src/generation/emit/comments-part.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * word/document.xml emitter.
3
+ *
4
+ * Builds the main document part from a namespace-declaring skeleton: the
5
+ * skeleton string carries every namespace the part uses on the root element,
6
+ * and all children are created through the namespace-safe DOM helpers.
7
+ * xmldom's serializer omits the XML declaration, so it is prepended here;
8
+ * the structural validator asserts every part starts with one.
9
+ */
10
+ import type { DocumentSpec } from '../types.js';
11
+ import type { BlockEmitContext } from './emit-context.js';
12
+ import { type SectionHeaderFooterRefs } from './section.js';
13
+ /**
14
+ * Compile the body: each section's blocks in order. Every non-final section
15
+ * ends with a dedicated break paragraph whose pPr contains only that
16
+ * section's sectPr (what Word itself emits on Insert → Section Break; it
17
+ * also sidesteps the trailing-table case), and the final section's
18
+ * properties bind as the body's last child.
19
+ *
20
+ * @conformance ECMA-376 edition 5, Part 1 § 17.6.18
21
+ * @conformance ECMA-376 edition 5, Part 1 § 17.6.17
22
+ */
23
+ export declare function emitDocumentPart(spec: DocumentSpec, refs?: SectionHeaderFooterRefs[], ctx?: BlockEmitContext): string;
24
+ //# sourceMappingURL=document-part.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-part.d.ts","sourceRoot":"","sources":["../../../src/generation/emit/document-part.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAe,KAAK,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAOzE;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,uBAAuB,EAAE,EAAE,GAAG,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAgCrH"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * word/document.xml emitter.
3
+ *
4
+ * Builds the main document part from a namespace-declaring skeleton: the
5
+ * skeleton string carries every namespace the part uses on the root element,
6
+ * and all children are created through the namespace-safe DOM helpers.
7
+ * xmldom's serializer omits the XML declaration, so it is prepended here;
8
+ * the structural validator asserts every part starts with one.
9
+ */
10
+ import { createWmlElement } from '../../primitives/dom-helpers.js';
11
+ import { OOXML, W } from '../../primitives/namespaces.js';
12
+ import { parseXml, serializeXml, XML_DECL } from '../../primitives/xml.js';
13
+ import { GenerationInternalError } from '../errors.js';
14
+ import { buildSectPr } from './section.js';
15
+ import { buildBlock } from './table.js';
16
+ const DOCUMENT_SKELETON = `<w:document xmlns:w="${OOXML.W_NS}" xmlns:r="${OOXML.R_NS}" xmlns:w14="${OOXML.W14_NS}">` +
17
+ `<w:body/></w:document>`;
18
+ /**
19
+ * Compile the body: each section's blocks in order. Every non-final section
20
+ * ends with a dedicated break paragraph whose pPr contains only that
21
+ * section's sectPr (what Word itself emits on Insert → Section Break; it
22
+ * also sidesteps the trailing-table case), and the final section's
23
+ * properties bind as the body's last child.
24
+ *
25
+ * @conformance ECMA-376 edition 5, Part 1 § 17.6.18
26
+ * @conformance ECMA-376 edition 5, Part 1 § 17.6.17
27
+ */
28
+ export function emitDocumentPart(spec, refs, ctx) {
29
+ const doc = parseXml(DOCUMENT_SKELETON);
30
+ const body = doc.getElementsByTagName('w:body').item(0);
31
+ if (!body)
32
+ throw new GenerationInternalError('document skeleton lost its w:body');
33
+ spec.sections.forEach((section, index) => {
34
+ for (const block of section.blocks) {
35
+ body.appendChild(buildBlock(doc, block, ctx));
36
+ }
37
+ const sectPr = buildSectPr(doc, section, refs?.[index]);
38
+ const isFinal = index === spec.sections.length - 1;
39
+ if (isFinal) {
40
+ // The body must not end with a table (readers treat it as truncated);
41
+ // a final trailing table gets a closing empty paragraph before the
42
+ // body-level sectPr binds. Non-final sections already end with their
43
+ // dedicated break paragraph.
44
+ const lastBlock = section.blocks[section.blocks.length - 1];
45
+ if (lastBlock && lastBlock.kind === 'table') {
46
+ body.appendChild(createWmlElement(doc, W.p));
47
+ }
48
+ body.appendChild(sectPr);
49
+ }
50
+ else {
51
+ const breakParagraph = createWmlElement(doc, W.p);
52
+ const pPr = createWmlElement(doc, W.pPr);
53
+ pPr.appendChild(sectPr);
54
+ breakParagraph.appendChild(pPr);
55
+ body.appendChild(breakParagraph);
56
+ }
57
+ });
58
+ return XML_DECL + serializeXml(doc);
59
+ }
60
+ //# sourceMappingURL=document-part.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-part.js","sourceRoot":"","sources":["../../../src/generation/emit/document-part.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAGvD,OAAO,EAAE,WAAW,EAAgC,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,iBAAiB,GACrB,wBAAwB,KAAK,CAAC,IAAI,cAAc,KAAK,CAAC,IAAI,gBAAgB,KAAK,CAAC,MAAM,IAAI;IAC1F,wBAAwB,CAAC;AAE3B;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAkB,EAAE,IAAgC,EAAE,GAAsB;IAC3G,MAAM,GAAG,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,GAAG,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,uBAAuB,CAAC,mCAAmC,CAAC,CAAC;IAElF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QACvC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACnD,IAAI,OAAO,EAAE,CAAC;YACZ,sEAAsE;YACtE,mEAAmE;YACnE,qEAAqE;YACrE,6BAA6B;YAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC5D,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5C,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,cAAc,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YACzC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACxB,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Shared state the block emitters thread through paragraph/table recursion.
3
+ *
4
+ * Bundling it in one object keeps emitter signatures stable as features
5
+ * land: numbering binds spec handles to numeric ids, and the drafting-note
6
+ * collector allocates comment ids in document order (absent in stories that
7
+ * cannot carry notes, e.g. headers/footers, and when notes are disabled).
8
+ */
9
+ import type { DraftingNoteSpec } from '../types.js';
10
+ /** Spec-level numbering handle → numeric w:numId value. */
11
+ export type NumberingIdMap = ReadonlyMap<string, number>;
12
+ /** Allocates deterministic comment ids and records notes in document order. */
13
+ export declare class DraftingNoteCollector {
14
+ readonly collected: Array<{
15
+ id: number;
16
+ note: DraftingNoteSpec;
17
+ }>;
18
+ private nextId;
19
+ allocate(note: DraftingNoteSpec): number;
20
+ }
21
+ export type BlockEmitContext = {
22
+ numberingIds?: NumberingIdMap;
23
+ /** Present only where drafting notes may anchor (body story, notes enabled). */
24
+ notes?: DraftingNoteCollector;
25
+ };
26
+ //# sourceMappingURL=emit-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-context.d.ts","sourceRoot":"","sources":["../../../src/generation/emit/emit-context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,2DAA2D;AAC3D,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEzD,+EAA+E;AAC/E,qBAAa,qBAAqB;IAChC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAAM;IACvE,OAAO,CAAC,MAAM,CAAK;IAEnB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM;CAKzC;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,gFAAgF;IAChF,KAAK,CAAC,EAAE,qBAAqB,CAAC;CAC/B,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Shared state the block emitters thread through paragraph/table recursion.
3
+ *
4
+ * Bundling it in one object keeps emitter signatures stable as features
5
+ * land: numbering binds spec handles to numeric ids, and the drafting-note
6
+ * collector allocates comment ids in document order (absent in stories that
7
+ * cannot carry notes, e.g. headers/footers, and when notes are disabled).
8
+ */
9
+ /** Allocates deterministic comment ids and records notes in document order. */
10
+ export class DraftingNoteCollector {
11
+ collected = [];
12
+ nextId = 1;
13
+ allocate(note) {
14
+ const id = this.nextId++;
15
+ this.collected.push({ id, note });
16
+ return id;
17
+ }
18
+ }
19
+ //# sourceMappingURL=emit-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-context.js","sourceRoot":"","sources":["../../../src/generation/emit/emit-context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,+EAA+E;AAC/E,MAAM,OAAO,qBAAqB;IACvB,SAAS,GAAkD,EAAE,CAAC;IAC/D,MAAM,GAAG,CAAC,CAAC;IAEnB,QAAQ,CAAC,IAAsB;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Header and footer part emitters.
3
+ *
4
+ * Each declared header/footer slot (default / first / even) becomes its own
5
+ * part — word/headerN.xml or word/footerN.xml — registered with a
6
+ * content-type override and a relationship from the main document part. The
7
+ * block content reuses the same paragraph/run emitters as the body, so a
8
+ * footer's "Page X of Y" field compiles through exactly the same five-part
9
+ * field machinery.
10
+ *
11
+ * @conformance ECMA-376 edition 5, Part 1 § 17.10.4
12
+ */
13
+ import type { CompileContext } from '../context.js';
14
+ import type { DocumentSpec } from '../types.js';
15
+ import type { BlockEmitContext } from './emit-context.js';
16
+ import type { SectionHeaderFooterRefs } from './section.js';
17
+ /**
18
+ * Allocate and emit every header/footer part, returning per-section
19
+ * reference maps for the sectPr emitter. Runs before the document part so
20
+ * relationship ids exist when sections bind their references.
21
+ */
22
+ export declare function emitHeaderFooterParts(spec: DocumentSpec, ctx: CompileContext, blockCtx?: BlockEmitContext): SectionHeaderFooterRefs[];
23
+ //# sourceMappingURL=header-footer-part.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-footer-part.d.ts","sourceRoot":"","sources":["../../../src/generation/emit/header-footer-part.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAiC,MAAM,aAAa,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAS5D;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,uBAAuB,EAAE,CAErI"}