@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 @@
1
+ {"version":3,"file":"documentReconstructor.js","sourceRoot":"","sources":["../../../src/baselines/atomizer/documentReconstructor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Hierarchical LCS Comparison
3
+ *
4
+ * Implements two-level comparison like WmlComparer:
5
+ * 1. First pass: LCS on paragraph GROUPS (coarse alignment)
6
+ * 2. Second pass: LCS on atoms WITHIN matched groups (fine alignment)
7
+ *
8
+ * This prevents atoms from one paragraph matching random fragments
9
+ * in other paragraphs.
10
+ *
11
+ * Additionally, large paragraphs (like definition sections) are split
12
+ * on soft breaks (w:br) to prevent cross-definition contamination.
13
+ */
14
+ import type { ComparisonUnitAtom } from '../../core-types.js';
15
+ import { type LcsResult } from './atomLcs.js';
16
+ /**
17
+ * Default paragraph-level similarity threshold used for group matching.
18
+ *
19
+ * Lower values favor treating modified paragraphs as aligned pairs (so atom-level
20
+ * comparison can run), while higher values favor whole-paragraph replacement.
21
+ */
22
+ export declare const DEFAULT_PARAGRAPH_SIMILARITY_THRESHOLD = 0.25;
23
+ /**
24
+ * A group of atoms belonging to the same paragraph.
25
+ * Used for paragraph-level comparison.
26
+ */
27
+ export interface ComparisonUnitGroup {
28
+ /** Paragraph index from atom.paragraphIndex */
29
+ paragraphIndex: number;
30
+ /** Atoms in this paragraph */
31
+ atoms: ComparisonUnitAtom[];
32
+ /** Hash of concatenated text content for paragraph-level matching */
33
+ textHash: string;
34
+ /** Hash of normalized text used only for matching heuristics */
35
+ normalizedTextHash: string;
36
+ /** Concatenated text content for similarity calculation */
37
+ textContent: string;
38
+ }
39
+ /**
40
+ * Options for hierarchical comparison.
41
+ */
42
+ export interface HierarchicalCompareOptions {
43
+ /** Minimum similarity (0-1) to consider groups as matching. Default: 0.25 */
44
+ similarityThreshold?: number;
45
+ }
46
+ /**
47
+ * Result of paragraph-level LCS comparison.
48
+ */
49
+ export interface GroupLcsResult {
50
+ /** Matched paragraph pairs */
51
+ matchedGroups: Array<{
52
+ originalIndex: number;
53
+ revisedIndex: number;
54
+ }>;
55
+ /** Indices of paragraphs only in original (deleted) */
56
+ deletedGroupIndices: number[];
57
+ /** Indices of paragraphs only in revised (inserted) */
58
+ insertedGroupIndices: number[];
59
+ }
60
+ /**
61
+ * Group atoms by paragraph index.
62
+ *
63
+ * @param atoms - Atoms with paragraphIndex set
64
+ * @returns Array of paragraph groups in document order
65
+ */
66
+ export declare function groupAtomsByParagraphIndex(atoms: ComparisonUnitAtom[]): ComparisonUnitGroup[];
67
+ /**
68
+ * Group atoms by paragraph, then split large paragraphs on soft breaks (w:br).
69
+ *
70
+ * This handles mega-paragraphs like definition sections where many definitions
71
+ * are in a single paragraph separated by soft breaks. Without this split,
72
+ * the atom-level LCS can match fragments across definition boundaries.
73
+ *
74
+ * @param atoms - Atoms with paragraphIndex set
75
+ * @returns Array of groups, potentially more than the number of paragraphs
76
+ */
77
+ export declare function groupAtomsByParagraphAndBreaks(atoms: ComparisonUnitAtom[]): ComparisonUnitGroup[];
78
+ /**
79
+ * Compute LCS on paragraph groups with similarity fallback.
80
+ *
81
+ * Two passes:
82
+ * 1. LCS with exact text hash matching (fast path)
83
+ * 2. Similarity matching for unmatched groups (fallback)
84
+ *
85
+ * @param originalGroups - Groups from original document
86
+ * @param revisedGroups - Groups from revised document
87
+ * @param similarityThreshold - Minimum similarity to consider a match (default: 0.25)
88
+ */
89
+ export declare function computeGroupLcs(originalGroups: ComparisonUnitGroup[], revisedGroups: ComparisonUnitGroup[], similarityThreshold?: number): GroupLcsResult;
90
+ /**
91
+ * Perform hierarchical LCS comparison.
92
+ *
93
+ * Pipeline:
94
+ * 1. Group atoms by paragraph
95
+ * 2. LCS on paragraph groups (coarse alignment) with similarity fallback
96
+ * 3. For matched groups: LCS on atoms within them
97
+ * 4. For unmatched groups: mark all atoms as deleted/inserted
98
+ *
99
+ * @param originalAtoms - Atoms from original document
100
+ * @param revisedAtoms - Atoms from revised document
101
+ * @param options - Comparison options including similarity threshold
102
+ * @returns Combined atom-level LCS result
103
+ */
104
+ export declare function hierarchicalCompare(originalAtoms: ComparisonUnitAtom[], revisedAtoms: ComparisonUnitAtom[], options?: HierarchicalCompareOptions): LcsResult;
105
+ /**
106
+ * Mark correlation status using hierarchical comparison result.
107
+ *
108
+ * Same as regular markCorrelationStatus but uses hierarchical LCS result.
109
+ */
110
+ export declare function markHierarchicalCorrelationStatus(original: ComparisonUnitAtom[], revised: ComparisonUnitAtom[], lcsResult: LcsResult): void;
111
+ //# sourceMappingURL=hierarchicalLcs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hierarchicalLcs.d.ts","sourceRoot":"","sources":["../../../src/baselines/atomizer/hierarchicalLcs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG9D,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAS9D;;;;;GAKG;AACH,eAAO,MAAM,sCAAsC,OAAO,CAAC;AAE3D;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,aAAa,EAAE,KAAK,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtE,uDAAuD;IACvD,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,uDAAuD;IACvD,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,kBAAkB,EAAE,GAC1B,mBAAmB,EAAE,CA0CvB;AA+BD;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,kBAAkB,EAAE,GAC1B,mBAAmB,EAAE,CAkDvB;AAyGD;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,cAAc,EAAE,mBAAmB,EAAE,EACrC,aAAa,EAAE,mBAAmB,EAAE,EACpC,mBAAmB,SAAyC,GAC3D,cAAc,CAyGhB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,kBAAkB,EAAE,EACnC,YAAY,EAAE,kBAAkB,EAAE,EAClC,OAAO,GAAE,0BAA+B,GACvC,SAAS,CAiIX;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,kBAAkB,EAAE,EAC9B,OAAO,EAAE,kBAAkB,EAAE,EAC7B,SAAS,EAAE,SAAS,GACnB,IAAI,CAsBN"}
@@ -0,0 +1,469 @@
1
+ /**
2
+ * Hierarchical LCS Comparison
3
+ *
4
+ * Implements two-level comparison like WmlComparer:
5
+ * 1. First pass: LCS on paragraph GROUPS (coarse alignment)
6
+ * 2. Second pass: LCS on atoms WITHIN matched groups (fine alignment)
7
+ *
8
+ * This prevents atoms from one paragraph matching random fragments
9
+ * in other paragraphs.
10
+ *
11
+ * Additionally, large paragraphs (like definition sections) are split
12
+ * on soft breaks (w:br) to prevent cross-definition contamination.
13
+ */
14
+ import { CorrelationStatus } from '../../core-types.js';
15
+ import { sha1, EMPTY_PARAGRAPH_TAG } from '../../atomizer.js';
16
+ import { computeAtomLcs } from './atomLcs.js';
17
+ import { debug } from './debug.js';
18
+ /**
19
+ * Maximum atoms in a group before we split on w:br boundaries.
20
+ * This handles mega-paragraphs like definition sections.
21
+ */
22
+ const MAX_ATOMS_BEFORE_SPLIT = 50;
23
+ /**
24
+ * Default paragraph-level similarity threshold used for group matching.
25
+ *
26
+ * Lower values favor treating modified paragraphs as aligned pairs (so atom-level
27
+ * comparison can run), while higher values favor whole-paragraph replacement.
28
+ */
29
+ export const DEFAULT_PARAGRAPH_SIMILARITY_THRESHOLD = 0.25;
30
+ /**
31
+ * Group atoms by paragraph index.
32
+ *
33
+ * @param atoms - Atoms with paragraphIndex set
34
+ * @returns Array of paragraph groups in document order
35
+ */
36
+ export function groupAtomsByParagraphIndex(atoms) {
37
+ const groups = new Map();
38
+ for (const atom of atoms) {
39
+ const idx = atom.paragraphIndex ?? -1;
40
+ if (!groups.has(idx)) {
41
+ groups.set(idx, []);
42
+ }
43
+ groups.get(idx).push(atom);
44
+ }
45
+ // Convert to array sorted by paragraph index
46
+ const result = [];
47
+ const sortedIndices = [...groups.keys()].sort((a, b) => a - b);
48
+ for (const idx of sortedIndices) {
49
+ const atoms = groups.get(idx);
50
+ const textContent = extractGroupTextContent(atoms);
51
+ // For empty paragraph groups, use the atom's sha1Hash (which has context)
52
+ // instead of the empty text hash. This prevents all empty paragraphs from
53
+ // matching each other regardless of position.
54
+ const isEmptyParagraphGroup = atoms.length === 1 &&
55
+ atoms[0].contentElement.tagName === EMPTY_PARAGRAPH_TAG;
56
+ const textHash = isEmptyParagraphGroup
57
+ ? atoms[0].sha1Hash // Use context-aware atom hash
58
+ : sha1(textContent);
59
+ const normalizedTextHash = isEmptyParagraphGroup
60
+ ? textHash
61
+ : sha1(normalizeText(textContent));
62
+ result.push({
63
+ paragraphIndex: idx,
64
+ atoms,
65
+ textHash,
66
+ normalizedTextHash,
67
+ textContent,
68
+ });
69
+ }
70
+ return result;
71
+ }
72
+ /**
73
+ * Create a ComparisonUnitGroup from a list of atoms.
74
+ */
75
+ function createGroup(atoms, groupIndex) {
76
+ const textContent = extractGroupTextContent(atoms);
77
+ // For empty paragraph groups, use the atom's sha1Hash (which has context)
78
+ const isEmptyGroup = atoms.length === 1 &&
79
+ atoms[0].contentElement.tagName === EMPTY_PARAGRAPH_TAG;
80
+ const textHash = isEmptyGroup
81
+ ? atoms[0].sha1Hash
82
+ : sha1(textContent);
83
+ const normalizedTextHash = isEmptyGroup
84
+ ? textHash
85
+ : sha1(normalizeText(textContent));
86
+ return {
87
+ paragraphIndex: groupIndex,
88
+ atoms,
89
+ textHash,
90
+ normalizedTextHash,
91
+ textContent,
92
+ };
93
+ }
94
+ /**
95
+ * Group atoms by paragraph, then split large paragraphs on soft breaks (w:br).
96
+ *
97
+ * This handles mega-paragraphs like definition sections where many definitions
98
+ * are in a single paragraph separated by soft breaks. Without this split,
99
+ * the atom-level LCS can match fragments across definition boundaries.
100
+ *
101
+ * @param atoms - Atoms with paragraphIndex set
102
+ * @returns Array of groups, potentially more than the number of paragraphs
103
+ */
104
+ export function groupAtomsByParagraphAndBreaks(atoms) {
105
+ // First, group by paragraph index
106
+ const paragraphMap = new Map();
107
+ for (const atom of atoms) {
108
+ const idx = atom.paragraphIndex ?? -1;
109
+ if (!paragraphMap.has(idx)) {
110
+ paragraphMap.set(idx, []);
111
+ }
112
+ paragraphMap.get(idx).push(atom);
113
+ }
114
+ // Convert to array sorted by paragraph index
115
+ const sortedIndices = [...paragraphMap.keys()].sort((a, b) => a - b);
116
+ // Now process each paragraph, splitting large ones on w:br
117
+ const result = [];
118
+ let groupIndex = 0;
119
+ for (const paraIdx of sortedIndices) {
120
+ const paraAtoms = paragraphMap.get(paraIdx);
121
+ // Small paragraph - keep as-is
122
+ if (paraAtoms.length <= MAX_ATOMS_BEFORE_SPLIT) {
123
+ result.push(createGroup(paraAtoms, groupIndex++));
124
+ continue;
125
+ }
126
+ // Large paragraph - split on w:br boundaries
127
+ let currentAtoms = [];
128
+ for (const atom of paraAtoms) {
129
+ currentAtoms.push(atom);
130
+ // Split AFTER w:br (keep the break with the preceding content)
131
+ if (atom.contentElement.tagName === 'w:br') {
132
+ if (currentAtoms.length > 0) {
133
+ result.push(createGroup(currentAtoms, groupIndex++));
134
+ currentAtoms = [];
135
+ }
136
+ }
137
+ }
138
+ // Don't forget trailing atoms after last break
139
+ if (currentAtoms.length > 0) {
140
+ result.push(createGroup(currentAtoms, groupIndex++));
141
+ }
142
+ }
143
+ return result;
144
+ }
145
+ /**
146
+ * Extract concatenated text content from a group of atoms.
147
+ * Used for paragraph-level comparison and similarity calculation.
148
+ */
149
+ function extractGroupTextContent(atoms) {
150
+ const textParts = [];
151
+ for (const atom of atoms) {
152
+ // Treat run separators as visible token boundaries for similarity purposes.
153
+ if (atom.contentElement.tagName === 'w:br' ||
154
+ atom.contentElement.tagName === 'w:cr' ||
155
+ atom.contentElement.tagName === 'w:tab') {
156
+ textParts.push(' ');
157
+ continue;
158
+ }
159
+ const text = atom.contentElement.textContent;
160
+ if (text) {
161
+ textParts.push(text);
162
+ }
163
+ }
164
+ return textParts.join('');
165
+ }
166
+ /**
167
+ * Normalize text for similarity comparison.
168
+ * - Trim whitespace
169
+ * - Collapse multiple spaces
170
+ * - Lowercase for case-insensitive comparison
171
+ */
172
+ function normalizeText(text) {
173
+ return text
174
+ .trim()
175
+ .replace(/\s+/g, ' ')
176
+ .toLowerCase();
177
+ }
178
+ /**
179
+ * Check if a group contains only empty paragraph atoms.
180
+ */
181
+ function isEmptyParagraphGroup(group) {
182
+ return group.atoms.length === 1 &&
183
+ group.atoms[0].contentElement.tagName === EMPTY_PARAGRAPH_TAG;
184
+ }
185
+ /**
186
+ * Paragraph groups are considered coarse-equal if:
187
+ * 1) Their raw text hash matches exactly, or
188
+ * 2) Their normalized-text hash matches (heuristic assist only).
189
+ *
190
+ * Empty paragraphs intentionally require strict hash equality.
191
+ */
192
+ function groupsCoarselyEqual(a, b) {
193
+ if (a.textHash === b.textHash) {
194
+ return true;
195
+ }
196
+ if (isEmptyParagraphGroup(a) || isEmptyParagraphGroup(b)) {
197
+ return false;
198
+ }
199
+ return a.normalizedTextHash === b.normalizedTextHash;
200
+ }
201
+ /**
202
+ * Compute similarity between two groups using Jaccard index on words.
203
+ *
204
+ * @returns Value between 0 (completely different) and 1 (identical)
205
+ */
206
+ function computeGroupSimilarity(a, b) {
207
+ // For empty paragraph groups, only consider them similar if their
208
+ // context-aware hashes match. This prevents empty paragraphs from
209
+ // matching each other regardless of position.
210
+ if (isEmptyParagraphGroup(a) || isEmptyParagraphGroup(b)) {
211
+ // If one is empty and the other isn't, they're not similar
212
+ if (isEmptyParagraphGroup(a) !== isEmptyParagraphGroup(b)) {
213
+ return 0;
214
+ }
215
+ // Both are empty paragraph groups - compare their context-aware hashes
216
+ // They must match exactly (return 1) or not at all (return 0)
217
+ return a.textHash === b.textHash ? 1 : 0;
218
+ }
219
+ const textA = normalizeText(a.textContent);
220
+ const textB = normalizeText(b.textContent);
221
+ const wordsA = new Set(textA.split(' ').filter(w => w.length > 0));
222
+ const wordsB = new Set(textB.split(' ').filter(w => w.length > 0));
223
+ if (wordsA.size === 0 && wordsB.size === 0) {
224
+ return 1; // Both empty
225
+ }
226
+ if (wordsA.size === 0 || wordsB.size === 0) {
227
+ return 0; // One empty
228
+ }
229
+ const intersection = new Set([...wordsA].filter(x => wordsB.has(x)));
230
+ const union = new Set([...wordsA, ...wordsB]);
231
+ return intersection.size / union.size;
232
+ }
233
+ /**
234
+ * Compute LCS on paragraph groups with similarity fallback.
235
+ *
236
+ * Two passes:
237
+ * 1. LCS with exact text hash matching (fast path)
238
+ * 2. Similarity matching for unmatched groups (fallback)
239
+ *
240
+ * @param originalGroups - Groups from original document
241
+ * @param revisedGroups - Groups from revised document
242
+ * @param similarityThreshold - Minimum similarity to consider a match (default: 0.25)
243
+ */
244
+ export function computeGroupLcs(originalGroups, revisedGroups, similarityThreshold = DEFAULT_PARAGRAPH_SIMILARITY_THRESHOLD) {
245
+ const n = originalGroups.length;
246
+ const m = revisedGroups.length;
247
+ // === Pass 1: LCS with exact hash and normalized-hash matching ===
248
+ const dp = Array(n + 1)
249
+ .fill(null)
250
+ .map(() => Array(m + 1).fill(0));
251
+ for (let i = 1; i <= n; i++) {
252
+ for (let j = 1; j <= m; j++) {
253
+ if (groupsCoarselyEqual(originalGroups[i - 1], revisedGroups[j - 1])) {
254
+ dp[i][j] = dp[i - 1][j - 1] + 1;
255
+ }
256
+ else {
257
+ dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
258
+ }
259
+ }
260
+ }
261
+ // Backtrack to find matched groups
262
+ const matchedGroups = [];
263
+ let i = n;
264
+ let j = m;
265
+ while (i > 0 && j > 0) {
266
+ if (groupsCoarselyEqual(originalGroups[i - 1], revisedGroups[j - 1])) {
267
+ matchedGroups.unshift({ originalIndex: i - 1, revisedIndex: j - 1 });
268
+ i--;
269
+ j--;
270
+ }
271
+ else if (dp[i - 1][j] > dp[i][j - 1]) {
272
+ i--;
273
+ }
274
+ else {
275
+ j--;
276
+ }
277
+ }
278
+ // Find initially unmatched indices
279
+ const matchedOriginal = new Set(matchedGroups.map((m) => m.originalIndex));
280
+ const matchedRevised = new Set(matchedGroups.map((m) => m.revisedIndex));
281
+ let unmatchedOriginal = [];
282
+ for (let idx = 0; idx < n; idx++) {
283
+ if (!matchedOriginal.has(idx)) {
284
+ unmatchedOriginal.push(idx);
285
+ }
286
+ }
287
+ let unmatchedRevised = [];
288
+ for (let idx = 0; idx < m; idx++) {
289
+ if (!matchedRevised.has(idx)) {
290
+ unmatchedRevised.push(idx);
291
+ }
292
+ }
293
+ // === Pass 2: Similarity matching for unmatched groups ===
294
+ // Try to find near-matches for paragraphs that were modified significantly
295
+ const similarityMatches = [];
296
+ for (const origIdx of unmatchedOriginal) {
297
+ const origGroup = originalGroups[origIdx];
298
+ let bestMatch = null;
299
+ for (const revIdx of unmatchedRevised) {
300
+ const revGroup = revisedGroups[revIdx];
301
+ const similarity = computeGroupSimilarity(origGroup, revGroup);
302
+ if (similarity >= similarityThreshold) {
303
+ if (!bestMatch || similarity > bestMatch.similarity) {
304
+ bestMatch = { revisedIndex: revIdx, similarity };
305
+ }
306
+ }
307
+ }
308
+ if (bestMatch) {
309
+ similarityMatches.push({ originalIndex: origIdx, revisedIndex: bestMatch.revisedIndex });
310
+ // Remove from unmatched revised
311
+ unmatchedRevised = unmatchedRevised.filter(idx => idx !== bestMatch.revisedIndex);
312
+ }
313
+ }
314
+ // Combine exact matches and similarity matches
315
+ const allMatches = [...matchedGroups, ...similarityMatches];
316
+ // Update matched sets
317
+ for (const match of similarityMatches) {
318
+ matchedOriginal.add(match.originalIndex);
319
+ matchedRevised.add(match.revisedIndex);
320
+ }
321
+ // Final deleted and inserted indices
322
+ const deletedGroupIndices = [];
323
+ for (let idx = 0; idx < n; idx++) {
324
+ if (!matchedOriginal.has(idx)) {
325
+ deletedGroupIndices.push(idx);
326
+ }
327
+ }
328
+ const insertedGroupIndices = [];
329
+ for (let idx = 0; idx < m; idx++) {
330
+ if (!matchedRevised.has(idx)) {
331
+ insertedGroupIndices.push(idx);
332
+ }
333
+ }
334
+ return { matchedGroups: allMatches, deletedGroupIndices, insertedGroupIndices };
335
+ }
336
+ /**
337
+ * Perform hierarchical LCS comparison.
338
+ *
339
+ * Pipeline:
340
+ * 1. Group atoms by paragraph
341
+ * 2. LCS on paragraph groups (coarse alignment) with similarity fallback
342
+ * 3. For matched groups: LCS on atoms within them
343
+ * 4. For unmatched groups: mark all atoms as deleted/inserted
344
+ *
345
+ * @param originalAtoms - Atoms from original document
346
+ * @param revisedAtoms - Atoms from revised document
347
+ * @param options - Comparison options including similarity threshold
348
+ * @returns Combined atom-level LCS result
349
+ */
350
+ export function hierarchicalCompare(originalAtoms, revisedAtoms, options = {}) {
351
+ const { similarityThreshold = DEFAULT_PARAGRAPH_SIMILARITY_THRESHOLD } = options;
352
+ // Step 1: Group atoms by paragraph, splitting large paragraphs on w:br
353
+ const originalGroups = groupAtomsByParagraphAndBreaks(originalAtoms);
354
+ const revisedGroups = groupAtomsByParagraphAndBreaks(revisedAtoms);
355
+ // Count empty paragraph groups
356
+ const origEmptyGroups = originalGroups.filter(g => isEmptyParagraphGroup(g));
357
+ const revEmptyGroups = revisedGroups.filter(g => isEmptyParagraphGroup(g));
358
+ debug('hierarchicalLcs', `${originalGroups.length} original groups (${origEmptyGroups.length} empty), ${revisedGroups.length} revised groups (${revEmptyGroups.length} empty)`);
359
+ // Step 2: LCS on paragraph groups with similarity fallback
360
+ const groupLcs = computeGroupLcs(originalGroups, revisedGroups, similarityThreshold);
361
+ // Count empty paragraphs in each category
362
+ const matchedEmptyCount = groupLcs.matchedGroups.filter(m => isEmptyParagraphGroup(originalGroups[m.originalIndex])).length;
363
+ const deletedEmptyCount = groupLcs.deletedGroupIndices.filter(i => isEmptyParagraphGroup(originalGroups[i])).length;
364
+ const insertedEmptyCount = groupLcs.insertedGroupIndices.filter(i => isEmptyParagraphGroup(revisedGroups[i])).length;
365
+ debug('hierarchicalLcs', `Group LCS: ${groupLcs.matchedGroups.length} matched (${matchedEmptyCount} empty), ${groupLcs.deletedGroupIndices.length} deleted (${deletedEmptyCount} empty), ${groupLcs.insertedGroupIndices.length} inserted (${insertedEmptyCount} empty)`);
366
+ // Step 3: Build combined atom-level result
367
+ const allMatches = [];
368
+ const deletedIndices = [];
369
+ const insertedIndices = [];
370
+ // Build atom index maps for quick lookup
371
+ const origAtomToIndex = new Map();
372
+ for (let i = 0; i < originalAtoms.length; i++) {
373
+ origAtomToIndex.set(originalAtoms[i], i);
374
+ }
375
+ const revAtomToIndex = new Map();
376
+ for (let i = 0; i < revisedAtoms.length; i++) {
377
+ revAtomToIndex.set(revisedAtoms[i], i);
378
+ }
379
+ // For matched groups: do atom-level LCS within them
380
+ for (const match of groupLcs.matchedGroups) {
381
+ const origGroup = originalGroups[match.originalIndex];
382
+ const revGroup = revisedGroups[match.revisedIndex];
383
+ // Check if this was an exact match (hash) or similarity match
384
+ const isExactMatch = origGroup.textHash === revGroup.textHash;
385
+ // For LOW similarity matches (< threshold), skip atom LCS to avoid spurious
386
+ // matches on common fragments. Use the same threshold as paragraph matching.
387
+ const similarity = isExactMatch ? 1.0 : computeGroupSimilarity(origGroup, revGroup);
388
+ const useAtomLcs = similarity >= similarityThreshold;
389
+ if (!isExactMatch && !useAtomLcs) {
390
+ debug('hierarchicalLcs', `Low similarity match (${similarity.toFixed(2)}): origGroup[${match.originalIndex}] "${origGroup.textContent.slice(0, 50)}..." vs revGroup[${match.revisedIndex}] "${revGroup.textContent.slice(0, 50)}..."`);
391
+ }
392
+ if (isExactMatch || useAtomLcs) {
393
+ // High-similarity match: do atom-level LCS for fine-grained changes
394
+ const withinLcs = computeAtomLcs(origGroup.atoms, revGroup.atoms);
395
+ // Translate local indices to global indices
396
+ for (const atomMatch of withinLcs.matches) {
397
+ const origAtom = origGroup.atoms[atomMatch.originalIndex];
398
+ const revAtom = revGroup.atoms[atomMatch.revisedIndex];
399
+ allMatches.push({
400
+ originalIndex: origAtomToIndex.get(origAtom),
401
+ revisedIndex: revAtomToIndex.get(revAtom),
402
+ });
403
+ }
404
+ for (const localIdx of withinLcs.deletedIndices) {
405
+ const origAtom = origGroup.atoms[localIdx];
406
+ deletedIndices.push(origAtomToIndex.get(origAtom));
407
+ }
408
+ for (const localIdx of withinLcs.insertedIndices) {
409
+ const revAtom = revGroup.atoms[localIdx];
410
+ insertedIndices.push(revAtomToIndex.get(revAtom));
411
+ }
412
+ }
413
+ else {
414
+ // Low similarity match: treat entire paragraph as replaced
415
+ // This prevents spurious atom matches on common fragments
416
+ for (const atom of origGroup.atoms) {
417
+ deletedIndices.push(origAtomToIndex.get(atom));
418
+ }
419
+ for (const atom of revGroup.atoms) {
420
+ insertedIndices.push(revAtomToIndex.get(atom));
421
+ }
422
+ }
423
+ }
424
+ // For deleted groups: mark all atoms as deleted
425
+ for (const groupIdx of groupLcs.deletedGroupIndices) {
426
+ const group = originalGroups[groupIdx];
427
+ for (const atom of group.atoms) {
428
+ deletedIndices.push(origAtomToIndex.get(atom));
429
+ }
430
+ }
431
+ // For inserted groups: mark all atoms as inserted
432
+ for (const groupIdx of groupLcs.insertedGroupIndices) {
433
+ const group = revisedGroups[groupIdx];
434
+ for (const atom of group.atoms) {
435
+ insertedIndices.push(revAtomToIndex.get(atom));
436
+ }
437
+ }
438
+ debug('hierarchicalLcs', `Hierarchical result: ${allMatches.length} matches, ${deletedIndices.length} deleted, ${insertedIndices.length} inserted`);
439
+ return {
440
+ matches: allMatches,
441
+ deletedIndices,
442
+ insertedIndices,
443
+ };
444
+ }
445
+ /**
446
+ * Mark correlation status using hierarchical comparison result.
447
+ *
448
+ * Same as regular markCorrelationStatus but uses hierarchical LCS result.
449
+ */
450
+ export function markHierarchicalCorrelationStatus(original, revised, lcsResult) {
451
+ // Mark matched atoms as Equal and link them
452
+ for (const match of lcsResult.matches) {
453
+ const origAtom = original[match.originalIndex];
454
+ const revAtom = revised[match.revisedIndex];
455
+ origAtom.correlationStatus = CorrelationStatus.Equal;
456
+ revAtom.correlationStatus = CorrelationStatus.Equal;
457
+ // Link revised atom to original for format change detection
458
+ revAtom.comparisonUnitAtomBefore = origAtom;
459
+ }
460
+ // Mark deleted atoms
461
+ for (const idx of lcsResult.deletedIndices) {
462
+ original[idx].correlationStatus = CorrelationStatus.Deleted;
463
+ }
464
+ // Mark inserted atoms
465
+ for (const idx of lcsResult.insertedIndices) {
466
+ revised[idx].correlationStatus = CorrelationStatus.Inserted;
467
+ }
468
+ }
469
+ //# sourceMappingURL=hierarchicalLcs.js.map