@usejunior/docx-core 0.0.1 → 0.1.1

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 (252) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +86 -28
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/atomizer.d.ts +218 -0
  5. package/dist/atomizer.d.ts.map +1 -0
  6. package/dist/atomizer.js +856 -0
  7. package/dist/atomizer.js.map +1 -0
  8. package/dist/baselines/atomizer/atomLcs.d.ts +96 -0
  9. package/dist/baselines/atomizer/atomLcs.d.ts.map +1 -0
  10. package/dist/baselines/atomizer/atomLcs.js +347 -0
  11. package/dist/baselines/atomizer/atomLcs.js.map +1 -0
  12. package/dist/baselines/atomizer/debug.d.ts +41 -0
  13. package/dist/baselines/atomizer/debug.d.ts.map +1 -0
  14. package/dist/baselines/atomizer/debug.js +85 -0
  15. package/dist/baselines/atomizer/debug.js.map +1 -0
  16. package/dist/baselines/atomizer/documentReconstructor.d.ts +64 -0
  17. package/dist/baselines/atomizer/documentReconstructor.d.ts.map +1 -0
  18. package/dist/baselines/atomizer/documentReconstructor.js +939 -0
  19. package/dist/baselines/atomizer/documentReconstructor.js.map +1 -0
  20. package/dist/baselines/atomizer/hierarchicalLcs.d.ts +111 -0
  21. package/dist/baselines/atomizer/hierarchicalLcs.d.ts.map +1 -0
  22. package/dist/baselines/atomizer/hierarchicalLcs.js +469 -0
  23. package/dist/baselines/atomizer/hierarchicalLcs.js.map +1 -0
  24. package/dist/baselines/atomizer/inPlaceModifier.d.ts +183 -0
  25. package/dist/baselines/atomizer/inPlaceModifier.d.ts.map +1 -0
  26. package/dist/baselines/atomizer/inPlaceModifier.js +1600 -0
  27. package/dist/baselines/atomizer/inPlaceModifier.js.map +1 -0
  28. package/dist/baselines/atomizer/numberingIntegration.d.ts +59 -0
  29. package/dist/baselines/atomizer/numberingIntegration.d.ts.map +1 -0
  30. package/dist/baselines/atomizer/numberingIntegration.js +209 -0
  31. package/dist/baselines/atomizer/numberingIntegration.js.map +1 -0
  32. package/dist/baselines/atomizer/pipeline.d.ts +65 -0
  33. package/dist/baselines/atomizer/pipeline.d.ts.map +1 -0
  34. package/dist/baselines/atomizer/pipeline.js +510 -0
  35. package/dist/baselines/atomizer/pipeline.js.map +1 -0
  36. package/dist/baselines/atomizer/premergeRuns.d.ts +26 -0
  37. package/dist/baselines/atomizer/premergeRuns.d.ts.map +1 -0
  38. package/dist/baselines/atomizer/premergeRuns.js +150 -0
  39. package/dist/baselines/atomizer/premergeRuns.js.map +1 -0
  40. package/dist/baselines/atomizer/trackChangesAcceptor.d.ts +63 -0
  41. package/dist/baselines/atomizer/trackChangesAcceptor.d.ts.map +1 -0
  42. package/dist/baselines/atomizer/trackChangesAcceptor.js +254 -0
  43. package/dist/baselines/atomizer/trackChangesAcceptor.js.map +1 -0
  44. package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts +64 -0
  45. package/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts.map +1 -0
  46. package/dist/baselines/atomizer/trackChangesAcceptorAst.js +586 -0
  47. package/dist/baselines/atomizer/trackChangesAcceptorAst.js.map +1 -0
  48. package/dist/baselines/atomizer/xmlToWmlElement.d.ts +65 -0
  49. package/dist/baselines/atomizer/xmlToWmlElement.d.ts.map +1 -0
  50. package/dist/baselines/atomizer/xmlToWmlElement.js +95 -0
  51. package/dist/baselines/atomizer/xmlToWmlElement.js.map +1 -0
  52. package/dist/baselines/diffmatch/documentBuilder.d.ts +44 -0
  53. package/dist/baselines/diffmatch/documentBuilder.d.ts.map +1 -0
  54. package/dist/baselines/diffmatch/documentBuilder.js +227 -0
  55. package/dist/baselines/diffmatch/documentBuilder.js.map +1 -0
  56. package/dist/baselines/diffmatch/paragraphAlignment.d.ts +75 -0
  57. package/dist/baselines/diffmatch/paragraphAlignment.d.ts.map +1 -0
  58. package/dist/baselines/diffmatch/paragraphAlignment.js +206 -0
  59. package/dist/baselines/diffmatch/paragraphAlignment.js.map +1 -0
  60. package/dist/baselines/diffmatch/pipeline.d.ts +33 -0
  61. package/dist/baselines/diffmatch/pipeline.d.ts.map +1 -0
  62. package/dist/baselines/diffmatch/pipeline.js +84 -0
  63. package/dist/baselines/diffmatch/pipeline.js.map +1 -0
  64. package/dist/baselines/diffmatch/runDiff.d.ts +53 -0
  65. package/dist/baselines/diffmatch/runDiff.d.ts.map +1 -0
  66. package/dist/baselines/diffmatch/runDiff.js +253 -0
  67. package/dist/baselines/diffmatch/runDiff.js.map +1 -0
  68. package/dist/baselines/diffmatch/trackChangesRenderer.d.ts +64 -0
  69. package/dist/baselines/diffmatch/trackChangesRenderer.d.ts.map +1 -0
  70. package/dist/baselines/diffmatch/trackChangesRenderer.js +178 -0
  71. package/dist/baselines/diffmatch/trackChangesRenderer.js.map +1 -0
  72. package/dist/baselines/diffmatch/xmlParser.d.ts +45 -0
  73. package/dist/baselines/diffmatch/xmlParser.d.ts.map +1 -0
  74. package/dist/baselines/diffmatch/xmlParser.js +344 -0
  75. package/dist/baselines/diffmatch/xmlParser.js.map +1 -0
  76. package/dist/baselines/wmlcomparer/DocxodusWasm.d.ts +51 -0
  77. package/dist/baselines/wmlcomparer/DocxodusWasm.d.ts.map +1 -0
  78. package/dist/baselines/wmlcomparer/DocxodusWasm.js +83 -0
  79. package/dist/baselines/wmlcomparer/DocxodusWasm.js.map +1 -0
  80. package/dist/baselines/wmlcomparer/DotnetCli.d.ts +40 -0
  81. package/dist/baselines/wmlcomparer/DotnetCli.d.ts.map +1 -0
  82. package/dist/baselines/wmlcomparer/DotnetCli.js +135 -0
  83. package/dist/baselines/wmlcomparer/DotnetCli.js.map +1 -0
  84. package/dist/benchmark/metrics.d.ts +72 -0
  85. package/dist/benchmark/metrics.d.ts.map +1 -0
  86. package/dist/benchmark/metrics.js +45 -0
  87. package/dist/benchmark/metrics.js.map +1 -0
  88. package/dist/benchmark/reporter.d.ts +23 -0
  89. package/dist/benchmark/reporter.d.ts.map +1 -0
  90. package/dist/benchmark/reporter.js +147 -0
  91. package/dist/benchmark/reporter.js.map +1 -0
  92. package/dist/benchmark/runner.d.ts +30 -0
  93. package/dist/benchmark/runner.d.ts.map +1 -0
  94. package/dist/benchmark/runner.js +233 -0
  95. package/dist/benchmark/runner.js.map +1 -0
  96. package/dist/cli/compare-two.d.ts +28 -0
  97. package/dist/cli/compare-two.d.ts.map +1 -0
  98. package/dist/cli/compare-two.js +110 -0
  99. package/dist/cli/compare-two.js.map +1 -0
  100. package/dist/cli/index.d.ts +3 -0
  101. package/dist/cli/index.d.ts.map +1 -0
  102. package/dist/cli/index.js +21 -0
  103. package/dist/cli/index.js.map +1 -0
  104. package/dist/core-types.d.ts +296 -0
  105. package/dist/core-types.d.ts.map +1 -0
  106. package/dist/core-types.js +122 -0
  107. package/dist/core-types.js.map +1 -0
  108. package/dist/footnotes.d.ts +144 -0
  109. package/dist/footnotes.d.ts.map +1 -0
  110. package/dist/footnotes.js +291 -0
  111. package/dist/footnotes.js.map +1 -0
  112. package/dist/format-detection.d.ts +120 -0
  113. package/dist/format-detection.d.ts.map +1 -0
  114. package/dist/format-detection.js +338 -0
  115. package/dist/format-detection.js.map +1 -0
  116. package/dist/index.d.ts +177 -0
  117. package/dist/index.d.ts.map +1 -0
  118. package/dist/index.js +55 -0
  119. package/dist/index.js.map +1 -0
  120. package/dist/integration/output-artifacts.d.ts +6 -0
  121. package/dist/integration/output-artifacts.d.ts.map +1 -0
  122. package/dist/integration/output-artifacts.js +30 -0
  123. package/dist/integration/output-artifacts.js.map +1 -0
  124. package/dist/move-detection.d.ts +211 -0
  125. package/dist/move-detection.d.ts.map +1 -0
  126. package/dist/move-detection.js +391 -0
  127. package/dist/move-detection.js.map +1 -0
  128. package/dist/numbering.d.ts +136 -0
  129. package/dist/numbering.d.ts.map +1 -0
  130. package/dist/numbering.js +446 -0
  131. package/dist/numbering.js.map +1 -0
  132. package/dist/primitives/accept_changes.d.ts +30 -0
  133. package/dist/primitives/accept_changes.d.ts.map +1 -0
  134. package/dist/primitives/accept_changes.js +241 -0
  135. package/dist/primitives/accept_changes.js.map +1 -0
  136. package/dist/primitives/bookmarks.d.ts +12 -0
  137. package/dist/primitives/bookmarks.d.ts.map +1 -0
  138. package/dist/primitives/bookmarks.js +248 -0
  139. package/dist/primitives/bookmarks.js.map +1 -0
  140. package/dist/primitives/comments.d.ts +88 -0
  141. package/dist/primitives/comments.d.ts.map +1 -0
  142. package/dist/primitives/comments.js +703 -0
  143. package/dist/primitives/comments.js.map +1 -0
  144. package/dist/primitives/document.d.ts +168 -0
  145. package/dist/primitives/document.d.ts.map +1 -0
  146. package/dist/primitives/document.js +532 -0
  147. package/dist/primitives/document.js.map +1 -0
  148. package/dist/primitives/document_view.d.ts +93 -0
  149. package/dist/primitives/document_view.d.ts.map +1 -0
  150. package/dist/primitives/document_view.js +722 -0
  151. package/dist/primitives/document_view.js.map +1 -0
  152. package/dist/primitives/dom-helpers.d.ts +94 -0
  153. package/dist/primitives/dom-helpers.d.ts.map +1 -0
  154. package/dist/primitives/dom-helpers.js +219 -0
  155. package/dist/primitives/dom-helpers.js.map +1 -0
  156. package/dist/primitives/errors.d.ts +7 -0
  157. package/dist/primitives/errors.d.ts.map +1 -0
  158. package/dist/primitives/errors.js +10 -0
  159. package/dist/primitives/errors.js.map +1 -0
  160. package/dist/primitives/extract_revisions.d.ts +50 -0
  161. package/dist/primitives/extract_revisions.d.ts.map +1 -0
  162. package/dist/primitives/extract_revisions.js +340 -0
  163. package/dist/primitives/extract_revisions.js.map +1 -0
  164. package/dist/primitives/footnotes.d.ts +37 -0
  165. package/dist/primitives/footnotes.d.ts.map +1 -0
  166. package/dist/primitives/footnotes.js +552 -0
  167. package/dist/primitives/footnotes.js.map +1 -0
  168. package/dist/primitives/formatting_tags.d.ts +30 -0
  169. package/dist/primitives/formatting_tags.d.ts.map +1 -0
  170. package/dist/primitives/formatting_tags.js +217 -0
  171. package/dist/primitives/formatting_tags.js.map +1 -0
  172. package/dist/primitives/index.d.ts +26 -0
  173. package/dist/primitives/index.d.ts.map +1 -0
  174. package/dist/primitives/index.js +26 -0
  175. package/dist/primitives/index.js.map +1 -0
  176. package/dist/primitives/layout.d.ts +53 -0
  177. package/dist/primitives/layout.d.ts.map +1 -0
  178. package/dist/primitives/layout.js +178 -0
  179. package/dist/primitives/layout.js.map +1 -0
  180. package/dist/primitives/list_labels.d.ts +19 -0
  181. package/dist/primitives/list_labels.d.ts.map +1 -0
  182. package/dist/primitives/list_labels.js +57 -0
  183. package/dist/primitives/list_labels.js.map +1 -0
  184. package/dist/primitives/matching.d.ts +17 -0
  185. package/dist/primitives/matching.d.ts.map +1 -0
  186. package/dist/primitives/matching.js +144 -0
  187. package/dist/primitives/matching.js.map +1 -0
  188. package/dist/primitives/merge_runs.d.ts +23 -0
  189. package/dist/primitives/merge_runs.d.ts.map +1 -0
  190. package/dist/primitives/merge_runs.js +195 -0
  191. package/dist/primitives/merge_runs.js.map +1 -0
  192. package/dist/primitives/namespaces.d.ts +90 -0
  193. package/dist/primitives/namespaces.d.ts.map +1 -0
  194. package/dist/primitives/namespaces.js +107 -0
  195. package/dist/primitives/namespaces.js.map +1 -0
  196. package/dist/primitives/numbering.d.ts +27 -0
  197. package/dist/primitives/numbering.d.ts.map +1 -0
  198. package/dist/primitives/numbering.js +182 -0
  199. package/dist/primitives/numbering.js.map +1 -0
  200. package/dist/primitives/prevent_double_elevation.d.ts +18 -0
  201. package/dist/primitives/prevent_double_elevation.d.ts.map +1 -0
  202. package/dist/primitives/prevent_double_elevation.js +190 -0
  203. package/dist/primitives/prevent_double_elevation.js.map +1 -0
  204. package/dist/primitives/reject_changes.d.ts +27 -0
  205. package/dist/primitives/reject_changes.d.ts.map +1 -0
  206. package/dist/primitives/reject_changes.js +371 -0
  207. package/dist/primitives/reject_changes.js.map +1 -0
  208. package/dist/primitives/relationships.d.ts +7 -0
  209. package/dist/primitives/relationships.d.ts.map +1 -0
  210. package/dist/primitives/relationships.js +24 -0
  211. package/dist/primitives/relationships.js.map +1 -0
  212. package/dist/primitives/semantic_tags.d.ts +32 -0
  213. package/dist/primitives/semantic_tags.d.ts.map +1 -0
  214. package/dist/primitives/semantic_tags.js +139 -0
  215. package/dist/primitives/semantic_tags.js.map +1 -0
  216. package/dist/primitives/simplify_redlines.d.ts +19 -0
  217. package/dist/primitives/simplify_redlines.d.ts.map +1 -0
  218. package/dist/primitives/simplify_redlines.js +94 -0
  219. package/dist/primitives/simplify_redlines.js.map +1 -0
  220. package/dist/primitives/styles.d.ts +36 -0
  221. package/dist/primitives/styles.d.ts.map +1 -0
  222. package/dist/primitives/styles.js +190 -0
  223. package/dist/primitives/styles.js.map +1 -0
  224. package/dist/primitives/text.d.ts +27 -0
  225. package/dist/primitives/text.d.ts.map +1 -0
  226. package/dist/primitives/text.js +416 -0
  227. package/dist/primitives/text.js.map +1 -0
  228. package/dist/primitives/validate_document.d.ts +24 -0
  229. package/dist/primitives/validate_document.d.ts.map +1 -0
  230. package/dist/primitives/validate_document.js +147 -0
  231. package/dist/primitives/validate_document.js.map +1 -0
  232. package/dist/primitives/xml.d.ts +5 -0
  233. package/dist/primitives/xml.d.ts.map +1 -0
  234. package/dist/primitives/xml.js +19 -0
  235. package/dist/primitives/xml.js.map +1 -0
  236. package/dist/primitives/zip.d.ts +25 -0
  237. package/dist/primitives/zip.d.ts.map +1 -0
  238. package/dist/primitives/zip.js +78 -0
  239. package/dist/primitives/zip.js.map +1 -0
  240. package/dist/shared/docx/DocxArchive.d.ts +94 -0
  241. package/dist/shared/docx/DocxArchive.d.ts.map +1 -0
  242. package/dist/shared/docx/DocxArchive.js +169 -0
  243. package/dist/shared/docx/DocxArchive.js.map +1 -0
  244. package/dist/shared/ooxml/namespaces.d.ts +149 -0
  245. package/dist/shared/ooxml/namespaces.d.ts.map +1 -0
  246. package/dist/shared/ooxml/namespaces.js +224 -0
  247. package/dist/shared/ooxml/namespaces.js.map +1 -0
  248. package/dist/shared/ooxml/types.d.ts +136 -0
  249. package/dist/shared/ooxml/types.d.ts.map +1 -0
  250. package/dist/shared/ooxml/types.js +7 -0
  251. package/dist/shared/ooxml/types.js.map +1 -0
  252. package/package.json +63 -6
@@ -0,0 +1,552 @@
1
+ /**
2
+ * footnotes — OOXML footnote bootstrapping, CRUD, and display numbering.
3
+ *
4
+ * Creates footnote XML parts when missing, inserts footnote reference runs,
5
+ * and supports reading, updating, and deleting footnotes.
6
+ */
7
+ import { OOXML, W } from './namespaces.js';
8
+ import { parseXml, serializeXml } from './xml.js';
9
+ import { getParagraphRuns } from './text.js';
10
+ import { getParagraphBookmarkId } from './bookmarks.js';
11
+ import { findUniqueSubstringMatch } from './matching.js';
12
+ // ── Relationship & content types ────────────────────────────────────────
13
+ const REL_TYPE_FOOTNOTES = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes';
14
+ const CT_FOOTNOTES = 'application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml';
15
+ // ── Minimal XML template ────────────────────────────────────────────────
16
+ const FOOTNOTES_XML_TEMPLATE = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>` +
17
+ `<w:footnotes xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"` +
18
+ ` xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml">` +
19
+ `<w:footnote w:type="separator" w:id="-1">` +
20
+ `<w:p><w:r><w:separator/></w:r></w:p>` +
21
+ `</w:footnote>` +
22
+ `<w:footnote w:type="continuationSeparator" w:id="0">` +
23
+ `<w:p><w:r><w:continuationSeparator/></w:r></w:p>` +
24
+ `</w:footnote>` +
25
+ `</w:footnotes>`;
26
+ // ── Reserved entry detection ────────────────────────────────────────────
27
+ function getWAttr(el, localName) {
28
+ return el.getAttributeNS(OOXML.W_NS, localName) ?? el.getAttribute(`w:${localName}`) ?? el.getAttribute(localName);
29
+ }
30
+ export function isReservedFootnote(footnoteEl) {
31
+ const typ = getWAttr(footnoteEl, 'type');
32
+ return typ === 'separator' || typ === 'continuationSeparator';
33
+ }
34
+ // ── Part bootstrapping ──────────────────────────────────────────────────
35
+ export async function bootstrapFootnoteParts(zip) {
36
+ const created = [];
37
+ if (!zip.hasFile('word/footnotes.xml')) {
38
+ zip.writeText('word/footnotes.xml', FOOTNOTES_XML_TEMPLATE);
39
+ created.push('word/footnotes.xml');
40
+ }
41
+ if (created.length === 0)
42
+ return { partsCreated: [] };
43
+ // Update [Content_Types].xml
44
+ await ensureFootnoteContentTypes(zip, created);
45
+ // Update word/_rels/document.xml.rels
46
+ await ensureFootnoteRelationships(zip, created);
47
+ return { partsCreated: created };
48
+ }
49
+ async function ensureFootnoteContentTypes(zip, newParts) {
50
+ const ctPath = '[Content_Types].xml';
51
+ let ctXml;
52
+ try {
53
+ ctXml = await zip.readText(ctPath);
54
+ }
55
+ catch {
56
+ ctXml =
57
+ `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>` +
58
+ `<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"/>`;
59
+ }
60
+ const ctDoc = parseXml(ctXml);
61
+ const typesEl = ctDoc.documentElement;
62
+ const ctNs = 'http://schemas.openxmlformats.org/package/2006/content-types';
63
+ const partToCt = {
64
+ 'word/footnotes.xml': CT_FOOTNOTES,
65
+ };
66
+ const overrides = Array.from(typesEl.getElementsByTagNameNS(ctNs, 'Override'));
67
+ const existingPartNames = new Set(overrides.map((o) => o.getAttribute('PartName')));
68
+ for (const part of newParts) {
69
+ const partName = `/${part}`;
70
+ const contentType = partToCt[part];
71
+ if (!contentType || existingPartNames.has(partName))
72
+ continue;
73
+ const override = ctDoc.createElementNS(ctNs, 'Override');
74
+ override.setAttribute('PartName', partName);
75
+ override.setAttribute('ContentType', contentType);
76
+ typesEl.appendChild(override);
77
+ }
78
+ zip.writeText(ctPath, serializeXml(ctDoc));
79
+ }
80
+ async function ensureFootnoteRelationships(zip, newParts) {
81
+ const relsPath = 'word/_rels/document.xml.rels';
82
+ let relsXml;
83
+ try {
84
+ relsXml = await zip.readText(relsPath);
85
+ }
86
+ catch {
87
+ relsXml =
88
+ `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>` +
89
+ `<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"/>`;
90
+ }
91
+ const relsDoc = parseXml(relsXml);
92
+ const relsEl = relsDoc.documentElement;
93
+ const relNs = OOXML.REL_NS;
94
+ const partToRelType = {
95
+ 'word/footnotes.xml': REL_TYPE_FOOTNOTES,
96
+ };
97
+ const existingRels = Array.from(relsEl.getElementsByTagNameNS(relNs, 'Relationship'));
98
+ const existingTypes = new Set(existingRels.map((r) => r.getAttribute('Type')));
99
+ let maxId = 0;
100
+ for (const rel of existingRels) {
101
+ const id = rel.getAttribute('Id') ?? '';
102
+ const match = /^rId(\d+)$/.exec(id);
103
+ if (match)
104
+ maxId = Math.max(maxId, parseInt(match[1], 10));
105
+ }
106
+ for (const part of newParts) {
107
+ const relType = partToRelType[part];
108
+ if (!relType || existingTypes.has(relType))
109
+ continue;
110
+ maxId++;
111
+ const rel = relsDoc.createElementNS(relNs, 'Relationship');
112
+ rel.setAttribute('Id', `rId${maxId}`);
113
+ rel.setAttribute('Type', relType);
114
+ rel.setAttribute('Target', part.replace('word/', ''));
115
+ relsEl.appendChild(rel);
116
+ }
117
+ zip.writeText(relsPath, serializeXml(relsDoc));
118
+ }
119
+ // ── ID allocation ───────────────────────────────────────────────────────
120
+ function allocateNextFootnoteId(footnotesDoc) {
121
+ const fnEls = footnotesDoc.getElementsByTagNameNS(OOXML.W_NS, W.footnote);
122
+ let maxId = 0;
123
+ for (let i = 0; i < fnEls.length; i++) {
124
+ const el = fnEls.item(i);
125
+ const idStr = getWAttr(el, 'id');
126
+ if (idStr) {
127
+ const id = parseInt(idStr, 10);
128
+ if (id > maxId)
129
+ maxId = id;
130
+ }
131
+ }
132
+ return maxId + 1;
133
+ }
134
+ // ── Display number computation ──────────────────────────────────────────
135
+ function buildDisplayNumberMap(documentXml, footnotesDoc) {
136
+ // Build set of reserved IDs (by type)
137
+ const reservedIds = new Set();
138
+ const fnEls = footnotesDoc.getElementsByTagNameNS(OOXML.W_NS, W.footnote);
139
+ for (let i = 0; i < fnEls.length; i++) {
140
+ const el = fnEls.item(i);
141
+ if (isReservedFootnote(el)) {
142
+ const idStr = getWAttr(el, 'id');
143
+ if (idStr)
144
+ reservedIds.add(parseInt(idStr, 10));
145
+ }
146
+ }
147
+ // Scan document.xml for w:footnoteReference in DOM order
148
+ const refs = documentXml.getElementsByTagNameNS(OOXML.W_NS, W.footnoteReference);
149
+ const map = new Map();
150
+ let displayNum = 1;
151
+ for (let i = 0; i < refs.length; i++) {
152
+ const ref = refs.item(i);
153
+ const idStr = getWAttr(ref, 'id');
154
+ if (!idStr)
155
+ continue;
156
+ const id = parseInt(idStr, 10);
157
+ if (reservedIds.has(id))
158
+ continue;
159
+ if (!map.has(id)) {
160
+ map.set(id, displayNum++);
161
+ }
162
+ }
163
+ return map;
164
+ }
165
+ // ── Reading ─────────────────────────────────────────────────────────────
166
+ export async function getFootnotes(zip, documentXml) {
167
+ const footnotesText = await zip.readTextOrNull('word/footnotes.xml');
168
+ if (!footnotesText)
169
+ return [];
170
+ const footnotesDoc = parseXml(footnotesText);
171
+ const fnEls = footnotesDoc.getElementsByTagNameNS(OOXML.W_NS, W.footnote);
172
+ if (fnEls.length === 0)
173
+ return [];
174
+ const displayMap = buildDisplayNumberMap(documentXml, footnotesDoc);
175
+ // Build map of footnoteReference id → anchored paragraph bookmark id
176
+ const anchorMap = new Map();
177
+ const refs = documentXml.getElementsByTagNameNS(OOXML.W_NS, W.footnoteReference);
178
+ for (let i = 0; i < refs.length; i++) {
179
+ const ref = refs.item(i);
180
+ const idStr = getWAttr(ref, 'id');
181
+ if (!idStr)
182
+ continue;
183
+ const id = parseInt(idStr, 10);
184
+ if (anchorMap.has(id))
185
+ continue;
186
+ // Walk up to enclosing <w:p>
187
+ let parent = ref.parentNode;
188
+ while (parent && parent.nodeType === 1) {
189
+ const pel = parent;
190
+ if (pel.localName === W.p && pel.namespaceURI === OOXML.W_NS) {
191
+ anchorMap.set(id, getParagraphBookmarkId(pel));
192
+ break;
193
+ }
194
+ parent = parent.parentNode;
195
+ }
196
+ }
197
+ const footnotes = [];
198
+ for (let i = 0; i < fnEls.length; i++) {
199
+ const el = fnEls.item(i);
200
+ if (isReservedFootnote(el))
201
+ continue;
202
+ const idStr = getWAttr(el, 'id');
203
+ if (!idStr)
204
+ continue;
205
+ const id = parseInt(idStr, 10);
206
+ const text = extractFootnoteText(el);
207
+ const displayNumber = displayMap.get(id) ?? 0;
208
+ const anchoredParagraphId = anchorMap.get(id) ?? null;
209
+ footnotes.push({ id, displayNumber, text, anchoredParagraphId });
210
+ }
211
+ // Sort by display number (document order)
212
+ footnotes.sort((a, b) => a.displayNumber - b.displayNumber);
213
+ return footnotes;
214
+ }
215
+ export async function getFootnote(zip, documentXml, noteId) {
216
+ const all = await getFootnotes(zip, documentXml);
217
+ return all.find((f) => f.id === noteId) ?? null;
218
+ }
219
+ function extractFootnoteText(footnoteEl) {
220
+ const paragraphs = footnoteEl.getElementsByTagNameNS(OOXML.W_NS, W.p);
221
+ const paraTexts = [];
222
+ for (let pi = 0; pi < paragraphs.length; pi++) {
223
+ const p = paragraphs.item(pi);
224
+ const runs = p.getElementsByTagNameNS(OOXML.W_NS, W.r);
225
+ const parts = [];
226
+ for (let ri = 0; ri < runs.length; ri++) {
227
+ const run = runs.item(ri);
228
+ // Skip runs that contain footnoteRef (metadata, not user text)
229
+ const fnRefs = run.getElementsByTagNameNS(OOXML.W_NS, W.footnoteRef);
230
+ if (fnRefs.length > 0)
231
+ continue;
232
+ const ts = run.getElementsByTagNameNS(OOXML.W_NS, W.t);
233
+ for (let ti = 0; ti < ts.length; ti++) {
234
+ const t = ts.item(ti);
235
+ parts.push(t.textContent ?? '');
236
+ }
237
+ }
238
+ paraTexts.push(parts.join(''));
239
+ }
240
+ return paraTexts.join('\n');
241
+ }
242
+ // ── Insertion ───────────────────────────────────────────────────────────
243
+ export async function addFootnote(documentXml, zip, params) {
244
+ const { paragraphEl, afterText, text } = params;
245
+ // Load or bootstrap footnotes.xml
246
+ const footnotesXml = await zip.readText('word/footnotes.xml');
247
+ const footnotesDoc = parseXml(footnotesXml);
248
+ // Allocate next ID
249
+ const noteId = allocateNextFootnoteId(footnotesDoc);
250
+ // Insert footnoteReference run in document body
251
+ insertFootnoteReference(documentXml, paragraphEl, noteId, afterText);
252
+ // Add footnote body to footnotes.xml
253
+ addFootnoteElement(footnotesDoc, noteId, text);
254
+ zip.writeText('word/footnotes.xml', serializeXml(footnotesDoc));
255
+ return { noteId };
256
+ }
257
+ function insertFootnoteReference(documentXml, paragraphEl, noteId, afterText) {
258
+ // Create the reference run
259
+ const refRun = documentXml.createElementNS(OOXML.W_NS, 'w:r');
260
+ const rPr = documentXml.createElementNS(OOXML.W_NS, 'w:rPr');
261
+ const rStyle = documentXml.createElementNS(OOXML.W_NS, 'w:rStyle');
262
+ rStyle.setAttributeNS(OOXML.W_NS, 'w:val', 'FootnoteReference');
263
+ rPr.appendChild(rStyle);
264
+ refRun.appendChild(rPr);
265
+ const fnRef = documentXml.createElementNS(OOXML.W_NS, 'w:footnoteReference');
266
+ fnRef.setAttributeNS(OOXML.W_NS, 'w:id', String(noteId));
267
+ refRun.appendChild(fnRef);
268
+ if (!afterText) {
269
+ // Default: append at end of paragraph
270
+ paragraphEl.appendChild(refRun);
271
+ return;
272
+ }
273
+ // Find the text boundary using unique substring matching
274
+ const runs = getParagraphRuns(paragraphEl);
275
+ const fullText = runs.map((r) => r.text).join('');
276
+ const match = findUniqueSubstringMatch(fullText, afterText);
277
+ if (match.status === 'not_found') {
278
+ throw new Error(`after_text '${afterText}' not found in paragraph`);
279
+ }
280
+ if (match.status === 'multiple') {
281
+ throw new Error(`after_text '${afterText}' found ${match.matchCount} times in paragraph`);
282
+ }
283
+ // We need to insert after the end of the matched text
284
+ const insertOffset = match.end;
285
+ // Map offset to run position
286
+ let pos = 0;
287
+ for (let i = 0; i < runs.length; i++) {
288
+ const run = runs[i];
289
+ const runEnd = pos + run.text.length;
290
+ if (insertOffset <= pos) {
291
+ // Insert before this run
292
+ const parent = run.r.parentNode;
293
+ parent.insertBefore(refRun, run.r);
294
+ return;
295
+ }
296
+ if (insertOffset > pos && insertOffset < runEnd) {
297
+ // Need to split this run at the offset
298
+ const splitOffset = insertOffset - pos;
299
+ splitRunAndInsertReference(run.r, splitOffset, refRun);
300
+ return;
301
+ }
302
+ if (insertOffset === runEnd) {
303
+ // Insert after this run
304
+ const parent = run.r.parentNode;
305
+ parent.insertBefore(refRun, run.r.nextSibling);
306
+ return;
307
+ }
308
+ pos = runEnd;
309
+ }
310
+ // Fallback: append at end
311
+ paragraphEl.appendChild(refRun);
312
+ }
313
+ function splitRunAndInsertReference(run, visibleOffset, refRun) {
314
+ const doc = run.ownerDocument;
315
+ if (!doc)
316
+ throw new Error('Run has no ownerDocument');
317
+ const parent = run.parentNode;
318
+ if (!parent)
319
+ throw new Error('Run has no parent');
320
+ // Clone the run for the right portion
321
+ const rightRun = run.cloneNode(true);
322
+ parent.insertBefore(rightRun, run.nextSibling);
323
+ // Split text content in the runs
324
+ const leftContent = getDirectContentElements(run);
325
+ const rightContent = getDirectContentElements(rightRun);
326
+ let pos = 0;
327
+ for (let i = 0; i < leftContent.length; i++) {
328
+ const lEl = leftContent[i];
329
+ const rEl = rightContent[i];
330
+ if (lEl.namespaceURI !== OOXML.W_NS)
331
+ continue;
332
+ if (lEl.localName === W.t) {
333
+ const full = lEl.textContent ?? '';
334
+ const len = full.length;
335
+ const start = pos;
336
+ const end = pos + len;
337
+ if (visibleOffset <= start) {
338
+ // Entire element belongs to right
339
+ lEl.parentNode?.removeChild(lEl);
340
+ pos += len;
341
+ continue;
342
+ }
343
+ if (visibleOffset >= end) {
344
+ // Entire element belongs to left
345
+ rEl.parentNode?.removeChild(rEl);
346
+ pos += len;
347
+ continue;
348
+ }
349
+ // Split inside this element
350
+ const leftText = full.slice(0, visibleOffset - start);
351
+ const rightText = full.slice(visibleOffset - start);
352
+ lEl.textContent = leftText;
353
+ rEl.textContent = rightText;
354
+ setXmlSpacePreserve(lEl, leftText);
355
+ setXmlSpacePreserve(rEl, rightText);
356
+ if (!leftText)
357
+ lEl.parentNode?.removeChild(lEl);
358
+ if (!rightText)
359
+ rEl.parentNode?.removeChild(rEl);
360
+ pos += len;
361
+ }
362
+ else if (lEl.localName === W.tab || lEl.localName === W.br) {
363
+ if (visibleOffset <= pos) {
364
+ lEl.parentNode?.removeChild(lEl);
365
+ }
366
+ else {
367
+ rEl.parentNode?.removeChild(rEl);
368
+ }
369
+ pos += 1;
370
+ }
371
+ else {
372
+ // Non-visible elements (rPr is already handled by cloneNode)
373
+ if (lEl.localName !== W.rPr) {
374
+ if (pos < visibleOffset)
375
+ rEl.parentNode?.removeChild(rEl);
376
+ else
377
+ lEl.parentNode?.removeChild(lEl);
378
+ }
379
+ }
380
+ }
381
+ // Insert the reference run between left and right
382
+ parent.insertBefore(refRun, rightRun);
383
+ // Clean up empty runs
384
+ if (!hasVisibleContent(run))
385
+ run.parentNode?.removeChild(run);
386
+ if (!hasVisibleContent(rightRun))
387
+ rightRun.parentNode?.removeChild(rightRun);
388
+ }
389
+ function getDirectContentElements(run) {
390
+ const out = [];
391
+ for (const child of Array.from(run.childNodes)) {
392
+ if (child.nodeType !== 1)
393
+ continue;
394
+ out.push(child);
395
+ }
396
+ return out;
397
+ }
398
+ function hasVisibleContent(run) {
399
+ for (const child of Array.from(run.childNodes)) {
400
+ if (child.nodeType !== 1)
401
+ continue;
402
+ const el = child;
403
+ if (el.namespaceURI !== OOXML.W_NS)
404
+ continue;
405
+ if (el.localName === W.rPr)
406
+ continue;
407
+ return true;
408
+ }
409
+ return false;
410
+ }
411
+ function setXmlSpacePreserve(t, text) {
412
+ if (!text)
413
+ return;
414
+ if (text.startsWith(' ') || text.endsWith(' ')) {
415
+ t.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');
416
+ }
417
+ }
418
+ function addFootnoteElement(footnotesDoc, noteId, text) {
419
+ const root = footnotesDoc.documentElement;
420
+ const footnoteEl = footnotesDoc.createElementNS(OOXML.W_NS, 'w:footnote');
421
+ footnoteEl.setAttributeNS(OOXML.W_NS, 'w:id', String(noteId));
422
+ // Word-compatible body skeleton
423
+ const p = footnotesDoc.createElementNS(OOXML.W_NS, 'w:p');
424
+ // Paragraph properties with FootnoteText style
425
+ const pPr = footnotesDoc.createElementNS(OOXML.W_NS, 'w:pPr');
426
+ const pStyle = footnotesDoc.createElementNS(OOXML.W_NS, 'w:pStyle');
427
+ pStyle.setAttributeNS(OOXML.W_NS, 'w:val', 'FootnoteText');
428
+ pPr.appendChild(pStyle);
429
+ p.appendChild(pPr);
430
+ // footnoteRef run (required by Word to display the footnote number)
431
+ const refRun = footnotesDoc.createElementNS(OOXML.W_NS, 'w:r');
432
+ const refRPr = footnotesDoc.createElementNS(OOXML.W_NS, 'w:rPr');
433
+ const refRStyle = footnotesDoc.createElementNS(OOXML.W_NS, 'w:rStyle');
434
+ refRStyle.setAttributeNS(OOXML.W_NS, 'w:val', 'FootnoteReference');
435
+ refRPr.appendChild(refRStyle);
436
+ refRun.appendChild(refRPr);
437
+ const fnRefEl = footnotesDoc.createElementNS(OOXML.W_NS, 'w:footnoteRef');
438
+ refRun.appendChild(fnRefEl);
439
+ p.appendChild(refRun);
440
+ // Space separator run
441
+ const spaceRun = footnotesDoc.createElementNS(OOXML.W_NS, 'w:r');
442
+ const spaceT = footnotesDoc.createElementNS(OOXML.W_NS, 'w:t');
443
+ spaceT.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');
444
+ spaceT.appendChild(footnotesDoc.createTextNode(' '));
445
+ spaceRun.appendChild(spaceT);
446
+ p.appendChild(spaceRun);
447
+ // User text run
448
+ const textRun = footnotesDoc.createElementNS(OOXML.W_NS, 'w:r');
449
+ const t = footnotesDoc.createElementNS(OOXML.W_NS, 'w:t');
450
+ if (text.startsWith(' ') || text.endsWith(' ')) {
451
+ t.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');
452
+ }
453
+ t.appendChild(footnotesDoc.createTextNode(text));
454
+ textRun.appendChild(t);
455
+ p.appendChild(textRun);
456
+ footnoteEl.appendChild(p);
457
+ root.appendChild(footnoteEl);
458
+ }
459
+ // ── Update ──────────────────────────────────────────────────────────────
460
+ export async function updateFootnoteText(zip, params) {
461
+ const { noteId, newText } = params;
462
+ const footnotesXml = await zip.readText('word/footnotes.xml');
463
+ const footnotesDoc = parseXml(footnotesXml);
464
+ const fnEl = findFootnoteById(footnotesDoc, noteId);
465
+ if (!fnEl)
466
+ throw new Error(`Footnote ID ${noteId} not found`);
467
+ if (isReservedFootnote(fnEl))
468
+ throw new Error(`Cannot update reserved footnote ID ${noteId}`);
469
+ // Find first paragraph
470
+ const paragraphs = fnEl.getElementsByTagNameNS(OOXML.W_NS, W.p);
471
+ if (paragraphs.length === 0)
472
+ throw new Error(`Footnote ID ${noteId} has no paragraphs`);
473
+ const firstP = paragraphs.item(0);
474
+ // Replace text runs in first paragraph (preserve footnoteRef run)
475
+ const runs = firstP.getElementsByTagNameNS(OOXML.W_NS, W.r);
476
+ const runsToRemove = [];
477
+ for (let i = 0; i < runs.length; i++) {
478
+ const run = runs.item(i);
479
+ // Keep runs that contain footnoteRef
480
+ const fnRefs = run.getElementsByTagNameNS(OOXML.W_NS, W.footnoteRef);
481
+ if (fnRefs.length > 0)
482
+ continue;
483
+ runsToRemove.push(run);
484
+ }
485
+ for (const run of runsToRemove) {
486
+ run.parentNode?.removeChild(run);
487
+ }
488
+ // Add space separator run after footnoteRef
489
+ const spaceRun = footnotesDoc.createElementNS(OOXML.W_NS, 'w:r');
490
+ const spaceT = footnotesDoc.createElementNS(OOXML.W_NS, 'w:t');
491
+ spaceT.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');
492
+ spaceT.appendChild(footnotesDoc.createTextNode(' '));
493
+ spaceRun.appendChild(spaceT);
494
+ firstP.appendChild(spaceRun);
495
+ // Add new text run
496
+ const textRun = footnotesDoc.createElementNS(OOXML.W_NS, 'w:r');
497
+ const t = footnotesDoc.createElementNS(OOXML.W_NS, 'w:t');
498
+ if (newText.startsWith(' ') || newText.endsWith(' ')) {
499
+ t.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');
500
+ }
501
+ t.appendChild(footnotesDoc.createTextNode(newText));
502
+ textRun.appendChild(t);
503
+ firstP.appendChild(textRun);
504
+ zip.writeText('word/footnotes.xml', serializeXml(footnotesDoc));
505
+ }
506
+ // ── Deletion ────────────────────────────────────────────────────────────
507
+ export async function deleteFootnote(documentXml, zip, params) {
508
+ const { noteId } = params;
509
+ const footnotesXml = await zip.readText('word/footnotes.xml');
510
+ const footnotesDoc = parseXml(footnotesXml);
511
+ const fnEl = findFootnoteById(footnotesDoc, noteId);
512
+ if (!fnEl)
513
+ throw new Error(`Footnote ID ${noteId} not found`);
514
+ if (isReservedFootnote(fnEl))
515
+ throw new Error(`Cannot delete reserved footnote ID ${noteId}`);
516
+ // Remove from footnotes.xml
517
+ fnEl.parentNode?.removeChild(fnEl);
518
+ zip.writeText('word/footnotes.xml', serializeXml(footnotesDoc));
519
+ // Remove footnoteReference elements from document.xml
520
+ const refs = documentXml.getElementsByTagNameNS(OOXML.W_NS, W.footnoteReference);
521
+ const refsToRemove = [];
522
+ for (let i = 0; i < refs.length; i++) {
523
+ const ref = refs.item(i);
524
+ const idStr = getWAttr(ref, 'id');
525
+ if (idStr && parseInt(idStr, 10) === noteId) {
526
+ refsToRemove.push(ref);
527
+ }
528
+ }
529
+ for (const ref of refsToRemove) {
530
+ const run = ref.parentNode;
531
+ if (!run)
532
+ continue;
533
+ // Remove only the footnoteReference element, not the entire run
534
+ run.removeChild(ref);
535
+ // If the run is now empty (no visible content), remove it
536
+ if (!hasVisibleContent(run)) {
537
+ run.parentNode?.removeChild(run);
538
+ }
539
+ }
540
+ }
541
+ // ── Helpers ─────────────────────────────────────────────────────────────
542
+ function findFootnoteById(footnotesDoc, noteId) {
543
+ const fnEls = footnotesDoc.getElementsByTagNameNS(OOXML.W_NS, W.footnote);
544
+ for (let i = 0; i < fnEls.length; i++) {
545
+ const el = fnEls.item(i);
546
+ const idStr = getWAttr(el, 'id');
547
+ if (idStr && parseInt(idStr, 10) === noteId)
548
+ return el;
549
+ }
550
+ return null;
551
+ }
552
+ //# sourceMappingURL=footnotes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footnotes.js","sourceRoot":"","sources":["../../src/primitives/footnotes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { RunFormatting } from './styles.js';
2
+ export type AnnotatedRun = {
3
+ text: string;
4
+ formatting: RunFormatting;
5
+ hyperlinkUrl: string | null;
6
+ charCount: number;
7
+ isHeaderRun: boolean;
8
+ };
9
+ export type FormattingBaseline = {
10
+ bold: boolean;
11
+ italic: boolean;
12
+ underline: boolean;
13
+ suppressed: boolean;
14
+ };
15
+ export declare function computeModalBaseline(runs: AnnotatedRun[]): FormattingBaseline;
16
+ export type DefinitionSpan = {
17
+ /** Plain-text offset of the opening quote (inclusive). */
18
+ start: number;
19
+ /** Plain-text offset one past the closing quote (exclusive). */
20
+ end: number;
21
+ /** The defined term text (excluding quotes). */
22
+ term: string;
23
+ };
24
+ export declare function emitFormattingTags(params: {
25
+ runs: AnnotatedRun[];
26
+ baseline: FormattingBaseline;
27
+ definitionSpans?: DefinitionSpan[];
28
+ }): string;
29
+ export declare function mergeAdjacentTags(tagged: string): string;
30
+ //# sourceMappingURL=formatting_tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting_tags.d.ts","sourceRoot":"","sources":["../../src/primitives/formatting_tags.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,aAAa,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAYF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAyC7E;AAyED,MAAM,MAAM,cAAc,GAAG;IAC3B,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;CACpC,GAAG,MAAM,CA2ET;AA8BD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAaxD"}