@loaders.gl/excel 4.0.0-alpha.5 → 4.0.0-alpha.7

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 (48) hide show
  1. package/dist/bundle.js +2 -2
  2. package/dist/dist.min.js +1444 -287
  3. package/dist/es5/bundle.js +6 -0
  4. package/dist/es5/bundle.js.map +1 -0
  5. package/dist/es5/excel-loader.js +29 -0
  6. package/dist/es5/excel-loader.js.map +1 -0
  7. package/dist/es5/index.js +42 -0
  8. package/dist/es5/index.js.map +1 -0
  9. package/dist/es5/lib/encode-excel.js +2 -0
  10. package/dist/es5/lib/encode-excel.js.map +1 -0
  11. package/dist/es5/lib/parse-excel.js +31 -0
  12. package/dist/es5/lib/parse-excel.js.map +1 -0
  13. package/dist/es5/workers/excel-worker.js +6 -0
  14. package/dist/es5/workers/excel-worker.js.map +1 -0
  15. package/dist/esm/bundle.js +4 -0
  16. package/dist/esm/bundle.js.map +1 -0
  17. package/dist/esm/excel-loader.js +21 -0
  18. package/dist/esm/excel-loader.js.map +1 -0
  19. package/dist/esm/index.js +14 -0
  20. package/dist/esm/index.js.map +1 -0
  21. package/dist/esm/lib/encode-excel.js +2 -0
  22. package/dist/esm/lib/encode-excel.js.map +1 -0
  23. package/dist/esm/lib/parse-excel.js +25 -0
  24. package/dist/esm/lib/parse-excel.js.map +1 -0
  25. package/dist/esm/workers/excel-worker.js +4 -0
  26. package/dist/esm/workers/excel-worker.js.map +1 -0
  27. package/dist/excel-loader.d.ts +3 -13
  28. package/dist/excel-loader.d.ts.map +1 -1
  29. package/dist/excel-loader.js +29 -18
  30. package/dist/excel-worker.js +1502 -311
  31. package/dist/index.d.ts +4 -15
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +16 -7
  34. package/dist/lib/encode-excel.js +80 -1
  35. package/dist/lib/parse-excel.d.ts +3 -1
  36. package/dist/lib/parse-excel.d.ts.map +1 -1
  37. package/dist/lib/parse-excel.js +44 -29
  38. package/dist/workers/excel-worker.js +5 -4
  39. package/package.json +6 -6
  40. package/src/excel-loader.ts +4 -1
  41. package/src/index.ts +10 -6
  42. package/src/lib/parse-excel.ts +5 -2
  43. package/dist/bundle.js.map +0 -1
  44. package/dist/excel-loader.js.map +0 -1
  45. package/dist/index.js.map +0 -1
  46. package/dist/lib/encode-excel.js.map +0 -1
  47. package/dist/lib/parse-excel.js.map +0 -1
  48. package/dist/workers/excel-worker.js.map +0 -1
@@ -28,10 +28,22 @@
28
28
  return __reExport(__markAsModule(__defProp(module != null ? __create(__getProtoOf(module)) : {}, "default", module && module.__esModule && "default" in module ? { get: () => module.default, enumerable: true } : { value: module, enumerable: true })), module);
29
29
  };
30
30
 
31
+ // (disabled):fs
32
+ var require_fs = __commonJS({
33
+ "(disabled):fs"() {
34
+ }
35
+ });
36
+
37
+ // (disabled):stream
38
+ var require_stream = __commonJS({
39
+ "(disabled):stream"() {
40
+ }
41
+ });
42
+
31
43
  // ../../node_modules/xlsx/dist/cpexcel.js
32
44
  var require_cpexcel = __commonJS({
33
45
  "../../node_modules/xlsx/dist/cpexcel.js"(exports, module) {
34
- var cptable2 = { version: "1.14.0" };
46
+ var cptable2 = { version: "1.15.0" };
35
47
  cptable2[437] = function() {
36
48
  var d = "\0\x07\b \n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0", D = [], e = {};
37
49
  for (var i = 0; i != d.length; ++i) {
@@ -3094,6 +3106,15 @@
3094
3106
  }
3095
3107
  return { "enc": e, "dec": D };
3096
3108
  }();
3109
+ cptable2[28591] = function() {
3110
+ var d = "\0\x07\b \n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF", D = [], e = {};
3111
+ for (var i = 0; i != d.length; ++i) {
3112
+ if (d.charCodeAt(i) !== 65533)
3113
+ e[d.charAt(i)] = i;
3114
+ D[i] = d.charAt(i);
3115
+ }
3116
+ return { "enc": e, "dec": D };
3117
+ }();
3097
3118
  if (typeof module !== "undefined" && module.exports && typeof DO_NOT_EXPORT_CODEPAGE === "undefined")
3098
3119
  module.exports = cptable2;
3099
3120
  (function(root, factory) {
@@ -3843,12 +3864,6 @@
3843
3864
  }
3844
3865
  });
3845
3866
 
3846
- // (disabled):fs
3847
- var require_fs = __commonJS({
3848
- "(disabled):fs"() {
3849
- }
3850
- });
3851
-
3852
3867
  // ../../node_modules/xlsx/jszip.js
3853
3868
  var require_jszip = __commonJS({
3854
3869
  "../../node_modules/xlsx/jszip.js"(exports, module) {
@@ -3857,7 +3872,7 @@
3857
3872
  module.exports = e();
3858
3873
  else if (typeof define == "function" && define.amd && typeof DO_NOT_EXPORT_JSZIP == "undefined") {
3859
3874
  JSZipSync = e();
3860
- define([], e);
3875
+ define("j", [], e);
3861
3876
  } else {
3862
3877
  var f;
3863
3878
  typeof globalThis != "undefined" ? f = globalThis : typeof window != "undefined" ? f = window : typeof global != "undefined" ? f = global : typeof $ != "undefined" && $.global ? f = $.global : typeof self != "undefined" && (f = self), f.JSZipSync = e();
@@ -9496,18 +9511,12 @@
9496
9511
  }
9497
9512
  });
9498
9513
 
9499
- // (disabled):stream
9500
- var require_stream = __commonJS({
9501
- "(disabled):stream"() {
9502
- }
9503
- });
9504
-
9505
9514
  // ../../node_modules/xlsx/xlsx.js
9506
9515
  var require_xlsx = __commonJS({
9507
9516
  "../../node_modules/xlsx/xlsx.js"(exports, module) {
9508
9517
  var XLSX = {};
9509
9518
  function make_xlsx_lib(XLSX2) {
9510
- XLSX2.version = "0.17.0";
9519
+ XLSX2.version = "0.17.5";
9511
9520
  var current_codepage = 1200, current_ansi = 1252;
9512
9521
  if (typeof module !== "undefined" && typeof __require !== "undefined") {
9513
9522
  if (typeof cptable === "undefined") {
@@ -11668,7 +11677,8 @@
11668
11677
  break;
11669
11678
  fat_addrs.push(q2);
11670
11679
  }
11671
- sleuth_fat(__readInt32LE(sector, ssz - 4), cnt - 1, sectors, ssz, fat_addrs);
11680
+ if (cnt >= 1)
11681
+ sleuth_fat(__readInt32LE(sector, ssz - 4), cnt - 1, sectors, ssz, fat_addrs);
11672
11682
  }
11673
11683
  }
11674
11684
  function get_sector_list(sectors, start, fat_addrs, ssz, chkd) {
@@ -13022,8 +13032,10 @@
13022
13032
  }
13023
13033
  function fuzzynum(s) {
13024
13034
  var v = Number(s);
13025
- if (!isNaN(v))
13035
+ if (isFinite(v))
13026
13036
  return v;
13037
+ if (!isNaN(v))
13038
+ return NaN;
13027
13039
  if (!/\d/.test(s))
13028
13040
  return v;
13029
13041
  var wt = 1;
@@ -13104,11 +13116,11 @@
13104
13116
  }
13105
13117
  function safegetzipfile(zip, file) {
13106
13118
  var k = zip.FullPaths || keys(zip.files);
13107
- var f = file.toLowerCase(), g = f.replace(/\//g, "\\");
13119
+ var f = file.toLowerCase().replace(/[\/]/g, "\\"), g = f.replace(/\\/g, "/");
13108
13120
  for (var i2 = 0; i2 < k.length; ++i2) {
13109
- var n = k[i2].toLowerCase();
13121
+ var n = k[i2].replace(/^Root Entry[\/]/, "").toLowerCase();
13110
13122
  if (f == n || g == n)
13111
- return zip.files[k[i2]];
13123
+ return zip.files ? zip.files[k[i2]] : zip.FileIndex[i2];
13112
13124
  }
13113
13125
  return null;
13114
13126
  }
@@ -14033,7 +14045,7 @@
14033
14045
  for (cntbyte = 1; cntbyte < 4 && tmpbyte & 128; ++cntbyte)
14034
14046
  length += ((tmpbyte = data.read_shift(1)) & 127) << 7 * cntbyte;
14035
14047
  tgt = data.l + length;
14036
- var d = (R.f || parsenoop)(data, length, opts);
14048
+ var d = R.f && R.f(data, length, opts);
14037
14049
  data.l = tgt;
14038
14050
  if (cb(d, R.n, RT))
14039
14051
  return;
@@ -14294,11 +14306,12 @@
14294
14306
  idx = 10 * idx + cc;
14295
14307
  }
14296
14308
  o.s.r = --idx;
14297
- if (i2 === len || range.charCodeAt(++i2) === 58) {
14309
+ if (i2 === len || cc != 10) {
14298
14310
  o.e.c = o.s.c;
14299
14311
  o.e.r = o.s.r;
14300
14312
  return o;
14301
14313
  }
14314
+ ++i2;
14302
14315
  for (idx = 0; i2 != len; ++i2) {
14303
14316
  if ((cc = range.charCodeAt(i2) - 64) < 1 || cc > 26)
14304
14317
  break;
@@ -14333,6 +14346,8 @@
14333
14346
  return cell.w;
14334
14347
  if (cell.t == "d" && !cell.z && o && o.dateNF)
14335
14348
  cell.z = o.dateNF;
14349
+ if (cell.t == "e")
14350
+ return BErr[cell.v] || cell.v;
14336
14351
  if (v == void 0)
14337
14352
  return safe_format_cell(cell, cell.v);
14338
14353
  return safe_format_cell(cell, v);
@@ -14399,7 +14414,10 @@
14399
14414
  if (cell.v === null) {
14400
14415
  if (cell.f)
14401
14416
  cell.t = "n";
14402
- else if (!o.sheetStubs)
14417
+ else if (o.nullError) {
14418
+ cell.t = "e";
14419
+ cell.v = 0;
14420
+ } else if (!o.sheetStubs)
14403
14421
  continue;
14404
14422
  else
14405
14423
  cell.t = "z";
@@ -14526,6 +14544,19 @@
14526
14544
  o.write_shift(1, 0);
14527
14545
  return o;
14528
14546
  }
14547
+ function parse_XLSBShortCell(data) {
14548
+ var iStyleRef = data.read_shift(2);
14549
+ iStyleRef += data.read_shift(1) << 16;
14550
+ data.l++;
14551
+ return { c: -1, iStyleRef };
14552
+ }
14553
+ function write_XLSBShortCell(cell, o) {
14554
+ if (o == null)
14555
+ o = new_buf(4);
14556
+ o.write_shift(3, cell.iStyleRef || cell.s);
14557
+ o.write_shift(1, 0);
14558
+ return o;
14559
+ }
14529
14560
  var parse_XLSBCodeName = parse_XLWideString;
14530
14561
  var write_XLSBCodeName = write_XLWideString;
14531
14562
  function parse_XLNullableWideString(data) {
@@ -14749,7 +14780,10 @@
14749
14780
  27: { n: "ContentStatus", t: VT_STRING },
14750
14781
  28: { n: "Language", t: VT_STRING },
14751
14782
  29: { n: "Version", t: VT_STRING },
14752
- 255: {}
14783
+ 255: {},
14784
+ 2147483648: { n: "Locale", t: VT_UI4 },
14785
+ 2147483651: { n: "Behavior", t: VT_UI4 },
14786
+ 1919054434: {}
14753
14787
  };
14754
14788
  var SummaryPIDSI = {
14755
14789
  1: { n: "CodePage", t: VT_I2 },
@@ -14771,18 +14805,11 @@
14771
14805
  17: { n: "Thumbnail", t: VT_CF },
14772
14806
  18: { n: "Application", t: VT_STRING },
14773
14807
  19: { n: "DocSecurity", t: VT_I4 },
14774
- 255: {}
14775
- };
14776
- var SpecialProperties = {
14808
+ 255: {},
14777
14809
  2147483648: { n: "Locale", t: VT_UI4 },
14778
14810
  2147483651: { n: "Behavior", t: VT_UI4 },
14779
14811
  1919054434: {}
14780
14812
  };
14781
- (function() {
14782
- for (var y in SpecialProperties)
14783
- if (Object.prototype.hasOwnProperty.call(SpecialProperties, y))
14784
- DocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y];
14785
- })();
14786
14813
  var DocSummaryRE = evert_key(DocSummaryPIDDSI, "n");
14787
14814
  var SummaryRE = evert_key(SummaryPIDSI, "n");
14788
14815
  var CountryEnum = {
@@ -15239,7 +15266,8 @@
15239
15266
  rel.Type = y.Type;
15240
15267
  rel.Target = y.Target;
15241
15268
  rel.Id = y.Id;
15242
- rel.TargetMode = y.TargetMode;
15269
+ if (y.TargetMode)
15270
+ rel.TargetMode = y.TargetMode;
15243
15271
  var canonictarget = y.TargetMode === "External" ? y.Target : resolve_path(y.Target, currentFilePath);
15244
15272
  rels[canonictarget] = rel;
15245
15273
  hash[y.Id] = rel;
@@ -15344,7 +15372,7 @@
15344
15372
  return o.join("");
15345
15373
  }
15346
15374
  var write_meta_ods = function() {
15347
- var payload = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" office:version="1.2"><office:meta><meta:generator>SheetJS ' + XLSX2.version + "</meta:generator></office:meta></office:document-meta>";
15375
+ var payload = '<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" office:version="1.2"><office:meta><meta:generator>SheetJS ' + XLSX2.version + "</meta:generator></office:meta></office:document-meta>";
15348
15376
  return function wmo() {
15349
15377
  return payload;
15350
15378
  };
@@ -15812,6 +15840,17 @@
15812
15840
  throw new Error("VtUnalignedString must have positive length");
15813
15841
  return parse_VtStringBase(blob, t, 0);
15814
15842
  }
15843
+ function parse_VtVecLpwstrValue(blob) {
15844
+ var length = blob.read_shift(4);
15845
+ var ret = [];
15846
+ for (var i2 = 0; i2 != length; ++i2) {
15847
+ var start = blob.l;
15848
+ ret[i2] = blob.read_shift(0, "lpwstr").replace(chr0, "");
15849
+ if (blob.l - start & 2)
15850
+ blob.l += 2;
15851
+ }
15852
+ return ret;
15853
+ }
15815
15854
  function parse_VtVecUnalignedLpstrValue(blob) {
15816
15855
  var length = blob.read_shift(4);
15817
15856
  var ret = [];
@@ -15819,24 +15858,21 @@
15819
15858
  ret[i2] = blob.read_shift(0, "lpstr-cp").replace(chr0, "");
15820
15859
  return ret;
15821
15860
  }
15822
- function parse_VtVecUnalignedLpstr(blob) {
15823
- return parse_VtVecUnalignedLpstrValue(blob);
15824
- }
15825
15861
  function parse_VtHeadingPair(blob) {
15862
+ var start = blob.l;
15826
15863
  var headingString = parse_TypedPropertyValue(blob, VT_USTR);
15864
+ if (blob[blob.l] == 0 && blob[blob.l + 1] == 0 && blob.l - start & 2)
15865
+ blob.l += 2;
15827
15866
  var headerParts = parse_TypedPropertyValue(blob, VT_I4);
15828
15867
  return [headingString, headerParts];
15829
15868
  }
15830
15869
  function parse_VtVecHeadingPairValue(blob) {
15831
15870
  var cElements = blob.read_shift(4);
15832
15871
  var out = [];
15833
- for (var i2 = 0; i2 != cElements / 2; ++i2)
15872
+ for (var i2 = 0; i2 < cElements / 2; ++i2)
15834
15873
  out.push(parse_VtHeadingPair(blob));
15835
15874
  return out;
15836
15875
  }
15837
- function parse_VtVecHeadingPair(blob) {
15838
- return parse_VtVecHeadingPairValue(blob);
15839
- }
15840
15876
  function parse_dictionary(blob, CodePage) {
15841
15877
  var cnt = blob.read_shift(4);
15842
15878
  var dict = {};
@@ -15869,7 +15905,7 @@
15869
15905
  var t = blob.read_shift(2), ret, opts = _opts || {};
15870
15906
  blob.l += 2;
15871
15907
  if (type !== VT_VARIANT) {
15872
- if (t !== type && VT_CUSTOM.indexOf(type) === -1)
15908
+ if (t !== type && VT_CUSTOM.indexOf(type) === -1 && !((type & 65534) == 4126 && (t & 65534) == 4126))
15873
15909
  throw new Error("Expected type " + type + " saw " + t);
15874
15910
  }
15875
15911
  switch (type === VT_VARIANT ? t : type) {
@@ -15901,9 +15937,10 @@
15901
15937
  case 81:
15902
15938
  return parse_VtUnalignedString(blob, t).replace(chr0, "");
15903
15939
  case 4108:
15904
- return parse_VtVecHeadingPair(blob);
15940
+ return parse_VtVecHeadingPairValue(blob);
15905
15941
  case 4126:
15906
- return parse_VtVecUnalignedLpstr(blob);
15942
+ case 4127:
15943
+ return t == 4127 ? parse_VtVecLpwstrValue(blob) : parse_VtVecUnalignedLpstrValue(blob);
15907
15944
  default:
15908
15945
  throw new Error("TypedPropertyValue unrecognized type " + type + " " + t);
15909
15946
  }
@@ -16279,7 +16316,7 @@
16279
16316
  function write_Bes(v, t, o) {
16280
16317
  if (!o)
16281
16318
  o = new_buf(2);
16282
- o.write_shift(1, +v);
16319
+ o.write_shift(1, t == "e" ? +v : +!!v);
16283
16320
  o.write_shift(1, t == "e" ? 1 : 0);
16284
16321
  return o;
16285
16322
  }
@@ -16405,19 +16442,22 @@
16405
16442
  return url;
16406
16443
  }
16407
16444
  function parse_FileMoniker(blob) {
16408
- blob.l += 2;
16445
+ var cAnti = blob.read_shift(2);
16446
+ var preamble = "";
16447
+ while (cAnti-- > 0)
16448
+ preamble += "../";
16409
16449
  var ansiPath = blob.read_shift(0, "lpstr-ansi");
16410
16450
  blob.l += 2;
16411
16451
  if (blob.read_shift(2) != 57005)
16412
16452
  throw new Error("Bad FileMoniker");
16413
16453
  var sz = blob.read_shift(4);
16414
16454
  if (sz === 0)
16415
- return ansiPath.replace(/\\/g, "/");
16455
+ return preamble + ansiPath.replace(/\\/g, "/");
16416
16456
  var bytes = blob.read_shift(4);
16417
16457
  if (blob.read_shift(2) != 3)
16418
16458
  throw new Error("Bad FileMoniker");
16419
16459
  var unicodePath = blob.read_shift(bytes >> 1, "utf16le").replace(chr0, "");
16420
- return unicodePath;
16460
+ return preamble + unicodePath;
16421
16461
  }
16422
16462
  function parse_HyperlinkMoniker(blob, length) {
16423
16463
  var clsid = blob.read_shift(16);
@@ -16436,6 +16476,15 @@
16436
16476
  var o = len > 0 ? blob.read_shift(len, "utf16le").replace(chr0, "") : "";
16437
16477
  return o;
16438
16478
  }
16479
+ function write_HyperlinkString(str, o) {
16480
+ if (!o)
16481
+ o = new_buf(6 + str.length * 2);
16482
+ o.write_shift(4, 1 + str.length);
16483
+ for (var i2 = 0; i2 < str.length; ++i2)
16484
+ o.write_shift(2, str.charCodeAt(i2));
16485
+ o.write_shift(2, 0);
16486
+ return o;
16487
+ }
16439
16488
  function parse_Hyperlink(blob, length) {
16440
16489
  var end = blob.l + length;
16441
16490
  var sVer = blob.read_shift(4);
@@ -16464,6 +16513,8 @@
16464
16513
  target += "#" + Loc;
16465
16514
  if (!target)
16466
16515
  target = "#" + Loc;
16516
+ if (flags & 2 && target.charAt(0) == "/" && target.charAt(1) != "/")
16517
+ target = "file://" + target;
16467
16518
  var out = { Target: target };
16468
16519
  if (guid)
16469
16520
  out.guid = guid;
@@ -16476,7 +16527,10 @@
16476
16527
  function write_Hyperlink(hl) {
16477
16528
  var out = new_buf(512), i2 = 0;
16478
16529
  var Target = hl.Target;
16479
- var F = Target.indexOf("#") > -1 ? 31 : 23;
16530
+ if (Target.slice(0, 7) == "file://")
16531
+ Target = Target.slice(7);
16532
+ var hashidx = Target.indexOf("#");
16533
+ var F = hashidx > -1 ? 31 : 23;
16480
16534
  switch (Target.charAt(0)) {
16481
16535
  case "#":
16482
16536
  F = 28;
@@ -16492,18 +16546,18 @@
16492
16546
  out.write_shift(4, data[i2]);
16493
16547
  if (F == 28) {
16494
16548
  Target = Target.slice(1);
16495
- out.write_shift(4, Target.length + 1);
16496
- for (i2 = 0; i2 < Target.length; ++i2)
16497
- out.write_shift(2, Target.charCodeAt(i2));
16498
- out.write_shift(2, 0);
16549
+ write_HyperlinkString(Target, out);
16499
16550
  } else if (F & 2) {
16500
16551
  data = "e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b".split(" ");
16501
16552
  for (i2 = 0; i2 < data.length; ++i2)
16502
16553
  out.write_shift(1, parseInt(data[i2], 16));
16503
- out.write_shift(4, 2 * (Target.length + 1));
16504
- for (i2 = 0; i2 < Target.length; ++i2)
16505
- out.write_shift(2, Target.charCodeAt(i2));
16554
+ var Pretarget = hashidx > -1 ? Target.slice(0, hashidx) : Target;
16555
+ out.write_shift(4, 2 * (Pretarget.length + 1));
16556
+ for (i2 = 0; i2 < Pretarget.length; ++i2)
16557
+ out.write_shift(2, Pretarget.charCodeAt(i2));
16506
16558
  out.write_shift(2, 0);
16559
+ if (F & 8)
16560
+ write_HyperlinkString(hashidx > -1 ? Target.slice(hashidx + 1) : "", out);
16507
16561
  } else {
16508
16562
  data = "03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46".split(" ");
16509
16563
  for (i2 = 0; i2 < data.length; ++i2)
@@ -16512,9 +16566,9 @@
16512
16566
  while (Target.slice(P * 3, P * 3 + 3) == "../" || Target.slice(P * 3, P * 3 + 3) == "..\\")
16513
16567
  ++P;
16514
16568
  out.write_shift(2, P);
16515
- out.write_shift(4, Target.length + 1);
16516
- for (i2 = 0; i2 < Target.length; ++i2)
16517
- out.write_shift(1, Target.charCodeAt(i2) & 255);
16569
+ out.write_shift(4, Target.length - 3 * P + 1);
16570
+ for (i2 = 0; i2 < Target.length - 3 * P; ++i2)
16571
+ out.write_shift(1, Target.charCodeAt(i2 + 3 * P) & 255);
16518
16572
  out.write_shift(1, 0);
16519
16573
  out.write_shift(2, 65535);
16520
16574
  out.write_shift(2, 57005);
@@ -16761,7 +16815,7 @@
16761
16815
  }
16762
16816
  function parse_WsBool(blob, length, opts) {
16763
16817
  var flags = opts && opts.biff == 8 || length == 2 ? blob.read_shift(2) : (blob.l += length, 0);
16764
- return { fDialog: flags & 16 };
16818
+ return { fDialog: flags & 16, fBelow: flags & 64, fRight: flags & 128 };
16765
16819
  }
16766
16820
  function parse_BoundSheet8(blob, length, opts) {
16767
16821
  var pos = blob.read_shift(4);
@@ -16964,6 +17018,8 @@
16964
17018
  return o;
16965
17019
  }
16966
17020
  function parse_Label(blob, length, opts) {
17021
+ if (opts.biffguess && opts.biff == 2)
17022
+ opts.biff = 5;
16967
17023
  var target = blob.l + length;
16968
17024
  var cell = parse_XLSCell(blob, 6);
16969
17025
  if (opts.biff == 2)
@@ -17110,7 +17166,10 @@
17110
17166
  o.write_shift(2, data.numFmtId || 0);
17111
17167
  o.write_shift(2, ixfeP << 4);
17112
17168
  }
17113
- o.write_shift(4, 0);
17169
+ var f = 0;
17170
+ if (data.numFmtId > 0 && b5)
17171
+ f |= 1024;
17172
+ o.write_shift(4, f);
17114
17173
  o.write_shift(4, 0);
17115
17174
  if (!b5)
17116
17175
  o.write_shift(4, 0);
@@ -17137,7 +17196,7 @@
17137
17196
  }
17138
17197
  function parse_BoolErr(blob, length, opts) {
17139
17198
  var cell = parse_XLSCell(blob, 6);
17140
- if (opts.biff == 2)
17199
+ if (opts.biff == 2 || length == 9)
17141
17200
  ++blob.l;
17142
17201
  var val = parse_Bes(blob, 2);
17143
17202
  cell.val = val;
@@ -17150,7 +17209,9 @@
17150
17209
  write_Bes(v, t, o);
17151
17210
  return o;
17152
17211
  }
17153
- function parse_Number(blob) {
17212
+ function parse_Number(blob, length, opts) {
17213
+ if (opts.biffguess && opts.biff == 2)
17214
+ opts.biff = 5;
17154
17215
  var cell = parse_XLSCell(blob, 6);
17155
17216
  var xnum = parse_Xnum(blob, 8);
17156
17217
  cell.val = xnum;
@@ -17495,6 +17556,21 @@
17495
17556
  o.level = flags >> 8 & 7;
17496
17557
  return o;
17497
17558
  }
17559
+ function write_ColInfo(col, idx) {
17560
+ var o = new_buf(12);
17561
+ o.write_shift(2, idx);
17562
+ o.write_shift(2, idx);
17563
+ o.write_shift(2, col.width * 256);
17564
+ o.write_shift(2, 0);
17565
+ var f = 0;
17566
+ if (col.hidden)
17567
+ f |= 1;
17568
+ o.write_shift(1, f);
17569
+ f = col.level || 0;
17570
+ o.write_shift(1, f);
17571
+ o.write_shift(2, 0);
17572
+ return o;
17573
+ }
17498
17574
  function parse_Setup(blob, length) {
17499
17575
  var o = {};
17500
17576
  if (length < 32)
@@ -17535,6 +17611,8 @@
17535
17611
  return o;
17536
17612
  }
17537
17613
  function parse_BIFF2STR(blob, length, opts) {
17614
+ if (opts.biffguess && opts.biff == 5)
17615
+ opts.biff = 2;
17538
17616
  var cell = parse_XLSCell(blob, 6);
17539
17617
  ++blob.l;
17540
17618
  var str = parse_XLUnicodeString2(blob, length - 7, opts);
@@ -17661,6 +17739,11 @@
17661
17739
  87: 1252,
17662
17740
  88: 1252,
17663
17741
  89: 1252,
17742
+ 108: 863,
17743
+ 134: 737,
17744
+ 135: 852,
17745
+ 136: 857,
17746
+ 204: 1257,
17664
17747
  255: 16969
17665
17748
  };
17666
17749
  var dbf_reverse_map = evert({
@@ -17710,10 +17793,11 @@
17710
17793
  }
17711
17794
  prep_blob(d, 0);
17712
17795
  var ft = d.read_shift(1);
17713
- var memo = false;
17796
+ var memo = !!(ft & 136);
17714
17797
  var vfp = false, l7 = false;
17715
17798
  switch (ft) {
17716
17799
  case 2:
17800
+ break;
17717
17801
  case 3:
17718
17802
  break;
17719
17803
  case 48:
@@ -17722,24 +17806,21 @@
17722
17806
  break;
17723
17807
  case 49:
17724
17808
  vfp = true;
17809
+ memo = true;
17725
17810
  break;
17726
17811
  case 131:
17727
- memo = true;
17728
17812
  break;
17729
17813
  case 139:
17730
- memo = true;
17731
17814
  break;
17732
17815
  case 140:
17733
- memo = true;
17734
17816
  l7 = true;
17735
17817
  break;
17736
17818
  case 245:
17737
- memo = true;
17738
17819
  break;
17739
17820
  default:
17740
17821
  throw new Error("DBF Unsupported Version: " + ft.toString(16));
17741
17822
  }
17742
- var nrow = 0, fpos = 0;
17823
+ var nrow = 0, fpos = 521;
17743
17824
  if (ft == 2)
17744
17825
  nrow = d.read_shift(2);
17745
17826
  d.l += 3;
@@ -17750,7 +17831,7 @@
17750
17831
  if (ft != 2)
17751
17832
  fpos = d.read_shift(2);
17752
17833
  var rlen = d.read_shift(2);
17753
- var current_cp = 1252;
17834
+ var current_cp = opts.codepage || 1252;
17754
17835
  if (ft != 2) {
17755
17836
  d.l += 16;
17756
17837
  d.read_shift(1);
@@ -17762,8 +17843,9 @@
17762
17843
  if (l7)
17763
17844
  d.l += 36;
17764
17845
  var fields = [], field = {};
17765
- var hend = fpos - 10 - (vfp ? 264 : 0), ww = l7 ? 32 : 11;
17766
- while (ft == 2 ? d.l < d.length && d[d.l] != 13 : d.l < hend) {
17846
+ var hend = Math.min(d.length, ft == 2 ? 521 : fpos - 10 - (vfp ? 264 : 0));
17847
+ var ww = l7 ? 32 : 11;
17848
+ while (d.l < hend && d[d.l] != 13) {
17767
17849
  field = {};
17768
17850
  field.name = cptable.utils.decode(current_cp, d.slice(d.l, d.l + ww)).replace(/[\u0000\r\n].*$/g, "");
17769
17851
  d.l += ww;
@@ -17788,6 +17870,9 @@
17788
17870
  if (opts.WTF)
17789
17871
  console.log("Skipping " + field.name + ":" + field.type);
17790
17872
  break;
17873
+ case "+":
17874
+ case "0":
17875
+ case "@":
17791
17876
  case "C":
17792
17877
  case "D":
17793
17878
  case "F":
@@ -17798,9 +17883,6 @@
17798
17883
  case "O":
17799
17884
  case "T":
17800
17885
  case "Y":
17801
- case "0":
17802
- case "@":
17803
- case "+":
17804
17886
  break;
17805
17887
  default:
17806
17888
  throw new Error("Unknown Field Type: " + field.type);
@@ -17808,13 +17890,9 @@
17808
17890
  }
17809
17891
  if (d[d.l] !== 13)
17810
17892
  d.l = fpos - 1;
17811
- else if (ft == 2)
17812
- d.l = 521;
17813
- if (ft != 2) {
17814
- if (d.read_shift(1) !== 13)
17815
- throw new Error("DBF Terminator not found " + d.l + " " + d[d.l]);
17816
- d.l = fpos;
17817
- }
17893
+ if (d.read_shift(1) !== 13)
17894
+ throw new Error("DBF Terminator not found " + d.l + " " + d[d.l]);
17895
+ d.l = fpos;
17818
17896
  var R = 0, C = 0;
17819
17897
  out[0] = [];
17820
17898
  for (C = 0; C != fields.length; ++C)
@@ -17834,8 +17912,8 @@
17834
17912
  var s = cptable.utils.decode(current_cp, dd);
17835
17913
  switch (fields[C].type) {
17836
17914
  case "C":
17837
- out[R][C] = cptable.utils.decode(current_cp, dd);
17838
- out[R][C] = out[R][C].trim();
17915
+ if (s.trim().length)
17916
+ out[R][C] = s.replace(/\s+$/, "");
17839
17917
  break;
17840
17918
  case "D":
17841
17919
  if (s.length === 8)
@@ -17851,7 +17929,7 @@
17851
17929
  out[R][C] = l7 ? dd.read_shift(-4, "i") ^ 2147483648 : dd.read_shift(4, "i");
17852
17930
  break;
17853
17931
  case "L":
17854
- switch (s.toUpperCase()) {
17932
+ switch (s.trim().toUpperCase()) {
17855
17933
  case "Y":
17856
17934
  case "T":
17857
17935
  out[R][C] = true;
@@ -17860,9 +17938,8 @@
17860
17938
  case "F":
17861
17939
  out[R][C] = false;
17862
17940
  break;
17863
- case " ":
17941
+ case "":
17864
17942
  case "?":
17865
- out[R][C] = false;
17866
17943
  break;
17867
17944
  default:
17868
17945
  throw new Error("DBF Unrecognized L:|" + s + "|");
@@ -17874,7 +17951,9 @@
17874
17951
  out[R][C] = "##MEMO##" + (l7 ? parseInt(s.trim(), 10) : dd.read_shift(4));
17875
17952
  break;
17876
17953
  case "N":
17877
- out[R][C] = +s.replace(/\u0000/g, "").trim();
17954
+ s = s.replace(/\u0000/g, "").trim();
17955
+ if (s && s != ".")
17956
+ out[R][C] = +s || 0;
17878
17957
  break;
17879
17958
  case "@":
17880
17959
  out[R][C] = new Date(dd.read_shift(-8, "f") - 621356832e5);
@@ -18122,7 +18201,7 @@
18122
18201
  S: 169,
18123
18202
  c: 170,
18124
18203
  R: 174,
18125
- B: 180,
18204
+ "B ": 180,
18126
18205
  0: 176,
18127
18206
  1: 177,
18128
18207
  2: 178,
@@ -18169,7 +18248,7 @@
18169
18248
  case "binary":
18170
18249
  return sylk_to_aoa_str(d, opts);
18171
18250
  case "buffer":
18172
- return sylk_to_aoa_str(d.toString("binary"), opts);
18251
+ return sylk_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString("binary") : a2s(d), opts);
18173
18252
  case "array":
18174
18253
  return sylk_to_aoa_str(cc2str(d), opts);
18175
18254
  }
@@ -18200,14 +18279,18 @@
18200
18279
  break;
18201
18280
  case "O":
18202
18281
  break;
18282
+ case "W":
18283
+ break;
18203
18284
  case "P":
18204
18285
  if (record[1].charAt(0) == "P")
18205
18286
  formats.push(rstr.slice(3).replace(/;;/g, ";"));
18206
18287
  break;
18207
18288
  case "C":
18208
- var C_seen_K = false, C_seen_X = false;
18289
+ var C_seen_K = false, C_seen_X = false, C_seen_S = false, C_seen_E = false, _R = -1, _C = -1;
18209
18290
  for (rj = 1; rj < record.length; ++rj)
18210
18291
  switch (record[rj].charAt(0)) {
18292
+ case "A":
18293
+ break;
18211
18294
  case "X":
18212
18295
  C = parseInt(record[rj].slice(1)) - 1;
18213
18296
  C_seen_X = true;
@@ -18239,17 +18322,41 @@
18239
18322
  C_seen_K = true;
18240
18323
  break;
18241
18324
  case "E":
18325
+ C_seen_E = true;
18242
18326
  var formula = rc_to_a1(record[rj].slice(1), { r: R, c: C });
18243
18327
  arr[R][C] = [arr[R][C], formula];
18244
18328
  break;
18329
+ case "S":
18330
+ C_seen_S = true;
18331
+ arr[R][C] = [arr[R][C], "S5S"];
18332
+ break;
18333
+ case "G":
18334
+ break;
18335
+ case "R":
18336
+ _R = parseInt(record[rj].slice(1)) - 1;
18337
+ break;
18338
+ case "C":
18339
+ _C = parseInt(record[rj].slice(1)) - 1;
18340
+ break;
18245
18341
  default:
18246
18342
  if (opts && opts.WTF)
18247
18343
  throw new Error("SYLK bad record " + rstr);
18248
18344
  }
18249
18345
  if (C_seen_K) {
18250
- arr[R][C] = val;
18346
+ if (arr[R][C] && arr[R][C].length == 2)
18347
+ arr[R][C][0] = val;
18348
+ else
18349
+ arr[R][C] = val;
18251
18350
  next_cell_format = null;
18252
18351
  }
18352
+ if (C_seen_S) {
18353
+ if (C_seen_E)
18354
+ throw new Error("SYLK shared formula cannot have own formula");
18355
+ var shrbase = _R > -1 && arr[_R][_C];
18356
+ if (!shrbase || !shrbase[1])
18357
+ throw new Error("SYLK shared formula cannot find base");
18358
+ arr[R][C][1] = shift_formula_str(shrbase[1], { r: R - _R, c: C - _C });
18359
+ }
18253
18360
  break;
18254
18361
  case "F":
18255
18362
  var F_seen = 0;
@@ -18364,9 +18471,9 @@
18364
18471
  if (col.hidden)
18365
18472
  rec += "0";
18366
18473
  else {
18367
- if (typeof col.width == "number")
18474
+ if (typeof col.width == "number" && !col.wpx)
18368
18475
  col.wpx = width2px(col.width);
18369
- if (typeof col.wpx == "number")
18476
+ if (typeof col.wpx == "number" && !col.wch)
18370
18477
  col.wch = px2char(col.wpx);
18371
18478
  if (typeof col.wch == "number")
18372
18479
  rec += Math.round(col.wch);
@@ -18425,7 +18532,7 @@
18425
18532
  case "binary":
18426
18533
  return dif_to_aoa_str(d, opts);
18427
18534
  case "buffer":
18428
- return dif_to_aoa_str(d.toString("binary"), opts);
18535
+ return dif_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString("binary") : a2s(d), opts);
18429
18536
  case "array":
18430
18537
  return dif_to_aoa_str(cc2str(d), opts);
18431
18538
  }
@@ -18444,7 +18551,10 @@
18444
18551
  var metadata = records[ri].trim().split(",");
18445
18552
  var type = metadata[0], value = metadata[1];
18446
18553
  ++ri;
18447
- var data = records[ri].trim();
18554
+ var data = records[ri] || "";
18555
+ while ((data.match(/["]/g) || []).length & 1 && ri < records.length - 1)
18556
+ data += "\n" + records[++ri];
18557
+ data = data.trim();
18448
18558
  switch (+type) {
18449
18559
  case -1:
18450
18560
  if (data === "BOT") {
@@ -18469,6 +18579,9 @@
18469
18579
  break;
18470
18580
  case 1:
18471
18581
  data = data.slice(1, data.length - 1);
18582
+ data = data.replace(/""/g, '"');
18583
+ if (DIF_XL && data && data.match(/^=".*"$/))
18584
+ data = data.slice(2, -1);
18472
18585
  arr[R][C++] = data !== "" ? data : null;
18473
18586
  break;
18474
18587
  }
@@ -18688,12 +18801,12 @@
18688
18801
  function set_text_arr(data, arr, R, C, o) {
18689
18802
  if (o.raw)
18690
18803
  arr[R][C] = data;
18691
- else if (data === "TRUE")
18804
+ else if (data === "") {
18805
+ } else if (data === "TRUE")
18692
18806
  arr[R][C] = true;
18693
18807
  else if (data === "FALSE")
18694
18808
  arr[R][C] = false;
18695
- else if (data === "") {
18696
- } else if (!isNaN(fuzzynum(data)))
18809
+ else if (!isNaN(fuzzynum(data)))
18697
18810
  arr[R][C] = fuzzynum(data);
18698
18811
  else if (!isNaN(fuzzydate(data).getDate()))
18699
18812
  arr[R][C] = parseDate(data);
@@ -18733,12 +18846,14 @@
18733
18846
  var guess_seps = {
18734
18847
  44: ",",
18735
18848
  9: " ",
18736
- 59: ";"
18849
+ 59: ";",
18850
+ 124: "|"
18737
18851
  };
18738
18852
  var guess_sep_weights = {
18739
18853
  44: 3,
18740
18854
  9: 2,
18741
- 59: 1
18855
+ 59: 1,
18856
+ 124: 0
18742
18857
  };
18743
18858
  function guess_sep(str) {
18744
18859
  var cnt = {}, instr = false, end = 0, cc = 0;
@@ -18763,7 +18878,7 @@
18763
18878
  cc.sort(function(a, b) {
18764
18879
  return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]];
18765
18880
  });
18766
- return guess_seps[cc.pop()[1]];
18881
+ return guess_seps[cc.pop()[1]] || 44;
18767
18882
  }
18768
18883
  function dsv_to_sheet_str(str, opts) {
18769
18884
  var o = opts || {};
@@ -18779,11 +18894,14 @@
18779
18894
  } else if (str.charCodeAt(5) == 13 || str.charCodeAt(5) == 10) {
18780
18895
  sep = str.charAt(4);
18781
18896
  str = str.slice(6);
18782
- }
18783
- } else
18897
+ } else
18898
+ sep = guess_sep(str.slice(0, 1024));
18899
+ } else if (o && o.FS)
18900
+ sep = o.FS;
18901
+ else
18784
18902
  sep = guess_sep(str.slice(0, 1024));
18785
18903
  var R = 0, C = 0, v = 0;
18786
- var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc = 0;
18904
+ var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc = 0, startcc = str.charCodeAt(0);
18787
18905
  str = str.replace(/\r\n/mg, "\n");
18788
18906
  var _re = o.dateNF != null ? dateNF_regex(o.dateNF) : null;
18789
18907
  function finish_cell() {
@@ -18851,6 +18969,7 @@
18851
18969
  } else
18852
18970
  ws[encode_cell({ c: C, r: R })] = cell;
18853
18971
  start = end + 1;
18972
+ startcc = str.charCodeAt(start);
18854
18973
  if (range.e.c < C)
18855
18974
  range.e.c = C;
18856
18975
  if (range.e.r < R)
@@ -18868,7 +18987,8 @@
18868
18987
  for (; end < str.length; ++end)
18869
18988
  switch (cc = str.charCodeAt(end)) {
18870
18989
  case 34:
18871
- instr = !instr;
18990
+ if (startcc === 34)
18991
+ instr = !instr;
18872
18992
  break;
18873
18993
  case sepcc:
18874
18994
  case 10:
@@ -18887,6 +19007,8 @@
18887
19007
  function prn_to_sheet_str(str, opts) {
18888
19008
  if (!(opts && opts.PRN))
18889
19009
  return dsv_to_sheet_str(str, opts);
19010
+ if (opts.FS)
19011
+ return dsv_to_sheet_str(str, opts);
18890
19012
  if (str.slice(0, 4) == "sep=")
18891
19013
  return dsv_to_sheet_str(str, opts);
18892
19014
  if (str.indexOf(" ") >= 0 || str.indexOf(",") >= 0 || str.indexOf(";") >= 0)
@@ -18908,7 +19030,7 @@
18908
19030
  else if (opts.codepage && typeof cptable !== "undefined")
18909
19031
  str = cptable.utils.decode(opts.codepage, d);
18910
19032
  else
18911
- str = d.toString("binary");
19033
+ str = has_buf && Buffer.isBuffer(d) ? d.toString("binary") : a2s(d);
18912
19034
  break;
18913
19035
  case "array":
18914
19036
  str = cc2str(d);
@@ -18921,8 +19043,10 @@
18921
19043
  }
18922
19044
  if (bytes[0] == 239 && bytes[1] == 187 && bytes[2] == 191)
18923
19045
  str = utf8read(str.slice(3));
19046
+ else if (opts.type != "string" && opts.codepage == 65001)
19047
+ str = utf8read(str);
18924
19048
  else if (opts.type == "binary" && typeof cptable !== "undefined" && opts.codepage)
18925
- str = cptable.utils.decode(opts.codepage, cptable.utils.encode(1252, str));
19049
+ str = cptable.utils.decode(opts.codepage, cptable.utils.encode(28591, str));
18926
19050
  if (str.slice(0, 19) == "socialcalc:version:")
18927
19051
  return ETH.to_sheet(opts.type == "string" ? str : utf8read(str), opts);
18928
19052
  return prn_to_sheet_str(str, opts);
@@ -18980,12 +19104,12 @@
18980
19104
  var Enum = opts.Enum || WK1Enum;
18981
19105
  while (data.l < data.length) {
18982
19106
  var RT = data.read_shift(2);
18983
- var R = Enum[RT] || Enum[255];
19107
+ var R = Enum[RT] || Enum[65535];
18984
19108
  var length = data.read_shift(2);
18985
19109
  var tgt = data.l + length;
18986
- var d = (R.f || parsenoop)(data, length, opts);
19110
+ var d = R.f && R.f(data, length, opts);
18987
19111
  data.l = tgt;
18988
- if (cb(d, R.n, RT))
19112
+ if (cb(d, R, RT))
18989
19113
  return;
18990
19114
  }
18991
19115
  }
@@ -19007,22 +19131,19 @@
19007
19131
  var o = opts || {};
19008
19132
  if (DENSE != null && o.dense == null)
19009
19133
  o.dense = DENSE;
19010
- var s = o.dense ? [] : {}, n = "Sheet1", sidx = 0;
19011
- var sheets = {}, snames = [n];
19134
+ var s = o.dense ? [] : {}, n = "Sheet1", next_n = "", sidx = 0;
19135
+ var sheets = {}, snames = [], realnames = [];
19012
19136
  var refguess = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };
19013
19137
  var sheetRows = o.sheetRows || 0;
19014
- if (d[2] == 2)
19138
+ if (d[2] == 0) {
19139
+ if (d[3] == 8 || d[3] == 9) {
19140
+ if (d.length >= 16 && d[14] == 5 && d[15] === 108)
19141
+ throw new Error("Unsupported Works 3 for Mac file");
19142
+ }
19143
+ }
19144
+ if (d[2] == 2) {
19015
19145
  o.Enum = WK1Enum;
19016
- else if (d[2] == 26)
19017
- o.Enum = WK3Enum;
19018
- else if (d[2] == 14) {
19019
- o.Enum = WK3Enum;
19020
- o.qpro = true;
19021
- d.l = 0;
19022
- } else
19023
- throw new Error("Unrecognized LOTUS BOF " + d[2]);
19024
- lotushopper(d, function(val, Rn, RT) {
19025
- if (d[2] == 2)
19146
+ lotushopper(d, function(val, R, RT) {
19026
19147
  switch (RT) {
19027
19148
  case 0:
19028
19149
  o.vers = val;
@@ -19032,13 +19153,20 @@
19032
19153
  case 6:
19033
19154
  refguess = val;
19034
19155
  break;
19156
+ case 204:
19157
+ if (val)
19158
+ next_n = val;
19159
+ break;
19160
+ case 222:
19161
+ next_n = val;
19162
+ break;
19035
19163
  case 15:
19164
+ case 51:
19036
19165
  if (!o.qpro)
19037
19166
  val[1].v = val[1].v.slice(1);
19038
19167
  case 13:
19039
19168
  case 14:
19040
19169
  case 16:
19041
- case 51:
19042
19170
  if (RT == 14 && (val[2] & 112) == 112 && (val[2] & 15) > 1 && (val[2] & 15) < 15) {
19043
19171
  val[1].z = o.dateNF || SSF._table[14];
19044
19172
  if (o.cellDates) {
@@ -19046,6 +19174,28 @@
19046
19174
  val[1].v = numdate(val[1].v);
19047
19175
  }
19048
19176
  }
19177
+ if (o.qpro) {
19178
+ if (val[3] > sidx) {
19179
+ s["!ref"] = encode_range(refguess);
19180
+ sheets[n] = s;
19181
+ snames.push(n);
19182
+ s = o.dense ? [] : {};
19183
+ refguess = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };
19184
+ sidx = val[3];
19185
+ n = next_n || "Sheet" + (sidx + 1);
19186
+ next_n = "";
19187
+ }
19188
+ }
19189
+ var tmpcell = o.dense ? (s[val[0].r] || [])[val[0].c] : s[encode_cell(val[0])];
19190
+ if (tmpcell) {
19191
+ tmpcell.t = val[1].t;
19192
+ tmpcell.v = val[1].v;
19193
+ if (val[1].z != null)
19194
+ tmpcell.z = val[1].z;
19195
+ if (val[1].f != null)
19196
+ tmpcell.f = val[1].f;
19197
+ break;
19198
+ }
19049
19199
  if (o.dense) {
19050
19200
  if (!s[val[0].r])
19051
19201
  s[val[0].r] = [];
@@ -19053,9 +19203,20 @@
19053
19203
  } else
19054
19204
  s[encode_cell(val[0])] = val[1];
19055
19205
  break;
19206
+ default:
19056
19207
  }
19057
- else
19208
+ }, o);
19209
+ } else if (d[2] == 26 || d[2] == 14) {
19210
+ o.Enum = WK3Enum;
19211
+ if (d[2] == 14) {
19212
+ o.qpro = true;
19213
+ d.l = 0;
19214
+ }
19215
+ lotushopper(d, function(val, R, RT) {
19058
19216
  switch (RT) {
19217
+ case 204:
19218
+ n = val;
19219
+ break;
19059
19220
  case 22:
19060
19221
  val[1].v = val[1].v.slice(1);
19061
19222
  case 23:
@@ -19067,11 +19228,11 @@
19067
19228
  if (val[3] > sidx) {
19068
19229
  s["!ref"] = encode_range(refguess);
19069
19230
  sheets[n] = s;
19231
+ snames.push(n);
19070
19232
  s = o.dense ? [] : {};
19071
19233
  refguess = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };
19072
19234
  sidx = val[3];
19073
19235
  n = "Sheet" + (sidx + 1);
19074
- snames.push(n);
19075
19236
  }
19076
19237
  if (sheetRows > 0 && val[0].r >= sheetRows)
19077
19238
  break;
@@ -19086,29 +19247,187 @@
19086
19247
  if (refguess.e.r < val[0].r)
19087
19248
  refguess.e.r = val[0].r;
19088
19249
  break;
19250
+ case 27:
19251
+ if (val[14e3])
19252
+ realnames[val[14e3][0]] = val[14e3][1];
19253
+ break;
19254
+ case 1537:
19255
+ realnames[val[0]] = val[1];
19256
+ if (val[0] == sidx)
19257
+ n = val[1];
19258
+ break;
19089
19259
  default:
19090
19260
  break;
19091
19261
  }
19092
- }, o);
19262
+ }, o);
19263
+ } else
19264
+ throw new Error("Unrecognized LOTUS BOF " + d[2]);
19093
19265
  s["!ref"] = encode_range(refguess);
19094
- sheets[n] = s;
19095
- return { SheetNames: snames, Sheets: sheets };
19266
+ sheets[next_n || n] = s;
19267
+ snames.push(next_n || n);
19268
+ if (!realnames.length)
19269
+ return { SheetNames: snames, Sheets: sheets };
19270
+ var osheets = {}, rnames = [];
19271
+ for (var i2 = 0; i2 < realnames.length; ++i2)
19272
+ if (sheets[snames[i2]]) {
19273
+ rnames.push(realnames[i2] || snames[i2]);
19274
+ osheets[realnames[i2]] = sheets[realnames[i2]] || sheets[snames[i2]];
19275
+ } else {
19276
+ rnames.push(realnames[i2]);
19277
+ osheets[realnames[i2]] = { "!ref": "A1" };
19278
+ }
19279
+ return { SheetNames: rnames, Sheets: osheets };
19280
+ }
19281
+ function sheet_to_wk1(ws, opts) {
19282
+ var o = opts || {};
19283
+ if (+o.codepage >= 0)
19284
+ set_cp(+o.codepage);
19285
+ if (o.type == "string")
19286
+ throw new Error("Cannot write WK1 to JS string");
19287
+ var ba = buf_array();
19288
+ var range = safe_decode_range(ws["!ref"]);
19289
+ var dense = Array.isArray(ws);
19290
+ var cols = [];
19291
+ write_biff_rec(ba, 0, write_BOF_WK1(1030));
19292
+ write_biff_rec(ba, 6, write_RANGE(range));
19293
+ var max_R = Math.min(range.e.r, 8191);
19294
+ for (var R = range.s.r; R <= max_R; ++R) {
19295
+ var rr = encode_row(R);
19296
+ for (var C = range.s.c; C <= range.e.c; ++C) {
19297
+ if (R === range.s.r)
19298
+ cols[C] = encode_col(C);
19299
+ var ref = cols[C] + rr;
19300
+ var cell = dense ? (ws[R] || [])[C] : ws[ref];
19301
+ if (!cell || cell.t == "z")
19302
+ continue;
19303
+ if (cell.t == "n") {
19304
+ if ((cell.v | 0) == cell.v && cell.v >= -32768 && cell.v <= 32767)
19305
+ write_biff_rec(ba, 13, write_INTEGER(R, C, cell.v));
19306
+ else
19307
+ write_biff_rec(ba, 14, write_NUMBER(R, C, cell.v));
19308
+ } else {
19309
+ var str = format_cell(cell);
19310
+ write_biff_rec(ba, 15, write_LABEL(R, C, str.slice(0, 239)));
19311
+ }
19312
+ }
19313
+ }
19314
+ write_biff_rec(ba, 1);
19315
+ return ba.end();
19316
+ }
19317
+ function book_to_wk3(wb, opts) {
19318
+ var o = opts || {};
19319
+ if (+o.codepage >= 0)
19320
+ set_cp(+o.codepage);
19321
+ if (o.type == "string")
19322
+ throw new Error("Cannot write WK3 to JS string");
19323
+ var ba = buf_array();
19324
+ write_biff_rec(ba, 0, write_BOF_WK3(wb));
19325
+ for (var i2 = 0, cnt = 0; i2 < wb.SheetNames.length; ++i2)
19326
+ if ((wb.Sheets[wb.SheetNames[i2]] || {})["!ref"])
19327
+ write_biff_rec(ba, 27, write_XFORMAT_SHEETNAME(wb.SheetNames[i2], cnt++));
19328
+ var wsidx = 0;
19329
+ for (i2 = 0; i2 < wb.SheetNames.length; ++i2) {
19330
+ var ws = wb.Sheets[wb.SheetNames[i2]];
19331
+ if (!ws || !ws["!ref"])
19332
+ continue;
19333
+ var range = safe_decode_range(ws["!ref"]);
19334
+ var dense = Array.isArray(ws);
19335
+ var cols = [];
19336
+ var max_R = Math.min(range.e.r, 8191);
19337
+ for (var R = range.s.r; R <= max_R; ++R) {
19338
+ var rr = encode_row(R);
19339
+ for (var C = range.s.c; C <= range.e.c; ++C) {
19340
+ if (R === range.s.r)
19341
+ cols[C] = encode_col(C);
19342
+ var ref = cols[C] + rr;
19343
+ var cell = dense ? (ws[R] || [])[C] : ws[ref];
19344
+ if (!cell || cell.t == "z")
19345
+ continue;
19346
+ if (cell.t == "n") {
19347
+ write_biff_rec(ba, 23, write_NUMBER_17(R, C, wsidx, cell.v));
19348
+ } else {
19349
+ var str = format_cell(cell);
19350
+ write_biff_rec(ba, 22, write_LABEL_16(R, C, wsidx, str.slice(0, 239)));
19351
+ }
19352
+ }
19353
+ }
19354
+ ++wsidx;
19355
+ }
19356
+ write_biff_rec(ba, 1);
19357
+ return ba.end();
19358
+ }
19359
+ function write_BOF_WK1(v) {
19360
+ var out = new_buf(2);
19361
+ out.write_shift(2, v);
19362
+ return out;
19363
+ }
19364
+ function write_BOF_WK3(wb) {
19365
+ var out = new_buf(26);
19366
+ out.write_shift(2, 4096);
19367
+ out.write_shift(2, 4);
19368
+ out.write_shift(4, 0);
19369
+ var rows = 0, cols = 0, wscnt = 0;
19370
+ for (var i2 = 0; i2 < wb.SheetNames.length; ++i2) {
19371
+ var name = wb.SheetNames[i2];
19372
+ var ws = wb.Sheets[name];
19373
+ if (!ws || !ws["!ref"])
19374
+ continue;
19375
+ ++wscnt;
19376
+ var range = decode_range(ws["!ref"]);
19377
+ if (rows < range.e.r)
19378
+ rows = range.e.r;
19379
+ if (cols < range.e.c)
19380
+ cols = range.e.c;
19381
+ }
19382
+ if (rows > 8191)
19383
+ rows = 8191;
19384
+ out.write_shift(2, rows);
19385
+ out.write_shift(1, wscnt);
19386
+ out.write_shift(1, cols);
19387
+ out.write_shift(2, 0);
19388
+ out.write_shift(2, 0);
19389
+ out.write_shift(1, 1);
19390
+ out.write_shift(1, 2);
19391
+ out.write_shift(4, 0);
19392
+ out.write_shift(4, 0);
19393
+ return out;
19096
19394
  }
19097
- function parse_RANGE(blob) {
19395
+ function parse_RANGE(blob, length, opts) {
19098
19396
  var o = { s: { c: 0, r: 0 }, e: { c: 0, r: 0 } };
19397
+ if (length == 8 && opts.qpro) {
19398
+ o.s.c = blob.read_shift(1);
19399
+ blob.l++;
19400
+ o.s.r = blob.read_shift(2);
19401
+ o.e.c = blob.read_shift(1);
19402
+ blob.l++;
19403
+ o.e.r = blob.read_shift(2);
19404
+ return o;
19405
+ }
19099
19406
  o.s.c = blob.read_shift(2);
19100
19407
  o.s.r = blob.read_shift(2);
19408
+ if (length == 12 && opts.qpro)
19409
+ blob.l += 2;
19101
19410
  o.e.c = blob.read_shift(2);
19102
19411
  o.e.r = blob.read_shift(2);
19412
+ if (length == 12 && opts.qpro)
19413
+ blob.l += 2;
19103
19414
  if (o.s.c == 65535)
19104
19415
  o.s.c = o.e.c = o.s.r = o.e.r = 0;
19105
19416
  return o;
19106
19417
  }
19418
+ function write_RANGE(range) {
19419
+ var out = new_buf(8);
19420
+ out.write_shift(2, range.s.c);
19421
+ out.write_shift(2, range.s.r);
19422
+ out.write_shift(2, range.e.c);
19423
+ out.write_shift(2, range.e.r);
19424
+ return out;
19425
+ }
19107
19426
  function parse_cell(blob, length, opts) {
19108
- var o = [{ c: 0, r: 0 }, { t: "n", v: 0 }, 0];
19427
+ var o = [{ c: 0, r: 0 }, { t: "n", v: 0 }, 0, 0];
19109
19428
  if (opts.qpro && opts.vers != 20768) {
19110
19429
  o[0].c = blob.read_shift(1);
19111
- blob.l++;
19430
+ o[3] = blob.read_shift(1);
19112
19431
  o[0].r = blob.read_shift(2);
19113
19432
  blob.l += 2;
19114
19433
  } else {
@@ -19133,16 +19452,45 @@
19133
19452
  o[1].v = blob.read_shift(tgt - blob.l, "cstr");
19134
19453
  return o;
19135
19454
  }
19455
+ function write_LABEL(R, C, s) {
19456
+ var o = new_buf(7 + s.length);
19457
+ o.write_shift(1, 255);
19458
+ o.write_shift(2, C);
19459
+ o.write_shift(2, R);
19460
+ o.write_shift(1, 39);
19461
+ for (var i2 = 0; i2 < o.length; ++i2) {
19462
+ var cc = s.charCodeAt(i2);
19463
+ o.write_shift(1, cc >= 128 ? 95 : cc);
19464
+ }
19465
+ o.write_shift(1, 0);
19466
+ return o;
19467
+ }
19136
19468
  function parse_INTEGER(blob, length, opts) {
19137
19469
  var o = parse_cell(blob, length, opts);
19138
19470
  o[1].v = blob.read_shift(2, "i");
19139
19471
  return o;
19140
19472
  }
19473
+ function write_INTEGER(R, C, v) {
19474
+ var o = new_buf(7);
19475
+ o.write_shift(1, 255);
19476
+ o.write_shift(2, C);
19477
+ o.write_shift(2, R);
19478
+ o.write_shift(2, v, "i");
19479
+ return o;
19480
+ }
19141
19481
  function parse_NUMBER(blob, length, opts) {
19142
19482
  var o = parse_cell(blob, length, opts);
19143
19483
  o[1].v = blob.read_shift(8, "f");
19144
19484
  return o;
19145
19485
  }
19486
+ function write_NUMBER(R, C, v) {
19487
+ var o = new_buf(13);
19488
+ o.write_shift(1, 255);
19489
+ o.write_shift(2, C);
19490
+ o.write_shift(2, R);
19491
+ o.write_shift(8, v, "f");
19492
+ return o;
19493
+ }
19146
19494
  function parse_FORMULA(blob, length, opts) {
19147
19495
  var tgt = blob.l + length;
19148
19496
  var o = parse_cell(blob, length, opts);
@@ -19151,10 +19499,192 @@
19151
19499
  blob.l = tgt;
19152
19500
  else {
19153
19501
  var flen = blob.read_shift(2);
19502
+ wk1_fmla_to_csf(blob.slice(blob.l, blob.l + flen), o);
19154
19503
  blob.l += flen;
19155
19504
  }
19156
19505
  return o;
19157
19506
  }
19507
+ function wk1_parse_rc(B, V, col) {
19508
+ var rel = V & 32768;
19509
+ V &= ~32768;
19510
+ V = (rel ? B : 0) + (V >= 8192 ? V - 16384 : V);
19511
+ return (rel ? "" : "$") + (col ? encode_col(V) : encode_row(V));
19512
+ }
19513
+ var oprec = [
19514
+ 8,
19515
+ 8,
19516
+ 8,
19517
+ 8,
19518
+ 8,
19519
+ 8,
19520
+ 8,
19521
+ 8,
19522
+ 6,
19523
+ 4,
19524
+ 4,
19525
+ 5,
19526
+ 5,
19527
+ 7,
19528
+ 3,
19529
+ 3,
19530
+ 3,
19531
+ 3,
19532
+ 3,
19533
+ 3,
19534
+ 1,
19535
+ 1,
19536
+ 2,
19537
+ 6,
19538
+ 8,
19539
+ 8,
19540
+ 8,
19541
+ 8,
19542
+ 8,
19543
+ 8,
19544
+ 8,
19545
+ 8
19546
+ ];
19547
+ var FuncTab = {
19548
+ 51: ["FALSE", 0],
19549
+ 52: ["TRUE", 0],
19550
+ 70: ["LEN", 1],
19551
+ 80: ["SUM", 69],
19552
+ 81: ["AVERAGEA", 69],
19553
+ 82: ["COUNTA", 69],
19554
+ 83: ["MINA", 69],
19555
+ 84: ["MAXA", 69],
19556
+ 111: ["T", 1]
19557
+ };
19558
+ var BinOpTab = [
19559
+ "",
19560
+ "",
19561
+ "",
19562
+ "",
19563
+ "",
19564
+ "",
19565
+ "",
19566
+ "",
19567
+ "",
19568
+ "+",
19569
+ "-",
19570
+ "*",
19571
+ "/",
19572
+ "^",
19573
+ "=",
19574
+ "<>",
19575
+ "<=",
19576
+ ">=",
19577
+ "<",
19578
+ ">",
19579
+ "",
19580
+ "",
19581
+ "",
19582
+ "",
19583
+ "&",
19584
+ "",
19585
+ "",
19586
+ "",
19587
+ "",
19588
+ "",
19589
+ "",
19590
+ ""
19591
+ ];
19592
+ function wk1_fmla_to_csf(blob, o) {
19593
+ prep_blob(blob, 0);
19594
+ var out = [], argc = 0, R = "", C = "", argL = "", argR = "";
19595
+ while (blob.l < blob.length) {
19596
+ var cc = blob[blob.l++];
19597
+ switch (cc) {
19598
+ case 0:
19599
+ out.push(blob.read_shift(8, "f"));
19600
+ break;
19601
+ case 1:
19602
+ {
19603
+ C = wk1_parse_rc(o[0].c, blob.read_shift(2), true);
19604
+ R = wk1_parse_rc(o[0].r, blob.read_shift(2), false);
19605
+ out.push(C + R);
19606
+ }
19607
+ break;
19608
+ case 2:
19609
+ {
19610
+ var c = wk1_parse_rc(o[0].c, blob.read_shift(2), true);
19611
+ var r = wk1_parse_rc(o[0].r, blob.read_shift(2), false);
19612
+ C = wk1_parse_rc(o[0].c, blob.read_shift(2), true);
19613
+ R = wk1_parse_rc(o[0].r, blob.read_shift(2), false);
19614
+ out.push(c + r + ":" + C + R);
19615
+ }
19616
+ break;
19617
+ case 3:
19618
+ if (blob.l < blob.length) {
19619
+ console.error("WK1 premature formula end");
19620
+ return;
19621
+ }
19622
+ break;
19623
+ case 4:
19624
+ out.push("(" + out.pop() + ")");
19625
+ break;
19626
+ case 5:
19627
+ out.push(blob.read_shift(2));
19628
+ break;
19629
+ case 6:
19630
+ {
19631
+ var Z = "";
19632
+ while (cc = blob[blob.l++])
19633
+ Z += String.fromCharCode(cc);
19634
+ out.push('"' + Z.replace(/"/g, '""') + '"');
19635
+ break;
19636
+ }
19637
+ break;
19638
+ case 8:
19639
+ out.push("-" + out.pop());
19640
+ break;
19641
+ case 23:
19642
+ out.push("+" + out.pop());
19643
+ break;
19644
+ case 22:
19645
+ out.push("NOT(" + out.pop() + ")");
19646
+ break;
19647
+ case 20:
19648
+ case 21:
19649
+ {
19650
+ argR = out.pop();
19651
+ argL = out.pop();
19652
+ out.push(["AND", "OR"][cc - 20] + "(" + argL + "," + argR + ")");
19653
+ }
19654
+ break;
19655
+ default:
19656
+ if (cc < 32 && BinOpTab[cc]) {
19657
+ argR = out.pop();
19658
+ argL = out.pop();
19659
+ out.push(argL + BinOpTab[cc] + argR);
19660
+ } else if (FuncTab[cc]) {
19661
+ argc = FuncTab[cc][1];
19662
+ if (argc == 69)
19663
+ argc = blob[blob.l++];
19664
+ if (argc > out.length) {
19665
+ console.error("WK1 bad formula parse 0x" + cc.toString(16) + ":|" + out.join("|") + "|");
19666
+ return;
19667
+ }
19668
+ var args = out.slice(-argc);
19669
+ out.length -= argc;
19670
+ out.push(FuncTab[cc][0] + "(" + args.join(",") + ")");
19671
+ } else if (cc <= 7)
19672
+ return console.error("WK1 invalid opcode " + cc.toString(16));
19673
+ else if (cc <= 24)
19674
+ return console.error("WK1 unsupported op " + cc.toString(16));
19675
+ else if (cc <= 30)
19676
+ return console.error("WK1 invalid opcode " + cc.toString(16));
19677
+ else if (cc <= 115)
19678
+ return console.error("WK1 unsupported function opcode " + cc.toString(16));
19679
+ else
19680
+ return console.error("WK1 unrecognized opcode " + cc.toString(16));
19681
+ }
19682
+ }
19683
+ if (out.length == 1)
19684
+ o[1].f = "" + out[0];
19685
+ else
19686
+ console.error("WK1 bad formula parse |" + out.join("|") + "|");
19687
+ }
19158
19688
  function parse_cell_3(blob) {
19159
19689
  var o = [{ c: 0, r: 0 }, { t: "n", v: 0 }, 0];
19160
19690
  o[0].r = blob.read_shift(2);
@@ -19168,29 +19698,49 @@
19168
19698
  o[1].v = blob.read_shift(length - 4, "cstr");
19169
19699
  return o;
19170
19700
  }
19701
+ function write_LABEL_16(R, C, wsidx, s) {
19702
+ var o = new_buf(6 + s.length);
19703
+ o.write_shift(2, R);
19704
+ o.write_shift(1, wsidx);
19705
+ o.write_shift(1, C);
19706
+ o.write_shift(1, 39);
19707
+ for (var i2 = 0; i2 < s.length; ++i2) {
19708
+ var cc = s.charCodeAt(i2);
19709
+ o.write_shift(1, cc >= 128 ? 95 : cc);
19710
+ }
19711
+ o.write_shift(1, 0);
19712
+ return o;
19713
+ }
19171
19714
  function parse_NUMBER_18(blob, length) {
19172
19715
  var o = parse_cell_3(blob, length);
19173
19716
  o[1].v = blob.read_shift(2);
19174
19717
  var v = o[1].v >> 1;
19175
19718
  if (o[1].v & 1) {
19176
19719
  switch (v & 7) {
19720
+ case 0:
19721
+ v = (v >> 3) * 5e3;
19722
+ break;
19177
19723
  case 1:
19178
19724
  v = (v >> 3) * 500;
19179
19725
  break;
19180
19726
  case 2:
19181
19727
  v = (v >> 3) / 20;
19182
19728
  break;
19729
+ case 3:
19730
+ v = (v >> 3) / 200;
19731
+ break;
19183
19732
  case 4:
19184
19733
  v = (v >> 3) / 2e3;
19185
19734
  break;
19735
+ case 5:
19736
+ v = (v >> 3) / 2e4;
19737
+ break;
19186
19738
  case 6:
19187
19739
  v = (v >> 3) / 16;
19188
19740
  break;
19189
19741
  case 7:
19190
19742
  v = (v >> 3) / 64;
19191
19743
  break;
19192
- default:
19193
- throw "unknown NUMBER_18 encoding " + (v & 7);
19194
19744
  }
19195
19745
  }
19196
19746
  o[1].v = v;
@@ -19202,12 +19752,54 @@
19202
19752
  var v2 = blob.read_shift(4);
19203
19753
  var e = blob.read_shift(2);
19204
19754
  if (e == 65535) {
19205
- o[1].v = 0;
19755
+ if (v1 === 0 && v2 === 3221225472) {
19756
+ o[1].t = "e";
19757
+ o[1].v = 15;
19758
+ } else if (v1 === 0 && v2 === 3489660928) {
19759
+ o[1].t = "e";
19760
+ o[1].v = 42;
19761
+ } else
19762
+ o[1].v = 0;
19206
19763
  return o;
19207
19764
  }
19208
19765
  var s = e & 32768;
19209
19766
  e = (e & 32767) - 16446;
19210
- o[1].v = (s * 2 - 1) * ((e > 0 ? v2 << e : v2 >>> -e) + (e > -32 ? v1 << e + 32 : v1 >>> -(e + 32)));
19767
+ o[1].v = (1 - s * 2) * (v2 * Math.pow(2, e + 32) + v1 * Math.pow(2, e));
19768
+ return o;
19769
+ }
19770
+ function write_NUMBER_17(R, C, wsidx, v) {
19771
+ var o = new_buf(14);
19772
+ o.write_shift(2, R);
19773
+ o.write_shift(1, wsidx);
19774
+ o.write_shift(1, C);
19775
+ if (v == 0) {
19776
+ o.write_shift(4, 0);
19777
+ o.write_shift(4, 0);
19778
+ o.write_shift(2, 65535);
19779
+ return o;
19780
+ }
19781
+ var s = 0, e = 0, v1 = 0, v2 = 0;
19782
+ if (v < 0) {
19783
+ s = 1;
19784
+ v = -v;
19785
+ }
19786
+ e = Math.log2(v) | 0;
19787
+ v /= Math.pow(2, e - 31);
19788
+ v2 = v >>> 0;
19789
+ if ((v2 & 2147483648) == 0) {
19790
+ v /= 2;
19791
+ ++e;
19792
+ v2 = v >>> 0;
19793
+ }
19794
+ v -= v2;
19795
+ v2 |= 2147483648;
19796
+ v2 >>>= 0;
19797
+ v *= Math.pow(2, 32);
19798
+ v1 = v >>> 0;
19799
+ o.write_shift(4, v1);
19800
+ o.write_shift(4, v2);
19801
+ e += 16383 + (s ? 32768 : 0);
19802
+ o.write_shift(2, e);
19211
19803
  return o;
19212
19804
  }
19213
19805
  function parse_FORMULA_19(blob, length) {
@@ -19232,6 +19824,55 @@
19232
19824
  blob.l += length - 10;
19233
19825
  return o;
19234
19826
  }
19827
+ function parse_SHEETNAMECS(blob, length) {
19828
+ return blob[blob.l + length - 1] == 0 ? blob.read_shift(length, "cstr") : "";
19829
+ }
19830
+ function parse_SHEETNAMELP(blob, length) {
19831
+ var len = blob[blob.l++];
19832
+ if (len > length - 1)
19833
+ len = length - 1;
19834
+ var o = "";
19835
+ while (o.length < len)
19836
+ o += String.fromCharCode(blob[blob.l++]);
19837
+ return o;
19838
+ }
19839
+ function parse_SHEETINFOQP(blob, length, opts) {
19840
+ if (!opts.qpro || length < 21)
19841
+ return;
19842
+ var id = blob.read_shift(1);
19843
+ blob.l += 17;
19844
+ var len = blob.read_shift(1);
19845
+ blob.l += 2;
19846
+ var nm = blob.read_shift(length - 21, "cstr");
19847
+ return [id, nm];
19848
+ }
19849
+ function parse_XFORMAT(blob, length) {
19850
+ var o = {}, tgt = blob.l + length;
19851
+ while (blob.l < tgt) {
19852
+ var dt = blob.read_shift(2);
19853
+ if (dt == 14e3) {
19854
+ o[dt] = [0, ""];
19855
+ o[dt][0] = blob.read_shift(2);
19856
+ while (blob[blob.l]) {
19857
+ o[dt][1] += String.fromCharCode(blob[blob.l]);
19858
+ blob.l++;
19859
+ }
19860
+ blob.l++;
19861
+ }
19862
+ }
19863
+ return o;
19864
+ }
19865
+ function write_XFORMAT_SHEETNAME(name, wsidx) {
19866
+ var out = new_buf(5 + name.length);
19867
+ out.write_shift(2, 14e3);
19868
+ out.write_shift(2, wsidx);
19869
+ for (var i2 = 0; i2 < name.length; ++i2) {
19870
+ var cc = name.charCodeAt(i2);
19871
+ out[out.l++] = cc > 127 ? 95 : cc;
19872
+ }
19873
+ out[out.l++] = 0;
19874
+ return out;
19875
+ }
19235
19876
  var WK1Enum = {
19236
19877
  0: { n: "BOF", f: parseuint16 },
19237
19878
  1: { n: "EOF" },
@@ -19290,44 +19931,142 @@
19290
19931
  72: { n: "ACOMM" },
19291
19932
  73: { n: "AMACRO" },
19292
19933
  74: { n: "PARSE" },
19293
- 255: { n: "", f: parsenoop }
19934
+ 102: { n: "PRANGES??" },
19935
+ 103: { n: "RRANGES??" },
19936
+ 104: { n: "FNAME??" },
19937
+ 105: { n: "MRANGES??" },
19938
+ 204: { n: "SHEETNAMECS", f: parse_SHEETNAMECS },
19939
+ 222: { n: "SHEETNAMELP", f: parse_SHEETNAMELP },
19940
+ 65535: { n: "" }
19294
19941
  };
19295
19942
  var WK3Enum = {
19296
19943
  0: { n: "BOF" },
19297
19944
  1: { n: "EOF" },
19298
- 3: { n: "??" },
19299
- 4: { n: "??" },
19300
- 5: { n: "??" },
19301
- 6: { n: "??" },
19302
- 7: { n: "??" },
19303
- 9: { n: "??" },
19304
- 10: { n: "??" },
19305
- 11: { n: "??" },
19306
- 12: { n: "??" },
19307
- 14: { n: "??" },
19308
- 15: { n: "??" },
19309
- 16: { n: "??" },
19310
- 17: { n: "??" },
19311
- 18: { n: "??" },
19945
+ 2: { n: "PASSWORD" },
19946
+ 3: { n: "CALCSET" },
19947
+ 4: { n: "WINDOWSET" },
19948
+ 5: { n: "SHEETCELLPTR" },
19949
+ 6: { n: "SHEETLAYOUT" },
19950
+ 7: { n: "COLUMNWIDTH" },
19951
+ 8: { n: "HIDDENCOLUMN" },
19952
+ 9: { n: "USERRANGE" },
19953
+ 10: { n: "SYSTEMRANGE" },
19954
+ 11: { n: "ZEROFORCE" },
19955
+ 12: { n: "SORTKEYDIR" },
19956
+ 13: { n: "FILESEAL" },
19957
+ 14: { n: "DATAFILLNUMS" },
19958
+ 15: { n: "PRINTMAIN" },
19959
+ 16: { n: "PRINTSTRING" },
19960
+ 17: { n: "GRAPHMAIN" },
19961
+ 18: { n: "GRAPHSTRING" },
19312
19962
  19: { n: "??" },
19313
- 21: { n: "??" },
19963
+ 20: { n: "ERRCELL" },
19964
+ 21: { n: "NACELL" },
19314
19965
  22: { n: "LABEL16", f: parse_LABEL_16 },
19315
19966
  23: { n: "NUMBER17", f: parse_NUMBER_17 },
19316
19967
  24: { n: "NUMBER18", f: parse_NUMBER_18 },
19317
19968
  25: { n: "FORMULA19", f: parse_FORMULA_19 },
19318
- 26: { n: "??" },
19319
- 27: { n: "??" },
19320
- 28: { n: "??" },
19321
- 29: { n: "??" },
19322
- 30: { n: "??" },
19323
- 31: { n: "??" },
19324
- 33: { n: "??" },
19969
+ 26: { n: "FORMULA1A" },
19970
+ 27: { n: "XFORMAT", f: parse_XFORMAT },
19971
+ 28: { n: "DTLABELMISC" },
19972
+ 29: { n: "DTLABELCELL" },
19973
+ 30: { n: "GRAPHWINDOW" },
19974
+ 31: { n: "CPA" },
19975
+ 32: { n: "LPLAUTO" },
19976
+ 33: { n: "QUERY" },
19977
+ 34: { n: "HIDDENSHEET" },
19978
+ 35: { n: "??" },
19325
19979
  37: { n: "NUMBER25", f: parse_NUMBER_25 },
19980
+ 38: { n: "??" },
19326
19981
  39: { n: "NUMBER27", f: parse_NUMBER_27 },
19327
19982
  40: { n: "FORMULA28", f: parse_FORMULA_28 },
19328
- 255: { n: "", f: parsenoop }
19983
+ 142: { n: "??" },
19984
+ 147: { n: "??" },
19985
+ 150: { n: "??" },
19986
+ 151: { n: "??" },
19987
+ 152: { n: "??" },
19988
+ 153: { n: "??" },
19989
+ 154: { n: "??" },
19990
+ 155: { n: "??" },
19991
+ 156: { n: "??" },
19992
+ 163: { n: "??" },
19993
+ 174: { n: "??" },
19994
+ 175: { n: "??" },
19995
+ 176: { n: "??" },
19996
+ 177: { n: "??" },
19997
+ 184: { n: "??" },
19998
+ 185: { n: "??" },
19999
+ 186: { n: "??" },
20000
+ 187: { n: "??" },
20001
+ 188: { n: "??" },
20002
+ 195: { n: "??" },
20003
+ 201: { n: "??" },
20004
+ 204: { n: "SHEETNAMECS", f: parse_SHEETNAMECS },
20005
+ 205: { n: "??" },
20006
+ 206: { n: "??" },
20007
+ 207: { n: "??" },
20008
+ 208: { n: "??" },
20009
+ 256: { n: "??" },
20010
+ 259: { n: "??" },
20011
+ 260: { n: "??" },
20012
+ 261: { n: "??" },
20013
+ 262: { n: "??" },
20014
+ 263: { n: "??" },
20015
+ 265: { n: "??" },
20016
+ 266: { n: "??" },
20017
+ 267: { n: "??" },
20018
+ 268: { n: "??" },
20019
+ 270: { n: "??" },
20020
+ 271: { n: "??" },
20021
+ 384: { n: "??" },
20022
+ 389: { n: "??" },
20023
+ 390: { n: "??" },
20024
+ 393: { n: "??" },
20025
+ 396: { n: "??" },
20026
+ 512: { n: "??" },
20027
+ 514: { n: "??" },
20028
+ 513: { n: "??" },
20029
+ 516: { n: "??" },
20030
+ 517: { n: "??" },
20031
+ 640: { n: "??" },
20032
+ 641: { n: "??" },
20033
+ 642: { n: "??" },
20034
+ 643: { n: "??" },
20035
+ 644: { n: "??" },
20036
+ 645: { n: "??" },
20037
+ 646: { n: "??" },
20038
+ 647: { n: "??" },
20039
+ 648: { n: "??" },
20040
+ 658: { n: "??" },
20041
+ 659: { n: "??" },
20042
+ 660: { n: "??" },
20043
+ 661: { n: "??" },
20044
+ 662: { n: "??" },
20045
+ 665: { n: "??" },
20046
+ 666: { n: "??" },
20047
+ 768: { n: "??" },
20048
+ 772: { n: "??" },
20049
+ 1537: { n: "SHEETINFOQP", f: parse_SHEETINFOQP },
20050
+ 1600: { n: "??" },
20051
+ 1602: { n: "??" },
20052
+ 1793: { n: "??" },
20053
+ 1794: { n: "??" },
20054
+ 1795: { n: "??" },
20055
+ 1796: { n: "??" },
20056
+ 1920: { n: "??" },
20057
+ 2048: { n: "??" },
20058
+ 2049: { n: "??" },
20059
+ 2052: { n: "??" },
20060
+ 2688: { n: "??" },
20061
+ 10998: { n: "??" },
20062
+ 12849: { n: "??" },
20063
+ 28233: { n: "??" },
20064
+ 28484: { n: "??" },
20065
+ 65535: { n: "" }
19329
20066
  };
19330
20067
  return {
20068
+ sheet_to_wk1,
20069
+ book_to_wk3,
19331
20070
  to_workbook: lotus_to_workbook
19332
20071
  };
19333
20072
  }();
@@ -19992,7 +20731,7 @@
19992
20731
  case "binary":
19993
20732
  return rtf_to_sheet_str(d, opts);
19994
20733
  case "buffer":
19995
- return rtf_to_sheet_str(d.toString("binary"), opts);
20734
+ return rtf_to_sheet_str(has_buf && Buffer.isBuffer(d) ? d.toString("binary") : a2s(d), opts);
19996
20735
  case "array":
19997
20736
  return rtf_to_sheet_str(cc2str(d), opts);
19998
20737
  }
@@ -20001,9 +20740,38 @@
20001
20740
  function rtf_to_sheet_str(str, opts) {
20002
20741
  var o = opts || {};
20003
20742
  var ws = o.dense ? [] : {};
20004
- var range = { s: { c: 0, r: 0 }, e: { c: 0, r: 0 } };
20005
- if (!str.match(/\\trowd/))
20743
+ var rows = str.match(/\\trowd.*?\\row\b/g);
20744
+ if (!rows.length)
20006
20745
  throw new Error("RTF missing table");
20746
+ var range = { s: { c: 0, r: 0 }, e: { c: 0, r: rows.length - 1 } };
20747
+ rows.forEach(function(rowtf, R) {
20748
+ if (Array.isArray(ws))
20749
+ ws[R] = [];
20750
+ var rtfre = /\\\w+\b/g;
20751
+ var last_index = 0;
20752
+ var res;
20753
+ var C = -1;
20754
+ while (res = rtfre.exec(rowtf)) {
20755
+ switch (res[0]) {
20756
+ case "\\cell":
20757
+ var data = rowtf.slice(last_index, rtfre.lastIndex - res[0].length);
20758
+ if (data[0] == " ")
20759
+ data = data.slice(1);
20760
+ ++C;
20761
+ if (data.length) {
20762
+ var cell = { v: data, t: "s" };
20763
+ if (Array.isArray(ws))
20764
+ ws[R][C] = cell;
20765
+ else
20766
+ ws[encode_cell({ r: R, c: C })] = cell;
20767
+ }
20768
+ break;
20769
+ }
20770
+ last_index = rtfre.lastIndex;
20771
+ }
20772
+ if (C > range.e.c)
20773
+ range.e.c = C;
20774
+ });
20007
20775
  ws["!ref"] = encode_range(range);
20008
20776
  return ws;
20009
20777
  }
@@ -20515,7 +21283,7 @@
20515
21283
  if (font.color.index == 81)
20516
21284
  icv = XLSIcv[1];
20517
21285
  if (!icv)
20518
- throw new Error(x);
21286
+ icv = XLSIcv[1];
20519
21287
  font.color.rgb = icv[0].toString(16) + icv[1].toString(16) + icv[2].toString(16);
20520
21288
  } else if (y.theme) {
20521
21289
  font.color.theme = parseInt(y.theme, 10);
@@ -20629,7 +21397,7 @@
20629
21397
  for (i2 = 0; i2 < cellXF_bool.length; ++i2)
20630
21398
  if (xf[cellXF_bool[i2]])
20631
21399
  xf[cellXF_bool[i2]] = parsexmlbool(xf[cellXF_bool[i2]]);
20632
- if (xf.numFmtId > 392) {
21400
+ if (styles.NumberFmt && xf.numFmtId > 392) {
20633
21401
  for (i2 = 392; i2 > 60; --i2)
20634
21402
  if (styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i2]) {
20635
21403
  xf.numFmtId = i2;
@@ -21392,7 +22160,7 @@
21392
22160
  var dwThemeVersion = blob.read_shift(4);
21393
22161
  if (dwThemeVersion === 124226)
21394
22162
  return;
21395
- if (!opts.cellStyles || !jszip) {
22163
+ if (!opts.cellStyles) {
21396
22164
  blob.l = end;
21397
22165
  return;
21398
22166
  }
@@ -21400,7 +22168,7 @@
21400
22168
  blob.l = end;
21401
22169
  var zip;
21402
22170
  try {
21403
- zip = new jszip(data);
22171
+ zip = zip_read(data, { type: "array" });
21404
22172
  } catch (e) {
21405
22173
  return;
21406
22174
  }
@@ -21741,7 +22509,7 @@
21741
22509
  comment.r = rt.r;
21742
22510
  if (rt.r == "<t></t>")
21743
22511
  rt.t = rt.h = "";
21744
- comment.t = rt.t.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
22512
+ comment.t = (rt.t || "").replace(/\r\n/g, "\n").replace(/\r/g, "\n");
21745
22513
  if (opts.cellHTML)
21746
22514
  comment.h = rt.h;
21747
22515
  commentList.push(comment);
@@ -22718,7 +23486,8 @@
22718
23486
  }
22719
23487
  }
22720
23488
  function get_ixti(supbooks, ixti, opts) {
22721
- return formula_quote_sheet_name(get_ixti_raw(supbooks, ixti, opts), opts);
23489
+ var ixtiraw = get_ixti_raw(supbooks, ixti, opts);
23490
+ return ixtiraw == "#REF" ? ixtiraw : formula_quote_sheet_name(ixtiraw, opts);
22722
23491
  }
22723
23492
  function stringify_formula(formula, range, cell, supbooks, opts) {
22724
23493
  var biff = opts && opts.biff || 8;
@@ -22887,7 +23656,7 @@
22887
23656
  else if (supbooks[0] && supbooks[0][nameidx])
22888
23657
  o += supbooks[0][nameidx].Name;
22889
23658
  else {
22890
- var ixtidata = get_ixti_raw(supbooks, bookidx, opts).split(";;");
23659
+ var ixtidata = (get_ixti_raw(supbooks, bookidx, opts) || "").split(";;");
22891
23660
  if (ixtidata[nameidx - 1])
22892
23661
  o = ixtidata[nameidx - 1];
22893
23662
  else
@@ -24500,6 +25269,9 @@
24500
25269
  p.width = col.width;
24501
25270
  if (col.hidden)
24502
25271
  p.hidden = true;
25272
+ if (col.level != null) {
25273
+ p.outlineLevel = p.level = col.level;
25274
+ }
24503
25275
  return p;
24504
25276
  }
24505
25277
  function default_margins(margins, mode) {
@@ -24554,11 +25326,11 @@
24554
25326
  if (opts.WTF)
24555
25327
  throw e;
24556
25328
  }
24557
- if (p.t === "z")
25329
+ if (p.t === "z" && !opts.cellStyles)
24558
25330
  return;
24559
25331
  if (p.t === "d" && typeof p.v === "string")
24560
25332
  p.v = parseDate(p.v);
24561
- if (!opts || opts.cellText !== false)
25333
+ if ((!opts || opts.cellText !== false) && p.t !== "z")
24562
25334
  try {
24563
25335
  if (SSF._table[fmtid] == null)
24564
25336
  SSF.load(SSFImplicit[fmtid] || "General", fmtid);
@@ -24628,6 +25400,7 @@
24628
25400
  var afregex = /<(?:\w:)?autoFilter[^>]*([\/]|>([\s\S]*)<\/(?:\w:)?autoFilter)>/g;
24629
25401
  var marginregex = /<(?:\w:)?pageMargins[^>]*\/>/g;
24630
25402
  var sheetprregex = /<(?:\w:)?sheetPr\b(?:[^>a-z][^>]*)?\/>/;
25403
+ var sheetprregex2 = /<(?:\w:)?sheetPr[^>]*(?:[\/]|>([\s\S]*)<\/(?:\w:)?sheetPr)>/;
24631
25404
  var svsregex = /<(?:\w:)?sheetViews[^>]*(?:[\/]|>([\s\S]*)<\/(?:\w:)?sheetViews)>/;
24632
25405
  function parse_ws_xml(data, opts, idx, rels, wb, themes, styles) {
24633
25406
  if (!data)
@@ -24648,6 +25421,8 @@
24648
25421
  var sheetPr = data1.match(sheetprregex);
24649
25422
  if (sheetPr)
24650
25423
  parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);
25424
+ else if (sheetPr = data1.match(sheetprregex2))
25425
+ parse_ws_xml_sheetpr2(sheetPr[0], sheetPr[1] || "", s, wb, idx, styles, themes);
24651
25426
  var ridx = (data1.match(/<(?:\w*:)?dimension/) || { index: -1 }).index;
24652
25427
  if (ridx > 0) {
24653
25428
  var ref = data1.slice(ridx, ridx + 50).match(dimregex);
@@ -24718,6 +25493,9 @@
24718
25493
  if (data.codeName)
24719
25494
  wb.Sheets[idx].CodeName = unescapexml(utf8read(data.codeName));
24720
25495
  }
25496
+ function parse_ws_xml_sheetpr2(sheetPr, body, s, wb, idx, styles, themes) {
25497
+ parse_ws_xml_sheetpr(sheetPr.slice(0, sheetPr.indexOf(">")), s, wb, idx);
25498
+ }
24721
25499
  function write_ws_xml_sheetpr(ws, wb, idx, opts, o) {
24722
25500
  var needed = false;
24723
25501
  var props = {}, payload = null;
@@ -24781,9 +25559,9 @@
24781
25559
  if (rel) {
24782
25560
  val.Target = rel.Target;
24783
25561
  if (val.location)
24784
- val.Target += "#" + val.location;
25562
+ val.Target += "#" + unescapexml(val.location);
24785
25563
  } else {
24786
- val.Target = "#" + val.location;
25564
+ val.Target = "#" + unescapexml(val.location);
24787
25565
  rel = { Target: val.Target, TargetMode: "Internal" };
24788
25566
  }
24789
25567
  val.Rel = rel;
@@ -24828,6 +25606,8 @@
24828
25606
  if (coll.hidden)
24829
25607
  coll.hidden = parsexmlbool(coll.hidden);
24830
25608
  var colm = parseInt(coll.min, 10) - 1, colM = parseInt(coll.max, 10) - 1;
25609
+ if (coll.outlineLevel)
25610
+ coll.level = +coll.outlineLevel || 0;
24831
25611
  delete coll.min;
24832
25612
  delete coll.max;
24833
25613
  coll.width = +coll.width;
@@ -24953,6 +25733,8 @@
24953
25733
  delete cell.t;
24954
25734
  break;
24955
25735
  }
25736
+ if (cell.v.length > 32767)
25737
+ throw new Error("Text length must not exceed 32767 characters");
24956
25738
  if (opts && opts.bookSST) {
24957
25739
  v = writetag("v", "" + get_sst_id(opts.Strings, cell.v, opts.revStrings));
24958
25740
  o.t = "s";
@@ -24996,11 +25778,47 @@
24996
25778
  var xlen = x.length;
24997
25779
  if (xlen === 0)
24998
25780
  continue;
24999
- for (ri = 0; ri < xlen; ++ri)
25000
- if (x.charCodeAt(ri) === 62)
25001
- break;
25002
- ++ri;
25003
- tag = parsexmltag(x.slice(0, ri), true);
25781
+ var rstarti = 0;
25782
+ outa:
25783
+ for (ri = 0; ri < xlen; ++ri)
25784
+ switch (x[ri]) {
25785
+ case ">":
25786
+ if (x[ri - 1] != "/") {
25787
+ ++ri;
25788
+ break outa;
25789
+ }
25790
+ if (opts && opts.cellStyles) {
25791
+ tag = parsexmltag(x.slice(rstarti, ri), true);
25792
+ tagr = tag.r != null ? parseInt(tag.r, 10) : tagr + 1;
25793
+ tagc = -1;
25794
+ if (opts.sheetRows && opts.sheetRows < tagr)
25795
+ continue;
25796
+ rowobj = {};
25797
+ rowrite = false;
25798
+ if (tag.ht) {
25799
+ rowrite = true;
25800
+ rowobj.hpt = parseFloat(tag.ht);
25801
+ rowobj.hpx = pt2px(rowobj.hpt);
25802
+ }
25803
+ if (tag.hidden == "1") {
25804
+ rowrite = true;
25805
+ rowobj.hidden = true;
25806
+ }
25807
+ if (tag.outlineLevel != null) {
25808
+ rowrite = true;
25809
+ rowobj.level = +tag.outlineLevel;
25810
+ }
25811
+ if (rowrite)
25812
+ rows[tagr - 1] = rowobj;
25813
+ }
25814
+ break;
25815
+ case "<":
25816
+ rstarti = ri;
25817
+ break;
25818
+ }
25819
+ if (rstarti >= ri)
25820
+ break;
25821
+ tag = parsexmltag(x.slice(rstarti, ri), true);
25004
25822
  tagr = tag.r != null ? parseInt(tag.r, 10) : tagr + 1;
25005
25823
  tagc = -1;
25006
25824
  if (opts.sheetRows && opts.sheetRows < tagr)
@@ -25301,7 +26119,7 @@
25301
26119
  o[o.length] = "</sheetData>";
25302
26120
  o[sidx] = o[sidx].replace("/>", ">");
25303
26121
  }
25304
- if (ws["!protect"] != null)
26122
+ if (ws["!protect"])
25305
26123
  o[o.length] = write_ws_xml_protection(ws["!protect"]);
25306
26124
  if (ws["!autofilter"] != null)
25307
26125
  o[o.length] = write_ws_xml_autofilter(ws["!autofilter"], ws, wb, idx);
@@ -25424,14 +26242,26 @@
25424
26242
  }
25425
26243
  function parse_BrtWsProp(data, length) {
25426
26244
  var z = {};
25427
- data.l += 19;
26245
+ var f = data[data.l];
26246
+ ++data.l;
26247
+ z.above = !(f & 64);
26248
+ z.left = !(f & 128);
26249
+ data.l += 18;
25428
26250
  z.name = parse_XLSBCodeName(data, length - 19);
25429
26251
  return z;
25430
26252
  }
25431
- function write_BrtWsProp(str, o) {
26253
+ function write_BrtWsProp(str, outl, o) {
25432
26254
  if (o == null)
25433
26255
  o = new_buf(84 + 4 * str.length);
25434
- for (var i2 = 0; i2 < 3; ++i2)
26256
+ var f = 192;
26257
+ if (outl) {
26258
+ if (outl.above)
26259
+ f &= ~64;
26260
+ if (outl.left)
26261
+ f &= ~128;
26262
+ }
26263
+ o.write_shift(1, f);
26264
+ for (var i2 = 1; i2 < 3; ++i2)
25435
26265
  o.write_shift(1, 0);
25436
26266
  write_BrtColor({ auto: 1 }, o);
25437
26267
  o.write_shift(-4, -1);
@@ -25448,6 +26278,15 @@
25448
26278
  o = new_buf(8);
25449
26279
  return write_XLSBCell(ncell, o);
25450
26280
  }
26281
+ function parse_BrtShortBlank(data) {
26282
+ var cell = parse_XLSBShortCell(data);
26283
+ return [cell];
26284
+ }
26285
+ function write_BrtShortBlank(cell, ncell, o) {
26286
+ if (o == null)
26287
+ o = new_buf(4);
26288
+ return write_XLSBShortCell(ncell, o);
26289
+ }
25451
26290
  function parse_BrtCellBool(data) {
25452
26291
  var cell = parse_XLSBCell(data);
25453
26292
  var fBool = data.read_shift(1);
@@ -25460,11 +26299,44 @@
25460
26299
  o.write_shift(1, cell.v ? 1 : 0);
25461
26300
  return o;
25462
26301
  }
26302
+ function parse_BrtShortBool(data) {
26303
+ var cell = parse_XLSBShortCell(data);
26304
+ var fBool = data.read_shift(1);
26305
+ return [cell, fBool, "b"];
26306
+ }
26307
+ function write_BrtShortBool(cell, ncell, o) {
26308
+ if (o == null)
26309
+ o = new_buf(5);
26310
+ write_XLSBShortCell(ncell, o);
26311
+ o.write_shift(1, cell.v ? 1 : 0);
26312
+ return o;
26313
+ }
25463
26314
  function parse_BrtCellError(data) {
25464
26315
  var cell = parse_XLSBCell(data);
25465
26316
  var bError = data.read_shift(1);
25466
26317
  return [cell, bError, "e"];
25467
26318
  }
26319
+ function write_BrtCellError(cell, ncell, o) {
26320
+ if (o == null)
26321
+ o = new_buf(9);
26322
+ write_XLSBCell(ncell, o);
26323
+ o.write_shift(1, cell.v);
26324
+ return o;
26325
+ }
26326
+ function parse_BrtShortError(data) {
26327
+ var cell = parse_XLSBShortCell(data);
26328
+ var bError = data.read_shift(1);
26329
+ return [cell, bError, "e"];
26330
+ }
26331
+ function write_BrtShortError(cell, ncell, o) {
26332
+ if (o == null)
26333
+ o = new_buf(8);
26334
+ write_XLSBShortCell(ncell, o);
26335
+ o.write_shift(1, cell.v);
26336
+ o.write_shift(2, 0);
26337
+ o.write_shift(1, 0);
26338
+ return o;
26339
+ }
25468
26340
  function parse_BrtCellIsst(data) {
25469
26341
  var cell = parse_XLSBCell(data);
25470
26342
  var isst = data.read_shift(4);
@@ -25477,6 +26349,18 @@
25477
26349
  o.write_shift(4, ncell.v);
25478
26350
  return o;
25479
26351
  }
26352
+ function parse_BrtShortIsst(data) {
26353
+ var cell = parse_XLSBShortCell(data);
26354
+ var isst = data.read_shift(4);
26355
+ return [cell, isst, "s"];
26356
+ }
26357
+ function write_BrtShortIsst(cell, ncell, o) {
26358
+ if (o == null)
26359
+ o = new_buf(8);
26360
+ write_XLSBShortCell(ncell, o);
26361
+ o.write_shift(4, ncell.v);
26362
+ return o;
26363
+ }
25480
26364
  function parse_BrtCellReal(data) {
25481
26365
  var cell = parse_XLSBCell(data);
25482
26366
  var value = parse_Xnum(data);
@@ -25489,6 +26373,18 @@
25489
26373
  write_Xnum(cell.v, o);
25490
26374
  return o;
25491
26375
  }
26376
+ function parse_BrtShortReal(data) {
26377
+ var cell = parse_XLSBShortCell(data);
26378
+ var value = parse_Xnum(data);
26379
+ return [cell, value, "n"];
26380
+ }
26381
+ function write_BrtShortReal(cell, ncell, o) {
26382
+ if (o == null)
26383
+ o = new_buf(12);
26384
+ write_XLSBShortCell(ncell, o);
26385
+ write_Xnum(cell.v, o);
26386
+ return o;
26387
+ }
25492
26388
  function parse_BrtCellRk(data) {
25493
26389
  var cell = parse_XLSBCell(data);
25494
26390
  var value = parse_RkNumber(data);
@@ -25501,6 +26397,18 @@
25501
26397
  write_RkNumber(cell.v, o);
25502
26398
  return o;
25503
26399
  }
26400
+ function parse_BrtShortRk(data) {
26401
+ var cell = parse_XLSBShortCell(data);
26402
+ var value = parse_RkNumber(data);
26403
+ return [cell, value, "n"];
26404
+ }
26405
+ function write_BrtShortRk(cell, ncell, o) {
26406
+ if (o == null)
26407
+ o = new_buf(8);
26408
+ write_XLSBShortCell(ncell, o);
26409
+ write_RkNumber(cell.v, o);
26410
+ return o;
26411
+ }
25504
26412
  function parse_BrtCellSt(data) {
25505
26413
  var cell = parse_XLSBCell(data);
25506
26414
  var value = parse_XLWideString(data);
@@ -25513,6 +26421,18 @@
25513
26421
  write_XLWideString(cell.v, o);
25514
26422
  return o.length > o.l ? o.slice(0, o.l) : o;
25515
26423
  }
26424
+ function parse_BrtShortSt(data) {
26425
+ var cell = parse_XLSBShortCell(data);
26426
+ var value = parse_XLWideString(data);
26427
+ return [cell, value, "str"];
26428
+ }
26429
+ function write_BrtShortSt(cell, ncell, o) {
26430
+ if (o == null)
26431
+ o = new_buf(8 + 4 * cell.v.length);
26432
+ write_XLSBShortCell(ncell, o);
26433
+ write_XLWideString(cell.v, o);
26434
+ return o.length > o.l ? o.slice(0, o.l) : o;
26435
+ }
25516
26436
  function parse_BrtFmlaBool(data, length, opts) {
25517
26437
  var end = data.l + length;
25518
26438
  var cell = parse_XLSBCell(data);
@@ -25762,6 +26682,7 @@
25762
26682
  }
25763
26683
  var colinfo = [], rowinfo = [];
25764
26684
  var seencol = false;
26685
+ XLSBRecordEnum[16] = { n: "BrtShortReal", f: parse_BrtShortReal };
25765
26686
  recordhopper(data, function ws_parse(val, R_n, RT) {
25766
26687
  if (end)
25767
26688
  return;
@@ -25791,6 +26712,12 @@
25791
26712
  case 9:
25792
26713
  case 10:
25793
26714
  case 11:
26715
+ case 13:
26716
+ case 14:
26717
+ case 15:
26718
+ case 16:
26719
+ case 17:
26720
+ case 18:
25794
26721
  p = { t: val[2] };
25795
26722
  switch (val[2]) {
25796
26723
  case "n":
@@ -25816,7 +26743,7 @@
25816
26743
  }
25817
26744
  if (cf = styles.CellXf[val[0].iStyleRef])
25818
26745
  safe_format(p, cf.numFmtId, null, opts, themes, styles);
25819
- C = val[0].c;
26746
+ C = val[0].c == -1 ? C + 1 : val[0].c;
25820
26747
  if (opts.dense) {
25821
26748
  if (!s[R])
25822
26749
  s[R] = [];
@@ -25854,10 +26781,11 @@
25854
26781
  }
25855
26782
  break;
25856
26783
  case 1:
26784
+ case 12:
25857
26785
  if (!opts.sheetStubs || pass)
25858
26786
  break;
25859
26787
  p = { t: "z", v: void 0 };
25860
- C = val[0].c;
26788
+ C = val[0].c == -1 ? C + 1 : val[0].c;
25861
26789
  if (opts.dense) {
25862
26790
  if (!s[R])
25863
26791
  s[R] = [];
@@ -25940,6 +26868,8 @@
25940
26868
  wb.Sheets[idx] = {};
25941
26869
  if (val.name)
25942
26870
  wb.Sheets[idx].CodeName = val.name;
26871
+ if (val.above || val.left)
26872
+ s["!outline"] = { above: val.above, left: val.left };
25943
26873
  break;
25944
26874
  case 137:
25945
26875
  if (!wb.Views)
@@ -25956,6 +26886,7 @@
25956
26886
  break;
25957
26887
  case 151:
25958
26888
  break;
26889
+ case 152:
25959
26890
  case 175:
25960
26891
  case 644:
25961
26892
  case 625:
@@ -25995,7 +26926,6 @@
25995
26926
  case 680:
25996
26927
  case 1104:
25997
26928
  case 1024:
25998
- case 152:
25999
26929
  case 663:
26000
26930
  case 535:
26001
26931
  case 678:
@@ -26057,9 +26987,9 @@
26057
26987
  s["!rows"] = rowinfo;
26058
26988
  return s;
26059
26989
  }
26060
- function write_ws_bin_cell(ba, cell, R, C, opts, ws) {
26990
+ function write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen) {
26061
26991
  if (cell.v === void 0)
26062
- return;
26992
+ return false;
26063
26993
  var vv = "";
26064
26994
  switch (cell.t) {
26065
26995
  case "b":
@@ -26092,27 +27022,51 @@
26092
27022
  vv = get_sst_id(opts.Strings, cell.v, opts.revStrings);
26093
27023
  o.t = "s";
26094
27024
  o.v = vv;
26095
- write_record(ba, "BrtCellIsst", write_BrtCellIsst(cell, o));
27025
+ if (last_seen)
27026
+ write_record(ba, "BrtShortIsst", write_BrtShortIsst(cell, o));
27027
+ else
27028
+ write_record(ba, "BrtCellIsst", write_BrtCellIsst(cell, o));
26096
27029
  } else {
26097
27030
  o.t = "str";
26098
- write_record(ba, "BrtCellSt", write_BrtCellSt(cell, o));
27031
+ if (last_seen)
27032
+ write_record(ba, "BrtShortSt", write_BrtShortSt(cell, o));
27033
+ else
27034
+ write_record(ba, "BrtCellSt", write_BrtCellSt(cell, o));
26099
27035
  }
26100
- return;
27036
+ return true;
26101
27037
  case "n":
26102
- if (cell.v == (cell.v | 0) && cell.v > -1e3 && cell.v < 1e3)
26103
- write_record(ba, "BrtCellRk", write_BrtCellRk(cell, o));
26104
- else
26105
- write_record(ba, "BrtCellReal", write_BrtCellReal(cell, o));
26106
- return;
27038
+ if (cell.v == (cell.v | 0) && cell.v > -1e3 && cell.v < 1e3) {
27039
+ if (last_seen)
27040
+ write_record(ba, "BrtShortRk", write_BrtShortRk(cell, o));
27041
+ else
27042
+ write_record(ba, "BrtCellRk", write_BrtCellRk(cell, o));
27043
+ } else {
27044
+ if (last_seen)
27045
+ write_record(ba, "BrtShortReal", write_BrtShortReal(cell, o));
27046
+ else
27047
+ write_record(ba, "BrtCellReal", write_BrtCellReal(cell, o));
27048
+ }
27049
+ return true;
26107
27050
  case "b":
26108
27051
  o.t = "b";
26109
- write_record(ba, "BrtCellBool", write_BrtCellBool(cell, o));
26110
- return;
27052
+ if (last_seen)
27053
+ write_record(ba, "BrtShortBool", write_BrtShortBool(cell, o));
27054
+ else
27055
+ write_record(ba, "BrtCellBool", write_BrtCellBool(cell, o));
27056
+ return true;
26111
27057
  case "e":
26112
27058
  o.t = "e";
26113
- break;
27059
+ if (last_seen)
27060
+ write_record(ba, "BrtShortError", write_BrtShortError(cell, o));
27061
+ else
27062
+ write_record(ba, "BrtCellError", write_BrtCellError(cell, o));
27063
+ return true;
26114
27064
  }
26115
- write_record(ba, "BrtCellBlank", write_BrtCellBlank(cell, o));
27065
+ if (last_seen)
27066
+ write_record(ba, "BrtShortBlank", write_BrtShortBlank(cell, o));
27067
+ else
27068
+ write_record(ba, "BrtCellBlank", write_BrtCellBlank(cell, o));
27069
+ return true;
26116
27070
  }
26117
27071
  function write_CELLTABLE(ba, ws, idx, opts) {
26118
27072
  var range = safe_decode_range(ws["!ref"] || "A1"), ref, rr = "", cols = [];
@@ -26124,15 +27078,18 @@
26124
27078
  for (var R = range.s.r; R <= cap; ++R) {
26125
27079
  rr = encode_row(R);
26126
27080
  write_row_header(ba, ws, range, R);
27081
+ var last_seen = false;
26127
27082
  if (R <= range.e.r)
26128
27083
  for (var C = range.s.c; C <= range.e.c; ++C) {
26129
27084
  if (R === range.s.r)
26130
27085
  cols[C] = encode_col(C);
26131
27086
  ref = cols[C] + rr;
26132
27087
  var cell = dense ? (ws[R] || [])[C] : ws[ref];
26133
- if (!cell)
27088
+ if (!cell) {
27089
+ last_seen = false;
26134
27090
  continue;
26135
- write_ws_bin_cell(ba, cell, R, C, opts, ws);
27091
+ }
27092
+ last_seen = write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen);
26136
27093
  }
26137
27094
  }
26138
27095
  write_record(ba, "BrtEndSheetData");
@@ -26242,8 +27199,8 @@
26242
27199
  ws["!links"] = [];
26243
27200
  ws["!comments"] = [];
26244
27201
  write_record(ba, "BrtBeginSheet");
26245
- if (wb.vbaraw)
26246
- write_record(ba, "BrtWsProp", write_BrtWsProp(c));
27202
+ if (wb.vbaraw || ws["!outline"])
27203
+ write_record(ba, "BrtWsProp", write_BrtWsProp(c, ws["!outline"]));
26247
27204
  write_record(ba, "BrtWsDim", write_BrtWsDim(r));
26248
27205
  write_WSVIEWS2(ba, ws, wb.Workbook);
26249
27206
  write_WSFMTINFO(ba, ws);
@@ -26908,6 +27865,7 @@
26908
27865
  var supbooks = [[]];
26909
27866
  supbooks.SheetNames = [];
26910
27867
  supbooks.XTI = [];
27868
+ XLSBRecordEnum[16] = { n: "BrtFRTArchID$", f: parse_BrtFRTArchID$ };
26911
27869
  recordhopper(data, function hopper_wb(val, R_n, RT) {
26912
27870
  switch (RT) {
26913
27871
  case 156:
@@ -26947,12 +27905,16 @@
26947
27905
  break;
26948
27906
  case 361:
26949
27907
  break;
27908
+ case 2071:
27909
+ case 158:
27910
+ case 143:
27911
+ case 664:
27912
+ case 353:
27913
+ break;
26950
27914
  case 3072:
26951
27915
  case 3073:
26952
- case 2071:
26953
27916
  case 534:
26954
27917
  case 677:
26955
- case 158:
26956
27918
  case 157:
26957
27919
  case 610:
26958
27920
  case 2050:
@@ -27023,7 +27985,6 @@
27023
27985
  write_XLWideString(XLSX2.version, o);
27024
27986
  write_XLWideString(XLSX2.version, o);
27025
27987
  write_XLWideString("7262", o);
27026
- o.length = o.l;
27027
27988
  return o.length > o.l ? o.slice(0, o.l) : o;
27028
27989
  }
27029
27990
  function write_BrtBookView(idx, o) {
@@ -27383,6 +28344,12 @@
27383
28344
  str = utf8read(str);
27384
28345
  }
27385
28346
  var opening = str.slice(0, 1024).toLowerCase(), ishtml = false;
28347
+ opening = opening.replace(/".*?"/g, "");
28348
+ if ((opening.indexOf(">") & 1023) > Math.min(opening.indexOf(",") & 1023, opening.indexOf(";") & 1023)) {
28349
+ var _o = dup(opts);
28350
+ _o.type = "string";
28351
+ return PRN.to_workbook(str, _o);
28352
+ }
27386
28353
  if (opening.indexOf("<?xml") == -1)
27387
28354
  ["html", "table", "head", "meta", "script", "style", "div"].forEach(function(tag) {
27388
28355
  if (opening.indexOf("<" + tag) >= 0)
@@ -27445,7 +28412,7 @@
27445
28412
  cursheet[encode_col(c) + encode_row(r)] = cell;
27446
28413
  }
27447
28414
  if (cell.HRef) {
27448
- cell.l = { Target: cell.HRef };
28415
+ cell.l = { Target: unescapexml(cell.HRef) };
27449
28416
  if (cell.HRefScreenTip)
27450
28417
  cell.l.Tooltip = cell.HRefScreenTip;
27451
28418
  delete cell.HRef;
@@ -27763,6 +28730,8 @@
27763
28730
  } else if (Rn[0].charAt(Rn[0].length - 2) !== "/")
27764
28731
  state.push([Rn[3], true]);
27765
28732
  break;
28733
+ case "null":
28734
+ break;
27766
28735
  default:
27767
28736
  if (state.length == 0 && Rn[3] == "document")
27768
28737
  return parse_fods(str, opts);
@@ -27996,6 +28965,8 @@
27996
28965
  break;
27997
28966
  case "print":
27998
28967
  break;
28968
+ case "printerrors":
28969
+ break;
27999
28970
  case "panes":
28000
28971
  break;
28001
28972
  case "scale":
@@ -28075,6 +29046,9 @@
28075
29046
  case "allowsizerows":
28076
29047
  break;
28077
29048
  case "nosummaryrowsbelowdetail":
29049
+ if (!cursheet["!outline"])
29050
+ cursheet["!outline"] = {};
29051
+ cursheet["!outline"].above = true;
28078
29052
  break;
28079
29053
  case "tabcolorindex":
28080
29054
  break;
@@ -28083,6 +29057,9 @@
28083
29057
  case "showpagelayoutzoom":
28084
29058
  break;
28085
29059
  case "nosummarycolumnsrightdetail":
29060
+ if (!cursheet["!outline"])
29061
+ cursheet["!outline"] = {};
29062
+ cursheet["!outline"].left = true;
28086
29063
  break;
28087
29064
  case "blackandwhite":
28088
29065
  break;
@@ -28896,7 +29873,7 @@
28896
29873
  } else
28897
29874
  p.w = SSF._general(p.v);
28898
29875
  } else
28899
- p.w = SSF.format(fmtid, p.v, { date1904: !!date1904 });
29876
+ p.w = SSF.format(fmtid, p.v, { date1904: !!date1904, dateNF: opts && opts.dateNF });
28900
29877
  } catch (e) {
28901
29878
  if (opts.WTF)
28902
29879
  throw e;
@@ -28929,7 +29906,6 @@
28929
29906
  var arrayf = [];
28930
29907
  var temp_val;
28931
29908
  var country;
28932
- var cell_valid = true;
28933
29909
  var XFs = [];
28934
29910
  var palette = [];
28935
29911
  var Workbook = { Sheets: [], WBProps: { date1904: false }, Views: [{}] }, wsprops = {};
@@ -28958,8 +29934,6 @@
28958
29934
  if (file_depth > 1)
28959
29935
  return;
28960
29936
  if (options2.sheetRows && cell.r >= options2.sheetRows)
28961
- cell_valid = false;
28962
- if (!cell_valid)
28963
29937
  return;
28964
29938
  if (options2.cellStyles && line.XF && line.XF.data)
28965
29939
  process_cell_style(cell, line, options2);
@@ -29140,6 +30114,10 @@
29140
30114
  case "WsBool":
29141
30115
  if (val.fDialog)
29142
30116
  out["!type"] = "dialog";
30117
+ if (!val.fBelow)
30118
+ (out["!outline"] || (out["!outline"] = {})).above = true;
30119
+ if (!val.fRight)
30120
+ (out["!outline"] || (out["!outline"] = {})).left = true;
29143
30121
  break;
29144
30122
  case "XF":
29145
30123
  XFs.push(val);
@@ -29264,17 +30242,22 @@
29264
30242
  2: 2,
29265
30243
  7: 2
29266
30244
  }[val.BIFFVer] || 8;
30245
+ opts.biffguess = val.BIFFVer == 0;
30246
+ if (val.BIFFVer == 0 && val.dt == 4096) {
30247
+ opts.biff = 5;
30248
+ seen_codepage = true;
30249
+ set_cp(opts.codepage = 28591);
30250
+ }
29267
30251
  if (opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16)
29268
30252
  opts.biff = 2;
29269
30253
  if (file_depth++)
29270
30254
  break;
29271
- cell_valid = true;
29272
30255
  out = options.dense ? [] : {};
29273
30256
  if (opts.biff < 8 && !seen_codepage) {
29274
30257
  seen_codepage = true;
29275
30258
  set_cp(opts.codepage = options.codepage || 1252);
29276
30259
  }
29277
- if (opts.biff < 5) {
30260
+ if (opts.biff < 5 || val.BIFFVer == 0 && val.dt == 4096) {
29278
30261
  if (cur_sheet === "")
29279
30262
  cur_sheet = "Sheet1";
29280
30263
  range = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };
@@ -29307,7 +30290,7 @@
29307
30290
  }
29308
30291
  temp_val = { ixfe: val.ixfe, XF: XFs[val.ixfe] || {}, v: val.val, t: "n" };
29309
30292
  if (BIFF2Fmt > 0)
29310
- temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 31];
30293
+ temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
29311
30294
  safe_format_xf(temp_val, options, wb.opts.Date1904);
29312
30295
  addcell({ c: val.c, r: val.r }, temp_val, options);
29313
30296
  }
@@ -29316,7 +30299,7 @@
29316
30299
  {
29317
30300
  temp_val = { ixfe: val.ixfe, XF: XFs[val.ixfe], v: val.val, t: val.t };
29318
30301
  if (BIFF2Fmt > 0)
29319
- temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 31];
30302
+ temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
29320
30303
  safe_format_xf(temp_val, options, wb.opts.Date1904);
29321
30304
  addcell({ c: val.c, r: val.r }, temp_val, options);
29322
30305
  }
@@ -29325,7 +30308,7 @@
29325
30308
  {
29326
30309
  temp_val = { ixfe: val.ixfe, XF: XFs[val.ixfe], v: val.rknum, t: "n" };
29327
30310
  if (BIFF2Fmt > 0)
29328
- temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 31];
30311
+ temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
29329
30312
  safe_format_xf(temp_val, options, wb.opts.Date1904);
29330
30313
  addcell({ c: val.c, r: val.r }, temp_val, options);
29331
30314
  }
@@ -29336,7 +30319,7 @@
29336
30319
  var ixfe = val.rkrec[j - val.c][0];
29337
30320
  temp_val = { ixfe, XF: XFs[ixfe], v: val.rkrec[j - val.c][1], t: "n" };
29338
30321
  if (BIFF2Fmt > 0)
29339
- temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 31];
30322
+ temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
29340
30323
  safe_format_xf(temp_val, options, wb.opts.Date1904);
29341
30324
  addcell({ c: j, r: val.r }, temp_val, options);
29342
30325
  }
@@ -29363,7 +30346,7 @@
29363
30346
  temp_val.f = "" + stringify_formula(val.formula, range, val.cell, supbooks, opts);
29364
30347
  }
29365
30348
  if (BIFF2Fmt > 0)
29366
- temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 31];
30349
+ temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
29367
30350
  safe_format_xf(temp_val, options, wb.opts.Date1904);
29368
30351
  addcell(val.cell, temp_val, options);
29369
30352
  last_formula = val;
@@ -29379,7 +30362,7 @@
29379
30362
  temp_val.f = "" + stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);
29380
30363
  }
29381
30364
  if (BIFF2Fmt > 0)
29382
- temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 31];
30365
+ temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
29383
30366
  safe_format_xf(temp_val, options, wb.opts.Date1904);
29384
30367
  addcell(last_formula.cell, temp_val, options);
29385
30368
  last_formula = null;
@@ -29404,8 +30387,6 @@
29404
30387
  break;
29405
30388
  case "ShrFmla":
29406
30389
  {
29407
- if (!cell_valid)
29408
- break;
29409
30390
  if (!options.cellFormula)
29410
30391
  break;
29411
30392
  if (last_cell) {
@@ -29423,7 +30404,7 @@
29423
30404
  temp_val.h = sst[val.isst].h;
29424
30405
  temp_val.XF = XFs[temp_val.ixfe];
29425
30406
  if (BIFF2Fmt > 0)
29426
- temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 31];
30407
+ temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
29427
30408
  safe_format_xf(temp_val, options, wb.opts.Date1904);
29428
30409
  addcell({ c: val.c, r: val.r }, temp_val, options);
29429
30410
  break;
@@ -29431,7 +30412,7 @@
29431
30412
  if (options.sheetStubs) {
29432
30413
  temp_val = { ixfe: val.ixfe, XF: XFs[val.ixfe], t: "z" };
29433
30414
  if (BIFF2Fmt > 0)
29434
- temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 31];
30415
+ temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
29435
30416
  safe_format_xf(temp_val, options, wb.opts.Date1904);
29436
30417
  addcell({ c: val.c, r: val.r }, temp_val, options);
29437
30418
  }
@@ -29442,7 +30423,7 @@
29442
30423
  var _ixfe = val.ixfe[_j - val.c];
29443
30424
  temp_val = { ixfe: _ixfe, XF: XFs[_ixfe], t: "z" };
29444
30425
  if (BIFF2Fmt > 0)
29445
- temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 31];
30426
+ temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
29446
30427
  safe_format_xf(temp_val, options, wb.opts.Date1904);
29447
30428
  addcell({ c: _j, r: val.r }, temp_val, options);
29448
30429
  }
@@ -29454,7 +30435,7 @@
29454
30435
  temp_val = make_cell(val.val, val.ixfe, "s");
29455
30436
  temp_val.XF = XFs[temp_val.ixfe];
29456
30437
  if (BIFF2Fmt > 0)
29457
- temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 31];
30438
+ temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
29458
30439
  safe_format_xf(temp_val, options, wb.opts.Date1904);
29459
30440
  addcell({ c: val.c, r: val.r }, temp_val, options);
29460
30441
  break;
@@ -29567,7 +30548,7 @@
29567
30548
  if (!opts.cellStyles)
29568
30549
  break;
29569
30550
  while (val.e >= val.s) {
29570
- colinfo[val.e--] = { width: val.w / 256 };
30551
+ colinfo[val.e--] = { width: val.w / 256, level: val.level || 0, hidden: !!(val.flags & 1) };
29571
30552
  if (!seencol) {
29572
30553
  seencol = true;
29573
30554
  find_mdw_colw(val.w / 256);
@@ -29602,6 +30583,8 @@
29602
30583
  default_margins(out["!margins"] = {});
29603
30584
  out["!margins"][Rn.slice(0, -6).toLowerCase()] = val;
29604
30585
  break;
30586
+ case "Selection":
30587
+ break;
29605
30588
  case "Setup":
29606
30589
  if (!out["!margins"])
29607
30590
  default_margins(out["!margins"] = {});
@@ -29654,8 +30637,6 @@
29654
30637
  break;
29655
30638
  case "QsiSXTag":
29656
30639
  break;
29657
- case "Selection":
29658
- break;
29659
30640
  case "Feat":
29660
30641
  break;
29661
30642
  case "FeatHdr":
@@ -29997,6 +30978,8 @@
29997
30978
  case "BIFF3XF":
29998
30979
  case "BIFF4XF":
29999
30980
  break;
30981
+ case "BIFF2XFINDEX":
30982
+ break;
30000
30983
  case "BIFF4FMTCNT":
30001
30984
  case "BIFF2ROW":
30002
30985
  case "BIFF2WINDOW2":
@@ -30047,11 +31030,16 @@
30047
31030
  });
30048
31031
  if (!options.bookSheets)
30049
31032
  wb.Sheets = Sheets;
31033
+ if (!wb.SheetNames.length && Preamble["!ref"]) {
31034
+ wb.SheetNames.push("Sheet1");
31035
+ if (wb.Sheets)
31036
+ wb.Sheets["Sheet1"] = Preamble;
31037
+ } else
31038
+ wb.Preamble = Preamble;
30050
31039
  if (wb.Sheets)
30051
31040
  FilterDatabases.forEach(function(r, i2) {
30052
31041
  wb.Sheets[wb.SheetNames[i2]]["!autofilter"] = r;
30053
31042
  });
30054
- wb.Preamble = Preamble;
30055
31043
  wb.Strings = sst;
30056
31044
  wb.SSF = SSF.get_table();
30057
31045
  if (opts.enc)
@@ -30171,6 +31159,8 @@
30171
31159
  WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));
30172
31160
  else if ((_data = CFB.find(cfb, "NativeContent_MAIN")) && _data.content)
30173
31161
  WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));
31162
+ else if ((_data = CFB.find(cfb, "MN0")) && _data.content)
31163
+ throw new Error("Unsupported Works 4 for Mac file");
30174
31164
  else
30175
31165
  throw new Error("Cannot find Workbook stream");
30176
31166
  if (options.bookVBA && cfb.FullPaths && CFB.find(cfb, "/_VBA_PROJECT_CUR/VBA/dir"))
@@ -30225,7 +31215,13 @@
30225
31215
  9: { n: "BrtFmlaNum", f: parse_BrtFmlaNum },
30226
31216
  10: { n: "BrtFmlaBool", f: parse_BrtFmlaBool },
30227
31217
  11: { n: "BrtFmlaError", f: parse_BrtFmlaError },
30228
- 16: { n: "BrtFRTArchID$", f: parse_BrtFRTArchID$ },
31218
+ 12: { n: "BrtShortBlank", f: parse_BrtShortBlank },
31219
+ 13: { n: "BrtShortRk", f: parse_BrtShortRk },
31220
+ 14: { n: "BrtShortError", f: parse_BrtShortError },
31221
+ 15: { n: "BrtShortBool", f: parse_BrtShortBool },
31222
+ 16: { n: "BrtShortReal", f: parse_BrtShortReal },
31223
+ 17: { n: "BrtShortSt", f: parse_BrtShortSt },
31224
+ 18: { n: "BrtShortIsst", f: parse_BrtShortIsst },
30229
31225
  19: { n: "BrtSSTItem", f: parse_RichStr },
30230
31226
  20: { n: "BrtPCDIMissing" },
30231
31227
  21: { n: "BrtPCDINumber" },
@@ -31048,11 +32044,9 @@
31048
32044
  65535: { n: "" }
31049
32045
  };
31050
32046
  var XLSBRE = evert_key(XLSBRecordEnum, "n");
32047
+ XLSBRE["BrtFRTArchID$"] = 16;
31051
32048
  var XLSRecordEnum = {
31052
- 3: { n: "BIFF2NUM", f: parse_BIFF2NUM },
31053
- 4: { n: "BIFF2STR", f: parse_BIFF2STR },
31054
32049
  6: { n: "Formula", f: parse_Formula },
31055
- 9: { n: "BOF", f: parse_BOF },
31056
32050
  10: { n: "EOF", f: parsenoop2 },
31057
32051
  12: { n: "CalcCount", f: parseuint16 },
31058
32052
  13: { n: "CalcMode", f: parseuint16 },
@@ -31073,7 +32067,6 @@
31073
32067
  29: { n: "Selection" },
31074
32068
  34: { n: "Date1904", f: parsebool },
31075
32069
  35: { n: "ExternName", f: parse_ExternName },
31076
- 36: { n: "COLWIDTH" },
31077
32070
  38: { n: "LeftMargin", f: parse_Xnum },
31078
32071
  39: { n: "RightMargin", f: parse_Xnum },
31079
32072
  40: { n: "TopMargin", f: parse_Xnum },
@@ -31243,7 +32236,6 @@
31243
32236
  515: { n: "Number", f: parse_Number },
31244
32237
  516: { n: "Label", f: parse_Label },
31245
32238
  517: { n: "BoolErr", f: parse_BoolErr },
31246
- 518: { n: "Formula", f: parse_Formula },
31247
32239
  519: { n: "String", f: parse_String },
31248
32240
  520: { n: "Row", f: parse_Row },
31249
32241
  523: { n: "Index" },
@@ -31253,7 +32245,6 @@
31253
32245
  574: { n: "Window2", f: parse_Window2 },
31254
32246
  638: { n: "RK", f: parse_RK },
31255
32247
  659: { n: "Style" },
31256
- 1030: { n: "Formula", f: parse_Formula },
31257
32248
  1048: { n: "BigName" },
31258
32249
  1054: { n: "Format", f: parse_Format },
31259
32250
  1084: { n: "ContinueBigName" },
@@ -31409,21 +32400,27 @@
31409
32400
  4199: { n: "BopPopCustom" },
31410
32401
  4200: { n: "Fbi2" },
31411
32402
  0: { n: "Dimensions", f: parse_Dimensions },
32403
+ 1: { n: "BIFF2BLANK" },
31412
32404
  2: { n: "BIFF2INT", f: parse_BIFF2INT },
32405
+ 3: { n: "BIFF2NUM", f: parse_BIFF2NUM },
32406
+ 4: { n: "BIFF2STR", f: parse_BIFF2STR },
31413
32407
  5: { n: "BoolErr", f: parse_BoolErr },
31414
32408
  7: { n: "String", f: parse_BIFF2STRING },
31415
32409
  8: { n: "BIFF2ROW" },
32410
+ 9: { n: "BOF", f: parse_BOF },
31416
32411
  11: { n: "Index" },
31417
32412
  22: { n: "ExternCount", f: parseuint16 },
31418
32413
  30: { n: "BIFF2FORMAT", f: parse_BIFF2Format },
31419
32414
  31: { n: "BIFF2FMTCNT" },
31420
32415
  32: { n: "BIFF2COLINFO" },
31421
32416
  33: { n: "Array", f: parse_Array },
32417
+ 36: { n: "COLWIDTH" },
31422
32418
  37: { n: "DefaultRowHeight", f: parse_DefaultRowHeight },
31423
32419
  50: { n: "BIFF2FONTXTRA", f: parse_BIFF2FONTXTRA },
31424
- 52: { n: "DDEObjName" },
31425
32420
  62: { n: "BIFF2WINDOW2" },
32421
+ 52: { n: "DDEObjName" },
31426
32422
  67: { n: "BIFF2XF" },
32423
+ 68: { n: "BIFF2XFINDEX", f: parseuint16 },
31427
32424
  69: { n: "BIFF2FONTCLR" },
31428
32425
  86: { n: "BIFF4FMTCNT" },
31429
32426
  126: { n: "RK" },
@@ -31447,11 +32444,13 @@
31447
32444
  234: { n: "TabIdConf" },
31448
32445
  354: { n: "XL5Modify" },
31449
32446
  421: { n: "FileSharing2" },
32447
+ 518: { n: "Formula", f: parse_Formula },
31450
32448
  521: { n: "BOF", f: parse_BOF },
31451
32449
  536: { n: "Lbl", f: parse_Lbl },
31452
32450
  547: { n: "ExternName", f: parse_ExternName },
31453
32451
  561: { n: "Font" },
31454
32452
  579: { n: "BIFF3XF" },
32453
+ 1030: { n: "Formula", f: parse_Formula },
31455
32454
  1033: { n: "BOF", f: parse_BOF },
31456
32455
  1091: { n: "BIFF4XF" },
31457
32456
  2157: { n: "FeatInfo" },
@@ -31474,7 +32473,7 @@
31474
32473
  };
31475
32474
  var XLSRE = evert_key(XLSRecordEnum, "n");
31476
32475
  function write_biff_rec(ba, type, payload, length) {
31477
- var t = +type || +XLSRE[type];
32476
+ var t = typeof type == "number" ? type : +type || +XLSRE[type];
31478
32477
  if (isNaN(t))
31479
32478
  return;
31480
32479
  var len = length || (payload || []).length || 0;
@@ -31527,13 +32526,7 @@
31527
32526
  function write_BIFF2BERR(r, c, val, t) {
31528
32527
  var out = new_buf(9);
31529
32528
  write_BIFF2Cell(out, r, c);
31530
- if (t == "e") {
31531
- out.write_shift(1, val);
31532
- out.write_shift(1, 1);
31533
- } else {
31534
- out.write_shift(1, val ? 1 : 0);
31535
- out.write_shift(1, 0);
31536
- }
32529
+ write_Bes(val, t || "b", out);
31537
32530
  return out;
31538
32531
  }
31539
32532
  function write_BIFF2LABEL(r, c, val) {
@@ -31560,7 +32553,7 @@
31560
32553
  return;
31561
32554
  case "s":
31562
32555
  case "str":
31563
- write_biff_rec(ba, 4, write_BIFF2LABEL(R, C, cell.v));
32556
+ write_biff_rec(ba, 4, write_BIFF2LABEL(R, C, (cell.v || "").slice(0, 255)));
31564
32557
  return;
31565
32558
  }
31566
32559
  write_biff_rec(ba, 1, write_BIFF2Cell(null, R, C));
@@ -31599,7 +32592,7 @@
31599
32592
  idx = i2;
31600
32593
  if (idx == 0 && !!o.sheet && wb.SheetNames[0] != o.sheet)
31601
32594
  throw new Error("Sheet not found: " + o.sheet);
31602
- write_biff_rec(ba, 9, write_BOF(wb, 16, o));
32595
+ write_biff_rec(ba, o.biff == 4 ? 1033 : o.biff == 3 ? 521 : 9, write_BOF(wb, 16, o));
31603
32596
  write_ws_biff2(ba, wb.Sheets[wb.SheetNames[idx]], idx, o, wb);
31604
32597
  write_biff_rec(ba, 10);
31605
32598
  return ba.end();
@@ -31661,6 +32654,16 @@
31661
32654
  }
31662
32655
  delete ws["!links"];
31663
32656
  }
32657
+ function write_ws_cols_biff8(ba, cols, ws) {
32658
+ if (!cols)
32659
+ return;
32660
+ var cnt = 0;
32661
+ cols.forEach(function(col, idx) {
32662
+ if (++cnt <= 256 && col) {
32663
+ write_biff_rec(ba, "ColInfo", write_ColInfo(col_obj_w(idx, col), idx));
32664
+ }
32665
+ });
32666
+ }
31664
32667
  function write_ws_biff8_cell(ba, cell, R, C, opts) {
31665
32668
  var os = 16 + get_cell_style(opts.cellXfs, cell, opts);
31666
32669
  if (cell.v == null && !cell.bf) {
@@ -31686,7 +32689,7 @@
31686
32689
  var isst = get_sst_id(opts.Strings, cell.v, opts.revStrings);
31687
32690
  write_biff_rec(ba, "LabelSst", write_LabelSst(R, C, isst, os, opts));
31688
32691
  } else
31689
- write_biff_rec(ba, "Label", write_Label(R, C, cell.v, os, opts));
32692
+ write_biff_rec(ba, "Label", write_Label(R, C, (cell.v || "").slice(0, 255), os, opts));
31690
32693
  break;
31691
32694
  default:
31692
32695
  write_biff_rec(ba, "Blank", write_XLSCell(R, C, os));
@@ -31721,6 +32724,8 @@
31721
32724
  write_biff_rec(ba, "Guts", write_Guts([0, 0]));
31722
32725
  write_biff_rec(ba, "HCenter", writebool(false));
31723
32726
  write_biff_rec(ba, "VCenter", writebool(false));
32727
+ if (b8)
32728
+ write_ws_cols_biff8(ba, ws["!cols"], ws);
31724
32729
  write_biff_rec(ba, 512, write_Dimensions(range, opts));
31725
32730
  if (b8)
31726
32731
  ws["!links"] = [];
@@ -31858,6 +32863,15 @@
31858
32863
  return __toBuffer([bufs]);
31859
32864
  }
31860
32865
  function write_biff_buf(wb, opts) {
32866
+ for (var i2 = 0; i2 <= wb.SheetNames.length; ++i2) {
32867
+ var ws = wb.Sheets[wb.SheetNames[i2]];
32868
+ if (!ws || !ws["!ref"])
32869
+ continue;
32870
+ var range = decode_range(ws["!ref"]);
32871
+ if (range.e.c > 255) {
32872
+ console.error("Worksheet '" + wb.SheetNames[i2] + "' extends beyond column IV (255). Data may be lost.");
32873
+ }
32874
+ }
31861
32875
  var o = opts || {};
31862
32876
  switch (o.biff || 2) {
31863
32877
  case 8:
@@ -31919,7 +32933,7 @@
31919
32933
  CS = tag.colspan ? +tag.colspan : 1;
31920
32934
  if ((RS = +tag.rowspan) > 1 || CS > 1)
31921
32935
  merges.push({ s: { r: R, c: C }, e: { r: R + (RS || 1) - 1, c: C + CS - 1 } });
31922
- var _t = tag.t || "";
32936
+ var _t = tag.t || tag["data-t"] || "";
31923
32937
  if (!m.length) {
31924
32938
  C += CS;
31925
32939
  continue;
@@ -31964,7 +32978,16 @@
31964
32978
  return ws;
31965
32979
  }
31966
32980
  function html_to_book(str, opts) {
31967
- return sheet_to_workbook(html_to_sheet(str, opts), opts);
32981
+ var mtch = str.match(/<table.*?>[\s\S]*?<\/table>/gi);
32982
+ if (!mtch || mtch.length == 0)
32983
+ throw new Error("Invalid HTML: could not find <table>");
32984
+ if (mtch.length == 1)
32985
+ return sheet_to_workbook(html_to_sheet(mtch[0], opts), opts);
32986
+ var wb = utils2.book_new();
32987
+ mtch.forEach(function(s, idx) {
32988
+ utils2.book_append_sheet(wb, html_to_sheet(s, opts), "Sheet" + (idx + 1));
32989
+ });
32990
+ return wb;
31968
32991
  }
31969
32992
  function make_html_row(ws, r, R, o) {
31970
32993
  var M = ws["!merges"] || [];
@@ -31994,15 +33017,18 @@
31994
33017
  sp.rowspan = RS;
31995
33018
  if (CS > 1)
31996
33019
  sp.colspan = CS;
31997
- sp.t = cell && cell.t || "z";
31998
33020
  if (o.editable)
31999
33021
  w = '<span contenteditable="true">' + w + "</span>";
32000
- sp.id = (o.id || "sjs") + "-" + coord;
32001
- if (sp.t != "z") {
32002
- sp.v = cell.v;
33022
+ else if (cell) {
33023
+ sp["data-t"] = cell && cell.t || "z";
33024
+ if (cell.v != null)
33025
+ sp["data-v"] = cell.v;
32003
33026
  if (cell.z != null)
32004
- sp.z = cell.z;
33027
+ sp["data-z"] = cell.z;
33028
+ if (cell.l && (cell.l.Target || "#").charAt(0) != "#")
33029
+ w = '<a href="' + cell.l.Target + '">' + w + "</a>";
32005
33030
  }
33031
+ sp.id = (o.id || "sjs") + "-" + coord;
32006
33032
  oo.push(writextag("td", w, sp));
32007
33033
  }
32008
33034
  var preamble = "<tr>";
@@ -32080,8 +33106,8 @@
32080
33106
  var elt = elts[_C];
32081
33107
  if (opts.display && is_dom_element_hidden(elt))
32082
33108
  continue;
32083
- var v = elt.hasAttribute("v") ? elt.getAttribute("v") : htmldecode(elt.innerHTML);
32084
- var z = elt.getAttribute("z");
33109
+ var v = elt.hasAttribute("data-v") ? elt.getAttribute("data-v") : elt.hasAttribute("v") ? elt.getAttribute("v") : htmldecode(elt.innerHTML);
33110
+ var z = elt.getAttribute("data-z") || elt.getAttribute("z");
32085
33111
  for (midx = 0; midx < merges.length; ++midx) {
32086
33112
  var m = merges[midx];
32087
33113
  if (m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) {
@@ -32093,7 +33119,7 @@
32093
33119
  if ((RS = +elt.getAttribute("rowspan") || 1) > 1 || CS > 1)
32094
33120
  merges.push({ s: { r: R + or_R, c: C + or_C }, e: { r: R + or_R + (RS || 1) - 1, c: C + or_C + (CS || 1) - 1 } });
32095
33121
  var o = { t: "s", v };
32096
- var _t = elt.getAttribute("t") || "";
33122
+ var _t = elt.getAttribute("data-t") || elt.getAttribute("t") || "";
32097
33123
  if (v != null) {
32098
33124
  if (v.length == 0)
32099
33125
  o.t = _t || "z";
@@ -32113,6 +33139,17 @@
32113
33139
  }
32114
33140
  if (o.z === void 0 && z != null)
32115
33141
  o.z = z;
33142
+ var l = "", Aelts = elt.getElementsByTagName("A");
33143
+ if (Aelts && Aelts.length) {
33144
+ for (var Aelti = 0; Aelti < Aelts.length; ++Aelti)
33145
+ if (Aelts[Aelti].hasAttribute("href")) {
33146
+ l = Aelts[Aelti].getAttribute("href");
33147
+ if (l.charAt(0) != "#")
33148
+ break;
33149
+ }
33150
+ }
33151
+ if (l && l.charAt(0) != "#")
33152
+ o.l = { Target: l };
32116
33153
  if (opts.dense) {
32117
33154
  if (!ws[R + or_R])
32118
33155
  ws[R + or_R] = [];
@@ -32306,6 +33343,9 @@
32306
33343
  C += colpeat - 1;
32307
33344
  } else if (Rn[1] !== "/") {
32308
33345
  ++C;
33346
+ textp = "";
33347
+ textpidx = 0;
33348
+ textR = [];
32309
33349
  colpeat = 1;
32310
33350
  var rptR = rowpeat ? R + rowpeat - 1 : R;
32311
33351
  if (C > range.e.c)
@@ -32376,6 +33416,11 @@
32376
33416
  case "time":
32377
33417
  q.t = "n";
32378
33418
  q.v = parse_isodur(ctag["time-value"]) / 86400;
33419
+ if (opts.cellDates) {
33420
+ q.t = "d";
33421
+ q.v = numdate(q.v);
33422
+ }
33423
+ q.z = "HH:MM:SS";
32379
33424
  break;
32380
33425
  case "number":
32381
33426
  q.t = "n";
@@ -32803,12 +33848,13 @@
32803
33848
  atag = parsexmltag(Rn[0], false);
32804
33849
  if (!atag.href)
32805
33850
  break;
32806
- atag.Target = atag.href;
33851
+ atag.Target = unescapexml(atag.href);
32807
33852
  delete atag.href;
32808
33853
  if (atag.Target.charAt(0) == "#" && atag.Target.indexOf(".") > -1) {
32809
33854
  _Ref = ods_to_csf_3D(atag.Target.slice(1));
32810
33855
  atag.Target = "#" + _Ref[0] + "!" + _Ref[1];
32811
- }
33856
+ } else if (atag.Target.match(/^\.\.[\\\/]/))
33857
+ atag.Target = atag.Target.slice(3);
32812
33858
  }
32813
33859
  break;
32814
33860
  case "table-protection":
@@ -32849,13 +33895,12 @@
32849
33895
  }();
32850
33896
  function parse_ods(zip, opts) {
32851
33897
  opts = opts || {};
32852
- var ods = !!safegetzipfile(zip, "objectdata");
32853
- if (ods)
33898
+ if (safegetzipfile(zip, "META-INF/manifest.xml"))
32854
33899
  parse_manifest(getzipdata(zip, "META-INF/manifest.xml"), opts);
32855
33900
  var content = getzipstr(zip, "content.xml");
32856
33901
  if (!content)
32857
- throw new Error("Missing content.xml in " + (ods ? "ODS" : "UOF") + " file");
32858
- var wb = parse_content_xml(ods ? content : utf8read(content), opts);
33902
+ throw new Error("Missing content.xml in ODS / UOF file");
33903
+ var wb = parse_content_xml(utf8read(content), opts);
32859
33904
  if (safegetzipfile(zip, "meta.xml"))
32860
33905
  wb.Props = parse_core_props(getzipdata(zip, "meta.xml"));
32861
33906
  return wb;
@@ -32864,6 +33909,16 @@
32864
33909
  return parse_content_xml(data, opts);
32865
33910
  }
32866
33911
  var write_styles_ods = function() {
33912
+ var master_styles = [
33913
+ "<office:master-styles>",
33914
+ '<style:master-page style:name="mp1" style:page-layout-name="mp1">',
33915
+ "<style:header/>",
33916
+ '<style:header-left style:display="false"/>',
33917
+ "<style:footer/>",
33918
+ '<style:footer-left style:display="false"/>',
33919
+ "</style:master-page>",
33920
+ "</office:master-styles>"
33921
+ ].join("");
32867
33922
  var payload = "<office:document-styles " + wxt_helper({
32868
33923
  "xmlns:office": "urn:oasis:names:tc:opendocument:xmlns:office:1.0",
32869
33924
  "xmlns:table": "urn:oasis:names:tc:opendocument:xmlns:table:1.0",
@@ -32877,7 +33932,7 @@
32877
33932
  "xmlns:svg": "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0",
32878
33933
  "xmlns:of": "urn:oasis:names:tc:opendocument:xmlns:of:1.2",
32879
33934
  "office:version": "1.2"
32880
- }) + "></office:document-styles>";
33935
+ }) + ">" + master_styles + "</office:document-styles>";
32881
33936
  return function wso() {
32882
33937
  return XML_HEADER + payload;
32883
33938
  };
@@ -32886,20 +33941,28 @@
32886
33941
  var write_text_p = function(text) {
32887
33942
  return escapexml(text).replace(/ +/g, function($$) {
32888
33943
  return '<text:s text:c="' + $$.length + '"/>';
32889
- }).replace(/\t/g, "<text:tab/>").replace(/\n/g, "<text:line-break/>").replace(/^ /, "<text:s/>").replace(/ $/, "<text:s/>");
33944
+ }).replace(/\t/g, "<text:tab/>").replace(/\n/g, "</text:p><text:p>").replace(/^ /, "<text:s/>").replace(/ $/, "<text:s/>");
32890
33945
  };
32891
33946
  var null_cell_xml = " <table:table-cell />\n";
32892
33947
  var covered_cell_xml = " <table:covered-table-cell/>\n";
32893
33948
  var write_ws2 = function(ws, wb, i2) {
32894
33949
  var o = [];
32895
33950
  o.push(' <table:table table:name="' + escapexml(wb.SheetNames[i2]) + '" table:style-name="ta1">\n');
32896
- var R = 0, C = 0, range = decode_range(ws["!ref"]);
33951
+ var R = 0, C = 0, range = decode_range(ws["!ref"] || "A1");
32897
33952
  var marr = ws["!merges"] || [], mi = 0;
32898
33953
  var dense = Array.isArray(ws);
32899
- for (R = 0; R < range.s.r; ++R)
32900
- o.push(" <table:table-row></table:table-row>\n");
33954
+ if (ws["!cols"]) {
33955
+ for (C = 0; C <= range.e.c; ++C)
33956
+ o.push(" <table:table-column" + (ws["!cols"][C] ? ' table:style-name="co' + ws["!cols"][C].ods + '"' : "") + "></table:table-column>\n");
33957
+ }
33958
+ var H = "", ROWS = ws["!rows"] || [];
33959
+ for (R = 0; R < range.s.r; ++R) {
33960
+ H = ROWS[R] ? ' table:style-name="ro' + ROWS[R].ods + '"' : "";
33961
+ o.push(" <table:table-row" + H + "></table:table-row>\n");
33962
+ }
32901
33963
  for (; R <= range.e.r; ++R) {
32902
- o.push(" <table:table-row>\n");
33964
+ H = ROWS[R] ? ' table:style-name="ro' + ROWS[R].ods + '"' : "";
33965
+ o.push(" <table:table-row" + H + ">\n");
32903
33966
  for (C = 0; C < range.s.c; ++C)
32904
33967
  o.push(null_cell_xml);
32905
33968
  for (; C <= range.e.c; ++C) {
@@ -32968,7 +34031,9 @@
32968
34031
  if (cell.l && cell.l.Target) {
32969
34032
  var _tgt = cell.l.Target;
32970
34033
  _tgt = _tgt.charAt(0) == "#" ? "#" + csf_to_ods_3D(_tgt.slice(1)) : _tgt;
32971
- text_p = writextag("text:a", text_p, { "xlink:href": _tgt });
34034
+ if (_tgt.charAt(0) != "#" && !_tgt.match(/^\w+:/))
34035
+ _tgt = "../" + _tgt;
34036
+ text_p = writextag("text:a", text_p, { "xlink:href": _tgt.replace(/&/g, "&amp;") });
32972
34037
  }
32973
34038
  o.push(" " + writextag("table:table-cell", writextag("text:p", text_p, {}), ct) + "\n");
32974
34039
  }
@@ -32977,7 +34042,7 @@
32977
34042
  o.push(" </table:table>\n");
32978
34043
  return o.join("");
32979
34044
  };
32980
- var write_automatic_styles_ods = function(o) {
34045
+ var write_automatic_styles_ods = function(o, wb) {
32981
34046
  o.push(" <office:automatic-styles>\n");
32982
34047
  o.push(' <number:date-style style:name="N37" number:automatic-order="true">\n');
32983
34048
  o.push(' <number:month number:style="long"/>\n');
@@ -32986,7 +34051,47 @@
32986
34051
  o.push(" <number:text>/</number:text>\n");
32987
34052
  o.push(" <number:year/>\n");
32988
34053
  o.push(" </number:date-style>\n");
32989
- o.push(' <style:style style:name="ta1" style:family="table">\n');
34054
+ var cidx = 0;
34055
+ wb.SheetNames.map(function(n) {
34056
+ return wb.Sheets[n];
34057
+ }).forEach(function(ws) {
34058
+ if (!ws)
34059
+ return;
34060
+ if (ws["!cols"]) {
34061
+ for (var C = 0; C < ws["!cols"].length; ++C)
34062
+ if (ws["!cols"][C]) {
34063
+ var colobj = ws["!cols"][C];
34064
+ if (colobj.width == null && colobj.wpx == null && colobj.wch == null)
34065
+ continue;
34066
+ process_col(colobj);
34067
+ colobj.ods = cidx;
34068
+ var w = ws["!cols"][C].wpx + "px";
34069
+ o.push(' <style:style style:name="co' + cidx + '" style:family="table-column">\n');
34070
+ o.push(' <style:table-column-properties fo:break-before="auto" style:column-width="' + w + '"/>\n');
34071
+ o.push(" </style:style>\n");
34072
+ ++cidx;
34073
+ }
34074
+ }
34075
+ });
34076
+ var ridx = 0;
34077
+ wb.SheetNames.map(function(n) {
34078
+ return wb.Sheets[n];
34079
+ }).forEach(function(ws) {
34080
+ if (!ws)
34081
+ return;
34082
+ if (ws["!rows"]) {
34083
+ for (var R = 0; R < ws["!rows"].length; ++R)
34084
+ if (ws["!rows"][R]) {
34085
+ ws["!rows"][R].ods = ridx;
34086
+ var h = ws["!rows"][R].hpx + "px";
34087
+ o.push(' <style:style style:name="ro' + ridx + '" style:family="table-row">\n');
34088
+ o.push(' <style:table-row-properties fo:break-before="auto" style:row-height="' + h + '"/>\n');
34089
+ o.push(" </style:style>\n");
34090
+ ++ridx;
34091
+ }
34092
+ }
34093
+ });
34094
+ o.push(' <style:style style:name="ta1" style:family="table" style:master-page-name="mp1">\n');
32990
34095
  o.push(' <style:table-properties table:display="true" style:writing-mode="lr-tb"/>\n');
32991
34096
  o.push(" </style:style>\n");
32992
34097
  o.push(' <style:style style:name="ce1" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N37"/>\n');
@@ -33037,11 +34142,12 @@
33037
34142
  "xmlns:config": "urn:oasis:names:tc:opendocument:xmlns:config:1.0",
33038
34143
  "office:mimetype": "application/vnd.oasis.opendocument.spreadsheet"
33039
34144
  });
33040
- if (opts.bookType == "fods")
34145
+ if (opts.bookType == "fods") {
33041
34146
  o.push("<office:document" + attr + fods + ">\n");
33042
- else
34147
+ o.push(write_meta_ods().replace(/office:document-meta/g, "office:meta"));
34148
+ } else
33043
34149
  o.push("<office:document-content" + attr + ">\n");
33044
- write_automatic_styles_ods(o);
34150
+ write_automatic_styles_ods(o, wb);
33045
34151
  o.push(" <office:body>\n");
33046
34152
  o.push(" <office:spreadsheet>\n");
33047
34153
  for (var i2 = 0; i2 != wb.SheetNames.length; ++i2)
@@ -33073,7 +34179,7 @@
33073
34179
  manifest.push([f, "text/xml"]);
33074
34180
  rdf.push([f, "StylesFile"]);
33075
34181
  f = "meta.xml";
33076
- zip_add_file(zip, f, write_meta_ods());
34182
+ zip_add_file(zip, f, XML_HEADER + write_meta_ods());
33077
34183
  manifest.push([f, "text/xml"]);
33078
34184
  rdf.push([f, "MetadataFile"]);
33079
34185
  f = "manifest.rdf";
@@ -33106,6 +34212,7 @@
33106
34212
  var write_txt_str = write_obj_str({ from_sheet: sheet_to_txt });
33107
34213
  var write_dbf_buf = write_obj_str(typeof DBF !== "undefined" ? DBF : {});
33108
34214
  var write_eth_str = write_obj_str(typeof ETH !== "undefined" ? ETH : {});
34215
+ var write_wk1_buf = write_obj_str(typeof WK_ !== "undefined" ? { from_sheet: WK_.sheet_to_wk1 } : {});
33109
34216
  function fix_opts_func(defaults) {
33110
34217
  return function fix_opts(opts) {
33111
34218
  for (var i2 = 0; i2 != defaults.length; ++i2) {
@@ -33227,6 +34334,13 @@
33227
34334
  return parse_ods(zip, opts);
33228
34335
  if (safegetzipfile(zip, "Index/Document.iwa"))
33229
34336
  throw new Error("Unsupported NUMBERS file");
34337
+ if (!safegetzipfile(zip, "[Content_Types].xml")) {
34338
+ if (safegetzipfile(zip, "index.xml.gz"))
34339
+ throw new Error("Unsupported NUMBERS 08 file");
34340
+ if (safegetzipfile(zip, "index.xml"))
34341
+ throw new Error("Unsupported NUMBERS 09 file");
34342
+ throw new Error("Unsupported ZIP file");
34343
+ }
33230
34344
  var entries = zipentries(zip);
33231
34345
  var dir = parse_ct(getzipstr(zip, "[Content_Types].xml"));
33232
34346
  var xlsb = false;
@@ -33383,8 +34497,18 @@
33383
34497
  SSF: SSF.get_table()
33384
34498
  };
33385
34499
  if (opts && opts.bookFiles) {
33386
- out.keys = entries;
33387
- out.files = zip.files;
34500
+ if (zip.files) {
34501
+ out.keys = entries;
34502
+ out.files = zip.files;
34503
+ } else {
34504
+ out.keys = [];
34505
+ out.files = {};
34506
+ zip.FullPaths.forEach(function(p, idx) {
34507
+ p = p.replace(/^Root Entry[\/]/, "");
34508
+ out.keys.push(p);
34509
+ out.files[p] = zip.FileIndex[idx];
34510
+ });
34511
+ }
33388
34512
  }
33389
34513
  if (opts && opts.bookVBA) {
33390
34514
  if (dir.vba.length > 0)
@@ -33653,10 +34777,10 @@
33653
34777
  }
33654
34778
  function readSync(data, opts) {
33655
34779
  reset_cp();
34780
+ var o = opts || {};
33656
34781
  if (typeof ArrayBuffer !== "undefined" && data instanceof ArrayBuffer)
33657
- return readSync(new Uint8Array(data), opts);
34782
+ return readSync(new Uint8Array(data), (o = dup(o), o.type = "array", o));
33658
34783
  var d = data, n = [0, 0, 0, 0], str = false;
33659
- var o = opts || {};
33660
34784
  if (o.cellStyles) {
33661
34785
  o.cellNF = true;
33662
34786
  o.sheetStubs = true;
@@ -33691,12 +34815,14 @@
33691
34815
  return read_cfb(CFB.read(d, o), o);
33692
34816
  break;
33693
34817
  case 9:
33694
- if (n[1] <= 4)
34818
+ if (n[1] <= 8)
33695
34819
  return parse_xlscfb(d, o);
33696
34820
  break;
33697
34821
  case 60:
33698
34822
  return parse_xlml(d, o);
33699
34823
  case 73:
34824
+ if (n[1] === 73 && n[2] === 42 && n[3] === 0)
34825
+ throw new Error("TIFF Image File is not a spreadsheet");
33700
34826
  if (n[1] === 68)
33701
34827
  return read_wb_ID(d, o);
33702
34828
  break;
@@ -33711,11 +34837,16 @@
33711
34837
  case 255:
33712
34838
  if (n[1] === 254) {
33713
34839
  return read_utf16(d, o);
33714
- }
34840
+ } else if (n[1] === 0 && n[2] === 2 && n[3] === 0)
34841
+ return WK_.to_workbook(d, o);
33715
34842
  break;
33716
34843
  case 0:
33717
- if (n[1] === 0 && n[2] >= 2 && n[3] === 0)
33718
- return WK_.to_workbook(d, o);
34844
+ if (n[1] === 0) {
34845
+ if (n[2] >= 2 && n[3] === 0)
34846
+ return WK_.to_workbook(d, o);
34847
+ if (n[2] === 0 && (n[3] === 8 || n[3] === 9))
34848
+ return WK_.to_workbook(d, o);
34849
+ }
33719
34850
  break;
33720
34851
  case 3:
33721
34852
  case 131:
@@ -33730,6 +34861,10 @@
33730
34861
  case 13:
33731
34862
  case 32:
33732
34863
  return read_plaintext_raw(d, o);
34864
+ case 137:
34865
+ if (n[1] === 80 && n[2] === 78 && n[3] === 71)
34866
+ throw new Error("PNG Image File is not a spreadsheet");
34867
+ break;
33733
34868
  }
33734
34869
  if (DBF.versions.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31)
33735
34870
  return DBF.to_workbook(d, o);
@@ -33759,7 +34894,7 @@
33759
34894
  return CFB.write(cfb, o);
33760
34895
  }
33761
34896
  function write_zip_type(wb, opts) {
33762
- var o = opts || {};
34897
+ var o = dup(opts || {});
33763
34898
  var z = write_zip(wb, o);
33764
34899
  var oopts = {};
33765
34900
  if (o.compression)
@@ -33860,7 +34995,7 @@
33860
34995
  function writeSync(wb, opts) {
33861
34996
  reset_cp();
33862
34997
  check_wb(wb);
33863
- var o = opts || {};
34998
+ var o = dup(opts || {});
33864
34999
  if (o.cellStyles) {
33865
35000
  o.cellNF = true;
33866
35001
  o.sheetStubs = true;
@@ -33897,6 +35032,10 @@
33897
35032
  return write_string_type(write_eth_str(wb, o), o);
33898
35033
  case "fods":
33899
35034
  return write_string_type(write_ods(wb, o), o);
35035
+ case "wk1":
35036
+ return write_binary_type(write_wk1_buf(wb, o), o);
35037
+ case "wk3":
35038
+ return write_binary_type(WK_.book_to_wk3(wb, o), o);
33900
35039
  case "biff2":
33901
35040
  if (!o.biff)
33902
35041
  o.biff = 2;
@@ -33992,7 +35131,7 @@
33992
35131
  break;
33993
35132
  continue;
33994
35133
  case "e":
33995
- v = void 0;
35134
+ v = v == 0 ? null : void 0;
33996
35135
  break;
33997
35136
  case "s":
33998
35137
  case "d":
@@ -34004,7 +35143,9 @@
34004
35143
  }
34005
35144
  if (hdr[C] != null) {
34006
35145
  if (v == null) {
34007
- if (defval !== void 0)
35146
+ if (val.t == "e" && v === null)
35147
+ row[hdr[C]] = null;
35148
+ else if (defval !== void 0)
34008
35149
  row[hdr[C]] = defval;
34009
35150
  else if (raw && v === null)
34010
35151
  row[hdr[C]] = null;
@@ -34263,6 +35404,9 @@
34263
35404
  v = datenum(v);
34264
35405
  }
34265
35406
  z = o.dateNF || SSF._table[14];
35407
+ } else if (v === null && o.nullError) {
35408
+ t = "e";
35409
+ v = 0;
34266
35410
  }
34267
35411
  if (!cell)
34268
35412
  ws[ref] = cell = { t, v };
@@ -34434,7 +35578,12 @@
34434
35578
  })(utils2);
34435
35579
  if (has_buf && typeof __require != "undefined")
34436
35580
  (function() {
34437
- var Readable = require_stream().Readable;
35581
+ var strmod = require_stream();
35582
+ if (!strmod)
35583
+ return;
35584
+ var Readable = strmod.Readable;
35585
+ if (!Readable)
35586
+ return;
34438
35587
  var write_csv_stream = function(sheet, opts) {
34439
35588
  var stream = Readable();
34440
35589
  var o = opts == null ? {} : opts;
@@ -34605,13 +35754,18 @@
34605
35754
  else if (typeof module !== "undefined" && module.exports)
34606
35755
  make_xlsx_lib(module.exports);
34607
35756
  else if (typeof define === "function" && define.amd)
34608
- define(function() {
35757
+ define("xlsx", function() {
34609
35758
  if (!XLSX.version)
34610
35759
  make_xlsx_lib(XLSX);
34611
35760
  return XLSX;
34612
35761
  });
34613
35762
  else
34614
35763
  make_xlsx_lib(XLSX);
35764
+ if (typeof window !== "undefined" && !window.XLSX)
35765
+ try {
35766
+ window.XLSX = XLSX;
35767
+ } catch (e) {
35768
+ }
34615
35769
  }
34616
35770
  });
34617
35771
 
@@ -34651,16 +35805,33 @@
34651
35805
  }
34652
35806
 
34653
35807
  // ../worker-utils/src/lib/worker-farm/worker-body.ts
35808
+ function getParentPort() {
35809
+ let parentPort;
35810
+ try {
35811
+ eval("globalThis.parentPort = require('worker_threads').parentPort");
35812
+ parentPort = globalThis.parentPort;
35813
+ } catch {
35814
+ }
35815
+ return parentPort;
35816
+ }
34654
35817
  var onMessageWrapperMap = new Map();
34655
35818
  var WorkerBody = class {
35819
+ static inWorkerThread() {
35820
+ return typeof self !== "undefined" || Boolean(getParentPort());
35821
+ }
34656
35822
  static set onmessage(onMessage) {
34657
- self.onmessage = (message) => {
34658
- if (!isKnownMessage(message)) {
34659
- return;
34660
- }
34661
- const { type, payload } = message.data;
35823
+ function handleMessage(message) {
35824
+ const parentPort3 = getParentPort();
35825
+ const { type, payload } = parentPort3 ? message : message.data;
34662
35826
  onMessage(type, payload);
34663
- };
35827
+ }
35828
+ const parentPort2 = getParentPort();
35829
+ if (parentPort2) {
35830
+ parentPort2.on("message", handleMessage);
35831
+ parentPort2.on("exit", () => console.debug("Node worker closing"));
35832
+ } else {
35833
+ globalThis.onmessage = handleMessage;
35834
+ }
34664
35835
  }
34665
35836
  static addEventListener(onMessage) {
34666
35837
  let onMessageWrapper = onMessageWrapperMap.get(onMessage);
@@ -34669,22 +35840,36 @@
34669
35840
  if (!isKnownMessage(message)) {
34670
35841
  return;
34671
35842
  }
34672
- const { type, payload } = message.data;
35843
+ const parentPort3 = getParentPort();
35844
+ const { type, payload } = parentPort3 ? message : message.data;
34673
35845
  onMessage(type, payload);
34674
35846
  };
34675
35847
  }
34676
- self.addEventListener("message", onMessageWrapper);
35848
+ const parentPort2 = getParentPort();
35849
+ if (parentPort2) {
35850
+ console.error("not implemented");
35851
+ } else {
35852
+ globalThis.addEventListener("message", onMessageWrapper);
35853
+ }
34677
35854
  }
34678
35855
  static removeEventListener(onMessage) {
34679
35856
  const onMessageWrapper = onMessageWrapperMap.get(onMessage);
34680
35857
  onMessageWrapperMap.delete(onMessage);
34681
- self.removeEventListener("message", onMessageWrapper);
35858
+ const parentPort2 = getParentPort();
35859
+ if (parentPort2) {
35860
+ console.error("not implemented");
35861
+ } else {
35862
+ globalThis.removeEventListener("message", onMessageWrapper);
35863
+ }
34682
35864
  }
34683
35865
  static postMessage(type, payload) {
34684
- if (self) {
34685
- const data = { source: "loaders.gl", type, payload };
34686
- const transferList = getTransferList(payload);
34687
- self.postMessage(data, transferList);
35866
+ const data = { source: "loaders.gl", type, payload };
35867
+ const transferList = getTransferList(payload);
35868
+ const parentPort2 = getParentPort();
35869
+ if (parentPort2) {
35870
+ parentPort2.postMessage(data, transferList);
35871
+ } else {
35872
+ globalThis.postMessage(data, transferList);
34688
35873
  }
34689
35874
  }
34690
35875
  };
@@ -34696,19 +35881,20 @@
34696
35881
  // ../loader-utils/src/lib/worker-loader-utils/create-loader-worker.ts
34697
35882
  var requestId = 0;
34698
35883
  function createLoaderWorker(loader) {
34699
- if (typeof self === "undefined") {
35884
+ if (!WorkerBody.inWorkerThread()) {
34700
35885
  return;
34701
35886
  }
34702
35887
  WorkerBody.onmessage = async (type, payload) => {
34703
35888
  switch (type) {
34704
35889
  case "process":
34705
35890
  try {
34706
- const { input, options = {} } = payload;
35891
+ const { input, options = {}, context = {} } = payload;
34707
35892
  const result = await parseData({
34708
35893
  loader,
34709
35894
  arrayBuffer: input,
34710
35895
  options,
34711
35896
  context: {
35897
+ ...context,
34712
35898
  parse: parseOnMainThread
34713
35899
  }
34714
35900
  });
@@ -34768,7 +35954,7 @@
34768
35954
  }
34769
35955
 
34770
35956
  // src/excel-loader.ts
34771
- var VERSION = true ? "4.0.0-alpha.5" : "latest";
35957
+ var VERSION = true ? "4.0.0-alpha.7" : "latest";
34772
35958
  var DEFAULT_EXCEL_LOADER_OPTIONS = {
34773
35959
  excel: {
34774
35960
  shape: "object-row-table",
@@ -34794,7 +35980,7 @@
34794
35980
  // src/lib/parse-excel.ts
34795
35981
  var import_xlsx = __toModule(require_xlsx());
34796
35982
  var dataTableNamesMap = {};
34797
- async function parseExcel(arrayBuffer, options) {
35983
+ function parseExcel(arrayBuffer, options) {
34798
35984
  const dataUrl = "dummy";
34799
35985
  const workbook = (0, import_xlsx.read)(arrayBuffer, {
34800
35986
  type: "array"
@@ -34818,10 +36004,15 @@
34818
36004
  // src/index.ts
34819
36005
  var ExcelLoader2 = {
34820
36006
  ...ExcelLoader,
34821
- parse: (arrayBuffer, options) => parseExcel(arrayBuffer, options)
36007
+ async parse(arrayBuffer, options) {
36008
+ const data = parseExcel(arrayBuffer, options);
36009
+ return { shape: "object-row-table", data };
36010
+ }
34822
36011
  };
34823
36012
 
34824
36013
  // src/workers/excel-worker.ts
34825
36014
  createLoaderWorker(ExcelLoader2);
34826
36015
  })();
36016
+ /*! cpexcel.js (C) 2013-present SheetJS -- http://sheetjs.com */
36017
+ /*! cputils.js (C) 2013-present SheetJS -- http://sheetjs.com */
34827
36018
  /*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */