@aster-editor/word 0.4.3 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/README.md +204 -82
  2. package/dist/docx/compare/align.d.ts +24 -0
  3. package/dist/docx/compare/align.d.ts.map +1 -0
  4. package/dist/docx/compare/align.js +217 -0
  5. package/dist/docx/compare/align.js.map +1 -0
  6. package/dist/docx/compare/compare-blocks.d.ts +29 -0
  7. package/dist/docx/compare/compare-blocks.d.ts.map +1 -0
  8. package/dist/docx/compare/compare-blocks.js +234 -0
  9. package/dist/docx/compare/compare-blocks.js.map +1 -0
  10. package/dist/docx/compare/compare-context.d.ts +25 -0
  11. package/dist/docx/compare/compare-context.d.ts.map +1 -0
  12. package/dist/docx/compare/compare-context.js +31 -0
  13. package/dist/docx/compare/compare-context.js.map +1 -0
  14. package/dist/docx/compare/compare-docx.d.ts +4 -0
  15. package/dist/docx/compare/compare-docx.d.ts.map +1 -0
  16. package/dist/docx/compare/compare-docx.js +173 -0
  17. package/dist/docx/compare/compare-docx.js.map +1 -0
  18. package/dist/docx/compare/compare-tables.d.ts +13 -0
  19. package/dist/docx/compare/compare-tables.d.ts.map +1 -0
  20. package/dist/docx/compare/compare-tables.js +47 -0
  21. package/dist/docx/compare/compare-tables.js.map +1 -0
  22. package/dist/docx/compare/model-borders.d.ts +27 -0
  23. package/dist/docx/compare/model-borders.d.ts.map +1 -0
  24. package/dist/docx/compare/model-borders.js +41 -0
  25. package/dist/docx/compare/model-borders.js.map +1 -0
  26. package/dist/docx/compare/model-paragraph.d.ts +25 -0
  27. package/dist/docx/compare/model-paragraph.d.ts.map +1 -0
  28. package/dist/docx/compare/model-paragraph.js +309 -0
  29. package/dist/docx/compare/model-paragraph.js.map +1 -0
  30. package/dist/docx/compare/model-sections.d.ts +11 -0
  31. package/dist/docx/compare/model-sections.d.ts.map +1 -0
  32. package/dist/docx/compare/model-sections.js +97 -0
  33. package/dist/docx/compare/model-sections.js.map +1 -0
  34. package/dist/docx/compare/model.d.ts +113 -0
  35. package/dist/docx/compare/model.d.ts.map +1 -0
  36. package/dist/docx/compare/model.js +214 -0
  37. package/dist/docx/compare/model.js.map +1 -0
  38. package/dist/docx/compare/parts.d.ts +40 -0
  39. package/dist/docx/compare/parts.d.ts.map +1 -0
  40. package/dist/docx/compare/parts.js +113 -0
  41. package/dist/docx/compare/parts.js.map +1 -0
  42. package/dist/docx/compare/tally.d.ts +23 -0
  43. package/dist/docx/compare/tally.d.ts.map +1 -0
  44. package/dist/docx/compare/tally.js +94 -0
  45. package/dist/docx/compare/tally.js.map +1 -0
  46. package/dist/docx/compare/types.d.ts +55 -0
  47. package/dist/docx/compare/types.d.ts.map +1 -0
  48. package/dist/docx/compare/types.js +2 -0
  49. package/dist/docx/compare/types.js.map +1 -0
  50. package/dist/docx/compare/values.d.ts +13 -0
  51. package/dist/docx/compare/values.d.ts.map +1 -0
  52. package/dist/docx/compare/values.js +44 -0
  53. package/dist/docx/compare/values.js.map +1 -0
  54. package/dist/docx/import-docx.d.ts.map +1 -1
  55. package/dist/docx/import-docx.js +57 -2
  56. package/dist/docx/import-docx.js.map +1 -1
  57. package/dist/docx/preprocess/variables.d.ts.map +1 -1
  58. package/dist/docx/preprocess/variables.js +2 -2
  59. package/dist/docx/preprocess/variables.js.map +1 -1
  60. package/dist/docx/preprocess/xml-utils.d.ts +7 -0
  61. package/dist/docx/preprocess/xml-utils.d.ts.map +1 -1
  62. package/dist/docx/preprocess/xml-utils.js +9 -0
  63. package/dist/docx/preprocess/xml-utils.js.map +1 -1
  64. package/dist/docx/reader/headers.d.ts +17 -0
  65. package/dist/docx/reader/headers.d.ts.map +1 -0
  66. package/dist/docx/reader/headers.js +64 -0
  67. package/dist/docx/reader/headers.js.map +1 -0
  68. package/dist/docx/reader/html.d.ts +12 -0
  69. package/dist/docx/reader/html.d.ts.map +1 -0
  70. package/dist/docx/reader/html.js +27 -0
  71. package/dist/docx/reader/html.js.map +1 -0
  72. package/dist/docx/reader/images.d.ts +27 -0
  73. package/dist/docx/reader/images.d.ts.map +1 -0
  74. package/dist/docx/reader/images.js +288 -0
  75. package/dist/docx/reader/images.js.map +1 -0
  76. package/dist/docx/reader/index.d.ts +10 -0
  77. package/dist/docx/reader/index.d.ts.map +1 -0
  78. package/dist/docx/reader/index.js +177 -0
  79. package/dist/docx/reader/index.js.map +1 -0
  80. package/dist/docx/reader/lists.d.ts +44 -0
  81. package/dist/docx/reader/lists.d.ts.map +1 -0
  82. package/dist/docx/reader/lists.js +360 -0
  83. package/dist/docx/reader/lists.js.map +1 -0
  84. package/dist/docx/reader/lost.d.ts +30 -0
  85. package/dist/docx/reader/lost.d.ts.map +1 -0
  86. package/dist/docx/reader/lost.js +215 -0
  87. package/dist/docx/reader/lost.js.map +1 -0
  88. package/dist/docx/reader/notes.d.ts +4 -0
  89. package/dist/docx/reader/notes.d.ts.map +1 -0
  90. package/dist/docx/reader/notes.js +112 -0
  91. package/dist/docx/reader/notes.js.map +1 -0
  92. package/dist/docx/reader/package.d.ts +16 -0
  93. package/dist/docx/reader/package.d.ts.map +1 -0
  94. package/dist/docx/reader/package.js +138 -0
  95. package/dist/docx/reader/package.js.map +1 -0
  96. package/dist/docx/reader/paragraphs.d.ts +15 -0
  97. package/dist/docx/reader/paragraphs.d.ts.map +1 -0
  98. package/dist/docx/reader/paragraphs.js +162 -0
  99. package/dist/docx/reader/paragraphs.js.map +1 -0
  100. package/dist/docx/reader/properties.d.ts +90 -0
  101. package/dist/docx/reader/properties.d.ts.map +1 -0
  102. package/dist/docx/reader/properties.js +402 -0
  103. package/dist/docx/reader/properties.js.map +1 -0
  104. package/dist/docx/reader/runs.d.ts +49 -0
  105. package/dist/docx/reader/runs.d.ts.map +1 -0
  106. package/dist/docx/reader/runs.js +442 -0
  107. package/dist/docx/reader/runs.js.map +1 -0
  108. package/dist/docx/reader/sections.d.ts +36 -0
  109. package/dist/docx/reader/sections.d.ts.map +1 -0
  110. package/dist/docx/reader/sections.js +158 -0
  111. package/dist/docx/reader/sections.js.map +1 -0
  112. package/dist/docx/reader/styles.d.ts +24 -0
  113. package/dist/docx/reader/styles.d.ts.map +1 -0
  114. package/dist/docx/reader/styles.js +383 -0
  115. package/dist/docx/reader/styles.js.map +1 -0
  116. package/dist/docx/reader/tables.d.ts +6 -0
  117. package/dist/docx/reader/tables.d.ts.map +1 -0
  118. package/dist/docx/reader/tables.js +175 -0
  119. package/dist/docx/reader/tables.js.map +1 -0
  120. package/dist/docx/reader/test-support.d.ts +25 -0
  121. package/dist/docx/reader/test-support.d.ts.map +1 -0
  122. package/dist/docx/reader/test-support.js +135 -0
  123. package/dist/docx/reader/test-support.js.map +1 -0
  124. package/dist/docx/reader/testing-blocks.d.ts +50 -0
  125. package/dist/docx/reader/testing-blocks.d.ts.map +1 -0
  126. package/dist/docx/reader/testing-blocks.js +302 -0
  127. package/dist/docx/reader/testing-blocks.js.map +1 -0
  128. package/dist/docx/reader/types.d.ts +181 -0
  129. package/dist/docx/reader/types.d.ts.map +1 -0
  130. package/dist/docx/reader/types.js +2 -0
  131. package/dist/docx/reader/types.js.map +1 -0
  132. package/dist/docx/reader/units-blocks.d.ts +75 -0
  133. package/dist/docx/reader/units-blocks.d.ts.map +1 -0
  134. package/dist/docx/reader/units-blocks.js +254 -0
  135. package/dist/docx/reader/units-blocks.js.map +1 -0
  136. package/dist/docx/reader/units.d.ts +72 -0
  137. package/dist/docx/reader/units.d.ts.map +1 -0
  138. package/dist/docx/reader/units.js +177 -0
  139. package/dist/docx/reader/units.js.map +1 -0
  140. package/dist/docx/types.d.ts +40 -2
  141. package/dist/docx/types.d.ts.map +1 -1
  142. package/dist/docx/writer/content-types.d.ts +30 -0
  143. package/dist/docx/writer/content-types.d.ts.map +1 -0
  144. package/dist/docx/writer/content-types.js +81 -0
  145. package/dist/docx/writer/content-types.js.map +1 -0
  146. package/dist/docx/writer/core-properties.d.ts +16 -0
  147. package/dist/docx/writer/core-properties.d.ts.map +1 -0
  148. package/dist/docx/writer/core-properties.js +64 -0
  149. package/dist/docx/writer/core-properties.js.map +1 -0
  150. package/dist/docx/writer/footnotes-merge.d.ts +30 -0
  151. package/dist/docx/writer/footnotes-merge.d.ts.map +1 -0
  152. package/dist/docx/writer/footnotes-merge.js +71 -0
  153. package/dist/docx/writer/footnotes-merge.js.map +1 -0
  154. package/dist/docx/writer/graft.d.ts +41 -0
  155. package/dist/docx/writer/graft.d.ts.map +1 -0
  156. package/dist/docx/writer/graft.js +277 -0
  157. package/dist/docx/writer/graft.js.map +1 -0
  158. package/dist/docx/writer/header-footer-graft.d.ts +34 -0
  159. package/dist/docx/writer/header-footer-graft.d.ts.map +1 -0
  160. package/dist/docx/writer/header-footer-graft.js +155 -0
  161. package/dist/docx/writer/header-footer-graft.js.map +1 -0
  162. package/dist/docx/writer/header-footer-variables.d.ts +25 -0
  163. package/dist/docx/writer/header-footer-variables.d.ts.map +1 -0
  164. package/dist/docx/writer/header-footer-variables.js +101 -0
  165. package/dist/docx/writer/header-footer-variables.js.map +1 -0
  166. package/dist/docx/writer/media.d.ts +32 -0
  167. package/dist/docx/writer/media.d.ts.map +1 -0
  168. package/dist/docx/writer/media.js +88 -0
  169. package/dist/docx/writer/media.js.map +1 -0
  170. package/dist/docx/writer/numbering-merge.d.ts +37 -0
  171. package/dist/docx/writer/numbering-merge.d.ts.map +1 -0
  172. package/dist/docx/writer/numbering-merge.js +140 -0
  173. package/dist/docx/writer/numbering-merge.js.map +1 -0
  174. package/dist/docx/writer/relationships.d.ts +63 -0
  175. package/dist/docx/writer/relationships.d.ts.map +1 -0
  176. package/dist/docx/writer/relationships.js +127 -0
  177. package/dist/docx/writer/relationships.js.map +1 -0
  178. package/dist/docx/writer/settings-merge.d.ts +21 -0
  179. package/dist/docx/writer/settings-merge.d.ts.map +1 -0
  180. package/dist/docx/writer/settings-merge.js +165 -0
  181. package/dist/docx/writer/settings-merge.js.map +1 -0
  182. package/dist/docx/writer/style-reconcile.d.ts +29 -0
  183. package/dist/docx/writer/style-reconcile.d.ts.map +1 -0
  184. package/dist/docx/writer/style-reconcile.js +319 -0
  185. package/dist/docx/writer/style-reconcile.js.map +1 -0
  186. package/dist/docx/writer/style-strip.d.ts +33 -0
  187. package/dist/docx/writer/style-strip.d.ts.map +1 -0
  188. package/dist/docx/writer/style-strip.js +267 -0
  189. package/dist/docx/writer/style-strip.js.map +1 -0
  190. package/dist/docx/writer/styles-merge.d.ts +57 -0
  191. package/dist/docx/writer/styles-merge.d.ts.map +1 -0
  192. package/dist/docx/writer/styles-merge.js +184 -0
  193. package/dist/docx/writer/styles-merge.js.map +1 -0
  194. package/dist/docx/writer/template.d.ts +48 -0
  195. package/dist/docx/writer/template.d.ts.map +1 -0
  196. package/dist/docx/writer/template.js +280 -0
  197. package/dist/docx/writer/template.js.map +1 -0
  198. package/dist/docx/writer/testing.d.ts +52 -0
  199. package/dist/docx/writer/testing.d.ts.map +1 -0
  200. package/dist/docx/writer/testing.js +318 -0
  201. package/dist/docx/writer/testing.js.map +1 -0
  202. package/dist/docx/writer/xml-io.d.ts +90 -0
  203. package/dist/docx/writer/xml-io.d.ts.map +1 -0
  204. package/dist/docx/writer/xml-io.js +215 -0
  205. package/dist/docx/writer/xml-io.js.map +1 -0
  206. package/dist/export/blocks.d.ts.map +1 -1
  207. package/dist/export/blocks.js +149 -12
  208. package/dist/export/blocks.js.map +1 -1
  209. package/dist/export/context.d.ts +34 -2
  210. package/dist/export/context.d.ts.map +1 -1
  211. package/dist/export/context.js +28 -2
  212. package/dist/export/context.js.map +1 -1
  213. package/dist/export/css.d.ts +58 -0
  214. package/dist/export/css.d.ts.map +1 -1
  215. package/dist/export/css.js +194 -0
  216. package/dist/export/css.js.map +1 -1
  217. package/dist/export/dom.d.ts +2 -0
  218. package/dist/export/dom.d.ts.map +1 -1
  219. package/dist/export/dom.js +2 -0
  220. package/dist/export/dom.js.map +1 -1
  221. package/dist/export/export-docx.d.ts +4 -0
  222. package/dist/export/export-docx.d.ts.map +1 -1
  223. package/dist/export/export-docx.js +57 -4
  224. package/dist/export/export-docx.js.map +1 -1
  225. package/dist/export/header-footer.d.ts +15 -1
  226. package/dist/export/header-footer.d.ts.map +1 -1
  227. package/dist/export/header-footer.js +37 -0
  228. package/dist/export/header-footer.js.map +1 -1
  229. package/dist/export/html-to-docx.d.ts +20 -2
  230. package/dist/export/html-to-docx.d.ts.map +1 -1
  231. package/dist/export/html-to-docx.js +40 -14
  232. package/dist/export/html-to-docx.js.map +1 -1
  233. package/dist/export/inline.d.ts +25 -3
  234. package/dist/export/inline.d.ts.map +1 -1
  235. package/dist/export/inline.js +91 -34
  236. package/dist/export/inline.js.map +1 -1
  237. package/dist/export/styles.d.ts +51 -7
  238. package/dist/export/styles.d.ts.map +1 -1
  239. package/dist/export/styles.js +121 -16
  240. package/dist/export/styles.js.map +1 -1
  241. package/dist/export/tables.d.ts.map +1 -1
  242. package/dist/export/tables.js +140 -12
  243. package/dist/export/tables.js.map +1 -1
  244. package/dist/export/types.d.ts +44 -5
  245. package/dist/export/types.d.ts.map +1 -1
  246. package/dist/index.d.ts +5 -2
  247. package/dist/index.d.ts.map +1 -1
  248. package/dist/index.js +1 -0
  249. package/dist/index.js.map +1 -1
  250. package/package.json +2 -2
@@ -0,0 +1,402 @@
1
+ import { childNamed, wordAttribute } from '../preprocess/xml-utils';
2
+ import { borderColor, borderStyleOf, bounded, boundedDistancePt, eighthPointsToPt, fontName, halfPointsToPt, hexColor, highlightColor, lineToMultiple, numberAttr, onOff, twipsToPt, WORD_LIMITS, } from './units';
3
+ export function emptyParagraph() {
4
+ return { borders: new Map() };
5
+ }
6
+ export function cloneParagraph(source) {
7
+ return { ...source, borders: new Map(source.borders) };
8
+ }
9
+ const BORDER_SIDES = ['top', 'right', 'bottom', 'left', 'between'];
10
+ /** Largeur de bordure par défaut de Word quand `w:sz` est absent ou irrecevable : ½ pt. */
11
+ const DEFAULT_BORDER_WIDTH_PT = 0.5;
12
+ /**
13
+ * Une bordure OOXML (`w:top`, `w:left`… de `w:pBdr`, `w:tcBorders`, `w:tblBorders`) :
14
+ * `w:val` → style, `w:sz` en huitièmes de point → `widthPt` (au plus 12 pt, sinon la
15
+ * largeur par défaut), `w:color` (`auto` → noir). `null` pour `nil`/`none` : la bordure
16
+ * est explicitement absente.
17
+ */
18
+ export function readBorder(element, side) {
19
+ const style = borderStyleOf(wordAttribute(element, 'val'));
20
+ if (style === null)
21
+ return null;
22
+ const size = numberAttr(wordAttribute(element, 'sz'));
23
+ const widthPt = size === undefined ? undefined : bounded(eighthPointsToPt(size), 0, WORD_LIMITS.borderMaxPt);
24
+ return {
25
+ side,
26
+ style,
27
+ widthPt: widthPt ?? DEFAULT_BORDER_WIDTH_PT,
28
+ color: borderColor(wordAttribute(element, 'color')),
29
+ };
30
+ }
31
+ /** Applique les côtés d'un conteneur de bordures sur la carte héritée (`nil` efface). */
32
+ export function applyBorders(container, borders) {
33
+ for (const side of BORDER_SIDES) {
34
+ const element = childNamed(container, side);
35
+ if (!element)
36
+ continue;
37
+ const border = readBorder(element, side);
38
+ if (border)
39
+ borders.set(side, border);
40
+ else
41
+ borders.delete(side);
42
+ }
43
+ }
44
+ /** Bordures ordonnées comme le contrat les sérialise : haut, droite, bas, gauche, entre. */
45
+ export function orderedBorders(borders) {
46
+ const out = [];
47
+ for (const side of BORDER_SIDES) {
48
+ const border = borders.get(side);
49
+ if (border)
50
+ out.push(border);
51
+ }
52
+ return out;
53
+ }
54
+ /**
55
+ * Fond d'un `w:shd` : la couleur `w:fill` en `#rrggbb`. `undefined` quand le fond est
56
+ * absent, `auto` ou `nil` (ce qui efface un fond hérité). Les motifs (`pct25`…) sont
57
+ * ignorés : seul le remplissage est représentable.
58
+ */
59
+ export function readShadingFill(shd) {
60
+ const val = wordAttribute(shd, 'val');
61
+ if (val === 'nil')
62
+ return undefined;
63
+ return hexColor(wordAttribute(shd, 'fill'));
64
+ }
65
+ function readAlign(jc) {
66
+ switch (wordAttribute(jc, 'val')) {
67
+ case 'left':
68
+ case 'start':
69
+ return 'left';
70
+ case 'center':
71
+ return 'center';
72
+ case 'right':
73
+ case 'end':
74
+ return 'right';
75
+ case 'both':
76
+ case 'distribute':
77
+ return 'justify';
78
+ default:
79
+ return undefined;
80
+ }
81
+ }
82
+ /** Distance en twips d'un attribut, bornée à ±1584 pt ; `undefined` si absente ou hors bornes. */
83
+ function distanceAttr(value) {
84
+ const twips = numberAttr(value);
85
+ return twips === undefined ? undefined : boundedDistancePt(twipsToPt(twips));
86
+ }
87
+ function applySpacing(spacing, acc) {
88
+ const before = distanceAttr(wordAttribute(spacing, 'before'));
89
+ if (before !== undefined)
90
+ acc.spacingBeforePt = before;
91
+ const after = distanceAttr(wordAttribute(spacing, 'after'));
92
+ if (after !== undefined)
93
+ acc.spacingAfterPt = after;
94
+ const line = numberAttr(wordAttribute(spacing, 'line'));
95
+ if (line === undefined)
96
+ return;
97
+ const rule = wordAttribute(spacing, 'lineRule') || 'auto';
98
+ if (rule === 'auto') {
99
+ const multiple = bounded(lineToMultiple(line), 0, WORD_LIMITS.lineMultipleMax);
100
+ if (multiple === undefined)
101
+ return;
102
+ acc.lineHeight = multiple;
103
+ delete acc.lineHeightPt;
104
+ }
105
+ else {
106
+ const exact = bounded(twipsToPt(line), 0, WORD_LIMITS.distanceMaxPt);
107
+ if (exact === undefined)
108
+ return;
109
+ acc.lineHeightPt = exact;
110
+ delete acc.lineHeight;
111
+ }
112
+ }
113
+ function applyIndent(ind, acc) {
114
+ const left = distanceAttr(wordAttribute(ind, 'left') || wordAttribute(ind, 'start'));
115
+ if (left !== undefined)
116
+ acc.indentLeftPt = left;
117
+ const right = distanceAttr(wordAttribute(ind, 'right') || wordAttribute(ind, 'end'));
118
+ if (right !== undefined)
119
+ acc.indentRightPt = right;
120
+ // `hanging` l'emporte sur `firstLine` quand les deux sont posés (comportement Word).
121
+ const hanging = distanceAttr(wordAttribute(ind, 'hanging'));
122
+ const firstLine = distanceAttr(wordAttribute(ind, 'firstLine'));
123
+ if (hanging !== undefined)
124
+ acc.indentFirstLinePt = -hanging;
125
+ else if (firstLine !== undefined)
126
+ acc.indentFirstLinePt = firstLine;
127
+ }
128
+ function applyNumbering(numPr, acc) {
129
+ const numId = childNamed(numPr, 'numId');
130
+ if (!numId)
131
+ return;
132
+ const id = wordAttribute(numId, 'val');
133
+ if (id === '' || id === '0') {
134
+ delete acc.numbering;
135
+ return;
136
+ }
137
+ const ilvl = childNamed(numPr, 'ilvl');
138
+ const level = numberAttr(ilvl ? wordAttribute(ilvl, 'val') : undefined) ?? 0;
139
+ acc.numbering = { numId: id, level };
140
+ }
141
+ /** Applique un `w:pPr` (de style ou direct) sur l'accumulateur. `w:pStyle` n'est pas lu ici. */
142
+ export function applyParagraphProperties(pPr, acc) {
143
+ for (const child of Array.from(pPr.children)) {
144
+ switch (child.localName) {
145
+ case 'jc': {
146
+ const align = readAlign(child);
147
+ if (align)
148
+ acc.align = align;
149
+ break;
150
+ }
151
+ case 'spacing':
152
+ applySpacing(child, acc);
153
+ break;
154
+ case 'ind':
155
+ applyIndent(child, acc);
156
+ break;
157
+ case 'pBdr':
158
+ applyBorders(child, acc.borders);
159
+ break;
160
+ case 'shd': {
161
+ const fill = readShadingFill(child);
162
+ if (fill)
163
+ acc.shading = fill;
164
+ else
165
+ delete acc.shading;
166
+ break;
167
+ }
168
+ case 'keepNext':
169
+ acc.keepWithNext = onOff(wordAttribute(child, 'val'));
170
+ break;
171
+ case 'pageBreakBefore':
172
+ acc.pageBreakBefore = onOff(wordAttribute(child, 'val'));
173
+ break;
174
+ case 'numPr':
175
+ applyNumbering(child, acc);
176
+ break;
177
+ case 'outlineLvl': {
178
+ const level = numberAttr(wordAttribute(child, 'val'));
179
+ if (level !== undefined)
180
+ acc.outlineLevel = level;
181
+ break;
182
+ }
183
+ default:
184
+ break;
185
+ }
186
+ }
187
+ }
188
+ /**
189
+ * Police d'un `w:rFonts` : l'attribut de thème prime sur le nom explicite, `ascii` sur
190
+ * `hAnsi`. Un nom qui n'est pas un nom de police (`fontName`) est ignoré : il finirait
191
+ * tel quel dans un attribut `style`.
192
+ */
193
+ function readFont(rFonts, theme) {
194
+ for (const attr of ['asciiTheme', 'hAnsiTheme']) {
195
+ const value = wordAttribute(rFonts, attr);
196
+ if (!value)
197
+ continue;
198
+ const font = fontName(value.startsWith('major') ? theme.major : theme.minor);
199
+ if (font)
200
+ return font;
201
+ }
202
+ return fontName(wordAttribute(rFonts, 'ascii')) ?? fontName(wordAttribute(rFonts, 'hAnsi'));
203
+ }
204
+ function readUnderline(u) {
205
+ const val = wordAttribute(u, 'val') || 'single';
206
+ switch (val) {
207
+ case 'none':
208
+ return null;
209
+ case 'double':
210
+ case 'wavyDouble':
211
+ return 'double';
212
+ case 'dotted':
213
+ case 'dottedHeavy':
214
+ return 'dotted';
215
+ case 'wave':
216
+ case 'wavyHeavy':
217
+ return 'wavy';
218
+ default:
219
+ return /^dash|^dotDash|^dotDotDash/i.test(val) ? 'dashed' : 'solid';
220
+ }
221
+ }
222
+ /** Applique un `w:rPr` (de style ou direct) sur l'accumulateur. `w:rStyle` n'est pas lu ici. */
223
+ export function applyRunProperties(rPr, acc, theme) {
224
+ for (const child of Array.from(rPr.children)) {
225
+ const val = wordAttribute(child, 'val');
226
+ switch (child.localName) {
227
+ case 'rFonts': {
228
+ const font = readFont(child, theme);
229
+ if (font)
230
+ acc.fontFamily = font;
231
+ break;
232
+ }
233
+ case 'sz': {
234
+ const halfPoints = numberAttr(val);
235
+ const size = halfPoints === undefined
236
+ ? undefined
237
+ : bounded(halfPointsToPt(halfPoints), WORD_LIMITS.fontSizeMinPt, WORD_LIMITS.fontSizeMaxPt);
238
+ if (size !== undefined)
239
+ acc.fontSizePt = size;
240
+ break;
241
+ }
242
+ case 'b':
243
+ acc.bold = onOff(val);
244
+ break;
245
+ case 'i':
246
+ acc.italic = onOff(val);
247
+ break;
248
+ case 'u':
249
+ acc.underline = readUnderline(child);
250
+ break;
251
+ case 'strike':
252
+ acc.strike = onOff(val) ? 'solid' : null;
253
+ break;
254
+ case 'dstrike':
255
+ acc.strike = onOff(val) ? 'double' : null;
256
+ break;
257
+ // `auto`/`none` posent `undefined` plutôt que de supprimer la clé : dans le delta d'un
258
+ // style de caractère (`mergeRunDelta`), la clé présente efface la valeur héritée.
259
+ case 'color':
260
+ acc.color = hexColor(val);
261
+ break;
262
+ case 'highlight':
263
+ acc.highlight = highlightColor(val);
264
+ break;
265
+ case 'shd': {
266
+ // Fond de run : surlignage de repli, `w:highlight` garde la main s'il est posé.
267
+ const fill = readShadingFill(child);
268
+ if (fill && !childNamed(rPr, 'highlight'))
269
+ acc.highlight = fill;
270
+ break;
271
+ }
272
+ case 'vertAlign':
273
+ acc.superscript = val === 'superscript';
274
+ acc.subscript = val === 'subscript';
275
+ break;
276
+ case 'spacing': {
277
+ const spacing = distanceAttr(val);
278
+ if (spacing !== undefined)
279
+ acc.letterSpacingPt = spacing;
280
+ break;
281
+ }
282
+ case 'caps':
283
+ if (onOff(val))
284
+ acc.caps = 'all';
285
+ else if (acc.caps === 'all')
286
+ delete acc.caps;
287
+ break;
288
+ case 'smallCaps':
289
+ if (onOff(val))
290
+ acc.caps = 'small';
291
+ else if (acc.caps === 'small')
292
+ delete acc.caps;
293
+ break;
294
+ case 'lang':
295
+ if (val)
296
+ acc.lang = val;
297
+ break;
298
+ default:
299
+ break;
300
+ }
301
+ }
302
+ }
303
+ /**
304
+ * Applique le delta d'un style de caractère (ses `w:rPr` résolus sur un accumulateur
305
+ * vide) sur les propriétés héritées du paragraphe. Les propriétés à bascule d'ECMA-376
306
+ * §17.7.3 (`b`, `i`, `caps`, `smallCaps`, `strike`/`dstrike`) sont combinées en **XOR** :
307
+ * un style `Strong` (gras) sur un titre déjà gras rend non gras, comme Word. Une bascule
308
+ * explicitement désactivée dans le style (`w:b w:val="0"`) ne change rien (XOR avec
309
+ * faux). Les autres propriétés remplacent l'héritée, y compris par `undefined`
310
+ * (`w:color w:val="auto"` efface la couleur du paragraphe).
311
+ */
312
+ export function mergeRunDelta(acc, delta) {
313
+ for (const key of Object.keys(delta)) {
314
+ switch (key) {
315
+ case 'bold':
316
+ case 'italic':
317
+ if (delta[key])
318
+ acc[key] = !acc[key];
319
+ break;
320
+ case 'strike':
321
+ if (delta.strike)
322
+ acc.strike = acc.strike ? null : delta.strike;
323
+ break;
324
+ case 'caps':
325
+ // `caps` et `smallCaps` sont deux bascules ; quand les deux finissent actives, la
326
+ // casse du style de caractère l'emporte (un seul rendu possible dans le contrat).
327
+ if (delta.caps)
328
+ acc.caps = acc.caps === delta.caps ? undefined : delta.caps;
329
+ break;
330
+ default:
331
+ acc[key] = delta[key];
332
+ break;
333
+ }
334
+ }
335
+ }
336
+ /** Propriétés de run figées : les booléens faux, `null` et `undefined` disparaissent. */
337
+ export function finalizeRun(acc) {
338
+ const out = {};
339
+ if (acc.fontFamily)
340
+ out.fontFamily = acc.fontFamily;
341
+ if (acc.fontSizePt !== undefined)
342
+ out.fontSizePt = acc.fontSizePt;
343
+ if (acc.bold)
344
+ out.bold = true;
345
+ if (acc.italic)
346
+ out.italic = true;
347
+ if (acc.underline)
348
+ out.underline = acc.underline;
349
+ if (acc.strike)
350
+ out.strike = acc.strike;
351
+ if (acc.color)
352
+ out.color = acc.color;
353
+ if (acc.highlight)
354
+ out.highlight = acc.highlight;
355
+ if (acc.superscript)
356
+ out.superscript = true;
357
+ if (acc.subscript)
358
+ out.subscript = true;
359
+ if (acc.letterSpacingPt !== undefined && acc.letterSpacingPt !== 0) {
360
+ out.letterSpacingPt = acc.letterSpacingPt;
361
+ }
362
+ if (acc.caps)
363
+ out.caps = acc.caps;
364
+ if (acc.runStyle)
365
+ out.runStyle = acc.runStyle;
366
+ if (acc.lang)
367
+ out.lang = acc.lang;
368
+ return out;
369
+ }
370
+ /** Propriétés de paragraphe figées, sans le niveau de plan (converti par `styles.ts`). */
371
+ export function finalizeParagraph(acc, runDefaults) {
372
+ const out = {};
373
+ if (acc.align)
374
+ out.align = acc.align;
375
+ if (acc.lineHeightPt !== undefined)
376
+ out.lineHeightPt = acc.lineHeightPt;
377
+ else if (acc.lineHeight !== undefined)
378
+ out.lineHeight = acc.lineHeight;
379
+ if (acc.spacingBeforePt !== undefined)
380
+ out.spacingBeforePt = acc.spacingBeforePt;
381
+ if (acc.spacingAfterPt !== undefined)
382
+ out.spacingAfterPt = acc.spacingAfterPt;
383
+ if (acc.indentLeftPt !== undefined)
384
+ out.indentLeftPt = acc.indentLeftPt;
385
+ if (acc.indentRightPt !== undefined)
386
+ out.indentRightPt = acc.indentRightPt;
387
+ if (acc.indentFirstLinePt !== undefined)
388
+ out.indentFirstLinePt = acc.indentFirstLinePt;
389
+ const borders = orderedBorders(acc.borders);
390
+ if (borders.length > 0)
391
+ out.borders = borders;
392
+ if (acc.shading)
393
+ out.shading = acc.shading;
394
+ if (acc.keepWithNext)
395
+ out.keepWithNext = true;
396
+ if (acc.pageBreakBefore)
397
+ out.pageBreakBefore = true;
398
+ if (acc.numbering)
399
+ out.numbering = acc.numbering;
400
+ return { ...out, runDefaults };
401
+ }
402
+ //# sourceMappingURL=properties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"properties.js","sourceRoot":"","sources":["../../../src/docx/reader/properties.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { ConverterContext, ResolvedParagraphProps, ResolvedRunProps } from './types';
2
+ /**
3
+ * Contenu inline d'un paragraphe Word → HTML stylé. Parcourt les enfants du `w:p` dans
4
+ * l'ordre (runs, hyperliens, champs simples et complexes, contrôles inline, révisions),
5
+ * résout chaque run par `ctx.styles.run`, et fusionne les runs voisins aux mêmes
6
+ * propriétés rendues en un seul groupe de balises.
7
+ *
8
+ * Décisions figées :
9
+ * - les propriétés égales aux `docDefaults` du document ne sont pas écrites ; tout ce qui
10
+ * en diffère (y compris hérité du style de paragraphe) est posé sur chaque run, jamais
11
+ * sur le bloc ;
12
+ * - `w:tab` → espace cadratin U+2003 (un seul caractère, non replié par HTML, réversible
13
+ * à l'export) ;
14
+ * - `w:br w:type="page"` → marqueur `PAGE_BREAK` dans le flux, que `paragraphs.ts` coupe
15
+ * en blocs frères ; dans un lien ou un champ, il dégénère en `<br>`.
16
+ */
17
+ /** Marqueur de saut de page inséré dans le flux inline, extrait par `paragraphs.ts`. */
18
+ export declare const PAGE_BREAK = "<hr data-page-break>";
19
+ /** Balises ouvrantes et fermantes d'un run, dans l'ordre fixe du contrat. */
20
+ export interface RunTags {
21
+ readonly open: string;
22
+ readonly close: string;
23
+ }
24
+ /**
25
+ * Balises d'un run : `<strong><em><u><s><sup|sub><span style data-docx-run-style>`. Les
26
+ * marques booléennes sont écrites dès qu'elles sont vraies ; les propriétés valuées
27
+ * seulement si elles diffèrent de `baseline` (les `docDefaults`).
28
+ */
29
+ export declare function renderRunTags(props: ResolvedRunProps, baseline: ResolvedRunProps): RunTags;
30
+ /**
31
+ * Cible d'une instruction `HYPERLINK` : la première chaîne (citée ou non) qui n'est pas
32
+ * l'argument d'un commutateur est l'URL ; `\l "x"` ajoute le fragment `#x` (seul, c'est
33
+ * un signet interne `#x`). `HYPERLINK "https://x.io/p" \l "sec2"` → `https://x.io/p#sec2`.
34
+ * `null` pour un autre champ ou une instruction sans cible.
35
+ */
36
+ export declare function hyperlinkTarget(instr: string): string | null;
37
+ /**
38
+ * `href` sûr hors de l'éditeur : `http`, `https`, `mailto`, `tel`, les ancres `#…` et les
39
+ * URL relatives passent ; tout autre protocole (`javascript:`, `data:`, `vbscript:`…)
40
+ * retire le lien, le texte est conservé. Le protocole est lu après suppression des
41
+ * caractères de contrôle et espaces, comme un navigateur le ferait (`java\tscript:`).
42
+ */
43
+ export declare function safeHref(href: string | null): string | null;
44
+ /**
45
+ * Convertit le contenu inline d'un paragraphe. `props` est le paragraphe résolu, base
46
+ * des runs (`runDefaults`).
47
+ */
48
+ export declare function convertRuns(paragraph: Element, ctx: ConverterContext, props: ResolvedParagraphProps): Promise<string>;
49
+ //# sourceMappingURL=runs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../../src/docx/reader/runs.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AA2C1F;;;;;;;;;;;;;;GAcG;AAEH,wFAAwF;AACxF,eAAO,MAAM,UAAU,yBAAyB,CAAC;AAMjD,6EAA6E;AAC7E,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAMD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAqC1F;AAsDD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0B5D;AAKD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAS3D;AAiCD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,SAAS,EAAE,OAAO,EAClB,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,MAAM,CAAC,CA6LjB"}