odf.js 5.0.9 → 5.1.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/README.md +16 -2
- package/dist/{cascade-qYa3mgnE.d.cts → cascade-BmvsXcAz.d.cts} +2 -2
- package/dist/{cascade-8u4q16_U.d.ts → cascade-rhqUQrUa.d.ts} +2 -2
- package/dist/{codec-jKlS0rWl.d.cts → codec-BAz7YIru.d.cts} +26 -25
- package/dist/{codec-DqldvlN5.d.ts → codec-BxxFEqvT.d.ts} +26 -25
- package/dist/codec.d.cts +1 -1
- package/dist/codec.d.ts +1 -1
- package/dist/constructs-CJpDDQV0.d.ts +63 -0
- package/dist/constructs-Dy_DMFs3.d.cts +63 -0
- package/dist/embedded-BPhuSEEI.d.ts +18 -0
- package/dist/embedded-J3M3kDvY.d.cts +18 -0
- package/dist/form-BGCT81ss.d.cts +13 -0
- package/dist/form-D3H5H2NL.d.ts +13 -0
- package/dist/forms-D1-0spCe.d.ts +27 -0
- package/dist/forms-cIjw-Jf-.d.cts +27 -0
- package/dist/index.cjs +5 -2
- package/dist/index.d.cts +28 -27
- package/dist/index.d.ts +28 -27
- package/dist/index.js +4 -3
- package/dist/{list-C35tiDYU.d.cts → list-KZeXA0mR.d.cts} +1 -1
- package/dist/{list-acGU0xLo.d.ts → list-Qeuawtew.d.ts} +1 -1
- package/dist/{manifest-xxJ4FpSe.d.ts → manifest-BALwu2JR.d.cts} +1 -1
- package/dist/{manifest-CmsCOCEi.d.cts → manifest-CP1sqyGU.d.ts} +1 -1
- package/dist/manifest.d.cts +1 -1
- package/dist/manifest.d.ts +1 -1
- package/dist/{masterpage-7nBnqFj-.d.ts → masterpage-C1McDhMv.d.ts} +1 -1
- package/dist/{masterpage-EmefIRgy.d.cts → masterpage-XJ2v2khe.d.cts} +1 -1
- package/dist/{metadata-32LoP2TK.d.ts → metadata-1j1zm9Cx.d.cts} +1 -1
- package/dist/{metadata-frJqeeSB.d.cts → metadata-BXpjrAS-.d.ts} +1 -1
- package/dist/{mimetype-uF-RHNpR.d.ts → mimetype-BfkwTeaW.d.ts} +1 -1
- package/dist/{mimetype-BcLX0N-N.d.cts → mimetype-CPNMj04s.d.cts} +1 -1
- package/dist/mimetype.d.cts +1 -1
- package/dist/mimetype.d.ts +1 -1
- package/dist/model/package.d.cts +1 -113
- package/dist/model/package.d.ts +1 -113
- package/dist/package-BUojjTXf.d.ts +114 -0
- package/dist/package-L24lkba-.d.cts +114 -0
- package/dist/package-io/read.d.cts +1 -1
- package/dist/package-io/read.d.ts +1 -1
- package/dist/package-io/write.d.cts +1 -1
- package/dist/package-io/write.d.ts +1 -1
- package/dist/paragraph-6hzAZpmi.d.ts +16 -0
- package/dist/paragraph-BBmSl_sK.d.cts +16 -0
- package/dist/read-B4238IGr.d.cts +12 -0
- package/dist/{read-DrdmKX0x.d.cts → read-BV2an1ok.d.cts} +1 -1
- package/dist/{read-DOuXgPhP.d.ts → read-BnN7u9Y2.d.ts} +1 -1
- package/dist/{read-DhLNXgiM.d.ts → read-CMDEXqGw.d.ts} +1 -1
- package/dist/{read-YSIwlhrk.d.ts → read-CTfeWaWq.d.cts} +1 -1
- package/dist/read-CdvX2qnz.d.ts +12 -0
- package/dist/read-Cs1ktkWB.d.cts +15 -0
- package/dist/{read-BoIUENWq.d.ts → read-CvjbdgH3.d.ts} +1 -1
- package/dist/read-DHuiGh_y.d.ts +15 -0
- package/dist/{read-BM8KaFQS.d.cts → read-DOYWO6BM.d.cts} +1 -1
- package/dist/{read-xCmo7cec.d.cts → read-DUCm1nUv.d.cts} +1 -1
- package/dist/{read-BkFbEves.d.ts → read-DYYxbvfo.d.ts} +1 -1
- package/dist/{read-KpU38maT.d.cts → read-Db_GZ0ZH.d.ts} +1 -1
- package/dist/{read-CFMsXSl7.d.cts → read-DzmMJPHd.d.cts} +1 -1
- package/dist/{read-B9zz_ax1.d.ts → read-lc0t0UHK.d.ts} +1 -1
- package/dist/{read-DNNf5_6n.d.cts → read-ydLJ8bid.d.cts} +1 -1
- package/dist/{registry-R43n1hcL.d.ts → registry-BVeEpUMI.d.ts} +1 -1
- package/dist/{registry-Dy6pjoh3.d.cts → registry-CaJpWDke.d.cts} +1 -1
- package/dist/{report-MpwUgXbA.d.ts → report-D6WNYaVn.d.cts} +1 -1
- package/dist/{report-BuCJ7_YU.d.cts → report-DbslT2OR.d.ts} +1 -1
- package/dist/{shapes-BqcccDK8.d.cts → shapes-8o3NjBLU.d.cts} +3 -3
- package/dist/{shapes-BB59aIC8.d.ts → shapes-CCB8ydqD.d.ts} +3 -3
- package/dist/styles/registry.d.cts +1 -1
- package/dist/styles/registry.d.ts +1 -1
- package/dist/{subdocument-CIxH3a5V.d.cts → subdocument-BwW3FZC_.d.ts} +1 -1
- package/dist/{subdocument-DQNQF7wV.d.ts → subdocument-yY8ASE4N.d.cts} +1 -1
- package/dist/{table-sweV3r9n.d.cts → table-BH_Q2n_N.d.cts} +1 -1
- package/dist/{table-D81TZyBn.d.ts → table-ByOoGcq_.d.ts} +1 -1
- package/dist/{text-Cal14ZaX.d.cts → text-BAi1tapc.d.cts} +3 -1
- package/dist/{text-CkNojpZm.d.ts → text-gJ5R0q3u.d.ts} +3 -1
- package/dist/typed/draw/embedded.cjs +38 -0
- package/dist/typed/draw/embedded.d.cts +2 -2
- package/dist/typed/draw/embedded.d.ts +2 -2
- package/dist/typed/draw/embedded.js +39 -2
- package/dist/typed/draw/shapes.cjs +20 -3
- package/dist/typed/draw/shapes.d.cts +1 -1
- package/dist/typed/draw/shapes.d.ts +1 -1
- package/dist/typed/draw/shapes.js +20 -3
- package/dist/typed/formula/read.d.cts +1 -1
- package/dist/typed/formula/read.d.ts +1 -1
- package/dist/typed/odb/form.cjs +2 -59
- package/dist/typed/odb/form.d.cts +2 -2
- package/dist/typed/odb/form.d.ts +2 -2
- package/dist/typed/odb/form.js +3 -60
- package/dist/typed/odb/read.d.cts +1 -1
- package/dist/typed/odb/read.d.ts +1 -1
- package/dist/typed/odb/report.d.cts +1 -1
- package/dist/typed/odb/report.d.ts +1 -1
- package/dist/typed/odb/subdocument.d.cts +1 -1
- package/dist/typed/odb/subdocument.d.ts +1 -1
- package/dist/typed/odg/read.d.cts +1 -1
- package/dist/typed/odg/read.d.ts +1 -1
- package/dist/typed/odm/read.d.cts +1 -1
- package/dist/typed/odm/read.d.ts +1 -1
- package/dist/typed/odp/read.d.cts +1 -1
- package/dist/typed/odp/read.d.ts +1 -1
- package/dist/typed/ods/read.cjs +28 -7
- package/dist/typed/ods/read.d.cts +1 -1
- package/dist/typed/ods/read.d.ts +1 -1
- package/dist/typed/ods/read.js +29 -8
- package/dist/typed/odt/read.cjs +215 -15
- package/dist/typed/odt/read.d.cts +2 -2
- package/dist/typed/odt/read.d.ts +2 -2
- package/dist/typed/odt/read.js +215 -15
- package/dist/typed/shared/cascade.d.cts +1 -1
- package/dist/typed/shared/cascade.d.ts +1 -1
- package/dist/typed/shared/constructs.cjs +392 -0
- package/dist/typed/shared/constructs.d.cts +2 -0
- package/dist/typed/shared/constructs.d.ts +2 -0
- package/dist/typed/shared/constructs.js +374 -0
- package/dist/typed/shared/forms.cjs +128 -0
- package/dist/typed/shared/forms.d.cts +2 -0
- package/dist/typed/shared/forms.d.ts +2 -0
- package/dist/typed/shared/forms.js +126 -0
- package/dist/typed/shared/list.d.cts +1 -1
- package/dist/typed/shared/list.d.ts +1 -1
- package/dist/typed/shared/masterpage.d.cts +1 -1
- package/dist/typed/shared/masterpage.d.ts +1 -1
- package/dist/typed/shared/metadata.d.cts +1 -1
- package/dist/typed/shared/metadata.d.ts +1 -1
- package/dist/typed/shared/paragraph.cjs +189 -10
- package/dist/typed/shared/paragraph.d.cts +2 -2
- package/dist/typed/shared/paragraph.d.ts +2 -2
- package/dist/typed/shared/paragraph.js +192 -13
- package/dist/typed/shared/table.d.cts +1 -1
- package/dist/typed/shared/table.d.ts +1 -1
- package/dist/typed/shared/text.cjs +57 -2
- package/dist/typed/shared/text.d.cts +2 -2
- package/dist/typed/shared/text.d.ts +2 -2
- package/dist/typed/shared/text.js +56 -3
- package/dist/{write-C0nwVuPI.d.ts → write-BxVkPZID.d.ts} +1 -1
- package/dist/{write-Dfb2tirK.d.cts → write-D3kyj1Xw.d.cts} +1 -1
- package/package.json +2 -2
- package/dist/embedded-CNMqOrnt.d.ts +0 -13
- package/dist/embedded-D7Kr1Sce.d.cts +0 -13
- package/dist/form-BsAAx5-p.d.ts +0 -31
- package/dist/form-DSIbHxog.d.cts +0 -31
- package/dist/paragraph-9ii2naJC.d.cts +0 -7
- package/dist/paragraph-DWNnedIE.d.ts +0 -7
- package/dist/read-B4zS8bGb.d.ts +0 -11
- package/dist/read-BHpPvhzR.d.cts +0 -11
- package/dist/read-C6MhadqG.d.ts +0 -11
- package/dist/read-CszvDMMt.d.cts +0 -11
package/dist/typed/odt/read.cjs
CHANGED
|
@@ -3,9 +3,16 @@ const require_typed_shared_units = require("../shared/units.cjs");
|
|
|
3
3
|
const require_xml_query = require("../../xml/query.cjs");
|
|
4
4
|
const require_typed_shared_geometry = require("../shared/geometry.cjs");
|
|
5
5
|
const require_typed_shared_metadata = require("../shared/metadata.cjs");
|
|
6
|
-
const require_typed_shared_paragraph = require("../shared/paragraph.cjs");
|
|
7
6
|
const require_typed_shared_list = require("../shared/list.cjs");
|
|
7
|
+
const require_typed_shared_constructs = require("../shared/constructs.cjs");
|
|
8
|
+
const require_typed_shared_paragraph = require("../shared/paragraph.cjs");
|
|
8
9
|
const require_typed_shared_table = require("../shared/table.cjs");
|
|
10
|
+
const require_typed_draw_shapes = require("../draw/shapes.cjs");
|
|
11
|
+
const require_typed_formula_read = require("../formula/read.cjs");
|
|
12
|
+
const require_typed_draw_embedded = require("../draw/embedded.cjs");
|
|
13
|
+
const require_typed_odp_read = require("../odp/read.cjs");
|
|
14
|
+
const require_typed_shared_forms = require("../shared/forms.cjs");
|
|
15
|
+
const require_typed_odg_read = require("../odg/read.cjs");
|
|
9
16
|
let document_schema_js = require("document-schema.js");
|
|
10
17
|
//#region src/typed/odt/read.ts
|
|
11
18
|
const CONTENT_PART = "content.xml";
|
|
@@ -17,8 +24,7 @@ function readOutlineLevel(headingElement) {
|
|
|
17
24
|
const parsed = Number.parseInt(raw, 10);
|
|
18
25
|
return Number.isInteger(parsed) && parsed > 0 ? parsed : 1;
|
|
19
26
|
}
|
|
20
|
-
function readParagraphOrHeading(element,
|
|
21
|
-
const paragraph = require_typed_shared_paragraph.readOdfParagraph(element, pkg);
|
|
27
|
+
function readParagraphOrHeading(element, paragraph) {
|
|
22
28
|
if (element.tag === "text:h") {
|
|
23
29
|
const outlineLevel = readOutlineLevel(element);
|
|
24
30
|
paragraph.styleId = `Heading${outlineLevel}`;
|
|
@@ -26,19 +32,175 @@ function readParagraphOrHeading(element, pkg) {
|
|
|
26
32
|
}
|
|
27
33
|
return paragraph;
|
|
28
34
|
}
|
|
29
|
-
function
|
|
35
|
+
function readOdtEmbeddedDocument(reference, frame) {
|
|
36
|
+
switch (reference.objectKind) {
|
|
37
|
+
case "wordprocessing": {
|
|
38
|
+
const { metadata, sections } = readOdtContent(reference.package);
|
|
39
|
+
return {
|
|
40
|
+
kind: "wordprocessing",
|
|
41
|
+
metadata,
|
|
42
|
+
sections
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
case "presentation": {
|
|
46
|
+
const { metadata, slides } = require_typed_odp_read.readOdpContent(reference.package);
|
|
47
|
+
return {
|
|
48
|
+
kind: "presentation",
|
|
49
|
+
metadata,
|
|
50
|
+
slides
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
case "drawing": {
|
|
54
|
+
const { metadata, pages } = require_typed_odg_read.readOdgContent(reference.package);
|
|
55
|
+
return {
|
|
56
|
+
kind: "drawing",
|
|
57
|
+
metadata,
|
|
58
|
+
pages
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
case "formula": return require_typed_formula_read.readOdfFormulaContent(reference.package);
|
|
62
|
+
case "chart": return require_typed_draw_embedded.readOdfChartContent(reference.package, frame, "odt").document;
|
|
63
|
+
case "spreadsheet": return;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function readAnchoredFrameSources(paragraphElement, pkg, state) {
|
|
67
|
+
if (!state.liftFrames) return [];
|
|
68
|
+
const sources = [];
|
|
69
|
+
const readFrameInto = (blocks, frameElement) => {
|
|
70
|
+
const shape = require_typed_draw_shapes.readDrawFrame(frameElement, [], pkg, state.listIdState, true);
|
|
71
|
+
if (shape === void 0) return;
|
|
72
|
+
const reference = require_typed_draw_embedded.readDrawObjectReference(frameElement, pkg);
|
|
73
|
+
if (reference?.objectKind === "chart") {
|
|
74
|
+
const { document, residue } = require_typed_draw_embedded.readOdfChartContent(reference.package, shape.frame, "odt");
|
|
75
|
+
const embeddedBlock = {
|
|
76
|
+
kind: "embeddedObject",
|
|
77
|
+
objectKind: "chart",
|
|
78
|
+
document,
|
|
79
|
+
frame: shape.frame
|
|
80
|
+
};
|
|
81
|
+
if (residue !== void 0) embeddedBlock.source = residue;
|
|
82
|
+
blocks.push(embeddedBlock);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (reference !== void 0) {
|
|
86
|
+
const document = readOdtEmbeddedDocument(reference, shape.frame);
|
|
87
|
+
if (document !== void 0) {
|
|
88
|
+
blocks.push({
|
|
89
|
+
kind: "embeddedObject",
|
|
90
|
+
objectKind: reference.objectKind,
|
|
91
|
+
document,
|
|
92
|
+
frame: shape.frame
|
|
93
|
+
});
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
blocks.push(...shape.blocks);
|
|
98
|
+
};
|
|
99
|
+
for (const child of paragraphElement.children) {
|
|
100
|
+
if (child.type !== "element") continue;
|
|
101
|
+
if (child.tag === "draw:frame") {
|
|
102
|
+
const blocks = [];
|
|
103
|
+
readFrameInto(blocks, child);
|
|
104
|
+
if (blocks.length > 0) sources.push({
|
|
105
|
+
child,
|
|
106
|
+
blocks
|
|
107
|
+
});
|
|
108
|
+
} else if (child.tag === "draw:g") {
|
|
109
|
+
const blocks = [];
|
|
110
|
+
for (const grandChild of child.children) if (grandChild.type === "element" && grandChild.tag === "draw:frame") readFrameInto(blocks, grandChild);
|
|
111
|
+
if (blocks.length > 0) sources.push({
|
|
112
|
+
child,
|
|
113
|
+
blocks
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return sources;
|
|
118
|
+
}
|
|
119
|
+
function liftedBlocksBeforeHalf(read, half) {
|
|
120
|
+
const halfIndex = read.element.children.indexOf(half);
|
|
121
|
+
if (halfIndex === -1) return 0;
|
|
122
|
+
let count = 0;
|
|
123
|
+
for (const source of read.liftedSources) if (read.element.children.indexOf(source.child) < halfIndex) count += source.blocks.length;
|
|
124
|
+
return count;
|
|
125
|
+
}
|
|
126
|
+
function readBlocks(nodes, pkg, state, baseIndex = 0) {
|
|
30
127
|
const blocks = [];
|
|
128
|
+
const emitParagraphs = (reads) => {
|
|
129
|
+
let cursor = baseIndex + blocks.length;
|
|
130
|
+
for (const read of reads) {
|
|
131
|
+
const lifted = read.liftedSources.flatMap((source) => source.blocks);
|
|
132
|
+
for (const half of read.halves) {
|
|
133
|
+
const eventIndex = require_typed_shared_constructs.odfMarkerHalfEventIndex(half, read.element, cursor, liftedBlocksBeforeHalf(read, half.element));
|
|
134
|
+
if (eventIndex !== void 0) state.markerEvents.push({
|
|
135
|
+
kind: half.kind,
|
|
136
|
+
side: half.side,
|
|
137
|
+
key: half.key,
|
|
138
|
+
index: eventIndex,
|
|
139
|
+
qualified: true,
|
|
140
|
+
order: state.order++,
|
|
141
|
+
descriptor: half.descriptor,
|
|
142
|
+
element: half.element
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
blocks.push(read.paragraph);
|
|
146
|
+
for (const block of lifted) blocks.push(block);
|
|
147
|
+
cursor += 1 + lifted.length;
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
const readOneParagraph = (element) => {
|
|
151
|
+
const halves = [];
|
|
152
|
+
return {
|
|
153
|
+
element,
|
|
154
|
+
paragraph: readParagraphOrHeading(element, require_typed_shared_paragraph.readOdfParagraph(element, pkg, {
|
|
155
|
+
provenanceRegions: state.provenanceRegions,
|
|
156
|
+
markersOut: halves,
|
|
157
|
+
definitions: state.definitions,
|
|
158
|
+
listIdState: state.listIdState,
|
|
159
|
+
format: "odt"
|
|
160
|
+
})),
|
|
161
|
+
halves,
|
|
162
|
+
liftedSources: readAnchoredFrameSources(element, pkg, state)
|
|
163
|
+
};
|
|
164
|
+
};
|
|
31
165
|
for (const node of nodes) {
|
|
32
166
|
if (node.type !== "element") continue;
|
|
33
|
-
if (node.tag === "text:p" || node.tag === "text:h")
|
|
167
|
+
if (node.tag === "text:p" || node.tag === "text:h") emitParagraphs([readOneParagraph(node)]);
|
|
34
168
|
else if (node.tag === "text:list") {
|
|
35
|
-
const numId = require_typed_shared_list.mintOdfListNumId(pkg, node, listIdState);
|
|
36
|
-
|
|
169
|
+
const numId = require_typed_shared_list.mintOdfListNumId(pkg, node, state.listIdState);
|
|
170
|
+
const reads = [];
|
|
171
|
+
require_typed_shared_list.readOdfListParagraphs(node, {
|
|
37
172
|
numId,
|
|
38
173
|
level: 0
|
|
39
|
-
}, (element) =>
|
|
174
|
+
}, (element) => {
|
|
175
|
+
const read = readOneParagraph(element);
|
|
176
|
+
reads.push(read);
|
|
177
|
+
return read.paragraph;
|
|
178
|
+
});
|
|
179
|
+
emitParagraphs(reads);
|
|
40
180
|
} else if (node.tag === "table:table") blocks.push(require_typed_shared_table.readOdfTable(node, pkg));
|
|
41
|
-
else if (node.tag === "text:section")
|
|
181
|
+
else if (node.tag === "text:section") {
|
|
182
|
+
const startIndex = baseIndex + blocks.length;
|
|
183
|
+
const order = state.order++;
|
|
184
|
+
blocks.push(...readBlocks(node.children, pkg, state, startIndex));
|
|
185
|
+
state.wrapperExtents.push({
|
|
186
|
+
startIndex,
|
|
187
|
+
endIndex: baseIndex + blocks.length,
|
|
188
|
+
order,
|
|
189
|
+
descriptor: require_typed_shared_constructs.odfDivisionDescriptor(node, pkg)
|
|
190
|
+
});
|
|
191
|
+
} else if (require_typed_shared_constructs.isOdfIndexWrapper(node)) {
|
|
192
|
+
const startIndex = baseIndex + blocks.length;
|
|
193
|
+
const order = state.order++;
|
|
194
|
+
const body = node.children.find((child) => child.type === "element" && child.tag === "text:index-body");
|
|
195
|
+
blocks.push(...body === void 0 ? [] : readBlocks(body.children, pkg, state, startIndex));
|
|
196
|
+
state.wrapperExtents.push({
|
|
197
|
+
startIndex,
|
|
198
|
+
endIndex: baseIndex + blocks.length,
|
|
199
|
+
order,
|
|
200
|
+
descriptor: require_typed_shared_constructs.odfIndexControlDescriptor(node)
|
|
201
|
+
});
|
|
202
|
+
} else if (node.tag === "text:index-title") blocks.push(...readBlocks(node.children, pkg, state, baseIndex + blocks.length));
|
|
203
|
+
else if (node.tag === "office:forms") blocks.push(...require_typed_shared_forms.readOdfFormControlConstructs(node, "odt"));
|
|
42
204
|
}
|
|
43
205
|
return blocks;
|
|
44
206
|
}
|
|
@@ -80,7 +242,7 @@ function readFirstMasterPageGeometry(pkg) {
|
|
|
80
242
|
margins: margins ?? DEFAULT_MARGINS
|
|
81
243
|
};
|
|
82
244
|
}
|
|
83
|
-
function readOdtContent(pkg) {
|
|
245
|
+
function readOdtContent(pkg, options = {}) {
|
|
84
246
|
const contentPart = pkg.parts[CONTENT_PART];
|
|
85
247
|
if (contentPart?.kind !== "xml") throw new Error(`readOdtContent: package has no ${CONTENT_PART} part`);
|
|
86
248
|
const contentRoot = require_xml_query.rootElement(contentPart.nodes);
|
|
@@ -89,22 +251,60 @@ function readOdtContent(pkg) {
|
|
|
89
251
|
if (textElement === void 0) throw new Error(`readOdtContent: ${CONTENT_PART} has no office:body/office:text element`);
|
|
90
252
|
const metadata = require_typed_shared_metadata.readOdfMetadata(pkg);
|
|
91
253
|
const { pageSize, margins } = readFirstMasterPageGeometry(pkg);
|
|
254
|
+
const provenanceRegions = /* @__PURE__ */ new Map();
|
|
255
|
+
require_typed_shared_constructs.collectOdfProvenanceRegions(textElement.children, provenanceRegions);
|
|
256
|
+
const definitions = {
|
|
257
|
+
entries: {},
|
|
258
|
+
nextNoteOrdinal: 1,
|
|
259
|
+
nextAnnotationOrdinal: 1
|
|
260
|
+
};
|
|
261
|
+
require_typed_shared_constructs.collectOdfFieldMasterDefinitions(textElement.children, definitions.entries);
|
|
262
|
+
for (const partPath of AUTOMATIC_STYLE_PARTS) {
|
|
263
|
+
const part = pkg.parts[partPath];
|
|
264
|
+
if (part?.kind !== "xml") continue;
|
|
265
|
+
require_typed_shared_constructs.collectOdfDataStyleDefinitions(part.nodes, definitions.entries);
|
|
266
|
+
require_typed_shared_constructs.collectOdfFontFaceDefinitions(part.nodes, definitions.entries);
|
|
267
|
+
}
|
|
268
|
+
const state = {
|
|
269
|
+
listIdState: { next: 1 },
|
|
270
|
+
provenanceRegions,
|
|
271
|
+
definitions,
|
|
272
|
+
wrapperExtents: [],
|
|
273
|
+
markerEvents: [],
|
|
274
|
+
liftFrames: options.frames !== "none",
|
|
275
|
+
order: 0
|
|
276
|
+
};
|
|
277
|
+
const walked = readBlocks(textElement.children, pkg, state);
|
|
278
|
+
const { extents: markerExtents, paired } = require_typed_shared_constructs.resolveOdfMarkerEvents(state.markerEvents);
|
|
279
|
+
const extents = [...state.wrapperExtents, ...markerExtents];
|
|
280
|
+
for (const event of state.markerEvents) if (event.kind === "annotation" && event.side === "start" && !paired.has(event.element)) {
|
|
281
|
+
const descriptor = event.descriptor();
|
|
282
|
+
if (descriptor !== void 0) extents.push({
|
|
283
|
+
startIndex: event.index,
|
|
284
|
+
endIndex: event.index,
|
|
285
|
+
order: event.order,
|
|
286
|
+
descriptor
|
|
287
|
+
});
|
|
288
|
+
}
|
|
92
289
|
return {
|
|
93
290
|
metadata,
|
|
94
291
|
sections: [{
|
|
95
292
|
pageSize,
|
|
96
293
|
margins,
|
|
97
|
-
blocks:
|
|
98
|
-
}]
|
|
294
|
+
blocks: require_typed_shared_constructs.insertOdfConstructMarkers(walked, extents)
|
|
295
|
+
}],
|
|
296
|
+
...Object.keys(definitions.entries).length > 0 ? { definitions: definitions.entries } : {}
|
|
99
297
|
};
|
|
100
298
|
}
|
|
101
|
-
function readOdt(pkg) {
|
|
102
|
-
const { metadata, sections } = readOdtContent(pkg);
|
|
103
|
-
|
|
299
|
+
function readOdt(pkg, options = {}) {
|
|
300
|
+
const { metadata, sections, definitions } = readOdtContent(pkg, options);
|
|
301
|
+
const assembled = (0, document_schema_js.assemblePackage)({
|
|
104
302
|
kind: "wordprocessing",
|
|
105
303
|
metadata,
|
|
106
304
|
sections
|
|
107
305
|
});
|
|
306
|
+
if (definitions !== void 0) assembled.definitions = definitions;
|
|
307
|
+
return assembled;
|
|
108
308
|
}
|
|
109
309
|
//#endregion
|
|
110
310
|
exports.readOdt = readOdt;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as
|
|
2
|
-
export { OdtDocument, readOdt, readOdtContent };
|
|
1
|
+
import { i as readOdtContent, n as OdtReadOptions, r as readOdt, t as OdtDocument } from "../../read-Cs1ktkWB.cjs";
|
|
2
|
+
export { OdtDocument, OdtReadOptions, readOdt, readOdtContent };
|
package/dist/typed/odt/read.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as
|
|
2
|
-
export { OdtDocument, readOdt, readOdtContent };
|
|
1
|
+
import { i as readOdtContent, n as OdtReadOptions, r as readOdt, t as OdtDocument } from "../../read-DHuiGh_y.js";
|
|
2
|
+
export { OdtDocument, OdtReadOptions, readOdt, readOdtContent };
|
package/dist/typed/odt/read.js
CHANGED
|
@@ -2,9 +2,16 @@ import { parseOdfLength } from "../shared/units.js";
|
|
|
2
2
|
import { attrValue, childrenWithTag, findChildElement, rootElement } from "../../xml/query.js";
|
|
3
3
|
import { parseMargins, parsePageSize } from "../shared/geometry.js";
|
|
4
4
|
import { readOdfMetadata } from "../shared/metadata.js";
|
|
5
|
-
import { readOdfParagraph } from "../shared/paragraph.js";
|
|
6
5
|
import { mintOdfListNumId, readOdfListParagraphs } from "../shared/list.js";
|
|
6
|
+
import { collectOdfDataStyleDefinitions, collectOdfFieldMasterDefinitions, collectOdfFontFaceDefinitions, collectOdfProvenanceRegions, insertOdfConstructMarkers, isOdfIndexWrapper, odfDivisionDescriptor, odfIndexControlDescriptor, odfMarkerHalfEventIndex, resolveOdfMarkerEvents } from "../shared/constructs.js";
|
|
7
|
+
import { readOdfParagraph } from "../shared/paragraph.js";
|
|
7
8
|
import { readOdfTable } from "../shared/table.js";
|
|
9
|
+
import { readDrawFrame } from "../draw/shapes.js";
|
|
10
|
+
import { readOdfFormulaContent } from "../formula/read.js";
|
|
11
|
+
import { readDrawObjectReference, readOdfChartContent } from "../draw/embedded.js";
|
|
12
|
+
import { readOdpContent } from "../odp/read.js";
|
|
13
|
+
import { readOdfFormControlConstructs } from "../shared/forms.js";
|
|
14
|
+
import { readOdgContent } from "../odg/read.js";
|
|
8
15
|
import { PAGE_SIZE_A4, assemblePackage } from "document-schema.js";
|
|
9
16
|
//#region src/typed/odt/read.ts
|
|
10
17
|
const CONTENT_PART = "content.xml";
|
|
@@ -16,8 +23,7 @@ function readOutlineLevel(headingElement) {
|
|
|
16
23
|
const parsed = Number.parseInt(raw, 10);
|
|
17
24
|
return Number.isInteger(parsed) && parsed > 0 ? parsed : 1;
|
|
18
25
|
}
|
|
19
|
-
function readParagraphOrHeading(element,
|
|
20
|
-
const paragraph = readOdfParagraph(element, pkg);
|
|
26
|
+
function readParagraphOrHeading(element, paragraph) {
|
|
21
27
|
if (element.tag === "text:h") {
|
|
22
28
|
const outlineLevel = readOutlineLevel(element);
|
|
23
29
|
paragraph.styleId = `Heading${outlineLevel}`;
|
|
@@ -25,19 +31,175 @@ function readParagraphOrHeading(element, pkg) {
|
|
|
25
31
|
}
|
|
26
32
|
return paragraph;
|
|
27
33
|
}
|
|
28
|
-
function
|
|
34
|
+
function readOdtEmbeddedDocument(reference, frame) {
|
|
35
|
+
switch (reference.objectKind) {
|
|
36
|
+
case "wordprocessing": {
|
|
37
|
+
const { metadata, sections } = readOdtContent(reference.package);
|
|
38
|
+
return {
|
|
39
|
+
kind: "wordprocessing",
|
|
40
|
+
metadata,
|
|
41
|
+
sections
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
case "presentation": {
|
|
45
|
+
const { metadata, slides } = readOdpContent(reference.package);
|
|
46
|
+
return {
|
|
47
|
+
kind: "presentation",
|
|
48
|
+
metadata,
|
|
49
|
+
slides
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
case "drawing": {
|
|
53
|
+
const { metadata, pages } = readOdgContent(reference.package);
|
|
54
|
+
return {
|
|
55
|
+
kind: "drawing",
|
|
56
|
+
metadata,
|
|
57
|
+
pages
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
case "formula": return readOdfFormulaContent(reference.package);
|
|
61
|
+
case "chart": return readOdfChartContent(reference.package, frame, "odt").document;
|
|
62
|
+
case "spreadsheet": return;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function readAnchoredFrameSources(paragraphElement, pkg, state) {
|
|
66
|
+
if (!state.liftFrames) return [];
|
|
67
|
+
const sources = [];
|
|
68
|
+
const readFrameInto = (blocks, frameElement) => {
|
|
69
|
+
const shape = readDrawFrame(frameElement, [], pkg, state.listIdState, true);
|
|
70
|
+
if (shape === void 0) return;
|
|
71
|
+
const reference = readDrawObjectReference(frameElement, pkg);
|
|
72
|
+
if (reference?.objectKind === "chart") {
|
|
73
|
+
const { document, residue } = readOdfChartContent(reference.package, shape.frame, "odt");
|
|
74
|
+
const embeddedBlock = {
|
|
75
|
+
kind: "embeddedObject",
|
|
76
|
+
objectKind: "chart",
|
|
77
|
+
document,
|
|
78
|
+
frame: shape.frame
|
|
79
|
+
};
|
|
80
|
+
if (residue !== void 0) embeddedBlock.source = residue;
|
|
81
|
+
blocks.push(embeddedBlock);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (reference !== void 0) {
|
|
85
|
+
const document = readOdtEmbeddedDocument(reference, shape.frame);
|
|
86
|
+
if (document !== void 0) {
|
|
87
|
+
blocks.push({
|
|
88
|
+
kind: "embeddedObject",
|
|
89
|
+
objectKind: reference.objectKind,
|
|
90
|
+
document,
|
|
91
|
+
frame: shape.frame
|
|
92
|
+
});
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
blocks.push(...shape.blocks);
|
|
97
|
+
};
|
|
98
|
+
for (const child of paragraphElement.children) {
|
|
99
|
+
if (child.type !== "element") continue;
|
|
100
|
+
if (child.tag === "draw:frame") {
|
|
101
|
+
const blocks = [];
|
|
102
|
+
readFrameInto(blocks, child);
|
|
103
|
+
if (blocks.length > 0) sources.push({
|
|
104
|
+
child,
|
|
105
|
+
blocks
|
|
106
|
+
});
|
|
107
|
+
} else if (child.tag === "draw:g") {
|
|
108
|
+
const blocks = [];
|
|
109
|
+
for (const grandChild of child.children) if (grandChild.type === "element" && grandChild.tag === "draw:frame") readFrameInto(blocks, grandChild);
|
|
110
|
+
if (blocks.length > 0) sources.push({
|
|
111
|
+
child,
|
|
112
|
+
blocks
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return sources;
|
|
117
|
+
}
|
|
118
|
+
function liftedBlocksBeforeHalf(read, half) {
|
|
119
|
+
const halfIndex = read.element.children.indexOf(half);
|
|
120
|
+
if (halfIndex === -1) return 0;
|
|
121
|
+
let count = 0;
|
|
122
|
+
for (const source of read.liftedSources) if (read.element.children.indexOf(source.child) < halfIndex) count += source.blocks.length;
|
|
123
|
+
return count;
|
|
124
|
+
}
|
|
125
|
+
function readBlocks(nodes, pkg, state, baseIndex = 0) {
|
|
29
126
|
const blocks = [];
|
|
127
|
+
const emitParagraphs = (reads) => {
|
|
128
|
+
let cursor = baseIndex + blocks.length;
|
|
129
|
+
for (const read of reads) {
|
|
130
|
+
const lifted = read.liftedSources.flatMap((source) => source.blocks);
|
|
131
|
+
for (const half of read.halves) {
|
|
132
|
+
const eventIndex = odfMarkerHalfEventIndex(half, read.element, cursor, liftedBlocksBeforeHalf(read, half.element));
|
|
133
|
+
if (eventIndex !== void 0) state.markerEvents.push({
|
|
134
|
+
kind: half.kind,
|
|
135
|
+
side: half.side,
|
|
136
|
+
key: half.key,
|
|
137
|
+
index: eventIndex,
|
|
138
|
+
qualified: true,
|
|
139
|
+
order: state.order++,
|
|
140
|
+
descriptor: half.descriptor,
|
|
141
|
+
element: half.element
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
blocks.push(read.paragraph);
|
|
145
|
+
for (const block of lifted) blocks.push(block);
|
|
146
|
+
cursor += 1 + lifted.length;
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
const readOneParagraph = (element) => {
|
|
150
|
+
const halves = [];
|
|
151
|
+
return {
|
|
152
|
+
element,
|
|
153
|
+
paragraph: readParagraphOrHeading(element, readOdfParagraph(element, pkg, {
|
|
154
|
+
provenanceRegions: state.provenanceRegions,
|
|
155
|
+
markersOut: halves,
|
|
156
|
+
definitions: state.definitions,
|
|
157
|
+
listIdState: state.listIdState,
|
|
158
|
+
format: "odt"
|
|
159
|
+
})),
|
|
160
|
+
halves,
|
|
161
|
+
liftedSources: readAnchoredFrameSources(element, pkg, state)
|
|
162
|
+
};
|
|
163
|
+
};
|
|
30
164
|
for (const node of nodes) {
|
|
31
165
|
if (node.type !== "element") continue;
|
|
32
|
-
if (node.tag === "text:p" || node.tag === "text:h")
|
|
166
|
+
if (node.tag === "text:p" || node.tag === "text:h") emitParagraphs([readOneParagraph(node)]);
|
|
33
167
|
else if (node.tag === "text:list") {
|
|
34
|
-
const numId = mintOdfListNumId(pkg, node, listIdState);
|
|
35
|
-
|
|
168
|
+
const numId = mintOdfListNumId(pkg, node, state.listIdState);
|
|
169
|
+
const reads = [];
|
|
170
|
+
readOdfListParagraphs(node, {
|
|
36
171
|
numId,
|
|
37
172
|
level: 0
|
|
38
|
-
}, (element) =>
|
|
173
|
+
}, (element) => {
|
|
174
|
+
const read = readOneParagraph(element);
|
|
175
|
+
reads.push(read);
|
|
176
|
+
return read.paragraph;
|
|
177
|
+
});
|
|
178
|
+
emitParagraphs(reads);
|
|
39
179
|
} else if (node.tag === "table:table") blocks.push(readOdfTable(node, pkg));
|
|
40
|
-
else if (node.tag === "text:section")
|
|
180
|
+
else if (node.tag === "text:section") {
|
|
181
|
+
const startIndex = baseIndex + blocks.length;
|
|
182
|
+
const order = state.order++;
|
|
183
|
+
blocks.push(...readBlocks(node.children, pkg, state, startIndex));
|
|
184
|
+
state.wrapperExtents.push({
|
|
185
|
+
startIndex,
|
|
186
|
+
endIndex: baseIndex + blocks.length,
|
|
187
|
+
order,
|
|
188
|
+
descriptor: odfDivisionDescriptor(node, pkg)
|
|
189
|
+
});
|
|
190
|
+
} else if (isOdfIndexWrapper(node)) {
|
|
191
|
+
const startIndex = baseIndex + blocks.length;
|
|
192
|
+
const order = state.order++;
|
|
193
|
+
const body = node.children.find((child) => child.type === "element" && child.tag === "text:index-body");
|
|
194
|
+
blocks.push(...body === void 0 ? [] : readBlocks(body.children, pkg, state, startIndex));
|
|
195
|
+
state.wrapperExtents.push({
|
|
196
|
+
startIndex,
|
|
197
|
+
endIndex: baseIndex + blocks.length,
|
|
198
|
+
order,
|
|
199
|
+
descriptor: odfIndexControlDescriptor(node)
|
|
200
|
+
});
|
|
201
|
+
} else if (node.tag === "text:index-title") blocks.push(...readBlocks(node.children, pkg, state, baseIndex + blocks.length));
|
|
202
|
+
else if (node.tag === "office:forms") blocks.push(...readOdfFormControlConstructs(node, "odt"));
|
|
41
203
|
}
|
|
42
204
|
return blocks;
|
|
43
205
|
}
|
|
@@ -79,7 +241,7 @@ function readFirstMasterPageGeometry(pkg) {
|
|
|
79
241
|
margins: margins ?? DEFAULT_MARGINS
|
|
80
242
|
};
|
|
81
243
|
}
|
|
82
|
-
function readOdtContent(pkg) {
|
|
244
|
+
function readOdtContent(pkg, options = {}) {
|
|
83
245
|
const contentPart = pkg.parts[CONTENT_PART];
|
|
84
246
|
if (contentPart?.kind !== "xml") throw new Error(`readOdtContent: package has no ${CONTENT_PART} part`);
|
|
85
247
|
const contentRoot = rootElement(contentPart.nodes);
|
|
@@ -88,22 +250,60 @@ function readOdtContent(pkg) {
|
|
|
88
250
|
if (textElement === void 0) throw new Error(`readOdtContent: ${CONTENT_PART} has no office:body/office:text element`);
|
|
89
251
|
const metadata = readOdfMetadata(pkg);
|
|
90
252
|
const { pageSize, margins } = readFirstMasterPageGeometry(pkg);
|
|
253
|
+
const provenanceRegions = /* @__PURE__ */ new Map();
|
|
254
|
+
collectOdfProvenanceRegions(textElement.children, provenanceRegions);
|
|
255
|
+
const definitions = {
|
|
256
|
+
entries: {},
|
|
257
|
+
nextNoteOrdinal: 1,
|
|
258
|
+
nextAnnotationOrdinal: 1
|
|
259
|
+
};
|
|
260
|
+
collectOdfFieldMasterDefinitions(textElement.children, definitions.entries);
|
|
261
|
+
for (const partPath of AUTOMATIC_STYLE_PARTS) {
|
|
262
|
+
const part = pkg.parts[partPath];
|
|
263
|
+
if (part?.kind !== "xml") continue;
|
|
264
|
+
collectOdfDataStyleDefinitions(part.nodes, definitions.entries);
|
|
265
|
+
collectOdfFontFaceDefinitions(part.nodes, definitions.entries);
|
|
266
|
+
}
|
|
267
|
+
const state = {
|
|
268
|
+
listIdState: { next: 1 },
|
|
269
|
+
provenanceRegions,
|
|
270
|
+
definitions,
|
|
271
|
+
wrapperExtents: [],
|
|
272
|
+
markerEvents: [],
|
|
273
|
+
liftFrames: options.frames !== "none",
|
|
274
|
+
order: 0
|
|
275
|
+
};
|
|
276
|
+
const walked = readBlocks(textElement.children, pkg, state);
|
|
277
|
+
const { extents: markerExtents, paired } = resolveOdfMarkerEvents(state.markerEvents);
|
|
278
|
+
const extents = [...state.wrapperExtents, ...markerExtents];
|
|
279
|
+
for (const event of state.markerEvents) if (event.kind === "annotation" && event.side === "start" && !paired.has(event.element)) {
|
|
280
|
+
const descriptor = event.descriptor();
|
|
281
|
+
if (descriptor !== void 0) extents.push({
|
|
282
|
+
startIndex: event.index,
|
|
283
|
+
endIndex: event.index,
|
|
284
|
+
order: event.order,
|
|
285
|
+
descriptor
|
|
286
|
+
});
|
|
287
|
+
}
|
|
91
288
|
return {
|
|
92
289
|
metadata,
|
|
93
290
|
sections: [{
|
|
94
291
|
pageSize,
|
|
95
292
|
margins,
|
|
96
|
-
blocks:
|
|
97
|
-
}]
|
|
293
|
+
blocks: insertOdfConstructMarkers(walked, extents)
|
|
294
|
+
}],
|
|
295
|
+
...Object.keys(definitions.entries).length > 0 ? { definitions: definitions.entries } : {}
|
|
98
296
|
};
|
|
99
297
|
}
|
|
100
|
-
function readOdt(pkg) {
|
|
101
|
-
const { metadata, sections } = readOdtContent(pkg);
|
|
102
|
-
|
|
298
|
+
function readOdt(pkg, options = {}) {
|
|
299
|
+
const { metadata, sections, definitions } = readOdtContent(pkg, options);
|
|
300
|
+
const assembled = assemblePackage({
|
|
103
301
|
kind: "wordprocessing",
|
|
104
302
|
metadata,
|
|
105
303
|
sections
|
|
106
304
|
});
|
|
305
|
+
if (definitions !== void 0) assembled.definitions = definitions;
|
|
306
|
+
return assembled;
|
|
107
307
|
}
|
|
108
308
|
//#endregion
|
|
109
309
|
export { readOdt, readOdtContent };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as resolveStyle, i as findStyleElement, n as StyleCascadeResult, o as resolveStyleElementChain, r as StyleElementChainResult, t as CascadeDiagnostic } from "../../cascade-
|
|
1
|
+
import { a as resolveStyle, i as findStyleElement, n as StyleCascadeResult, o as resolveStyleElementChain, r as StyleElementChainResult, t as CascadeDiagnostic } from "../../cascade-BmvsXcAz.cjs";
|
|
2
2
|
export { CascadeDiagnostic, StyleCascadeResult, StyleElementChainResult, findStyleElement, resolveStyle, resolveStyleElementChain };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as resolveStyle, i as findStyleElement, n as StyleCascadeResult, o as resolveStyleElementChain, r as StyleElementChainResult, t as CascadeDiagnostic } from "../../cascade-
|
|
1
|
+
import { a as resolveStyle, i as findStyleElement, n as StyleCascadeResult, o as resolveStyleElementChain, r as StyleElementChainResult, t as CascadeDiagnostic } from "../../cascade-rhqUQrUa.js";
|
|
2
2
|
export { CascadeDiagnostic, StyleCascadeResult, StyleElementChainResult, findStyleElement, resolveStyle, resolveStyleElementChain };
|