@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.
- package/README.md +204 -82
- package/dist/docx/compare/align.d.ts +24 -0
- package/dist/docx/compare/align.d.ts.map +1 -0
- package/dist/docx/compare/align.js +217 -0
- package/dist/docx/compare/align.js.map +1 -0
- package/dist/docx/compare/compare-blocks.d.ts +29 -0
- package/dist/docx/compare/compare-blocks.d.ts.map +1 -0
- package/dist/docx/compare/compare-blocks.js +234 -0
- package/dist/docx/compare/compare-blocks.js.map +1 -0
- package/dist/docx/compare/compare-context.d.ts +25 -0
- package/dist/docx/compare/compare-context.d.ts.map +1 -0
- package/dist/docx/compare/compare-context.js +31 -0
- package/dist/docx/compare/compare-context.js.map +1 -0
- package/dist/docx/compare/compare-docx.d.ts +4 -0
- package/dist/docx/compare/compare-docx.d.ts.map +1 -0
- package/dist/docx/compare/compare-docx.js +173 -0
- package/dist/docx/compare/compare-docx.js.map +1 -0
- package/dist/docx/compare/compare-tables.d.ts +13 -0
- package/dist/docx/compare/compare-tables.d.ts.map +1 -0
- package/dist/docx/compare/compare-tables.js +47 -0
- package/dist/docx/compare/compare-tables.js.map +1 -0
- package/dist/docx/compare/model-borders.d.ts +27 -0
- package/dist/docx/compare/model-borders.d.ts.map +1 -0
- package/dist/docx/compare/model-borders.js +41 -0
- package/dist/docx/compare/model-borders.js.map +1 -0
- package/dist/docx/compare/model-paragraph.d.ts +25 -0
- package/dist/docx/compare/model-paragraph.d.ts.map +1 -0
- package/dist/docx/compare/model-paragraph.js +309 -0
- package/dist/docx/compare/model-paragraph.js.map +1 -0
- package/dist/docx/compare/model-sections.d.ts +11 -0
- package/dist/docx/compare/model-sections.d.ts.map +1 -0
- package/dist/docx/compare/model-sections.js +97 -0
- package/dist/docx/compare/model-sections.js.map +1 -0
- package/dist/docx/compare/model.d.ts +113 -0
- package/dist/docx/compare/model.d.ts.map +1 -0
- package/dist/docx/compare/model.js +214 -0
- package/dist/docx/compare/model.js.map +1 -0
- package/dist/docx/compare/parts.d.ts +40 -0
- package/dist/docx/compare/parts.d.ts.map +1 -0
- package/dist/docx/compare/parts.js +113 -0
- package/dist/docx/compare/parts.js.map +1 -0
- package/dist/docx/compare/tally.d.ts +23 -0
- package/dist/docx/compare/tally.d.ts.map +1 -0
- package/dist/docx/compare/tally.js +94 -0
- package/dist/docx/compare/tally.js.map +1 -0
- package/dist/docx/compare/types.d.ts +55 -0
- package/dist/docx/compare/types.d.ts.map +1 -0
- package/dist/docx/compare/types.js +2 -0
- package/dist/docx/compare/types.js.map +1 -0
- package/dist/docx/compare/values.d.ts +13 -0
- package/dist/docx/compare/values.d.ts.map +1 -0
- package/dist/docx/compare/values.js +44 -0
- package/dist/docx/compare/values.js.map +1 -0
- package/dist/docx/import-docx.d.ts.map +1 -1
- package/dist/docx/import-docx.js +57 -2
- package/dist/docx/import-docx.js.map +1 -1
- package/dist/docx/preprocess/variables.d.ts.map +1 -1
- package/dist/docx/preprocess/variables.js +2 -2
- package/dist/docx/preprocess/variables.js.map +1 -1
- package/dist/docx/preprocess/xml-utils.d.ts +7 -0
- package/dist/docx/preprocess/xml-utils.d.ts.map +1 -1
- package/dist/docx/preprocess/xml-utils.js +9 -0
- package/dist/docx/preprocess/xml-utils.js.map +1 -1
- package/dist/docx/reader/headers.d.ts +17 -0
- package/dist/docx/reader/headers.d.ts.map +1 -0
- package/dist/docx/reader/headers.js +64 -0
- package/dist/docx/reader/headers.js.map +1 -0
- package/dist/docx/reader/html.d.ts +12 -0
- package/dist/docx/reader/html.d.ts.map +1 -0
- package/dist/docx/reader/html.js +27 -0
- package/dist/docx/reader/html.js.map +1 -0
- package/dist/docx/reader/images.d.ts +27 -0
- package/dist/docx/reader/images.d.ts.map +1 -0
- package/dist/docx/reader/images.js +288 -0
- package/dist/docx/reader/images.js.map +1 -0
- package/dist/docx/reader/index.d.ts +10 -0
- package/dist/docx/reader/index.d.ts.map +1 -0
- package/dist/docx/reader/index.js +177 -0
- package/dist/docx/reader/index.js.map +1 -0
- package/dist/docx/reader/lists.d.ts +44 -0
- package/dist/docx/reader/lists.d.ts.map +1 -0
- package/dist/docx/reader/lists.js +360 -0
- package/dist/docx/reader/lists.js.map +1 -0
- package/dist/docx/reader/lost.d.ts +30 -0
- package/dist/docx/reader/lost.d.ts.map +1 -0
- package/dist/docx/reader/lost.js +215 -0
- package/dist/docx/reader/lost.js.map +1 -0
- package/dist/docx/reader/notes.d.ts +4 -0
- package/dist/docx/reader/notes.d.ts.map +1 -0
- package/dist/docx/reader/notes.js +112 -0
- package/dist/docx/reader/notes.js.map +1 -0
- package/dist/docx/reader/package.d.ts +16 -0
- package/dist/docx/reader/package.d.ts.map +1 -0
- package/dist/docx/reader/package.js +138 -0
- package/dist/docx/reader/package.js.map +1 -0
- package/dist/docx/reader/paragraphs.d.ts +15 -0
- package/dist/docx/reader/paragraphs.d.ts.map +1 -0
- package/dist/docx/reader/paragraphs.js +162 -0
- package/dist/docx/reader/paragraphs.js.map +1 -0
- package/dist/docx/reader/properties.d.ts +90 -0
- package/dist/docx/reader/properties.d.ts.map +1 -0
- package/dist/docx/reader/properties.js +402 -0
- package/dist/docx/reader/properties.js.map +1 -0
- package/dist/docx/reader/runs.d.ts +49 -0
- package/dist/docx/reader/runs.d.ts.map +1 -0
- package/dist/docx/reader/runs.js +442 -0
- package/dist/docx/reader/runs.js.map +1 -0
- package/dist/docx/reader/sections.d.ts +36 -0
- package/dist/docx/reader/sections.d.ts.map +1 -0
- package/dist/docx/reader/sections.js +158 -0
- package/dist/docx/reader/sections.js.map +1 -0
- package/dist/docx/reader/styles.d.ts +24 -0
- package/dist/docx/reader/styles.d.ts.map +1 -0
- package/dist/docx/reader/styles.js +383 -0
- package/dist/docx/reader/styles.js.map +1 -0
- package/dist/docx/reader/tables.d.ts +6 -0
- package/dist/docx/reader/tables.d.ts.map +1 -0
- package/dist/docx/reader/tables.js +175 -0
- package/dist/docx/reader/tables.js.map +1 -0
- package/dist/docx/reader/test-support.d.ts +25 -0
- package/dist/docx/reader/test-support.d.ts.map +1 -0
- package/dist/docx/reader/test-support.js +135 -0
- package/dist/docx/reader/test-support.js.map +1 -0
- package/dist/docx/reader/testing-blocks.d.ts +50 -0
- package/dist/docx/reader/testing-blocks.d.ts.map +1 -0
- package/dist/docx/reader/testing-blocks.js +302 -0
- package/dist/docx/reader/testing-blocks.js.map +1 -0
- package/dist/docx/reader/types.d.ts +181 -0
- package/dist/docx/reader/types.d.ts.map +1 -0
- package/dist/docx/reader/types.js +2 -0
- package/dist/docx/reader/types.js.map +1 -0
- package/dist/docx/reader/units-blocks.d.ts +75 -0
- package/dist/docx/reader/units-blocks.d.ts.map +1 -0
- package/dist/docx/reader/units-blocks.js +254 -0
- package/dist/docx/reader/units-blocks.js.map +1 -0
- package/dist/docx/reader/units.d.ts +72 -0
- package/dist/docx/reader/units.d.ts.map +1 -0
- package/dist/docx/reader/units.js +177 -0
- package/dist/docx/reader/units.js.map +1 -0
- package/dist/docx/types.d.ts +40 -2
- package/dist/docx/types.d.ts.map +1 -1
- package/dist/docx/writer/content-types.d.ts +30 -0
- package/dist/docx/writer/content-types.d.ts.map +1 -0
- package/dist/docx/writer/content-types.js +81 -0
- package/dist/docx/writer/content-types.js.map +1 -0
- package/dist/docx/writer/core-properties.d.ts +16 -0
- package/dist/docx/writer/core-properties.d.ts.map +1 -0
- package/dist/docx/writer/core-properties.js +64 -0
- package/dist/docx/writer/core-properties.js.map +1 -0
- package/dist/docx/writer/footnotes-merge.d.ts +30 -0
- package/dist/docx/writer/footnotes-merge.d.ts.map +1 -0
- package/dist/docx/writer/footnotes-merge.js +71 -0
- package/dist/docx/writer/footnotes-merge.js.map +1 -0
- package/dist/docx/writer/graft.d.ts +41 -0
- package/dist/docx/writer/graft.d.ts.map +1 -0
- package/dist/docx/writer/graft.js +277 -0
- package/dist/docx/writer/graft.js.map +1 -0
- package/dist/docx/writer/header-footer-graft.d.ts +34 -0
- package/dist/docx/writer/header-footer-graft.d.ts.map +1 -0
- package/dist/docx/writer/header-footer-graft.js +155 -0
- package/dist/docx/writer/header-footer-graft.js.map +1 -0
- package/dist/docx/writer/header-footer-variables.d.ts +25 -0
- package/dist/docx/writer/header-footer-variables.d.ts.map +1 -0
- package/dist/docx/writer/header-footer-variables.js +101 -0
- package/dist/docx/writer/header-footer-variables.js.map +1 -0
- package/dist/docx/writer/media.d.ts +32 -0
- package/dist/docx/writer/media.d.ts.map +1 -0
- package/dist/docx/writer/media.js +88 -0
- package/dist/docx/writer/media.js.map +1 -0
- package/dist/docx/writer/numbering-merge.d.ts +37 -0
- package/dist/docx/writer/numbering-merge.d.ts.map +1 -0
- package/dist/docx/writer/numbering-merge.js +140 -0
- package/dist/docx/writer/numbering-merge.js.map +1 -0
- package/dist/docx/writer/relationships.d.ts +63 -0
- package/dist/docx/writer/relationships.d.ts.map +1 -0
- package/dist/docx/writer/relationships.js +127 -0
- package/dist/docx/writer/relationships.js.map +1 -0
- package/dist/docx/writer/settings-merge.d.ts +21 -0
- package/dist/docx/writer/settings-merge.d.ts.map +1 -0
- package/dist/docx/writer/settings-merge.js +165 -0
- package/dist/docx/writer/settings-merge.js.map +1 -0
- package/dist/docx/writer/style-reconcile.d.ts +29 -0
- package/dist/docx/writer/style-reconcile.d.ts.map +1 -0
- package/dist/docx/writer/style-reconcile.js +319 -0
- package/dist/docx/writer/style-reconcile.js.map +1 -0
- package/dist/docx/writer/style-strip.d.ts +33 -0
- package/dist/docx/writer/style-strip.d.ts.map +1 -0
- package/dist/docx/writer/style-strip.js +267 -0
- package/dist/docx/writer/style-strip.js.map +1 -0
- package/dist/docx/writer/styles-merge.d.ts +57 -0
- package/dist/docx/writer/styles-merge.d.ts.map +1 -0
- package/dist/docx/writer/styles-merge.js +184 -0
- package/dist/docx/writer/styles-merge.js.map +1 -0
- package/dist/docx/writer/template.d.ts +48 -0
- package/dist/docx/writer/template.d.ts.map +1 -0
- package/dist/docx/writer/template.js +280 -0
- package/dist/docx/writer/template.js.map +1 -0
- package/dist/docx/writer/testing.d.ts +52 -0
- package/dist/docx/writer/testing.d.ts.map +1 -0
- package/dist/docx/writer/testing.js +318 -0
- package/dist/docx/writer/testing.js.map +1 -0
- package/dist/docx/writer/xml-io.d.ts +90 -0
- package/dist/docx/writer/xml-io.d.ts.map +1 -0
- package/dist/docx/writer/xml-io.js +215 -0
- package/dist/docx/writer/xml-io.js.map +1 -0
- package/dist/export/blocks.d.ts.map +1 -1
- package/dist/export/blocks.js +149 -12
- package/dist/export/blocks.js.map +1 -1
- package/dist/export/context.d.ts +34 -2
- package/dist/export/context.d.ts.map +1 -1
- package/dist/export/context.js +28 -2
- package/dist/export/context.js.map +1 -1
- package/dist/export/css.d.ts +58 -0
- package/dist/export/css.d.ts.map +1 -1
- package/dist/export/css.js +194 -0
- package/dist/export/css.js.map +1 -1
- package/dist/export/dom.d.ts +2 -0
- package/dist/export/dom.d.ts.map +1 -1
- package/dist/export/dom.js +2 -0
- package/dist/export/dom.js.map +1 -1
- package/dist/export/export-docx.d.ts +4 -0
- package/dist/export/export-docx.d.ts.map +1 -1
- package/dist/export/export-docx.js +57 -4
- package/dist/export/export-docx.js.map +1 -1
- package/dist/export/header-footer.d.ts +15 -1
- package/dist/export/header-footer.d.ts.map +1 -1
- package/dist/export/header-footer.js +37 -0
- package/dist/export/header-footer.js.map +1 -1
- package/dist/export/html-to-docx.d.ts +20 -2
- package/dist/export/html-to-docx.d.ts.map +1 -1
- package/dist/export/html-to-docx.js +40 -14
- package/dist/export/html-to-docx.js.map +1 -1
- package/dist/export/inline.d.ts +25 -3
- package/dist/export/inline.d.ts.map +1 -1
- package/dist/export/inline.js +91 -34
- package/dist/export/inline.js.map +1 -1
- package/dist/export/styles.d.ts +51 -7
- package/dist/export/styles.d.ts.map +1 -1
- package/dist/export/styles.js +121 -16
- package/dist/export/styles.js.map +1 -1
- package/dist/export/tables.d.ts.map +1 -1
- package/dist/export/tables.js +140 -12
- package/dist/export/tables.js.map +1 -1
- package/dist/export/types.d.ts +44 -5
- package/dist/export/types.d.ts.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { childNamed } from '../preprocess/xml-utils';
|
|
2
|
+
import { removeWordAttr, wordAttr } from './xml-io';
|
|
3
|
+
/** Clés de paragraphe portées en propriété directe par un `w:pPr`. */
|
|
4
|
+
export function directParagraphKeys(pPr) {
|
|
5
|
+
const keys = new Set();
|
|
6
|
+
for (const child of Array.from(pPr.children)) {
|
|
7
|
+
switch (child.localName) {
|
|
8
|
+
case 'jc':
|
|
9
|
+
keys.add('align');
|
|
10
|
+
break;
|
|
11
|
+
case 'spacing':
|
|
12
|
+
if (wordAttr(child, 'before'))
|
|
13
|
+
keys.add('before');
|
|
14
|
+
if (wordAttr(child, 'after'))
|
|
15
|
+
keys.add('after');
|
|
16
|
+
if (wordAttr(child, 'line'))
|
|
17
|
+
keys.add('line');
|
|
18
|
+
break;
|
|
19
|
+
case 'ind':
|
|
20
|
+
if (wordAttr(child, 'left') || wordAttr(child, 'start'))
|
|
21
|
+
keys.add('left');
|
|
22
|
+
if (wordAttr(child, 'right') || wordAttr(child, 'end'))
|
|
23
|
+
keys.add('right');
|
|
24
|
+
if (wordAttr(child, 'hanging') || wordAttr(child, 'firstLine'))
|
|
25
|
+
keys.add('first');
|
|
26
|
+
break;
|
|
27
|
+
case 'pBdr':
|
|
28
|
+
keys.add('borders');
|
|
29
|
+
break;
|
|
30
|
+
case 'shd':
|
|
31
|
+
keys.add('shading');
|
|
32
|
+
break;
|
|
33
|
+
case 'keepNext':
|
|
34
|
+
keys.add('keepNext');
|
|
35
|
+
break;
|
|
36
|
+
case 'pageBreakBefore':
|
|
37
|
+
keys.add('pageBreakBefore');
|
|
38
|
+
break;
|
|
39
|
+
default:
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return keys;
|
|
44
|
+
}
|
|
45
|
+
/** Clés de run portées en propriété directe par un `w:rPr`. */
|
|
46
|
+
export function directRunKeys(rPr) {
|
|
47
|
+
const keys = new Set();
|
|
48
|
+
for (const child of Array.from(rPr.children)) {
|
|
49
|
+
switch (child.localName) {
|
|
50
|
+
case 'rFonts':
|
|
51
|
+
keys.add('fontFamily');
|
|
52
|
+
break;
|
|
53
|
+
case 'sz':
|
|
54
|
+
keys.add('fontSizePt');
|
|
55
|
+
break;
|
|
56
|
+
case 'b':
|
|
57
|
+
keys.add('bold');
|
|
58
|
+
break;
|
|
59
|
+
case 'i':
|
|
60
|
+
keys.add('italic');
|
|
61
|
+
break;
|
|
62
|
+
case 'u':
|
|
63
|
+
keys.add('underline');
|
|
64
|
+
break;
|
|
65
|
+
case 'strike':
|
|
66
|
+
case 'dstrike':
|
|
67
|
+
keys.add('strike');
|
|
68
|
+
break;
|
|
69
|
+
case 'color':
|
|
70
|
+
keys.add('color');
|
|
71
|
+
break;
|
|
72
|
+
case 'highlight':
|
|
73
|
+
case 'shd':
|
|
74
|
+
keys.add('highlight');
|
|
75
|
+
break;
|
|
76
|
+
case 'vertAlign':
|
|
77
|
+
keys.add('superscript');
|
|
78
|
+
break;
|
|
79
|
+
case 'spacing':
|
|
80
|
+
keys.add('letterSpacing');
|
|
81
|
+
break;
|
|
82
|
+
case 'caps':
|
|
83
|
+
case 'smallCaps':
|
|
84
|
+
keys.add('caps');
|
|
85
|
+
break;
|
|
86
|
+
default:
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return keys;
|
|
91
|
+
}
|
|
92
|
+
/** Clés de run qu'un style de caractère pose lui-même (sa résolution sur les `docDefaults` en diffère). */
|
|
93
|
+
export function ownedRunKeys(owned, defaults) {
|
|
94
|
+
const keys = [];
|
|
95
|
+
if (owned.fontFamily !== defaults.fontFamily)
|
|
96
|
+
keys.push('fontFamily');
|
|
97
|
+
if (owned.fontSizePt !== defaults.fontSizePt)
|
|
98
|
+
keys.push('fontSizePt');
|
|
99
|
+
if (Boolean(owned.bold) !== Boolean(defaults.bold))
|
|
100
|
+
keys.push('bold');
|
|
101
|
+
if (Boolean(owned.italic) !== Boolean(defaults.italic))
|
|
102
|
+
keys.push('italic');
|
|
103
|
+
if ((owned.underline ?? null) !== (defaults.underline ?? null))
|
|
104
|
+
keys.push('underline');
|
|
105
|
+
if ((owned.strike ?? null) !== (defaults.strike ?? null))
|
|
106
|
+
keys.push('strike');
|
|
107
|
+
if (owned.color !== defaults.color)
|
|
108
|
+
keys.push('color');
|
|
109
|
+
if (owned.highlight !== defaults.highlight)
|
|
110
|
+
keys.push('highlight');
|
|
111
|
+
if (Boolean(owned.superscript) !== Boolean(defaults.superscript) ||
|
|
112
|
+
Boolean(owned.subscript) !== Boolean(defaults.subscript)) {
|
|
113
|
+
keys.push('superscript');
|
|
114
|
+
}
|
|
115
|
+
if (owned.letterSpacingPt !== defaults.letterSpacingPt)
|
|
116
|
+
keys.push('letterSpacing');
|
|
117
|
+
if (owned.caps !== defaults.caps)
|
|
118
|
+
keys.push('caps');
|
|
119
|
+
return keys;
|
|
120
|
+
}
|
|
121
|
+
/** Copie d'un conteneur de propriétés réduite à sa référence de style (`w:pStyle` / `w:rStyle`). */
|
|
122
|
+
export function styleOnly(properties, styleElement) {
|
|
123
|
+
const style = childNamed(properties, styleElement);
|
|
124
|
+
if (!style)
|
|
125
|
+
return null;
|
|
126
|
+
const clone = properties.cloneNode(false);
|
|
127
|
+
clone.appendChild(style.cloneNode(true));
|
|
128
|
+
return clone;
|
|
129
|
+
}
|
|
130
|
+
/** Égalité structurelle de deux jeux de bordures du contrat. */
|
|
131
|
+
export function sameBorders(a, b) {
|
|
132
|
+
return JSON.stringify(a ?? []) === JSON.stringify(b ?? []);
|
|
133
|
+
}
|
|
134
|
+
/** Retire les attributs `names` ; rend vrai s'il ne reste aucun attribut `w:`. */
|
|
135
|
+
function dropAttributes(element, names) {
|
|
136
|
+
for (const name of names)
|
|
137
|
+
removeWordAttr(element, name);
|
|
138
|
+
return element.attributes.length === 0;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Propriétés de paragraphe (`w:pPr`) : chaque élément dont la valeur résolue avec lui
|
|
142
|
+
* (`full`) égale la valeur résolue sans lui (`base`) est retiré. `w:spacing` et `w:ind`
|
|
143
|
+
* sont traités attribut par attribut.
|
|
144
|
+
*/
|
|
145
|
+
export function stripParagraphProperties(pPr, full, base) {
|
|
146
|
+
for (const child of Array.from(pPr.children)) {
|
|
147
|
+
switch (child.localName) {
|
|
148
|
+
case 'jc':
|
|
149
|
+
if (full.align === base.align)
|
|
150
|
+
child.remove();
|
|
151
|
+
break;
|
|
152
|
+
case 'spacing': {
|
|
153
|
+
const drop = [];
|
|
154
|
+
if (wordAttr(child, 'before') && full.spacingBeforePt === base.spacingBeforePt) {
|
|
155
|
+
drop.push('before');
|
|
156
|
+
}
|
|
157
|
+
if (wordAttr(child, 'after') && full.spacingAfterPt === base.spacingAfterPt) {
|
|
158
|
+
drop.push('after');
|
|
159
|
+
}
|
|
160
|
+
if (wordAttr(child, 'line') &&
|
|
161
|
+
full.lineHeight === base.lineHeight &&
|
|
162
|
+
full.lineHeightPt === base.lineHeightPt) {
|
|
163
|
+
drop.push('line', 'lineRule');
|
|
164
|
+
}
|
|
165
|
+
if (dropAttributes(child, drop))
|
|
166
|
+
child.remove();
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
case 'ind': {
|
|
170
|
+
const drop = [];
|
|
171
|
+
if ((wordAttr(child, 'left') || wordAttr(child, 'start')) &&
|
|
172
|
+
full.indentLeftPt === base.indentLeftPt) {
|
|
173
|
+
drop.push('left', 'start');
|
|
174
|
+
}
|
|
175
|
+
if ((wordAttr(child, 'right') || wordAttr(child, 'end')) &&
|
|
176
|
+
full.indentRightPt === base.indentRightPt) {
|
|
177
|
+
drop.push('right', 'end');
|
|
178
|
+
}
|
|
179
|
+
if ((wordAttr(child, 'hanging') || wordAttr(child, 'firstLine')) &&
|
|
180
|
+
full.indentFirstLinePt === base.indentFirstLinePt) {
|
|
181
|
+
drop.push('hanging', 'firstLine');
|
|
182
|
+
}
|
|
183
|
+
if (dropAttributes(child, drop))
|
|
184
|
+
child.remove();
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
case 'pBdr':
|
|
188
|
+
if (sameBorders(full.borders, base.borders))
|
|
189
|
+
child.remove();
|
|
190
|
+
break;
|
|
191
|
+
case 'shd':
|
|
192
|
+
if (full.shading === base.shading)
|
|
193
|
+
child.remove();
|
|
194
|
+
break;
|
|
195
|
+
case 'keepNext':
|
|
196
|
+
if (Boolean(full.keepWithNext) === Boolean(base.keepWithNext))
|
|
197
|
+
child.remove();
|
|
198
|
+
break;
|
|
199
|
+
case 'pageBreakBefore':
|
|
200
|
+
if (Boolean(full.pageBreakBefore) === Boolean(base.pageBreakBefore))
|
|
201
|
+
child.remove();
|
|
202
|
+
break;
|
|
203
|
+
default:
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/** Propriétés de run (`w:rPr`) : même principe, élément par élément. */
|
|
209
|
+
export function stripRunProperties(rPr, full, base) {
|
|
210
|
+
const hasHighlight = childNamed(rPr, 'highlight') !== null;
|
|
211
|
+
for (const child of Array.from(rPr.children)) {
|
|
212
|
+
let redundant = false;
|
|
213
|
+
switch (child.localName) {
|
|
214
|
+
case 'rFonts':
|
|
215
|
+
redundant = full.fontFamily === base.fontFamily;
|
|
216
|
+
break;
|
|
217
|
+
case 'b':
|
|
218
|
+
case 'bCs':
|
|
219
|
+
redundant = Boolean(full.bold) === Boolean(base.bold);
|
|
220
|
+
break;
|
|
221
|
+
case 'i':
|
|
222
|
+
case 'iCs':
|
|
223
|
+
redundant = Boolean(full.italic) === Boolean(base.italic);
|
|
224
|
+
break;
|
|
225
|
+
case 'u':
|
|
226
|
+
redundant = (full.underline ?? null) === (base.underline ?? null);
|
|
227
|
+
break;
|
|
228
|
+
case 'strike':
|
|
229
|
+
case 'dstrike':
|
|
230
|
+
redundant = (full.strike ?? null) === (base.strike ?? null);
|
|
231
|
+
break;
|
|
232
|
+
case 'color':
|
|
233
|
+
redundant = full.color === base.color;
|
|
234
|
+
break;
|
|
235
|
+
case 'sz':
|
|
236
|
+
case 'szCs':
|
|
237
|
+
redundant = full.fontSizePt === base.fontSizePt;
|
|
238
|
+
break;
|
|
239
|
+
case 'highlight':
|
|
240
|
+
redundant = full.highlight === base.highlight;
|
|
241
|
+
break;
|
|
242
|
+
case 'shd':
|
|
243
|
+
redundant = !hasHighlight && full.highlight === base.highlight;
|
|
244
|
+
break;
|
|
245
|
+
case 'vertAlign':
|
|
246
|
+
redundant =
|
|
247
|
+
Boolean(full.superscript) === Boolean(base.superscript) &&
|
|
248
|
+
Boolean(full.subscript) === Boolean(base.subscript);
|
|
249
|
+
break;
|
|
250
|
+
case 'spacing':
|
|
251
|
+
redundant = full.letterSpacingPt === base.letterSpacingPt;
|
|
252
|
+
break;
|
|
253
|
+
case 'caps':
|
|
254
|
+
case 'smallCaps':
|
|
255
|
+
redundant = full.caps === base.caps;
|
|
256
|
+
break;
|
|
257
|
+
case 'lang':
|
|
258
|
+
redundant = full.lang === base.lang;
|
|
259
|
+
break;
|
|
260
|
+
default:
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
263
|
+
if (redundant)
|
|
264
|
+
child.remove();
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=style-strip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-strip.js","sourceRoot":"","sources":["../../../src/docx/writer/style-strip.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { DocxExportWarning } from '../../export/types';
|
|
2
|
+
import type { DocxStyleResolver } from '../reader/styles';
|
|
3
|
+
import type { ResolvedParagraphProps } from '../reader/types';
|
|
4
|
+
import { type PartStore } from './xml-io';
|
|
5
|
+
/**
|
|
6
|
+
* Styles du corps greffé. Un style référencé par le corps (`w:pStyle`, `w:rStyle`,
|
|
7
|
+
* `w:tblStyle`) est **réutilisé** s'il existe dans le gabarit, **ajouté** depuis
|
|
8
|
+
* `styles.xml` de l'export neuf sinon (`Quote`, `Code`, `ListParagraph`…), **laissé en
|
|
9
|
+
* place** s'il s'agit d'un style intégré de Word (`TOC1`, `Hyperlink`… : Word le
|
|
10
|
+
* matérialise depuis ses styles latents), et retiré avec avertissement
|
|
11
|
+
* `template-style-missing` s'il n'existe nulle part ou si son type (paragraphe,
|
|
12
|
+
* caractère, tableau) n'est pas celui de la référence. Les styles du gabarit ne sont
|
|
13
|
+
* jamais modifiés.
|
|
14
|
+
*
|
|
15
|
+
* Le retrait des propriétés directes redondantes (`style-strip.ts`) et la réécriture de
|
|
16
|
+
* celles qui manquent (`style-reconcile.ts`) sont orchestrés par `stripParagraph`.
|
|
17
|
+
*/
|
|
18
|
+
/** Type OOXML d'un style, attendu par la référence qui le porte. */
|
|
19
|
+
export type StyleType = 'paragraph' | 'character' | 'table' | 'numbering';
|
|
20
|
+
export interface StyleMergerInput {
|
|
21
|
+
readonly template: PartStore;
|
|
22
|
+
readonly generated: PartStore;
|
|
23
|
+
/** Chemin de `styles.xml` du gabarit (relation `/styles`). */
|
|
24
|
+
readonly templatePath: string;
|
|
25
|
+
readonly resolver: DocxStyleResolver;
|
|
26
|
+
readonly warnings: DocxExportWarning[];
|
|
27
|
+
}
|
|
28
|
+
/** Issue d'`ensure` : où le style a été trouvé, et l'identifiant à écrire dans le corps. */
|
|
29
|
+
export interface EnsuredStyle {
|
|
30
|
+
/**
|
|
31
|
+
* `template` : défini dans le gabarit ; `renamed` : le gabarit définit un style de même
|
|
32
|
+
* nom sous un autre identifiant (Word localise les identifiants : `Lienhypertexte` pour
|
|
33
|
+
* « Hyperlink ») ; `added` : copié depuis l'export ; `builtin` : style intégré de Word,
|
|
34
|
+
* défini nulle part mais laissé en place (Word le matérialise à l'ouverture) ;
|
|
35
|
+
* `missing` : introuvable ou de mauvais type.
|
|
36
|
+
*/
|
|
37
|
+
readonly status: 'template' | 'renamed' | 'added' | 'builtin' | 'missing';
|
|
38
|
+
readonly id: string;
|
|
39
|
+
}
|
|
40
|
+
export interface StyleMerger {
|
|
41
|
+
/** Identifiants définis dans le gabarit (styles ajoutés compris). */
|
|
42
|
+
readonly ids: ReadonlySet<string>;
|
|
43
|
+
/**
|
|
44
|
+
* Garantit la définition d'un style et rend l'identifiant à écrire (voir `EnsuredStyle`).
|
|
45
|
+
* `expected` est le type qu'impose la référence (`w:pStyle` → `paragraph`…) : un style
|
|
46
|
+
* d'un autre type vaut `missing`.
|
|
47
|
+
*/
|
|
48
|
+
ensure(styleId: string, expected?: StyleType): Promise<EnsuredStyle>;
|
|
49
|
+
/**
|
|
50
|
+
* Retire des `w:pPr` et `w:rPr` d'un paragraphe les propriétés directes égales à ce que
|
|
51
|
+
* ses styles (et les défauts du document) donnent déjà. Rend le paragraphe résolu.
|
|
52
|
+
*/
|
|
53
|
+
stripParagraph(paragraph: Element): ResolvedParagraphProps;
|
|
54
|
+
}
|
|
55
|
+
/** Crée le fusionneur de styles du gabarit. */
|
|
56
|
+
export declare function createStyleMerger(input: StyleMergerInput): Promise<StyleMerger>;
|
|
57
|
+
//# sourceMappingURL=styles-merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles-merge.d.ts","sourceRoot":"","sources":["../../../src/docx/writer/styles-merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAY9D,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAEpD;;;;;;;;;;;;GAYG;AAEH,oEAAoE;AACpE,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,CAAC;AAE1E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CACxC;AAED,4FAA4F;AAC5F,MAAM,WAAW,YAAY;IAC3B;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1E,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACrE;;;OAGG;IACH,cAAc,CAAC,SAAS,EAAE,OAAO,GAAG,sBAAsB,CAAC;CAC5D;AAmDD,+CAA+C;AAC/C,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAmIrF"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { allNamed, childNamed, childrenNamed } from '../preprocess/xml-utils';
|
|
2
|
+
import { reconcileParagraph, reconcileRun } from './style-reconcile';
|
|
3
|
+
import { directParagraphKeys, directRunKeys, ownedRunKeys, stripParagraphProperties, stripRunProperties, styleOnly, } from './style-strip';
|
|
4
|
+
import { wordAttr } from './xml-io';
|
|
5
|
+
/** Références d'un `w:style` vers d'autres styles, à garantir avec lui. */
|
|
6
|
+
const STYLE_LINKS = ['basedOn', 'next', 'link'];
|
|
7
|
+
/**
|
|
8
|
+
* Styles intégrés de Word, avec leur type : référencés sans être définis, Word les
|
|
9
|
+
* matérialise depuis ses styles latents (export neuf : `styles.xml` ne définit pas
|
|
10
|
+
* `TOC1` non plus). Ils restent donc en place sans avertissement.
|
|
11
|
+
*/
|
|
12
|
+
const BUILT_IN_STYLES = new Map([
|
|
13
|
+
...Array.from({ length: 9 }, (_, index) => [
|
|
14
|
+
`TOC${String(index + 1)}`,
|
|
15
|
+
'paragraph',
|
|
16
|
+
]),
|
|
17
|
+
...Array.from({ length: 9 }, (_, index) => [
|
|
18
|
+
`Heading${String(index + 1)}`,
|
|
19
|
+
'paragraph',
|
|
20
|
+
]),
|
|
21
|
+
['TOCHeading', 'paragraph'],
|
|
22
|
+
['Hyperlink', 'character'],
|
|
23
|
+
['FootnoteText', 'paragraph'],
|
|
24
|
+
['FootnoteReference', 'character'],
|
|
25
|
+
['EndnoteText', 'paragraph'],
|
|
26
|
+
['EndnoteReference', 'character'],
|
|
27
|
+
['ListParagraph', 'paragraph'],
|
|
28
|
+
['TableGrid', 'table'],
|
|
29
|
+
['Header', 'paragraph'],
|
|
30
|
+
['Footer', 'paragraph'],
|
|
31
|
+
['Caption', 'paragraph'],
|
|
32
|
+
['Title', 'paragraph'],
|
|
33
|
+
['Subtitle', 'paragraph'],
|
|
34
|
+
['Quote', 'paragraph'],
|
|
35
|
+
['IntenseQuote', 'paragraph'],
|
|
36
|
+
['NoSpacing', 'paragraph'],
|
|
37
|
+
]);
|
|
38
|
+
/** Libellé français d'un type de style, pour les avertissements. */
|
|
39
|
+
const TYPE_LABELS = {
|
|
40
|
+
paragraph: 'paragraphe',
|
|
41
|
+
character: 'caractère',
|
|
42
|
+
table: 'tableau',
|
|
43
|
+
numbering: 'numérotation',
|
|
44
|
+
};
|
|
45
|
+
/** `w:type` d'un `w:style`, `paragraph` quand il est absent (défaut du schéma). */
|
|
46
|
+
function styleTypeOf(style) {
|
|
47
|
+
const type = wordAttr(style, 'type');
|
|
48
|
+
return type === 'character' || type === 'table' || type === 'numbering' ? type : 'paragraph';
|
|
49
|
+
}
|
|
50
|
+
/** Crée le fusionneur de styles du gabarit. */
|
|
51
|
+
export async function createStyleMerger(input) {
|
|
52
|
+
const templateDoc = await input.template.dom(input.templatePath);
|
|
53
|
+
const generatedDoc = await input.generated.dom('word/styles.xml');
|
|
54
|
+
const ids = new Set();
|
|
55
|
+
/** Type de chaque style défini dans le gabarit (ajouts compris). */
|
|
56
|
+
const types = new Map();
|
|
57
|
+
/** Nom (`w:name`, minuscules) et type → identifiant du gabarit : Word localise les identifiants, pas les noms. */
|
|
58
|
+
const templateByName = new Map();
|
|
59
|
+
const generatedStyles = new Map();
|
|
60
|
+
let defaultParagraphStyle = '';
|
|
61
|
+
const nameKey = (style) => {
|
|
62
|
+
const name = childNamed(style, 'name');
|
|
63
|
+
return `${styleTypeOf(style)}:${(name ? wordAttr(name, 'val') : '').trim().toLowerCase()}`;
|
|
64
|
+
};
|
|
65
|
+
if (templateDoc) {
|
|
66
|
+
for (const style of childrenNamed(templateDoc.documentElement, 'style')) {
|
|
67
|
+
const id = wordAttr(style, 'styleId');
|
|
68
|
+
if (!id)
|
|
69
|
+
continue;
|
|
70
|
+
ids.add(id);
|
|
71
|
+
types.set(id, styleTypeOf(style));
|
|
72
|
+
const key = nameKey(style);
|
|
73
|
+
if (!key.endsWith(':') && !templateByName.has(key))
|
|
74
|
+
templateByName.set(key, id);
|
|
75
|
+
const isDefault = wordAttr(style, 'default') === '1' || wordAttr(style, 'default') === 'true';
|
|
76
|
+
if (isDefault && styleTypeOf(style) === 'paragraph' && !defaultParagraphStyle) {
|
|
77
|
+
defaultParagraphStyle = id;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (generatedDoc) {
|
|
82
|
+
for (const style of childrenNamed(generatedDoc.documentElement, 'style')) {
|
|
83
|
+
const id = wordAttr(style, 'styleId');
|
|
84
|
+
if (id)
|
|
85
|
+
generatedStyles.set(id, style);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const warned = new Set();
|
|
89
|
+
const renamed = new Map();
|
|
90
|
+
const missing = (styleId, message) => {
|
|
91
|
+
if (!warned.has(message)) {
|
|
92
|
+
warned.add(message);
|
|
93
|
+
input.warnings.push({ code: 'template-style-missing', message });
|
|
94
|
+
}
|
|
95
|
+
return { status: 'missing', id: styleId };
|
|
96
|
+
};
|
|
97
|
+
const mismatch = (styleId, actual, expected) => missing(styleId, `Style « ${styleId} » de ${TYPE_LABELS[actual]} référencé comme style de ${TYPE_LABELS[expected]} : propriétés directes seules`);
|
|
98
|
+
const ensure = async (styleId, expected) => {
|
|
99
|
+
const templateType = types.get(styleId);
|
|
100
|
+
if (templateType !== undefined) {
|
|
101
|
+
if (expected && templateType !== expected)
|
|
102
|
+
return mismatch(styleId, templateType, expected);
|
|
103
|
+
return { status: 'template', id: styleId };
|
|
104
|
+
}
|
|
105
|
+
const known = renamed.get(styleId);
|
|
106
|
+
if (known !== undefined) {
|
|
107
|
+
const knownType = types.get(known);
|
|
108
|
+
if (expected && knownType !== undefined && knownType !== expected) {
|
|
109
|
+
return mismatch(styleId, knownType, expected);
|
|
110
|
+
}
|
|
111
|
+
return { status: 'renamed', id: known };
|
|
112
|
+
}
|
|
113
|
+
const generated = generatedStyles.get(styleId);
|
|
114
|
+
if (!generated || !templateDoc) {
|
|
115
|
+
const builtIn = BUILT_IN_STYLES.get(styleId);
|
|
116
|
+
if (builtIn !== undefined) {
|
|
117
|
+
if (expected && builtIn !== expected)
|
|
118
|
+
return mismatch(styleId, builtIn, expected);
|
|
119
|
+
return { status: 'builtin', id: styleId };
|
|
120
|
+
}
|
|
121
|
+
return missing(styleId, `Style « ${styleId} » absent du gabarit et de l'export : propriétés directes seules`);
|
|
122
|
+
}
|
|
123
|
+
const generatedType = styleTypeOf(generated);
|
|
124
|
+
if (expected && generatedType !== expected)
|
|
125
|
+
return mismatch(styleId, generatedType, expected);
|
|
126
|
+
const sameName = templateByName.get(nameKey(generated));
|
|
127
|
+
if (sameName !== undefined) {
|
|
128
|
+
renamed.set(styleId, sameName);
|
|
129
|
+
return { status: 'renamed', id: sameName };
|
|
130
|
+
}
|
|
131
|
+
ids.add(styleId);
|
|
132
|
+
types.set(styleId, generatedType);
|
|
133
|
+
templateDoc.documentElement.appendChild(templateDoc.importNode(generated, true));
|
|
134
|
+
await input.template.markChanged(input.templatePath);
|
|
135
|
+
// Un style copié peut en référencer un autre (`basedOn="Normal"`, `link`) : on le suit.
|
|
136
|
+
for (const link of STYLE_LINKS) {
|
|
137
|
+
const reference = childNamed(generated, link);
|
|
138
|
+
const target = reference ? wordAttr(reference, 'val') : '';
|
|
139
|
+
if (target && target !== styleId && generatedStyles.has(target))
|
|
140
|
+
await ensure(target);
|
|
141
|
+
}
|
|
142
|
+
return { status: 'added', id: styleId };
|
|
143
|
+
};
|
|
144
|
+
const resolver = input.resolver;
|
|
145
|
+
return {
|
|
146
|
+
ids,
|
|
147
|
+
ensure,
|
|
148
|
+
stripParagraph(paragraph) {
|
|
149
|
+
const defaults = resolver.docDefaults();
|
|
150
|
+
let pPr = childNamed(paragraph, 'pPr');
|
|
151
|
+
// Le style de paragraphe par défaut (`Normal`) s'applique sans `w:pStyle` : Word ne l'écrit pas.
|
|
152
|
+
const pStyle = pPr ? childNamed(pPr, 'pStyle') : null;
|
|
153
|
+
if (pStyle && defaultParagraphStyle && wordAttr(pStyle, 'val') === defaultParagraphStyle) {
|
|
154
|
+
pStyle.remove();
|
|
155
|
+
}
|
|
156
|
+
const full = resolver.paragraph(pPr);
|
|
157
|
+
const base = resolver.paragraph(pPr ? styleOnly(pPr, 'pStyle') : null);
|
|
158
|
+
const direct = pPr ? directParagraphKeys(pPr) : new Set();
|
|
159
|
+
if (pPr)
|
|
160
|
+
stripParagraphProperties(pPr, full, base);
|
|
161
|
+
pPr = reconcileParagraph(paragraph, pPr, direct, base, defaults.paragraph);
|
|
162
|
+
if (pPr && pPr.children.length === 0)
|
|
163
|
+
pPr.remove();
|
|
164
|
+
for (const run of allNamed(paragraph, 'r')) {
|
|
165
|
+
let rPr = childNamed(run, 'rPr');
|
|
166
|
+
const styleOnlyRPr = rPr ? styleOnly(rPr, 'rStyle') : null;
|
|
167
|
+
const baseRun = resolver.run(styleOnlyRPr, full);
|
|
168
|
+
const directRun = rPr ? directRunKeys(rPr) : new Set();
|
|
169
|
+
if (rPr)
|
|
170
|
+
stripRunProperties(rPr, resolver.run(rPr, full), baseRun);
|
|
171
|
+
// Ce que le style de caractère pose lui-même (couleur et souligné d'un lien, police
|
|
172
|
+
// d'un code) est voulu et n'est pas réconcilié ; le reste vient du style de paragraphe.
|
|
173
|
+
const owned = styleOnlyRPr ? resolver.run(styleOnlyRPr, defaults.paragraph) : defaults.run;
|
|
174
|
+
for (const key of ownedRunKeys(owned, defaults.run))
|
|
175
|
+
directRun.add(key);
|
|
176
|
+
rPr = reconcileRun(run, rPr, directRun, baseRun, defaults.run);
|
|
177
|
+
if (rPr && rPr.children.length === 0)
|
|
178
|
+
rPr.remove();
|
|
179
|
+
}
|
|
180
|
+
return full;
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=styles-merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles-merge.js","sourceRoot":"","sources":["../../../src/docx/writer/styles-merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { HeaderFooterSet } from '@aster-editor/core';
|
|
2
|
+
import type { DocxExportWarning } from '../../export/types';
|
|
3
|
+
import { type DocxStyleResolver } from '../reader/styles';
|
|
4
|
+
import type { DocxPackage, NumberingResolver } from '../reader/types';
|
|
5
|
+
import type { DocxInput } from '../types';
|
|
6
|
+
import { type XmlCodec } from './xml-io';
|
|
7
|
+
/**
|
|
8
|
+
* Ouverture du gabarit de `exportDocx({ template })` : octets, paquet en lecture, partie
|
|
9
|
+
* principale déjà parsée (la greffe la réutilise sans la reparser), identifiants de
|
|
10
|
+
* styles définis, largeur utile de la page, et, sur demande, les en-têtes et pieds tels
|
|
11
|
+
* que l'import les lit (pour savoir si `layout.headers` / `footers` en diffère). Un
|
|
12
|
+
* gabarit illisible ne lève jamais : l'export neuf prend le relais avec un avertissement
|
|
13
|
+
* `template-invalid`. Une partie principale de plus de 16 Mo est refusée avant tout parse :
|
|
14
|
+
* un DOM de cette taille épuise la mémoire du processus.
|
|
15
|
+
*/
|
|
16
|
+
/** Taille maximale de la partie principale du gabarit (octets décompressés). */
|
|
17
|
+
export declare const MAX_MAIN_PART_BYTES: number;
|
|
18
|
+
/** Gabarit validé : son tampon, son paquet en lecture, ses styles. */
|
|
19
|
+
export interface TemplateContext {
|
|
20
|
+
readonly buffer: ArrayBuffer;
|
|
21
|
+
readonly pkg: DocxPackage;
|
|
22
|
+
/** Partie principale parsée par le paquet : la greffe la modifie en place. */
|
|
23
|
+
readonly mainDoc: Document;
|
|
24
|
+
/** Déclaration `<?xml …?>` d'origine de la partie principale, réémise à l'identique. */
|
|
25
|
+
readonly mainDeclaration: string;
|
|
26
|
+
/** Chemin de `styles.xml` (relation `/styles`, sinon le nom usuel). */
|
|
27
|
+
readonly stylesPath: string;
|
|
28
|
+
readonly styleIds: ReadonlySet<string>;
|
|
29
|
+
/** Largeur utile de la dernière section en pixels (96 dpi), plafond des images. */
|
|
30
|
+
readonly contentWidthPx: number | undefined;
|
|
31
|
+
/** Numérotations du gabarit (`numbering.xml`), pour le niveau des listes réutilisées. */
|
|
32
|
+
readonly numbering: NumberingResolver;
|
|
33
|
+
/** Résolveur de styles du gabarit, partagé avec la greffe. */
|
|
34
|
+
readonly resolver: DocxStyleResolver;
|
|
35
|
+
/** En-têtes et pieds du gabarit en HTML stylé, lus seulement si `readHeadersFooters` est demandé. */
|
|
36
|
+
readonly headers?: HeaderFooterSet;
|
|
37
|
+
readonly footers?: HeaderFooterSet;
|
|
38
|
+
}
|
|
39
|
+
export interface OpenTemplateOptions {
|
|
40
|
+
/** Lire les en-têtes et pieds du gabarit (lecteur stylé, parties d'en-tête seules), pour les comparer à `layout`. */
|
|
41
|
+
readonly readHeadersFooters?: boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Ouvre et valide le gabarit : archive zip, partie principale sous le plafond de taille
|
|
45
|
+
* et lisible avec un `w:body`. Rend `null` avec un avertissement `template-invalid` sinon.
|
|
46
|
+
*/
|
|
47
|
+
export declare function openTemplate(input: DocxInput, codec: XmlCodec, warnings: DocxExportWarning[], options?: OpenTemplateOptions): Promise<TemplateContext | null>;
|
|
48
|
+
//# sourceMappingURL=template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/docx/writer/template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAS5D,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE/E,OAAO,KAAK,EAGV,WAAW,EACX,iBAAiB,EAElB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAA8B,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAErE;;;;;;;;GAQG;AAEH,gFAAgF;AAChF,eAAO,MAAM,mBAAmB,QAAmB,CAAC;AAEpD,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B,wFAAwF;IACxF,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,uEAAuE;IACvE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,mFAAmF;IACnF,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,yFAAyF;IACzF,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,qGAAqG;IACrG,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;CACpC;AAkED,MAAM,WAAW,mBAAmB;IAClC,qHAAqH;IACrH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CACvC;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAkEjC"}
|