@doxi/docx 0.11.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 (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +59 -0
  3. package/dist/blocks.d.ts +30 -0
  4. package/dist/blocks.d.ts.map +1 -0
  5. package/dist/blocks.js +69 -0
  6. package/dist/blocks.js.map +1 -0
  7. package/dist/export.d.ts +41 -0
  8. package/dist/export.d.ts.map +1 -0
  9. package/dist/export.js +70 -0
  10. package/dist/export.js.map +1 -0
  11. package/dist/import.d.ts +35 -0
  12. package/dist/import.d.ts.map +1 -0
  13. package/dist/import.js +156 -0
  14. package/dist/import.js.map +1 -0
  15. package/dist/index.d.ts +4 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +4 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/inline.d.ts +15 -0
  20. package/dist/inline.d.ts.map +1 -0
  21. package/dist/inline.js +48 -0
  22. package/dist/inline.js.map +1 -0
  23. package/dist/lists.d.ts +17 -0
  24. package/dist/lists.d.ts.map +1 -0
  25. package/dist/lists.js +60 -0
  26. package/dist/lists.js.map +1 -0
  27. package/dist/parse-blocks.d.ts +33 -0
  28. package/dist/parse-blocks.d.ts.map +1 -0
  29. package/dist/parse-blocks.js +145 -0
  30. package/dist/parse-blocks.js.map +1 -0
  31. package/dist/parse-numbering.d.ts +24 -0
  32. package/dist/parse-numbering.d.ts.map +1 -0
  33. package/dist/parse-numbering.js +90 -0
  34. package/dist/parse-numbering.js.map +1 -0
  35. package/dist/parse-runs.d.ts +28 -0
  36. package/dist/parse-runs.d.ts.map +1 -0
  37. package/dist/parse-runs.js +230 -0
  38. package/dist/parse-runs.js.map +1 -0
  39. package/dist/parse-tables.d.ts +15 -0
  40. package/dist/parse-tables.d.ts.map +1 -0
  41. package/dist/parse-tables.js +200 -0
  42. package/dist/parse-tables.js.map +1 -0
  43. package/dist/parse-xml.d.ts +26 -0
  44. package/dist/parse-xml.d.ts.map +1 -0
  45. package/dist/parse-xml.js +286 -0
  46. package/dist/parse-xml.js.map +1 -0
  47. package/dist/parts.d.ts +18 -0
  48. package/dist/parts.d.ts.map +1 -0
  49. package/dist/parts.js +102 -0
  50. package/dist/parts.js.map +1 -0
  51. package/dist/runs.d.ts +40 -0
  52. package/dist/runs.d.ts.map +1 -0
  53. package/dist/runs.js +72 -0
  54. package/dist/runs.js.map +1 -0
  55. package/dist/tables.d.ts +18 -0
  56. package/dist/tables.d.ts.map +1 -0
  57. package/dist/tables.js +95 -0
  58. package/dist/tables.js.map +1 -0
  59. package/dist/unzip.d.ts +16 -0
  60. package/dist/unzip.d.ts.map +1 -0
  61. package/dist/unzip.js +108 -0
  62. package/dist/unzip.js.map +1 -0
  63. package/dist/warnings.d.ts +18 -0
  64. package/dist/warnings.d.ts.map +1 -0
  65. package/dist/warnings.js +12 -0
  66. package/dist/warnings.js.map +1 -0
  67. package/dist/xml.d.ts +23 -0
  68. package/dist/xml.d.ts.map +1 -0
  69. package/dist/xml.js +58 -0
  70. package/dist/xml.js.map +1 -0
  71. package/dist/zip.d.ts +15 -0
  72. package/dist/zip.d.ts.map +1 -0
  73. package/dist/zip.js +165 -0
  74. package/dist/zip.js.map +1 -0
  75. package/package.json +42 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-runs.js","sourceRoot":"","sources":["../src/parse-runs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Parse a `<w:tbl>` element into a Doxiva `table` node, reversing what
3
+ * `tables.ts` emits.
4
+ *
5
+ * vMerge handling: the exporter writes the master cell with
6
+ * `<w:vMerge w:val="restart"/>` and continuation rows with `<w:vMerge/>`
7
+ * (no val). We track open vMerges by column so we can count rowspan when
8
+ * we encounter the master, and we drop continuation cells entirely from
9
+ * the model — table_cell rowspan attrs carry that information.
10
+ */
11
+ import type { DxNode } from '@doxi/core';
12
+ import type { ParsedElement } from './parse-xml.js';
13
+ import type { ParseBlockCtx } from './parse-blocks.js';
14
+ export declare function parseTable(el: ParsedElement, ctx: ParseBlockCtx): DxNode;
15
+ //# sourceMappingURL=parse-tables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-tables.d.ts","sourceRoot":"","sources":["../src/parse-tables.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD,wBAAgB,UAAU,CAAC,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CAsBxE"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Parse a `<w:tbl>` element into a Doxiva `table` node, reversing what
3
+ * `tables.ts` emits.
4
+ *
5
+ * vMerge handling: the exporter writes the master cell with
6
+ * `<w:vMerge w:val="restart"/>` and continuation rows with `<w:vMerge/>`
7
+ * (no val). We track open vMerges by column so we can count rowspan when
8
+ * we encounter the master, and we drop continuation cells entirely from
9
+ * the model — table_cell rowspan attrs carry that information.
10
+ */
11
+ import { parseParagraph } from './parse-blocks.js';
12
+ export function parseTable(el, ctx) {
13
+ // Materialize rows first so we can peek forward for rowspan counts.
14
+ const rows = [];
15
+ for (const child of el.children) {
16
+ if (typeof child === 'string')
17
+ continue;
18
+ if (child.name === 'w:tr')
19
+ rows.push(child);
20
+ // w:tblPr, w:tblGrid silently skipped — column widths not preserved.
21
+ }
22
+ const rowNodes = [];
23
+ for (let rIdx = 0; rIdx < rows.length; rIdx++) {
24
+ rowNodes.push(parseRow(rows, rIdx, ctx));
25
+ }
26
+ // Empty table → emit at least one row with one empty cell so the schema
27
+ // (table_row+, table_cell+) is satisfied.
28
+ if (rowNodes.length === 0) {
29
+ const cell = ctx.schema.node('table_cell', null, [ctx.schema.node('paragraph', null)]);
30
+ const row = ctx.schema.node('table_row', null, [cell]);
31
+ return ctx.schema.node('table', null, [row]);
32
+ }
33
+ return ctx.schema.node('table', null, rowNodes);
34
+ }
35
+ function parseRow(rows, rIdx, ctx) {
36
+ const row = rows[rIdx];
37
+ let header = false;
38
+ // Pre-scan trPr.
39
+ for (const child of row.children) {
40
+ if (typeof child === 'string')
41
+ continue;
42
+ if (child.name === 'w:trPr') {
43
+ for (const tp of child.children) {
44
+ if (typeof tp === 'string')
45
+ continue;
46
+ if (tp.name === 'w:tblHeader')
47
+ header = true;
48
+ }
49
+ }
50
+ }
51
+ const cells = [];
52
+ // Track the column index as we walk cells — colspan advances it by N,
53
+ // continuation cells (vMerge no-val) are skipped but still take grid space.
54
+ let colCursor = 0;
55
+ for (const child of row.children) {
56
+ if (typeof child === 'string')
57
+ continue;
58
+ if (child.name !== 'w:tc')
59
+ continue;
60
+ const info = readTcPr(child);
61
+ if (info.vMergeContinuation) {
62
+ // Skip from the model; we still need to advance the column cursor by
63
+ // the cell's gridSpan so any subsequent master cell lines up right.
64
+ colCursor += info.colspan;
65
+ continue;
66
+ }
67
+ // Master cell — compute rowspan if vMerge restart.
68
+ let rowspan = 1;
69
+ if (info.vMergeRestart) {
70
+ // Count subsequent rows that have a continuation cell aligned with the
71
+ // same column index.
72
+ const startCol = colCursor;
73
+ for (let nextR = rIdx + 1; nextR < rows.length; nextR++) {
74
+ if (rowHasContinuationAt(rows[nextR], startCol))
75
+ rowspan++;
76
+ else
77
+ break;
78
+ }
79
+ }
80
+ const cellAttrs = {};
81
+ if (info.colspan > 1)
82
+ cellAttrs.colspan = info.colspan;
83
+ if (rowspan > 1)
84
+ cellAttrs.rowspan = rowspan;
85
+ if (info.background !== undefined)
86
+ cellAttrs.background = info.background;
87
+ if (info.widthPx !== undefined)
88
+ cellAttrs.widthPx = info.widthPx;
89
+ const inner = parseCellContent(child, ctx);
90
+ cells.push(ctx.schema.node('table_cell', cellAttrs, inner));
91
+ colCursor += info.colspan;
92
+ }
93
+ // Word requires at least one cell per row; the schema does too.
94
+ if (cells.length === 0) {
95
+ cells.push(ctx.schema.node('table_cell', null, [ctx.schema.node('paragraph', null)]));
96
+ }
97
+ const rowAttrs = header ? { header: true } : null;
98
+ return ctx.schema.node('table_row', rowAttrs, cells);
99
+ }
100
+ function readTcPr(tc) {
101
+ const info = { colspan: 1, vMergeRestart: false, vMergeContinuation: false };
102
+ for (const child of tc.children) {
103
+ if (typeof child === 'string')
104
+ continue;
105
+ if (child.name !== 'w:tcPr')
106
+ continue;
107
+ for (const p of child.children) {
108
+ if (typeof p === 'string')
109
+ continue;
110
+ switch (p.name) {
111
+ case 'w:gridSpan': {
112
+ const v = p.attrs['w:val'];
113
+ if (v) {
114
+ const n = parseInt(v, 10);
115
+ if (Number.isFinite(n) && n >= 1)
116
+ info.colspan = n;
117
+ }
118
+ break;
119
+ }
120
+ case 'w:vMerge': {
121
+ const v = p.attrs['w:val'];
122
+ if (v === 'restart')
123
+ info.vMergeRestart = true;
124
+ else
125
+ info.vMergeContinuation = true;
126
+ break;
127
+ }
128
+ case 'w:shd': {
129
+ const fill = p.attrs['w:fill'];
130
+ if (fill && fill !== 'auto') {
131
+ info.background = fill.startsWith('#') ? fill : `#${fill}`;
132
+ }
133
+ break;
134
+ }
135
+ case 'w:tcW': {
136
+ const v = p.attrs['w:w'];
137
+ const type = p.attrs['w:type'] ?? 'dxa';
138
+ if (v && type === 'dxa') {
139
+ const twips = parseInt(v, 10);
140
+ if (Number.isFinite(twips))
141
+ info.widthPx = Math.round(twips / 15);
142
+ }
143
+ break;
144
+ }
145
+ }
146
+ }
147
+ }
148
+ return info;
149
+ }
150
+ /**
151
+ * Does the given row carry a `<w:tc>` whose vMerge is a continuation and
152
+ * whose effective column position equals `targetCol`? Walks the row's cells,
153
+ * tracking colspan to figure out each cell's start column.
154
+ */
155
+ function rowHasContinuationAt(row, targetCol) {
156
+ let col = 0;
157
+ for (const child of row.children) {
158
+ if (typeof child === 'string')
159
+ continue;
160
+ if (child.name !== 'w:tc')
161
+ continue;
162
+ const info = readTcPr(child);
163
+ if (col === targetCol) {
164
+ return info.vMergeContinuation;
165
+ }
166
+ if (col > targetCol)
167
+ return false;
168
+ col += info.colspan;
169
+ }
170
+ return false;
171
+ }
172
+ function parseCellContent(tc, ctx) {
173
+ const blocks = [];
174
+ for (const child of tc.children) {
175
+ if (typeof child === 'string')
176
+ continue;
177
+ if (child.name === 'w:tcPr')
178
+ continue;
179
+ if (child.name === 'w:p') {
180
+ const parsed = parseParagraph(child, ctx);
181
+ // Cell-level lists are flattened to plain paragraphs in v0.8.
182
+ if (parsed.kind === 'list-paragraph') {
183
+ ctx.warnings.add({
184
+ code: 'unsupported-feature',
185
+ message: 'List paragraphs inside table cells flattened to paragraphs',
186
+ });
187
+ }
188
+ blocks.push(parsed.node);
189
+ }
190
+ else if (child.name === 'w:tbl') {
191
+ blocks.push(parseTable(child, ctx));
192
+ }
193
+ // Other cell children silently skipped.
194
+ }
195
+ if (blocks.length === 0) {
196
+ blocks.push(ctx.schema.node('paragraph', null));
197
+ }
198
+ return blocks;
199
+ }
200
+ //# sourceMappingURL=parse-tables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-tables.js","sourceRoot":"","sources":["../src/parse-tables.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Tiny XML parser used by the DOCX importer.
3
+ *
4
+ * Strategy:
5
+ * 1. Prefer the platform's `DOMParser` when available (browsers, jsdom,
6
+ * happy-dom). This is fast, well-tested, and handles all the edge cases.
7
+ * 2. Fall back to a hand-rolled state machine for Node-only environments
8
+ * where no DOM is present. The fallback supports tags, attributes,
9
+ * self-closing elements, CDATA, comments, processing instructions, the
10
+ * XML declaration, and the five standard entities plus numeric / hex
11
+ * character references.
12
+ *
13
+ * Both paths produce the same shape of result: a tree of `ParsedElement`
14
+ * nodes with qualified (namespaced) tag names like `w:p`.
15
+ */
16
+ export interface ParsedElement {
17
+ readonly name: string;
18
+ readonly attrs: Readonly<Record<string, string>>;
19
+ readonly children: ReadonlyArray<ParsedNode>;
20
+ }
21
+ export type ParsedNode = ParsedElement | string;
22
+ export interface ParsedXml {
23
+ readonly root: ParsedElement;
24
+ }
25
+ export declare function parseXml(xml: string): ParsedXml;
26
+ //# sourceMappingURL=parse-xml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-xml.d.ts","sourceRoot":"","sources":["../src/parse-xml.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAChD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CAC7C;AACD,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,MAAM,CAAA;AAE/C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAC7B;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAI/C"}
@@ -0,0 +1,286 @@
1
+ /**
2
+ * Tiny XML parser used by the DOCX importer.
3
+ *
4
+ * Strategy:
5
+ * 1. Prefer the platform's `DOMParser` when available (browsers, jsdom,
6
+ * happy-dom). This is fast, well-tested, and handles all the edge cases.
7
+ * 2. Fall back to a hand-rolled state machine for Node-only environments
8
+ * where no DOM is present. The fallback supports tags, attributes,
9
+ * self-closing elements, CDATA, comments, processing instructions, the
10
+ * XML declaration, and the five standard entities plus numeric / hex
11
+ * character references.
12
+ *
13
+ * Both paths produce the same shape of result: a tree of `ParsedElement`
14
+ * nodes with qualified (namespaced) tag names like `w:p`.
15
+ */
16
+ export function parseXml(xml) {
17
+ const DP = globalThis.DOMParser;
18
+ if (DP)
19
+ return viaDOMParser(xml, DP);
20
+ return viaHandWalker(xml);
21
+ }
22
+ // ---------------------------------------------------------------------------
23
+ // DOMParser path
24
+ // ---------------------------------------------------------------------------
25
+ function viaDOMParser(xml, DP) {
26
+ const doc = new DP().parseFromString(xml, 'application/xml');
27
+ const root = doc.documentElement;
28
+ if (!root)
29
+ throw new Error('parseXml: no document element');
30
+ // Browsers / jsdom signal parse errors via a <parsererror> root. happy-dom
31
+ // currently doesn't, but checking is cheap.
32
+ if (root.tagName === 'parsererror' || root.getElementsByTagName('parsererror').length > 0) {
33
+ const errText = root.textContent ?? 'unknown parse error';
34
+ throw new Error(`parseXml: malformed XML — ${errText.slice(0, 200)}`);
35
+ }
36
+ return { root: domToParsed(root) };
37
+ }
38
+ function domToParsed(el) {
39
+ const attrs = {};
40
+ for (let i = 0; i < el.attributes.length; i++) {
41
+ const a = el.attributes[i];
42
+ if (a)
43
+ attrs[a.name] = a.value;
44
+ }
45
+ const children = [];
46
+ for (let i = 0; i < el.childNodes.length; i++) {
47
+ const c = el.childNodes[i];
48
+ if (!c)
49
+ continue;
50
+ const kind = c.nodeType;
51
+ if (kind === 3 /* TEXT */) {
52
+ const text = c.data;
53
+ if (text)
54
+ children.push(text);
55
+ }
56
+ else if (kind === 4 /* CDATA */) {
57
+ const text = c.data;
58
+ if (text)
59
+ children.push(text);
60
+ }
61
+ else if (kind === 1 /* ELEMENT */) {
62
+ children.push(domToParsed(c));
63
+ }
64
+ // comments (8), PIs (7), etc. are skipped
65
+ }
66
+ return { name: el.tagName, attrs, children };
67
+ }
68
+ // ---------------------------------------------------------------------------
69
+ // Hand-walker fallback
70
+ // ---------------------------------------------------------------------------
71
+ function viaHandWalker(xml) {
72
+ const p = new Walker(xml);
73
+ p.skipProlog();
74
+ const root = p.readElement();
75
+ if (!root)
76
+ throw new Error('parseXml: no root element');
77
+ // Trailing whitespace / comments / PIs are allowed.
78
+ p.skipMisc();
79
+ if (!p.eof())
80
+ throw new Error(`parseXml: unexpected content after root element at offset ${p.pos}`);
81
+ return { root };
82
+ }
83
+ class Walker {
84
+ src;
85
+ pos = 0;
86
+ constructor(src) {
87
+ this.src = src;
88
+ }
89
+ eof() { return this.pos >= this.src.length; }
90
+ peek(o = 0) { return this.src[this.pos + o] ?? ''; }
91
+ startsWith(s) { return this.src.startsWith(s, this.pos); }
92
+ skipWs() {
93
+ while (this.pos < this.src.length) {
94
+ const c = this.src.charCodeAt(this.pos);
95
+ if (c === 32 || c === 9 || c === 10 || c === 13)
96
+ this.pos++;
97
+ else
98
+ break;
99
+ }
100
+ }
101
+ skipProlog() {
102
+ this.skipWs();
103
+ if (this.startsWith('<?xml')) {
104
+ const end = this.src.indexOf('?>', this.pos);
105
+ if (end < 0)
106
+ throw new Error('parseXml: unterminated XML declaration');
107
+ this.pos = end + 2;
108
+ }
109
+ this.skipMisc();
110
+ }
111
+ // Comments, PIs, and whitespace between top-level constructs.
112
+ skipMisc() {
113
+ while (!this.eof()) {
114
+ this.skipWs();
115
+ if (this.startsWith('<!--')) {
116
+ const end = this.src.indexOf('-->', this.pos + 4);
117
+ if (end < 0)
118
+ throw new Error('parseXml: unterminated comment');
119
+ this.pos = end + 3;
120
+ continue;
121
+ }
122
+ if (this.startsWith('<?')) {
123
+ const end = this.src.indexOf('?>', this.pos + 2);
124
+ if (end < 0)
125
+ throw new Error('parseXml: unterminated processing instruction');
126
+ this.pos = end + 2;
127
+ continue;
128
+ }
129
+ if (this.startsWith('<!DOCTYPE')) {
130
+ // Skip until the matching `>` (accept simple DTDs only).
131
+ const end = this.src.indexOf('>', this.pos);
132
+ if (end < 0)
133
+ throw new Error('parseXml: unterminated DOCTYPE');
134
+ this.pos = end + 1;
135
+ continue;
136
+ }
137
+ return;
138
+ }
139
+ }
140
+ readName() {
141
+ const start = this.pos;
142
+ while (this.pos < this.src.length) {
143
+ const c = this.src[this.pos];
144
+ if (c === ' ' || c === '\t' || c === '\n' || c === '\r' || c === '>' || c === '/' || c === '=')
145
+ break;
146
+ this.pos++;
147
+ }
148
+ if (this.pos === start)
149
+ throw new Error(`parseXml: expected a name at offset ${start}`);
150
+ return this.src.slice(start, this.pos);
151
+ }
152
+ readAttr() {
153
+ this.skipWs();
154
+ if (this.peek() === '/' || this.peek() === '>')
155
+ return null;
156
+ const name = this.readName();
157
+ this.skipWs();
158
+ if (this.peek() !== '=')
159
+ throw new Error(`parseXml: expected '=' after attribute name '${name}' at offset ${this.pos}`);
160
+ this.pos++; // consume '='
161
+ this.skipWs();
162
+ const quote = this.peek();
163
+ if (quote !== '"' && quote !== "'") {
164
+ throw new Error(`parseXml: expected quoted attribute value at offset ${this.pos}`);
165
+ }
166
+ this.pos++; // consume opening quote
167
+ const start = this.pos;
168
+ while (this.pos < this.src.length && this.src[this.pos] !== quote)
169
+ this.pos++;
170
+ if (this.pos >= this.src.length)
171
+ throw new Error('parseXml: unterminated attribute value');
172
+ const raw = this.src.slice(start, this.pos);
173
+ this.pos++; // consume closing quote
174
+ return { name, value: decodeEntities(raw) };
175
+ }
176
+ readElement() {
177
+ this.skipMisc();
178
+ if (this.eof())
179
+ return null;
180
+ if (this.peek() !== '<')
181
+ throw new Error(`parseXml: expected '<' at offset ${this.pos}`);
182
+ this.pos++; // consume '<'
183
+ const name = this.readName();
184
+ const attrs = {};
185
+ while (true) {
186
+ const a = this.readAttr();
187
+ if (!a)
188
+ break;
189
+ attrs[a.name] = a.value;
190
+ }
191
+ this.skipWs();
192
+ if (this.peek() === '/') {
193
+ // self-closing
194
+ this.pos++;
195
+ if (this.peek() !== '>')
196
+ throw new Error(`parseXml: expected '>' after '/' at offset ${this.pos}`);
197
+ this.pos++;
198
+ return { name, attrs, children: [] };
199
+ }
200
+ if (this.peek() !== '>')
201
+ throw new Error(`parseXml: expected '>' at offset ${this.pos}`);
202
+ this.pos++; // consume '>'
203
+ const children = [];
204
+ while (!this.eof()) {
205
+ // CDATA?
206
+ if (this.startsWith('<![CDATA[')) {
207
+ const end = this.src.indexOf(']]>', this.pos + 9);
208
+ if (end < 0)
209
+ throw new Error('parseXml: unterminated CDATA section');
210
+ const text = this.src.slice(this.pos + 9, end);
211
+ if (text)
212
+ children.push(text);
213
+ this.pos = end + 3;
214
+ continue;
215
+ }
216
+ // Comment?
217
+ if (this.startsWith('<!--')) {
218
+ const end = this.src.indexOf('-->', this.pos + 4);
219
+ if (end < 0)
220
+ throw new Error('parseXml: unterminated comment');
221
+ this.pos = end + 3;
222
+ continue;
223
+ }
224
+ // PI?
225
+ if (this.startsWith('<?')) {
226
+ const end = this.src.indexOf('?>', this.pos + 2);
227
+ if (end < 0)
228
+ throw new Error('parseXml: unterminated processing instruction');
229
+ this.pos = end + 2;
230
+ continue;
231
+ }
232
+ // End tag?
233
+ if (this.startsWith('</')) {
234
+ this.pos += 2;
235
+ const endName = this.readName();
236
+ if (endName !== name) {
237
+ throw new Error(`parseXml: mismatched end tag </${endName}> for <${name}> at offset ${this.pos}`);
238
+ }
239
+ this.skipWs();
240
+ if (this.peek() !== '>')
241
+ throw new Error(`parseXml: expected '>' in end tag at offset ${this.pos}`);
242
+ this.pos++;
243
+ return { name, attrs, children };
244
+ }
245
+ // Child element?
246
+ if (this.peek() === '<') {
247
+ const child = this.readElement();
248
+ if (child)
249
+ children.push(child);
250
+ continue;
251
+ }
252
+ // Text node — read until next '<'.
253
+ const next = this.src.indexOf('<', this.pos);
254
+ const end = next < 0 ? this.src.length : next;
255
+ const text = decodeEntities(this.src.slice(this.pos, end));
256
+ if (text)
257
+ children.push(text);
258
+ this.pos = end;
259
+ }
260
+ throw new Error(`parseXml: unterminated element <${name}>`);
261
+ }
262
+ }
263
+ const ENTITY_RE = /&(#x[0-9a-fA-F]+|#[0-9]+|amp|lt|gt|quot|apos);/g;
264
+ function decodeEntities(s) {
265
+ if (s.indexOf('&') < 0)
266
+ return s;
267
+ return s.replace(ENTITY_RE, (_, body) => {
268
+ if (body[0] === '#') {
269
+ const code = body[1] === 'x'
270
+ ? parseInt(body.slice(2), 16)
271
+ : parseInt(body.slice(1), 10);
272
+ if (!Number.isFinite(code))
273
+ return _;
274
+ return String.fromCodePoint(code);
275
+ }
276
+ switch (body) {
277
+ case 'amp': return '&';
278
+ case 'lt': return '<';
279
+ case 'gt': return '>';
280
+ case 'quot': return '"';
281
+ case 'apos': return "'";
282
+ default: return _;
283
+ }
284
+ });
285
+ }
286
+ //# sourceMappingURL=parse-xml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-xml.js","sourceRoot":"","sources":["../src/parse-xml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export declare function contentTypesXml(): string;
2
+ export declare function rootRelsXml(): string;
3
+ export declare function documentRelsXml(hyperlinks: ReadonlyArray<{
4
+ id: string;
5
+ target: string;
6
+ }>): string;
7
+ export declare function stylesXml(): string;
8
+ /**
9
+ * Emit `numbering.xml`. The two predefined abstractNums (0 = bullet, 1 =
10
+ * decimal) and their seed `<w:num>` instances (numId 1, 2) are always
11
+ * present. Additional `<w:num>` rows can be threaded in via `extra` so each
12
+ * Doxiva `list` node gets its own numbering instance (independent restarts).
13
+ */
14
+ export declare function numberingXml(extra?: ReadonlyArray<{
15
+ numId: number;
16
+ ordered: boolean;
17
+ }>): string;
18
+ //# sourceMappingURL=parts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../src/parts.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,IAAI,MAAM,CASxC;AAED,wBAAgB,WAAW,IAAI,MAAM,CASpC;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAuBjG;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,GAAE,aAAa,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAM,GAAG,MAAM,CAOnG"}