@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,360 @@
|
|
|
1
|
+
import { childNamed, childrenNamed, wordAttribute } from '../preprocess/xml-utils';
|
|
2
|
+
import { escapeAttr } from './html';
|
|
3
|
+
import { numericAttribute, twipsToPt } from './units-blocks';
|
|
4
|
+
/**
|
|
5
|
+
* Listes : résolution de `numbering.xml` (`w:abstractNum` → niveaux, `w:num` →
|
|
6
|
+
* `abstractNumId` + `w:lvlOverride`) et regroupement des paragraphes numérotés en
|
|
7
|
+
* `<ol type start data-docx-num-id>` / `<ul data-bullet data-docx-num-id>` imbriqués
|
|
8
|
+
* selon le niveau, chaque `<li>` contenant le `<p>` du paragraphe.
|
|
9
|
+
*/
|
|
10
|
+
const FORMATS = new Map([
|
|
11
|
+
['bullet', 'bullet'],
|
|
12
|
+
['decimal', '1'],
|
|
13
|
+
['lowerLetter', 'a'],
|
|
14
|
+
['upperLetter', 'A'],
|
|
15
|
+
['lowerRoman', 'i'],
|
|
16
|
+
['upperRoman', 'I'],
|
|
17
|
+
['none', 'none'],
|
|
18
|
+
]);
|
|
19
|
+
/**
|
|
20
|
+
* Puces des polices symboliques (Symbol, Wingdings) : Word stocke un caractère de la zone
|
|
21
|
+
* privée Unicode, illisible hors de la police. Les plus courantes sont ramenées à leur
|
|
22
|
+
* équivalent, les autres à `•`.
|
|
23
|
+
*/
|
|
24
|
+
const SYMBOL_BULLETS = new Map([
|
|
25
|
+
['', '•'],
|
|
26
|
+
['', '▪'],
|
|
27
|
+
['', '◦'],
|
|
28
|
+
['', '➢'],
|
|
29
|
+
['', '✓'],
|
|
30
|
+
['', '❖'],
|
|
31
|
+
['', '–'],
|
|
32
|
+
['', '■'],
|
|
33
|
+
['', '□'],
|
|
34
|
+
['', '•'],
|
|
35
|
+
['', '●'],
|
|
36
|
+
]);
|
|
37
|
+
const PRIVATE_USE = /[-]/g;
|
|
38
|
+
/** Format de numérotation du contrat ; les formats non mappés (`decimalZero`, `ordinal`…) deviennent `1`. */
|
|
39
|
+
export function listFormatOf(numFmt) {
|
|
40
|
+
return FORMATS.get(numFmt) ?? '1';
|
|
41
|
+
}
|
|
42
|
+
/** Texte de puce lisible : caractères de polices symboliques remplacés. */
|
|
43
|
+
export function normalizeBullet(text) {
|
|
44
|
+
return text.replace(PRIVATE_USE, (char) => SYMBOL_BULLETS.get(char) ?? '•');
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Valeur de départ (`w:start`, `w:startOverride`) tronquée en entier sûr, sinon 1 : un
|
|
48
|
+
* `start="1e+300"` serait relu en 1 par l'éditeur, l'aller-retour ne serait plus idempotent.
|
|
49
|
+
*/
|
|
50
|
+
export function safeStart(value) {
|
|
51
|
+
if (value === undefined)
|
|
52
|
+
return 1;
|
|
53
|
+
const truncated = Math.trunc(value);
|
|
54
|
+
return Number.isSafeInteger(truncated) ? truncated : 1;
|
|
55
|
+
}
|
|
56
|
+
function readLevel(lvl) {
|
|
57
|
+
const level = numericAttribute(lvl, 'ilvl') ?? 0;
|
|
58
|
+
const numFmt = childNamed(lvl, 'numFmt');
|
|
59
|
+
const format = listFormatOf(numFmt ? wordAttribute(numFmt, 'val') : '');
|
|
60
|
+
const lvlText = childNamed(lvl, 'lvlText');
|
|
61
|
+
const rawText = lvlText ? wordAttribute(lvlText, 'val') : '';
|
|
62
|
+
const pPr = childNamed(lvl, 'pPr');
|
|
63
|
+
const ind = pPr ? childNamed(pPr, 'ind') : null;
|
|
64
|
+
const left = numericAttribute(ind, 'left') ?? numericAttribute(ind, 'start');
|
|
65
|
+
const hanging = numericAttribute(ind, 'hanging');
|
|
66
|
+
const result = {
|
|
67
|
+
level,
|
|
68
|
+
format,
|
|
69
|
+
text: format === 'bullet' ? normalizeBullet(rawText) : rawText,
|
|
70
|
+
start: safeStart(numericAttribute(childNamed(lvl, 'start'), 'val')),
|
|
71
|
+
};
|
|
72
|
+
if (left !== undefined)
|
|
73
|
+
result.indentLeftPt = twipsToPt(left);
|
|
74
|
+
if (hanging !== undefined)
|
|
75
|
+
result.hangingPt = twipsToPt(hanging);
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Crée le résolveur de numérotation. Signature figée : lit `numbering.xml` via
|
|
80
|
+
* `pkg.related(pkg.mainPart, '/numbering')`. Les `w:abstractNum` liés à un style
|
|
81
|
+
* (`w:numStyleLink`) sans niveaux propres donnent une définition vide.
|
|
82
|
+
*/
|
|
83
|
+
export async function createNumberingResolver(pkg) {
|
|
84
|
+
const path = await pkg.related(pkg.mainPart, '/numbering');
|
|
85
|
+
const doc = path ? await pkg.part(path) : null;
|
|
86
|
+
if (!doc)
|
|
87
|
+
return { definition: () => null };
|
|
88
|
+
const abstracts = new Map();
|
|
89
|
+
for (const abstractNum of childrenNamed(doc.documentElement, 'abstractNum')) {
|
|
90
|
+
const id = wordAttribute(abstractNum, 'abstractNumId');
|
|
91
|
+
if (!id)
|
|
92
|
+
continue;
|
|
93
|
+
const levels = childrenNamed(abstractNum, 'lvl')
|
|
94
|
+
.map(readLevel)
|
|
95
|
+
.sort((a, b) => a.level - b.level);
|
|
96
|
+
abstracts.set(id, levels);
|
|
97
|
+
}
|
|
98
|
+
const nums = new Map();
|
|
99
|
+
for (const num of childrenNamed(doc.documentElement, 'num')) {
|
|
100
|
+
const id = wordAttribute(num, 'numId');
|
|
101
|
+
if (id)
|
|
102
|
+
nums.set(id, num);
|
|
103
|
+
}
|
|
104
|
+
const cache = new Map();
|
|
105
|
+
const resolve = (numId) => {
|
|
106
|
+
const num = nums.get(numId);
|
|
107
|
+
if (!num)
|
|
108
|
+
return null;
|
|
109
|
+
const abstractId = childNamed(num, 'abstractNumId');
|
|
110
|
+
const base = abstractId ? abstracts.get(wordAttribute(abstractId, 'val')) : undefined;
|
|
111
|
+
if (!base)
|
|
112
|
+
return null;
|
|
113
|
+
const levels = new Map(base.map((level) => [level.level, level]));
|
|
114
|
+
for (const override of childrenNamed(num, 'lvlOverride')) {
|
|
115
|
+
const level = numericAttribute(override, 'ilvl');
|
|
116
|
+
if (level === undefined)
|
|
117
|
+
continue;
|
|
118
|
+
const replacement = childNamed(override, 'lvl');
|
|
119
|
+
if (replacement)
|
|
120
|
+
levels.set(level, { ...readLevel(replacement), level });
|
|
121
|
+
const start = numericAttribute(childNamed(override, 'startOverride'), 'val');
|
|
122
|
+
const current = levels.get(level);
|
|
123
|
+
if (start !== undefined && current) {
|
|
124
|
+
levels.set(level, { ...current, start: safeStart(start) });
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
numId,
|
|
129
|
+
levels: Array.from(levels.values()).sort((a, b) => a.level - b.level),
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
return {
|
|
133
|
+
definition(numId) {
|
|
134
|
+
let definition = cache.get(numId);
|
|
135
|
+
if (definition === undefined) {
|
|
136
|
+
definition = resolve(numId);
|
|
137
|
+
cache.set(numId, definition);
|
|
138
|
+
}
|
|
139
|
+
return definition;
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const VOID_TAGS = new Set(['br', 'img', 'hr', 'wbr', 'input']);
|
|
144
|
+
const TAG_PATTERN = /<(\/?)([a-zA-Z][a-zA-Z0-9-]*)[^>]*?(\/?)>/g;
|
|
145
|
+
/** Nombre d'éléments de premier niveau d'un fragment HTML (`<hr><p>…</p>` → 2). */
|
|
146
|
+
export function topLevelElementCount(html) {
|
|
147
|
+
let depth = 0;
|
|
148
|
+
let count = 0;
|
|
149
|
+
for (const match of html.matchAll(TAG_PATTERN)) {
|
|
150
|
+
const closing = match[1] === '/';
|
|
151
|
+
const name = (match[2] ?? '').toLowerCase();
|
|
152
|
+
const selfClosing = match[3] === '/' || VOID_TAGS.has(name);
|
|
153
|
+
if (closing) {
|
|
154
|
+
depth = Math.max(0, depth - 1);
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
if (depth === 0)
|
|
158
|
+
count += 1;
|
|
159
|
+
if (!selfClosing)
|
|
160
|
+
depth += 1;
|
|
161
|
+
}
|
|
162
|
+
return count;
|
|
163
|
+
}
|
|
164
|
+
const FIRST_TAG_STYLE = /^<[a-zA-Z][a-zA-Z0-9]*\b[^>]*?\bstyle="([^"]*)"/;
|
|
165
|
+
const MARGIN_LEFT = /(?:^|;)\s*margin-left:\s*(-?\d+(?:\.\d+)?)pt/;
|
|
166
|
+
/** Retrait gauche en points du bloc, lu dans son `style` sérialisé, `undefined` sans retrait. */
|
|
167
|
+
export function marginLeftPt(html) {
|
|
168
|
+
const style = FIRST_TAG_STYLE.exec(html)?.[1];
|
|
169
|
+
if (!style)
|
|
170
|
+
return undefined;
|
|
171
|
+
const match = MARGIN_LEFT.exec(style);
|
|
172
|
+
return match?.[1] ? Number(match[1]) : undefined;
|
|
173
|
+
}
|
|
174
|
+
/** Attribut posé par `paragraphs.ts` quand le retrait du paragraphe vient de la numérotation. */
|
|
175
|
+
const NUM_INDENT_ATTRIBUTE = /\sdata-docx-num-indent(?:="")?(?=[\s>])/;
|
|
176
|
+
const FIRST_TAG = /^<[a-zA-Z][a-zA-Z0-9]*\b[^>]*>/;
|
|
177
|
+
const STYLE_ATTRIBUTE = /\sstyle="([^"]*)"/;
|
|
178
|
+
const NUMBERING_DECLARATIONS = /^(?:margin-left|text-indent):/;
|
|
179
|
+
/**
|
|
180
|
+
* Retire d'un item le retrait venu de la numérotation (`margin-left`, `text-indent` marqués
|
|
181
|
+
* par `data-docx-num-indent`) et l'attribut : dans `<li>` la liste porte le retrait, et
|
|
182
|
+
* l'éditeur ignore l'attribut. Sans l'attribut, le retrait est direct et reste tel quel.
|
|
183
|
+
*/
|
|
184
|
+
export function stripNumberingIndent(html) {
|
|
185
|
+
const tag = FIRST_TAG.exec(html)?.[0];
|
|
186
|
+
if (!tag || !NUM_INDENT_ATTRIBUTE.test(tag))
|
|
187
|
+
return html;
|
|
188
|
+
let patched = tag.replace(NUM_INDENT_ATTRIBUTE, '');
|
|
189
|
+
const style = STYLE_ATTRIBUTE.exec(patched);
|
|
190
|
+
if (style) {
|
|
191
|
+
const kept = (style[1] ?? '')
|
|
192
|
+
.split(';')
|
|
193
|
+
.map((declaration) => declaration.trim())
|
|
194
|
+
.filter((declaration) => declaration !== '' && !NUMBERING_DECLARATIONS.test(declaration));
|
|
195
|
+
patched = patched.replace(STYLE_ATTRIBUTE, kept.length > 0 ? ` style="${kept.join('; ')}"` : '');
|
|
196
|
+
}
|
|
197
|
+
return patched + html.slice(tag.length);
|
|
198
|
+
}
|
|
199
|
+
const STATES = new WeakMap();
|
|
200
|
+
function stateOf(ctx) {
|
|
201
|
+
const known = STATES.get(ctx.lost);
|
|
202
|
+
if (known)
|
|
203
|
+
return known;
|
|
204
|
+
const state = { counters: new Map(), offsets: new WeakMap(), warned: new Set() };
|
|
205
|
+
STATES.set(ctx.lost, state);
|
|
206
|
+
return state;
|
|
207
|
+
}
|
|
208
|
+
/** Avertit une fois par `numId` dont la liste est rendue en paragraphes. */
|
|
209
|
+
function warnOnce(ctx, numId, reason) {
|
|
210
|
+
const state = stateOf(ctx);
|
|
211
|
+
if (state.warned.has(numId))
|
|
212
|
+
return;
|
|
213
|
+
state.warned.add(numId);
|
|
214
|
+
ctx.warnings.push({
|
|
215
|
+
code: 'reader',
|
|
216
|
+
message: `Numérotation ${numId} : ${reason}, liste rendue en paragraphes.`,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
/** Le bloc est-il un item de liste rendable ? Signale une fois les numérotations inconnues. */
|
|
220
|
+
function asListItem(block, ctx) {
|
|
221
|
+
if (block.kind !== 'paragraph' || !block.numbering || block.numbering.numId === '0') {
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
const { numId } = block.numbering;
|
|
225
|
+
const definition = ctx.numbering.definition(numId);
|
|
226
|
+
if (!definition) {
|
|
227
|
+
warnOnce(ctx, numId, 'définition introuvable dans numbering.xml');
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
const level = definition.levels.find((candidate) => candidate.level === block.numbering?.level);
|
|
231
|
+
if (!level) {
|
|
232
|
+
warnOnce(ctx, numId, `niveau ${String(block.numbering.level)} non défini`);
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
if (level.format === 'none')
|
|
236
|
+
return null;
|
|
237
|
+
if (topLevelElementCount(block.html) !== 1)
|
|
238
|
+
return null;
|
|
239
|
+
return { block, numId: definition.numId, level };
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Enregistre un item dans l'ordre du document et retourne son rang parmi ceux de même
|
|
243
|
+
* `numId:niveau` (un item redémarre les niveaux plus profonds). À appeler à la conversion
|
|
244
|
+
* (`convertBlocks`) : les cellules sont rendues avant le corps, compter au rendu décalerait
|
|
245
|
+
* le corps. Un bloc déjà enregistré garde son rang ; sinon il l'est au rendu.
|
|
246
|
+
*/
|
|
247
|
+
export function registerListItem(block, ctx) {
|
|
248
|
+
if (block.kind === 'paragraph' && block.isEmpty && ctx.options.emptyParagraphs === 'drop') {
|
|
249
|
+
return undefined;
|
|
250
|
+
}
|
|
251
|
+
const item = asListItem(block, ctx);
|
|
252
|
+
if (!item)
|
|
253
|
+
return undefined;
|
|
254
|
+
const state = stateOf(ctx);
|
|
255
|
+
const known = state.offsets.get(item.block);
|
|
256
|
+
if (known !== undefined)
|
|
257
|
+
return known;
|
|
258
|
+
const { numId, level } = item;
|
|
259
|
+
const key = `${numId}:${String(level.level)}`;
|
|
260
|
+
const offset = state.counters.get(key) ?? 0;
|
|
261
|
+
state.offsets.set(item.block, offset);
|
|
262
|
+
state.counters.set(key, offset + 1);
|
|
263
|
+
for (const existing of Array.from(state.counters.keys())) {
|
|
264
|
+
const [id, depth] = existing.split(':');
|
|
265
|
+
if (id === numId && Number(depth) > level.level)
|
|
266
|
+
state.counters.delete(existing);
|
|
267
|
+
}
|
|
268
|
+
return offset;
|
|
269
|
+
}
|
|
270
|
+
function listOpening(definition, level, start) {
|
|
271
|
+
const numId = ` data-docx-num-id="${escapeAttr(definition.numId)}"`;
|
|
272
|
+
if (level.format === 'bullet') {
|
|
273
|
+
const bullet = level.text ? ` data-bullet="${escapeAttr(level.text)}"` : '';
|
|
274
|
+
return `<ul${bullet}${numId}>`;
|
|
275
|
+
}
|
|
276
|
+
const type = level.format !== '1' && level.format !== 'none' ? ` type="${level.format}"` : '';
|
|
277
|
+
const startAttr = start !== 1 ? ` start="${String(Math.min(start, Number.MAX_SAFE_INTEGER))}"` : '';
|
|
278
|
+
return `<ol${type}${startAttr}${numId}>`;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Rend une suite de blocs en HTML : paragraphes numérotés consécutifs regroupés en listes
|
|
282
|
+
* imbriquées selon leur niveau ; changement de `numId` à même niveau → liste fermée ;
|
|
283
|
+
* `start` posé si le niveau ne démarre pas à 1 ou si la liste reprend après interruption,
|
|
284
|
+
* y compris à travers une cellule, une note ou un en-tête (Word continue, HTML repart à 1).
|
|
285
|
+
* Un `<p>` non numéroté (jamais un titre) qui suit un item avec un retrait au moins égal
|
|
286
|
+
* reste dans le même `<li>` ; un bloc à plusieurs frères (saut de page) reste hors liste.
|
|
287
|
+
* `emptyParagraphs: 'drop'` retire les paragraphes vides.
|
|
288
|
+
*/
|
|
289
|
+
export function renderBlocks(blocks, ctx) {
|
|
290
|
+
const out = [];
|
|
291
|
+
const stack = [];
|
|
292
|
+
const top = () => stack[stack.length - 1];
|
|
293
|
+
const closeTop = () => {
|
|
294
|
+
const list = stack.pop();
|
|
295
|
+
if (!list)
|
|
296
|
+
return;
|
|
297
|
+
if (list.itemOpen)
|
|
298
|
+
out.push('</li>');
|
|
299
|
+
out.push(`</${list.tag}>`);
|
|
300
|
+
};
|
|
301
|
+
const closeAll = () => {
|
|
302
|
+
while (stack.length > 0)
|
|
303
|
+
closeTop();
|
|
304
|
+
};
|
|
305
|
+
const isContinuation = (block, list) => {
|
|
306
|
+
if (block.kind !== 'paragraph' || block.isEmpty || !list.itemOpen)
|
|
307
|
+
return false;
|
|
308
|
+
if (block.numbering && block.numbering.numId !== '0')
|
|
309
|
+
return false;
|
|
310
|
+
if (!/^<p[\s>]/.test(block.html) || topLevelElementCount(block.html) !== 1)
|
|
311
|
+
return false;
|
|
312
|
+
const indent = marginLeftPt(block.html);
|
|
313
|
+
return indent !== undefined && indent > 0 && indent >= list.itemIndentPt;
|
|
314
|
+
};
|
|
315
|
+
for (const block of blocks) {
|
|
316
|
+
if (block.kind === 'paragraph' && block.isEmpty && ctx.options.emptyParagraphs === 'drop') {
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
const item = asListItem(block, ctx);
|
|
320
|
+
if (item) {
|
|
321
|
+
const { numId, level } = item;
|
|
322
|
+
let current = top();
|
|
323
|
+
while (current &&
|
|
324
|
+
(current.level > level.level || (current.level === level.level && current.numId !== numId))) {
|
|
325
|
+
closeTop();
|
|
326
|
+
current = top();
|
|
327
|
+
}
|
|
328
|
+
const offset = registerListItem(block, ctx) ?? 0;
|
|
329
|
+
if (!current || current.level < level.level) {
|
|
330
|
+
const definition = ctx.numbering.definition(numId);
|
|
331
|
+
if (definition)
|
|
332
|
+
out.push(listOpening(definition, level, level.start + offset));
|
|
333
|
+
current = {
|
|
334
|
+
numId,
|
|
335
|
+
level: level.level,
|
|
336
|
+
tag: level.format === 'bullet' ? 'ul' : 'ol',
|
|
337
|
+
itemOpen: false,
|
|
338
|
+
itemIndentPt: 0,
|
|
339
|
+
};
|
|
340
|
+
stack.push(current);
|
|
341
|
+
}
|
|
342
|
+
if (current.itemOpen)
|
|
343
|
+
out.push('</li>');
|
|
344
|
+
out.push(`<li>${stripNumberingIndent(item.block.html)}`);
|
|
345
|
+
current.itemOpen = true;
|
|
346
|
+
current.itemIndentPt = marginLeftPt(item.block.html) ?? level.indentLeftPt ?? 0;
|
|
347
|
+
continue;
|
|
348
|
+
}
|
|
349
|
+
const current = top();
|
|
350
|
+
if (current && isContinuation(block, current)) {
|
|
351
|
+
out.push(block.html);
|
|
352
|
+
continue;
|
|
353
|
+
}
|
|
354
|
+
closeAll();
|
|
355
|
+
out.push(block.html);
|
|
356
|
+
}
|
|
357
|
+
closeAll();
|
|
358
|
+
return out.join('');
|
|
359
|
+
}
|
|
360
|
+
//# sourceMappingURL=lists.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lists.js","sourceRoot":"","sources":["../../../src/docx/reader/lists.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { DocxLostObject } from '../types';
|
|
2
|
+
import type { ConverterContext } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Contenu retenu d'un `mc:AlternateContent` (forme que Word 2010+ écrit pour toute zone
|
|
5
|
+
* de texte ou forme `wps`) : premier élément du `mc:Choice`, sinon du `mc:Fallback`.
|
|
6
|
+
* `null` si l'élément n'est pas un `AlternateContent` ou s'il est vide.
|
|
7
|
+
*/
|
|
8
|
+
export declare function alternateContentChoice(element: Element): Element | null;
|
|
9
|
+
/** Vrai si le dessin porte une image : `pic:pic` (DrawingML) ou `v:imagedata` (VML). */
|
|
10
|
+
export declare function hasPicture(element: Element): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Zone de texte contenue dans un dessin (`w:txbxContent`), avec son texte, que le dessin
|
|
13
|
+
* porte ou non une image par ailleurs. `null` sans zone de texte. Sert à `images.ts` pour
|
|
14
|
+
* signaler la zone d'un dessin dont l'image est rendue.
|
|
15
|
+
*/
|
|
16
|
+
export declare function textboxLost(element: Element, ctx: ConverterContext): DocxLostObject | null;
|
|
17
|
+
/**
|
|
18
|
+
* Objet non représentable au niveau bloc (enfant direct de `w:body`, `w:tc`,
|
|
19
|
+
* `w:sdtContent`…). `null` si l'élément est pris en charge ou déjà signalé ; l'appelant
|
|
20
|
+
* pousse le résultat dans `ctx.lost` et ajoute l'avertissement `object-lost`.
|
|
21
|
+
*/
|
|
22
|
+
export declare function detectLost(element: Element, ctx: ConverterContext): DocxLostObject | null;
|
|
23
|
+
/**
|
|
24
|
+
* Même détection au niveau run, pour L24 : `m:oMath`, `w:object`, `w:commentReference`,
|
|
25
|
+
* `w:ins` / `w:del` (une fois par document), `w:fldSimple` / `w:instrText` d'un champ
|
|
26
|
+
* inconnu (`DATE`, `IF`…). Pour `w:drawing` et `w:pict`, passer par `ctx.images.drawing`
|
|
27
|
+
* qui appelle cette fonction quand le dessin n'est pas une image.
|
|
28
|
+
*/
|
|
29
|
+
export declare function detectLostInline(element: Element, ctx: ConverterContext): DocxLostObject | null;
|
|
30
|
+
//# sourceMappingURL=lost.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lost.d.ts","sourceRoot":"","sources":["../../../src/docx/reader/lost.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAmDhD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAOvE;AAED,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEpD;AAuDD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,GAAG,cAAc,GAAG,IAAI,CAG1F;AAkFD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,GAAG,cAAc,GAAG,IAAI,CAEzF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,GAAG,cAAc,GAAG,IAAI,CAE/F"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { allNamed, childNamed, textOf, wordAttribute } from '../preprocess/xml-utils';
|
|
2
|
+
/**
|
|
3
|
+
* Détection des objets Word que l'éditeur ne représente pas. Deux points d'entrée, même
|
|
4
|
+
* logique : `detectLost` au niveau bloc (appelé par `index.ts` pour tout enfant du corps
|
|
5
|
+
* qui n'est ni `p`, ni `tbl`, ni `sdt`) et `detectLostInline` au niveau run (à appeler
|
|
6
|
+
* par L24 pour `m:oMath`, `w:object`, `w:commentReference`, `w:ins`, `w:del`,
|
|
7
|
+
* `w:fldSimple` inconnu…). Les dessins (`w:drawing`, `w:pict`, ou leur enveloppe
|
|
8
|
+
* `mc:AlternateContent`) passent d'abord par `ctx.images.drawing`, qui délègue ici quand
|
|
9
|
+
* ils ne contiennent pas d'image.
|
|
10
|
+
*
|
|
11
|
+
* Rien n'est retiré du DOM : on classe, on extrait le texte de remplacement et un détail
|
|
12
|
+
* lisible, l'appelant pousse l'objet dans `ctx.lost` et l'avertissement `object-lost`.
|
|
13
|
+
*/
|
|
14
|
+
/** Instructions de champ que le lecteur sait rendre (fusion, numéros de page, sommaire, liens). */
|
|
15
|
+
const KNOWN_FIELDS = new Set([
|
|
16
|
+
'MERGEFIELD',
|
|
17
|
+
'PAGE',
|
|
18
|
+
'NUMPAGES',
|
|
19
|
+
'TOC',
|
|
20
|
+
'HYPERLINK',
|
|
21
|
+
]);
|
|
22
|
+
/** Formes VML (`v:…`) sans image : formes perdues. */
|
|
23
|
+
const VML_SHAPES = new Set([
|
|
24
|
+
'shape',
|
|
25
|
+
'rect',
|
|
26
|
+
'oval',
|
|
27
|
+
'roundrect',
|
|
28
|
+
'line',
|
|
29
|
+
'polyline',
|
|
30
|
+
'arc',
|
|
31
|
+
'curve',
|
|
32
|
+
'group',
|
|
33
|
+
]);
|
|
34
|
+
/** Éléments de révision Word, signalés une seule fois par document. */
|
|
35
|
+
const REVISION_ELEMENTS = new Set([
|
|
36
|
+
'ins',
|
|
37
|
+
'del',
|
|
38
|
+
'moveFrom',
|
|
39
|
+
'moveTo',
|
|
40
|
+
'moveFromRangeStart',
|
|
41
|
+
'moveToRangeStart',
|
|
42
|
+
]);
|
|
43
|
+
function hasDescendant(element, localName) {
|
|
44
|
+
return element.getElementsByTagNameNS('*', localName).length > 0;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Contenu retenu d'un `mc:AlternateContent` (forme que Word 2010+ écrit pour toute zone
|
|
48
|
+
* de texte ou forme `wps`) : premier élément du `mc:Choice`, sinon du `mc:Fallback`.
|
|
49
|
+
* `null` si l'élément n'est pas un `AlternateContent` ou s'il est vide.
|
|
50
|
+
*/
|
|
51
|
+
export function alternateContentChoice(element) {
|
|
52
|
+
if (element.localName !== 'AlternateContent')
|
|
53
|
+
return null;
|
|
54
|
+
return (childNamed(element, 'Choice')?.firstElementChild ??
|
|
55
|
+
childNamed(element, 'Fallback')?.firstElementChild ??
|
|
56
|
+
null);
|
|
57
|
+
}
|
|
58
|
+
/** Vrai si le dessin porte une image : `pic:pic` (DrawingML) ou `v:imagedata` (VML). */
|
|
59
|
+
export function hasPicture(element) {
|
|
60
|
+
return hasDescendant(element, 'pic') || hasDescendant(element, 'imagedata');
|
|
61
|
+
}
|
|
62
|
+
/** Texte des paragraphes d'une zone de texte (`w:txbxContent`), un paragraphe par ligne. */
|
|
63
|
+
function textboxText(element) {
|
|
64
|
+
const lines = [];
|
|
65
|
+
for (const content of allNamed(element, 'txbxContent')) {
|
|
66
|
+
for (const paragraph of allNamed(content, 'p')) {
|
|
67
|
+
const text = textOf(paragraph).trim();
|
|
68
|
+
if (text)
|
|
69
|
+
lines.push(text);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return lines.length > 0 ? lines.join('\n') : undefined;
|
|
73
|
+
}
|
|
74
|
+
/** Nom lisible d'un dessin : `wp:docPr name`, sinon identifiant VML. */
|
|
75
|
+
function drawingName(element) {
|
|
76
|
+
const docPr = allNamed(element, 'docPr')[0];
|
|
77
|
+
const name = docPr?.getAttribute('name');
|
|
78
|
+
if (name)
|
|
79
|
+
return name;
|
|
80
|
+
for (const shape of Array.from(element.getElementsByTagNameNS('*', '*'))) {
|
|
81
|
+
if (VML_SHAPES.has(shape.localName)) {
|
|
82
|
+
const id = shape.getAttribute('id');
|
|
83
|
+
if (id)
|
|
84
|
+
return id;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
/** Mot-clé d'une instruction de champ (`DATE \@ "dd/MM/yyyy"` → `DATE`). */
|
|
90
|
+
function fieldKeyword(instruction) {
|
|
91
|
+
return (instruction.trim().split(/\s+/)[0] ?? '').toUpperCase();
|
|
92
|
+
}
|
|
93
|
+
function lost(ctx, kind, detail, text) {
|
|
94
|
+
const object = {
|
|
95
|
+
kind,
|
|
96
|
+
where: ctx.where,
|
|
97
|
+
};
|
|
98
|
+
if (text)
|
|
99
|
+
object.text = text;
|
|
100
|
+
if (detail)
|
|
101
|
+
object.detail = detail;
|
|
102
|
+
return object;
|
|
103
|
+
}
|
|
104
|
+
/** Vrai si un objet de même nature et même détail est déjà signalé (commentaire, révision). */
|
|
105
|
+
function alreadyLost(ctx, kind, detail) {
|
|
106
|
+
return ctx.lost.some((entry) => entry.kind === kind && (detail === undefined || entry.detail === detail));
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Zone de texte contenue dans un dessin (`w:txbxContent`), avec son texte, que le dessin
|
|
110
|
+
* porte ou non une image par ailleurs. `null` sans zone de texte. Sert à `images.ts` pour
|
|
111
|
+
* signaler la zone d'un dessin dont l'image est rendue.
|
|
112
|
+
*/
|
|
113
|
+
export function textboxLost(element, ctx) {
|
|
114
|
+
if (!hasDescendant(element, 'txbxContent'))
|
|
115
|
+
return null;
|
|
116
|
+
return lost(ctx, 'textbox', drawingName(element) ?? 'zone de texte', textboxText(element));
|
|
117
|
+
}
|
|
118
|
+
/** Dessin DrawingML ou VML sans image : zone de texte, SmartArt, graphique, forme. */
|
|
119
|
+
function classifyDrawing(element, ctx) {
|
|
120
|
+
// Une image (`pic:pic`, `v:imagedata`) est du ressort d'`images.ts`, pas une perte. Un
|
|
121
|
+
// `a:blip` seul (fond d'une forme, d'une zone de texte) n'en fait pas une image.
|
|
122
|
+
if (hasPicture(element))
|
|
123
|
+
return null;
|
|
124
|
+
const textbox = textboxLost(element, ctx);
|
|
125
|
+
if (textbox)
|
|
126
|
+
return textbox;
|
|
127
|
+
const name = drawingName(element);
|
|
128
|
+
if (hasDescendant(element, 'relIds') || hasDescendant(element, 'dataModel')) {
|
|
129
|
+
return lost(ctx, 'smartart', name ?? 'SmartArt');
|
|
130
|
+
}
|
|
131
|
+
if (hasDescendant(element, 'chart'))
|
|
132
|
+
return lost(ctx, 'chart', name ?? 'graphique');
|
|
133
|
+
const isShape = hasDescendant(element, 'wsp') ||
|
|
134
|
+
hasDescendant(element, 'wgp') ||
|
|
135
|
+
Array.from(element.getElementsByTagNameNS('*', '*')).some((node) => VML_SHAPES.has(node.localName));
|
|
136
|
+
if (isShape)
|
|
137
|
+
return lost(ctx, 'shape', name ?? 'forme');
|
|
138
|
+
return lost(ctx, 'unknown', name ?? element.localName);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Classe un élément non représentable. `null` quand l'élément est en fait pris en charge
|
|
142
|
+
* ailleurs (image, champ connu, fin de plage de commentaire) ou déjà signalé.
|
|
143
|
+
*/
|
|
144
|
+
function classify(element, ctx) {
|
|
145
|
+
const name = element.localName;
|
|
146
|
+
switch (name) {
|
|
147
|
+
case 'drawing':
|
|
148
|
+
case 'pict':
|
|
149
|
+
return classifyDrawing(element, ctx);
|
|
150
|
+
case 'AlternateContent': {
|
|
151
|
+
// Word 2010+ enveloppe zones de texte et formes : on classe le contenu retenu.
|
|
152
|
+
const chosen = alternateContentChoice(element);
|
|
153
|
+
return chosen ? classify(chosen, ctx) : lost(ctx, 'unknown', 'AlternateContent');
|
|
154
|
+
}
|
|
155
|
+
case 'txbxContent':
|
|
156
|
+
return lost(ctx, 'textbox', 'zone de texte', textboxText(element.parentElement ?? element));
|
|
157
|
+
case 'oMath':
|
|
158
|
+
case 'oMathPara': {
|
|
159
|
+
const text = textOf(element).trim();
|
|
160
|
+
return lost(ctx, 'equation', 'équation', text || undefined);
|
|
161
|
+
}
|
|
162
|
+
case 'commentRangeStart':
|
|
163
|
+
case 'commentReference': {
|
|
164
|
+
const detail = `commentaire ${wordAttribute(element, 'id') || '?'}`;
|
|
165
|
+
return alreadyLost(ctx, 'comment', detail) ? null : lost(ctx, 'comment', detail);
|
|
166
|
+
}
|
|
167
|
+
case 'commentRangeEnd':
|
|
168
|
+
return null;
|
|
169
|
+
case 'object': {
|
|
170
|
+
const ole = allNamed(element, 'OLEObject')[0];
|
|
171
|
+
const progId = ole?.getAttribute('ProgID');
|
|
172
|
+
return lost(ctx, 'embedded-object', progId ? `objet ${progId}` : 'objet incorporé');
|
|
173
|
+
}
|
|
174
|
+
case 'fldSimple': {
|
|
175
|
+
const keyword = fieldKeyword(wordAttribute(element, 'instr'));
|
|
176
|
+
if (KNOWN_FIELDS.has(keyword))
|
|
177
|
+
return null;
|
|
178
|
+
const text = textOf(element).trim();
|
|
179
|
+
return lost(ctx, 'field', `champ ${keyword || '?'}`, text || undefined);
|
|
180
|
+
}
|
|
181
|
+
case 'instrText': {
|
|
182
|
+
const keyword = fieldKeyword(element.textContent ?? '');
|
|
183
|
+
return KNOWN_FIELDS.has(keyword) ? null : lost(ctx, 'field', `champ ${keyword || '?'}`);
|
|
184
|
+
}
|
|
185
|
+
case 'altChunk':
|
|
186
|
+
return lost(ctx, 'unknown', 'contenu externe (altChunk)');
|
|
187
|
+
default: {
|
|
188
|
+
if (REVISION_ELEMENTS.has(name)) {
|
|
189
|
+
return alreadyLost(ctx, 'revision')
|
|
190
|
+
? null
|
|
191
|
+
: lost(ctx, 'revision', 'révisions (w:ins / w:del) non suivies');
|
|
192
|
+
}
|
|
193
|
+
const text = textOf(element).trim();
|
|
194
|
+
return lost(ctx, 'unknown', name, text || undefined);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Objet non représentable au niveau bloc (enfant direct de `w:body`, `w:tc`,
|
|
200
|
+
* `w:sdtContent`…). `null` si l'élément est pris en charge ou déjà signalé ; l'appelant
|
|
201
|
+
* pousse le résultat dans `ctx.lost` et ajoute l'avertissement `object-lost`.
|
|
202
|
+
*/
|
|
203
|
+
export function detectLost(element, ctx) {
|
|
204
|
+
return classify(element, ctx);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Même détection au niveau run, pour L24 : `m:oMath`, `w:object`, `w:commentReference`,
|
|
208
|
+
* `w:ins` / `w:del` (une fois par document), `w:fldSimple` / `w:instrText` d'un champ
|
|
209
|
+
* inconnu (`DATE`, `IF`…). Pour `w:drawing` et `w:pict`, passer par `ctx.images.drawing`
|
|
210
|
+
* qui appelle cette fonction quand le dessin n'est pas une image.
|
|
211
|
+
*/
|
|
212
|
+
export function detectLostInline(element, ctx) {
|
|
213
|
+
return classify(element, ctx);
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=lost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lost.js","sourceRoot":"","sources":["../../../src/docx/reader/lost.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DocxPackage, NoteRegistry, ReaderOptions } from './types';
|
|
2
|
+
/** Crée le registre des notes du document. Signature figée par `index.ts`. */
|
|
3
|
+
export declare function createNoteRegistry(pkg: DocxPackage, options: ReaderOptions): Promise<NoteRegistry>;
|
|
4
|
+
//# sourceMappingURL=notes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notes.d.ts","sourceRoot":"","sources":["../../../src/docx/reader/notes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAoB,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAiE1F,8EAA8E;AAC9E,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CAgEvB"}
|