@unisim/doc 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +91 -0
  2. package/dist/convert.d.ts +54 -0
  3. package/dist/convert.d.ts.map +1 -0
  4. package/dist/convert.js +216 -0
  5. package/dist/convert.js.map +1 -0
  6. package/dist/image.d.ts +17 -0
  7. package/dist/image.d.ts.map +1 -0
  8. package/dist/image.js +66 -0
  9. package/dist/image.js.map +1 -0
  10. package/dist/index.d.ts +10 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +51 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/merge.d.ts +14 -0
  15. package/dist/merge.d.ts.map +1 -0
  16. package/dist/merge.js +51 -0
  17. package/dist/merge.js.map +1 -0
  18. package/dist/metrics.d.ts +19 -0
  19. package/dist/metrics.d.ts.map +1 -0
  20. package/dist/metrics.js +151 -0
  21. package/dist/metrics.js.map +1 -0
  22. package/dist/model.d.ts +114 -0
  23. package/dist/model.d.ts.map +1 -0
  24. package/dist/model.js +121 -0
  25. package/dist/model.js.map +1 -0
  26. package/dist/pdfcore.d.ts +118 -0
  27. package/dist/pdfcore.d.ts.map +1 -0
  28. package/dist/pdfcore.js +398 -0
  29. package/dist/pdfcore.js.map +1 -0
  30. package/dist/read/csv.d.ts +17 -0
  31. package/dist/read/csv.d.ts.map +1 -0
  32. package/dist/read/csv.js +167 -0
  33. package/dist/read/csv.js.map +1 -0
  34. package/dist/read/doc.d.ts +3 -0
  35. package/dist/read/doc.d.ts.map +1 -0
  36. package/dist/read/doc.js +360 -0
  37. package/dist/read/doc.js.map +1 -0
  38. package/dist/read/docx.d.ts +3 -0
  39. package/dist/read/docx.d.ts.map +1 -0
  40. package/dist/read/docx.js +455 -0
  41. package/dist/read/docx.js.map +1 -0
  42. package/dist/read/html.d.ts +4 -0
  43. package/dist/read/html.d.ts.map +1 -0
  44. package/dist/read/html.js +236 -0
  45. package/dist/read/html.js.map +1 -0
  46. package/dist/read/json.d.ts +9 -0
  47. package/dist/read/json.d.ts.map +1 -0
  48. package/dist/read/json.js +105 -0
  49. package/dist/read/json.js.map +1 -0
  50. package/dist/read/markdown.d.ts +4 -0
  51. package/dist/read/markdown.d.ts.map +1 -0
  52. package/dist/read/markdown.js +247 -0
  53. package/dist/read/markdown.js.map +1 -0
  54. package/dist/read/odt.d.ts +3 -0
  55. package/dist/read/odt.d.ts.map +1 -0
  56. package/dist/read/odt.js +359 -0
  57. package/dist/read/odt.js.map +1 -0
  58. package/dist/read/rtf.d.ts +3 -0
  59. package/dist/read/rtf.d.ts.map +1 -0
  60. package/dist/read/rtf.js +341 -0
  61. package/dist/read/rtf.js.map +1 -0
  62. package/dist/read/text.d.ts +4 -0
  63. package/dist/read/text.d.ts.map +1 -0
  64. package/dist/read/text.js +62 -0
  65. package/dist/read/text.js.map +1 -0
  66. package/dist/unzip.d.ts +23 -0
  67. package/dist/unzip.d.ts.map +1 -0
  68. package/dist/unzip.js +152 -0
  69. package/dist/unzip.js.map +1 -0
  70. package/dist/write/data.d.ts +16 -0
  71. package/dist/write/data.d.ts.map +1 -0
  72. package/dist/write/data.js +89 -0
  73. package/dist/write/data.js.map +1 -0
  74. package/dist/write/pdf.d.ts +10 -0
  75. package/dist/write/pdf.d.ts.map +1 -0
  76. package/dist/write/pdf.js +696 -0
  77. package/dist/write/pdf.js.map +1 -0
  78. package/dist/write/pdfSettings.d.ts +13 -0
  79. package/dist/write/pdfSettings.d.ts.map +1 -0
  80. package/dist/write/pdfSettings.js +26 -0
  81. package/dist/write/pdfSettings.js.map +1 -0
  82. package/dist/write/text.d.ts +5 -0
  83. package/dist/write/text.d.ts.map +1 -0
  84. package/dist/write/text.js +341 -0
  85. package/dist/write/text.js.map +1 -0
  86. package/dist/xml.d.ts +22 -0
  87. package/dist/xml.d.ts.map +1 -0
  88. package/dist/xml.js +83 -0
  89. package/dist/xml.js.map +1 -0
  90. package/package.json +31 -0
@@ -0,0 +1,3 @@
1
+ import { type RichDoc } from '../model.js';
2
+ export declare function readOdt(file: File): Promise<RichDoc>;
3
+ //# sourceMappingURL=odt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odt.d.ts","sourceRoot":"","sources":["../../src/read/odt.ts"],"names":[],"mappings":"AAoBA,OAAO,EAEsB,KAAK,OAAO,EACxC,MAAM,aAAa,CAAA;AAmBpB,wBAAsB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAyB1D"}
@@ -0,0 +1,359 @@
1
+ // ---------------------------------------------------------------------------
2
+ // ODT (OpenDocument Text) → RichDoc.
3
+ //
4
+ // LibreOffice's and OpenOffice's native format, and what Google Docs gives you
5
+ // if you ask for anything other than .docx. Structurally it is the same bargain
6
+ // as DOCX — a ZIP of XML — which is why it cost one file rather than a rewrite:
7
+ // the reader below is the same shape as `docx.ts`, over a vocabulary that is
8
+ // mostly nicer.
9
+ //
10
+ // TWO PLACES IT IS GENUINELY EASIER THAN DOCX
11
+ // -------------------------------------------
12
+ // * `<text:h text:outline-level="2">` says it is a heading and how deep,
13
+ // in the element itself. No style table, no three-way heuristic.
14
+ // * `<text:list>` is a real element that CONTAINS its items, rather than
15
+ // DOCX's run of sibling paragraphs that happen to share a numbering id.
16
+ //
17
+ // And one where it is worse: whether a list is bulleted or numbered lives in
18
+ // the list's STYLE, in a different part of the file, so that lookup comes back.
19
+ // ---------------------------------------------------------------------------
20
+ import { addNotice, mergeRuns, tidy, } from '../model.js';
21
+ import { ZipArchive } from '../unzip.js';
22
+ import { attr, child, children, descendant, descendants, parseXml } from '../xml.js';
23
+ const OFFICE = 'urn:oasis:names:tc:opendocument:xmlns:office:1.0';
24
+ const TEXT = 'urn:oasis:names:tc:opendocument:xmlns:text:1.0';
25
+ const TABLE = 'urn:oasis:names:tc:opendocument:xmlns:table:1.0';
26
+ const DRAW = 'urn:oasis:names:tc:opendocument:xmlns:drawing:1.0';
27
+ const STYLE = 'urn:oasis:names:tc:opendocument:xmlns:style:1.0';
28
+ const FO = 'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0';
29
+ const XLINK = 'http://www.w3.org/1999/xlink';
30
+ const DC = 'http://purl.org/dc/elements/1.1/';
31
+ const META = 'urn:oasis:names:tc:opendocument:xmlns:meta:1.0';
32
+ const IMAGE_MIME = {
33
+ png: 'image/png', jpg: 'image/jpeg', jpeg: 'image/jpeg', gif: 'image/gif',
34
+ bmp: 'image/bmp', webp: 'image/webp', svg: 'image/svg+xml',
35
+ };
36
+ export async function readOdt(file) {
37
+ const zip = await ZipArchive.open(file);
38
+ const contentXml = await zip.textOf('content.xml');
39
+ if (!contentXml)
40
+ throw new Error('This isn’t an OpenDocument file inside — `content.xml` is missing.');
41
+ const doc = { blocks: [], notices: [] };
42
+ const content = parseXml(contentXml, 'content');
43
+ const styles = readTextStyles(content, await zip.textOf('styles.xml'));
44
+ await readMeta(zip, doc);
45
+ const body = descendant(content, OFFICE, 'text');
46
+ if (!body)
47
+ throw new Error('This OpenDocument file has no text body.');
48
+ const ctx = { zip, styles, breakBefore: pageBreakStyles.get(content) ?? new Set(), doc };
49
+ await readBlocks(body, ctx, doc.blocks);
50
+ if (descendant(content, TEXT, 'note')) {
51
+ addNotice(doc, 'Footnotes were left out — this repaginates, so their page anchors no longer apply.');
52
+ }
53
+ if (descendant(content, DRAW, 'object')) {
54
+ addNotice(doc, 'A chart or embedded object was left out — those aren’t pictures, and can’t be drawn here.');
55
+ }
56
+ return tidy(doc);
57
+ }
58
+ /**
59
+ * Paragraph style names carrying `fo:break-before="page"`.
60
+ *
61
+ * Kept in a module-level map keyed by the content document for the same reason
62
+ * `spanFormats` is: `readTextStyles` scans both style parts in one pass and can
63
+ * only return one thing.
64
+ */
65
+ const pageBreakStyles = new WeakMap();
66
+ async function readBlocks(root, ctx, out) {
67
+ for (const node of Array.from(root.childNodes)) {
68
+ if (node.nodeType !== 1)
69
+ continue;
70
+ const el = node;
71
+ if (el.namespaceURI === TEXT) {
72
+ switch (el.localName) {
73
+ case 'h': {
74
+ const raw = Number(attr(el, TEXT, 'outline-level') ?? '1');
75
+ const level = Math.min(4, Math.max(1, Number.isFinite(raw) ? raw : 1));
76
+ out.push({ kind: 'heading', level, runs: mergeRuns(await readRuns(el, ctx)) });
77
+ continue;
78
+ }
79
+ case 'p': {
80
+ const runs = mergeRuns(await readRuns(el, ctx));
81
+ const images = await readImages(el, ctx);
82
+ const styleName = attr(el, TEXT, 'style-name') ?? '';
83
+ // ⚠️ A HARD page break in ODF is a PARAGRAPH PROPERTY, not an element:
84
+ // `fo:break-before="page"` on the style this paragraph uses. Only the
85
+ // *soft* break — where LibreOffice's own layout happened to land last
86
+ // time — appears in the body, and that one is ignored. Reading only
87
+ // the body therefore loses every deliberate page break in the file.
88
+ if (ctx.breakBefore.has(styleName))
89
+ out.push({ kind: 'pagebreak' });
90
+ if (runs.length) {
91
+ out.push(/quotation|blockquote/i.test(styleName)
92
+ ? { kind: 'quote', runs }
93
+ : { kind: 'paragraph', runs });
94
+ }
95
+ else if (!images.length) {
96
+ out.push({ kind: 'paragraph', runs: [{ text: ' ' }] });
97
+ }
98
+ out.push(...images);
99
+ continue;
100
+ }
101
+ case 'list':
102
+ case 'numbered-paragraph': {
103
+ const items = [];
104
+ await readListItems(el, ctx, items, 0);
105
+ if (items.length) {
106
+ const styleName = attr(el, TEXT, 'style-name') ?? '';
107
+ out.push({ kind: 'list', ordered: ctx.styles.get(styleName) ?? false, items });
108
+ }
109
+ continue;
110
+ }
111
+ case 'section':
112
+ case 'list-header':
113
+ await readBlocks(el, ctx, out);
114
+ continue;
115
+ case 'soft-page-break':
116
+ // A RENDERING artefact — where LibreOffice's own layout happened to
117
+ // break the page last time it was opened, not an instruction. Honouring
118
+ // it would scatter page breaks through a document that has none.
119
+ continue;
120
+ default:
121
+ continue;
122
+ }
123
+ }
124
+ if (el.namespaceURI === TABLE && el.localName === 'table') {
125
+ out.push(await readTable(el, ctx));
126
+ continue;
127
+ }
128
+ if (el.namespaceURI === TEXT && el.localName === 'table-of-content')
129
+ continue;
130
+ }
131
+ }
132
+ /** Items, recursing into nested lists so indentation survives. */
133
+ async function readListItems(list, ctx, out, level) {
134
+ for (const item of children(list, TEXT, 'list-item')) {
135
+ for (const node of Array.from(item.childNodes)) {
136
+ if (node.nodeType !== 1)
137
+ continue;
138
+ const el = node;
139
+ if (el.namespaceURI !== TEXT)
140
+ continue;
141
+ if (el.localName === 'p' || el.localName === 'h') {
142
+ out.push({ runs: mergeRuns(await readRuns(el, ctx)), level });
143
+ }
144
+ else if (el.localName === 'list') {
145
+ await readListItems(el, ctx, out, Math.min(4, level + 1));
146
+ }
147
+ }
148
+ }
149
+ }
150
+ /**
151
+ * Inline content.
152
+ *
153
+ * The one thing worth knowing: ODF does not put runs of spaces in the text.
154
+ * `<text:s text:c="4"/>` means four of them, because XML would collapse the
155
+ * literal characters. Miss it and indented code inside a document loses its
156
+ * shape entirely.
157
+ */
158
+ async function readRuns(parent, ctx, inherited = {}) {
159
+ const out = [];
160
+ for (const node of Array.from(parent.childNodes)) {
161
+ if (node.nodeType === 3) {
162
+ out.push({ ...inherited, text: node.nodeValue ?? '' });
163
+ continue;
164
+ }
165
+ if (node.nodeType !== 1)
166
+ continue;
167
+ const el = node;
168
+ if (el.namespaceURI !== TEXT)
169
+ continue;
170
+ switch (el.localName) {
171
+ case 'span':
172
+ out.push(...(await readRuns(el, ctx, { ...inherited, ...spanFormat(el) })));
173
+ break;
174
+ case 'a': {
175
+ const href = attr(el, XLINK, 'href') ?? undefined;
176
+ // Same rule as DOCX: only a link that leaves the document survives.
177
+ const external = href && !href.startsWith('#') ? href : undefined;
178
+ out.push(...(await readRuns(el, ctx, { ...inherited, link: external })));
179
+ break;
180
+ }
181
+ case 's': {
182
+ const count = Number(attr(el, TEXT, 'c') ?? '1');
183
+ out.push({ ...inherited, text: ' '.repeat(Number.isFinite(count) ? Math.min(count, 200) : 1) });
184
+ break;
185
+ }
186
+ case 'tab':
187
+ out.push({ ...inherited, text: ' ' });
188
+ break;
189
+ case 'line-break':
190
+ out.push({ ...inherited, text: '\n' });
191
+ break;
192
+ case 'note':
193
+ // Skipped deliberately — see the notice raised in `readOdt`.
194
+ break;
195
+ case 'bookmark':
196
+ case 'bookmark-start':
197
+ case 'bookmark-end':
198
+ case 'sequence-decls':
199
+ break;
200
+ default:
201
+ out.push(...(await readRuns(el, ctx, inherited)));
202
+ break;
203
+ }
204
+ }
205
+ return out;
206
+ }
207
+ /**
208
+ * The formatting a `<text:span>` carries.
209
+ *
210
+ * ODF holds it in an automatic style in the same file, so the span names a
211
+ * style and the style names the weight. `styleFormats` is built once up front
212
+ * because a document of any size names the same handful over and over.
213
+ */
214
+ const spanFormats = new WeakMap();
215
+ function spanFormat(el) {
216
+ const name = attr(el, TEXT, 'style-name');
217
+ if (!name)
218
+ return {};
219
+ return spanFormats.get(el.ownerDocument)?.get(name) ?? {};
220
+ }
221
+ /**
222
+ * Read both style parts.
223
+ *
224
+ * Two maps in one pass, keyed differently so they can share a return: list
225
+ * style name → is-numbered, and (in the WeakMap above) text style name → run
226
+ * formatting. Automatic styles live in `content.xml`, named ones in
227
+ * `styles.xml`, and a document uses both.
228
+ */
229
+ function readTextStyles(content, stylesXml) {
230
+ const ordered = new Map();
231
+ const runs = new Map();
232
+ const breaks = new Set();
233
+ const scan = (doc) => {
234
+ for (const style of descendants(doc, TEXT, 'list-style')) {
235
+ const name = attr(style, STYLE, 'name');
236
+ if (!name)
237
+ continue;
238
+ // A numbered list declares `<text:list-level-style-number>`; a bulleted
239
+ // one declares `…-bullet`. Level 1 decides for the whole list.
240
+ ordered.set(name, descendant(style, TEXT, 'list-level-style-number') !== null);
241
+ }
242
+ for (const style of descendants(doc, STYLE, 'style')) {
243
+ const name = attr(style, STYLE, 'name');
244
+ if (!name)
245
+ continue;
246
+ if (attr(style, STYLE, 'family') === 'paragraph') {
247
+ const paragraphProps = child(style, STYLE, 'paragraph-properties');
248
+ // 'page' and 'column' are the two values; only 'page' is a page break.
249
+ if (paragraphProps && attr(paragraphProps, FO, 'break-before') === 'page') {
250
+ breaks.add(name);
251
+ }
252
+ }
253
+ if (attr(style, STYLE, 'family') !== 'text')
254
+ continue;
255
+ const props = child(style, STYLE, 'text-properties');
256
+ if (!props)
257
+ continue;
258
+ const format = {};
259
+ if ((attr(props, FO, 'font-weight') ?? '') === 'bold')
260
+ format.bold = true;
261
+ if (/italic|oblique/.test(attr(props, FO, 'font-style') ?? ''))
262
+ format.italic = true;
263
+ const underline = attr(props, STYLE, 'text-underline-style') ?? 'none';
264
+ if (underline !== 'none')
265
+ format.underline = true;
266
+ const strike = attr(props, STYLE, 'text-line-through-style') ?? 'none';
267
+ if (strike !== 'none')
268
+ format.strike = true;
269
+ const family = attr(props, STYLE, 'font-name') ?? attr(props, FO, 'font-family') ?? '';
270
+ if (/mono|courier|consolas|menlo/i.test(family))
271
+ format.code = true;
272
+ if (Object.keys(format).length)
273
+ runs.set(name, format);
274
+ }
275
+ };
276
+ scan(content);
277
+ // `styles.xml` holds the NAMED styles a document defines; `content.xml` holds
278
+ // the AUTOMATIC ones LibreOffice generates per paragraph. A file uses both,
279
+ // and a page break almost always lands on an automatic style — so scanning
280
+ // only the named part finds nothing.
281
+ if (stylesXml)
282
+ scan(parseXml(stylesXml, 'styles'));
283
+ // Both parts feed the same maps, keyed off `content`'s document, because that
284
+ // is the one every element the readers touch actually belongs to.
285
+ spanFormats.set(content, runs);
286
+ pageBreakStyles.set(content, breaks);
287
+ return ordered;
288
+ }
289
+ async function readTable(el, ctx) {
290
+ const rows = [];
291
+ // `table:table-header-rows` wraps the header when there is one; its rows are
292
+ // ordinary `table-row`s one level down, so both are collected.
293
+ const rowElements = [
294
+ ...descendants(el, TABLE, 'table-row'),
295
+ ];
296
+ const headerRows = new Set(children(el, TABLE, 'table-header-rows').flatMap((h) => descendants(h, TABLE, 'table-row')));
297
+ let headerCount = 0;
298
+ for (const tr of rowElements) {
299
+ const cells = [];
300
+ for (const tc of children(tr, TABLE, 'table-cell')) {
301
+ const runs = [];
302
+ for (const p of [...children(tc, TEXT, 'p'), ...children(tc, TEXT, 'h')]) {
303
+ if (runs.length)
304
+ runs.push({ text: '\n' });
305
+ runs.push(...(await readRuns(p, ctx)));
306
+ }
307
+ // A repeated cell is how ODF stores a run of identical ones — usually the
308
+ // empty tail of a row. Expanded, but capped: a spreadsheet-shaped ODT can
309
+ // claim 16,384 repeats of one blank cell, and honouring that literally
310
+ // builds a table nothing can lay out.
311
+ const repeat = Math.min(Number(attr(tc, TABLE, 'number-columns-repeated') ?? '1') || 1, 64);
312
+ for (let i = 0; i < repeat; i += 1)
313
+ cells.push(mergeRuns(runs));
314
+ }
315
+ if (cells.length) {
316
+ rows.push(cells);
317
+ if (headerRows.has(tr))
318
+ headerCount += 1;
319
+ }
320
+ }
321
+ if (!rows.length)
322
+ return { kind: 'paragraph', runs: [{ text: ' ' }] };
323
+ const useHeader = headerCount > 0 || rows.length > 1;
324
+ return {
325
+ kind: 'table',
326
+ header: useHeader ? rows[0] : null,
327
+ rows: useHeader ? rows.slice(1) : rows,
328
+ };
329
+ }
330
+ async function readImages(el, ctx) {
331
+ const out = [];
332
+ for (const image of descendants(el, DRAW, 'image')) {
333
+ const href = attr(image, XLINK, 'href');
334
+ if (!href || href.startsWith('http'))
335
+ continue;
336
+ const path = href.replace(/^\.\//, '');
337
+ const ext = path.split('.').pop()?.toLowerCase() ?? '';
338
+ const blob = await ctx.zip.blobOf(path, IMAGE_MIME[ext] ?? 'application/octet-stream');
339
+ if (blob) {
340
+ const frame = image.parentElement;
341
+ const alt = frame ? descendant(frame, SVG_NS, 'title')?.textContent ?? '' : '';
342
+ out.push({ kind: 'image', file: blob, alt });
343
+ }
344
+ }
345
+ return out;
346
+ }
347
+ const SVG_NS = 'urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0';
348
+ async function readMeta(zip, doc) {
349
+ const xml = await zip.textOf('meta.xml');
350
+ if (!xml)
351
+ return;
352
+ const meta = parseXml(xml, 'metadata');
353
+ doc.title = descendant(meta, DC, 'title')?.textContent?.trim() || undefined;
354
+ doc.author =
355
+ descendant(meta, META, 'initial-creator')?.textContent?.trim() ||
356
+ descendant(meta, DC, 'creator')?.textContent?.trim() ||
357
+ undefined;
358
+ }
359
+ //# sourceMappingURL=odt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odt.js","sourceRoot":"","sources":["../../src/read/odt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type RichDoc } from '../model.js';
2
+ export declare function readRtf(file: File): Promise<RichDoc>;
3
+ //# sourceMappingURL=rtf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtf.d.ts","sourceRoot":"","sources":["../../src/read/rtf.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAyD,KAAK,OAAO,EAAY,MAAM,aAAa,CAAA;AA0B3G,wBAAsB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAgP1D"}