reamkit 1.32.0 → 1.33.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 +5 -4
- package/dist/esm/core/bidi/algorithm.js +2 -2
- package/dist/esm/core/bidi/char-types.js +1 -1
- package/dist/esm/core/bidi/index.js +3 -3
- package/dist/esm/core/bytes.js +1 -1
- package/dist/esm/core/converter/facade.js +3 -2
- package/dist/esm/core/converter/ream.js +12 -5
- package/dist/esm/core/crypto/asn1.js +2 -2
- package/dist/esm/core/crypto/cms.js +5 -3
- package/dist/esm/core/crypto/index.js +2 -1
- package/dist/esm/core/crypto/offcrypto.js +64 -19
- package/dist/esm/core/crypto/primitives.js +16 -16
- package/dist/esm/core/document-model/index.d.ts +1 -1
- package/dist/esm/core/document-model/types.d.ts +174 -2
- package/dist/esm/core/drawingml/chart-geometry.d.ts +45 -17
- package/dist/esm/core/drawingml/chart-geometry.js +1090 -257
- package/dist/esm/core/drawingml/chart-parser.d.ts +24 -1
- package/dist/esm/core/drawingml/chart-parser.js +334 -41
- package/dist/esm/core/drawingml/chart-text.d.ts +41 -0
- package/dist/esm/core/drawingml/chart-text.js +93 -0
- package/dist/esm/core/drawingml/colors.js +5 -5
- package/dist/esm/core/drawingml/diagram/layout-engine.js +1 -4
- package/dist/esm/core/drawingml/diagram/run.js +2 -1
- package/dist/esm/core/drawingml/preset-geometry.js +4 -6
- package/dist/esm/core/drawingml/shape-render.js +1 -1
- package/dist/esm/core/drawingml/text-warp.js +4 -16
- package/dist/esm/core/drawingml/theme-parser.js +14 -8
- package/dist/esm/core/font/arabic-joining.js +2 -2
- package/dist/esm/core/font/binary-reader.js +2 -0
- package/dist/esm/core/font/font-registry.js +1 -0
- package/dist/esm/core/font/ligatures.js +1 -1
- package/dist/esm/core/font/opentype-layout.js +11 -5
- package/dist/esm/core/font/ttf-build.js +6 -10
- package/dist/esm/core/font/ttf-parser.js +2 -1
- package/dist/esm/core/font/ttf-subset.js +8 -8
- package/dist/esm/core/fonts/families.js +1 -1
- package/dist/esm/core/fonts/remote-fonts.js +4 -4
- package/dist/esm/core/hyphenation/index.js +1 -1
- package/dist/esm/core/images.js +8 -8
- package/dist/esm/core/ir/loss.js +1 -0
- package/dist/esm/core/line-breaker/cjk.js +1 -1
- package/dist/esm/core/line-breaker/index.js +4 -3
- package/dist/esm/core/links.js +1 -1
- package/dist/esm/core/lzw.js +1 -1
- package/dist/esm/core/metafile/blit.js +1 -1
- package/dist/esm/core/metafile/emf.js +5 -7
- package/dist/esm/core/metafile/picture.js +1 -1
- package/dist/esm/core/metafile/symbol-fonts.js +7 -7
- package/dist/esm/core/metafile/wmf.js +5 -7
- package/dist/esm/core/number-format.d.ts +40 -15
- package/dist/esm/core/number-format.js +284 -79
- package/dist/esm/core/numbering/index.js +3 -2
- package/dist/esm/core/ole/cfb.js +4 -4
- package/dist/esm/core/ole/escher-blip.js +1 -1
- package/dist/esm/core/opc/index.js +5 -4
- package/dist/esm/core/opc/package.js +3 -1
- package/dist/esm/core/opc/tag-scan.d.ts +15 -0
- package/dist/esm/core/opc/tag-scan.js +41 -0
- package/dist/esm/core/opc/xml-entities.js +40 -3
- package/dist/esm/core/outline.js +1 -1
- package/dist/esm/core/png-encode.js +3 -3
- package/dist/esm/core/po-helpers.js +1 -1
- package/dist/esm/core/spreadsheet-model/types.d.ts +6 -0
- package/dist/esm/core/style-cascade/index.js +4 -3
- package/dist/esm/core/tiff.js +3 -1
- package/dist/esm/excel/activex-parser.js +1 -1
- package/dist/esm/excel/conditional-format.js +7 -7
- package/dist/esm/excel/formula/functions.js +45 -18
- package/dist/esm/excel/formula/index.js +3 -3
- package/dist/esm/excel/formula/lexer.js +2 -2
- package/dist/esm/excel/formula/parser.js +4 -3
- package/dist/esm/excel/formula/value.js +1 -1
- package/dist/esm/excel/index.js +7 -6
- package/dist/esm/excel/print-model.js +18 -7
- package/dist/esm/excel/printer-settings.js +6 -7
- package/dist/esm/excel/rich-value.js +1 -1
- package/dist/esm/excel/sheet-shape-parser.js +4 -2
- package/dist/esm/excel/sheet-to-flow.js +13 -11
- package/dist/esm/excel/styles-parser.js +5 -3
- package/dist/esm/excel/tint.js +5 -5
- package/dist/esm/excel/vml-drawing.js +3 -3
- package/dist/esm/excel/worksheet-parser.js +5 -5
- package/dist/esm/excel/xls/biff-chart.js +1 -3
- package/dist/esm/excel/xls/biff-reader.js +10 -11
- package/dist/esm/excel/xls/xls-reader.js +1 -1
- package/dist/esm/excel/xlsx-reader.js +56 -9
- package/dist/esm/excel/xlsx-to-pdf.js +1 -1
- package/dist/esm/excel/xlsx-writer.js +2 -2
- package/dist/esm/html/html-writer.js +18 -10
- package/dist/esm/layout/line-paint.js +1 -1
- package/dist/esm/layout/math-layout.js +5 -8
- package/dist/esm/layout/styled-layout.js +104 -32
- package/dist/esm/layout/turned-section.js +2 -2
- package/dist/esm/markdown/markdown-writer.js +59 -8
- package/dist/esm/pdf/encryption.js +9 -9
- package/dist/esm/pdf/icc-profile.js +2 -2
- package/dist/esm/pdf/index.js +3 -2
- package/dist/esm/pdf/objects.js +7 -0
- package/dist/esm/pdf/serialize.js +1 -1
- package/dist/esm/pdf/struct-tree.js +3 -1
- package/dist/esm/pdf/styled-page-emitter.js +23 -15
- package/dist/esm/pdf/styled-page-renderer.js +9 -5
- package/dist/esm/pdf-reader/annot-draw.js +5 -5
- package/dist/esm/pdf-reader/annots.js +3 -1
- package/dist/esm/pdf-reader/ccitt.js +2 -1
- package/dist/esm/pdf-reader/cff-outline.js +1 -4
- package/dist/esm/pdf-reader/content.js +13 -15
- package/dist/esm/pdf-reader/decrypt.js +5 -4
- package/dist/esm/pdf-reader/document.js +6 -2
- package/dist/esm/pdf-reader/encodings.js +1 -1
- package/dist/esm/pdf-reader/flow-build.js +4 -6
- package/dist/esm/pdf-reader/font.js +4 -4
- package/dist/esm/pdf-reader/function.js +8 -7
- package/dist/esm/pdf-reader/icc.js +1 -1
- package/dist/esm/pdf-reader/images.js +1 -1
- package/dist/esm/pdf-reader/jbig2.js +36 -38
- package/dist/esm/pdf-reader/jpeg.js +14 -13
- package/dist/esm/pdf-reader/layout.js +13 -10
- package/dist/esm/pdf-reader/lexer.js +2 -1
- package/dist/esm/pdf-reader/math-rows.js +2 -2
- package/dist/esm/pdf-reader/optional-content.js +1 -1
- package/dist/esm/pdf-reader/page-numbers.js +1 -1
- package/dist/esm/pdf-reader/pattern-tint.js +1 -2
- package/dist/esm/pdf-reader/reader.js +2 -2
- package/dist/esm/pdf-reader/struct-tree.js +1 -1
- package/dist/esm/pdf-reader/tagged.js +3 -2
- package/dist/esm/pdf-reader/text.js +2 -2
- package/dist/esm/pdf-reader/type1-outline.js +1 -3
- package/dist/esm/pptx/embedded-fonts.js +3 -5
- package/dist/esm/pptx/placeholder-cascade.js +1 -1
- package/dist/esm/pptx/ppt/ppt-reader.js +5 -4
- package/dist/esm/pptx/ppt/ppt-text.js +9 -10
- package/dist/esm/pptx/pptx-reader.js +6 -5
- package/dist/esm/pptx/preset-table-styles.js +1 -1
- package/dist/esm/pptx/slide-parser.js +6 -4
- package/dist/esm/pptx/sp-helpers.js +1 -1
- package/dist/esm/pptx/table-style.js +2 -1
- package/dist/esm/svg/svg-writer.js +1 -1
- package/dist/esm/word/doc/doc-reader.js +2 -2
- package/dist/esm/word/doc/doc-text.js +20 -22
- package/dist/esm/word/document-parser.js +27 -22
- package/dist/esm/word/docx-reader.js +15 -10
- package/dist/esm/word/docx-to-pdf.js +6 -6
- package/dist/esm/word/docx-writer.js +10 -6
- package/dist/esm/word/drawing-parser.js +18 -18
- package/dist/esm/word/font-table.js +90 -11
- package/dist/esm/word/index.js +6 -5
- package/dist/esm/word/numbering-parser.js +5 -4
- package/dist/esm/word/omml-parser.js +1 -1
- package/dist/esm/word/paragraph-properties.js +11 -10
- package/dist/esm/word/run-properties.js +4 -4
- package/dist/esm/word/settings-parser.js +2 -1
- package/dist/esm/word/shading.js +1 -1
- package/dist/esm/word/styles-parser.js +5 -4
- package/dist/esm/word/table-parser.js +4 -4
- package/dist/esm/word/theme-fonts.js +1 -1
- package/package.json +10 -4
package/README.md
CHANGED
|
@@ -213,10 +213,11 @@ own PDF: columns in the Normal font's digit as Excel counts it, a table in the
|
|
|
213
213
|
style it names, a theme colour's tint to the digit, a sheet that reads from the
|
|
214
214
|
right turned round, the notes it shows beside their cells, its drawings over
|
|
215
215
|
the cells and cut where its pages are, a chart's axes scaled and crossed where
|
|
216
|
-
Excel puts them
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
216
|
+
Excel puts them, its text in the face Excel sets it in, its 3-D bars and pies
|
|
217
|
+
standing in three dimensions. As HTML a workbook comes out as Excel's window
|
|
218
|
+
shows it — every tab, its gridlines, a noted cell flagged with the note on
|
|
219
|
+
hover — and as SVG as pictures of its sheets, each whole, its text drawn from
|
|
220
|
+
the faces' own outlines.
|
|
220
221
|
|
|
221
222
|
**Reads PDF, too.** `Ream.parse` accepts a PDF and reconstructs a `FlowDoc` — a
|
|
222
223
|
tagged PDF from its structure tree (headings, tables, lists, reading order), an
|
|
@@ -268,7 +268,7 @@ function resolveWeakTypes(types, seq) {
|
|
|
268
268
|
else if (t === "EN" && lastStrong === "L") types[i] = "L";
|
|
269
269
|
}
|
|
270
270
|
}
|
|
271
|
-
var BRACKET_OPEN_TO_CLOSE = new Map([
|
|
271
|
+
var BRACKET_OPEN_TO_CLOSE = /* @__PURE__ */ new Map([
|
|
272
272
|
[40, 41],
|
|
273
273
|
[91, 93],
|
|
274
274
|
[123, 125],
|
|
@@ -447,7 +447,7 @@ function reorderVisual(levels) {
|
|
|
447
447
|
const order = Array.from({ length: n }, (_, i) => i);
|
|
448
448
|
if (n === 0) return order;
|
|
449
449
|
let highest = 0;
|
|
450
|
-
let lowestOdd =
|
|
450
|
+
let lowestOdd = 126;
|
|
451
451
|
for (const lvl of levels) {
|
|
452
452
|
if (lvl > highest) highest = lvl;
|
|
453
453
|
if (lvl % 2 === 1 && lvl < lowestOdd) lowestOdd = lvl;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { bidiClass } from "./char-types.js";
|
|
2
|
-
import { computeBidi } from "./algorithm.js";
|
|
3
|
-
import "./segments.js";
|
|
2
|
+
import { computeBidi, reorderVisual } from "./algorithm.js";
|
|
3
|
+
import { segmentLevels } from "./segments.js";
|
|
4
4
|
//#region src/core/bidi/index.ts
|
|
5
5
|
/**
|
|
6
6
|
* Run the UAX #9 algorithm over a string, returning per-code-point embedding
|
|
@@ -66,4 +66,4 @@ function reverseByCodePoint(text) {
|
|
|
66
66
|
return [...text].reverse().join("");
|
|
67
67
|
}
|
|
68
68
|
//#endregion
|
|
69
|
-
export { analyzeString, firstStrongDirection, hasBidiCharacters, reverseByCodePoint };
|
|
69
|
+
export { analyzeString, bidiClass, firstStrongDirection, hasBidiCharacters, reorderVisual, reverseByCodePoint, segmentLevels };
|
package/dist/esm/core/bytes.js
CHANGED
|
@@ -129,10 +129,11 @@ function createConverter(opts = {}) {
|
|
|
129
129
|
if (!fonts) throw new Error("to: 'svg' requires options.fonts/fontBytes or fontProviders");
|
|
130
130
|
const { doc } = reader.read(bytes);
|
|
131
131
|
const registry = FontRegistry.fromBytes(fonts);
|
|
132
|
-
const
|
|
132
|
+
const laid = doc.kind === "sheet" ? layoutSheetImages(doc, { registry }, rest.now ? { now: rest.now } : {}) : layoutStyledDocument(doc.body, {
|
|
133
133
|
registry,
|
|
134
134
|
...flowRenderOptions(doc)
|
|
135
|
-
})
|
|
135
|
+
});
|
|
136
|
+
const svg = writeSvg(laid);
|
|
136
137
|
losses.push(...svg.losses);
|
|
137
138
|
if (strict && losses.length > 0) throw new ConversionLossError(losses[0]);
|
|
138
139
|
return {
|
|
@@ -53,6 +53,11 @@ var SOURCE_MIME = {
|
|
|
53
53
|
* substitute-font auto-detection and PDF/A-3 `embedSource`.
|
|
54
54
|
*/
|
|
55
55
|
var Ream = class Ream {
|
|
56
|
+
flow;
|
|
57
|
+
sheet;
|
|
58
|
+
losses;
|
|
59
|
+
source;
|
|
60
|
+
readerId;
|
|
56
61
|
/**
|
|
57
62
|
* @param flow The interlayer — the parsed, format-neutral document tree.
|
|
58
63
|
* @param sheet The native SpreadsheetML tree when the source is a spreadsheet
|
|
@@ -142,11 +147,12 @@ var Ream = class Ream {
|
|
|
142
147
|
};
|
|
143
148
|
}
|
|
144
149
|
if (to === "md") {
|
|
145
|
-
const
|
|
150
|
+
const source = this.sheet && options.sheetNames !== false ? projectSheetDoc(this.sheet, {
|
|
146
151
|
...options.now ? { now: options.now } : {},
|
|
147
152
|
...options.fileName ? { fileName: options.fileName } : {},
|
|
148
153
|
sheetHeadings: true
|
|
149
|
-
}) : flow
|
|
154
|
+
}) : flow;
|
|
155
|
+
const markdown = writeMarkdown(source, {
|
|
150
156
|
...options.images ? { images: options.images } : {},
|
|
151
157
|
...options.pageBreaks ? { pageBreaks: options.pageBreaks } : {}
|
|
152
158
|
});
|
|
@@ -189,11 +195,12 @@ var Ream = class Ream {
|
|
|
189
195
|
registry,
|
|
190
196
|
...registriesByFamily ? { registriesByFamily } : {}
|
|
191
197
|
};
|
|
192
|
-
const
|
|
198
|
+
const laid = this.sheet ? layoutSheetImages(this.sheet, faces, sheetOptions, renderOptions) : layoutStyledDocument(flow.body, {
|
|
193
199
|
...faces,
|
|
194
200
|
...flowRenderOptions(flow),
|
|
195
201
|
...renderOptions
|
|
196
|
-
})
|
|
202
|
+
});
|
|
203
|
+
const svg = writeSvg(laid);
|
|
197
204
|
losses.push(...svg.losses);
|
|
198
205
|
this.enforceStrict(options, losses);
|
|
199
206
|
return {
|
|
@@ -250,7 +257,7 @@ var Ream = class Ream {
|
|
|
250
257
|
if (fonts) return { fonts };
|
|
251
258
|
}
|
|
252
259
|
const fetchOpt = options.fontFetch ? { fetch: options.fontFetch } : {};
|
|
253
|
-
const keys = options.fontFamily ? new Set([resolveFamilyKey(options.fontFamily)]) : familiesInFlow(flow);
|
|
260
|
+
const keys = options.fontFamily ? /* @__PURE__ */ new Set([resolveFamilyKey(options.fontFamily)]) : familiesInFlow(flow);
|
|
254
261
|
if (keys.size <= 1 && scriptsInFlow(flow).scripts.size === 0) {
|
|
255
262
|
const family = keys.values().next().value;
|
|
256
263
|
return { fonts: await fetchFontSet({
|
|
@@ -49,7 +49,7 @@ var set = (...items) => tlv(49, concat(items));
|
|
|
49
49
|
/** OCTET STRING (tag `0x04`) wrapping raw `bytes`. */
|
|
50
50
|
var octetString = (bytes) => tlv(4, bytes);
|
|
51
51
|
/** NULL (tag `0x05`, empty content). */
|
|
52
|
-
var nullValue = () => tlv(5, new Uint8Array(0));
|
|
52
|
+
var nullValue = () => tlv(5, /* @__PURE__ */ new Uint8Array(0));
|
|
53
53
|
/** `[n]` context-tag, constructed (EXPLICIT or IMPLICIT-over-constructed). */
|
|
54
54
|
var explicit = (tagNum, content) => tlv(160 | tagNum, content);
|
|
55
55
|
function base128(v) {
|
|
@@ -185,4 +185,4 @@ function certIssuerAndSerial(cert) {
|
|
|
185
185
|
};
|
|
186
186
|
}
|
|
187
187
|
//#endregion
|
|
188
|
-
export { certIssuerAndSerial, cmsTime, concat, explicit, integer, nullValue, octetString, oid, seq, set, setOfBody, tlv };
|
|
188
|
+
export { certIssuerAndSerial, cmsTime, concat, explicit, integer, nullValue, octetString, oid, readTlv, seq, set, setOfBody, tlv };
|
|
@@ -24,17 +24,19 @@ var attribute = (oidStr, value) => seq(oid(oidStr), set(value));
|
|
|
24
24
|
*/
|
|
25
25
|
async function buildPkcs7Detached(params) {
|
|
26
26
|
const { issuer, serial } = certIssuerAndSerial(params.certificate);
|
|
27
|
-
const
|
|
27
|
+
const attrs = [
|
|
28
28
|
attribute(OID.contentType, oid(OID.idData)),
|
|
29
29
|
attribute(OID.messageDigest, octetString(params.messageDigest)),
|
|
30
30
|
attribute(OID.signingTime, cmsTime(params.signingTime))
|
|
31
|
-
]
|
|
31
|
+
];
|
|
32
|
+
const attrsBody = setOfBody(attrs);
|
|
32
33
|
const signedAttrsForSigning = tlv(49, attrsBody);
|
|
33
34
|
const signedAttrsTagged = tlv(160, attrsBody);
|
|
34
35
|
const signature = await params.sign(signedAttrsForSigning);
|
|
35
36
|
const sigAlgId = params.signatureAlgorithm === "ecdsa" ? ecdsaAlgId() : rsaAlgId();
|
|
36
37
|
const signerInfo = seq(integer(1), seq(issuer, serial), sha256AlgId(), signedAttrsTagged, sigAlgId, octetString(signature));
|
|
37
|
-
const
|
|
38
|
+
const certBlobs = [params.certificate, ...params.extraCertificates ?? []];
|
|
39
|
+
const certificates = tlv(160, concat(certBlobs));
|
|
38
40
|
const signedData = seq(integer(1), set(sha256AlgId()), seq(oid(OID.idData)), certificates, set(signerInfo));
|
|
39
41
|
return seq(oid(OID.idSignedData), explicit(0, signedData));
|
|
40
42
|
}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import "./cms.js";
|
|
1
|
+
import { buildPkcs7Detached } from "./cms.js";
|
|
2
|
+
export { buildPkcs7Detached };
|
|
@@ -69,16 +69,16 @@ function standard(info, payload, password) {
|
|
|
69
69
|
}
|
|
70
70
|
function standardKey(password, salt, keyLength) {
|
|
71
71
|
let h = sha1(concat(salt, utf16le(password)));
|
|
72
|
-
const counter = new Uint8Array(4);
|
|
72
|
+
const counter = /* @__PURE__ */ new Uint8Array(4);
|
|
73
73
|
for (let i = 0; i < 5e4; i++) {
|
|
74
74
|
new DataView(counter.buffer).setUint32(0, i, true);
|
|
75
75
|
h = sha1(concat(counter, h));
|
|
76
76
|
}
|
|
77
|
-
h = sha1(concat(h, new Uint8Array(4)));
|
|
77
|
+
h = sha1(concat(h, /* @__PURE__ */ new Uint8Array(4)));
|
|
78
78
|
return concat(sha1(padded(h, 54)), sha1(padded(h, 92))).subarray(0, keyLength);
|
|
79
79
|
}
|
|
80
80
|
function padded(h, byte) {
|
|
81
|
-
const buf = new Uint8Array(64).fill(byte);
|
|
81
|
+
const buf = (/* @__PURE__ */ new Uint8Array(64)).fill(byte);
|
|
82
82
|
for (let i = 0; i < h.length && i < 64; i++) buf[i] = buf[i] ^ h[i];
|
|
83
83
|
return buf;
|
|
84
84
|
}
|
|
@@ -104,7 +104,7 @@ function agile(info, payload, password) {
|
|
|
104
104
|
const packageKey = decryptAgile(keyFor(BLOCK_KEY_VALUE), enc.saltValue, encryptedKeyValue, enc.cbc).subarray(0, keyData.keyBits / 8);
|
|
105
105
|
const cipher = payload.subarray(8);
|
|
106
106
|
const out = new Uint8Array(cipher.length);
|
|
107
|
-
const counter = new Uint8Array(4);
|
|
107
|
+
const counter = /* @__PURE__ */ new Uint8Array(4);
|
|
108
108
|
for (let i = 0; i * SEGMENT < cipher.length; i++) {
|
|
109
109
|
new DataView(counter.buffer).setUint32(0, i, true);
|
|
110
110
|
const iv = keyData.hash(concat(keyData.saltValue, counter)).subarray(0, keyData.blockSize || 16);
|
|
@@ -115,7 +115,7 @@ function agile(info, payload, password) {
|
|
|
115
115
|
}
|
|
116
116
|
function agileSpin(password, enc, spinCount) {
|
|
117
117
|
let h = enc.hash(concat(enc.saltValue, utf16le(password)));
|
|
118
|
-
const counter = new Uint8Array(4);
|
|
118
|
+
const counter = /* @__PURE__ */ new Uint8Array(4);
|
|
119
119
|
for (let i = 0; i < spinCount; i++) {
|
|
120
120
|
new DataView(counter.buffer).setUint32(0, i, true);
|
|
121
121
|
h = enc.hash(concat(counter, h));
|
|
@@ -132,9 +132,10 @@ function agileBlockKey(spun, enc, block) {
|
|
|
132
132
|
}
|
|
133
133
|
function decryptAgile(key, iv, data, cbc) {
|
|
134
134
|
if (!cbc) return aesEcbDecrypt(key, data);
|
|
135
|
-
|
|
135
|
+
const block = iv.length >= 16 ? iv.subarray(0, 16) : concat(iv, new Uint8Array(16 - iv.length));
|
|
136
|
+
return aesCbcDecrypt(key, block, data, false);
|
|
136
137
|
}
|
|
137
|
-
var HASHES = new Map([
|
|
138
|
+
var HASHES = /* @__PURE__ */ new Map([
|
|
138
139
|
["sha1", sha1],
|
|
139
140
|
["sha-1", sha1],
|
|
140
141
|
["sha256", sha256],
|
|
@@ -159,29 +160,73 @@ function agileKeyData(attrs) {
|
|
|
159
160
|
};
|
|
160
161
|
}
|
|
161
162
|
function passwordKeyEncryptor(xml) {
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
while (m) {
|
|
165
|
-
const attrs = parseAttrs(m[1] ?? "");
|
|
163
|
+
for (const raw of elementsNamed(xml, "encryptedKey")) {
|
|
164
|
+
const attrs = parseAttrs(raw);
|
|
166
165
|
if (attrs["spinCount"] !== void 0) return attrs;
|
|
167
|
-
m = re.exec(xml);
|
|
168
166
|
}
|
|
169
167
|
throw new Error("No password key encryptor in the encryption descriptor");
|
|
170
168
|
}
|
|
171
169
|
function attrsOf(xml, tag) {
|
|
172
|
-
const
|
|
173
|
-
return
|
|
170
|
+
const raw = elementsNamed(xml, tag)[0];
|
|
171
|
+
return raw === void 0 ? {} : parseAttrs(raw);
|
|
172
|
+
}
|
|
173
|
+
function elementsNamed(xml, tag) {
|
|
174
|
+
const out = [];
|
|
175
|
+
let open = xml.indexOf("<");
|
|
176
|
+
while (open >= 0) {
|
|
177
|
+
const end = nameEnd(xml, open + 1, tag);
|
|
178
|
+
if (end < 0) {
|
|
179
|
+
open = xml.indexOf("<", open + 1);
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
const close = xml.indexOf(">", end);
|
|
183
|
+
if (close < 0) break;
|
|
184
|
+
out.push(xml.slice(end, close));
|
|
185
|
+
open = xml.indexOf("<", close + 1);
|
|
186
|
+
}
|
|
187
|
+
return out;
|
|
188
|
+
}
|
|
189
|
+
function nameEnd(xml, from, tag) {
|
|
190
|
+
let end = from;
|
|
191
|
+
while (isAlnum(xml.charCodeAt(end))) end++;
|
|
192
|
+
const prefixed = end + 1 + tag.length;
|
|
193
|
+
if (xml[end] === ":" && xml.startsWith(tag, end + 1) && !isWordChar(xml.charCodeAt(prefixed))) return prefixed;
|
|
194
|
+
if (end - from >= tag.length && xml.startsWith(tag, end - tag.length)) return isWordChar(xml.charCodeAt(end)) ? -1 : end;
|
|
195
|
+
return -1;
|
|
174
196
|
}
|
|
175
197
|
function parseAttrs(raw) {
|
|
176
198
|
const out = {};
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
199
|
+
let at = 0;
|
|
200
|
+
while (at < raw.length) {
|
|
201
|
+
if (!isNameChar(raw.charCodeAt(at))) {
|
|
202
|
+
at++;
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
let end = at;
|
|
206
|
+
while (isNameChar(raw.charCodeAt(end))) end++;
|
|
207
|
+
let k = skipSpace(raw, end);
|
|
208
|
+
if (raw[k] === "=") {
|
|
209
|
+
k = skipSpace(raw, k + 1);
|
|
210
|
+
const close = raw[k] === "\"" ? raw.indexOf("\"", k + 1) : -1;
|
|
211
|
+
if (close >= 0) {
|
|
212
|
+
const name = raw.slice(at, end);
|
|
213
|
+
out[name.slice(name.lastIndexOf(":") + 1)] = raw.slice(k + 1, close);
|
|
214
|
+
at = close + 1;
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
at = end;
|
|
182
219
|
}
|
|
183
220
|
return out;
|
|
184
221
|
}
|
|
222
|
+
var isAlnum = (c) => c >= 48 && c <= 57 || c >= 65 && c <= 90 || c >= 97 && c <= 122;
|
|
223
|
+
var isWordChar = (c) => isAlnum(c) || c === 95;
|
|
224
|
+
var isNameChar = (c) => isWordChar(c) || c === 58;
|
|
225
|
+
function skipSpace(s, from) {
|
|
226
|
+
let at = from;
|
|
227
|
+
while (at < s.length && /\s/u.test(s[at])) at++;
|
|
228
|
+
return at;
|
|
229
|
+
}
|
|
185
230
|
function utf16le(s) {
|
|
186
231
|
const out = new Uint8Array(s.length * 2);
|
|
187
232
|
const v = new DataView(out.buffer);
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* decrypts; used by the legacy V1/V2/V4 Standard security handlers.
|
|
5
5
|
*/
|
|
6
6
|
function rc4(key, data) {
|
|
7
|
-
const s = new Uint8Array(256);
|
|
7
|
+
const s = /* @__PURE__ */ new Uint8Array(256);
|
|
8
8
|
for (let i = 0; i < 256; i++) s[i] = i;
|
|
9
9
|
let j = 0;
|
|
10
10
|
for (let i = 0; i < 256; i++) {
|
|
@@ -137,7 +137,7 @@ function md5(input) {
|
|
|
137
137
|
c0 = c0 + c | 0;
|
|
138
138
|
d0 = d0 + d | 0;
|
|
139
139
|
}
|
|
140
|
-
const out = new Uint8Array(16);
|
|
140
|
+
const out = /* @__PURE__ */ new Uint8Array(16);
|
|
141
141
|
[
|
|
142
142
|
a0,
|
|
143
143
|
b0,
|
|
@@ -234,7 +234,7 @@ function sha1(input) {
|
|
|
234
234
|
let h2 = 2562383102;
|
|
235
235
|
let h3 = 271733878;
|
|
236
236
|
let h4 = 3285377520;
|
|
237
|
-
const w = new Uint32Array(80);
|
|
237
|
+
const w = /* @__PURE__ */ new Uint32Array(80);
|
|
238
238
|
for (let off = 0; off < withPad.length; off += 64) {
|
|
239
239
|
for (let i = 0; i < 16; i++) w[i] = view.getUint32(off + i * 4, false);
|
|
240
240
|
for (let i = 16; i < 80; i++) {
|
|
@@ -261,7 +261,7 @@ function sha1(input) {
|
|
|
261
261
|
h3 = h3 + d >>> 0;
|
|
262
262
|
h4 = h4 + e >>> 0;
|
|
263
263
|
}
|
|
264
|
-
const out = new Uint8Array(20);
|
|
264
|
+
const out = /* @__PURE__ */ new Uint8Array(20);
|
|
265
265
|
new DataView(out.buffer).setUint32(0, h0, false);
|
|
266
266
|
new DataView(out.buffer).setUint32(4, h1, false);
|
|
267
267
|
new DataView(out.buffer).setUint32(8, h2, false);
|
|
@@ -322,7 +322,7 @@ function sha256(input) {
|
|
|
322
322
|
h[6] = h[6] + g | 0;
|
|
323
323
|
h[7] = h[7] + hh | 0;
|
|
324
324
|
}
|
|
325
|
-
const out = new Uint8Array(32);
|
|
325
|
+
const out = /* @__PURE__ */ new Uint8Array(32);
|
|
326
326
|
new DataView(out.buffer).setUint32(0, h[0] >>> 0);
|
|
327
327
|
for (let i = 0; i < 8; i++) new DataView(out.buffer).setUint32(i * 4, h[i] >>> 0);
|
|
328
328
|
return out;
|
|
@@ -409,15 +409,15 @@ var SHA512_K = [
|
|
|
409
409
|
6902733635092675308n,
|
|
410
410
|
7801388544844847127n
|
|
411
411
|
];
|
|
412
|
-
var SHA512_KH = new Int32Array(80);
|
|
413
|
-
var SHA512_KL = new Int32Array(80);
|
|
412
|
+
var SHA512_KH = /* @__PURE__ */ new Int32Array(80);
|
|
413
|
+
var SHA512_KL = /* @__PURE__ */ new Int32Array(80);
|
|
414
414
|
for (let i = 0; i < 80; i++) {
|
|
415
415
|
SHA512_KH[i] = Number(SHA512_K[i] >> 32n & 4294967295n) | 0;
|
|
416
416
|
SHA512_KL[i] = Number(SHA512_K[i] & 4294967295n) | 0;
|
|
417
417
|
}
|
|
418
418
|
function sha512Core(iv, input, outLen) {
|
|
419
|
-
const hh = new Int32Array(8);
|
|
420
|
-
const hl = new Int32Array(8);
|
|
419
|
+
const hh = /* @__PURE__ */ new Int32Array(8);
|
|
420
|
+
const hl = /* @__PURE__ */ new Int32Array(8);
|
|
421
421
|
for (let i = 0; i < 8; i++) {
|
|
422
422
|
hh[i] = Number(iv[i] >> 32n & 4294967295n) | 0;
|
|
423
423
|
hl[i] = Number(iv[i] & 4294967295n) | 0;
|
|
@@ -431,8 +431,8 @@ function sha512Core(iv, input, outLen) {
|
|
|
431
431
|
const bits = len * 8;
|
|
432
432
|
view.setUint32(msg.length - 4, bits >>> 0, false);
|
|
433
433
|
view.setUint32(msg.length - 8, Math.floor(bits / 4294967296), false);
|
|
434
|
-
const wh = new Int32Array(80);
|
|
435
|
-
const wl = new Int32Array(80);
|
|
434
|
+
const wh = /* @__PURE__ */ new Int32Array(80);
|
|
435
|
+
const wl = /* @__PURE__ */ new Int32Array(80);
|
|
436
436
|
for (let off = 0; off < msg.length; off += 128) {
|
|
437
437
|
for (let i = 0; i < 16; i++) {
|
|
438
438
|
wh[i] = view.getInt32(off + i * 8, false);
|
|
@@ -527,7 +527,7 @@ function sha512Core(iv, input, outLen) {
|
|
|
527
527
|
add(6, gh, gl);
|
|
528
528
|
add(7, xh, xl);
|
|
529
529
|
}
|
|
530
|
-
const out = new Uint8Array(64);
|
|
530
|
+
const out = /* @__PURE__ */ new Uint8Array(64);
|
|
531
531
|
const ov = new DataView(out.buffer);
|
|
532
532
|
for (let i = 0; i < 8; i++) {
|
|
533
533
|
ov.setInt32(i * 8, hh[i], false);
|
|
@@ -561,8 +561,8 @@ function sha384(input) {
|
|
|
561
561
|
}
|
|
562
562
|
var AES = buildAesTables();
|
|
563
563
|
function buildAesTables() {
|
|
564
|
-
const exp = new Uint8Array(256);
|
|
565
|
-
const log = new Uint8Array(256);
|
|
564
|
+
const exp = /* @__PURE__ */ new Uint8Array(256);
|
|
565
|
+
const log = /* @__PURE__ */ new Uint8Array(256);
|
|
566
566
|
let x = 1;
|
|
567
567
|
for (let i = 0; i < 255; i++) {
|
|
568
568
|
exp[i] = x;
|
|
@@ -570,8 +570,8 @@ function buildAesTables() {
|
|
|
570
570
|
x ^= x << 1 ^ (x & 128 ? 283 : 0);
|
|
571
571
|
x &= 255;
|
|
572
572
|
}
|
|
573
|
-
const sbox = new Uint8Array(256);
|
|
574
|
-
const inv = new Uint8Array(256);
|
|
573
|
+
const sbox = /* @__PURE__ */ new Uint8Array(256);
|
|
574
|
+
const inv = /* @__PURE__ */ new Uint8Array(256);
|
|
575
575
|
for (let i = 0; i < 256; i++) {
|
|
576
576
|
const invByte = i === 0 ? 0 : exp[(255 - log[i]) % 255];
|
|
577
577
|
let s = invByte;
|
|
@@ -5,4 +5,4 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @packageDocumentation
|
|
7
7
|
*/
|
|
8
|
-
export type { AbstractNumbering, Alignment, Border, BorderStyle, BodyElement, Comment, CellBorders, CellMerge, DocumentInfo, CellMargins, CellProperties, CellShading, CellDataBar, CellIcon, CellNoteFlag, CellIconShape, CellSparkline, Chart, ChartBlock, ChartDataPoint, ChartLineStyle, ChartMarker, ChartMarkerSymbol, ChartSeries, ChartType, CustomGeometry, CustomPathCmd, DocumentModel, FontFamilyMap, HeaderFooterReference, HeaderFooterType, ImageBlock, ImageCrop, InlineImage, MathAccent, MathBar, MathDelimiter, MathEqArray, MathFraction, MathFunc, MathGroupChr, MathLimit, MathMatrix, MathNary, MathNode, MathRadical, MathRow, MathRun, MathScript, Numbering, NumberingFormat, NumberingInstance, NumberingLevel, PictureBullet, PictureOutline, NumberingReference, PageMargins, PageSize, Paragraph, ParagraphProperties, FrameProperties, RelativeSize, TabStop, Run, RunProperties, TextOutline, Ligatures, RowConditionalFormat, RowProperties, Section, FloatAnchor, SectionColumns, SectionProperties, ShapeBlock, ShapeShadow, ShapeDash, ShapeFill, ShapeFillKind, ShapeGeometry, ShapeGroupChild, ShapeLine, LineEnd, ShapeTextBody, ShapeTransform, Style, StyleSheet, StyleType, Table, TableCell, TableLook, TableOverlay, TableProperties, TableStyleCondition, TableStyleConditionType, TableStyleLayer, TableRow, UnderlineStyle, VerticalAlign, } from './types.js';
|
|
8
|
+
export type { AbstractNumbering, Alignment, Border, BorderStyle, BodyElement, Comment, CellBorders, CellMerge, DocumentInfo, CellMargins, CellProperties, CellShading, CellDataBar, CellIcon, CellNoteFlag, CellIconShape, CellSparkline, Chart, ChartBlock, ChartDataLabels, ChartDataPoint, ChartLabelPosition, ChartLineStyle, ChartMarker, ChartMarkerSymbol, ChartSeries, ChartSurface, ChartTextStyle, ChartTextStyles, ChartType, CustomGeometry, CustomPathCmd, DocumentModel, FontFamilyMap, HeaderFooterReference, HeaderFooterType, ImageBlock, ImageCrop, InlineImage, MathAccent, MathBar, MathDelimiter, MathEqArray, MathFraction, MathFunc, MathGroupChr, MathLimit, MathMatrix, MathNary, MathNode, MathRadical, MathRow, MathRun, MathScript, Numbering, NumberingFormat, NumberingInstance, NumberingLevel, PictureBullet, PictureOutline, NumberingReference, PageMargins, PageSize, Paragraph, ParagraphProperties, FrameProperties, RelativeSize, TabStop, Run, RunProperties, TextOutline, Ligatures, RowConditionalFormat, RowProperties, Section, FloatAnchor, SectionColumns, SectionProperties, ShapeBlock, ShapeShadow, ShapeDash, ShapeFill, ShapeFillKind, ShapeGeometry, ShapeGroupChild, ShapeLine, LineEnd, ShapeTextBody, ShapeTransform, Style, StyleSheet, StyleType, Table, TableCell, TableLook, TableOverlay, TableProperties, TableStyleCondition, TableStyleConditionType, TableStyleLayer, TableRow, UnderlineStyle, VerticalAlign, } from './types.js';
|
|
@@ -1429,6 +1429,16 @@ export interface ChartSeries {
|
|
|
1429
1429
|
readonly xValues?: ReadonlyArray<number>;
|
|
1430
1430
|
readonly colorHex?: string;
|
|
1431
1431
|
readonly pointColors?: ReadonlyArray<ChartDataPoint>;
|
|
1432
|
+
/**
|
|
1433
|
+
* §21.2.2.61 `c:explosion` — how far a pie's slices stand out from its
|
|
1434
|
+
* centre, as a percentage of its radius: the series' own, and each point's
|
|
1435
|
+
* (`c:dPt/c:explosion`) over it.
|
|
1436
|
+
*/
|
|
1437
|
+
readonly explosion?: number;
|
|
1438
|
+
readonly pointExplosions?: ReadonlyArray<{
|
|
1439
|
+
readonly idx: number;
|
|
1440
|
+
readonly percent: number;
|
|
1441
|
+
}>;
|
|
1432
1442
|
/**
|
|
1433
1443
|
* §21.2.2.49 `c:dLbl/c:tx` — a data label the author typed rather than one
|
|
1434
1444
|
* the chart computes, by point index. Excel and Calc print it verbatim: it
|
|
@@ -1440,6 +1450,19 @@ export interface ChartSeries {
|
|
|
1440
1450
|
readonly idx: number;
|
|
1441
1451
|
readonly text: string;
|
|
1442
1452
|
}>;
|
|
1453
|
+
/**
|
|
1454
|
+
* §21.2.2.47 `c:dLbl` — where one point's label stands, when the point says:
|
|
1455
|
+
* its own `c:dLblPos`, and the `c:layout/c:manualLayout` it was dragged to —
|
|
1456
|
+
* `x` and `y` fractions of the chart, the label's own top-left corner where
|
|
1457
|
+
* `edge`, else how far it moved from where the chart would set it.
|
|
1458
|
+
*/
|
|
1459
|
+
readonly pointLabelPlacements?: ReadonlyArray<{
|
|
1460
|
+
readonly idx: number;
|
|
1461
|
+
readonly position?: ChartLabelPosition;
|
|
1462
|
+
readonly x?: number;
|
|
1463
|
+
readonly y?: number;
|
|
1464
|
+
readonly edge?: boolean;
|
|
1465
|
+
}>;
|
|
1443
1466
|
/**
|
|
1444
1467
|
* §21.2.2.59 `c:val/c:numRef/c:f` and §21.2.2.215 `c:tx/c:strRef/c:f` — where
|
|
1445
1468
|
* the series reads its numbers and its name FROM, when the chart part carries
|
|
@@ -1489,10 +1512,76 @@ export interface ChartLineStyle {
|
|
|
1489
1512
|
/** §20.1.10.49 `a:prstDash` — the rule's dash pattern, when it names one. */
|
|
1490
1513
|
readonly dash?: ShapeDash;
|
|
1491
1514
|
}
|
|
1515
|
+
/** A 3-D chart's wall or floor (§21.2.2.11, §21.2.2.69, §21.2.2.191): its fill and rule. */
|
|
1516
|
+
export interface ChartSurface {
|
|
1517
|
+
/** `c:spPr/a:solidFill` — RRGGBB; absent, unfilled. */
|
|
1518
|
+
readonly fillHex?: string;
|
|
1519
|
+
/** `c:spPr/a:ln` — its rule, `{ none: true }` for `a:noFill`; absent, the default. */
|
|
1520
|
+
readonly line?: ChartLineStyle;
|
|
1521
|
+
}
|
|
1522
|
+
/**
|
|
1523
|
+
* §21.2.2.216 `c:txPr`, §21.2.2.156 `c:rich` — how one kind of a chart's text
|
|
1524
|
+
* is set: the element's own run properties over the chart's (`c:chartSpace/
|
|
1525
|
+
* c:txPr`) over the application's defaults, theme tokens resolved.
|
|
1526
|
+
*/
|
|
1527
|
+
export interface ChartTextStyle {
|
|
1528
|
+
/** `a:latin@typeface` — the family, `+mn-lt`/`+mj-lt` already resolved. */
|
|
1529
|
+
readonly family?: string;
|
|
1530
|
+
/** `@sz`, in points. */
|
|
1531
|
+
readonly sizePt?: number;
|
|
1532
|
+
readonly bold?: boolean;
|
|
1533
|
+
readonly italic?: boolean;
|
|
1534
|
+
/** `a:solidFill` — the text colour as RRGGBB. */
|
|
1535
|
+
readonly colorHex?: string;
|
|
1536
|
+
}
|
|
1537
|
+
/** A chart's text by role, each resolved through the cascade on its own. */
|
|
1538
|
+
export interface ChartTextStyles {
|
|
1539
|
+
/** `c:chart/c:title`. */
|
|
1540
|
+
readonly title?: ChartTextStyle;
|
|
1541
|
+
/** `c:legend` — the entries. */
|
|
1542
|
+
readonly legend?: ChartTextStyle;
|
|
1543
|
+
/** The category axis's tick labels — a scatter's horizontal value axis. */
|
|
1544
|
+
readonly catAxis?: ChartTextStyle;
|
|
1545
|
+
/** The value axis's tick labels — a scatter's upright one. */
|
|
1546
|
+
readonly valAxis?: ChartTextStyle;
|
|
1547
|
+
/** The secondary value axis's tick labels. */
|
|
1548
|
+
readonly secondaryValAxis?: ChartTextStyle;
|
|
1549
|
+
readonly catAxisTitle?: ChartTextStyle;
|
|
1550
|
+
readonly valAxisTitle?: ChartTextStyle;
|
|
1551
|
+
readonly secondaryValAxisTitle?: ChartTextStyle;
|
|
1552
|
+
/** `c:dLbls` — the values and labels printed on the data. */
|
|
1553
|
+
readonly dataLabels?: ChartTextStyle;
|
|
1554
|
+
}
|
|
1555
|
+
/** §21.2.2.48 ST_DLblPos — where a data label stands against its point. */
|
|
1556
|
+
export type ChartLabelPosition = 'bestFit' | 'b' | 'ctr' | 'inBase' | 'inEnd' | 'l' | 'outEnd' | 'r' | 't';
|
|
1557
|
+
/**
|
|
1558
|
+
* §21.2.2.49 `c:dLbls` — what a chart's data labels show and how their parts
|
|
1559
|
+
* are joined: the chart group's switches, the first series' own over them.
|
|
1560
|
+
*/
|
|
1561
|
+
export interface ChartDataLabels {
|
|
1562
|
+
readonly showVal?: boolean;
|
|
1563
|
+
readonly showCatName?: boolean;
|
|
1564
|
+
readonly showSerName?: boolean;
|
|
1565
|
+
readonly showPercent?: boolean;
|
|
1566
|
+
/** §21.2.2.166 `c:separator` — between the parts; absent, Excel's ", ". */
|
|
1567
|
+
readonly separator?: string;
|
|
1568
|
+
/** `c:dLbls/c:numFmt@formatCode`, when the labels have their own. */
|
|
1569
|
+
readonly numberFormat?: string;
|
|
1570
|
+
/** §21.2.2.48 `c:dLblPos` — where the labels stand. */
|
|
1571
|
+
readonly position?: ChartLabelPosition;
|
|
1572
|
+
/** §21.2.2.183 `c:showLeaderLines` — a label set off its slice is tied back to it. */
|
|
1573
|
+
readonly showLeaderLines?: boolean;
|
|
1574
|
+
}
|
|
1492
1575
|
/** A parsed chart (§21.2): its type, title, categories, series and rendering options. */
|
|
1493
1576
|
export interface Chart {
|
|
1494
1577
|
readonly type: ChartType;
|
|
1495
1578
|
readonly title?: string;
|
|
1579
|
+
/**
|
|
1580
|
+
* The chart's text, role by role, as its application sets it. Absent when
|
|
1581
|
+
* the reader resolves none: the renderer then keeps its own sizes and greys
|
|
1582
|
+
* in the document's base face.
|
|
1583
|
+
*/
|
|
1584
|
+
readonly text?: ChartTextStyles;
|
|
1496
1585
|
readonly categories: ReadonlyArray<string>;
|
|
1497
1586
|
/** §21.2.2.24 `c:cat/…/c:f` — where the categories live, when uncached. */
|
|
1498
1587
|
readonly categoriesRef?: string;
|
|
@@ -1512,12 +1601,72 @@ export interface Chart {
|
|
|
1512
1601
|
readonly barDir?: 'col' | 'bar';
|
|
1513
1602
|
readonly grouping?: 'clustered' | 'stacked' | 'percentStacked' | 'standard';
|
|
1514
1603
|
readonly doughnut?: boolean;
|
|
1604
|
+
/**
|
|
1605
|
+
* §21.2.2.140 `c:pie3DChart` with §21.2.2.228 `c:view3D` — a pie drawn as a
|
|
1606
|
+
* tilted disc: `rotX` the elevation in degrees (90 looks straight down),
|
|
1607
|
+
* `rotY` how far its first slice is turned clockwise from twelve o'clock.
|
|
1608
|
+
*/
|
|
1609
|
+
readonly pie3D?: {
|
|
1610
|
+
readonly rotX: number;
|
|
1611
|
+
readonly rotY: number;
|
|
1612
|
+
};
|
|
1613
|
+
/**
|
|
1614
|
+
* §21.2.2.15 `c:bar3DChart` with §21.2.2.228 `c:view3D` — bars drawn as
|
|
1615
|
+
* boxes standing in a box of walls and a floor, seen at an angle with the
|
|
1616
|
+
* axes kept square: `rotX` the elevation and `rotY` the turn in degrees,
|
|
1617
|
+
* `depthPercent` a bar's depth as a percentage of its width, `gapDepth` the
|
|
1618
|
+
* room before and behind it as a percentage of its depth.
|
|
1619
|
+
*/
|
|
1620
|
+
readonly bar3D?: {
|
|
1621
|
+
readonly rotX: number;
|
|
1622
|
+
readonly rotY: number;
|
|
1623
|
+
readonly depthPercent: number;
|
|
1624
|
+
readonly gapDepth: number;
|
|
1625
|
+
};
|
|
1626
|
+
/**
|
|
1627
|
+
* §21.2.2.69 `c:floor` — a 3-D chart's floor, the wall its bars stand on:
|
|
1628
|
+
* its fill and its rule. Absent, it is unfilled and ruled in light grey.
|
|
1629
|
+
*/
|
|
1630
|
+
readonly floor?: ChartSurface;
|
|
1631
|
+
/** §21.2.2.11 `c:backWall` — the wall behind the bars; absent, nothing drawn. */
|
|
1632
|
+
readonly backWall?: ChartSurface;
|
|
1633
|
+
/** §21.2.2.191 `c:sideWall` — the wall beside them; absent, nothing drawn. */
|
|
1634
|
+
readonly sideWall?: ChartSurface;
|
|
1635
|
+
/** §21.2.2.68 `c:firstSliceAng` — a flat pie's first slice, degrees clockwise from twelve. */
|
|
1636
|
+
readonly firstSliceAngle?: number;
|
|
1637
|
+
/**
|
|
1638
|
+
* §21.2.2.104 `c:plotArea/c:layout/c:manualLayout` in `edge` mode — the box
|
|
1639
|
+
* the author sized the plot to, as fractions of the chart from its top
|
|
1640
|
+
* left; a pie is fitted into it whole, keeping its shape.
|
|
1641
|
+
*/
|
|
1642
|
+
readonly plotBox?: {
|
|
1643
|
+
readonly x: number;
|
|
1644
|
+
readonly y: number;
|
|
1645
|
+
readonly w: number;
|
|
1646
|
+
readonly h: number;
|
|
1647
|
+
/**
|
|
1648
|
+
* `c:layoutTarget` `inner` — the box is the plot's own rectangle, the
|
|
1649
|
+
* axes' labels outside it; else (`outer`) it holds them too.
|
|
1650
|
+
*/
|
|
1651
|
+
readonly inner?: boolean;
|
|
1652
|
+
};
|
|
1515
1653
|
readonly showValues?: boolean;
|
|
1654
|
+
/**
|
|
1655
|
+
* §21.2.2.49 — the data labels' switches, when the chart has a `c:dLbls` at
|
|
1656
|
+
* all. Absent, it labels nothing.
|
|
1657
|
+
*/
|
|
1658
|
+
readonly dataLabels?: ChartDataLabels;
|
|
1516
1659
|
/**
|
|
1517
1660
|
* §21.2.2.75 `c:gapWidth` — the gap between category slots as a percentage
|
|
1518
1661
|
* of the bar width. Absent ⇒ the schema's 150.
|
|
1519
1662
|
*/
|
|
1520
1663
|
readonly gapPercent?: number;
|
|
1664
|
+
/**
|
|
1665
|
+
* §21.2.2.131 `c:overlap` — how far the bars of one category's cluster lie
|
|
1666
|
+
* over each other, as a percentage of a bar's width: −100 a bar's width
|
|
1667
|
+
* apart … 100 one on the next. Absent ⇒ 0, bars side by side.
|
|
1668
|
+
*/
|
|
1669
|
+
readonly overlapPercent?: number;
|
|
1521
1670
|
readonly catAxisTitle?: string;
|
|
1522
1671
|
/**
|
|
1523
1672
|
* §21.2.2.134 `c:catAx/c:scaling/c:orientation` = `maxMin` — the category
|
|
@@ -1567,8 +1716,21 @@ export interface Chart {
|
|
|
1567
1716
|
readonly valAxisLine?: ChartLineStyle;
|
|
1568
1717
|
/** §21.2.2.196 — the secondary value axis's own rule. */
|
|
1569
1718
|
readonly secondaryValAxisLine?: ChartLineStyle;
|
|
1570
|
-
/**
|
|
1719
|
+
/**
|
|
1720
|
+
* §21.2.2.100 `c:majorGridlines` of the value axis (a scatter's upright one)
|
|
1721
|
+
* — its own rule (§21.2.2.197 `c:spPr/a:ln`). An axis without the element
|
|
1722
|
+
* rules nothing, which reads `{ none: true }`; absent, the default rule.
|
|
1723
|
+
*/
|
|
1571
1724
|
readonly gridLine?: ChartLineStyle;
|
|
1725
|
+
/** The same for a scatter's lying (x) axis. */
|
|
1726
|
+
readonly xGridLine?: ChartLineStyle;
|
|
1727
|
+
/**
|
|
1728
|
+
* §21.2.2.40 `c:delete` — the author deleted the category axis (a scatter's
|
|
1729
|
+
* x axis): neither its rule nor its labels are drawn, nor room kept for them.
|
|
1730
|
+
*/
|
|
1731
|
+
readonly catAxisDeleted?: boolean;
|
|
1732
|
+
/** §21.2.2.40 — …or the value axis (a scatter's upright one). */
|
|
1733
|
+
readonly valAxisDeleted?: boolean;
|
|
1572
1734
|
/**
|
|
1573
1735
|
* §21.2.2.157 `c:valAx/c:scaling/c:min|c:max` — the value axis the AUTHOR
|
|
1574
1736
|
* fixed. Absent means "auto", and only then is the range read off the data:
|
|
@@ -1578,10 +1740,20 @@ export interface Chart {
|
|
|
1578
1740
|
readonly valAxisMin?: number;
|
|
1579
1741
|
readonly valAxisMax?: number;
|
|
1580
1742
|
/**
|
|
1581
|
-
* §21.2.2.
|
|
1743
|
+
* §21.2.2.103 `c:valAx/c:majorUnit` — the step between the value axis's
|
|
1582
1744
|
* labels, when the author fixed it. Absent ⇒ the application's own choice.
|
|
1583
1745
|
*/
|
|
1584
1746
|
readonly valAxisMajorUnit?: number;
|
|
1747
|
+
/**
|
|
1748
|
+
* §21.2.2.226 — a scatter's lying value axis, the x's: the ends and step the
|
|
1749
|
+
* author fixed and its number format, as {@link Chart.valAxisMin},
|
|
1750
|
+
* {@link Chart.valAxisMax}, {@link Chart.valAxisMajorUnit} and
|
|
1751
|
+
* {@link Chart.numberFormat} are its upright one's.
|
|
1752
|
+
*/
|
|
1753
|
+
readonly xAxisMin?: number;
|
|
1754
|
+
readonly xAxisMax?: number;
|
|
1755
|
+
readonly xAxisMajorUnit?: number;
|
|
1756
|
+
readonly xNumberFormat?: string;
|
|
1585
1757
|
/**
|
|
1586
1758
|
* §21.2.2.198 `c:chartSpace/c:spPr` — the frame around the whole chart: its
|
|
1587
1759
|
* background fill and its outline. Excel writes both on every chart it
|