postext 1.22.0 → 1.22.2

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 (65) hide show
  1. package/dist/__tests__/exports.test.js +4 -0
  2. package/dist/__tests__/exports.test.js.map +1 -1
  3. package/dist/comics/lettering/__tests__/panelCache.test.d.ts +2 -0
  4. package/dist/comics/lettering/__tests__/panelCache.test.d.ts.map +1 -0
  5. package/dist/comics/lettering/__tests__/panelCache.test.js +43 -0
  6. package/dist/comics/lettering/__tests__/panelCache.test.js.map +1 -0
  7. package/dist/comics/lettering/letter.d.ts.map +1 -1
  8. package/dist/comics/lettering/letter.js +73 -0
  9. package/dist/comics/lettering/letter.js.map +1 -1
  10. package/dist/comics/lettering/shape-text.d.ts.map +1 -1
  11. package/dist/comics/lettering/shape-text.js +64 -16
  12. package/dist/comics/lettering/shape-text.js.map +1 -1
  13. package/dist/fonts/usage.d.ts +46 -0
  14. package/dist/fonts/usage.d.ts.map +1 -0
  15. package/dist/fonts/usage.js +205 -0
  16. package/dist/fonts/usage.js.map +1 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/word/analyze.d.ts +33 -0
  22. package/dist/word/analyze.d.ts.map +1 -0
  23. package/dist/word/analyze.js +167 -0
  24. package/dist/word/analyze.js.map +1 -0
  25. package/dist/word/docxRead.d.ts +10 -0
  26. package/dist/word/docxRead.d.ts.map +1 -0
  27. package/dist/word/docxRead.js +584 -0
  28. package/dist/word/docxRead.js.map +1 -0
  29. package/dist/word/index.d.ts +14 -0
  30. package/dist/word/index.d.ts.map +1 -0
  31. package/dist/word/index.js +12 -0
  32. package/dist/word/index.js.map +1 -0
  33. package/dist/word/inline.d.ts +48 -0
  34. package/dist/word/inline.d.ts.map +1 -0
  35. package/dist/word/inline.js +606 -0
  36. package/dist/word/inline.js.map +1 -0
  37. package/dist/word/model.d.ts +141 -0
  38. package/dist/word/model.d.ts.map +1 -0
  39. package/dist/word/model.js +23 -0
  40. package/dist/word/model.js.map +1 -0
  41. package/dist/word/omml.d.ts +4 -0
  42. package/dist/word/omml.d.ts.map +1 -0
  43. package/dist/word/omml.js +139 -0
  44. package/dist/word/omml.js.map +1 -0
  45. package/dist/word/template.d.ts +111 -0
  46. package/dist/word/template.d.ts.map +1 -0
  47. package/dist/word/template.js +255 -0
  48. package/dist/word/template.js.map +1 -0
  49. package/dist/word/toDocx.d.ts +28 -0
  50. package/dist/word/toDocx.d.ts.map +1 -0
  51. package/dist/word/toDocx.js +684 -0
  52. package/dist/word/toDocx.js.map +1 -0
  53. package/dist/word/toMarkdown.d.ts +53 -0
  54. package/dist/word/toMarkdown.d.ts.map +1 -0
  55. package/dist/word/toMarkdown.js +632 -0
  56. package/dist/word/toMarkdown.js.map +1 -0
  57. package/dist/word/word.test.d.ts +2 -0
  58. package/dist/word/word.test.d.ts.map +1 -0
  59. package/dist/word/word.test.js +302 -0
  60. package/dist/word/word.test.js.map +1 -0
  61. package/dist/word/xml.d.ts +30 -0
  62. package/dist/word/xml.d.ts.map +1 -0
  63. package/dist/word/xml.js +127 -0
  64. package/dist/word/xml.js.map +1 -0
  65. package/package.json +5 -1
@@ -0,0 +1,584 @@
1
+ // Read a `.docx` (Office Open XML) into the Word model: styles, numbering,
2
+ // body blocks, footnotes and endnotes, pictures, core properties and the
3
+ // import template a Postext export embeds. Runs in the browser and in Node.
4
+ import { strFromU8, unzipSync } from 'fflate';
5
+ import { ommlToTex } from './omml';
6
+ import { attr, child, children, descendants, localName, onOff, parseXml, textOf } from './xml';
7
+ /** customXml item holding the template of a Postext export. */
8
+ export const TEMPLATE_XML_ROOT = 'postextWordTemplate';
9
+ export const TEMPLATE_XML_NS = 'https://postext.dev/word-template';
10
+ export class DocxReadError extends Error {
11
+ }
12
+ const MEDIA_TYPES = {
13
+ png: 'image/png', jpg: 'image/jpeg', jpeg: 'image/jpeg', gif: 'image/gif', webp: 'image/webp',
14
+ svg: 'image/svg+xml', emf: 'image/emf', wmf: 'image/wmf', tif: 'image/tiff', tiff: 'image/tiff', bmp: 'image/bmp',
15
+ };
16
+ function readText(files, path) {
17
+ const bytes = files[path];
18
+ return bytes ? strFromU8(bytes) : undefined;
19
+ }
20
+ function readXml(files, path) {
21
+ const text = readText(files, path);
22
+ if (text === undefined)
23
+ return undefined;
24
+ try {
25
+ return parseXml(text);
26
+ }
27
+ catch {
28
+ return undefined;
29
+ }
30
+ }
31
+ /** Resolve a relationship target against the part that owns it. */
32
+ function resolvePath(base, target) {
33
+ if (target.startsWith('/'))
34
+ return target.slice(1);
35
+ const parts = base.split('/').slice(0, -1);
36
+ for (const seg of target.split('/')) {
37
+ if (seg === '..')
38
+ parts.pop();
39
+ else if (seg !== '.')
40
+ parts.push(seg);
41
+ }
42
+ return parts.join('/');
43
+ }
44
+ function readRels(files, partPath) {
45
+ const dir = partPath.split('/').slice(0, -1).join('/');
46
+ const name = partPath.split('/').pop();
47
+ const relsPath = `${dir ? `${dir}/` : ''}_rels/${name}.rels`;
48
+ const root = readXml(files, relsPath);
49
+ const out = new Map();
50
+ for (const rel of children(root, 'Relationship')) {
51
+ const id = rel.attrs.Id;
52
+ const target = rel.attrs.Target;
53
+ if (!id || target === undefined)
54
+ continue;
55
+ const external = rel.attrs.TargetMode === 'External';
56
+ out.set(id, { type: (rel.attrs.Type ?? '').split('/').pop() ?? '', target: external ? target : resolvePath(partPath, target), external });
57
+ }
58
+ return out;
59
+ }
60
+ // ---------------------------------------------------------------------------
61
+ // Styles and numbering
62
+ // ---------------------------------------------------------------------------
63
+ function runFlags(rPr) {
64
+ if (!rPr)
65
+ return {};
66
+ const va = attr(child(rPr, 'vertAlign'), 'val');
67
+ return {
68
+ bold: onOff(child(rPr, 'b')),
69
+ italic: onOff(child(rPr, 'i')),
70
+ smallCaps: onOff(child(rPr, 'smallCaps')),
71
+ script: va === 'superscript' ? 'sup' : va === 'subscript' ? 'sub' : undefined,
72
+ };
73
+ }
74
+ function readStyles(root) {
75
+ const styles = new Map();
76
+ let defaultParagraph = '';
77
+ for (const s of children(root, 'style')) {
78
+ const id = attr(s, 'styleId');
79
+ const type = attr(s, 'type');
80
+ if (!id || !type)
81
+ continue;
82
+ const name = attr(child(s, 'name'), 'val') ?? id;
83
+ const pPr = child(s, 'pPr');
84
+ const numPr = child(pPr, 'numPr');
85
+ const outline = attr(child(pPr, 'outlineLvl'), 'val');
86
+ const style = {
87
+ id,
88
+ name,
89
+ type,
90
+ basedOn: attr(child(s, 'basedOn'), 'val'),
91
+ ...runFlags(child(s, 'rPr')),
92
+ numId: attr(child(numPr, 'numId'), 'val'),
93
+ ilvl: numPr ? Number(attr(child(numPr, 'ilvl'), 'val') ?? 0) : undefined,
94
+ outlineLevel: outline !== undefined ? Number(outline) : undefined,
95
+ };
96
+ styles.set(id, style);
97
+ const isDefault = s.attrs['w:default'];
98
+ if (type === 'paragraph' && (isDefault === '1' || isDefault === 'true' || isDefault === 'on'))
99
+ defaultParagraph = id;
100
+ }
101
+ return { styles, defaultParagraph };
102
+ }
103
+ function readNumbering(root) {
104
+ const abstracts = new Map();
105
+ for (const a of children(root, 'abstractNum')) {
106
+ const id = attr(a, 'abstractNumId');
107
+ if (id === undefined)
108
+ continue;
109
+ const levels = new Map();
110
+ for (const lvl of children(a, 'lvl')) {
111
+ const ilvl = Number(attr(lvl, 'ilvl') ?? 0);
112
+ levels.set(ilvl, {
113
+ format: attr(child(lvl, 'numFmt'), 'val') ?? 'decimal',
114
+ start: Number(attr(child(lvl, 'start'), 'val') ?? 1),
115
+ });
116
+ }
117
+ abstracts.set(id, levels);
118
+ }
119
+ const nums = new Map();
120
+ for (const n of children(root, 'num')) {
121
+ const id = attr(n, 'numId');
122
+ const abstractId = attr(child(n, 'abstractNumId'), 'val');
123
+ if (id === undefined || abstractId === undefined)
124
+ continue;
125
+ const starts = new Map();
126
+ for (const o of children(n, 'lvlOverride')) {
127
+ const start = attr(child(o, 'startOverride'), 'val');
128
+ if (start !== undefined)
129
+ starts.set(Number(attr(o, 'ilvl') ?? 0), Number(start));
130
+ }
131
+ nums.set(id, { abstractId, starts });
132
+ }
133
+ return { nums, abstracts };
134
+ }
135
+ /** XE field: `XE "Term:Sub" \b \t "See X"`. */
136
+ function parseIndexField(instr) {
137
+ const m = /^\s*XE\s+"((?:[^"\\]|\\.)*)"(.*)$/i.exec(instr);
138
+ if (!m)
139
+ return undefined;
140
+ const term = m[1].replace(/\\(.)/g, '$1').split(':').map((s) => s.trim()).filter(Boolean);
141
+ if (term.length === 0)
142
+ return undefined;
143
+ const rest = m[2] ?? '';
144
+ const see = /\\t\s+"((?:[^"\\]|\\.)*)"/.exec(rest)?.[1];
145
+ return { type: 'index', term, main: /\\b\b/.test(rest) || undefined, see: see?.replace(/^\s*(see|véase|ver)\s+/i, '') };
146
+ }
147
+ function hyperlinkField(instr) {
148
+ const m = /^\s*HYPERLINK\s+"([^"]+)"/i.exec(instr);
149
+ return m && !/\\l\b/.test(instr) ? m[1] : undefined;
150
+ }
151
+ function isManualRun(rPr) {
152
+ if (!rPr)
153
+ return false;
154
+ for (const k of ['rFonts', 'sz', 'color', 'highlight', 'u', 'caps', 'shd', 'spacing', 'strike']) {
155
+ const el = child(rPr, k);
156
+ if (!el)
157
+ continue;
158
+ if (k === 'u' && attr(el, 'val') === 'none')
159
+ continue;
160
+ if (k === 'rFonts' && (attr(el, 'asciiTheme') || attr(el, 'hAnsiTheme')) && !attr(el, 'ascii'))
161
+ continue;
162
+ return true;
163
+ }
164
+ return false;
165
+ }
166
+ function readRun(r, ctx, href, out, deleted) {
167
+ const rPr = child(r, 'rPr');
168
+ const flags = runFlags(rPr);
169
+ const charStyleId = attr(child(rPr, 'rStyle'), 'val');
170
+ const charStyle = charStyleId ? ctx.styles.get(charStyleId)?.name ?? charStyleId : undefined;
171
+ const hidden = onOff(child(rPr, 'vanish')) || undefined;
172
+ const manual = isManualRun(rPr) || undefined;
173
+ // Field state changes inside a run (`w:fldChar`), so it is read per piece.
174
+ const inCode = () => ctx.fields.some((f) => f.phase === 'code');
175
+ const text = (t) => {
176
+ if (!t || deleted || inCode())
177
+ return;
178
+ const fieldHref = [...ctx.fields].reverse().find((f) => f.phase === 'result' && f.href)?.href;
179
+ const last = out[out.length - 1];
180
+ const run = { type: 'text', text: t, ...flags, charStyle, href: href ?? fieldHref, manual, hidden };
181
+ if (last && last.type === 'text' && sameFormat(last, run))
182
+ last.text += t;
183
+ else
184
+ out.push(run);
185
+ };
186
+ for (const c of children(r)) {
187
+ const field = ctx.fields[ctx.fields.length - 1];
188
+ switch (localName(c.name)) {
189
+ case 't':
190
+ text(textOf(c));
191
+ break;
192
+ case 'delText':
193
+ break;
194
+ case 'instrText':
195
+ if (field && field.phase === 'code')
196
+ field.instr += textOf(c);
197
+ break;
198
+ case 'fldChar': {
199
+ const type = attr(c, 'fldCharType');
200
+ if (type === 'begin')
201
+ ctx.fields.push({ instr: '', phase: 'code' });
202
+ else if (type === 'separate' && field) {
203
+ field.phase = 'result';
204
+ field.href = hyperlinkField(field.instr);
205
+ }
206
+ else if (type === 'end' && field) {
207
+ if (field.phase === 'code') {
208
+ // A field with no result: an index entry is the only one we keep.
209
+ const xe = parseIndexField(field.instr);
210
+ ctx.fields.pop();
211
+ if (xe && !deleted)
212
+ out.push(xe);
213
+ }
214
+ else
215
+ ctx.fields.pop();
216
+ }
217
+ break;
218
+ }
219
+ case 'tab':
220
+ case 'ptab':
221
+ if (!deleted && !inCode())
222
+ out.push({ type: 'tab' });
223
+ break;
224
+ case 'br':
225
+ case 'cr': {
226
+ if (deleted || inCode())
227
+ break;
228
+ const kind = attr(c, 'type');
229
+ out.push({ type: 'break', kind: kind === 'page' ? 'page' : kind === 'column' ? 'column' : 'line' });
230
+ break;
231
+ }
232
+ case 'noBreakHyphen':
233
+ text('‑');
234
+ break;
235
+ case 'softHyphen':
236
+ text('­');
237
+ break;
238
+ case 'sym': {
239
+ const code = attr(c, 'char');
240
+ if (code) {
241
+ const n = parseInt(code, 16);
242
+ // Symbol-font code points (F0xx) stand for the ASCII-range glyph.
243
+ text(String.fromCodePoint(n >= 0xf000 && n <= 0xf0ff ? n - 0xf000 : n));
244
+ }
245
+ break;
246
+ }
247
+ case 'footnoteReference':
248
+ case 'endnoteReference': {
249
+ const id = attr(c, 'id');
250
+ if (id && !deleted)
251
+ out.push({ type: 'note', kind: localName(c.name) === 'footnoteReference' ? 'footnote' : 'endnote', id });
252
+ break;
253
+ }
254
+ case 'drawing':
255
+ case 'pict':
256
+ case 'object':
257
+ if (!deleted)
258
+ readDrawing(c, out);
259
+ break;
260
+ case 'AlternateContent': {
261
+ const choice = child(c, 'Choice') ?? child(c, 'Fallback');
262
+ if (choice && !deleted)
263
+ readDrawing(choice, out);
264
+ break;
265
+ }
266
+ default:
267
+ break;
268
+ }
269
+ }
270
+ }
271
+ function sameFormat(a, b) {
272
+ return a.bold === b.bold && a.italic === b.italic && a.smallCaps === b.smallCaps && a.script === b.script
273
+ && a.charStyle === b.charStyle && a.href === b.href && a.manual === b.manual && a.hidden === b.hidden;
274
+ }
275
+ function readDrawing(el, out) {
276
+ const blips = [...descendants(el, 'blip'), ...descendants(el, 'imagedata')];
277
+ const docPr = descendants(el, 'docPr')[0];
278
+ const extent = descendants(el, 'extent')[0];
279
+ for (const b of blips) {
280
+ const rId = b.attrs['r:embed'] ?? b.attrs['r:id'] ?? attr(b, 'embed');
281
+ if (!rId)
282
+ continue;
283
+ out.push({
284
+ type: 'image',
285
+ rId,
286
+ name: docPr?.attrs.name,
287
+ alt: docPr?.attrs.descr || docPr?.attrs.title || undefined,
288
+ widthEmu: extent ? Number(extent.attrs.cx) : undefined,
289
+ heightEmu: extent ? Number(extent.attrs.cy) : undefined,
290
+ });
291
+ break;
292
+ }
293
+ }
294
+ /** The `w:txbxContent` of a run's drawings, the VML fallback copy of a
295
+ * DrawingML box left out. */
296
+ function textBoxContents(el, out = []) {
297
+ for (const c of children(el)) {
298
+ const name = localName(c.name);
299
+ if (name === 'AlternateContent') {
300
+ const branch = child(c, 'Choice') ?? child(c, 'Fallback');
301
+ if (branch)
302
+ textBoxContents(branch, out);
303
+ }
304
+ else if (name === 'txbxContent')
305
+ out.push(c);
306
+ else
307
+ textBoxContents(c, out);
308
+ }
309
+ return out;
310
+ }
311
+ function readParagraphContent(el, ctx, out, href, deleted, boxes) {
312
+ for (const c of children(el)) {
313
+ const name = localName(c.name);
314
+ switch (name) {
315
+ case 'r':
316
+ readRun(c, ctx, href, out, deleted);
317
+ // A text box's paragraphs follow the one it is anchored in.
318
+ if (!deleted)
319
+ for (const box of textBoxContents(c))
320
+ boxes.push(...readBlocks(box, ctx));
321
+ break;
322
+ case 'hyperlink': {
323
+ const rId = c.attrs['r:id'];
324
+ const rel = rId ? ctx.rels.get(rId) : undefined;
325
+ readParagraphContent(c, ctx, out, rel?.external ? rel.target : href, deleted, boxes);
326
+ break;
327
+ }
328
+ case 'ins':
329
+ case 'moveTo':
330
+ ctx.revisions.insertions++;
331
+ readParagraphContent(c, ctx, out, href, deleted, boxes);
332
+ break;
333
+ case 'del':
334
+ case 'moveFrom':
335
+ ctx.revisions.deletions++;
336
+ readParagraphContent(c, ctx, out, href, true, boxes);
337
+ break;
338
+ case 'smartTag':
339
+ case 'customXml':
340
+ case 'sdt':
341
+ case 'sdtContent':
342
+ case 'fldSimple': {
343
+ if (name === 'fldSimple') {
344
+ const instr = attr(c, 'instr') ?? '';
345
+ const xe = parseIndexField(instr);
346
+ if (xe) {
347
+ if (!deleted)
348
+ out.push(xe);
349
+ break;
350
+ }
351
+ readParagraphContent(c, ctx, out, hyperlinkField(instr) ?? href, deleted, boxes);
352
+ break;
353
+ }
354
+ readParagraphContent(name === 'sdt' ? child(c, 'sdtContent') ?? c : c, ctx, out, href, deleted, boxes);
355
+ break;
356
+ }
357
+ case 'oMathPara':
358
+ for (const m of children(c, 'oMath'))
359
+ if (!deleted)
360
+ out.push({ type: 'math', tex: ommlToTex(m), display: true });
361
+ break;
362
+ case 'oMath':
363
+ if (!deleted)
364
+ out.push({ type: 'math', tex: ommlToTex(c), display: false });
365
+ break;
366
+ case 'commentRangeStart':
367
+ ctx.revisions.comments++;
368
+ break;
369
+ default:
370
+ break;
371
+ }
372
+ }
373
+ }
374
+ function readParagraph(p, ctx) {
375
+ const pPr = child(p, 'pPr');
376
+ const styleId = attr(child(pPr, 'pStyle'), 'val') ?? '';
377
+ const numPr = child(pPr, 'numPr');
378
+ let list;
379
+ const numId = attr(child(numPr, 'numId'), 'val');
380
+ if (numId !== undefined) {
381
+ if (numId !== '0')
382
+ list = { numId, ilvl: Number(attr(child(numPr, 'ilvl'), 'val') ?? 0) };
383
+ }
384
+ else {
385
+ // Numbering inherited from the style chain (`List Bullet`).
386
+ let s = styleId ? ctx.styles.get(styleId) : undefined;
387
+ for (let guard = 0; s && guard < 12; guard++) {
388
+ if (s.numId !== undefined) {
389
+ if (s.numId !== '0')
390
+ list = { numId: s.numId, ilvl: s.ilvl ?? 0 };
391
+ break;
392
+ }
393
+ s = s.basedOn ? ctx.styles.get(s.basedOn) : undefined;
394
+ }
395
+ }
396
+ const manualLayout = !!pPr && ['jc', 'ind', 'spacing'].some((k) => child(pPr, k) !== undefined) || undefined;
397
+ const runs = [];
398
+ const boxes = [];
399
+ readParagraphContent(p, ctx, runs, undefined, false, boxes);
400
+ const para = {
401
+ type: 'paragraph',
402
+ styleId,
403
+ runs,
404
+ ...(list ? { list } : {}),
405
+ ...(onOff(child(pPr, 'pageBreakBefore')) ? { pageBreakBefore: true } : {}),
406
+ ...(manualLayout ? { manualLayout } : {}),
407
+ ...(boxes.length ? { textBoxes: boxes } : {}),
408
+ };
409
+ // A paragraph whose mark is a tracked deletion merges into the next one;
410
+ // the text is what matters here, so it stays a paragraph of its own.
411
+ return [para];
412
+ }
413
+ function readTable(tbl, ctx) {
414
+ const rows = [];
415
+ let headerRows = 0;
416
+ let headerRun = true;
417
+ for (const tr of children(tbl, 'tr')) {
418
+ const trPr = child(tr, 'trPr');
419
+ const isHeader = onOff(child(trPr, 'tblHeader')) === true;
420
+ if (isHeader && headerRun)
421
+ headerRows++;
422
+ else
423
+ headerRun = false;
424
+ const row = [];
425
+ for (const tc of children(tr, 'tc')) {
426
+ const tcPr = child(tc, 'tcPr');
427
+ const span = Number(attr(child(tcPr, 'gridSpan'), 'val') ?? 1);
428
+ const vm = child(tcPr, 'vMerge');
429
+ const vMerge = vm ? (attr(vm, 'val') === 'restart' ? 'restart' : 'continue') : undefined;
430
+ const fill = attr(child(tcPr, 'shd'), 'fill');
431
+ row.push({
432
+ blocks: readBlocks(tc, ctx),
433
+ colSpan: Number.isFinite(span) && span > 1 ? span : 1,
434
+ ...(vMerge ? { vMerge } : {}),
435
+ ...(fill && fill !== 'auto' && /^[0-9a-fA-F]{6}$/.test(fill) && fill.toLowerCase() !== 'ffffff' ? { shading: `#${fill.toLowerCase()}` } : {}),
436
+ });
437
+ }
438
+ rows.push(row);
439
+ }
440
+ const widths = children(child(tbl, 'tblGrid'), 'gridCol').map((g) => Number(attr(g, 'w') ?? 0));
441
+ return { type: 'table', rows, headerRows, ...(widths.length && widths.every((w) => w > 0) ? { widths } : {}) };
442
+ }
443
+ function readBlocks(container, ctx) {
444
+ const out = [];
445
+ const visit = (el, deleted = false) => {
446
+ for (const c of children(el)) {
447
+ switch (localName(c.name)) {
448
+ case 'p':
449
+ if (!deleted)
450
+ out.push(...readParagraph(c, ctx));
451
+ break;
452
+ case 'tbl':
453
+ if (!deleted)
454
+ out.push(readTable(c, ctx));
455
+ break;
456
+ case 'sdt':
457
+ visit(child(c, 'sdtContent') ?? c, deleted);
458
+ break;
459
+ case 'customXml':
460
+ case 'sdtContent':
461
+ visit(c, deleted);
462
+ break;
463
+ case 'ins':
464
+ case 'moveTo':
465
+ visit(c, deleted);
466
+ break;
467
+ case 'del':
468
+ case 'moveFrom':
469
+ visit(c, true);
470
+ break;
471
+ case 'AlternateContent':
472
+ visit(child(c, 'Choice') ?? child(c, 'Fallback') ?? c, deleted);
473
+ break;
474
+ default:
475
+ break;
476
+ }
477
+ }
478
+ };
479
+ visit(container);
480
+ return out;
481
+ }
482
+ function readNotes(files, path, ctx, local) {
483
+ const out = new Map();
484
+ if (!path)
485
+ return out;
486
+ const root = readXml(files, path);
487
+ if (!root)
488
+ return out;
489
+ const rels = readRels(files, path);
490
+ const noteCtx = { ...ctx, rels, fields: [] };
491
+ for (const n of children(root, local)) {
492
+ const id = attr(n, 'id');
493
+ const type = attr(n, 'type');
494
+ if (!id || (type && type !== 'normal'))
495
+ continue;
496
+ const blocks = readBlocks(n, noteCtx);
497
+ // The note's own number (`w:footnoteRef`) is no text.
498
+ out.set(id, blocks);
499
+ }
500
+ return out;
501
+ }
502
+ function readCore(files) {
503
+ const root = readXml(files, 'docProps/core.xml');
504
+ if (!root)
505
+ return {};
506
+ const title = child(root, 'title');
507
+ const creator = child(root, 'creator');
508
+ return {
509
+ title: title ? textOf(title).trim() || undefined : undefined,
510
+ author: creator ? textOf(creator).trim() || undefined : undefined,
511
+ };
512
+ }
513
+ function readEmbeddedTemplate(files) {
514
+ for (const path of Object.keys(files)) {
515
+ if (!/^customXml\/item\d+\.xml$/.test(path))
516
+ continue;
517
+ const text = readText(files, path);
518
+ if (!text || !text.includes(TEMPLATE_XML_ROOT))
519
+ continue;
520
+ try {
521
+ const root = parseXml(text);
522
+ if (localName(root.name) !== TEMPLATE_XML_ROOT)
523
+ continue;
524
+ return JSON.parse(textOf(root));
525
+ }
526
+ catch {
527
+ return undefined;
528
+ }
529
+ }
530
+ return undefined;
531
+ }
532
+ /** Read a `.docx` file's bytes. Throws {@link DocxReadError} when it is not a
533
+ * Word document (an old binary `.doc`, a renamed file, a broken zip). */
534
+ export function readDocx(data) {
535
+ let files;
536
+ try {
537
+ files = unzipSync(data instanceof Uint8Array ? data : new Uint8Array(data));
538
+ }
539
+ catch {
540
+ throw new DocxReadError('not a zip');
541
+ }
542
+ const pkgRels = readRels(files, '');
543
+ const officeDoc = [...pkgRels.values()].find((r) => r.type === 'officeDocument');
544
+ const docPath = officeDoc?.target ?? 'word/document.xml';
545
+ const docRoot = readXml(files, docPath);
546
+ const body = child(docRoot, 'body');
547
+ if (!docRoot || !body)
548
+ throw new DocxReadError('no document part');
549
+ const rels = readRels(files, docPath);
550
+ const partOf = (type) => [...rels.values()].find((r) => r.type === type)?.target;
551
+ const { styles, defaultParagraph } = readStyles(readXml(files, partOf('styles') ?? 'word/styles.xml'));
552
+ const numbering = readNumbering(readXml(files, partOf('numbering') ?? 'word/numbering.xml'));
553
+ const revisions = { insertions: 0, deletions: 0, comments: 0 };
554
+ const ctx = { rels, styles, revisions, fields: [] };
555
+ const blocks = readBlocks(body, ctx);
556
+ const footnotes = readNotes(files, partOf('footnotes'), ctx, 'footnote');
557
+ const endnotes = readNotes(files, partOf('endnotes'), ctx, 'endnote');
558
+ const media = new Map();
559
+ const collectMedia = (relMap) => {
560
+ for (const [id, rel] of relMap) {
561
+ if (rel.type !== 'image' || rel.external || media.has(id))
562
+ continue;
563
+ const bytes = files[rel.target];
564
+ if (!bytes)
565
+ continue;
566
+ const ext = rel.target.split('.').pop()?.toLowerCase() ?? '';
567
+ media.set(id, { path: rel.target, bytes, contentType: MEDIA_TYPES[ext] ?? 'application/octet-stream' });
568
+ }
569
+ };
570
+ collectMedia(rels);
571
+ return {
572
+ blocks,
573
+ styles,
574
+ defaultParagraphStyle: defaultParagraph,
575
+ numbering,
576
+ footnotes,
577
+ endnotes,
578
+ media,
579
+ ...readCore(files),
580
+ embeddedTemplate: readEmbeddedTemplate(files),
581
+ revisions,
582
+ };
583
+ }
584
+ //# sourceMappingURL=docxRead.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docxRead.js","sourceRoot":"","sources":["../../src/word/docxRead.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export { readDocx, DocxReadError, TEMPLATE_XML_ROOT, TEMPLATE_XML_NS } from './docxRead';
2
+ export { wordToPostext, paragraphTargetOf, characterTargetOf, stripCaptionLabel, tableModel } from './toMarkdown';
3
+ export type { ChapterMode, ImportedPicture, ImportedTable, ImportedChapter, ImportResult, ImportSettings } from './toMarkdown';
4
+ export { postextToDocx, DEFAULT_STYLE_NAMES } from './toDocx';
5
+ export type { ExportChapter, WordStyleNames, ExportSettings } from './toDocx';
6
+ export { analyzeDocx } from './analyze';
7
+ export type { StyleUse, FindingId, QualityFinding, QualityVerdict, QualityReport } from './analyze';
8
+ export { DEFAULT_IMPORT_OPTIONS, MARKUP_STYLE, MARKUP_CHAR_STYLE, CHAPTER_STYLE, emptyTemplate, calloutStylesOf, chipStylesOf, displayStyleName, lookup, guessParagraphTarget, guessCharacterTarget, parseTemplate, templateFile, newTemplateId, } from './template';
9
+ export type { ParagraphTarget, CharacterTarget, ParagraphTargetKind, CharacterTargetKind, WordImportOptions, WordTemplate } from './template';
10
+ export { parseInline, renderInline } from './inline';
11
+ export type { InlineRun, ParseInlineOptions } from './inline';
12
+ export { paragraphStyleName, paragraphText } from './model';
13
+ export type { WordStyleType, WordStyle, WordTextRun, WordRun, WordParagraph, WordCell, WordTable, WordBlock, WordNumberingLevel, WordNumbering, WordMedia, WordDocument, } from './model';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/word/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAClH,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC/H,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC9D,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACpG,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,MAAM,EACN,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC9I,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACrD,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5D,YAAY,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,OAAO,EACP,aAAa,EACb,QAAQ,EACR,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,YAAY,GACb,MAAM,SAAS,CAAC"}
@@ -0,0 +1,12 @@
1
+ // Word documents in and out (#599): read a `.docx` into Postext Markdown
2
+ // with a style template and a quality report, and write chapters back to a
3
+ // `.docx` that carries the template for the round trip. Pure code (fflate
4
+ // and a small XML reader): runs in the browser, a Worker and Node.
5
+ export { readDocx, DocxReadError, TEMPLATE_XML_ROOT, TEMPLATE_XML_NS } from './docxRead';
6
+ export { wordToPostext, paragraphTargetOf, characterTargetOf, stripCaptionLabel, tableModel } from './toMarkdown';
7
+ export { postextToDocx, DEFAULT_STYLE_NAMES } from './toDocx';
8
+ export { analyzeDocx } from './analyze';
9
+ export { DEFAULT_IMPORT_OPTIONS, MARKUP_STYLE, MARKUP_CHAR_STYLE, CHAPTER_STYLE, emptyTemplate, calloutStylesOf, chipStylesOf, displayStyleName, lookup, guessParagraphTarget, guessCharacterTarget, parseTemplate, templateFile, newTemplateId, } from './template';
10
+ export { parseInline, renderInline } from './inline';
11
+ export { paragraphStyleName, paragraphText } from './model';
12
+ //# sourceMappingURL=index.js.map