@usejunior/odf-core 0.10.0 → 0.11.1
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/LICENSE +202 -0
- package/NOTICE +2 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/convert/docx_to_odt.d.ts +20 -0
- package/dist/convert/docx_to_odt.d.ts.map +1 -0
- package/dist/convert/docx_to_odt.js +199 -0
- package/dist/convert/docx_to_odt.js.map +1 -0
- package/dist/convert/index.d.ts +3 -0
- package/dist/convert/index.d.ts.map +1 -0
- package/dist/convert/index.js +2 -0
- package/dist/convert/index.js.map +1 -0
- package/dist/convert/inline.d.ts +55 -0
- package/dist/convert/inline.d.ts.map +1 -0
- package/dist/convert/inline.js +274 -0
- package/dist/convert/inline.js.map +1 -0
- package/dist/convert/lists.d.ts +41 -0
- package/dist/convert/lists.d.ts.map +1 -0
- package/dist/convert/lists.js +137 -0
- package/dist/convert/lists.js.map +1 -0
- package/dist/convert/package.d.ts +54 -0
- package/dist/convert/package.d.ts.map +1 -0
- package/dist/convert/package.js +232 -0
- package/dist/convert/package.js.map +1 -0
- package/dist/convert/paragraph_styles.d.ts +25 -0
- package/dist/convert/paragraph_styles.d.ts.map +1 -0
- package/dist/convert/paragraph_styles.js +63 -0
- package/dist/convert/paragraph_styles.js.map +1 -0
- package/dist/convert/tables.d.ts +44 -0
- package/dist/convert/tables.d.ts.map +1 -0
- package/dist/convert/tables.js +226 -0
- package/dist/convert/tables.js.map +1 -0
- package/dist/convert/types.d.ts +27 -0
- package/dist/convert/types.d.ts.map +1 -0
- package/dist/convert/types.js +25 -0
- package/dist/convert/types.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/shared/odf/OdfArchive.d.ts +16 -0
- package/dist/shared/odf/OdfArchive.d.ts.map +1 -1
- package/dist/shared/odf/OdfArchive.js +48 -1
- package/dist/shared/odf/OdfArchive.js.map +1 -1
- package/dist/shared/odf/namespaces.d.ts +4 -0
- package/dist/shared/odf/namespaces.d.ts.map +1 -1
- package/dist/shared/odf/namespaces.js +8 -0
- package/dist/shared/odf/namespaces.js.map +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Table emission for the DOCX → ODT converter: a contiguous run of view nodes sharing one
|
|
3
|
+
* `table_context.table_id` → a complete rectangular `table:table` grid.
|
|
4
|
+
*
|
|
5
|
+
* Lossy by design, mirroring the HTML serializer's `renderTable`: the view model discards
|
|
6
|
+
* `gridSpan`/`vMerge`, so merged cells are indistinguishable from genuinely empty grid
|
|
7
|
+
* positions — gaps are filled with empty cells (recorded as `table-grid-gaps-filled`).
|
|
8
|
+
* Borders and column widths come from the raw source `w:tbl` (#406 phase 3): an explicit
|
|
9
|
+
* `w:tblBorders` is honored uniformly per table (including explicitly borderless tables) and
|
|
10
|
+
* `w:tblGrid` widths become `table:table-column` styles. Tables without explicit borders keep
|
|
11
|
+
* the 0.5pt default (most Word tables are bordered via their table style, whose `w:tblPr`
|
|
12
|
+
* the styles model does not carry). Per-cell `w:tcBorders` overrides are out of scope.
|
|
13
|
+
*/
|
|
14
|
+
import { W_NS } from '@usejunior/docx-core';
|
|
15
|
+
import { ODF_NS } from '../shared/odf/namespaces.js';
|
|
16
|
+
/** The `fo:border` applied when the source declares no explicit `w:tblBorders`. */
|
|
17
|
+
const DEFAULT_BORDER_SPEC = '0.5pt solid #000000';
|
|
18
|
+
/** OOXML `ST_Border` → ODF border line style (anything unmapped degrades to solid). */
|
|
19
|
+
const BORDER_STYLE_MAP = {
|
|
20
|
+
single: 'solid',
|
|
21
|
+
double: 'double',
|
|
22
|
+
dotted: 'dotted',
|
|
23
|
+
dashed: 'dashed',
|
|
24
|
+
};
|
|
25
|
+
function firstChildNS(parent, localName) {
|
|
26
|
+
if (!parent)
|
|
27
|
+
return null;
|
|
28
|
+
for (let i = 0; i < parent.childNodes.length; i++) {
|
|
29
|
+
const child = parent.childNodes[i];
|
|
30
|
+
if (child.nodeType === 1 && child.localName === localName && child.namespaceURI === W_NS) {
|
|
31
|
+
return child;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
function wAttr(el, localName) {
|
|
37
|
+
return el.getAttributeNS(W_NS, localName) || el.getAttribute(`w:${localName}`) || null;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Resolve the uniform `fo:border` for a table from its explicit `w:tblBorders`, preferring
|
|
41
|
+
* inside edges (what most cells show). Explicitly border-free tables return `'none'`; tables
|
|
42
|
+
* without a `w:tblBorders` at all return the bordered default.
|
|
43
|
+
*/
|
|
44
|
+
export function resolveTableBorderSpec(tbl) {
|
|
45
|
+
const tblPr = firstChildNS(tbl, 'tblPr');
|
|
46
|
+
const borders = firstChildNS(tblPr, 'tblBorders');
|
|
47
|
+
if (!borders)
|
|
48
|
+
return DEFAULT_BORDER_SPEC;
|
|
49
|
+
const candidates = ['insideH', 'insideV', 'top', 'bottom', 'left', 'right']
|
|
50
|
+
.map((edge) => firstChildNS(borders, edge))
|
|
51
|
+
.filter((el) => el !== null);
|
|
52
|
+
if (candidates.length === 0)
|
|
53
|
+
return DEFAULT_BORDER_SPEC;
|
|
54
|
+
for (const edge of candidates) {
|
|
55
|
+
const val = wAttr(edge, 'val') ?? 'none';
|
|
56
|
+
if (val === 'none' || val === 'nil')
|
|
57
|
+
continue;
|
|
58
|
+
// w:sz is eighths of a point; absent → Word's hairline default (≈0.5pt).
|
|
59
|
+
const szRaw = Number(wAttr(edge, 'sz') ?? NaN);
|
|
60
|
+
const widthPt = Number.isFinite(szRaw) && szRaw > 0 ? Number((szRaw / 8).toFixed(2)) : 0.5;
|
|
61
|
+
const colorRaw = wAttr(edge, 'color');
|
|
62
|
+
const color = colorRaw && /^[0-9A-Fa-f]{6}$/.test(colorRaw) ? `#${colorRaw.toLowerCase()}` : '#000000';
|
|
63
|
+
return `${widthPt}pt ${BORDER_STYLE_MAP[val] ?? 'solid'} ${color}`;
|
|
64
|
+
}
|
|
65
|
+
return 'none'; // every declared edge was explicitly none/nil
|
|
66
|
+
}
|
|
67
|
+
/** Column widths in points from `w:tblGrid/w:gridCol` (`w:w` is twips); empty when absent. */
|
|
68
|
+
export function readGridColWidthsPt(tbl) {
|
|
69
|
+
const grid = firstChildNS(tbl, 'tblGrid');
|
|
70
|
+
if (!grid)
|
|
71
|
+
return [];
|
|
72
|
+
const widths = [];
|
|
73
|
+
for (let i = 0; i < grid.childNodes.length; i++) {
|
|
74
|
+
const child = grid.childNodes[i];
|
|
75
|
+
if (child.nodeType !== 1 || child.localName !== 'gridCol')
|
|
76
|
+
continue;
|
|
77
|
+
const w = Number(wAttr(child, 'w') ?? NaN);
|
|
78
|
+
if (!Number.isFinite(w) || w <= 0)
|
|
79
|
+
return []; // a single unusable column invalidates the grid
|
|
80
|
+
widths.push(w / 20);
|
|
81
|
+
}
|
|
82
|
+
return widths;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Deduped automatic styles for table emission: one `table-cell` style per distinct border
|
|
86
|
+
* spec and one `table-column` style per distinct width, shared across tables.
|
|
87
|
+
*/
|
|
88
|
+
export class TableStyleRegistry {
|
|
89
|
+
doc;
|
|
90
|
+
container;
|
|
91
|
+
cellByBorder = new Map();
|
|
92
|
+
columnByWidth = new Map();
|
|
93
|
+
constructor(doc, container) {
|
|
94
|
+
this.doc = doc;
|
|
95
|
+
this.container = container;
|
|
96
|
+
}
|
|
97
|
+
cellStyleFor(borderSpec) {
|
|
98
|
+
const existing = this.cellByBorder.get(borderSpec);
|
|
99
|
+
if (existing)
|
|
100
|
+
return existing;
|
|
101
|
+
const name = `ConvCell${this.cellByBorder.size + 1}`;
|
|
102
|
+
const style = this.doc.createElementNS(ODF_NS.STYLE, 'style:style');
|
|
103
|
+
style.setAttributeNS(ODF_NS.STYLE, 'style:name', name);
|
|
104
|
+
style.setAttributeNS(ODF_NS.STYLE, 'style:family', 'table-cell');
|
|
105
|
+
const props = this.doc.createElementNS(ODF_NS.STYLE, 'style:table-cell-properties');
|
|
106
|
+
props.setAttributeNS(ODF_NS.FO, 'fo:border', borderSpec);
|
|
107
|
+
props.setAttributeNS(ODF_NS.FO, 'fo:padding', '0.0382in');
|
|
108
|
+
style.appendChild(props);
|
|
109
|
+
this.container.appendChild(style);
|
|
110
|
+
this.cellByBorder.set(borderSpec, name);
|
|
111
|
+
return name;
|
|
112
|
+
}
|
|
113
|
+
columnStyleFor(widthPt) {
|
|
114
|
+
const key = String(widthPt);
|
|
115
|
+
const existing = this.columnByWidth.get(key);
|
|
116
|
+
if (existing)
|
|
117
|
+
return existing;
|
|
118
|
+
const name = `ConvCol${this.columnByWidth.size + 1}`;
|
|
119
|
+
const style = this.doc.createElementNS(ODF_NS.STYLE, 'style:style');
|
|
120
|
+
style.setAttributeNS(ODF_NS.STYLE, 'style:name', name);
|
|
121
|
+
style.setAttributeNS(ODF_NS.STYLE, 'style:family', 'table-column');
|
|
122
|
+
const props = this.doc.createElementNS(ODF_NS.STYLE, 'style:table-column-properties');
|
|
123
|
+
props.setAttributeNS(ODF_NS.STYLE, 'style:column-width', `${Number(widthPt.toFixed(2))}pt`);
|
|
124
|
+
style.appendChild(props);
|
|
125
|
+
this.container.appendChild(style);
|
|
126
|
+
this.columnByWidth.set(key, name);
|
|
127
|
+
return name;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Append the table built from `group` to `body`. Cell paragraph content is delegated to
|
|
132
|
+
* `fillParagraph` (the orchestrator's inline emitter) and cell paragraph styles to
|
|
133
|
+
* `paragraphStyleFor` so this module stays cycle-free. `sourceTbl` is the raw `w:tbl` this
|
|
134
|
+
* group was derived from (null when unavailable — defaults apply).
|
|
135
|
+
*/
|
|
136
|
+
export function appendTable(doc, body, group, tableNumber, sourceTbl, tableStyles, fillParagraph, paragraphStyleFor, lossiness) {
|
|
137
|
+
let totalCols = 0;
|
|
138
|
+
for (const n of group) {
|
|
139
|
+
const tc = n.table_context;
|
|
140
|
+
if (!tc)
|
|
141
|
+
continue;
|
|
142
|
+
totalCols = Math.max(totalCols, tc.total_cols, tc.col_index + 1);
|
|
143
|
+
}
|
|
144
|
+
if (totalCols <= 0)
|
|
145
|
+
return;
|
|
146
|
+
const rows = new Map();
|
|
147
|
+
const rowOrder = [];
|
|
148
|
+
const headerRows = new Set();
|
|
149
|
+
for (const n of group) {
|
|
150
|
+
const tc = n.table_context;
|
|
151
|
+
if (!tc)
|
|
152
|
+
continue;
|
|
153
|
+
if (!rows.has(tc.row_index)) {
|
|
154
|
+
rows.set(tc.row_index, new Map());
|
|
155
|
+
rowOrder.push(tc.row_index);
|
|
156
|
+
}
|
|
157
|
+
const cellMap = rows.get(tc.row_index);
|
|
158
|
+
const cellNodes = cellMap.get(tc.col_index) ?? [];
|
|
159
|
+
cellNodes.push(n);
|
|
160
|
+
cellMap.set(tc.col_index, cellNodes);
|
|
161
|
+
if (tc.is_header_row)
|
|
162
|
+
headerRows.add(tc.row_index);
|
|
163
|
+
}
|
|
164
|
+
rowOrder.sort((a, b) => a - b);
|
|
165
|
+
if (rowOrder.length === 0)
|
|
166
|
+
return;
|
|
167
|
+
const cellStyleName = tableStyles.cellStyleFor(resolveTableBorderSpec(sourceTbl));
|
|
168
|
+
const table = doc.createElementNS(ODF_NS.TABLE, 'table:table');
|
|
169
|
+
table.setAttributeNS(ODF_NS.TABLE, 'table:name', `Table${tableNumber}`);
|
|
170
|
+
// Source grid widths drive per-column styles; a grid that does not match the view's
|
|
171
|
+
// column count (gridSpan merges can desync them) falls back to unstyled repeated columns.
|
|
172
|
+
const gridWidths = readGridColWidthsPt(sourceTbl);
|
|
173
|
+
if (gridWidths.length === totalCols) {
|
|
174
|
+
for (const widthPt of gridWidths) {
|
|
175
|
+
const column = doc.createElementNS(ODF_NS.TABLE, 'table:table-column');
|
|
176
|
+
column.setAttributeNS(ODF_NS.TABLE, 'table:style-name', tableStyles.columnStyleFor(widthPt));
|
|
177
|
+
table.appendChild(column);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
const columns = doc.createElementNS(ODF_NS.TABLE, 'table:table-column');
|
|
182
|
+
columns.setAttributeNS(ODF_NS.TABLE, 'table:number-columns-repeated', String(totalCols));
|
|
183
|
+
table.appendChild(columns);
|
|
184
|
+
}
|
|
185
|
+
body.appendChild(table);
|
|
186
|
+
const buildRow = (rowIndex) => {
|
|
187
|
+
const row = doc.createElementNS(ODF_NS.TABLE, 'table:table-row');
|
|
188
|
+
const cellMap = rows.get(rowIndex) ?? new Map();
|
|
189
|
+
for (let c = 0; c < totalCols; c++) {
|
|
190
|
+
const cell = doc.createElementNS(ODF_NS.TABLE, 'table:table-cell');
|
|
191
|
+
cell.setAttributeNS(ODF_NS.OFFICE, 'office:value-type', 'string');
|
|
192
|
+
cell.setAttributeNS(ODF_NS.TABLE, 'table:style-name', cellStyleName);
|
|
193
|
+
const cellNodes = cellMap.get(c);
|
|
194
|
+
if (cellNodes && cellNodes.length > 0) {
|
|
195
|
+
for (const node of cellNodes) {
|
|
196
|
+
const p = doc.createElementNS(ODF_NS.TEXT, 'text:p');
|
|
197
|
+
p.setAttributeNS(ODF_NS.TEXT, 'text:style-name', paragraphStyleFor(node));
|
|
198
|
+
cell.appendChild(p);
|
|
199
|
+
fillParagraph(p, node);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
lossiness.add('table-grid-gaps-filled', `Table${tableNumber} r${rowIndex}c${c}`);
|
|
204
|
+
cell.appendChild(doc.createElementNS(ODF_NS.TEXT, 'text:p'));
|
|
205
|
+
}
|
|
206
|
+
row.appendChild(cell);
|
|
207
|
+
}
|
|
208
|
+
return row;
|
|
209
|
+
};
|
|
210
|
+
// The LEADING run of header-flagged rows goes into `table:table-header-rows` (the ODF
|
|
211
|
+
// analogue of the HTML serializer's `<thead>`). The view model flags `is_header_row` for
|
|
212
|
+
// row 0 of every table — a heuristic, not Word's `w:tblHeader` — so in practice this is
|
|
213
|
+
// the first row.
|
|
214
|
+
let headerEnd = 0;
|
|
215
|
+
while (headerEnd < rowOrder.length && headerRows.has(rowOrder[headerEnd]))
|
|
216
|
+
headerEnd += 1;
|
|
217
|
+
if (headerEnd > 0) {
|
|
218
|
+
const headerContainer = doc.createElementNS(ODF_NS.TABLE, 'table:table-header-rows');
|
|
219
|
+
for (let r = 0; r < headerEnd; r++)
|
|
220
|
+
headerContainer.appendChild(buildRow(rowOrder[r]));
|
|
221
|
+
table.appendChild(headerContainer);
|
|
222
|
+
}
|
|
223
|
+
for (let r = headerEnd; r < rowOrder.length; r++)
|
|
224
|
+
table.appendChild(buildRow(rowOrder[r]));
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=tables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tables.js","sourceRoot":"","sources":["../../src/convert/tables.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Options and result types for {@link convertDocxToOdt}, plus the lossiness collector. */
|
|
2
|
+
export interface ConvertDocxToOdtOptions {
|
|
3
|
+
metadata?: {
|
|
4
|
+
title?: string;
|
|
5
|
+
generator?: string;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
/** One downgraded construct class and how often it was hit. */
|
|
9
|
+
export interface LossinessEntry {
|
|
10
|
+
construct: string;
|
|
11
|
+
count: number;
|
|
12
|
+
detail?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ConvertDocxToOdtResult {
|
|
15
|
+
odt: Buffer;
|
|
16
|
+
lossiness: LossinessEntry[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Accumulates downgraded constructs during a conversion. Conversion is intentionally lossy,
|
|
20
|
+
* but every drop must be reported — `detail` keeps the first concrete example per construct.
|
|
21
|
+
*/
|
|
22
|
+
export declare class LossinessCollector {
|
|
23
|
+
private entries;
|
|
24
|
+
add(construct: string, detail?: string): void;
|
|
25
|
+
toArray(): LossinessEntry[];
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/convert/types.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAE3F,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACnD;AAED,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAyD;IAExE,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAS7C,OAAO,IAAI,cAAc,EAAE;CAO5B"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Options and result types for {@link convertDocxToOdt}, plus the lossiness collector. */
|
|
2
|
+
/**
|
|
3
|
+
* Accumulates downgraded constructs during a conversion. Conversion is intentionally lossy,
|
|
4
|
+
* but every drop must be reported — `detail` keeps the first concrete example per construct.
|
|
5
|
+
*/
|
|
6
|
+
export class LossinessCollector {
|
|
7
|
+
entries = new Map();
|
|
8
|
+
add(construct, detail) {
|
|
9
|
+
const existing = this.entries.get(construct);
|
|
10
|
+
if (existing) {
|
|
11
|
+
existing.count += 1;
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
this.entries.set(construct, { count: 1, detail });
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
toArray() {
|
|
18
|
+
return Array.from(this.entries.entries(), ([construct, { count, detail }]) => ({
|
|
19
|
+
construct,
|
|
20
|
+
count,
|
|
21
|
+
...(detail !== undefined ? { detail } : {}),
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/convert/types.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAkB3F;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IACrB,OAAO,GAAG,IAAI,GAAG,EAA8C,CAAC;IAExE,GAAG,CAAC,SAAiB,EAAE,MAAe;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7E,SAAS;YACT,KAAK;YACL,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,4 +4,5 @@ export { type OdfComment } from './comments.js';
|
|
|
4
4
|
export { compareOdf, OdfEmitError, type OdfCompareResult, type OdfCompareStats, type OdfCompareOptions, } from './compare/index.js';
|
|
5
5
|
export { validateOdfArchiveSafety, type OdfArchiveSafetyResult } from './odf_archive_safety.js';
|
|
6
6
|
export { ODF_NS, ODF_PATHS, ODT_MIMETYPE } from './shared/odf/namespaces.js';
|
|
7
|
+
export { convertDocxToOdt, type ConvertDocxToOdtOptions, type ConvertDocxToOdtResult, type LossinessEntry, } from './convert/index.js';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EACL,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACL,UAAU,EACV,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,KAAK,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EACL,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACL,UAAU,EACV,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,KAAK,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,4 +3,5 @@ export { OdfDocument, } from './document.js';
|
|
|
3
3
|
export { compareOdf, OdfEmitError, } from './compare/index.js';
|
|
4
4
|
export { validateOdfArchiveSafety } from './odf_archive_safety.js';
|
|
5
5
|
export { ODF_NS, ODF_PATHS, ODT_MIMETYPE } from './shared/odf/namespaces.js';
|
|
6
|
+
export { convertDocxToOdt, } from './convert/index.js';
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EACL,WAAW,GAMZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,UAAU,EACV,YAAY,GAIb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAA+B,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EACL,WAAW,GAMZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,UAAU,EACV,YAAY,GAIb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAA+B,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EACL,gBAAgB,GAIjB,MAAM,oBAAoB,CAAC"}
|
|
@@ -14,6 +14,12 @@
|
|
|
14
14
|
* entry's decompressed content. `save()` below does exactly that. Do not "optimize"
|
|
15
15
|
* it back into re-saving the loaded handle.
|
|
16
16
|
*/
|
|
17
|
+
/** Parts accepted by {@link OdfArchive.create}. `content.xml` is the only required one. */
|
|
18
|
+
export interface OdfArchiveCreateParts {
|
|
19
|
+
contentXml: string;
|
|
20
|
+
stylesXml?: string;
|
|
21
|
+
metaXml?: string;
|
|
22
|
+
}
|
|
17
23
|
export declare class OdfArchive {
|
|
18
24
|
private zip;
|
|
19
25
|
private modified;
|
|
@@ -23,6 +29,16 @@ export declare class OdfArchive {
|
|
|
23
29
|
* required `content.xml` or `META-INF/manifest.xml` parts.
|
|
24
30
|
*/
|
|
25
31
|
static load(buffer: Buffer): Promise<OdfArchive>;
|
|
32
|
+
/**
|
|
33
|
+
* Create a fresh ODT package from XML parts.
|
|
34
|
+
*
|
|
35
|
+
* `META-INF/manifest.xml` is generated from the provided parts, and the
|
|
36
|
+
* mimetype-first + STORE discipline is `save()`'s responsibility (the fresh
|
|
37
|
+
* JSZip here is rebuilt on save like any loaded archive). The result satisfies
|
|
38
|
+
* `load()`'s content/manifest requirements, so `create(...)` → `save()` →
|
|
39
|
+
* `load(...)` round-trips.
|
|
40
|
+
*/
|
|
41
|
+
static create(parts: OdfArchiveCreateParts): OdfArchive;
|
|
26
42
|
/** Get `content.xml` as a string. */
|
|
27
43
|
getContentXml(): Promise<string>;
|
|
28
44
|
/** Replace `content.xml`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OdfArchive.d.ts","sourceRoot":"","sources":["../../../src/shared/odf/OdfArchive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,QAAQ,CAA0B;IAE1C,OAAO;IAIP;;;OAGG;WACU,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAWtD,qCAAqC;IAC/B,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAQtC,6BAA6B;IAC7B,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKhC,4DAA4D;IACtD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAMnD,6BAA6B;IAC7B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAK5C,6BAA6B;IAC7B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9B,yDAAyD;IACzD,SAAS,IAAI,MAAM,EAAE;IAQrB,iCAAiC;IACjC,gBAAgB,IAAI,MAAM,EAAE;IAI5B;;;;;;;OAOG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;CA6B9B"}
|
|
1
|
+
{"version":3,"file":"OdfArchive.d.ts","sourceRoot":"","sources":["../../../src/shared/odf/OdfArchive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,2FAA2F;AAC3F,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAyBD,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,QAAQ,CAA0B;IAE1C,OAAO;IAIP;;;OAGG;WACU,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAWtD;;;;;;;;OAQG;IACH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,qBAAqB,GAAG,UAAU;IAqBvD,qCAAqC;IAC/B,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAQtC,6BAA6B;IAC7B,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKhC,4DAA4D;IACtD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAMnD,6BAA6B;IAC7B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAK5C,6BAA6B;IAC7B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9B,yDAAyD;IACzD,SAAS,IAAI,MAAM,EAAE;IAQrB,iCAAiC;IACjC,gBAAgB,IAAI,MAAM,EAAE;IAI5B;;;;;;;OAOG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;CA6B9B"}
|
|
@@ -15,7 +15,25 @@
|
|
|
15
15
|
* it back into re-saving the loaded handle.
|
|
16
16
|
*/
|
|
17
17
|
import JSZip from 'jszip';
|
|
18
|
-
import { ODF_PATHS, ODT_MIMETYPE } from './namespaces.js';
|
|
18
|
+
import { ODF_NS, ODF_PATHS, ODT_MIMETYPE } from './namespaces.js';
|
|
19
|
+
const PART_MEDIA_TYPES = {
|
|
20
|
+
[ODF_PATHS.CONTENT]: 'text/xml',
|
|
21
|
+
[ODF_PATHS.STYLES]: 'text/xml',
|
|
22
|
+
[ODF_PATHS.META]: 'text/xml',
|
|
23
|
+
};
|
|
24
|
+
function buildManifestXml(partPaths) {
|
|
25
|
+
const entries = [
|
|
26
|
+
` <manifest:file-entry manifest:full-path="/" manifest:version="1.3" manifest:media-type="${ODT_MIMETYPE}"/>`,
|
|
27
|
+
...partPaths.map((p) => ` <manifest:file-entry manifest:full-path="${p}" manifest:media-type="${PART_MEDIA_TYPES[p] ?? 'text/xml'}"/>`),
|
|
28
|
+
];
|
|
29
|
+
return [
|
|
30
|
+
'<?xml version="1.0" encoding="UTF-8"?>',
|
|
31
|
+
`<manifest:manifest xmlns:manifest="${ODF_NS.MANIFEST}" manifest:version="1.3">`,
|
|
32
|
+
...entries,
|
|
33
|
+
'</manifest:manifest>',
|
|
34
|
+
'',
|
|
35
|
+
].join('\n');
|
|
36
|
+
}
|
|
19
37
|
export class OdfArchive {
|
|
20
38
|
zip;
|
|
21
39
|
modified = new Set();
|
|
@@ -36,6 +54,35 @@ export class OdfArchive {
|
|
|
36
54
|
}
|
|
37
55
|
return new OdfArchive(zip);
|
|
38
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Create a fresh ODT package from XML parts.
|
|
59
|
+
*
|
|
60
|
+
* `META-INF/manifest.xml` is generated from the provided parts, and the
|
|
61
|
+
* mimetype-first + STORE discipline is `save()`'s responsibility (the fresh
|
|
62
|
+
* JSZip here is rebuilt on save like any loaded archive). The result satisfies
|
|
63
|
+
* `load()`'s content/manifest requirements, so `create(...)` → `save()` →
|
|
64
|
+
* `load(...)` round-trips.
|
|
65
|
+
*/
|
|
66
|
+
static create(parts) {
|
|
67
|
+
const zip = new JSZip();
|
|
68
|
+
zip.file(ODF_PATHS.MIMETYPE, ODT_MIMETYPE, { compression: 'STORE' });
|
|
69
|
+
const partPaths = [ODF_PATHS.CONTENT];
|
|
70
|
+
zip.file(ODF_PATHS.CONTENT, parts.contentXml);
|
|
71
|
+
if (parts.stylesXml !== undefined) {
|
|
72
|
+
zip.file(ODF_PATHS.STYLES, parts.stylesXml);
|
|
73
|
+
partPaths.push(ODF_PATHS.STYLES);
|
|
74
|
+
}
|
|
75
|
+
if (parts.metaXml !== undefined) {
|
|
76
|
+
zip.file(ODF_PATHS.META, parts.metaXml);
|
|
77
|
+
partPaths.push(ODF_PATHS.META);
|
|
78
|
+
}
|
|
79
|
+
zip.file(ODF_PATHS.MANIFEST, buildManifestXml(partPaths));
|
|
80
|
+
const archive = new OdfArchive(zip);
|
|
81
|
+
for (const p of [ODF_PATHS.MIMETYPE, ODF_PATHS.MANIFEST, ...partPaths]) {
|
|
82
|
+
archive.modified.add(p);
|
|
83
|
+
}
|
|
84
|
+
return archive;
|
|
85
|
+
}
|
|
39
86
|
/** Get `content.xml` as a string. */
|
|
40
87
|
async getContentXml() {
|
|
41
88
|
const file = this.zip.file(ODF_PATHS.CONTENT);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OdfArchive.js","sourceRoot":"","sources":["../../../src/shared/odf/OdfArchive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"OdfArchive.js","sourceRoot":"","sources":["../../../src/shared/odf/OdfArchive.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,10 @@ export declare const ODF_NS: {
|
|
|
13
13
|
readonly MANIFEST: "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0";
|
|
14
14
|
readonly DC: "http://purl.org/dc/elements/1.1/";
|
|
15
15
|
readonly XML: "http://www.w3.org/XML/1998/namespace";
|
|
16
|
+
readonly FO: "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0";
|
|
17
|
+
readonly XLINK: "http://www.w3.org/1999/xlink";
|
|
18
|
+
readonly SVG: "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0";
|
|
19
|
+
readonly META: "urn:oasis:names:tc:opendocument:xmlns:meta:1.0";
|
|
16
20
|
};
|
|
17
21
|
/** The mimetype value an OpenDocument text package declares. */
|
|
18
22
|
export declare const ODT_MIMETYPE = "application/vnd.oasis.opendocument.text";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespaces.d.ts","sourceRoot":"","sources":["../../../src/shared/odf/namespaces.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"namespaces.d.ts","sourceRoot":"","sources":["../../../src/shared/odf/namespaces.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;CAkBT,CAAC;AAEX,gEAAgE;AAChE,eAAO,MAAM,YAAY,4CAA4C,CAAC;AAEtE,iDAAiD;AACjD,eAAO,MAAM,SAAS;;;;;;CAMZ,CAAC"}
|
|
@@ -15,6 +15,14 @@ export const ODF_NS = {
|
|
|
15
15
|
DC: 'http://purl.org/dc/elements/1.1/',
|
|
16
16
|
// W3C XML namespace — carries `xml:id` on `text:changed-region` for tracked changes.
|
|
17
17
|
XML: 'http://www.w3.org/XML/1998/namespace',
|
|
18
|
+
// XSL-FO-compatible properties (`fo:font-weight`, `fo:font-style`, …) used by style definitions.
|
|
19
|
+
FO: 'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0',
|
|
20
|
+
// XLink — carries `xlink:href` on `text:a` hyperlinks.
|
|
21
|
+
XLINK: 'http://www.w3.org/1999/xlink',
|
|
22
|
+
// SVG-compatible properties (`svg:font-family` on `style:font-face` declarations).
|
|
23
|
+
SVG: 'urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0',
|
|
24
|
+
// ODF meta elements (`meta:generator`) in `meta.xml`.
|
|
25
|
+
META: 'urn:oasis:names:tc:opendocument:xmlns:meta:1.0',
|
|
18
26
|
};
|
|
19
27
|
/** The mimetype value an OpenDocument text package declares. */
|
|
20
28
|
export const ODT_MIMETYPE = 'application/vnd.oasis.opendocument.text';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespaces.js","sourceRoot":"","sources":["../../../src/shared/odf/namespaces.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,EAAE,kDAAkD;IAC1D,IAAI,EAAE,gDAAgD;IACtD,KAAK,EAAE,iDAAiD;IACxD,KAAK,EAAE,iDAAiD;IACxD,QAAQ,EAAE,oDAAoD;IAC9D,sFAAsF;IACtF,EAAE,EAAE,kCAAkC;IACtC,qFAAqF;IACrF,GAAG,EAAE,sCAAsC;
|
|
1
|
+
{"version":3,"file":"namespaces.js","sourceRoot":"","sources":["../../../src/shared/odf/namespaces.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,EAAE,kDAAkD;IAC1D,IAAI,EAAE,gDAAgD;IACtD,KAAK,EAAE,iDAAiD;IACxD,KAAK,EAAE,iDAAiD;IACxD,QAAQ,EAAE,oDAAoD;IAC9D,sFAAsF;IACtF,EAAE,EAAE,kCAAkC;IACtC,qFAAqF;IACrF,GAAG,EAAE,sCAAsC;IAC3C,iGAAiG;IACjG,EAAE,EAAE,6DAA6D;IACjE,uDAAuD;IACvD,KAAK,EAAE,8BAA8B;IACrC,mFAAmF;IACnF,GAAG,EAAE,0DAA0D;IAC/D,sDAAsD;IACtD,IAAI,EAAE,gDAAgD;CAC9C,CAAC;AAEX,gEAAgE;AAChE,MAAM,CAAC,MAAM,YAAY,GAAG,yCAAyC,CAAC;AAEtE,iDAAiD;AACjD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,uBAAuB;CACzB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@usejunior/odf-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.1",
|
|
4
4
|
"description": "OpenDocument Format (.odt) core library: archive packaging, document view, surgical text replacement, and tracked-changes comparison",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"lint": "tsc --noEmit"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@usejunior/docx-core": "^0.
|
|
17
|
+
"@usejunior/docx-core": "^0.11.1",
|
|
18
18
|
"@xmldom/xmldom": "^0.9.10",
|
|
19
19
|
"jszip": "^3.10.1"
|
|
20
20
|
},
|
|
@@ -38,7 +38,8 @@
|
|
|
38
38
|
"access": "public"
|
|
39
39
|
},
|
|
40
40
|
"files": [
|
|
41
|
-
"dist"
|
|
41
|
+
"dist",
|
|
42
|
+
"NOTICE"
|
|
42
43
|
],
|
|
43
44
|
"keywords": [
|
|
44
45
|
"odf",
|
|
@@ -50,5 +51,5 @@
|
|
|
50
51
|
"document-editing",
|
|
51
52
|
"mcp"
|
|
52
53
|
],
|
|
53
|
-
"license": "
|
|
54
|
+
"license": "Apache-2.0"
|
|
54
55
|
}
|