@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,532 @@
1
+ import { DocxZip } from './zip.js';
2
+ import { parseXml, serializeXml } from './xml.js';
3
+ import { OOXML, W } from './namespaces.js';
4
+ import { findParagraphByBookmarkId, insertParagraphBookmarks, cleanupInternalBookmarks, getParagraphBookmarkId, insertSingleParagraphBookmark, } from './bookmarks.js';
5
+ import { getParagraphRuns, getParagraphText, replaceParagraphTextRange } from './text.js';
6
+ import { buildNodesForDocumentView } from './document_view.js';
7
+ import { findUniqueSubstringMatch } from './matching.js';
8
+ import { parseDocumentRels } from './relationships.js';
9
+ import { setParagraphSpacing, setTableCellPadding, setTableRowHeight, } from './layout.js';
10
+ import { mergeRuns } from './merge_runs.js';
11
+ import { simplifyRedlines } from './simplify_redlines.js';
12
+ import { preventDoubleElevation } from './prevent_double_elevation.js';
13
+ import { validateDocument } from './validate_document.js';
14
+ import { acceptChanges as acceptChangesImpl } from './accept_changes.js';
15
+ import { bootstrapCommentParts, addComment as addCommentImpl, addCommentReply as addCommentReplyImpl, getComments as getCommentsImpl, getComment as getCommentImpl, deleteComment as deleteCommentImpl, } from './comments.js';
16
+ import { bootstrapFootnoteParts, getFootnotes as getFootnotesImpl, getFootnote as getFootnoteImpl, addFootnote as addFootnoteImpl, updateFootnoteText as updateFootnoteTextImpl, deleteFootnote as deleteFootnoteImpl, } from './footnotes.js';
17
+ function prevElementSibling(node) {
18
+ let cur = node?.previousSibling ?? null;
19
+ while (cur) {
20
+ if (cur.nodeType === 1)
21
+ return cur;
22
+ cur = cur.previousSibling;
23
+ }
24
+ return null;
25
+ }
26
+ function nextElementSibling(node) {
27
+ let cur = node?.nextSibling ?? null;
28
+ while (cur) {
29
+ if (cur.nodeType === 1)
30
+ return cur;
31
+ cur = cur.nextSibling;
32
+ }
33
+ return null;
34
+ }
35
+ function isW(el, localName) {
36
+ return !!el && el.namespaceURI === OOXML.W_NS && el.localName === localName;
37
+ }
38
+ export class DocxDocument {
39
+ zip;
40
+ documentXml;
41
+ stylesXml;
42
+ numberingXml;
43
+ footnotesXml;
44
+ relsMap;
45
+ dirty;
46
+ documentViewCache;
47
+ constructor(zip, documentXml, stylesXml, numberingXml, footnotesXml, relsMap) {
48
+ this.zip = zip;
49
+ this.documentXml = documentXml;
50
+ this.stylesXml = stylesXml;
51
+ this.numberingXml = numberingXml;
52
+ this.footnotesXml = footnotesXml;
53
+ this.relsMap = relsMap;
54
+ this.dirty = false;
55
+ this.documentViewCache = null;
56
+ }
57
+ static async load(buffer) {
58
+ const zip = await DocxZip.load(buffer);
59
+ const xml = await zip.readText('word/document.xml');
60
+ const doc = parseXml(xml);
61
+ // Optional parts used for fidelity: list labels + style fingerprints.
62
+ const stylesText = await zip.readTextOrNull('word/styles.xml');
63
+ const numberingText = await zip.readTextOrNull('word/numbering.xml');
64
+ const stylesXml = stylesText ? parseXml(stylesText) : null;
65
+ const numberingXml = numberingText ? parseXml(numberingText) : null;
66
+ // Load footnotes for [^N] marker rendering in document view.
67
+ const footnotesText = await zip.readTextOrNull('word/footnotes.xml');
68
+ const footnotesXml = footnotesText ? parseXml(footnotesText) : null;
69
+ // Load document relationships for hyperlink resolution.
70
+ const relsText = await zip.readTextOrNull('word/_rels/document.xml.rels');
71
+ const relsMap = relsText ? parseDocumentRels(parseXml(relsText)) : new Map();
72
+ return new DocxDocument(zip, doc, stylesXml, numberingXml, footnotesXml, relsMap);
73
+ }
74
+ getParagraphs() {
75
+ const body = this.documentXml.getElementsByTagNameNS(OOXML.W_NS, W.body).item(0);
76
+ if (!body)
77
+ return [];
78
+ return Array.from(body.getElementsByTagNameNS(OOXML.W_NS, W.p));
79
+ }
80
+ getParagraphElementById(bookmarkId) {
81
+ return findParagraphByBookmarkId(this.documentXml, bookmarkId);
82
+ }
83
+ getParagraphTextById(bookmarkId) {
84
+ const p = this.getParagraphElementById(bookmarkId);
85
+ if (!p)
86
+ return null;
87
+ return getParagraphText(p);
88
+ }
89
+ insertParagraphBookmarks(attachmentId) {
90
+ const res = insertParagraphBookmarks(this.documentXml, attachmentId);
91
+ if (res.indexedParagraphs > 0)
92
+ this.dirty = true;
93
+ return { paragraphCount: res.indexedParagraphs };
94
+ }
95
+ /**
96
+ * Normalize the document by merging format-identical adjacent runs and
97
+ * consolidating adjacent same-author tracked-change wrappers.
98
+ * Should be called BEFORE bookmark allocation.
99
+ */
100
+ normalize() {
101
+ const mr = mergeRuns(this.documentXml);
102
+ const sr = simplifyRedlines(this.documentXml);
103
+ // Prevent double elevation in footnote/endnote reference styles
104
+ let de = { doubleElevationsFixed: 0 };
105
+ if (this.stylesXml) {
106
+ de = preventDoubleElevation(this.stylesXml);
107
+ if (de.doubleElevationsFixed > 0) {
108
+ this.zip.writeText('word/styles.xml', serializeXml(this.stylesXml));
109
+ }
110
+ }
111
+ if (mr.runsMerged > 0 || sr.wrappersConsolidated > 0 || de.doubleElevationsFixed > 0) {
112
+ this.dirty = true;
113
+ this.documentViewCache = null;
114
+ }
115
+ return {
116
+ runsMerged: mr.runsMerged,
117
+ proofErrRemoved: mr.proofErrRemoved,
118
+ wrappersConsolidated: sr.wrappersConsolidated,
119
+ doubleElevationsFixed: de.doubleElevationsFixed,
120
+ };
121
+ }
122
+ /**
123
+ * Validate structural integrity of the document.
124
+ * Non-destructive, read-only check.
125
+ */
126
+ validate() {
127
+ return validateDocument(this.documentXml);
128
+ }
129
+ /**
130
+ * Accept all tracked changes in the document body, producing a clean
131
+ * document with no revision markup.
132
+ */
133
+ acceptChanges() {
134
+ const result = acceptChangesImpl(this.documentXml);
135
+ if (result.insertionsAccepted > 0 ||
136
+ result.deletionsAccepted > 0 ||
137
+ result.movesResolved > 0 ||
138
+ result.propertyChangesResolved > 0) {
139
+ this.dirty = true;
140
+ this.documentViewCache = null;
141
+ }
142
+ return result;
143
+ }
144
+ removeJuniorBookmarks() {
145
+ const removed = cleanupInternalBookmarks(this.documentXml);
146
+ if (removed > 0)
147
+ this.dirty = true;
148
+ return removed;
149
+ }
150
+ readParagraphs(opts) {
151
+ const all = this.getParagraphs()
152
+ .map((p) => {
153
+ const id = getParagraphBookmarkId(p);
154
+ if (!id)
155
+ return null;
156
+ const text = getParagraphText(p).trim();
157
+ if (!text)
158
+ return null;
159
+ return { id, text };
160
+ })
161
+ .filter((x) => x !== null);
162
+ const total = all.length;
163
+ const { nodeIds, offset, limit } = opts ?? {};
164
+ if (nodeIds && nodeIds.length > 0) {
165
+ const set = new Set(nodeIds);
166
+ return { paragraphs: all.filter((p) => set.has(p.id)), totalParagraphs: total };
167
+ }
168
+ let startIdx = 0;
169
+ if (typeof offset === 'number') {
170
+ // Offset is 1-based in Python server; negative counts from end.
171
+ if (offset > 0)
172
+ startIdx = Math.max(0, offset - 1);
173
+ if (offset < 0)
174
+ startIdx = Math.max(0, total + offset);
175
+ }
176
+ const endIdx = typeof limit === 'number' ? Math.min(total, startIdx + limit) : total;
177
+ return { paragraphs: all.slice(startIdx, endIdx), totalParagraphs: total };
178
+ }
179
+ buildDocumentView(opts) {
180
+ const includeSemanticTags = opts?.includeSemanticTags ?? true;
181
+ const showFormatting = opts?.showFormatting ?? false;
182
+ const cached = this.documentViewCache;
183
+ if (!this.dirty && cached && cached.includeSemanticTags === includeSemanticTags && cached.showFormatting === showFormatting) {
184
+ return { nodes: cached.nodes, styles: cached.styles };
185
+ }
186
+ const paragraphs = this.getParagraphs()
187
+ .map((p) => {
188
+ const id = getParagraphBookmarkId(p);
189
+ if (!id)
190
+ return null;
191
+ return { id, p };
192
+ })
193
+ .filter((x) => x !== null);
194
+ const { nodes, styles } = buildNodesForDocumentView({
195
+ paragraphs,
196
+ stylesXml: this.stylesXml,
197
+ numberingXml: this.numberingXml,
198
+ include_semantic_tags: includeSemanticTags,
199
+ show_formatting: showFormatting,
200
+ relsMap: this.relsMap,
201
+ documentXml: this.documentXml,
202
+ footnotesXml: this.footnotesXml,
203
+ });
204
+ this.documentViewCache = { includeSemanticTags, showFormatting, nodes, styles };
205
+ this.dirty = false;
206
+ return { nodes, styles };
207
+ }
208
+ replaceText(params) {
209
+ const { targetParagraphId, findText, replaceText } = params;
210
+ const p = findParagraphByBookmarkId(this.documentXml, targetParagraphId);
211
+ if (!p)
212
+ throw new Error(`Paragraph not found: ${targetParagraphId}`);
213
+ const full = getParagraphText(p);
214
+ const match = findUniqueSubstringMatch(full, findText);
215
+ if (match.status === 'not_found') {
216
+ throw new Error(`Text not found in paragraph ${targetParagraphId}`);
217
+ }
218
+ if (match.status === 'multiple') {
219
+ throw new Error(`Multiple matches (${match.matchCount}) found in paragraph ${targetParagraphId} using ${match.mode} matching`);
220
+ }
221
+ replaceParagraphTextRange(p, match.start, match.end, replaceText);
222
+ this.dirty = true;
223
+ this.documentViewCache = null;
224
+ }
225
+ insertParagraph(params) {
226
+ const { positionalAnchorNodeId, relativePosition, newText, newParagraphId: _newParagraphId, styleSourceId } = params;
227
+ const anchor = findParagraphByBookmarkId(this.documentXml, positionalAnchorNodeId);
228
+ if (!anchor)
229
+ throw new Error(`Anchor paragraph not found: ${positionalAnchorNodeId}`);
230
+ const anchorP = anchor;
231
+ // Resolve style source paragraph (if provided).
232
+ let styleSourceP = null;
233
+ let styleSourceFallback = false;
234
+ if (styleSourceId) {
235
+ styleSourceP = findParagraphByBookmarkId(this.documentXml, styleSourceId);
236
+ if (!styleSourceP) {
237
+ styleSourceFallback = true;
238
+ // Fall back to anchor
239
+ }
240
+ }
241
+ const formattingSource = styleSourceP ?? anchorP;
242
+ const doc = this.documentXml;
243
+ const parent = anchorP.parentNode;
244
+ if (!parent)
245
+ throw new Error('Anchor paragraph has no parent');
246
+ function isWTag(el, localName) {
247
+ return !!el && el.namespaceURI === OOXML.W_NS && el.localName === localName;
248
+ }
249
+ function setXmlSpacePreserveIfNeeded(t, text) {
250
+ if (!text)
251
+ return;
252
+ if (text.startsWith(' ') || text.endsWith(' ')) {
253
+ t.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');
254
+ }
255
+ }
256
+ function cloneRunFormattingOnly(sourceRun) {
257
+ const r = doc.createElementNS(OOXML.W_NS, 'w:r');
258
+ for (const child of Array.from(sourceRun.childNodes)) {
259
+ if (child.nodeType !== 1)
260
+ continue;
261
+ const el = child;
262
+ if (isWTag(el, W.rPr)) {
263
+ r.appendChild(el.cloneNode(true));
264
+ break;
265
+ }
266
+ }
267
+ return r;
268
+ }
269
+ function appendTextToRun(run, text) {
270
+ let buf = '';
271
+ const flush = () => {
272
+ if (!buf)
273
+ return;
274
+ const t = doc.createElementNS(OOXML.W_NS, 'w:t');
275
+ setXmlSpacePreserveIfNeeded(t, buf);
276
+ t.appendChild(doc.createTextNode(buf));
277
+ run.appendChild(t);
278
+ buf = '';
279
+ };
280
+ for (let i = 0; i < text.length; i++) {
281
+ const ch = text[i];
282
+ if (ch === '\t') {
283
+ flush();
284
+ run.appendChild(doc.createElementNS(OOXML.W_NS, 'w:tab'));
285
+ continue;
286
+ }
287
+ if (ch === '\n') {
288
+ flush();
289
+ run.appendChild(doc.createElementNS(OOXML.W_NS, 'w:br'));
290
+ continue;
291
+ }
292
+ buf += ch;
293
+ }
294
+ flush();
295
+ }
296
+ function cloneParagraphShell(anchorPara) {
297
+ // Clone anchor paragraph to preserve formatting; then wipe its runs and keep pPr only.
298
+ const newP = anchorPara.cloneNode(true);
299
+ const children = Array.from(newP.childNodes);
300
+ for (const child of children) {
301
+ if (child.nodeType === 1 && isWTag(child, W.pPr))
302
+ continue;
303
+ newP.removeChild(child);
304
+ }
305
+ return newP;
306
+ }
307
+ function getInsertionRefNode() {
308
+ if (relativePosition === 'BEFORE') {
309
+ const prev = prevElementSibling(anchorP);
310
+ return isW(prev, W.bookmarkStart) ? prev : anchorP;
311
+ }
312
+ const next = nextElementSibling(anchorP);
313
+ if (next && isW(next, W.bookmarkEnd))
314
+ return next.nextSibling;
315
+ return anchorP.nextSibling;
316
+ }
317
+ // Choose a run in the formatting source to use as formatting template: pick the run with the most visible text.
318
+ const sourceVisibleRuns = getParagraphRuns(formattingSource);
319
+ let templateRun = null;
320
+ let bestLen = -1;
321
+ for (const tr of sourceVisibleRuns) {
322
+ if (tr.text.length > bestLen) {
323
+ bestLen = tr.text.length;
324
+ templateRun = tr.r;
325
+ }
326
+ }
327
+ if (!templateRun) {
328
+ const allRuns = Array.from(formattingSource.getElementsByTagNameNS(OOXML.W_NS, W.r));
329
+ templateRun = allRuns[0] ?? doc.createElementNS(OOXML.W_NS, 'w:r');
330
+ }
331
+ const paragraphsToInsert = newText.replace(/\r\n/g, '\n').split(/\n{2,}/);
332
+ const insertedIds = [];
333
+ let cursor = getInsertionRefNode();
334
+ for (const paraText of paragraphsToInsert) {
335
+ const newP = cloneParagraphShell(formattingSource);
336
+ const newRun = cloneRunFormattingOnly(templateRun);
337
+ appendTextToRun(newRun, paraText);
338
+ newP.appendChild(newRun);
339
+ parent.insertBefore(newP, cursor);
340
+ const id = insertSingleParagraphBookmark(doc, newP);
341
+ insertedIds.push(id);
342
+ if (relativePosition === 'AFTER') {
343
+ const endEl = nextElementSibling(newP);
344
+ cursor = endEl && isW(endEl, W.bookmarkEnd) ? endEl.nextSibling : newP.nextSibling;
345
+ }
346
+ }
347
+ this.dirty = true;
348
+ this.documentViewCache = null;
349
+ const result = {
350
+ newParagraphId: insertedIds[0],
351
+ newParagraphIds: insertedIds,
352
+ };
353
+ if (styleSourceFallback)
354
+ result.styleSourceFallback = true;
355
+ return result;
356
+ }
357
+ setParagraphSpacing(mutation) {
358
+ const result = setParagraphSpacing(this.documentXml, mutation);
359
+ if (result.affectedParagraphs > 0) {
360
+ this.dirty = true;
361
+ this.documentViewCache = null;
362
+ }
363
+ return result;
364
+ }
365
+ setTableRowHeight(mutation) {
366
+ const result = setTableRowHeight(this.documentXml, mutation);
367
+ if (result.affectedRows > 0) {
368
+ this.dirty = true;
369
+ this.documentViewCache = null;
370
+ }
371
+ return result;
372
+ }
373
+ setTableCellPadding(mutation) {
374
+ const result = setTableCellPadding(this.documentXml, mutation);
375
+ if (result.affectedCells > 0) {
376
+ this.dirty = true;
377
+ this.documentViewCache = null;
378
+ }
379
+ return result;
380
+ }
381
+ /**
382
+ * Merge format-identical adjacent runs only (no redline simplification).
383
+ * Useful as a pre-processing step before text search when runs may be fragmented.
384
+ */
385
+ mergeRunsOnly() {
386
+ const result = mergeRuns(this.documentXml);
387
+ if (result.runsMerged > 0) {
388
+ this.dirty = true;
389
+ this.documentViewCache = null;
390
+ }
391
+ return result;
392
+ }
393
+ /**
394
+ * Add a root comment anchored to a text range within a paragraph.
395
+ *
396
+ * Bootstraps comment parts if missing (idempotent).
397
+ * Returns the allocated comment ID.
398
+ */
399
+ async addComment(params) {
400
+ const p = findParagraphByBookmarkId(this.documentXml, params.paragraphId);
401
+ if (!p)
402
+ throw new Error(`Paragraph not found: ${params.paragraphId}`);
403
+ await bootstrapCommentParts(this.zip);
404
+ const result = await addCommentImpl(this.documentXml, this.zip, {
405
+ paragraphEl: p,
406
+ start: params.start,
407
+ end: params.end,
408
+ author: params.author,
409
+ text: params.text,
410
+ initials: params.initials,
411
+ });
412
+ this.dirty = true;
413
+ this.documentViewCache = null;
414
+ return result;
415
+ }
416
+ /**
417
+ * Add a threaded reply to an existing comment.
418
+ *
419
+ * Bootstraps comment parts if missing (idempotent).
420
+ * Returns the allocated comment ID and parent ID.
421
+ */
422
+ async addCommentReply(params) {
423
+ await bootstrapCommentParts(this.zip);
424
+ const result = await addCommentReplyImpl(this.documentXml, this.zip, {
425
+ parentCommentId: params.parentCommentId,
426
+ author: params.author,
427
+ text: params.text,
428
+ initials: params.initials,
429
+ });
430
+ this.dirty = true;
431
+ this.documentViewCache = null;
432
+ return result;
433
+ }
434
+ async getComments() {
435
+ return getCommentsImpl(this.zip, this.documentXml);
436
+ }
437
+ async getComment(commentId) {
438
+ return getCommentImpl(this.zip, this.documentXml, commentId);
439
+ }
440
+ async deleteComment(params) {
441
+ await deleteCommentImpl(this.documentXml, this.zip, params);
442
+ this.dirty = true;
443
+ this.documentViewCache = null;
444
+ }
445
+ // ── Footnote methods ──────────────────────────────────────────────────
446
+ async refreshFootnotesXml() {
447
+ const text = await this.zip.readTextOrNull('word/footnotes.xml');
448
+ this.footnotesXml = text ? parseXml(text) : null;
449
+ }
450
+ async getFootnotes() {
451
+ return getFootnotesImpl(this.zip, this.documentXml);
452
+ }
453
+ async getFootnote(noteId) {
454
+ return getFootnoteImpl(this.zip, this.documentXml, noteId);
455
+ }
456
+ /**
457
+ * Add a footnote anchored to a paragraph, optionally after specific text.
458
+ *
459
+ * Bootstraps footnote parts if missing (idempotent).
460
+ * Returns the allocated footnote ID.
461
+ */
462
+ async addFootnote(params) {
463
+ const p = findParagraphByBookmarkId(this.documentXml, params.paragraphId);
464
+ if (!p)
465
+ throw new Error(`Paragraph not found: ${params.paragraphId}`);
466
+ await bootstrapFootnoteParts(this.zip);
467
+ const result = await addFootnoteImpl(this.documentXml, this.zip, {
468
+ paragraphEl: p,
469
+ afterText: params.afterText,
470
+ text: params.text,
471
+ });
472
+ await this.refreshFootnotesXml();
473
+ this.dirty = true;
474
+ this.documentViewCache = null;
475
+ return result;
476
+ }
477
+ /**
478
+ * Update the text content of an existing footnote.
479
+ */
480
+ async updateFootnoteText(params) {
481
+ await updateFootnoteTextImpl(this.zip, params);
482
+ await this.refreshFootnotesXml();
483
+ this.dirty = true;
484
+ this.documentViewCache = null;
485
+ }
486
+ /**
487
+ * Delete a footnote and its references from the document.
488
+ */
489
+ async deleteFootnote(params) {
490
+ await deleteFootnoteImpl(this.documentXml, this.zip, params);
491
+ await this.refreshFootnotesXml();
492
+ this.dirty = true;
493
+ this.documentViewCache = null;
494
+ }
495
+ /**
496
+ * Return a deep clone of the internal document.xml DOM.
497
+ * Callers can mutate the clone (e.g. acceptChanges / rejectChanges)
498
+ * without affecting session state.
499
+ */
500
+ getDocumentXmlClone() {
501
+ return this.documentXml.cloneNode(true);
502
+ }
503
+ /**
504
+ * Return a deep clone of the comments.xml DOM, or null if the document
505
+ * has no comments part.
506
+ */
507
+ async getCommentsXmlClone() {
508
+ const commentsText = await this.zip.readTextOrNull('word/comments.xml');
509
+ if (!commentsText)
510
+ return null;
511
+ return parseXml(commentsText);
512
+ }
513
+ async toBuffer(opts) {
514
+ // Always write the latest document.xml when saving.
515
+ // Important: when cleanBookmarks=true (download), we must NOT mutate session state.
516
+ const xmlWithBookmarks = serializeXml(this.documentXml);
517
+ this.zip.writeText('word/document.xml', xmlWithBookmarks);
518
+ if (opts?.cleanBookmarks) {
519
+ const cloned = parseXml(xmlWithBookmarks);
520
+ const bookmarksRemoved = cleanupInternalBookmarks(cloned);
521
+ const cleanedXml = serializeXml(cloned);
522
+ // Temporarily swap document.xml in the zip for output, then restore.
523
+ this.zip.writeText('word/document.xml', cleanedXml);
524
+ const buffer = await this.zip.toBuffer();
525
+ this.zip.writeText('word/document.xml', xmlWithBookmarks);
526
+ return { buffer, bookmarksRemoved };
527
+ }
528
+ const buffer = await this.zip.toBuffer();
529
+ return { buffer, bookmarksRemoved: 0 };
530
+ }
531
+ }
532
+ //# sourceMappingURL=document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/primitives/document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import { LabelType } from './list_labels.js';
2
+ import { type ParagraphAlignment, type RunFormatting } from './styles.js';
3
+ import type { RelsMap } from './relationships.js';
4
+ export type HeaderFormatting = {
5
+ bold: boolean;
6
+ italic: boolean;
7
+ underline: boolean;
8
+ };
9
+ export type ListMetadata = {
10
+ list_level: number;
11
+ label_type: LabelType | null;
12
+ label_string: string;
13
+ header_text: string | null;
14
+ header_style: string | null;
15
+ header_formatting: HeaderFormatting | null;
16
+ is_auto_numbered: boolean;
17
+ };
18
+ export type FormattingFingerprint = {
19
+ list_level: number;
20
+ left_indent_pt: number;
21
+ first_line_indent_pt: number;
22
+ style_name: string;
23
+ alignment: ParagraphAlignment;
24
+ };
25
+ export type DocumentStyleInfo = {
26
+ style_id: string;
27
+ display_name: string;
28
+ fingerprint: FormattingFingerprint;
29
+ example_node_id: string;
30
+ example_text: string;
31
+ count: number;
32
+ dominant_alignment: ParagraphAlignment;
33
+ };
34
+ export type DocumentStyles = {
35
+ styles: Map<string, DocumentStyleInfo>;
36
+ fingerprint_to_style: Map<string, string>;
37
+ };
38
+ export type DocumentViewNode = {
39
+ id: string;
40
+ list_label: string;
41
+ header: string;
42
+ style: string;
43
+ text: string;
44
+ clean_text: string;
45
+ tagged_text: string;
46
+ list_metadata: ListMetadata;
47
+ style_fingerprint: FormattingFingerprint;
48
+ paragraph_style_id: string | null;
49
+ paragraph_style_name: string;
50
+ paragraph_alignment: ParagraphAlignment;
51
+ paragraph_indents_pt: {
52
+ left: number;
53
+ first_line: number;
54
+ };
55
+ numbering: {
56
+ num_id: string | null;
57
+ ilvl: number | null;
58
+ is_auto_numbered: boolean;
59
+ };
60
+ header_formatting: HeaderFormatting | null;
61
+ body_run_formatting: RunFormatting | null;
62
+ };
63
+ export declare function discoverStyles(nodes: DocumentViewNode[]): DocumentStyles;
64
+ export declare function renderToon(nodes: DocumentViewNode[]): string;
65
+ export type BuildDocumentViewOptions = {
66
+ include_semantic_tags?: boolean;
67
+ };
68
+ export declare function buildDocumentView(params: {
69
+ documentXml: Document;
70
+ stylesXml: Document | null;
71
+ numberingXml: Document | null;
72
+ opts?: BuildDocumentViewOptions;
73
+ }): {
74
+ nodes: DocumentViewNode[];
75
+ styles: DocumentStyles;
76
+ };
77
+ export declare function buildNodesForDocumentView(params: {
78
+ paragraphs: Array<{
79
+ id: string;
80
+ p: Element;
81
+ }>;
82
+ stylesXml: Document | null;
83
+ numberingXml: Document | null;
84
+ include_semantic_tags?: boolean;
85
+ show_formatting?: boolean;
86
+ relsMap?: RelsMap;
87
+ documentXml?: Document;
88
+ footnotesXml?: Document | null;
89
+ }): {
90
+ nodes: DocumentViewNode[];
91
+ styles: DocumentStyles;
92
+ };
93
+ //# sourceMappingURL=document_view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document_view.d.ts","sourceRoot":"","sources":["../../src/primitives/document_view.ts"],"names":[],"mappings":"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"}