@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,136 @@
1
+ /**
2
+ * Legal Numbering Module
3
+ *
4
+ * Handles OOXML numbering corner cases for legal documents.
5
+ * Implements continuation pattern detection for proper rendering of
6
+ * "orphan" list items.
7
+ *
8
+ * @example
9
+ * Word exhibits behavior where orphan list items render at level 0:
10
+ * - Para 1: ilvl=0 → "1."
11
+ * - Para 2: ilvl=0 → "2."
12
+ * - Para 3: ilvl=0 → "3."
13
+ * - Para 4: ilvl=1, start=4 → Word displays "4." (NOT "3.4")
14
+ */
15
+ import { ContinuationInfo, ListLevelInfo, WmlElement } from './core-types.js';
16
+ /**
17
+ * Detect if a paragraph is using a continuation pattern.
18
+ *
19
+ * A continuation pattern occurs when a list item at ilvl > 0 should render
20
+ * at level 0 because its start value indicates it's continuing the parent
21
+ * level's sequence rather than starting a nested list.
22
+ *
23
+ * @param ilvl - The indentation level of the paragraph
24
+ * @param startValue - The start value for this level
25
+ * @param levelNumbers - Current counter values for each level
26
+ * @returns Continuation info with effective level
27
+ *
28
+ * @example
29
+ * // Level numbers [3, 0] means level 0 is at "3", level 1 hasn't been used
30
+ * detectContinuationPattern(1, 4, [3, 0])
31
+ * // Returns: { isContinuation: true, effectiveLevel: 0 }
32
+ * // Because start=4 equals levelNumbers[0]+1, this continues as "4."
33
+ */
34
+ export declare function detectContinuationPattern(ilvl: number, startValue: number, levelNumbers: number[]): ContinuationInfo;
35
+ /**
36
+ * Get the effective level for rendering, accounting for continuation patterns.
37
+ *
38
+ * @param ilvl - The declared indentation level
39
+ * @param startValue - The start value for this level
40
+ * @param levelNumbers - Current counter values for each level
41
+ * @returns The effective level for rendering (0 for continuation patterns)
42
+ */
43
+ export declare function getEffectiveLevel(ilvl: number, startValue: number, levelNumbers: number[]): number;
44
+ /**
45
+ * State of numbering counters for a document.
46
+ */
47
+ export interface NumberingState {
48
+ /** Current counter values per numId and ilvl */
49
+ counters: Map<string, number[]>;
50
+ /** Track whether each level has been used in current sequence */
51
+ levelUsed: Map<string, boolean[]>;
52
+ }
53
+ /**
54
+ * Create initial numbering state.
55
+ */
56
+ export declare function createNumberingState(): NumberingState;
57
+ /**
58
+ * Get or initialize counter array for a numbering definition.
59
+ *
60
+ * @param state - The numbering state
61
+ * @param numId - The numbering definition ID
62
+ * @param maxLevels - Maximum number of levels (default 9)
63
+ * @returns The counter array for this numbering definition
64
+ */
65
+ export declare function getCounters(state: NumberingState, numId: number, maxLevels?: number): number[];
66
+ /**
67
+ * Process a numbered paragraph and return its display number.
68
+ *
69
+ * Updates the numbering state and returns the appropriate number to display,
70
+ * accounting for continuation patterns and level resets.
71
+ *
72
+ * @param state - The numbering state to update
73
+ * @param numId - The numbering definition ID
74
+ * @param ilvl - The indentation level
75
+ * @param levelInfo - Level properties from the numbering definition
76
+ * @returns The number to display at this level
77
+ */
78
+ export declare function processNumberedParagraph(state: NumberingState, numId: number, ilvl: number, levelInfo: ListLevelInfo): number;
79
+ /**
80
+ * Convert a number to the specified format.
81
+ *
82
+ * @param value - The numeric value
83
+ * @param format - The number format (decimal, lowerLetter, upperLetter, lowerRoman, upperRoman, etc.)
84
+ * @returns The formatted string
85
+ */
86
+ export declare function formatNumber(value: number, format: string): string;
87
+ /**
88
+ * Expand a level text format string with actual numbers.
89
+ *
90
+ * Level text uses placeholders like %1, %2, %3 for level values.
91
+ *
92
+ * @param lvlText - The level text format (e.g., "%1.", "%1.%2")
93
+ * @param counters - Current counter values for each level
94
+ * @param levels - Level definitions for format lookup
95
+ * @returns The expanded text (e.g., "1.", "1.2")
96
+ */
97
+ export declare function expandLevelText(lvlText: string, counters: number[], levels: ListLevelInfo[]): string;
98
+ /**
99
+ * Check if legal numbering is active for a level.
100
+ *
101
+ * Legal numbering (w:isLgl) changes how nested levels display,
102
+ * using decimal format regardless of the level's numFmt.
103
+ *
104
+ * @param levels - Level definitions
105
+ * @param currentLevel - The current level index
106
+ * @returns True if legal numbering is active
107
+ */
108
+ export declare function isLegalNumberingActive(levels: ListLevelInfo[], currentLevel: number): boolean;
109
+ /**
110
+ * Expand level text with legal numbering rules.
111
+ *
112
+ * When legal numbering is active, all level placeholders use decimal
113
+ * format regardless of the level's defined numFmt.
114
+ *
115
+ * @param lvlText - The level text format
116
+ * @param counters - Current counter values
117
+ * @param levels - Level definitions
118
+ * @param currentLevel - The current level index
119
+ * @returns The expanded text with legal numbering applied
120
+ */
121
+ export declare function expandLevelTextWithLegal(lvlText: string, counters: number[], levels: ListLevelInfo[], currentLevel: number): string;
122
+ /**
123
+ * Extract list level info from a w:lvl element.
124
+ *
125
+ * @param lvlElement - The w:lvl XML element
126
+ * @returns The extracted level info
127
+ */
128
+ export declare function parseLevelElement(lvlElement: WmlElement): ListLevelInfo;
129
+ /**
130
+ * Parse an abstract numbering definition.
131
+ *
132
+ * @param abstractNumElement - The w:abstractNum XML element
133
+ * @returns Array of level info for all defined levels
134
+ */
135
+ export declare function parseAbstractNumElement(abstractNumElement: WmlElement): ListLevelInfo[];
136
+ //# sourceMappingURL=numbering.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numbering.d.ts","sourceRoot":"","sources":["../src/numbering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,UAAU,EACX,MAAM,iBAAiB,CAAC;AAOzB;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EAAE,GACrB,gBAAgB,CAelB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EAAE,GACrB,MAAM,CAGR;AAMD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,iEAAiE;IACjE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAKrD;AASD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,MAAM,EACb,SAAS,SAAI,GACZ,MAAM,EAAE,CAQV;AAwBD;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,aAAa,GACvB,MAAM,CA2CR;AAMD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAoClE;AAgJD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,EAAE,aAAa,EAAE,GACtB,MAAM,CAeR;AAMD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,aAAa,EAAE,EACvB,YAAY,EAAE,MAAM,GACnB,OAAO,CAQT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,EAAE,aAAa,EAAE,EACvB,YAAY,EAAE,MAAM,GACnB,MAAM,CAgBR;AAMD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,CA0BvE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,kBAAkB,EAAE,UAAU,GAC7B,aAAa,EAAE,CAWjB"}
@@ -0,0 +1,446 @@
1
+ /**
2
+ * Legal Numbering Module
3
+ *
4
+ * Handles OOXML numbering corner cases for legal documents.
5
+ * Implements continuation pattern detection for proper rendering of
6
+ * "orphan" list items.
7
+ *
8
+ * @example
9
+ * Word exhibits behavior where orphan list items render at level 0:
10
+ * - Para 1: ilvl=0 → "1."
11
+ * - Para 2: ilvl=0 → "2."
12
+ * - Para 3: ilvl=0 → "3."
13
+ * - Para 4: ilvl=1, start=4 → Word displays "4." (NOT "3.4")
14
+ */
15
+ import { childElements } from './primitives/index.js';
16
+ // =============================================================================
17
+ // Continuation Pattern Detection
18
+ // =============================================================================
19
+ /**
20
+ * Detect if a paragraph is using a continuation pattern.
21
+ *
22
+ * A continuation pattern occurs when a list item at ilvl > 0 should render
23
+ * at level 0 because its start value indicates it's continuing the parent
24
+ * level's sequence rather than starting a nested list.
25
+ *
26
+ * @param ilvl - The indentation level of the paragraph
27
+ * @param startValue - The start value for this level
28
+ * @param levelNumbers - Current counter values for each level
29
+ * @returns Continuation info with effective level
30
+ *
31
+ * @example
32
+ * // Level numbers [3, 0] means level 0 is at "3", level 1 hasn't been used
33
+ * detectContinuationPattern(1, 4, [3, 0])
34
+ * // Returns: { isContinuation: true, effectiveLevel: 0 }
35
+ * // Because start=4 equals levelNumbers[0]+1, this continues as "4."
36
+ */
37
+ export function detectContinuationPattern(ilvl, startValue, levelNumbers) {
38
+ // Must be at a level > 0 to be a continuation
39
+ if (ilvl <= 0) {
40
+ return { isContinuation: false, effectiveLevel: ilvl };
41
+ }
42
+ // Check if start value equals parent level's counter + 1
43
+ const parentLevel = ilvl - 1;
44
+ const parentValue = levelNumbers[parentLevel] ?? 0;
45
+ if (startValue === parentValue + 1) {
46
+ return { isContinuation: true, effectiveLevel: 0 };
47
+ }
48
+ return { isContinuation: false, effectiveLevel: ilvl };
49
+ }
50
+ /**
51
+ * Get the effective level for rendering, accounting for continuation patterns.
52
+ *
53
+ * @param ilvl - The declared indentation level
54
+ * @param startValue - The start value for this level
55
+ * @param levelNumbers - Current counter values for each level
56
+ * @returns The effective level for rendering (0 for continuation patterns)
57
+ */
58
+ export function getEffectiveLevel(ilvl, startValue, levelNumbers) {
59
+ const info = detectContinuationPattern(ilvl, startValue, levelNumbers);
60
+ return info.effectiveLevel;
61
+ }
62
+ /**
63
+ * Create initial numbering state.
64
+ */
65
+ export function createNumberingState() {
66
+ return {
67
+ counters: new Map(),
68
+ levelUsed: new Map(),
69
+ };
70
+ }
71
+ /**
72
+ * Get the key for numbering state lookup.
73
+ */
74
+ function getNumKey(numId) {
75
+ return `num:${numId}`;
76
+ }
77
+ /**
78
+ * Get or initialize counter array for a numbering definition.
79
+ *
80
+ * @param state - The numbering state
81
+ * @param numId - The numbering definition ID
82
+ * @param maxLevels - Maximum number of levels (default 9)
83
+ * @returns The counter array for this numbering definition
84
+ */
85
+ export function getCounters(state, numId, maxLevels = 9) {
86
+ const key = getNumKey(numId);
87
+ let counters = state.counters.get(key);
88
+ if (!counters) {
89
+ counters = new Array(maxLevels).fill(0);
90
+ state.counters.set(key, counters);
91
+ }
92
+ return counters;
93
+ }
94
+ /**
95
+ * Get or initialize level used tracking for a numbering definition.
96
+ */
97
+ function getLevelUsed(state, numId, maxLevels = 9) {
98
+ const key = getNumKey(numId);
99
+ let used = state.levelUsed.get(key);
100
+ if (!used) {
101
+ used = new Array(maxLevels).fill(false);
102
+ state.levelUsed.set(key, used);
103
+ }
104
+ return used;
105
+ }
106
+ /**
107
+ * Track the last used level for each numbering definition.
108
+ */
109
+ const lastUsedLevel = new Map();
110
+ /**
111
+ * Process a numbered paragraph and return its display number.
112
+ *
113
+ * Updates the numbering state and returns the appropriate number to display,
114
+ * accounting for continuation patterns and level resets.
115
+ *
116
+ * @param state - The numbering state to update
117
+ * @param numId - The numbering definition ID
118
+ * @param ilvl - The indentation level
119
+ * @param levelInfo - Level properties from the numbering definition
120
+ * @returns The number to display at this level
121
+ */
122
+ export function processNumberedParagraph(state, numId, ilvl, levelInfo) {
123
+ const counters = getCounters(state, numId);
124
+ const levelUsed = getLevelUsed(state, numId);
125
+ const key = `num:${numId}`;
126
+ // Check for continuation pattern
127
+ const continuation = detectContinuationPattern(ilvl, levelInfo.start, counters);
128
+ if (continuation.isContinuation) {
129
+ // Continuation pattern: use level 0's counter incremented
130
+ const current = counters[0] ?? 0;
131
+ counters[0] = current + 1;
132
+ lastUsedLevel.set(key, 0);
133
+ return counters[0] ?? 1;
134
+ }
135
+ // Check if we moved from a deeper level to a shallower level
136
+ const prevLevel = lastUsedLevel.get(key) ?? -1;
137
+ if (prevLevel > ilvl) {
138
+ // Reset all deeper levels when moving to a shallower level
139
+ for (let i = ilvl + 1; i < counters.length; i++) {
140
+ counters[i] = 0;
141
+ levelUsed[i] = false;
142
+ }
143
+ }
144
+ // Check if this level has been used before
145
+ if (!levelUsed[ilvl]) {
146
+ // First use of this level: set to start value
147
+ counters[ilvl] = levelInfo.start;
148
+ levelUsed[ilvl] = true;
149
+ }
150
+ else {
151
+ // Subsequent use: increment
152
+ const current = counters[ilvl] ?? 0;
153
+ counters[ilvl] = current + 1;
154
+ }
155
+ lastUsedLevel.set(key, ilvl);
156
+ return counters[ilvl] ?? levelInfo.start;
157
+ }
158
+ // =============================================================================
159
+ // Number Format Rendering
160
+ // =============================================================================
161
+ /**
162
+ * Convert a number to the specified format.
163
+ *
164
+ * @param value - The numeric value
165
+ * @param format - The number format (decimal, lowerLetter, upperLetter, lowerRoman, upperRoman, etc.)
166
+ * @returns The formatted string
167
+ */
168
+ export function formatNumber(value, format) {
169
+ switch (format) {
170
+ case 'decimal':
171
+ case 'decimalZero':
172
+ return value.toString();
173
+ case 'lowerLetter':
174
+ return toLowerLetter(value);
175
+ case 'upperLetter':
176
+ return toUpperLetter(value);
177
+ case 'lowerRoman':
178
+ return toRoman(value).toLowerCase();
179
+ case 'upperRoman':
180
+ return toRoman(value);
181
+ case 'ordinal':
182
+ return toOrdinal(value);
183
+ case 'cardinalText':
184
+ return toCardinalText(value);
185
+ case 'ordinalText':
186
+ return toOrdinalText(value);
187
+ case 'bullet':
188
+ return '•';
189
+ case 'none':
190
+ return '';
191
+ default:
192
+ return value.toString();
193
+ }
194
+ }
195
+ /**
196
+ * Convert number to lowercase letter (a, b, c, ... z, aa, ab, ...).
197
+ */
198
+ function toLowerLetter(value) {
199
+ let result = '';
200
+ let n = value;
201
+ while (n > 0) {
202
+ n--;
203
+ result = String.fromCharCode(97 + (n % 26)) + result;
204
+ n = Math.floor(n / 26);
205
+ }
206
+ return result;
207
+ }
208
+ /**
209
+ * Convert number to uppercase letter (A, B, C, ... Z, AA, AB, ...).
210
+ */
211
+ function toUpperLetter(value) {
212
+ return toLowerLetter(value).toUpperCase();
213
+ }
214
+ /**
215
+ * Convert number to Roman numeral.
216
+ */
217
+ function toRoman(value) {
218
+ const romanNumerals = [
219
+ [1000, 'M'],
220
+ [900, 'CM'],
221
+ [500, 'D'],
222
+ [400, 'CD'],
223
+ [100, 'C'],
224
+ [90, 'XC'],
225
+ [50, 'L'],
226
+ [40, 'XL'],
227
+ [10, 'X'],
228
+ [9, 'IX'],
229
+ [5, 'V'],
230
+ [4, 'IV'],
231
+ [1, 'I'],
232
+ ];
233
+ let result = '';
234
+ let remaining = value;
235
+ for (const [num, roman] of romanNumerals) {
236
+ while (remaining >= num) {
237
+ result += roman;
238
+ remaining -= num;
239
+ }
240
+ }
241
+ return result;
242
+ }
243
+ /**
244
+ * Convert number to ordinal (1st, 2nd, 3rd, 4th, ...).
245
+ */
246
+ function toOrdinal(value) {
247
+ const suffixes = ['th', 'st', 'nd', 'rd'];
248
+ const v = value % 100;
249
+ const suffix = suffixes[(v - 20) % 10] ?? suffixes[v] ?? suffixes[0] ?? 'th';
250
+ return value + suffix;
251
+ }
252
+ /**
253
+ * Convert number to cardinal text (one, two, three, ...).
254
+ */
255
+ function toCardinalText(value) {
256
+ const ones = [
257
+ '',
258
+ 'one',
259
+ 'two',
260
+ 'three',
261
+ 'four',
262
+ 'five',
263
+ 'six',
264
+ 'seven',
265
+ 'eight',
266
+ 'nine',
267
+ 'ten',
268
+ 'eleven',
269
+ 'twelve',
270
+ 'thirteen',
271
+ 'fourteen',
272
+ 'fifteen',
273
+ 'sixteen',
274
+ 'seventeen',
275
+ 'eighteen',
276
+ 'nineteen',
277
+ ];
278
+ const tens = [
279
+ '',
280
+ '',
281
+ 'twenty',
282
+ 'thirty',
283
+ 'forty',
284
+ 'fifty',
285
+ 'sixty',
286
+ 'seventy',
287
+ 'eighty',
288
+ 'ninety',
289
+ ];
290
+ if (value < 20) {
291
+ return ones[value] || value.toString();
292
+ }
293
+ if (value < 100) {
294
+ const ten = Math.floor(value / 10);
295
+ const one = value % 10;
296
+ return tens[ten] + (one > 0 ? '-' + ones[one] : '');
297
+ }
298
+ // For larger numbers, fall back to decimal
299
+ return value.toString();
300
+ }
301
+ /**
302
+ * Convert number to ordinal text (first, second, third, ...).
303
+ */
304
+ function toOrdinalText(value) {
305
+ const ordinals = {
306
+ 1: 'first',
307
+ 2: 'second',
308
+ 3: 'third',
309
+ 4: 'fourth',
310
+ 5: 'fifth',
311
+ 6: 'sixth',
312
+ 7: 'seventh',
313
+ 8: 'eighth',
314
+ 9: 'ninth',
315
+ 10: 'tenth',
316
+ 11: 'eleventh',
317
+ 12: 'twelfth',
318
+ };
319
+ return ordinals[value] || toOrdinal(value);
320
+ }
321
+ // =============================================================================
322
+ // Level Text Expansion
323
+ // =============================================================================
324
+ /**
325
+ * Expand a level text format string with actual numbers.
326
+ *
327
+ * Level text uses placeholders like %1, %2, %3 for level values.
328
+ *
329
+ * @param lvlText - The level text format (e.g., "%1.", "%1.%2")
330
+ * @param counters - Current counter values for each level
331
+ * @param levels - Level definitions for format lookup
332
+ * @returns The expanded text (e.g., "1.", "1.2")
333
+ */
334
+ export function expandLevelText(lvlText, counters, levels) {
335
+ let result = lvlText;
336
+ // Replace %1 through %9 with corresponding level values
337
+ for (let i = 0; i < 9; i++) {
338
+ const placeholder = `%${i + 1}`;
339
+ if (result.includes(placeholder)) {
340
+ const value = counters[i] ?? 0;
341
+ const level = levels[i];
342
+ const formatted = level ? formatNumber(value, level.numFmt) : value.toString();
343
+ result = result.replace(placeholder, formatted);
344
+ }
345
+ }
346
+ return result;
347
+ }
348
+ // =============================================================================
349
+ // Legal Numbering (isLgl) Support
350
+ // =============================================================================
351
+ /**
352
+ * Check if legal numbering is active for a level.
353
+ *
354
+ * Legal numbering (w:isLgl) changes how nested levels display,
355
+ * using decimal format regardless of the level's numFmt.
356
+ *
357
+ * @param levels - Level definitions
358
+ * @param currentLevel - The current level index
359
+ * @returns True if legal numbering is active
360
+ */
361
+ export function isLegalNumberingActive(levels, currentLevel) {
362
+ // Legal numbering applies when any ancestor level has isLgl=true
363
+ for (let i = 0; i <= currentLevel; i++) {
364
+ if (levels[i]?.isLgl) {
365
+ return true;
366
+ }
367
+ }
368
+ return false;
369
+ }
370
+ /**
371
+ * Expand level text with legal numbering rules.
372
+ *
373
+ * When legal numbering is active, all level placeholders use decimal
374
+ * format regardless of the level's defined numFmt.
375
+ *
376
+ * @param lvlText - The level text format
377
+ * @param counters - Current counter values
378
+ * @param levels - Level definitions
379
+ * @param currentLevel - The current level index
380
+ * @returns The expanded text with legal numbering applied
381
+ */
382
+ export function expandLevelTextWithLegal(lvlText, counters, levels, currentLevel) {
383
+ const useLegal = isLegalNumberingActive(levels, currentLevel);
384
+ let result = lvlText;
385
+ for (let i = 0; i < 9; i++) {
386
+ const placeholder = `%${i + 1}`;
387
+ if (result.includes(placeholder)) {
388
+ const value = counters[i] ?? 0;
389
+ const level = levels[i];
390
+ const format = useLegal ? 'decimal' : level?.numFmt ?? 'decimal';
391
+ const formatted = formatNumber(value, format);
392
+ result = result.replace(placeholder, formatted);
393
+ }
394
+ }
395
+ return result;
396
+ }
397
+ // =============================================================================
398
+ // Numbering Definition Parsing
399
+ // =============================================================================
400
+ /**
401
+ * Extract list level info from a w:lvl element.
402
+ *
403
+ * @param lvlElement - The w:lvl XML element
404
+ * @returns The extracted level info
405
+ */
406
+ export function parseLevelElement(lvlElement) {
407
+ const ilvl = parseInt(lvlElement.getAttribute('w:ilvl') || '0', 10);
408
+ let start = 1;
409
+ let numFmt = 'decimal';
410
+ let lvlText = '';
411
+ let isLgl = false;
412
+ for (const child of childElements(lvlElement)) {
413
+ switch (child.tagName) {
414
+ case 'w:start':
415
+ start = parseInt(child.getAttribute('w:val') || '1', 10);
416
+ break;
417
+ case 'w:numFmt':
418
+ numFmt = child.getAttribute('w:val') || 'decimal';
419
+ break;
420
+ case 'w:lvlText':
421
+ lvlText = child.getAttribute('w:val') ?? '';
422
+ break;
423
+ case 'w:isLgl':
424
+ isLgl = child.getAttribute('w:val') !== 'false' && child.getAttribute('w:val') !== '0';
425
+ break;
426
+ }
427
+ }
428
+ return { ilvl, start, numFmt, lvlText, isLgl };
429
+ }
430
+ /**
431
+ * Parse an abstract numbering definition.
432
+ *
433
+ * @param abstractNumElement - The w:abstractNum XML element
434
+ * @returns Array of level info for all defined levels
435
+ */
436
+ export function parseAbstractNumElement(abstractNumElement) {
437
+ const levels = [];
438
+ for (const child of childElements(abstractNumElement)) {
439
+ if (child.tagName === 'w:lvl') {
440
+ const levelInfo = parseLevelElement(child);
441
+ levels[levelInfo.ilvl] = levelInfo;
442
+ }
443
+ }
444
+ return levels;
445
+ }
446
+ //# sourceMappingURL=numbering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numbering.js","sourceRoot":"","sources":["../src/numbering.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * accept_changes — accept all tracked changes in a OOXML document body.
3
+ *
4
+ * Produces a clean document with no revision markup by:
5
+ * - Removing w:del elements and their content
6
+ * - Unwrapping w:ins elements (promoting children)
7
+ * - Removing w:moveFrom (source), unwrapping w:moveTo (destination)
8
+ * - Removing all *PrChange property change records
9
+ * - Stripping paragraph-level revision markers
10
+ * - Cleaning up move range markers and rsidDel attributes
11
+ *
12
+ * Operates on the W3C DOM (`@xmldom/xmldom`) — the same API used
13
+ * throughout docx-primitives-ts (contrast with docx-comparison's
14
+ * custom WmlElement AST).
15
+ */
16
+ export type AcceptChangesResult = {
17
+ insertionsAccepted: number;
18
+ deletionsAccepted: number;
19
+ movesResolved: number;
20
+ propertyChangesResolved: number;
21
+ };
22
+ /**
23
+ * Accept all tracked changes in the document body, producing a clean
24
+ * document with no revision markup.
25
+ *
26
+ * Mutates the Document in place (same convention as simplifyRedlines
27
+ * and mergeRuns).
28
+ */
29
+ export declare function acceptChanges(doc: Document): AcceptChangesResult;
30
+ //# sourceMappingURL=accept_changes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accept_changes.d.ts","sourceRoot":"","sources":["../../src/primitives/accept_changes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,MAAM,MAAM,mBAAmB,GAAG;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,EAAE,MAAM,CAAC;CACjC,CAAC;AA8IF;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,mBAAmB,CA0FhE"}