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
|
@@ -19,7 +19,7 @@ var SPID_PREFIX = /^_x0000_s/;
|
|
|
19
19
|
* Taking the element's presence as the test listed every comment in the
|
|
20
20
|
* document as a form control.
|
|
21
21
|
*/
|
|
22
|
-
var CONTROL_TYPES = new Set([
|
|
22
|
+
var CONTROL_TYPES = /* @__PURE__ */ new Set([
|
|
23
23
|
"Button",
|
|
24
24
|
"Checkbox",
|
|
25
25
|
"CheckBox",
|
|
@@ -143,7 +143,7 @@ function vmlColorHex(value) {
|
|
|
143
143
|
if (v.startsWith("white")) return "FFFFFF";
|
|
144
144
|
}
|
|
145
145
|
/** CSS length → points. A bare number is pixels, VML's implicit unit. */
|
|
146
|
-
var CSS_UNITS = new Map([
|
|
146
|
+
var CSS_UNITS = /* @__PURE__ */ new Map([
|
|
147
147
|
["pt", 1],
|
|
148
148
|
["px", .75],
|
|
149
149
|
["in", 72],
|
|
@@ -153,7 +153,7 @@ var CSS_UNITS = new Map([
|
|
|
153
153
|
]);
|
|
154
154
|
function cssLengthPt(value) {
|
|
155
155
|
if (value === void 0) return void 0;
|
|
156
|
-
const m =
|
|
156
|
+
const m = /^(-?[\d.]+)\s*([a-z]*)$/i.exec(value.trim());
|
|
157
157
|
if (!m) return void 0;
|
|
158
158
|
const n = Number(m[1]);
|
|
159
159
|
if (!Number.isFinite(n)) return void 0;
|
|
@@ -459,7 +459,7 @@ function parseConditionalFormatting(ws, colors, x14Bars) {
|
|
|
459
459
|
return out;
|
|
460
460
|
}
|
|
461
461
|
/** The rule types the extension states as a formula rather than a literal. */
|
|
462
|
-
var TEXT_RULES = new Set([
|
|
462
|
+
var TEXT_RULES = /* @__PURE__ */ new Set([
|
|
463
463
|
"containsText",
|
|
464
464
|
"notContainsText",
|
|
465
465
|
"beginsWith",
|
|
@@ -514,7 +514,7 @@ function asBaseCfRule(node) {
|
|
|
514
514
|
}
|
|
515
515
|
return out;
|
|
516
516
|
}
|
|
517
|
-
var DV_TYPES = new Set([
|
|
517
|
+
var DV_TYPES = /* @__PURE__ */ new Set([
|
|
518
518
|
"none",
|
|
519
519
|
"whole",
|
|
520
520
|
"decimal",
|
|
@@ -617,7 +617,7 @@ function parseSqref(sqref) {
|
|
|
617
617
|
}
|
|
618
618
|
return out;
|
|
619
619
|
}
|
|
620
|
-
var CF_OPERATORS = new Set([
|
|
620
|
+
var CF_OPERATORS = /* @__PURE__ */ new Set([
|
|
621
621
|
"lessThan",
|
|
622
622
|
"lessThanOrEqual",
|
|
623
623
|
"equal",
|
|
@@ -656,7 +656,7 @@ function parseCfRule(obj, colors, x14Bars) {
|
|
|
656
656
|
default: return;
|
|
657
657
|
}
|
|
658
658
|
}
|
|
659
|
-
var TIME_PERIODS = new Set([
|
|
659
|
+
var TIME_PERIODS = /* @__PURE__ */ new Set([
|
|
660
660
|
"today",
|
|
661
661
|
"yesterday",
|
|
662
662
|
"tomorrow",
|
|
@@ -807,7 +807,7 @@ function parseCellIsRule(obj, priority) {
|
|
|
807
807
|
dxfId
|
|
808
808
|
};
|
|
809
809
|
}
|
|
810
|
-
var CFVO_TYPES = new Set([
|
|
810
|
+
var CFVO_TYPES = /* @__PURE__ */ new Set([
|
|
811
811
|
"num",
|
|
812
812
|
"percent",
|
|
813
813
|
"max",
|
|
@@ -56,9 +56,7 @@ function parseBiffChart(records, cells, sharedStrings) {
|
|
|
56
56
|
}
|
|
57
57
|
break;
|
|
58
58
|
}
|
|
59
|
-
case REC_SERIESTEXT:
|
|
60
|
-
if (current) current.nameText = parseSeriesText(rec.data);
|
|
61
|
-
break;
|
|
59
|
+
case REC_SERIESTEXT: if (current) current.nameText = parseSeriesText(rec.data);
|
|
62
60
|
}
|
|
63
61
|
if (accs.length === 0) return void 0;
|
|
64
62
|
const byKey = /* @__PURE__ */ new Map();
|
|
@@ -541,9 +541,7 @@ function parsePrintModel(records) {
|
|
|
541
541
|
case REC.HPAGEBREAK:
|
|
542
542
|
rowBreaks = parseBreaks(d);
|
|
543
543
|
break;
|
|
544
|
-
case REC.VPAGEBREAK:
|
|
545
|
-
colBreaks = parseBreaks(d);
|
|
546
|
-
break;
|
|
544
|
+
case REC.VPAGEBREAK: colBreaks = parseBreaks(d);
|
|
547
545
|
}
|
|
548
546
|
}
|
|
549
547
|
const pageSetup = {
|
|
@@ -586,7 +584,7 @@ function parseBreaks(d) {
|
|
|
586
584
|
for (let k = 0; k < count && 2 + k * 6 + 2 <= d.length; k++) out.push(readU16(d, 2 + k * 6));
|
|
587
585
|
return out;
|
|
588
586
|
}
|
|
589
|
-
var BUILTIN_NAMES = new Map([[6, "_xlnm.Print_Area"], [7, "_xlnm.Print_Titles"]]);
|
|
587
|
+
var BUILTIN_NAMES = /* @__PURE__ */ new Map([[6, "_xlnm.Print_Area"], [7, "_xlnm.Print_Titles"]]);
|
|
590
588
|
function buildDefinedNames(lblRecords, boundSheets) {
|
|
591
589
|
const wsIndex = [];
|
|
592
590
|
let ws = 0;
|
|
@@ -722,7 +720,7 @@ var DV_OPERATORS = [
|
|
|
722
720
|
"greaterThanOrEqual",
|
|
723
721
|
"lessThanOrEqual"
|
|
724
722
|
];
|
|
725
|
-
var DV_OPERATOR_TYPES = new Set([
|
|
723
|
+
var DV_OPERATOR_TYPES = /* @__PURE__ */ new Set([
|
|
726
724
|
"whole",
|
|
727
725
|
"decimal",
|
|
728
726
|
"date",
|
|
@@ -1080,7 +1078,7 @@ function readIconSet(c, priority) {
|
|
|
1080
1078
|
};
|
|
1081
1079
|
}
|
|
1082
1080
|
function parseCf12Rule(d, color) {
|
|
1083
|
-
if (d.length <
|
|
1081
|
+
if (d.length < 28) return void 0;
|
|
1084
1082
|
const c = {
|
|
1085
1083
|
d,
|
|
1086
1084
|
p: FTR_HEADER
|
|
@@ -1109,12 +1107,12 @@ function parseConditionalFormats12(records, color) {
|
|
|
1109
1107
|
for (let i = 0; i < records.length; i++) {
|
|
1110
1108
|
if (records[i].type !== REC.CONDFMT12) continue;
|
|
1111
1109
|
const head = records[i].data;
|
|
1112
|
-
if (head.length <
|
|
1110
|
+
if (head.length < 26) continue;
|
|
1113
1111
|
const numcf = readU16(head, FTR_HEADER);
|
|
1114
|
-
const cref = readU16(head,
|
|
1112
|
+
const cref = readU16(head, 24);
|
|
1115
1113
|
const ranges = [];
|
|
1116
|
-
for (let k = 0; k < cref &&
|
|
1117
|
-
const o =
|
|
1114
|
+
for (let k = 0; k < cref && 26 + k * 8 + 8 <= head.length; k++) {
|
|
1115
|
+
const o = 26 + k * 8;
|
|
1118
1116
|
ranges.push({
|
|
1119
1117
|
startRow: readU16(head, o),
|
|
1120
1118
|
endRow: readU16(head, o + 2),
|
|
@@ -1414,6 +1412,7 @@ function readSst(blocks) {
|
|
|
1414
1412
|
* each crossing re-reads the `fHighByte` flag.
|
|
1415
1413
|
*/
|
|
1416
1414
|
var SstReader = class {
|
|
1415
|
+
blocks;
|
|
1417
1416
|
bi = 0;
|
|
1418
1417
|
off = 0;
|
|
1419
1418
|
/** @param blocks The SST record's data followed by each CONTINUE record's data. */
|
|
@@ -1502,4 +1501,4 @@ function readF64(d, off) {
|
|
|
1502
1501
|
return new DataView(d.buffer, d.byteOffset + off, 8).getFloat64(0, true);
|
|
1503
1502
|
}
|
|
1504
1503
|
//#endregion
|
|
1505
|
-
export { readXlsToSheetDoc };
|
|
1504
|
+
export { decodeRk, readSst, readXlsToSheetDoc };
|
|
@@ -25,7 +25,7 @@ var XLS_LOSSES = [{
|
|
|
25
25
|
var xlsReader = {
|
|
26
26
|
id: "xls",
|
|
27
27
|
produces: "sheet",
|
|
28
|
-
supports: new Set([FEATURES.text, FEATURES.tables]),
|
|
28
|
+
supports: /* @__PURE__ */ new Set([FEATURES.text, FEATURES.tables]),
|
|
29
29
|
sniff: looksLikeXls,
|
|
30
30
|
read: (bytes) => ({
|
|
31
31
|
doc: readXlsToSheetDoc(bytes),
|
|
@@ -3,9 +3,9 @@ import { FEATURES } from "../core/ir/features.js";
|
|
|
3
3
|
import { detectImageFormat } from "../core/images.js";
|
|
4
4
|
import { INDEXED_COLORS } from "../core/indexed-colors.js";
|
|
5
5
|
import { bytesInclude, packageHasPart } from "../core/bytes.js";
|
|
6
|
+
import { parseTheme, parseThemeEffectStyles, parseThemeFillStyles, parseThemeFonts, parseThemeLineWidths } from "../core/drawingml/theme-parser.js";
|
|
6
7
|
import { OFFICE_2023_THEME_PALETTE, makeColorResolver } from "../core/drawingml/colors.js";
|
|
7
|
-
import { parseChart, withChartColorStyle } from "../core/drawingml/chart-parser.js";
|
|
8
|
-
import { parseTheme, parseThemeEffectStyles, parseThemeFillStyles, parseThemeLineWidths } from "../core/drawingml/theme-parser.js";
|
|
8
|
+
import { parseChart, pointsPerSeries, withChartColorStyle } from "../core/drawingml/chart-parser.js";
|
|
9
9
|
import { isOoxmlRel } from "../core/opc/relationship-types.js";
|
|
10
10
|
import { OpcPackage } from "../core/opc/package.js";
|
|
11
11
|
import { parseCoreProperties } from "../core/opc/core-properties.js";
|
|
@@ -109,6 +109,12 @@ function readXlsxToSheetDoc(xlsx) {
|
|
|
109
109
|
const themeLineWidths = buildThemeLineWidths(pkg, workbookRels);
|
|
110
110
|
const themeFillStyles = buildThemeFillStyles(pkg, workbookRels);
|
|
111
111
|
const themeEffectStyles = buildThemeEffectStyles(pkg, workbookRels);
|
|
112
|
+
const themeFonts = buildThemeFonts(pkg, workbookRels);
|
|
113
|
+
const normalFont = styles.fonts[0];
|
|
114
|
+
const chartText = themeFonts ? {
|
|
115
|
+
themeFonts,
|
|
116
|
+
...themeFonts.minor.latin ? { family: themeFonts.minor.latin } : {}
|
|
117
|
+
} : { family: normalFont?.name?.trim().toLowerCase() === "calibri" && normalFont.scheme === void 0 ? "Calibri" : "Aptos Narrow" };
|
|
112
118
|
const sheetsOut = [];
|
|
113
119
|
let embeddedObjects = 0;
|
|
114
120
|
let metafilePictures = 0;
|
|
@@ -142,7 +148,7 @@ function readXlsxToSheetDoc(xlsx) {
|
|
|
142
148
|
for (const ref of chartRefs) {
|
|
143
149
|
if (!chartData.has(ref.chartPartPath)) {
|
|
144
150
|
const chartXml = pkg.getPart(ref.chartPartPath);
|
|
145
|
-
const parsed = chartXml ? parseChart(chartXml, resolveColor) : null;
|
|
151
|
+
const parsed = chartXml ? parseChart(chartXml, resolveColor, void 0, chartText) : null;
|
|
146
152
|
if (!parsed) continue;
|
|
147
153
|
chartData.set(ref.chartPartPath, withChartColorStyle(parsed, pkg, ref.chartPartPath, resolveColor));
|
|
148
154
|
}
|
|
@@ -409,6 +415,11 @@ function readXlsxToSheetDoc(xlsx) {
|
|
|
409
415
|
* them, and a reference naming a sheet this workbook does not have resolves to
|
|
410
416
|
* nothing rather than to zeros.
|
|
411
417
|
*
|
|
418
|
+
* A reference reads no more cells than the series' share of the chart's points
|
|
419
|
+
* ({@link pointsPerSeries}), and finds each in an index of its sheet. The range
|
|
420
|
+
* is the file's to name and unbounded — `B2:B99999999999` — and every cell of
|
|
421
|
+
* it was searched for through the whole sheet.
|
|
422
|
+
*
|
|
412
423
|
* @param chart The parsed chart.
|
|
413
424
|
* @param sheets Every sheet in the workbook, by tab order.
|
|
414
425
|
* @param styles The style table (for a referenced cell's number format).
|
|
@@ -417,13 +428,27 @@ function readXlsxToSheetDoc(xlsx) {
|
|
|
417
428
|
* @returns The chart, unchanged when nothing needed resolving.
|
|
418
429
|
*/
|
|
419
430
|
function withWorkbookData(chart, sheets, styles, sharedStrings, date1904) {
|
|
431
|
+
const most = pointsPerSeries(chart.series.length);
|
|
432
|
+
const indexes = /* @__PURE__ */ new Map();
|
|
433
|
+
const cellAt = (grid, row, column) => {
|
|
434
|
+
let index = indexes.get(grid);
|
|
435
|
+
if (!index) {
|
|
436
|
+
index = /* @__PURE__ */ new Map();
|
|
437
|
+
for (const cell of grid.cells) {
|
|
438
|
+
const key = `${String(cell.row)}:${String(cell.column)}`;
|
|
439
|
+
if (!index.has(key)) index.set(key, cell);
|
|
440
|
+
}
|
|
441
|
+
indexes.set(grid, index);
|
|
442
|
+
}
|
|
443
|
+
return index.get(`${String(row)}:${String(column)}`);
|
|
444
|
+
};
|
|
420
445
|
const cellsOf = (ref) => {
|
|
421
446
|
if (ref === void 0) return void 0;
|
|
422
447
|
const area = resolveChartRef(ref, sheets);
|
|
423
448
|
if (!area) return void 0;
|
|
424
449
|
const out = [];
|
|
425
|
-
for (let row = area.startRow; row <= area.endRow; row++) for (let col = area.startColumn; col <= area.endColumn; col++) {
|
|
426
|
-
const cell = area.grid
|
|
450
|
+
for (let row = area.startRow; row <= area.endRow && out.length < most; row++) for (let col = area.startColumn; col <= area.endColumn && out.length < most; col++) {
|
|
451
|
+
const cell = cellAt(area.grid, row, col);
|
|
427
452
|
out.push(cell ? resolveCellText(cell, sharedStrings, styles, date1904) : "");
|
|
428
453
|
}
|
|
429
454
|
return out;
|
|
@@ -702,6 +727,13 @@ function buildThemePalette(pkg, workbookRels) {
|
|
|
702
727
|
}
|
|
703
728
|
return palette;
|
|
704
729
|
}
|
|
730
|
+
function buildThemeFonts(pkg, workbookRels) {
|
|
731
|
+
for (const rel of workbookRels) {
|
|
732
|
+
if (!isOoxmlRel(rel.type, "theme")) continue;
|
|
733
|
+
const resolved = pkg.resolveRelatedPart(WORKBOOK_PART, rel);
|
|
734
|
+
if (resolved) return parseThemeFonts(resolved.data);
|
|
735
|
+
}
|
|
736
|
+
}
|
|
705
737
|
function buildThemeLineWidths(pkg, workbookRels) {
|
|
706
738
|
for (const rel of workbookRels) {
|
|
707
739
|
if (!isOoxmlRel(rel.type, "theme")) continue;
|
|
@@ -810,9 +842,24 @@ function resolveTableSlicerItems(cache, tableIndex, styles, sharedStrings, date1
|
|
|
810
842
|
}
|
|
811
843
|
return out;
|
|
812
844
|
}
|
|
845
|
+
function slicerStyleNumber(name) {
|
|
846
|
+
const prefix = /SlicerStyle/gi;
|
|
847
|
+
const isLetter = (i) => /[A-Za-z]/.test(name[i] ?? "");
|
|
848
|
+
const isDigit = (i) => /\d/.test(name[i] ?? "");
|
|
849
|
+
for (let found = prefix.exec(name); found; found = prefix.exec(name)) {
|
|
850
|
+
let end = prefix.lastIndex;
|
|
851
|
+
while (isLetter(end)) end++;
|
|
852
|
+
if (isDigit(end)) {
|
|
853
|
+
let digits = end;
|
|
854
|
+
while (isDigit(digits)) digits++;
|
|
855
|
+
return name.slice(end, digits);
|
|
856
|
+
}
|
|
857
|
+
prefix.lastIndex = end;
|
|
858
|
+
}
|
|
859
|
+
}
|
|
813
860
|
function resolveSlicerStyle(styleName, palette) {
|
|
814
|
-
const
|
|
815
|
-
const column =
|
|
861
|
+
const number = styleName ? slicerStyleNumber(styleName) : void 0;
|
|
862
|
+
const column = number !== void 0 ? (Number(number) - 1) % 7 : 1;
|
|
816
863
|
const base = column === 0 ? "7F7F7F" : palette.get(`accent${column}`) ?? "4472C4";
|
|
817
864
|
return {
|
|
818
865
|
headerHex: base,
|
|
@@ -840,7 +887,7 @@ function lighten(hex, amount) {
|
|
|
840
887
|
var xlsxReader = {
|
|
841
888
|
id: "xlsx",
|
|
842
889
|
produces: "sheet",
|
|
843
|
-
supports: new Set([FEATURES.text, FEATURES.tables]),
|
|
890
|
+
supports: /* @__PURE__ */ new Set([FEATURES.text, FEATURES.tables]),
|
|
844
891
|
sniff: (bytes) => bytes[0] === 80 && bytes[1] === 75 && packageHasPart(bytes, "xl/workbook.xml"),
|
|
845
892
|
read: (bytes) => ({
|
|
846
893
|
doc: readXlsxToSheetDoc(bytes),
|
|
@@ -859,4 +906,4 @@ function infoFromCore(core) {
|
|
|
859
906
|
};
|
|
860
907
|
}
|
|
861
908
|
//#endregion
|
|
862
|
-
export { readXlsx, xlsxReader };
|
|
909
|
+
export { readXlsx, readXlsxToSheetDoc, xlsxReader };
|
|
@@ -129,7 +129,7 @@ function writeXlsx(sheet) {
|
|
|
129
129
|
losses
|
|
130
130
|
};
|
|
131
131
|
}
|
|
132
|
-
|
|
132
|
+
FEATURES.text, FEATURES.tables;
|
|
133
133
|
function rel(id, type, target) {
|
|
134
134
|
return {
|
|
135
135
|
id,
|
|
@@ -206,7 +206,7 @@ function worksheetXml(grid, tableRelIds = [], drawingRelId) {
|
|
|
206
206
|
}
|
|
207
207
|
row.push(cell);
|
|
208
208
|
}
|
|
209
|
-
const rowsXml = [
|
|
209
|
+
const rowsXml = [.../* @__PURE__ */ new Set([...cellsByRow.keys(), ...heightByRow.keys()])].sort((a, b) => a - b).map((r) => {
|
|
210
210
|
const cells = (cellsByRow.get(r) ?? []).slice().sort((a, b) => a.column - b.column);
|
|
211
211
|
const h = heightByRow.get(r);
|
|
212
212
|
const heightAttrs = h ? ` ht="${h.heightPt}"${h.customHeight ? " customHeight=\"1\"" : ""}` : "";
|
|
@@ -75,7 +75,7 @@ function writeHtml(flow) {
|
|
|
75
75
|
var htmlWriter = {
|
|
76
76
|
id: "html",
|
|
77
77
|
consumes: "flow",
|
|
78
|
-
supports: new Set([
|
|
78
|
+
supports: /* @__PURE__ */ new Set([
|
|
79
79
|
FEATURES.text,
|
|
80
80
|
FEATURES.tables,
|
|
81
81
|
FEATURES.tablesNested,
|
|
@@ -320,6 +320,10 @@ function emitChartBlock(out, block, ctx) {
|
|
|
320
320
|
}
|
|
321
321
|
const svg = [figure, svgOpen(w, h, label)];
|
|
322
322
|
svg.push(`<g transform="matrix(1 0 0 -1 0 ${fmt(h)})">`);
|
|
323
|
+
if (scene.background) svg.push(rectSvg(scene.background));
|
|
324
|
+
if (scene.plotBackground) svg.push(rectSvg(scene.plotBackground));
|
|
325
|
+
for (const w of scene.walls ?? []) svg.push(polygonSvg(w));
|
|
326
|
+
for (const g of scene.gridlines ?? []) svg.push(polylineSvg(g));
|
|
323
327
|
for (const pg of scene.polygons ?? []) svg.push(polygonSvg(pg));
|
|
324
328
|
for (const r of scene.rects) svg.push(rectSvg(r));
|
|
325
329
|
for (const pl of scene.polylines) svg.push(polylineSvg(pl));
|
|
@@ -345,7 +349,8 @@ function polylineSvg(p) {
|
|
|
345
349
|
}
|
|
346
350
|
function polygonSvg(p) {
|
|
347
351
|
const stroke = p.strokeHex ? ` stroke="#${p.strokeHex}" stroke-width="${fmt(p.widthPt ?? 1)}"` : "";
|
|
348
|
-
|
|
352
|
+
const fill = p.fillHex ? `#${p.fillHex}` : "none";
|
|
353
|
+
return `<polygon points="${pointsAttr(p.points)}" fill="${fill}"${stroke}/>`;
|
|
349
354
|
}
|
|
350
355
|
function wedgeSvg(w) {
|
|
351
356
|
const start = arcPoint(w.cx, w.cy, w.r, w.r, w.startRad);
|
|
@@ -355,7 +360,10 @@ function wedgeSvg(w) {
|
|
|
355
360
|
}
|
|
356
361
|
function labelSvg(l, sceneH, anchor) {
|
|
357
362
|
const rot = l.rotationDeg ? ` transform="rotate(${fmt(-l.rotationDeg)} ${fmt(l.x)} ${fmt(sceneH - l.y)})"` : "";
|
|
358
|
-
|
|
363
|
+
const family = l.family ? escapeAttr(fontStack(l.family)) : "sans-serif";
|
|
364
|
+
const weight = l.bold ? " font-weight=\"bold\"" : "";
|
|
365
|
+
const slant = l.italic ? " font-style=\"italic\"" : "";
|
|
366
|
+
return `<text x="${fmt(l.x)}" y="${fmt(sceneH - l.y)}"${rot} font-size="${fmt(l.sizePt)}" font-family="${family}"${weight}${slant} fill="#${l.colorHex}" text-anchor="${anchor}">${escapeText(l.text)}</text>`;
|
|
359
367
|
}
|
|
360
368
|
/** `RRGGBB` as the `r,g,b` triple a CSS `rgba()` takes. */
|
|
361
369
|
function hexToRgbCss(hex) {
|
|
@@ -430,8 +438,10 @@ function paragraphCss(r) {
|
|
|
430
438
|
if (indentLeft !== 0) css.push(`margin-left:${fmt(indentLeft)}pt`);
|
|
431
439
|
if (indentRight !== 0) css.push(`margin-right:${fmt(indentRight)}pt`);
|
|
432
440
|
if (r.indentFirstLine !== 0) css.push(`text-indent:${fmt(r.indentFirstLine)}pt`);
|
|
433
|
-
if (r.spacingLine > 0)
|
|
434
|
-
|
|
441
|
+
if (r.spacingLine > 0) {
|
|
442
|
+
if (r.spacingLineRule === "auto") css.push(`line-height:${fmt(r.spacingLine / 12)}`);
|
|
443
|
+
else css.push(`line-height:${fmt(r.spacingLine)}pt`);
|
|
444
|
+
}
|
|
435
445
|
if (r.pageBreakBefore) css.push("break-before:page");
|
|
436
446
|
return css.join(";");
|
|
437
447
|
}
|
|
@@ -776,9 +786,7 @@ function cellIconSvg(icon) {
|
|
|
776
786
|
case "pie":
|
|
777
787
|
body = pieIconSvg(icon.fill, fill, `#${ICON_EMPTY_HEX}`);
|
|
778
788
|
break;
|
|
779
|
-
case "circle":
|
|
780
|
-
body = `<circle cx="5" cy="5" r="4" fill="${fill}"/>`;
|
|
781
|
-
break;
|
|
789
|
+
case "circle": body = `<circle cx="5" cy="5" r="4" fill="${fill}"/>`;
|
|
782
790
|
}
|
|
783
791
|
return `<svg width="10" height="10" viewBox="0 0 10 10" style="float:left;margin:2px 3px 0 0">${body}</svg>`;
|
|
784
792
|
}
|
|
@@ -786,7 +794,7 @@ var round2 = (n) => (Math.round(n * 100) / 100).toString();
|
|
|
786
794
|
function barsIconSvg(fill, color, empty) {
|
|
787
795
|
const n = Math.max(1, fill?.levels ?? 4);
|
|
788
796
|
const filled = fill?.filled ?? 0;
|
|
789
|
-
const gap =
|
|
797
|
+
const gap = 1.2;
|
|
790
798
|
const bw = (10 - gap * (n - 1)) / n;
|
|
791
799
|
let out = "";
|
|
792
800
|
for (let i = 0; i < n; i++) {
|
|
@@ -809,7 +817,7 @@ function pieIconSvg(fill, color, empty) {
|
|
|
809
817
|
const ex = cx + r * Math.cos(ang);
|
|
810
818
|
const ey = cy + r * Math.sin(ang);
|
|
811
819
|
const large = frac > .5 ? 1 : 0;
|
|
812
|
-
out += `<path d="M${cx} ${cy} L${cx} ${round2(
|
|
820
|
+
out += `<path d="M${cx} ${cy} L${cx} ${round2(.5999999999999996)} A${r} ${r} 0 ${large} 1 ${round2(ex)} ${round2(ey)} Z" fill="${color}"/>`;
|
|
813
821
|
}
|
|
814
822
|
return out;
|
|
815
823
|
}
|
|
@@ -8,7 +8,7 @@ var FAUX_ITALIC_SHEAR = .2126;
|
|
|
8
8
|
* §18.18.3 — the dash pattern of a rule that is not solid, in points: dashes
|
|
9
9
|
* and gaps alternating, from a dash.
|
|
10
10
|
*/
|
|
11
|
-
var BORDER_DASHES = new Map([
|
|
11
|
+
var BORDER_DASHES = /* @__PURE__ */ new Map([
|
|
12
12
|
["dashed", [8, 2.5]],
|
|
13
13
|
["dashSmallGap", [3, 1]],
|
|
14
14
|
["dotted", [.5, 1]],
|
|
@@ -58,7 +58,7 @@ var emptyBox = () => ({
|
|
|
58
58
|
descent: 0,
|
|
59
59
|
items: []
|
|
60
60
|
});
|
|
61
|
-
var MATH_BINARY = new Set([
|
|
61
|
+
var MATH_BINARY = /* @__PURE__ */ new Set([
|
|
62
62
|
"+",
|
|
63
63
|
"−",
|
|
64
64
|
"-",
|
|
@@ -72,7 +72,7 @@ var MATH_BINARY = new Set([
|
|
|
72
72
|
"⊗",
|
|
73
73
|
"∘"
|
|
74
74
|
]);
|
|
75
|
-
var MATH_RELATION = new Set([
|
|
75
|
+
var MATH_RELATION = /* @__PURE__ */ new Set([
|
|
76
76
|
"=",
|
|
77
77
|
"≠",
|
|
78
78
|
"<",
|
|
@@ -281,7 +281,7 @@ function layoutRadical(node, ctx, measure) {
|
|
|
281
281
|
};
|
|
282
282
|
}
|
|
283
283
|
var NARY_AXIS = .28;
|
|
284
|
-
var SUM_LIKE = new Set([
|
|
284
|
+
var SUM_LIKE = /* @__PURE__ */ new Set([
|
|
285
285
|
"∑",
|
|
286
286
|
"∏",
|
|
287
287
|
"∐",
|
|
@@ -1143,14 +1143,11 @@ function mathGlyphSegments(node) {
|
|
|
1143
1143
|
break;
|
|
1144
1144
|
case "accent":
|
|
1145
1145
|
case "bar":
|
|
1146
|
-
case "groupChr":
|
|
1147
|
-
visit(n.base);
|
|
1148
|
-
break;
|
|
1149
|
-
default: break;
|
|
1146
|
+
case "groupChr": visit(n.base);
|
|
1150
1147
|
}
|
|
1151
1148
|
};
|
|
1152
1149
|
visit(node);
|
|
1153
1150
|
return out;
|
|
1154
1151
|
}
|
|
1155
1152
|
//#endregion
|
|
1156
|
-
export { layoutMath, mathGlyphSegments, variantStyle };
|
|
1153
|
+
export { layoutMath, mathGlyphSegments, shiftItems, variantStyle };
|