ooxml.js 4.0.11 → 4.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.
- package/README.md +4 -3
- package/dist/{codec-CZkWeDXF.d.cts → codec-DO0MNF45.d.cts} +1 -1
- package/dist/{codec-BOGj_yQL.d.ts → codec-DxnbKt4O.d.ts} +1 -1
- package/dist/codec.d.cts +1 -1
- package/dist/codec.d.ts +1 -1
- package/dist/index.cjs +8 -9
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -3
- package/dist/package-io/read.cjs +4 -1
- package/dist/package-io/read.d.cts +2 -2
- package/dist/package-io/read.d.ts +2 -2
- package/dist/package-io/read.js +4 -2
- package/dist/{read-CMDEXqGw.d.ts → read-CevviAf2.d.ts} +2 -1
- package/dist/read-DPAy4uu8.cjs +1188 -0
- package/dist/read-Legu2Pt-.js +1141 -0
- package/dist/{read-DzmMJPHd.d.cts → read-VbRhmjOh.d.cts} +2 -1
- package/dist/typed/document-package.cjs +4 -5
- package/dist/typed/document-package.js +2 -3
- package/dist/typed/docx/read.cjs +5 -645
- package/dist/typed/docx/read.js +1 -641
- package/dist/typed/embedded.cjs +4 -0
- package/dist/typed/embedded.d.cts +12 -0
- package/dist/typed/embedded.d.ts +12 -0
- package/dist/typed/embedded.js +2 -0
- package/dist/typed/pptx/read.cjs +3 -390
- package/dist/typed/pptx/read.js +1 -388
- package/dist/typed/xlsx/content.cjs +1 -1
- package/dist/typed/xlsx/content.js +1 -1
- package/package.json +5 -3
|
@@ -0,0 +1,1188 @@
|
|
|
1
|
+
const require_util_base64 = require("./util/base64.cjs");
|
|
2
|
+
const require_package_io_read = require("./package-io/read.cjs");
|
|
3
|
+
const require_typed_util = require("./typed/util.cjs");
|
|
4
|
+
const require_typed_shared_metadata = require("./typed/shared/metadata.cjs");
|
|
5
|
+
const require_image_sniff = require("./image/sniff.cjs");
|
|
6
|
+
const require_typed_shared_units = require("./typed/shared/units.cjs");
|
|
7
|
+
const require_typed_shared_drawingml = require("./typed/shared/drawingml.cjs");
|
|
8
|
+
const require_typed_shared_source_path = require("./typed/shared/source-path.cjs");
|
|
9
|
+
const require_typed_pptx_inherit = require("./typed/pptx/inherit.cjs");
|
|
10
|
+
const require_typed_pptx_chart = require("./typed/pptx/chart.cjs");
|
|
11
|
+
const require_typed_pptx_diagram = require("./typed/pptx/diagram.cjs");
|
|
12
|
+
const require_typed_xlsx_content = require("./typed/xlsx/content.cjs");
|
|
13
|
+
const require_typed_docx_styles = require("./typed/docx/styles.cjs");
|
|
14
|
+
const require_typed_docx_numbering = require("./typed/docx/numbering.cjs");
|
|
15
|
+
const require_typed_docx_constructs = require("./typed/docx/constructs.cjs");
|
|
16
|
+
let zod = require("zod");
|
|
17
|
+
let document_schema_js = require("document-schema.js");
|
|
18
|
+
let archive_codec = require("archive-codec");
|
|
19
|
+
//#region src/typed/pptx/read.ts
|
|
20
|
+
const PptxDocumentSchema = zod.z.object({
|
|
21
|
+
metadata: require_typed_shared_metadata.DocumentMetadataSchema,
|
|
22
|
+
slides: zod.z.array(document_schema_js.ContentSlideSchema)
|
|
23
|
+
});
|
|
24
|
+
const PRESENTATION_PATH = "ppt/presentation.xml";
|
|
25
|
+
const TABLE_GRAPHIC_URI = "http://schemas.openxmlformats.org/drawingml/2006/table";
|
|
26
|
+
const CHART_GRAPHIC_URI = "http://schemas.openxmlformats.org/drawingml/2006/chart";
|
|
27
|
+
const DIAGRAM_GRAPHIC_URI = "http://schemas.openxmlformats.org/drawingml/2006/diagram";
|
|
28
|
+
const OLE_GRAPHIC_URI = "http://schemas.openxmlformats.org/presentationml/2006/ole";
|
|
29
|
+
function readSlideSize(presentationRoot) {
|
|
30
|
+
const sldSz = presentationRoot === void 0 ? void 0 : require_typed_util.childrenWithTag(presentationRoot, "p:sldSz")[0];
|
|
31
|
+
const cx = sldSz === void 0 ? void 0 : require_typed_util.attr(sldSz, "cx");
|
|
32
|
+
const cy = sldSz === void 0 ? void 0 : require_typed_util.attr(sldSz, "cy");
|
|
33
|
+
return cx === void 0 || cy === void 0 ? document_schema_js.SLIDE_SIZE_WIDESCREEN : {
|
|
34
|
+
widthPt: require_typed_shared_units.emuToPt(Number(cx)),
|
|
35
|
+
heightPt: require_typed_shared_units.emuToPt(Number(cy))
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function readSlidePathsInOrder(pkg, presentationRoot) {
|
|
39
|
+
if (presentationRoot === void 0) return [];
|
|
40
|
+
const sldIdLst = require_typed_util.childrenWithTag(presentationRoot, "p:sldIdLst")[0];
|
|
41
|
+
if (sldIdLst === void 0) return [];
|
|
42
|
+
const presentationRels = require_typed_util.resolveRelationships(pkg, PRESENTATION_PATH);
|
|
43
|
+
const paths = [];
|
|
44
|
+
for (const sldId of require_typed_util.childrenWithTag(sldIdLst, "p:sldId")) {
|
|
45
|
+
const rId = require_typed_util.attr(sldId, "r:id");
|
|
46
|
+
const rel = rId === void 0 ? void 0 : presentationRels.get(rId);
|
|
47
|
+
if (rel !== void 0) paths.push(rel.target);
|
|
48
|
+
}
|
|
49
|
+
return paths;
|
|
50
|
+
}
|
|
51
|
+
function shapeName(shape) {
|
|
52
|
+
const cNvPr = require_typed_util.elementsWithTag([shape], "p:cNvPr")[0];
|
|
53
|
+
return cNvPr === void 0 ? void 0 : require_typed_util.attr(cNvPr, "name");
|
|
54
|
+
}
|
|
55
|
+
function mergeRunProperties(base, override) {
|
|
56
|
+
return {
|
|
57
|
+
fontFamily: override.fontFamily ?? base.fontFamily,
|
|
58
|
+
sizePt: override.sizePt ?? base.sizePt,
|
|
59
|
+
bold: override.bold ?? base.bold,
|
|
60
|
+
italic: override.italic ?? base.italic,
|
|
61
|
+
color: override.color ?? base.color
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function isUnderlined(rPr) {
|
|
65
|
+
if (rPr === void 0) return;
|
|
66
|
+
const u = require_typed_util.attr(rPr, "u");
|
|
67
|
+
return u === void 0 ? void 0 : u !== "none";
|
|
68
|
+
}
|
|
69
|
+
function isStrikethrough(rPr) {
|
|
70
|
+
if (rPr === void 0) return;
|
|
71
|
+
const strike = require_typed_util.attr(rPr, "strike");
|
|
72
|
+
return strike === void 0 ? void 0 : strike !== "noStrike";
|
|
73
|
+
}
|
|
74
|
+
function readHyperlink(rPr, slideRels) {
|
|
75
|
+
if (rPr === void 0) return;
|
|
76
|
+
const hlink = require_typed_util.childrenWithTag(rPr, "a:hlinkClick")[0];
|
|
77
|
+
const rId = hlink === void 0 ? void 0 : require_typed_util.attr(hlink, "r:id");
|
|
78
|
+
const rel = rId === void 0 ? void 0 : slideRels.get(rId);
|
|
79
|
+
return rel?.targetMode === "External" ? rel.target : void 0;
|
|
80
|
+
}
|
|
81
|
+
function readRun$1(runEl, cascadeBase, context, slideRels) {
|
|
82
|
+
const rPr = require_typed_util.childrenWithTag(runEl, "a:rPr")[0];
|
|
83
|
+
const merged = mergeRunProperties(cascadeBase, rPr === void 0 ? {} : require_typed_pptx_inherit.readRunPropertiesFromElement(rPr, context));
|
|
84
|
+
const tEl = require_typed_util.childrenWithTag(runEl, "a:t")[0];
|
|
85
|
+
return {
|
|
86
|
+
text: tEl === void 0 ? "" : require_typed_util.textContent(tEl),
|
|
87
|
+
bold: merged.bold,
|
|
88
|
+
italic: merged.italic,
|
|
89
|
+
underline: isUnderlined(rPr),
|
|
90
|
+
strike: isStrikethrough(rPr),
|
|
91
|
+
fontFamily: merged.fontFamily,
|
|
92
|
+
sizePt: merged.sizePt,
|
|
93
|
+
color: merged.color,
|
|
94
|
+
hyperlink: readHyperlink(rPr, slideRels)
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function readAlignment(algn) {
|
|
98
|
+
if (algn === "l") return "left";
|
|
99
|
+
if (algn === "ctr") return "center";
|
|
100
|
+
if (algn === "r") return "right";
|
|
101
|
+
if (algn === "just" || algn === "justLow") return "justify";
|
|
102
|
+
}
|
|
103
|
+
function readAbsoluteSpacingPt(spc) {
|
|
104
|
+
if (spc === void 0) return;
|
|
105
|
+
const pts = require_typed_util.childrenWithTag(spc, "a:spcPts")[0];
|
|
106
|
+
const val = pts === void 0 ? void 0 : require_typed_util.attr(pts, "val");
|
|
107
|
+
return val === void 0 ? void 0 : require_typed_shared_units.drawingMlFontSizeToPt(Number(val));
|
|
108
|
+
}
|
|
109
|
+
function readLineSpacingMultiplier(pPr) {
|
|
110
|
+
const lnSpc = pPr === void 0 ? void 0 : require_typed_util.childrenWithTag(pPr, "a:lnSpc")[0];
|
|
111
|
+
const pct = lnSpc === void 0 ? void 0 : require_typed_util.childrenWithTag(lnSpc, "a:spcPct")[0];
|
|
112
|
+
const val = pct === void 0 ? void 0 : require_typed_util.attr(pct, "val");
|
|
113
|
+
return val === void 0 ? void 0 : Number(val) / 1e5;
|
|
114
|
+
}
|
|
115
|
+
function readOutlineLevel(pPr) {
|
|
116
|
+
const raw = pPr === void 0 ? void 0 : require_typed_util.attr(pPr, "lvl");
|
|
117
|
+
if (raw === void 0 || raw === "") return;
|
|
118
|
+
const level = Number(raw);
|
|
119
|
+
return Number.isInteger(level) && level >= 0 ? level : void 0;
|
|
120
|
+
}
|
|
121
|
+
function readParagraph$1(pEl, placeholderType, context, slideRels) {
|
|
122
|
+
const pPr = require_typed_util.childrenWithTag(pEl, "a:pPr")[0];
|
|
123
|
+
const outlineLevel = readOutlineLevel(pPr);
|
|
124
|
+
const masterDefaults = require_typed_pptx_inherit.resolveDefaultRunProperties(placeholderType, outlineLevel ?? 0, context);
|
|
125
|
+
const pPrDefRPr = pPr === void 0 ? void 0 : require_typed_util.childrenWithTag(pPr, "a:defRPr")[0];
|
|
126
|
+
const paragraphDefaults = pPrDefRPr === void 0 ? masterDefaults : mergeRunProperties(masterDefaults, require_typed_pptx_inherit.readRunPropertiesFromElement(pPrDefRPr, context));
|
|
127
|
+
const runs = [];
|
|
128
|
+
for (const child of pEl.children) {
|
|
129
|
+
if (child.type !== "element") continue;
|
|
130
|
+
if (child.tag === "a:r" || child.tag === "a:fld") runs.push(readRun$1(child, paragraphDefaults, context, slideRels));
|
|
131
|
+
else if (child.tag === "a:br") runs.push({ text: "\n" });
|
|
132
|
+
}
|
|
133
|
+
const marL = pPr === void 0 ? void 0 : require_typed_util.attr(pPr, "marL");
|
|
134
|
+
const indent = pPr === void 0 ? void 0 : require_typed_util.attr(pPr, "indent");
|
|
135
|
+
return {
|
|
136
|
+
kind: "paragraph",
|
|
137
|
+
runs,
|
|
138
|
+
alignment: pPr === void 0 ? void 0 : readAlignment(require_typed_util.attr(pPr, "algn")),
|
|
139
|
+
list: outlineLevel === void 0 ? void 0 : { level: outlineLevel },
|
|
140
|
+
spacingBeforePt: readAbsoluteSpacingPt(pPr === void 0 ? void 0 : require_typed_util.childrenWithTag(pPr, "a:spcBef")[0]),
|
|
141
|
+
spacingAfterPt: readAbsoluteSpacingPt(pPr === void 0 ? void 0 : require_typed_util.childrenWithTag(pPr, "a:spcAft")[0]),
|
|
142
|
+
lineSpacing: readLineSpacingMultiplier(pPr),
|
|
143
|
+
indentLeftPt: marL === void 0 ? void 0 : require_typed_shared_units.emuToPt(Number(marL)),
|
|
144
|
+
indentFirstLinePt: indent === void 0 ? void 0 : require_typed_shared_units.emuToPt(Number(indent))
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
function textBodyParagraphs(txBody, placeholderType, context, slideRels) {
|
|
148
|
+
return txBody === void 0 ? [] : require_typed_util.childrenWithTag(txBody, "a:p").map((p) => readParagraph$1(p, placeholderType, context, slideRels));
|
|
149
|
+
}
|
|
150
|
+
const DEFAULT_INSET_LEFT_RIGHT_EMU = 91440;
|
|
151
|
+
const DEFAULT_INSET_TOP_BOTTOM_EMU = 45720;
|
|
152
|
+
const NO_TEXT_BODY_EXTRAS = {
|
|
153
|
+
insetLeftPt: 0,
|
|
154
|
+
insetTopPt: 0,
|
|
155
|
+
insetRightPt: 0,
|
|
156
|
+
insetBottomPt: 0,
|
|
157
|
+
fontScale: void 0,
|
|
158
|
+
lineSpacingReduction: void 0
|
|
159
|
+
};
|
|
160
|
+
function readShapeTextExtras(txBody) {
|
|
161
|
+
if (txBody === void 0) return NO_TEXT_BODY_EXTRAS;
|
|
162
|
+
const bodyPr = require_typed_util.childrenWithTag(txBody, "a:bodyPr")[0];
|
|
163
|
+
const lIns = bodyPr === void 0 ? void 0 : require_typed_util.attr(bodyPr, "lIns");
|
|
164
|
+
const tIns = bodyPr === void 0 ? void 0 : require_typed_util.attr(bodyPr, "tIns");
|
|
165
|
+
const rIns = bodyPr === void 0 ? void 0 : require_typed_util.attr(bodyPr, "rIns");
|
|
166
|
+
const bIns = bodyPr === void 0 ? void 0 : require_typed_util.attr(bodyPr, "bIns");
|
|
167
|
+
const normAutofit = bodyPr === void 0 ? void 0 : require_typed_util.childrenWithTag(bodyPr, "a:normAutofit")[0];
|
|
168
|
+
const fontScale = normAutofit === void 0 ? void 0 : require_typed_util.attr(normAutofit, "fontScale");
|
|
169
|
+
const lnSpcReduction = normAutofit === void 0 ? void 0 : require_typed_util.attr(normAutofit, "lnSpcReduction");
|
|
170
|
+
return {
|
|
171
|
+
insetLeftPt: require_typed_shared_units.emuToPt(lIns === void 0 ? DEFAULT_INSET_LEFT_RIGHT_EMU : Number(lIns)),
|
|
172
|
+
insetTopPt: require_typed_shared_units.emuToPt(tIns === void 0 ? DEFAULT_INSET_TOP_BOTTOM_EMU : Number(tIns)),
|
|
173
|
+
insetRightPt: require_typed_shared_units.emuToPt(rIns === void 0 ? DEFAULT_INSET_LEFT_RIGHT_EMU : Number(rIns)),
|
|
174
|
+
insetBottomPt: require_typed_shared_units.emuToPt(bIns === void 0 ? DEFAULT_INSET_TOP_BOTTOM_EMU : Number(bIns)),
|
|
175
|
+
fontScale: fontScale === void 0 ? void 0 : Number(fontScale) / 1e5,
|
|
176
|
+
lineSpacingReduction: lnSpcReduction === void 0 ? void 0 : Number(lnSpcReduction) / 1e5
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
function resolveShapeFrame(shape, context, parentTransform) {
|
|
180
|
+
const key = require_typed_pptx_inherit.readPlaceholderKey(shape);
|
|
181
|
+
const spPr = require_typed_util.childrenWithTag(shape, "p:spPr")[0];
|
|
182
|
+
const xfrm = (spPr === void 0 ? void 0 : require_typed_shared_drawingml.readXfrm(require_typed_util.childrenWithTag(spPr, "a:xfrm")[0])) ?? (key === void 0 ? void 0 : require_typed_pptx_inherit.resolvePlaceholderXfrm(key, context));
|
|
183
|
+
if (xfrm === void 0) return;
|
|
184
|
+
const localFrame = {
|
|
185
|
+
xPt: xfrm.xPt,
|
|
186
|
+
yPt: xfrm.yPt,
|
|
187
|
+
widthPt: xfrm.widthPt,
|
|
188
|
+
heightPt: xfrm.heightPt
|
|
189
|
+
};
|
|
190
|
+
const rotationDeg = require_typed_shared_drawingml.composeShapeRotationDeg(parentTransform, xfrm.rotationDeg);
|
|
191
|
+
return {
|
|
192
|
+
frame: parentTransform === void 0 ? localFrame : require_typed_shared_drawingml.applyGroupTransform(parentTransform, localFrame),
|
|
193
|
+
rotationDeg: rotationDeg === 0 ? void 0 : rotationDeg
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
function readSpShape(sp, context, slideRels, parentTransform) {
|
|
197
|
+
const resolved = resolveShapeFrame(sp, context, parentTransform);
|
|
198
|
+
if (resolved === void 0) return;
|
|
199
|
+
const key = require_typed_pptx_inherit.readPlaceholderKey(sp);
|
|
200
|
+
const txBody = require_typed_util.childrenWithTag(sp, "p:txBody")[0];
|
|
201
|
+
const blocks = textBodyParagraphs(txBody, key?.type, context, slideRels);
|
|
202
|
+
const extras = readShapeTextExtras(txBody);
|
|
203
|
+
return {
|
|
204
|
+
name: shapeName(sp),
|
|
205
|
+
frame: resolved.frame,
|
|
206
|
+
rotationDeg: resolved.rotationDeg,
|
|
207
|
+
...extras,
|
|
208
|
+
blocks
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
function readBlipImage(parent, slideRels, pkg, frame) {
|
|
212
|
+
const blip = require_typed_util.elementsWithTag([parent], "a:blip")[0];
|
|
213
|
+
const rId = blip === void 0 ? void 0 : require_typed_util.attr(blip, "r:embed");
|
|
214
|
+
const rel = rId === void 0 ? void 0 : slideRels.get(rId);
|
|
215
|
+
const mediaPart = rel === void 0 ? void 0 : pkg.parts[rel.target];
|
|
216
|
+
if (mediaPart?.kind !== "binary") return;
|
|
217
|
+
const format = require_image_sniff.sniffImageFormat(require_util_base64.base64ToBytes(mediaPart.base64));
|
|
218
|
+
return format === void 0 ? void 0 : {
|
|
219
|
+
kind: "image",
|
|
220
|
+
format,
|
|
221
|
+
base64: mediaPart.base64,
|
|
222
|
+
widthPt: frame.widthPt,
|
|
223
|
+
heightPt: frame.heightPt
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
function readPicShape(pic, context, slideRels, pkg, parentTransform) {
|
|
227
|
+
const resolved = resolveShapeFrame(pic, context, parentTransform);
|
|
228
|
+
if (resolved === void 0) return;
|
|
229
|
+
const image = readBlipImage(pic, slideRels, pkg, resolved.frame);
|
|
230
|
+
const blocks = image === void 0 ? [] : [image];
|
|
231
|
+
return {
|
|
232
|
+
name: shapeName(pic),
|
|
233
|
+
frame: resolved.frame,
|
|
234
|
+
rotationDeg: resolved.rotationDeg,
|
|
235
|
+
...NO_TEXT_BODY_EXTRAS,
|
|
236
|
+
blocks
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
function readTableCell(tc, context, slideRels) {
|
|
240
|
+
const hMerge = require_typed_util.attr(tc, "hMerge");
|
|
241
|
+
const vMerge = require_typed_util.attr(tc, "vMerge");
|
|
242
|
+
if (hMerge === "1" || vMerge === "1") return { blocks: [] };
|
|
243
|
+
const tcPr = require_typed_util.childrenWithTag(tc, "a:tcPr")[0];
|
|
244
|
+
const solidFill = tcPr === void 0 ? void 0 : require_typed_util.childrenWithTag(tcPr, "a:solidFill")[0];
|
|
245
|
+
const background = require_typed_shared_drawingml.readSolidFillColor(solidFill, context.colorMap, context.theme);
|
|
246
|
+
const txBody = require_typed_util.childrenWithTag(tc, "a:txBody")[0];
|
|
247
|
+
const gridSpan = require_typed_util.attr(tc, "gridSpan");
|
|
248
|
+
const rowSpan = require_typed_util.attr(tc, "rowSpan");
|
|
249
|
+
return {
|
|
250
|
+
blocks: textBodyParagraphs(txBody, void 0, context, slideRels),
|
|
251
|
+
colSpan: gridSpan === void 0 ? void 0 : Number(gridSpan),
|
|
252
|
+
rowSpan: rowSpan === void 0 ? void 0 : Number(rowSpan),
|
|
253
|
+
background
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
function readTable$1(tbl, context, slideRels) {
|
|
257
|
+
const tblGrid = require_typed_util.childrenWithTag(tbl, "a:tblGrid")[0];
|
|
258
|
+
const columnWidthsPt = tblGrid === void 0 ? [] : require_typed_util.childrenWithTag(tblGrid, "a:gridCol").map((col) => require_typed_shared_units.emuToPt(Number(require_typed_util.attr(col, "w") ?? "0")));
|
|
259
|
+
return {
|
|
260
|
+
kind: "table",
|
|
261
|
+
rows: require_typed_util.childrenWithTag(tbl, "a:tr").map((tr) => {
|
|
262
|
+
const h = require_typed_util.attr(tr, "h");
|
|
263
|
+
return {
|
|
264
|
+
cells: require_typed_util.childrenWithTag(tr, "a:tc").map((tc) => readTableCell(tc, context, slideRels)),
|
|
265
|
+
heightPt: h === void 0 ? void 0 : require_typed_shared_units.emuToPt(Number(h))
|
|
266
|
+
};
|
|
267
|
+
}),
|
|
268
|
+
columnWidthsPt
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
function relatedPartRoot(rId, slideRels, pkg) {
|
|
272
|
+
if (rId === void 0) return;
|
|
273
|
+
const rel = slideRels.get(rId);
|
|
274
|
+
return rel === void 0 ? void 0 : require_typed_util.rootElement(pkg.parts[rel.target]);
|
|
275
|
+
}
|
|
276
|
+
function readOleEmbeddedObject(graphicData, slideRels, pkg, frame) {
|
|
277
|
+
const oleObj = require_typed_util.elementsWithTag([graphicData], "p:oleObj")[0];
|
|
278
|
+
const rId = oleObj === void 0 ? void 0 : require_typed_util.attr(oleObj, "r:id");
|
|
279
|
+
const rel = rId === void 0 ? void 0 : slideRels.get(rId);
|
|
280
|
+
const payloadPart = rel === void 0 ? void 0 : pkg.parts[rel.target];
|
|
281
|
+
if (payloadPart?.kind !== "binary") return;
|
|
282
|
+
const payload = readEmbeddedPayloadPart(payloadPart);
|
|
283
|
+
return payload === void 0 ? void 0 : {
|
|
284
|
+
kind: "embeddedObject",
|
|
285
|
+
objectKind: payload.objectKind,
|
|
286
|
+
document: payload.document,
|
|
287
|
+
frame
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
function readGraphicFrameShape(gf, context, slideRels, pkg, parentTransform) {
|
|
291
|
+
const xfrm = require_typed_shared_drawingml.readXfrm(require_typed_util.childrenWithTag(gf, "p:xfrm")[0]);
|
|
292
|
+
if (xfrm === void 0) return;
|
|
293
|
+
const localFrame = {
|
|
294
|
+
xPt: xfrm.xPt,
|
|
295
|
+
yPt: xfrm.yPt,
|
|
296
|
+
widthPt: xfrm.widthPt,
|
|
297
|
+
heightPt: xfrm.heightPt
|
|
298
|
+
};
|
|
299
|
+
const frame = parentTransform === void 0 ? localFrame : require_typed_shared_drawingml.applyGroupTransform(parentTransform, localFrame);
|
|
300
|
+
const composedRotationDeg = require_typed_shared_drawingml.composeShapeRotationDeg(parentTransform, xfrm.rotationDeg);
|
|
301
|
+
const rotationDeg = composedRotationDeg === 0 ? void 0 : composedRotationDeg;
|
|
302
|
+
const graphic = require_typed_util.childrenWithTag(gf, "a:graphic")[0];
|
|
303
|
+
const graphicData = graphic === void 0 ? void 0 : require_typed_util.childrenWithTag(graphic, "a:graphicData")[0];
|
|
304
|
+
const uri = graphicData === void 0 ? void 0 : require_typed_util.attr(graphicData, "uri");
|
|
305
|
+
const tbl = uri === TABLE_GRAPHIC_URI && graphicData !== void 0 ? require_typed_util.childrenWithTag(graphicData, "a:tbl")[0] : void 0;
|
|
306
|
+
let blocks;
|
|
307
|
+
if (tbl !== void 0) blocks = [readTable$1(tbl, context, slideRels)];
|
|
308
|
+
else if (uri === CHART_GRAPHIC_URI && graphicData !== void 0) {
|
|
309
|
+
const chartRef = require_typed_util.childrenWithTag(graphicData, "c:chart")[0];
|
|
310
|
+
const chartRoot = relatedPartRoot(chartRef === void 0 ? void 0 : require_typed_util.attr(chartRef, "r:id"), slideRels, pkg);
|
|
311
|
+
const chartTable = chartRoot === void 0 ? void 0 : require_typed_pptx_chart.readChartTable(chartRoot, frame);
|
|
312
|
+
blocks = chartTable === void 0 ? [] : [chartTable];
|
|
313
|
+
} else if (uri === DIAGRAM_GRAPHIC_URI && graphicData !== void 0) {
|
|
314
|
+
const relIds = require_typed_util.childrenWithTag(graphicData, "dgm:relIds")[0];
|
|
315
|
+
const dataModelRoot = relatedPartRoot(relIds === void 0 ? void 0 : require_typed_util.attr(relIds, "r:dm"), slideRels, pkg);
|
|
316
|
+
blocks = dataModelRoot === void 0 ? [] : require_typed_pptx_diagram.readDiagramText(dataModelRoot);
|
|
317
|
+
} else if (uri === OLE_GRAPHIC_URI && graphicData !== void 0) {
|
|
318
|
+
const image = readBlipImage(graphicData, slideRels, pkg, frame);
|
|
319
|
+
if (image !== void 0) blocks = [image];
|
|
320
|
+
else {
|
|
321
|
+
const oleObj = require_typed_util.elementsWithTag([graphicData], "p:oleObj")[0];
|
|
322
|
+
const progId = oleObj === void 0 ? void 0 : require_typed_util.attr(oleObj, "progId");
|
|
323
|
+
blocks = progId === void 0 ? [] : [{
|
|
324
|
+
kind: "paragraph",
|
|
325
|
+
runs: [{ text: progId }]
|
|
326
|
+
}];
|
|
327
|
+
}
|
|
328
|
+
const embedded = readOleEmbeddedObject(graphicData, slideRels, pkg, frame);
|
|
329
|
+
if (embedded !== void 0) blocks.push(embedded);
|
|
330
|
+
} else blocks = [];
|
|
331
|
+
return {
|
|
332
|
+
name: shapeName(gf),
|
|
333
|
+
frame,
|
|
334
|
+
rotationDeg,
|
|
335
|
+
...NO_TEXT_BODY_EXTRAS,
|
|
336
|
+
blocks
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
function walkShapeTreeChildren(children, parentTransform, context, slideRels, pkg, out) {
|
|
340
|
+
for (const node of children) {
|
|
341
|
+
if (node.type !== "element") continue;
|
|
342
|
+
if (node.tag === "p:sp") {
|
|
343
|
+
const shape = readSpShape(node, context, slideRels, parentTransform);
|
|
344
|
+
if (shape !== void 0) out.push(shape);
|
|
345
|
+
} else if (node.tag === "p:pic") {
|
|
346
|
+
const shape = readPicShape(node, context, slideRels, pkg, parentTransform);
|
|
347
|
+
if (shape !== void 0) out.push(shape);
|
|
348
|
+
} else if (node.tag === "p:graphicFrame") {
|
|
349
|
+
const shape = readGraphicFrameShape(node, context, slideRels, pkg, parentTransform);
|
|
350
|
+
if (shape !== void 0) out.push(shape);
|
|
351
|
+
} else if (node.tag === "p:grpSp") {
|
|
352
|
+
const grpSpPr = require_typed_util.childrenWithTag(node, "p:grpSpPr")[0];
|
|
353
|
+
const xfrmEl = grpSpPr === void 0 ? void 0 : require_typed_util.childrenWithTag(grpSpPr, "a:xfrm")[0];
|
|
354
|
+
const ownGroupTransform = require_typed_shared_drawingml.readGroupXfrm(xfrmEl);
|
|
355
|
+
const composed = require_typed_shared_drawingml.composeGroupTransform(ownGroupTransform, parentTransform);
|
|
356
|
+
walkShapeTreeChildren(node.children, composed, context, slideRels, pkg, out);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
const NOTES_SLIDE_REL_SUFFIX = "/notesSlide";
|
|
361
|
+
function readNotes(pkg, slidePath) {
|
|
362
|
+
let notesPath;
|
|
363
|
+
for (const rel of require_typed_util.resolveRelationships(pkg, slidePath).values()) if (rel.type.endsWith(NOTES_SLIDE_REL_SUFFIX)) {
|
|
364
|
+
notesPath = rel.target;
|
|
365
|
+
break;
|
|
366
|
+
}
|
|
367
|
+
if (notesPath === void 0) return "";
|
|
368
|
+
const notesRoot = require_typed_util.rootElement(pkg.parts[notesPath]);
|
|
369
|
+
if (notesRoot === void 0) return "";
|
|
370
|
+
const bodyShape = require_typed_util.elementsWithTag([notesRoot], "p:sp").find((shape) => {
|
|
371
|
+
const key = require_typed_pptx_inherit.readPlaceholderKey(shape);
|
|
372
|
+
return key !== void 0 && (key.type === void 0 || key.type === "body");
|
|
373
|
+
});
|
|
374
|
+
if (bodyShape !== void 0) {
|
|
375
|
+
const txBody = require_typed_util.childrenWithTag(bodyShape, "p:txBody")[0];
|
|
376
|
+
if (txBody !== void 0) return require_typed_util.elementsWithTag(txBody.children, "a:t").map(require_typed_util.textContent).join("");
|
|
377
|
+
}
|
|
378
|
+
return require_typed_util.elementsWithTag([notesRoot], "a:t").map(require_typed_util.textContent).join("");
|
|
379
|
+
}
|
|
380
|
+
function readSlide(pkg, slidePath, size) {
|
|
381
|
+
const slideRoot = require_typed_util.rootElement(pkg.parts[slidePath]);
|
|
382
|
+
const context = require_typed_pptx_inherit.resolveSlideInheritance(pkg, slidePath);
|
|
383
|
+
const slideRels = require_typed_util.resolveRelationships(pkg, slidePath);
|
|
384
|
+
const cSld = slideRoot === void 0 ? void 0 : require_typed_util.childrenWithTag(slideRoot, "p:cSld")[0];
|
|
385
|
+
const spTree = cSld === void 0 ? void 0 : require_typed_util.childrenWithTag(cSld, "p:spTree")[0];
|
|
386
|
+
const shapes = [];
|
|
387
|
+
if (spTree !== void 0) walkShapeTreeChildren(spTree.children, void 0, context, slideRels, pkg, shapes);
|
|
388
|
+
return {
|
|
389
|
+
size,
|
|
390
|
+
shapes,
|
|
391
|
+
notes: readNotes(pkg, slidePath)
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
function readPptxContent(pkg) {
|
|
395
|
+
const presentationRoot = require_typed_util.rootElement(pkg.parts[PRESENTATION_PATH]);
|
|
396
|
+
const size = readSlideSize(presentationRoot);
|
|
397
|
+
const slides = readSlidePathsInOrder(pkg, presentationRoot).map((slidePath) => readSlide(pkg, slidePath, size));
|
|
398
|
+
slides.forEach((slide, slideIndex) => {
|
|
399
|
+
slide.shapes.forEach((shape, shapeIndex) => {
|
|
400
|
+
const shapePath = `slides[${slideIndex}].shapes[${shapeIndex}]`;
|
|
401
|
+
shape.sourcePath = shapePath;
|
|
402
|
+
require_typed_shared_source_path.assignSourcePaths(shape.blocks, shapePath);
|
|
403
|
+
});
|
|
404
|
+
});
|
|
405
|
+
return {
|
|
406
|
+
metadata: require_typed_shared_metadata.readCoreProperties(pkg),
|
|
407
|
+
slides
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
//#endregion
|
|
411
|
+
//#region src/typed/embedded.ts
|
|
412
|
+
function hasDocxBody(root) {
|
|
413
|
+
return require_typed_util.childrenWithTag(root, "w:body").length > 0;
|
|
414
|
+
}
|
|
415
|
+
const ENTRY_PARTS = [
|
|
416
|
+
{
|
|
417
|
+
partPath: "word/document.xml",
|
|
418
|
+
objectKind: "wordprocessing",
|
|
419
|
+
readerPrecondition: hasDocxBody
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
partPath: "ppt/presentation.xml",
|
|
423
|
+
objectKind: "presentation"
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
partPath: "xl/workbook.xml",
|
|
427
|
+
objectKind: "spreadsheet"
|
|
428
|
+
}
|
|
429
|
+
];
|
|
430
|
+
function detectFlavour(nested) {
|
|
431
|
+
return ENTRY_PARTS.find((candidate) => {
|
|
432
|
+
const root = require_typed_util.rootElement(nested.parts[candidate.partPath]);
|
|
433
|
+
return root !== void 0 && (candidate.readerPrecondition === void 0 || candidate.readerPrecondition(root));
|
|
434
|
+
})?.objectKind;
|
|
435
|
+
}
|
|
436
|
+
function rootEntriesOf(walk) {
|
|
437
|
+
const entries = {};
|
|
438
|
+
for (const entry of walk) if (entry.ancestors.length === 0) entries[entry.path] = entry.bytes;
|
|
439
|
+
return entries;
|
|
440
|
+
}
|
|
441
|
+
function readEmbeddedOoxmlPayload(bytes) {
|
|
442
|
+
if (!(0, archive_codec.isZipArchive)(bytes)) return;
|
|
443
|
+
try {
|
|
444
|
+
const nested = require_package_io_read.packageFromEntries(rootEntriesOf((0, archive_codec.walkArchive)(bytes)));
|
|
445
|
+
const objectKind = detectFlavour(nested);
|
|
446
|
+
return objectKind === void 0 ? void 0 : {
|
|
447
|
+
objectKind,
|
|
448
|
+
document: readNestedDocument(objectKind, nested)
|
|
449
|
+
};
|
|
450
|
+
} catch {
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
const payloadByPart = /* @__PURE__ */ new WeakMap();
|
|
455
|
+
function readEmbeddedPayloadPart(part) {
|
|
456
|
+
const cached = payloadByPart.get(part);
|
|
457
|
+
if (cached !== void 0) return cached;
|
|
458
|
+
const payload = readEmbeddedOoxmlPayload(require_util_base64.base64ToBytes(part.base64));
|
|
459
|
+
if (payload !== void 0) payloadByPart.set(part, payload);
|
|
460
|
+
return payload;
|
|
461
|
+
}
|
|
462
|
+
function readNestedDocument(objectKind, nested) {
|
|
463
|
+
switch (objectKind) {
|
|
464
|
+
case "wordprocessing": {
|
|
465
|
+
const { metadata, sections } = readDocxContent(nested);
|
|
466
|
+
return {
|
|
467
|
+
kind: "wordprocessing",
|
|
468
|
+
metadata,
|
|
469
|
+
sections
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
case "presentation": {
|
|
473
|
+
const { metadata, slides } = readPptxContent(nested);
|
|
474
|
+
return {
|
|
475
|
+
kind: "presentation",
|
|
476
|
+
metadata,
|
|
477
|
+
slides
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
case "spreadsheet": return require_typed_xlsx_content.readXlsxContent(nested);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
//#endregion
|
|
484
|
+
//#region src/typed/docx/read.ts
|
|
485
|
+
const CommentSchema = zod.z.object({
|
|
486
|
+
author: zod.z.string().optional(),
|
|
487
|
+
text: zod.z.string()
|
|
488
|
+
});
|
|
489
|
+
const FootnoteSchema = zod.z.object({
|
|
490
|
+
type: zod.z.string().optional(),
|
|
491
|
+
text: zod.z.string()
|
|
492
|
+
});
|
|
493
|
+
const DocxDocumentSchema = zod.z.object({
|
|
494
|
+
metadata: require_typed_shared_metadata.DocumentMetadataSchema,
|
|
495
|
+
sections: zod.z.array(document_schema_js.ContentSectionSchema),
|
|
496
|
+
comments: zod.z.array(CommentSchema),
|
|
497
|
+
footnotes: zod.z.array(FootnoteSchema),
|
|
498
|
+
headers: zod.z.array(zod.z.string()),
|
|
499
|
+
footers: zod.z.array(zod.z.string()),
|
|
500
|
+
numbering: zod.z.record(zod.z.string(), require_typed_docx_numbering.NumberingDefinitionSchema)
|
|
501
|
+
});
|
|
502
|
+
const DOCUMENT_PART_PATH = "word/document.xml";
|
|
503
|
+
const STYLES_PART_PATH = "word/styles.xml";
|
|
504
|
+
const THEME_REL_SUFFIX = "/theme";
|
|
505
|
+
const DEFAULT_MARGIN_PT = 72;
|
|
506
|
+
const DEFAULT_MARGINS = {
|
|
507
|
+
topPt: DEFAULT_MARGIN_PT,
|
|
508
|
+
rightPt: DEFAULT_MARGIN_PT,
|
|
509
|
+
bottomPt: DEFAULT_MARGIN_PT,
|
|
510
|
+
leftPt: DEFAULT_MARGIN_PT
|
|
511
|
+
};
|
|
512
|
+
function readPageSize(sectPr) {
|
|
513
|
+
const pgSz = require_typed_util.childrenWithTag(sectPr, "w:pgSz")[0];
|
|
514
|
+
const w = pgSz === void 0 ? void 0 : require_typed_util.attr(pgSz, "w:w");
|
|
515
|
+
const h = pgSz === void 0 ? void 0 : require_typed_util.attr(pgSz, "w:h");
|
|
516
|
+
return w === void 0 || h === void 0 ? document_schema_js.PAGE_SIZE_LETTER : {
|
|
517
|
+
widthPt: require_typed_shared_units.twipsToPt(Number(w)),
|
|
518
|
+
heightPt: require_typed_shared_units.twipsToPt(Number(h))
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
function readMargins(sectPr) {
|
|
522
|
+
const pgMar = require_typed_util.childrenWithTag(sectPr, "w:pgMar")[0];
|
|
523
|
+
if (pgMar === void 0) return DEFAULT_MARGINS;
|
|
524
|
+
const top = require_typed_util.attr(pgMar, "w:top");
|
|
525
|
+
const right = require_typed_util.attr(pgMar, "w:right");
|
|
526
|
+
const bottom = require_typed_util.attr(pgMar, "w:bottom");
|
|
527
|
+
const left = require_typed_util.attr(pgMar, "w:left");
|
|
528
|
+
return {
|
|
529
|
+
topPt: top === void 0 ? DEFAULT_MARGIN_PT : require_typed_shared_units.twipsToPt(Number(top)),
|
|
530
|
+
rightPt: right === void 0 ? DEFAULT_MARGIN_PT : require_typed_shared_units.twipsToPt(Number(right)),
|
|
531
|
+
bottomPt: bottom === void 0 ? DEFAULT_MARGIN_PT : require_typed_shared_units.twipsToPt(Number(bottom)),
|
|
532
|
+
leftPt: left === void 0 ? DEFAULT_MARGIN_PT : require_typed_shared_units.twipsToPt(Number(left))
|
|
533
|
+
};
|
|
534
|
+
}
|
|
535
|
+
function readListMembership(pPr) {
|
|
536
|
+
const numPr = pPr === void 0 ? void 0 : require_typed_util.childrenWithTag(pPr, "w:numPr")[0];
|
|
537
|
+
if (numPr === void 0) return;
|
|
538
|
+
const numIdEl = require_typed_util.childrenWithTag(numPr, "w:numId")[0];
|
|
539
|
+
const numId = numIdEl === void 0 ? void 0 : require_typed_util.attr(numIdEl, "w:val");
|
|
540
|
+
if (numId === void 0) return;
|
|
541
|
+
const ilvlEl = require_typed_util.childrenWithTag(numPr, "w:ilvl")[0];
|
|
542
|
+
const ilvlVal = ilvlEl === void 0 ? void 0 : require_typed_util.attr(ilvlEl, "w:val");
|
|
543
|
+
return {
|
|
544
|
+
numId,
|
|
545
|
+
level: ilvlVal === void 0 ? 0 : Number(ilvlVal)
|
|
546
|
+
};
|
|
547
|
+
}
|
|
548
|
+
function readToggle(el) {
|
|
549
|
+
if (el === void 0) return false;
|
|
550
|
+
const val = require_typed_util.attr(el, "w:val");
|
|
551
|
+
return val === void 0 || val !== "0" && val !== "false" && val !== "off";
|
|
552
|
+
}
|
|
553
|
+
function hasPageBreakBefore(paragraph) {
|
|
554
|
+
const pPr = require_typed_util.childrenWithTag(paragraph, "w:pPr")[0];
|
|
555
|
+
return readToggle(pPr === void 0 ? void 0 : require_typed_util.childrenWithTag(pPr, "w:pageBreakBefore")[0]);
|
|
556
|
+
}
|
|
557
|
+
function readRunText(run) {
|
|
558
|
+
let text = "";
|
|
559
|
+
for (const child of run.children) {
|
|
560
|
+
if (child.type !== "element") continue;
|
|
561
|
+
if (child.tag === "w:t" || child.tag === "w:delText") text += require_typed_util.textContent(child);
|
|
562
|
+
else if (child.tag === "w:tab") text += " ";
|
|
563
|
+
else if (child.tag === "w:br" || child.tag === "w:cr") text += "\n";
|
|
564
|
+
}
|
|
565
|
+
return text;
|
|
566
|
+
}
|
|
567
|
+
function readDrawingImage(drawing, ctx) {
|
|
568
|
+
const container = require_typed_util.childrenWithTag(drawing, "wp:inline")[0] ?? require_typed_util.childrenWithTag(drawing, "wp:anchor")[0];
|
|
569
|
+
if (container === void 0) return;
|
|
570
|
+
const extent = require_typed_util.childrenWithTag(container, "wp:extent")[0];
|
|
571
|
+
const cx = extent === void 0 ? void 0 : require_typed_util.attr(extent, "cx");
|
|
572
|
+
const cy = extent === void 0 ? void 0 : require_typed_util.attr(extent, "cy");
|
|
573
|
+
if (cx === void 0 || cy === void 0) return;
|
|
574
|
+
const widthPt = require_typed_shared_units.emuToPt(Number(cx));
|
|
575
|
+
const heightPt = require_typed_shared_units.emuToPt(Number(cy));
|
|
576
|
+
if (!Number.isFinite(widthPt) || !Number.isFinite(heightPt)) return;
|
|
577
|
+
const docPr = require_typed_util.childrenWithTag(container, "wp:docPr")[0];
|
|
578
|
+
const altText = docPr === void 0 ? void 0 : require_typed_util.attr(docPr, "descr") ?? require_typed_util.attr(docPr, "title");
|
|
579
|
+
const blip = require_typed_util.elementsWithTag(container.children, "a:blip")[0];
|
|
580
|
+
const rId = blip === void 0 ? void 0 : require_typed_util.attr(blip, "r:embed");
|
|
581
|
+
const rel = rId === void 0 ? void 0 : ctx.rels.get(rId);
|
|
582
|
+
const mediaPart = rel === void 0 ? void 0 : ctx.pkg.parts[rel.target];
|
|
583
|
+
if (mediaPart?.kind !== "binary") return;
|
|
584
|
+
const bytes = require_util_base64.base64ToBytes(mediaPart.base64);
|
|
585
|
+
const format = require_image_sniff.sniffImageFormat(bytes);
|
|
586
|
+
if (format === void 0) return;
|
|
587
|
+
const image = {
|
|
588
|
+
kind: "image",
|
|
589
|
+
format,
|
|
590
|
+
base64: mediaPart.base64,
|
|
591
|
+
widthPt,
|
|
592
|
+
heightPt
|
|
593
|
+
};
|
|
594
|
+
if (altText !== void 0) image.altText = require_typed_util.decodeEntities(altText);
|
|
595
|
+
return image;
|
|
596
|
+
}
|
|
597
|
+
function readObjectEmbeddedObject(object, ctx) {
|
|
598
|
+
const dxaOrig = require_typed_util.attr(object, "w:dxaOrig");
|
|
599
|
+
const dyaOrig = require_typed_util.attr(object, "w:dyaOrig");
|
|
600
|
+
if (dxaOrig === void 0 || dyaOrig === void 0) return;
|
|
601
|
+
const widthPt = require_typed_shared_units.twipsToPt(Number(dxaOrig));
|
|
602
|
+
const heightPt = require_typed_shared_units.twipsToPt(Number(dyaOrig));
|
|
603
|
+
if (!Number.isFinite(widthPt) || !Number.isFinite(heightPt)) return;
|
|
604
|
+
const oleObject = require_typed_util.elementsWithTag([object], "o:OLEObject")[0];
|
|
605
|
+
const rId = oleObject === void 0 ? void 0 : require_typed_util.attr(oleObject, "r:id");
|
|
606
|
+
const rel = rId === void 0 ? void 0 : ctx.rels.get(rId);
|
|
607
|
+
const payloadPart = rel === void 0 ? void 0 : ctx.pkg.parts[rel.target];
|
|
608
|
+
if (payloadPart?.kind !== "binary") return;
|
|
609
|
+
const payload = readEmbeddedPayloadPart(payloadPart);
|
|
610
|
+
return payload === void 0 ? void 0 : {
|
|
611
|
+
kind: "embeddedObject",
|
|
612
|
+
objectKind: payload.objectKind,
|
|
613
|
+
document: payload.document,
|
|
614
|
+
frame: {
|
|
615
|
+
xPt: 0,
|
|
616
|
+
yPt: 0,
|
|
617
|
+
widthPt,
|
|
618
|
+
heightPt
|
|
619
|
+
}
|
|
620
|
+
};
|
|
621
|
+
}
|
|
622
|
+
function collectLiftedElements(nodes, carryDeletions, out) {
|
|
623
|
+
for (const node of nodes) {
|
|
624
|
+
if (node.type !== "element") continue;
|
|
625
|
+
if (!carryDeletions && (node.tag === "w:del" || node.tag === "w:moveFrom")) continue;
|
|
626
|
+
if (node.tag === "w:drawing" || node.tag === "w:object") {
|
|
627
|
+
out.push(node);
|
|
628
|
+
if (node.tag === "w:drawing") continue;
|
|
629
|
+
}
|
|
630
|
+
collectLiftedElements(node.children, carryDeletions, out);
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
function readParagraphLiftedBlocks(paragraph, ctx, carryDeletions) {
|
|
634
|
+
const lifted = [];
|
|
635
|
+
collectLiftedElements(paragraph.children, carryDeletions, lifted);
|
|
636
|
+
const blocks = [];
|
|
637
|
+
for (const element of lifted) {
|
|
638
|
+
const block = element.tag === "w:object" ? readObjectEmbeddedObject(element, ctx) : readDrawingImage(element, ctx);
|
|
639
|
+
if (block !== void 0) blocks.push(block);
|
|
640
|
+
}
|
|
641
|
+
return blocks;
|
|
642
|
+
}
|
|
643
|
+
function readRun(run, paragraph, context) {
|
|
644
|
+
const props = require_typed_docx_styles.resolveRunProperties(run, paragraph, context);
|
|
645
|
+
return {
|
|
646
|
+
text: readRunText(run),
|
|
647
|
+
bold: props.bold,
|
|
648
|
+
italic: props.italic,
|
|
649
|
+
underline: props.underline,
|
|
650
|
+
strike: props.strike,
|
|
651
|
+
fontFamily: props.fontFamily,
|
|
652
|
+
sizePt: props.sizePt,
|
|
653
|
+
color: props.color
|
|
654
|
+
};
|
|
655
|
+
}
|
|
656
|
+
function readParagraphRuns(paragraph, ctx, carryDeletions) {
|
|
657
|
+
const runs = [];
|
|
658
|
+
let fieldState = "none";
|
|
659
|
+
function walk(nodes, hyperlinkTarget) {
|
|
660
|
+
for (const node of nodes) {
|
|
661
|
+
if (node.type !== "element") continue;
|
|
662
|
+
if (node.tag === "w:r") {
|
|
663
|
+
const type = require_typed_docx_constructs.fieldCharType(node);
|
|
664
|
+
if (type !== void 0) {
|
|
665
|
+
if (type === "begin") fieldState = "code";
|
|
666
|
+
else if (type === "separate") fieldState = "result";
|
|
667
|
+
else if (type === "end") fieldState = "none";
|
|
668
|
+
continue;
|
|
669
|
+
}
|
|
670
|
+
if (fieldState === "code") continue;
|
|
671
|
+
const run = readRun(node, paragraph, ctx.styles);
|
|
672
|
+
runs.push(hyperlinkTarget === void 0 ? run : {
|
|
673
|
+
...run,
|
|
674
|
+
hyperlink: hyperlinkTarget
|
|
675
|
+
});
|
|
676
|
+
} else if (node.tag === "w:fldSimple") walk(node.children, hyperlinkTarget);
|
|
677
|
+
else if (node.tag === "w:hyperlink") {
|
|
678
|
+
const rId = require_typed_util.attr(node, "r:id");
|
|
679
|
+
const target = rId === void 0 ? void 0 : ctx.rels.get(rId)?.target;
|
|
680
|
+
walk(node.children, target ?? hyperlinkTarget);
|
|
681
|
+
} else if (node.tag === "w:ins" || node.tag === "w:moveTo") walk(node.children, hyperlinkTarget);
|
|
682
|
+
else if (node.tag === "w:del" || node.tag === "w:moveFrom") {
|
|
683
|
+
if (carryDeletions) walk(node.children, hyperlinkTarget);
|
|
684
|
+
} else if (node.tag === "w:sdt") {
|
|
685
|
+
const sdtContent = require_typed_util.childrenWithTag(node, "w:sdtContent")[0];
|
|
686
|
+
if (sdtContent !== void 0) walk(sdtContent.children, hyperlinkTarget);
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
walk(paragraph.children, void 0);
|
|
691
|
+
return runs;
|
|
692
|
+
}
|
|
693
|
+
function readParagraph(paragraph, ctx, carryDeletions) {
|
|
694
|
+
const pPr = require_typed_util.childrenWithTag(paragraph, "w:pPr")[0];
|
|
695
|
+
const pStyleEl = pPr === void 0 ? void 0 : require_typed_util.childrenWithTag(pPr, "w:pStyle")[0];
|
|
696
|
+
const props = require_typed_docx_styles.resolveParagraphProperties(paragraph, ctx.styles);
|
|
697
|
+
return {
|
|
698
|
+
kind: "paragraph",
|
|
699
|
+
runs: readParagraphRuns(paragraph, ctx, carryDeletions),
|
|
700
|
+
styleId: pStyleEl === void 0 ? void 0 : require_typed_util.attr(pStyleEl, "w:val"),
|
|
701
|
+
headingLevel: props.outlineLvl === void 0 ? void 0 : (0, document_schema_js.clampHeadingLevel)(props.outlineLvl + 1),
|
|
702
|
+
alignment: props.alignment,
|
|
703
|
+
list: readListMembership(pPr),
|
|
704
|
+
spacingBeforePt: props.spacingBeforePt,
|
|
705
|
+
spacingAfterPt: props.spacingAfterPt,
|
|
706
|
+
lineSpacing: props.lineSpacing,
|
|
707
|
+
indentLeftPt: props.indentLeftPt,
|
|
708
|
+
indentFirstLinePt: props.indentFirstLinePt
|
|
709
|
+
};
|
|
710
|
+
}
|
|
711
|
+
function readCellShading(tcPr) {
|
|
712
|
+
const shd = tcPr === void 0 ? void 0 : require_typed_util.childrenWithTag(tcPr, "w:shd")[0];
|
|
713
|
+
const fill = shd === void 0 ? void 0 : require_typed_util.attr(shd, "w:fill");
|
|
714
|
+
return fill === void 0 || fill === "auto" || fill === "none" ? void 0 : (0, document_schema_js.rgbHexToColor)(fill);
|
|
715
|
+
}
|
|
716
|
+
const BORDER_STYLE_MAP = /* @__PURE__ */ new Map([
|
|
717
|
+
["single", "solid"],
|
|
718
|
+
["thick", "solid"],
|
|
719
|
+
["triple", "solid"],
|
|
720
|
+
["outset", "solid"],
|
|
721
|
+
["inset", "solid"],
|
|
722
|
+
["threeDEmboss", "solid"],
|
|
723
|
+
["threeDEngrave", "solid"],
|
|
724
|
+
["dashed", "dashed"],
|
|
725
|
+
["dashSmallGap", "dashed"],
|
|
726
|
+
["dashDotStroked", "dashed"],
|
|
727
|
+
["dotDash", "dashed"],
|
|
728
|
+
["dotted", "dotted"],
|
|
729
|
+
["dotDotDash", "dotted"],
|
|
730
|
+
["double", "double"],
|
|
731
|
+
["doubleWave", "double"]
|
|
732
|
+
]);
|
|
733
|
+
const DEFAULT_BORDER_WIDTH_EIGHTH_POINTS = 4;
|
|
734
|
+
function readCellBorderEdge(tcBorders, tag) {
|
|
735
|
+
const edge = tcBorders === void 0 ? void 0 : require_typed_util.childrenWithTag(tcBorders, tag)[0];
|
|
736
|
+
const val = edge === void 0 ? void 0 : require_typed_util.attr(edge, "w:val");
|
|
737
|
+
if (edge === void 0 || val === void 0 || val === "nil" || val === "none") return;
|
|
738
|
+
const sz = require_typed_util.attr(edge, "w:sz");
|
|
739
|
+
const colorVal = require_typed_util.attr(edge, "w:color");
|
|
740
|
+
return {
|
|
741
|
+
color: colorVal === void 0 || colorVal === "auto" ? document_schema_js.COLOR_BLACK : (0, document_schema_js.rgbHexToColor)(colorVal),
|
|
742
|
+
widthPt: require_typed_shared_units.eighthPointsToPt(sz === void 0 ? DEFAULT_BORDER_WIDTH_EIGHTH_POINTS : Number(sz)),
|
|
743
|
+
style: BORDER_STYLE_MAP.get(val) ?? "solid"
|
|
744
|
+
};
|
|
745
|
+
}
|
|
746
|
+
function readCellBorders(tcPr) {
|
|
747
|
+
const tcBorders = tcPr === void 0 ? void 0 : require_typed_util.childrenWithTag(tcPr, "w:tcBorders")[0];
|
|
748
|
+
if (tcBorders === void 0) return;
|
|
749
|
+
const borders = {};
|
|
750
|
+
const left = readCellBorderEdge(tcBorders, "w:left") ?? readCellBorderEdge(tcBorders, "w:start");
|
|
751
|
+
const right = readCellBorderEdge(tcBorders, "w:right") ?? readCellBorderEdge(tcBorders, "w:end");
|
|
752
|
+
const top = readCellBorderEdge(tcBorders, "w:top");
|
|
753
|
+
const bottom = readCellBorderEdge(tcBorders, "w:bottom");
|
|
754
|
+
if (left !== void 0) borders.left = left;
|
|
755
|
+
if (right !== void 0) borders.right = right;
|
|
756
|
+
if (top !== void 0) borders.top = top;
|
|
757
|
+
if (bottom !== void 0) borders.bottom = bottom;
|
|
758
|
+
return Object.keys(borders).length === 0 ? void 0 : borders;
|
|
759
|
+
}
|
|
760
|
+
function readRawCell(tc, ctx, carryDeletions) {
|
|
761
|
+
const tcPr = require_typed_util.childrenWithTag(tc, "w:tcPr")[0];
|
|
762
|
+
const gridSpanEl = tcPr === void 0 ? void 0 : require_typed_util.childrenWithTag(tcPr, "w:gridSpan")[0];
|
|
763
|
+
const gridSpanVal = gridSpanEl === void 0 ? void 0 : require_typed_util.attr(gridSpanEl, "w:val");
|
|
764
|
+
const vMerge = tcPr === void 0 ? void 0 : require_typed_util.childrenWithTag(tcPr, "w:vMerge")[0];
|
|
765
|
+
const vMergeVal = vMerge === void 0 ? void 0 : require_typed_util.attr(vMerge, "w:val") ?? "continue";
|
|
766
|
+
return {
|
|
767
|
+
gridSpan: gridSpanVal === void 0 ? 1 : Number(gridSpanVal),
|
|
768
|
+
isVMergeContinuation: vMergeVal === "continue",
|
|
769
|
+
background: readCellShading(tcPr),
|
|
770
|
+
borders: readCellBorders(tcPr),
|
|
771
|
+
blocks: readBlockScope(tc.children, ctx, carryDeletions)
|
|
772
|
+
};
|
|
773
|
+
}
|
|
774
|
+
function readRowHeightPt(tr) {
|
|
775
|
+
const trPr = require_typed_util.childrenWithTag(tr, "w:trPr")[0];
|
|
776
|
+
if (trPr === void 0) return;
|
|
777
|
+
const trHeight = require_typed_util.childrenWithTag(trPr, "w:trHeight")[0];
|
|
778
|
+
const val = trHeight === void 0 ? void 0 : require_typed_util.attr(trHeight, "w:val");
|
|
779
|
+
return val === void 0 ? void 0 : require_typed_shared_units.twipsToPt(Number(val));
|
|
780
|
+
}
|
|
781
|
+
function readTable(tbl, ctx, carryDeletions) {
|
|
782
|
+
const tblGrid = require_typed_util.childrenWithTag(tbl, "w:tblGrid")[0];
|
|
783
|
+
const columnWidthsPt = tblGrid === void 0 ? [] : require_typed_util.childrenWithTag(tblGrid, "w:gridCol").map((col) => require_typed_shared_units.twipsToPt(Number(require_typed_util.attr(col, "w:w") ?? "0")));
|
|
784
|
+
const trs = require_typed_util.childrenWithTag(tbl, "w:tr");
|
|
785
|
+
const rawRows = trs.map((tr) => require_typed_util.childrenWithTag(tr, "w:tc").map((tc) => readRawCell(tc, ctx, carryDeletions)));
|
|
786
|
+
const rowColumnIndices = rawRows.map((row) => {
|
|
787
|
+
const indices = [];
|
|
788
|
+
let col = 0;
|
|
789
|
+
for (const cell of row) {
|
|
790
|
+
indices.push(col);
|
|
791
|
+
col += cell.gridSpan;
|
|
792
|
+
}
|
|
793
|
+
return indices;
|
|
794
|
+
});
|
|
795
|
+
return {
|
|
796
|
+
kind: "table",
|
|
797
|
+
columnWidthsPt,
|
|
798
|
+
rows: rawRows.map((row, rowIndex) => ({
|
|
799
|
+
heightPt: readRowHeightPt(trs[rowIndex]),
|
|
800
|
+
cells: row.map((cell, cellIndex) => {
|
|
801
|
+
if (cell.isVMergeContinuation) return { blocks: [] };
|
|
802
|
+
const colIndex = rowColumnIndices[rowIndex][cellIndex];
|
|
803
|
+
let rowSpan = 1;
|
|
804
|
+
for (let r = rowIndex + 1; r < rawRows.length; r++) {
|
|
805
|
+
const matchIndex = rowColumnIndices[r].indexOf(colIndex);
|
|
806
|
+
if (!(matchIndex === -1 ? void 0 : rawRows[r][matchIndex])?.isVMergeContinuation) break;
|
|
807
|
+
rowSpan++;
|
|
808
|
+
}
|
|
809
|
+
return {
|
|
810
|
+
blocks: cell.blocks,
|
|
811
|
+
colSpan: cell.gridSpan > 1 ? cell.gridSpan : void 0,
|
|
812
|
+
rowSpan: rowSpan > 1 ? rowSpan : void 0,
|
|
813
|
+
background: cell.background,
|
|
814
|
+
borders: cell.borders
|
|
815
|
+
};
|
|
816
|
+
})
|
|
817
|
+
}))
|
|
818
|
+
};
|
|
819
|
+
}
|
|
820
|
+
function newFlowState() {
|
|
821
|
+
return {
|
|
822
|
+
blocks: [],
|
|
823
|
+
extents: [],
|
|
824
|
+
sectionBreaks: [],
|
|
825
|
+
bookmarkEvents: [],
|
|
826
|
+
openFields: [],
|
|
827
|
+
order: 0
|
|
828
|
+
};
|
|
829
|
+
}
|
|
830
|
+
function resolveBookmarkExtents(events) {
|
|
831
|
+
const byId = /* @__PURE__ */ new Map();
|
|
832
|
+
for (const event of events) {
|
|
833
|
+
const existing = byId.get(event.id);
|
|
834
|
+
if (existing === void 0) byId.set(event.id, [event]);
|
|
835
|
+
else existing.push(event);
|
|
836
|
+
}
|
|
837
|
+
const extents = [];
|
|
838
|
+
for (const halves of byId.values()) {
|
|
839
|
+
const start = halves.filter((half) => half.kind === "start");
|
|
840
|
+
const end = halves.filter((half) => half.kind === "end");
|
|
841
|
+
const open = start[0];
|
|
842
|
+
const close = end[0];
|
|
843
|
+
if (start.length !== 1 || end.length !== 1 || open === void 0 || close === void 0) continue;
|
|
844
|
+
if (open.name === void 0 || !open.qualified || !close.qualified || close.index < open.index) continue;
|
|
845
|
+
extents.push({
|
|
846
|
+
startIndex: open.index,
|
|
847
|
+
endIndex: close.index,
|
|
848
|
+
order: open.order,
|
|
849
|
+
descriptor: require_typed_docx_constructs.bookmarkAnchorDescriptor(open.name)
|
|
850
|
+
});
|
|
851
|
+
}
|
|
852
|
+
return extents;
|
|
853
|
+
}
|
|
854
|
+
function wholeParagraphTrackedChange(index) {
|
|
855
|
+
const content = require_typed_docx_constructs.contentBearingChildren(index);
|
|
856
|
+
const first = content[0];
|
|
857
|
+
if (first === void 0) return;
|
|
858
|
+
const change = require_typed_docx_constructs.PROVENANCE_CHANGE_BY_TAG.get(first.tag);
|
|
859
|
+
if (change === void 0 || !content.every((child) => child.tag === first.tag)) return;
|
|
860
|
+
return {
|
|
861
|
+
element: first,
|
|
862
|
+
change
|
|
863
|
+
};
|
|
864
|
+
}
|
|
865
|
+
function recordParagraphBookmarks(index, paragraphIndex, endIndex, state) {
|
|
866
|
+
index.elements.forEach((element, position) => {
|
|
867
|
+
if (element.tag !== "w:bookmarkStart" && element.tag !== "w:bookmarkEnd") return;
|
|
868
|
+
const id = require_typed_util.attr(element, "w:id");
|
|
869
|
+
if (id === void 0) return;
|
|
870
|
+
const leading = index.firstContentIndex === -1 || position < index.firstContentIndex;
|
|
871
|
+
const trailing = index.lastContentIndex === -1 || position > index.lastContentIndex;
|
|
872
|
+
if (element.tag === "w:bookmarkStart") {
|
|
873
|
+
const name = require_typed_util.attr(element, "w:name");
|
|
874
|
+
state.bookmarkEvents.push({
|
|
875
|
+
id,
|
|
876
|
+
name: name === void 0 ? void 0 : require_typed_util.decodeEntities(name),
|
|
877
|
+
kind: "start",
|
|
878
|
+
index: leading ? paragraphIndex : endIndex,
|
|
879
|
+
qualified: leading || trailing,
|
|
880
|
+
order: state.order++
|
|
881
|
+
});
|
|
882
|
+
return;
|
|
883
|
+
}
|
|
884
|
+
state.bookmarkEvents.push({
|
|
885
|
+
id,
|
|
886
|
+
name: void 0,
|
|
887
|
+
kind: "end",
|
|
888
|
+
index: trailing ? endIndex : paragraphIndex,
|
|
889
|
+
qualified: leading || trailing,
|
|
890
|
+
order: state.order++
|
|
891
|
+
});
|
|
892
|
+
});
|
|
893
|
+
}
|
|
894
|
+
function scanParagraphFields(index, paragraphIndex, endIndex, state) {
|
|
895
|
+
const content = require_typed_docx_constructs.contentBearingChildren(index);
|
|
896
|
+
content.forEach((child, position) => {
|
|
897
|
+
if (child.tag === "w:fldSimple") {
|
|
898
|
+
if (content.length === 1) state.extents.push({
|
|
899
|
+
startIndex: paragraphIndex,
|
|
900
|
+
endIndex,
|
|
901
|
+
order: state.order++,
|
|
902
|
+
descriptor: {
|
|
903
|
+
kind: "field",
|
|
904
|
+
instruction: require_typed_util.decodeEntities(require_typed_util.attr(child, "w:instr") ?? "")
|
|
905
|
+
}
|
|
906
|
+
});
|
|
907
|
+
return;
|
|
908
|
+
}
|
|
909
|
+
if (child.tag !== "w:r") return;
|
|
910
|
+
const type = require_typed_docx_constructs.fieldCharType(child);
|
|
911
|
+
if (type === "begin") {
|
|
912
|
+
state.openFields.push({
|
|
913
|
+
instruction: "",
|
|
914
|
+
inCode: true,
|
|
915
|
+
startIndex: paragraphIndex,
|
|
916
|
+
qualifiedStart: position === 0,
|
|
917
|
+
order: state.order++
|
|
918
|
+
});
|
|
919
|
+
return;
|
|
920
|
+
}
|
|
921
|
+
if (type === "separate") {
|
|
922
|
+
const open = state.openFields[state.openFields.length - 1];
|
|
923
|
+
if (open !== void 0) open.inCode = false;
|
|
924
|
+
return;
|
|
925
|
+
}
|
|
926
|
+
if (type === "end") {
|
|
927
|
+
const open = state.openFields.pop();
|
|
928
|
+
if (open !== void 0 && open.qualifiedStart && position === content.length - 1) state.extents.push({
|
|
929
|
+
startIndex: open.startIndex,
|
|
930
|
+
endIndex,
|
|
931
|
+
order: open.order,
|
|
932
|
+
descriptor: {
|
|
933
|
+
kind: "field",
|
|
934
|
+
instruction: open.instruction
|
|
935
|
+
}
|
|
936
|
+
});
|
|
937
|
+
return;
|
|
938
|
+
}
|
|
939
|
+
const open = state.openFields[state.openFields.length - 1];
|
|
940
|
+
if (open?.inCode === true) open.instruction += require_typed_docx_constructs.runInstructionText(child);
|
|
941
|
+
});
|
|
942
|
+
}
|
|
943
|
+
function collectParagraph(paragraph, ctx, state, carryDeletions) {
|
|
944
|
+
const index = require_typed_docx_constructs.indexParagraphContent(paragraph);
|
|
945
|
+
const tracked = wholeParagraphTrackedChange(index);
|
|
946
|
+
const paragraphDeleted = carryDeletions || tracked !== void 0 && require_typed_docx_constructs.isDeletedChange(tracked.change);
|
|
947
|
+
if (hasPageBreakBefore(paragraph)) state.blocks.push({ kind: "pageBreak" });
|
|
948
|
+
const paragraphIndex = state.blocks.length;
|
|
949
|
+
state.blocks.push(readParagraph(paragraph, ctx, paragraphDeleted));
|
|
950
|
+
state.blocks.push(...readParagraphLiftedBlocks(paragraph, ctx, paragraphDeleted));
|
|
951
|
+
const endIndex = state.blocks.length;
|
|
952
|
+
if (tracked !== void 0) state.extents.push({
|
|
953
|
+
startIndex: paragraphIndex,
|
|
954
|
+
endIndex,
|
|
955
|
+
order: state.order++,
|
|
956
|
+
descriptor: require_typed_docx_constructs.readProvenanceDescriptor(tracked.element, tracked.change)
|
|
957
|
+
});
|
|
958
|
+
recordParagraphBookmarks(index, paragraphIndex, endIndex, state);
|
|
959
|
+
scanParagraphFields(index, paragraphIndex, endIndex, state);
|
|
960
|
+
const pPr = require_typed_util.childrenWithTag(paragraph, "w:pPr")[0];
|
|
961
|
+
const sectPr = pPr === void 0 ? void 0 : require_typed_util.childrenWithTag(pPr, "w:sectPr")[0];
|
|
962
|
+
if (sectPr !== void 0) state.sectionBreaks.push({
|
|
963
|
+
index: state.blocks.length,
|
|
964
|
+
sectPr
|
|
965
|
+
});
|
|
966
|
+
}
|
|
967
|
+
function collectFlowNodes(nodes, ctx, state, carryDeletions) {
|
|
968
|
+
for (const node of nodes) {
|
|
969
|
+
if (node.type !== "element") continue;
|
|
970
|
+
if (node.tag === "w:p") {
|
|
971
|
+
collectParagraph(node, ctx, state, carryDeletions);
|
|
972
|
+
continue;
|
|
973
|
+
}
|
|
974
|
+
if (node.tag === "w:tbl") {
|
|
975
|
+
state.blocks.push(readTable(node, ctx, carryDeletions));
|
|
976
|
+
continue;
|
|
977
|
+
}
|
|
978
|
+
if (node.tag === "w:sdt") {
|
|
979
|
+
const order = state.order++;
|
|
980
|
+
const startIndex = state.blocks.length;
|
|
981
|
+
const sdtContent = require_typed_util.childrenWithTag(node, "w:sdtContent")[0];
|
|
982
|
+
if (sdtContent !== void 0) collectFlowNodes(sdtContent.children, ctx, state, carryDeletions);
|
|
983
|
+
state.extents.push({
|
|
984
|
+
startIndex,
|
|
985
|
+
endIndex: state.blocks.length,
|
|
986
|
+
order,
|
|
987
|
+
descriptor: require_typed_docx_constructs.readContentControlDescriptor(node)
|
|
988
|
+
});
|
|
989
|
+
continue;
|
|
990
|
+
}
|
|
991
|
+
const change = require_typed_docx_constructs.PROVENANCE_CHANGE_BY_TAG.get(node.tag);
|
|
992
|
+
if (change !== void 0) {
|
|
993
|
+
const order = state.order++;
|
|
994
|
+
const startIndex = state.blocks.length;
|
|
995
|
+
collectFlowNodes(node.children, ctx, state, carryDeletions || require_typed_docx_constructs.isDeletedChange(change));
|
|
996
|
+
state.extents.push({
|
|
997
|
+
startIndex,
|
|
998
|
+
endIndex: state.blocks.length,
|
|
999
|
+
order,
|
|
1000
|
+
descriptor: require_typed_docx_constructs.readProvenanceDescriptor(node, change)
|
|
1001
|
+
});
|
|
1002
|
+
continue;
|
|
1003
|
+
}
|
|
1004
|
+
if (node.tag === "mc:AlternateContent") {
|
|
1005
|
+
const target = require_typed_util.childrenWithTag(node, "mc:Fallback")[0] ?? require_typed_util.childrenWithTag(node, "mc:Choice")[0];
|
|
1006
|
+
if (target !== void 0) collectFlowNodes(target.children, ctx, state, carryDeletions);
|
|
1007
|
+
continue;
|
|
1008
|
+
}
|
|
1009
|
+
if (node.tag === "w:bookmarkStart") {
|
|
1010
|
+
const id = require_typed_util.attr(node, "w:id");
|
|
1011
|
+
const name = require_typed_util.attr(node, "w:name");
|
|
1012
|
+
if (id !== void 0) state.bookmarkEvents.push({
|
|
1013
|
+
id,
|
|
1014
|
+
name: name === void 0 ? void 0 : require_typed_util.decodeEntities(name),
|
|
1015
|
+
kind: "start",
|
|
1016
|
+
index: state.blocks.length,
|
|
1017
|
+
qualified: true,
|
|
1018
|
+
order: state.order++
|
|
1019
|
+
});
|
|
1020
|
+
continue;
|
|
1021
|
+
}
|
|
1022
|
+
if (node.tag === "w:bookmarkEnd") {
|
|
1023
|
+
const id = require_typed_util.attr(node, "w:id");
|
|
1024
|
+
if (id !== void 0) state.bookmarkEvents.push({
|
|
1025
|
+
id,
|
|
1026
|
+
name: void 0,
|
|
1027
|
+
kind: "end",
|
|
1028
|
+
index: state.blocks.length,
|
|
1029
|
+
qualified: true,
|
|
1030
|
+
order: state.order++
|
|
1031
|
+
});
|
|
1032
|
+
continue;
|
|
1033
|
+
}
|
|
1034
|
+
if (node.tag === "w:sectPr") state.sectionBreaks.push({
|
|
1035
|
+
index: state.blocks.length,
|
|
1036
|
+
sectPr: node
|
|
1037
|
+
});
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1040
|
+
function readBlockScope(nodes, ctx, carryDeletions) {
|
|
1041
|
+
const state = newFlowState();
|
|
1042
|
+
collectFlowNodes(nodes, ctx, state, carryDeletions);
|
|
1043
|
+
return require_typed_docx_constructs.insertConstructMarkers(state.blocks, [...state.extents, ...resolveBookmarkExtents(state.bookmarkEvents)]);
|
|
1044
|
+
}
|
|
1045
|
+
function readSections(body, ctx) {
|
|
1046
|
+
const state = newFlowState();
|
|
1047
|
+
collectFlowNodes(body.children, ctx, state, false);
|
|
1048
|
+
const extents = [...state.extents, ...resolveBookmarkExtents(state.bookmarkEvents)];
|
|
1049
|
+
function sliceSection(pageSize, margins, from, to) {
|
|
1050
|
+
const contained = extents.filter((extent) => extent.startIndex >= from && extent.endIndex <= to).map((extent) => ({
|
|
1051
|
+
...extent,
|
|
1052
|
+
startIndex: extent.startIndex - from,
|
|
1053
|
+
endIndex: extent.endIndex - from
|
|
1054
|
+
}));
|
|
1055
|
+
return {
|
|
1056
|
+
pageSize,
|
|
1057
|
+
margins,
|
|
1058
|
+
blocks: require_typed_docx_constructs.insertConstructMarkers(state.blocks.slice(from, to), contained)
|
|
1059
|
+
};
|
|
1060
|
+
}
|
|
1061
|
+
const sections = [];
|
|
1062
|
+
let from = 0;
|
|
1063
|
+
for (const sectionBreak of state.sectionBreaks) {
|
|
1064
|
+
sections.push(sliceSection(readPageSize(sectionBreak.sectPr), readMargins(sectionBreak.sectPr), from, sectionBreak.index));
|
|
1065
|
+
from = sectionBreak.index;
|
|
1066
|
+
}
|
|
1067
|
+
if (from < state.blocks.length || sections.length === 0) sections.push(sliceSection(document_schema_js.PAGE_SIZE_LETTER, DEFAULT_MARGINS, from, state.blocks.length));
|
|
1068
|
+
sections.forEach((section, sectionIndex) => require_typed_shared_source_path.assignSourcePaths(section.blocks, `sections[${sectionIndex}]`));
|
|
1069
|
+
return sections;
|
|
1070
|
+
}
|
|
1071
|
+
function readDocumentTheme(pkg, docRels) {
|
|
1072
|
+
for (const rel of docRels.values()) if (rel.type.endsWith(THEME_REL_SUFFIX)) {
|
|
1073
|
+
const themeRoot = require_typed_util.rootElement(pkg.parts[rel.target]);
|
|
1074
|
+
if (themeRoot !== void 0) return require_typed_shared_drawingml.readTheme(themeRoot);
|
|
1075
|
+
}
|
|
1076
|
+
return require_typed_shared_drawingml.EMPTY_THEME;
|
|
1077
|
+
}
|
|
1078
|
+
function readComment(comment) {
|
|
1079
|
+
const author = require_typed_util.attr(comment, "w:author");
|
|
1080
|
+
const result = { text: require_typed_util.elementsWithTag(comment.children, "w:t").map(require_typed_util.textContent).join("") };
|
|
1081
|
+
if (author !== void 0) result.author = author;
|
|
1082
|
+
return result;
|
|
1083
|
+
}
|
|
1084
|
+
function readFootnote(footnote) {
|
|
1085
|
+
const type = require_typed_util.attr(footnote, "w:type");
|
|
1086
|
+
const result = { text: require_typed_util.elementsWithTag(footnote.children, "w:t").map(require_typed_util.textContent).join("") };
|
|
1087
|
+
if (type !== void 0) result.type = type;
|
|
1088
|
+
return result;
|
|
1089
|
+
}
|
|
1090
|
+
function readComments(pkg) {
|
|
1091
|
+
const root = require_typed_util.rootElement(pkg.parts["word/comments.xml"]);
|
|
1092
|
+
if (root === void 0) return [];
|
|
1093
|
+
return require_typed_util.childrenWithTag(root, "w:comment").map(readComment);
|
|
1094
|
+
}
|
|
1095
|
+
function readFootnotes(pkg) {
|
|
1096
|
+
const root = require_typed_util.rootElement(pkg.parts["word/footnotes.xml"]);
|
|
1097
|
+
if (root === void 0) return [];
|
|
1098
|
+
const out = [];
|
|
1099
|
+
for (const fn of require_typed_util.childrenWithTag(root, "w:footnote")) {
|
|
1100
|
+
const type = require_typed_util.attr(fn, "w:type");
|
|
1101
|
+
if (type === "separator" || type === "continuationSeparator") continue;
|
|
1102
|
+
out.push(readFootnote(fn));
|
|
1103
|
+
}
|
|
1104
|
+
return out;
|
|
1105
|
+
}
|
|
1106
|
+
function readHeaderFooterText(pkg, prefix) {
|
|
1107
|
+
const out = [];
|
|
1108
|
+
for (const path of Object.keys(pkg.parts)) {
|
|
1109
|
+
if (!path.startsWith(prefix) || !path.endsWith(".xml")) continue;
|
|
1110
|
+
const part = pkg.parts[path];
|
|
1111
|
+
if (part?.kind !== "xml") continue;
|
|
1112
|
+
out.push(require_typed_util.elementsWithTag(part.nodes, "w:t").map(require_typed_util.textContent).join(""));
|
|
1113
|
+
}
|
|
1114
|
+
return out;
|
|
1115
|
+
}
|
|
1116
|
+
function readDocxContent(pkg) {
|
|
1117
|
+
const documentRoot = require_typed_util.rootElement(pkg.parts[DOCUMENT_PART_PATH]);
|
|
1118
|
+
if (documentRoot === void 0) throw new Error(`readDocxContent: package has no ${DOCUMENT_PART_PATH} part`);
|
|
1119
|
+
const body = require_typed_util.childrenWithTag(documentRoot, "w:body")[0];
|
|
1120
|
+
if (body === void 0) throw new Error(`readDocxContent: ${DOCUMENT_PART_PATH} has no w:body element`);
|
|
1121
|
+
const docRels = require_typed_util.resolveRelationships(pkg, DOCUMENT_PART_PATH);
|
|
1122
|
+
const ctx = {
|
|
1123
|
+
styles: {
|
|
1124
|
+
stylesRoot: require_typed_util.rootElement(pkg.parts[STYLES_PART_PATH]),
|
|
1125
|
+
theme: readDocumentTheme(pkg, docRels)
|
|
1126
|
+
},
|
|
1127
|
+
rels: docRels,
|
|
1128
|
+
pkg
|
|
1129
|
+
};
|
|
1130
|
+
return {
|
|
1131
|
+
metadata: require_typed_shared_metadata.readCoreProperties(pkg),
|
|
1132
|
+
sections: readSections(body, ctx),
|
|
1133
|
+
comments: readComments(pkg),
|
|
1134
|
+
footnotes: readFootnotes(pkg),
|
|
1135
|
+
headers: readHeaderFooterText(pkg, "word/header"),
|
|
1136
|
+
footers: readHeaderFooterText(pkg, "word/footer"),
|
|
1137
|
+
numbering: require_typed_docx_numbering.readNumberingDefinitions(pkg)
|
|
1138
|
+
};
|
|
1139
|
+
}
|
|
1140
|
+
//#endregion
|
|
1141
|
+
Object.defineProperty(exports, "CommentSchema", {
|
|
1142
|
+
enumerable: true,
|
|
1143
|
+
get: function() {
|
|
1144
|
+
return CommentSchema;
|
|
1145
|
+
}
|
|
1146
|
+
});
|
|
1147
|
+
Object.defineProperty(exports, "DocxDocumentSchema", {
|
|
1148
|
+
enumerable: true,
|
|
1149
|
+
get: function() {
|
|
1150
|
+
return DocxDocumentSchema;
|
|
1151
|
+
}
|
|
1152
|
+
});
|
|
1153
|
+
Object.defineProperty(exports, "FootnoteSchema", {
|
|
1154
|
+
enumerable: true,
|
|
1155
|
+
get: function() {
|
|
1156
|
+
return FootnoteSchema;
|
|
1157
|
+
}
|
|
1158
|
+
});
|
|
1159
|
+
Object.defineProperty(exports, "PptxDocumentSchema", {
|
|
1160
|
+
enumerable: true,
|
|
1161
|
+
get: function() {
|
|
1162
|
+
return PptxDocumentSchema;
|
|
1163
|
+
}
|
|
1164
|
+
});
|
|
1165
|
+
Object.defineProperty(exports, "readDocxContent", {
|
|
1166
|
+
enumerable: true,
|
|
1167
|
+
get: function() {
|
|
1168
|
+
return readDocxContent;
|
|
1169
|
+
}
|
|
1170
|
+
});
|
|
1171
|
+
Object.defineProperty(exports, "readEmbeddedOoxmlPayload", {
|
|
1172
|
+
enumerable: true,
|
|
1173
|
+
get: function() {
|
|
1174
|
+
return readEmbeddedOoxmlPayload;
|
|
1175
|
+
}
|
|
1176
|
+
});
|
|
1177
|
+
Object.defineProperty(exports, "readEmbeddedPayloadPart", {
|
|
1178
|
+
enumerable: true,
|
|
1179
|
+
get: function() {
|
|
1180
|
+
return readEmbeddedPayloadPart;
|
|
1181
|
+
}
|
|
1182
|
+
});
|
|
1183
|
+
Object.defineProperty(exports, "readPptxContent", {
|
|
1184
|
+
enumerable: true,
|
|
1185
|
+
get: function() {
|
|
1186
|
+
return readPptxContent;
|
|
1187
|
+
}
|
|
1188
|
+
});
|