@rowsncolumns/toolkit 24.4.1 → 24.4.3

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.
Files changed (131) hide show
  1. package/dist/cjs/excel-parser/cfb-decryptor.d.ts +6 -0
  2. package/dist/cjs/excel-parser/cfb-decryptor.d.ts.map +1 -1
  3. package/dist/cjs/excel-parser/cfb-decryptor.js +6 -0
  4. package/dist/cjs/excel-parser/helpers.d.ts +9 -1
  5. package/dist/cjs/excel-parser/helpers.d.ts.map +1 -1
  6. package/dist/cjs/excel-parser/helpers.js +37 -0
  7. package/dist/cjs/excel-parser/interface.d.ts +10 -1
  8. package/dist/cjs/excel-parser/interface.d.ts.map +1 -1
  9. package/dist/cjs/excel-parser/plugins/ods/index.d.ts +19 -0
  10. package/dist/cjs/excel-parser/plugins/ods/index.d.ts.map +1 -1
  11. package/dist/cjs/excel-parser/plugins/ods/index.js +676 -304
  12. package/dist/cjs/excel-parser/plugins/ods/styles.d.ts +43 -1
  13. package/dist/cjs/excel-parser/plugins/ods/styles.d.ts.map +1 -1
  14. package/dist/cjs/excel-parser/plugins/ods/styles.js +343 -45
  15. package/dist/cjs/excel-parser/plugins/xls/index.d.ts +11 -3
  16. package/dist/cjs/excel-parser/plugins/xls/index.d.ts.map +1 -1
  17. package/dist/cjs/excel-parser/plugins/xls/index.js +55 -6
  18. package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts +4 -0
  19. package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts.map +1 -1
  20. package/dist/cjs/excel-parser/plugins/xlsb/index.js +21 -9
  21. package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts +10 -0
  22. package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts.map +1 -1
  23. package/dist/cjs/excel-parser/plugins/xlsx/charts.js +68 -9
  24. package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts +28 -1
  25. package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -1
  26. package/dist/cjs/excel-parser/plugins/xlsx/drawing.js +155 -20
  27. package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts +26 -1
  28. package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts.map +1 -1
  29. package/dist/cjs/excel-parser/plugins/xlsx/index.js +567 -234
  30. package/dist/cjs/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -1
  31. package/dist/cjs/excel-parser/plugins/xlsx/pivots.js +125 -37
  32. package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts +3 -0
  33. package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -1
  34. package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.js +4 -1
  35. package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts.map +1 -1
  36. package/dist/cjs/excel-parser/plugins/xlsx/styles.js +12 -2
  37. package/dist/cjs/excel-parser/registry.d.ts.map +1 -1
  38. package/dist/cjs/excel-parser/registry.js +2 -0
  39. package/dist/cjs/excel-parser/types.d.ts +7 -1
  40. package/dist/cjs/excel-parser/types.d.ts.map +1 -1
  41. package/dist/cjs/excel-parser/workbook.d.ts +1 -0
  42. package/dist/cjs/excel-parser/workbook.d.ts.map +1 -1
  43. package/dist/cjs/excel-parser/workbook.js +4 -0
  44. package/dist/cjs/excel-parser/worker.js +3 -1
  45. package/dist/cjs/exporter/ods/ods-export.d.ts.map +1 -1
  46. package/dist/cjs/exporter/ods/ods-export.js +432 -175
  47. package/dist/cjs/exporter/xlsx/chart-builder.d.ts.map +1 -1
  48. package/dist/cjs/exporter/xlsx/chart-builder.js +210 -6
  49. package/dist/cjs/exporter/xlsx/pivot-builder.d.ts +8 -0
  50. package/dist/cjs/exporter/xlsx/pivot-builder.d.ts.map +1 -1
  51. package/dist/cjs/exporter/xlsx/pivot-builder.js +141 -42
  52. package/dist/cjs/exporter/xlsx/style-builder.js +9 -3
  53. package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts +7 -1
  54. package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -1
  55. package/dist/cjs/exporter/xlsx/threaded-comments-builder.js +15 -3
  56. package/dist/cjs/exporter/xlsx/xlsx-export.d.ts +11 -2
  57. package/dist/cjs/exporter/xlsx/xlsx-export.d.ts.map +1 -1
  58. package/dist/cjs/exporter/xlsx/xlsx-export.js +678 -222
  59. package/dist/cjs/helpers/implicit-intersection.d.ts +16 -0
  60. package/dist/cjs/helpers/implicit-intersection.d.ts.map +1 -0
  61. package/dist/cjs/helpers/implicit-intersection.js +197 -0
  62. package/dist/cjs/print-settings.d.ts +105 -0
  63. package/dist/cjs/print-settings.d.ts.map +1 -0
  64. package/dist/cjs/print-settings.js +494 -0
  65. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  66. package/dist/esm/excel-parser/cfb-decryptor.d.ts +6 -0
  67. package/dist/esm/excel-parser/cfb-decryptor.d.ts.map +1 -1
  68. package/dist/esm/excel-parser/cfb-decryptor.js +6 -0
  69. package/dist/esm/excel-parser/helpers.d.ts +9 -1
  70. package/dist/esm/excel-parser/helpers.d.ts.map +1 -1
  71. package/dist/esm/excel-parser/helpers.js +34 -0
  72. package/dist/esm/excel-parser/interface.d.ts +10 -1
  73. package/dist/esm/excel-parser/interface.d.ts.map +1 -1
  74. package/dist/esm/excel-parser/plugins/ods/index.d.ts +19 -0
  75. package/dist/esm/excel-parser/plugins/ods/index.d.ts.map +1 -1
  76. package/dist/esm/excel-parser/plugins/ods/index.js +347 -33
  77. package/dist/esm/excel-parser/plugins/ods/styles.d.ts +43 -1
  78. package/dist/esm/excel-parser/plugins/ods/styles.d.ts.map +1 -1
  79. package/dist/esm/excel-parser/plugins/ods/styles.js +276 -2
  80. package/dist/esm/excel-parser/plugins/xls/index.d.ts +11 -3
  81. package/dist/esm/excel-parser/plugins/xls/index.d.ts.map +1 -1
  82. package/dist/esm/excel-parser/plugins/xls/index.js +37 -5
  83. package/dist/esm/excel-parser/plugins/xlsb/index.d.ts +4 -0
  84. package/dist/esm/excel-parser/plugins/xlsb/index.d.ts.map +1 -1
  85. package/dist/esm/excel-parser/plugins/xlsb/index.js +20 -6
  86. package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts +10 -0
  87. package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts.map +1 -1
  88. package/dist/esm/excel-parser/plugins/xlsx/charts.js +69 -6
  89. package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts +28 -1
  90. package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -1
  91. package/dist/esm/excel-parser/plugins/xlsx/drawing.js +99 -0
  92. package/dist/esm/excel-parser/plugins/xlsx/index.d.ts +26 -1
  93. package/dist/esm/excel-parser/plugins/xlsx/index.d.ts.map +1 -1
  94. package/dist/esm/excel-parser/plugins/xlsx/index.js +362 -26
  95. package/dist/esm/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -1
  96. package/dist/esm/excel-parser/plugins/xlsx/pivots.js +86 -6
  97. package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts +3 -0
  98. package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -1
  99. package/dist/esm/excel-parser/plugins/xlsx/sheet-views.js +2 -0
  100. package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts.map +1 -1
  101. package/dist/esm/excel-parser/plugins/xlsx/styles.js +12 -2
  102. package/dist/esm/excel-parser/registry.d.ts.map +1 -1
  103. package/dist/esm/excel-parser/registry.js +2 -0
  104. package/dist/esm/excel-parser/types.d.ts +7 -1
  105. package/dist/esm/excel-parser/types.d.ts.map +1 -1
  106. package/dist/esm/excel-parser/workbook.d.ts +1 -0
  107. package/dist/esm/excel-parser/workbook.d.ts.map +1 -1
  108. package/dist/esm/excel-parser/workbook.js +3 -0
  109. package/dist/esm/excel-parser/worker.js +2 -0
  110. package/dist/esm/exporter/ods/ods-export.d.ts.map +1 -1
  111. package/dist/esm/exporter/ods/ods-export.js +306 -35
  112. package/dist/esm/exporter/xlsx/chart-builder.d.ts.map +1 -1
  113. package/dist/esm/exporter/xlsx/chart-builder.js +161 -0
  114. package/dist/esm/exporter/xlsx/pivot-builder.d.ts +8 -0
  115. package/dist/esm/exporter/xlsx/pivot-builder.d.ts.map +1 -1
  116. package/dist/esm/exporter/xlsx/pivot-builder.js +104 -19
  117. package/dist/esm/exporter/xlsx/style-builder.js +9 -3
  118. package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts +7 -1
  119. package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -1
  120. package/dist/esm/exporter/xlsx/threaded-comments-builder.js +15 -3
  121. package/dist/esm/exporter/xlsx/xlsx-export.d.ts +11 -2
  122. package/dist/esm/exporter/xlsx/xlsx-export.d.ts.map +1 -1
  123. package/dist/esm/exporter/xlsx/xlsx-export.js +449 -47
  124. package/dist/esm/helpers/implicit-intersection.d.ts +16 -0
  125. package/dist/esm/helpers/implicit-intersection.d.ts.map +1 -0
  126. package/dist/esm/helpers/implicit-intersection.js +184 -0
  127. package/dist/esm/print-settings.d.ts +105 -0
  128. package/dist/esm/print-settings.d.ts.map +1 -0
  129. package/dist/esm/print-settings.js +422 -0
  130. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  131. package/package.json +3 -3
@@ -1,5 +1,6 @@
1
- import { __assign, __values } from "tslib";
1
+ import { __assign, __read, __spreadArray, __values } from "tslib";
2
2
  import { get } from "lodash-es";
3
+ import { headerFooterZoneFromTokens, joinHeaderFooterZones, odsLengthToInches, paperSizeFromCm, parseOdsPrintTokens, parseOdsTableCentering, } from "../../../print-settings";
3
4
  var OdsStyles = /** @class */ (function () {
4
5
  function OdsStyles() {
5
6
  this.cellStyles = new Map();
@@ -14,6 +15,14 @@ var OdsStyles = /** @class */ (function () {
14
15
  this.automaticTableStyles = new Map();
15
16
  this.numberFormats = new Map();
16
17
  this.chartStyles = new Map();
18
+ /** Table style name → `style:master-page-name`. */
19
+ this.tableMasterPages = new Map();
20
+ this.pageLayouts = new Map();
21
+ this.masterPages = new Map();
22
+ /** `style:family="table"` styles whose `style:table-properties` carry a right-to-left `style:writing-mode`. */
23
+ this.rightToLeftTableStyles = new Set();
24
+ /** Chart styles whose `style:chart-properties` carry `chart:three-dimensional="true"`. */
25
+ this.threeDimensionalChartStyles = new Set();
17
26
  }
18
27
  OdsStyles.prototype.reset = function () {
19
28
  this.cellStyles.clear();
@@ -28,6 +37,11 @@ var OdsStyles = /** @class */ (function () {
28
37
  this.automaticTableStyles.clear();
29
38
  this.numberFormats.clear();
30
39
  this.chartStyles.clear();
40
+ this.tableMasterPages.clear();
41
+ this.pageLayouts.clear();
42
+ this.masterPages.clear();
43
+ this.rightToLeftTableStyles.clear();
44
+ this.threeDimensionalChartStyles.clear();
31
45
  };
32
46
  OdsStyles.prototype.parseStylesXml = function (stylesXml) {
33
47
  if (!stylesXml)
@@ -44,6 +58,158 @@ var OdsStyles = /** @class */ (function () {
44
58
  this.processStyles(automaticStyles, false);
45
59
  this.processNumberStyles(documentStyles, get(documentStyles, "office:styles") || get(documentStyles, "styles"), get(documentStyles, "office:automatic-styles") ||
46
60
  get(documentStyles, "automatic-styles"));
61
+ this.processPageLayouts(get(documentStyles, "office:automatic-styles.style:page-layout") ||
62
+ get(documentStyles, "automatic-styles.page-layout"));
63
+ };
64
+ /**
65
+ * `<office:master-styles><style:master-page>` from the ORDER-PRESERVING
66
+ * parse of styles.xml — header/footer paragraphs are mixed content
67
+ * (`Page <text:page-number/> of <text:page-count/>`), which the unordered
68
+ * tree cannot represent.
69
+ */
70
+ OdsStyles.prototype.parseMasterPagesOrdered = function (stylesOrdered) {
71
+ var e_1, _a;
72
+ var documentStyles = orderedChildren(stylesOrdered, "office:document-styles") ||
73
+ orderedChildren(stylesOrdered, "document-styles");
74
+ var masterStyles = orderedChildren(documentStyles, "office:master-styles") ||
75
+ orderedChildren(documentStyles, "master-styles");
76
+ if (!Array.isArray(masterStyles))
77
+ return;
78
+ try {
79
+ for (var masterStyles_1 = __values(masterStyles), masterStyles_1_1 = masterStyles_1.next(); !masterStyles_1_1.done; masterStyles_1_1 = masterStyles_1.next()) {
80
+ var node = masterStyles_1_1.value;
81
+ var children = node["style:master-page"] || node["master-page"];
82
+ if (!children)
83
+ continue;
84
+ var attrs = node[":@"] || {};
85
+ var name_1 = attrs["@_style:name"] || attrs["@_name"];
86
+ if (!name_1)
87
+ continue;
88
+ var header = odsHeaderFooterToCode(orderedChildren(children, "style:header") ||
89
+ orderedChildren(children, "header"));
90
+ var footer = odsHeaderFooterToCode(orderedChildren(children, "style:footer") ||
91
+ orderedChildren(children, "footer"));
92
+ this.masterPages.set(name_1, {
93
+ pageLayoutName: attrs["@_style:page-layout-name"] || attrs["@_page-layout-name"],
94
+ header: header,
95
+ footer: footer,
96
+ });
97
+ }
98
+ }
99
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
100
+ finally {
101
+ try {
102
+ if (masterStyles_1_1 && !masterStyles_1_1.done && (_a = masterStyles_1.return)) _a.call(masterStyles_1);
103
+ }
104
+ finally { if (e_1) throw e_1.error; }
105
+ }
106
+ };
107
+ OdsStyles.prototype.processPageLayouts = function (layouts) {
108
+ var e_2, _a;
109
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k;
110
+ if (!layouts)
111
+ return;
112
+ try {
113
+ for (var _l = __values(Array.isArray(layouts) ? layouts : [layouts]), _m = _l.next(); !_m.done; _m = _l.next()) {
114
+ var layout = _m.value;
115
+ var name_2 = layout["@_style:name"] || layout["@_name"];
116
+ if (!name_2)
117
+ continue;
118
+ var props = this.getAttributes(layout["style:page-layout-properties"] ||
119
+ layout["page-layout-properties"]) || {};
120
+ var headerProps = this.getAttributes(get(layout, "style:header-style.style:header-footer-properties") ||
121
+ get(layout, "header-style.header-footer-properties"));
122
+ var footerProps = this.getAttributes(get(layout, "style:footer-style.style:header-footer-properties") ||
123
+ get(layout, "footer-style.header-footer-properties"));
124
+ var pageSetup = {};
125
+ var orientation_1 = props["@_style:print-orientation"];
126
+ if (orientation_1 === "landscape" || orientation_1 === "portrait") {
127
+ pageSetup.orientation = orientation_1;
128
+ }
129
+ var widthIn = odsLengthToInches(props["@_fo:page-width"]);
130
+ var heightIn = odsLengthToInches(props["@_fo:page-height"]);
131
+ if (widthIn !== undefined && heightIn !== undefined) {
132
+ var code = paperSizeFromCm(widthIn * 2.54, heightIn * 2.54);
133
+ if (code !== undefined)
134
+ pageSetup.paperSize = code;
135
+ }
136
+ var scale = parseFloat(String((_b = props["@_style:scale-to"]) !== null && _b !== void 0 ? _b : ""));
137
+ if (Number.isFinite(scale) && scale > 0) {
138
+ pageSetup.scale = Math.round(scale);
139
+ }
140
+ var scaleToX = parseInt((_c = props["@_loext:scale-to-X"]) !== null && _c !== void 0 ? _c : "", 10);
141
+ var scaleToY = parseInt((_d = props["@_loext:scale-to-Y"]) !== null && _d !== void 0 ? _d : "", 10);
142
+ var scaleToPages = parseInt((_e = props["@_style:scale-to-pages"]) !== null && _e !== void 0 ? _e : "", 10);
143
+ if (Number.isFinite(scaleToX) || Number.isFinite(scaleToY)) {
144
+ pageSetup.fitToPage = true;
145
+ pageSetup.fitToWidth = Number.isFinite(scaleToX) ? scaleToX : 0;
146
+ pageSetup.fitToHeight = Number.isFinite(scaleToY) ? scaleToY : 0;
147
+ }
148
+ else if (Number.isFinite(scaleToPages)) {
149
+ // ODF's single "total pages" knob: 1 page ≡ Excel's 1×1 fit.
150
+ pageSetup.fitToPage = true;
151
+ pageSetup.fitToWidth = scaleToPages;
152
+ pageSetup.fitToHeight = scaleToPages === 1 ? 1 : 0;
153
+ }
154
+ var pageOrder = props["@_style:print-page-order"];
155
+ if (pageOrder === "ltr")
156
+ pageSetup.pageOrder = "overThenDown";
157
+ var firstPage = parseInt((_f = props["@_style:first-page-number"]) !== null && _f !== void 0 ? _f : "", 10);
158
+ if (Number.isFinite(firstPage) && firstPage > 0) {
159
+ pageSetup.firstPageNumber = firstPage;
160
+ pageSetup.useFirstPageNumber = true;
161
+ }
162
+ // ODF: header sits inside `fo:margin-top`; Excel: `header` is the edge
163
+ // → header distance and `top` the edge → body distance.
164
+ var marginTop = odsLengthToInches(props["@_fo:margin-top"]);
165
+ var marginBottom = odsLengthToInches(props["@_fo:margin-bottom"]);
166
+ var headerHeight = ((_g = odsLengthToInches(headerProps === null || headerProps === void 0 ? void 0 : headerProps["@_fo:min-height"])) !== null && _g !== void 0 ? _g : 0) +
167
+ ((_h = odsLengthToInches(headerProps === null || headerProps === void 0 ? void 0 : headerProps["@_fo:margin-bottom"])) !== null && _h !== void 0 ? _h : 0);
168
+ var footerHeight = ((_j = odsLengthToInches(footerProps === null || footerProps === void 0 ? void 0 : footerProps["@_fo:min-height"])) !== null && _j !== void 0 ? _j : 0) +
169
+ ((_k = odsLengthToInches(footerProps === null || footerProps === void 0 ? void 0 : footerProps["@_fo:margin-top"])) !== null && _k !== void 0 ? _k : 0);
170
+ var pageMargins = {};
171
+ var left = odsLengthToInches(props["@_fo:margin-left"]);
172
+ var right = odsLengthToInches(props["@_fo:margin-right"]);
173
+ if (left !== undefined)
174
+ pageMargins.left = roundInches(left);
175
+ if (right !== undefined)
176
+ pageMargins.right = roundInches(right);
177
+ if (marginTop !== undefined) {
178
+ pageMargins.header = roundInches(marginTop);
179
+ pageMargins.top = roundInches(marginTop + headerHeight);
180
+ }
181
+ if (marginBottom !== undefined) {
182
+ pageMargins.footer = roundInches(marginBottom);
183
+ pageMargins.bottom = roundInches(marginBottom + footerHeight);
184
+ }
185
+ var printOptions = __assign(__assign({}, parseOdsPrintTokens(props["@_style:print"])), parseOdsTableCentering(props["@_style:table-centering"]));
186
+ var layoutEntry = {};
187
+ if (Object.keys(pageSetup).length)
188
+ layoutEntry.pageSetup = pageSetup;
189
+ if (Object.keys(pageMargins).length)
190
+ layoutEntry.pageMargins = pageMargins;
191
+ if (Object.keys(printOptions).length) {
192
+ layoutEntry.printOptions = printOptions;
193
+ }
194
+ this.pageLayouts.set(name_2, layoutEntry);
195
+ }
196
+ }
197
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
198
+ finally {
199
+ try {
200
+ if (_m && !_m.done && (_a = _l.return)) _a.call(_l);
201
+ }
202
+ finally { if (e_2) throw e_2.error; }
203
+ }
204
+ };
205
+ OdsStyles.prototype.getTableMasterPageName = function (styleName) {
206
+ return this.tableMasterPages.get(styleName);
207
+ };
208
+ OdsStyles.prototype.getMasterPage = function (name) {
209
+ return this.masterPages.get(name);
210
+ };
211
+ OdsStyles.prototype.getPageLayout = function (name) {
212
+ return this.pageLayouts.get(name);
47
213
  };
48
214
  OdsStyles.prototype.parseContentXml = function (contentXml) {
49
215
  if (!contentXml)
@@ -55,46 +221,60 @@ var OdsStyles = /** @class */ (function () {
55
221
  this.processNumberStyles(contentXml, autoStylesContainer);
56
222
  };
57
223
  OdsStyles.prototype.processStyles = function (styles, isAutomatic) {
58
- var e_1, _a;
224
+ var e_3, _a;
225
+ var _b, _c;
59
226
  if (!styles)
60
227
  return;
61
228
  var styleArray = Array.isArray(styles) ? styles : [styles];
62
229
  try {
63
230
  for (var styleArray_1 = __values(styleArray), styleArray_1_1 = styleArray_1.next(); !styleArray_1_1.done; styleArray_1_1 = styleArray_1.next()) {
64
231
  var style = styleArray_1_1.value;
65
- var name_1 = style["@_style:name"] || style["@_name"];
66
- if (!name_1)
232
+ var name_3 = style["@_style:name"] || style["@_name"];
233
+ if (!name_3)
67
234
  continue;
68
235
  var family = style["@_style:family"] || style["@_family"];
69
236
  if (family === "table-row") {
70
237
  var props = this.convertRowStyle(style);
71
238
  if (props) {
72
- (isAutomatic ? this.automaticRowStyles : this.rowStyles).set(name_1, props);
239
+ (isAutomatic ? this.automaticRowStyles : this.rowStyles).set(name_3, props);
73
240
  }
74
241
  continue;
75
242
  }
76
243
  if (family === "table-column") {
77
244
  var props = this.convertColumnStyle(style);
78
245
  if (props) {
79
- (isAutomatic ? this.automaticColumnStyles : this.columnStyles).set(name_1, props);
246
+ (isAutomatic ? this.automaticColumnStyles : this.columnStyles).set(name_3, props);
80
247
  }
81
248
  continue;
82
249
  }
83
250
  if (family === "table") {
251
+ var masterPageName = style["@_style:master-page-name"] || style["@_master-page-name"];
252
+ if (masterPageName) {
253
+ this.tableMasterPages.set(name_3, masterPageName);
254
+ }
255
+ // ODF has no per-sheet flag for right-to-left display; it is the
256
+ // table style's `style:writing-mode` (`rl-tb` / `rl`), the
257
+ // counterpart of OOXML `<sheetView rightToLeft="1">`.
258
+ var tableProps = this.getAttributes(style["style:table-properties"] || style["table-properties"]);
259
+ var writingMode = (_b = tableProps === null || tableProps === void 0 ? void 0 : tableProps["@_style:writing-mode"]) !== null && _b !== void 0 ? _b : tableProps === null || tableProps === void 0 ? void 0 : tableProps["@_writing-mode"];
260
+ if (typeof writingMode === "string" &&
261
+ /^(rl|rl-tb|tb-rl)$/.test(writingMode)) {
262
+ this.rightToLeftTableStyles.add(name_3);
263
+ }
84
264
  var format = this.normalizeCellFormat(this.convertToCellFormat(style));
85
265
  if (format) {
86
- (isAutomatic ? this.automaticTableStyles : this.tableStyles).set(name_1, format);
266
+ (isAutomatic ? this.automaticTableStyles : this.tableStyles).set(name_3, format);
87
267
  }
88
268
  continue;
89
269
  }
90
270
  if (family === "text") {
91
271
  var format = this.normalizeCellFormat(this.convertToCellFormat(style));
92
- (isAutomatic ? this.automaticTextStyles : this.textStyles).set(name_1, format);
272
+ (isAutomatic ? this.automaticTextStyles : this.textStyles).set(name_3, format);
93
273
  continue;
94
274
  }
95
275
  if (family === "table-cell") {
96
276
  var displayName = style["@_style:display-name"] || style["@_display-name"];
97
- var key = displayName || name_1;
277
+ var key = displayName || name_3;
98
278
  if (!key) {
99
279
  continue;
100
280
  }
@@ -102,21 +282,26 @@ var OdsStyles = /** @class */ (function () {
102
282
  ? this.automaticCellStyles
103
283
  : this.cellStyles;
104
284
  targetMap.set(key, style);
105
- if (displayName && name_1 && name_1 !== key && !targetMap.has(name_1)) {
106
- targetMap.set(name_1, style);
285
+ if (displayName && name_3 && name_3 !== key && !targetMap.has(name_3)) {
286
+ targetMap.set(name_3, style);
107
287
  }
108
288
  continue;
109
289
  }
110
290
  if (typeof family === "string" &&
111
291
  (family.startsWith("chart") || family === "graphic")) {
292
+ var chartProps = this.getAttributes(style["style:chart-properties"] || style["chart:chart-properties"]);
293
+ var threeDimensional = (_c = chartProps === null || chartProps === void 0 ? void 0 : chartProps["@_chart:three-dimensional"]) !== null && _c !== void 0 ? _c : chartProps === null || chartProps === void 0 ? void 0 : chartProps["@_three-dimensional"];
294
+ if (threeDimensional === "true" || threeDimensional === true) {
295
+ this.threeDimensionalChartStyles.add(name_3);
296
+ }
112
297
  var color = this.convertChartStyle(style);
113
298
  if (color) {
114
299
  var displayName = style["@_style:display-name"] || style["@_display-name"];
115
- var key = displayName || name_1;
300
+ var key = displayName || name_3;
116
301
  if (key) {
117
302
  this.chartStyles.set(key, color);
118
- if (displayName && name_1 && name_1 !== key) {
119
- this.chartStyles.set(name_1, color);
303
+ if (displayName && name_3 && name_3 !== key) {
304
+ this.chartStyles.set(name_3, color);
120
305
  }
121
306
  }
122
307
  }
@@ -124,16 +309,16 @@ var OdsStyles = /** @class */ (function () {
124
309
  }
125
310
  }
126
311
  }
127
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
312
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
128
313
  finally {
129
314
  try {
130
315
  if (styleArray_1_1 && !styleArray_1_1.done && (_a = styleArray_1.return)) _a.call(styleArray_1);
131
316
  }
132
- finally { if (e_1) throw e_1.error; }
317
+ finally { if (e_3) throw e_3.error; }
133
318
  }
134
319
  };
135
320
  OdsStyles.prototype.processNumberStyles = function () {
136
- var e_2, _a, e_3, _b;
321
+ var e_4, _a, e_5, _b;
137
322
  var _c, _d;
138
323
  var containers = [];
139
324
  for (var _i = 0; _i < arguments.length; _i++) {
@@ -154,31 +339,31 @@ var OdsStyles = /** @class */ (function () {
154
339
  if (!container)
155
340
  continue;
156
341
  try {
157
- for (var definitions_1 = (e_3 = void 0, __values(definitions)), definitions_1_1 = definitions_1.next(); !definitions_1_1.done; definitions_1_1 = definitions_1.next()) {
342
+ for (var definitions_1 = (e_5 = void 0, __values(definitions)), definitions_1_1 = definitions_1.next(); !definitions_1_1.done; definitions_1_1 = definitions_1.next()) {
158
343
  var _e = definitions_1_1.value, key = _e.key, kind = _e.kind;
159
344
  var nodes = (_d = (_c = (container && container[key])) !== null && _c !== void 0 ? _c : get(container, key)) !== null && _d !== void 0 ? _d : get(container, key.replace("number:", ""));
160
345
  this.processNumberStyleNodes(nodes, kind);
161
346
  }
162
347
  }
163
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
348
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
164
349
  finally {
165
350
  try {
166
351
  if (definitions_1_1 && !definitions_1_1.done && (_b = definitions_1.return)) _b.call(definitions_1);
167
352
  }
168
- finally { if (e_3) throw e_3.error; }
353
+ finally { if (e_5) throw e_5.error; }
169
354
  }
170
355
  }
171
356
  }
172
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
357
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
173
358
  finally {
174
359
  try {
175
360
  if (containers_1_1 && !containers_1_1.done && (_a = containers_1.return)) _a.call(containers_1);
176
361
  }
177
- finally { if (e_2) throw e_2.error; }
362
+ finally { if (e_4) throw e_4.error; }
178
363
  }
179
364
  };
180
365
  OdsStyles.prototype.processNumberStyleNodes = function (nodes, kind) {
181
- var e_4, _a;
366
+ var e_6, _a;
182
367
  if (!nodes)
183
368
  return;
184
369
  var arr = Array.isArray(nodes) ? nodes : [nodes];
@@ -187,21 +372,21 @@ var OdsStyles = /** @class */ (function () {
187
372
  var node = arr_1_1.value;
188
373
  if (!node)
189
374
  continue;
190
- var name_2 = node["@_style:name"] || node["@_name"];
191
- if (!name_2)
375
+ var name_4 = node["@_style:name"] || node["@_name"];
376
+ if (!name_4)
192
377
  continue;
193
378
  var numberFormat = this.convertNumberStyleNode(node, kind);
194
379
  if (numberFormat) {
195
- this.numberFormats.set(name_2, numberFormat);
380
+ this.numberFormats.set(name_4, numberFormat);
196
381
  }
197
382
  }
198
383
  }
199
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
384
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
200
385
  finally {
201
386
  try {
202
387
  if (arr_1_1 && !arr_1_1.done && (_a = arr_1.return)) _a.call(arr_1);
203
388
  }
204
- finally { if (e_4) throw e_4.error; }
389
+ finally { if (e_6) throw e_6.error; }
205
390
  }
206
391
  };
207
392
  OdsStyles.prototype.getStyle = function (styleName) {
@@ -222,6 +407,14 @@ var OdsStyles = /** @class */ (function () {
222
407
  return undefined;
223
408
  return this.chartStyles.get(styleName);
224
409
  };
410
+ /** Whether a chart style (plot-area) declares `chart:three-dimensional="true"`. */
411
+ OdsStyles.prototype.isChartStyleThreeDimensional = function (styleName) {
412
+ return !!styleName && this.threeDimensionalChartStyles.has(styleName);
413
+ };
414
+ /** Whether a `style:family="table"` style renders the sheet right-to-left. */
415
+ OdsStyles.prototype.isTableStyleRightToLeft = function (styleName) {
416
+ return !!styleName && this.rightToLeftTableStyles.has(styleName);
417
+ };
225
418
  OdsStyles.prototype.getTableCellFormat = function (styleName) {
226
419
  return (this.automaticTableStyles.get(styleName) ||
227
420
  this.tableStyles.get(styleName));
@@ -234,7 +427,7 @@ var OdsStyles = /** @class */ (function () {
234
427
  return (_a = format === null || format === void 0 ? void 0 : format.textFormat) !== null && _a !== void 0 ? _a : undefined;
235
428
  };
236
429
  OdsStyles.prototype.convertToCellFormat = function (style) {
237
- var e_5, _a, e_6, _b;
430
+ var e_7, _a, e_8, _b;
238
431
  var _c;
239
432
  var cellFormat = {};
240
433
  var textPropsNode = style["style:text-properties"] || style["text-properties"];
@@ -349,12 +542,12 @@ var OdsStyles = /** @class */ (function () {
349
542
  cellFormat.borders[key] = parsedBorder;
350
543
  }
351
544
  }
352
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
545
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
353
546
  finally {
354
547
  try {
355
548
  if (sideMap_1_1 && !sideMap_1_1.done && (_a = sideMap_1.return)) _a.call(sideMap_1);
356
549
  }
357
- finally { if (e_5) throw e_5.error; }
550
+ finally { if (e_7) throw e_7.error; }
358
551
  }
359
552
  // ODS diagonals: `style:diagonal-bl-tr` = bottom-left → top-right
360
553
  // (= our diagonalUp). `style:diagonal-tl-br` = top-left → bottom-right
@@ -385,12 +578,12 @@ var OdsStyles = /** @class */ (function () {
385
578
  cellFormat.borders[key] = parsedBorder;
386
579
  }
387
580
  }
388
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
581
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
389
582
  finally {
390
583
  try {
391
584
  if (diagonalMap_1_1 && !diagonalMap_1_1.done && (_b = diagonalMap_1.return)) _b.call(diagonalMap_1);
392
585
  }
393
- finally { if (e_6) throw e_6.error; }
586
+ finally { if (e_8) throw e_8.error; }
394
587
  }
395
588
  var verticalAlign = cellProps["@_style:vertical-align"] ||
396
589
  cellProps["@_vertical-align"] ||
@@ -482,15 +675,12 @@ var OdsStyles = /** @class */ (function () {
482
675
  var hidden = visibility === "collapse" ||
483
676
  visibility === "hidden" ||
484
677
  visibility === "none";
678
+ var breakBefore = (rowProps === null || rowProps === void 0 ? void 0 : rowProps["@_fo:break-before"]) === "page";
485
679
  var format = this.normalizeCellFormat(this.convertToCellFormat(style));
486
- if (height === undefined && !hidden && !format) {
680
+ if (height === undefined && !hidden && !format && !breakBefore) {
487
681
  return undefined;
488
682
  }
489
- return {
490
- height: height,
491
- hidden: hidden,
492
- format: format,
493
- };
683
+ return __assign({ height: height, hidden: hidden, format: format }, (breakBefore ? { breakBefore: breakBefore } : {}));
494
684
  };
495
685
  OdsStyles.prototype.convertColumnStyle = function (style) {
496
686
  var columnPropsNode = style["style:table-column-properties"] ||
@@ -510,15 +700,12 @@ var OdsStyles = /** @class */ (function () {
510
700
  var hidden = visibility === "collapse" ||
511
701
  visibility === "hidden" ||
512
702
  visibility === "none";
703
+ var breakBefore = (columnProps === null || columnProps === void 0 ? void 0 : columnProps["@_fo:break-before"]) === "page";
513
704
  var format = this.normalizeCellFormat(this.convertToCellFormat(style));
514
- if (width === undefined && !hidden && !format) {
705
+ if (width === undefined && !hidden && !format && !breakBefore) {
515
706
  return undefined;
516
707
  }
517
- return {
518
- width: width,
519
- hidden: hidden,
520
- format: format,
521
- };
708
+ return __assign({ width: width, hidden: hidden, format: format }, (breakBefore ? { breakBefore: breakBefore } : {}));
522
709
  };
523
710
  OdsStyles.prototype.convertChartStyle = function (style) {
524
711
  var graphicProps = style["style:graphic-properties"] || style["graphic-properties"];
@@ -806,3 +993,114 @@ var OdsStyles = /** @class */ (function () {
806
993
  return OdsStyles;
807
994
  }());
808
995
  export { OdsStyles };
996
+ var roundInches = function (value) { return Math.round(value * 1000) / 1000; };
997
+ /** Children of the first `tagName` node in an order-preserving node list. */
998
+ var orderedChildren = function (nodes, tagName) {
999
+ if (!Array.isArray(nodes))
1000
+ return undefined;
1001
+ var found = nodes.find(function (node) { return node && node[tagName]; });
1002
+ return found ? found[tagName] : undefined;
1003
+ };
1004
+ var ODS_FIELD_TAGS = {
1005
+ "text:page-number": "page",
1006
+ "text:page-count": "pages",
1007
+ "text:date": "date",
1008
+ "text:time": "time",
1009
+ "text:sheet-name": "sheet",
1010
+ "text:title": "sheet",
1011
+ "text:file-name": "file",
1012
+ };
1013
+ /** One `<text:p>` (order-preserving children) → header/footer tokens. */
1014
+ var odsParagraphToTokens = function (children) {
1015
+ var e_9, _a;
1016
+ var _b;
1017
+ var tokens = [];
1018
+ try {
1019
+ for (var _c = __values(children !== null && children !== void 0 ? children : []), _d = _c.next(); !_d.done; _d = _c.next()) {
1020
+ var child = _d.value;
1021
+ if (!child || typeof child !== "object")
1022
+ continue;
1023
+ if (child["#text"] !== undefined) {
1024
+ tokens.push({ type: "text", text: String(child["#text"]) });
1025
+ continue;
1026
+ }
1027
+ var tag = Object.keys(child).find(function (key) { return key !== ":@"; });
1028
+ if (!tag)
1029
+ continue;
1030
+ var attrs = child[":@"] || {};
1031
+ if (tag === "text:s") {
1032
+ var count = parseInt((_b = attrs["@_text:c"]) !== null && _b !== void 0 ? _b : "1", 10);
1033
+ tokens.push({ type: "text", text: " ".repeat(Number.isFinite(count) ? count : 1) });
1034
+ continue;
1035
+ }
1036
+ if (tag === "text:tab") {
1037
+ tokens.push({ type: "text", text: "\t" });
1038
+ continue;
1039
+ }
1040
+ if (tag === "text:line-break") {
1041
+ tokens.push({ type: "text", text: "\n" });
1042
+ continue;
1043
+ }
1044
+ var field = ODS_FIELD_TAGS[tag];
1045
+ if (field) {
1046
+ // `<text:file-name text:display>`: `path` is the folder (`&Z`), `full`
1047
+ // the folder + name (`&Z&F`); `name` / `name-and-extension` / absent
1048
+ // is the file name (`&F`).
1049
+ var display = field === "file" ? attrs["@_text:display"] : undefined;
1050
+ if (display === "path" || display === "full") {
1051
+ tokens.push({ type: "field", field: "path" });
1052
+ }
1053
+ if (display !== "path") {
1054
+ tokens.push({ type: "field", field: field });
1055
+ }
1056
+ continue;
1057
+ }
1058
+ // `text:span`, `text:a`, … — descend.
1059
+ tokens.push.apply(tokens, __spreadArray([], __read(odsParagraphToTokens(child[tag])), false));
1060
+ }
1061
+ }
1062
+ catch (e_9_1) { e_9 = { error: e_9_1 }; }
1063
+ finally {
1064
+ try {
1065
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
1066
+ }
1067
+ finally { if (e_9) throw e_9.error; }
1068
+ }
1069
+ return tokens;
1070
+ };
1071
+ var odsRegionToCode = function (children) {
1072
+ if (!Array.isArray(children))
1073
+ return undefined;
1074
+ var paragraphs = children
1075
+ .filter(function (node) { return node && (node["text:p"] || node["p"]); })
1076
+ .map(function (node) {
1077
+ return headerFooterZoneFromTokens(odsParagraphToTokens(node["text:p"] || node["p"]));
1078
+ });
1079
+ var code = paragraphs.join("\n");
1080
+ return code ? code : undefined;
1081
+ };
1082
+ /**
1083
+ * `<style:header>` / `<style:footer>` (order-preserving children) → Excel
1084
+ * header/footer code. Regions map to `&L` / `&C` / `&R`; paragraphs outside
1085
+ * regions are the centre zone. `style:display="false"` yields nothing.
1086
+ */
1087
+ var odsHeaderFooterToCode = function (children) {
1088
+ if (!Array.isArray(children))
1089
+ return undefined;
1090
+ var zones = {};
1091
+ var left = odsRegionToCode(orderedChildren(children, "style:region-left") ||
1092
+ orderedChildren(children, "region-left"));
1093
+ var center = odsRegionToCode(orderedChildren(children, "style:region-center") ||
1094
+ orderedChildren(children, "region-center"));
1095
+ var right = odsRegionToCode(orderedChildren(children, "style:region-right") ||
1096
+ orderedChildren(children, "region-right"));
1097
+ var plain = odsRegionToCode(children);
1098
+ if (left)
1099
+ zones.left = left;
1100
+ if (center || plain)
1101
+ zones.center = center !== null && center !== void 0 ? center : plain;
1102
+ if (right)
1103
+ zones.right = right;
1104
+ var code = joinHeaderFooterZones(zones);
1105
+ return code ? code : undefined;
1106
+ };
@@ -1,5 +1,13 @@
1
- import { BaseWorkbookPlugin } from "../base/index";
2
- export declare class XlsPlugin extends BaseWorkbookPlugin {
3
- load(_buffer: ArrayBuffer | File, _password?: string): Promise<void>;
1
+ import { XlsxPlugin } from "../xlsx/index";
2
+ /**
3
+ * `.xls` handler. The BIFF (Excel 97-2003) binary format is not parsed;
4
+ * this plugin exists so a `.xls` file gets a clear, actionable error
5
+ * instead of falling through to the xlsx zip reader (which fails with an
6
+ * opaque "not a zip" error) or stalling in the password prompt. The one
7
+ * `.xls` shape that does load is an OOXML package saved with the wrong
8
+ * extension — Excel opens those too, so they are handed to the xlsx parser.
9
+ */
10
+ export declare class XlsPlugin extends XlsxPlugin {
11
+ load(buffer: ArrayBuffer | File, password?: string): Promise<void>;
4
12
  }
5
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xls/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,qBAAa,SAAU,SAAQ,kBAAkB;IACzC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAI3E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xls/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAoB3C;;;;;;;GAOG;AACH,qBAAa,SAAU,SAAQ,UAAU;IACjC,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM;CAiBzD"}