Skip to content

Commit cb8046c

Browse files
committed
arithmancy
1 parent bb99765 commit cb8046c

22 files changed

+332
-9154
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ tmp
2727
*.[bB][iI][fF][fF][23458]
2828
*.[rR][tT][fF]
2929
*.[eE][tT][hH]
30+
*.[nN][uU][mM][bB][eE][rR][sS]
3031
*.123
3132
*.htm
3233
*.html

.npmignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
test_files/
2+
modules/
23
packages/
34
.github/
45
tests/files/

.spelling

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ VueJS
5151
WebSQL
5252
WK_
5353
iOS
54+
iWork
5455
nodejs
5556
node.js
5657
npm

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ changes may not be included if they are not expected to break existing code.
77
## v0.18.0
88

99
* Browser scripts only expose `XLSX` variable
10+
* Module no longer ships with `dist/jszip.js` browser script
1011

1112
## v0.17.4
1213

Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ dist: dist-deps $(TARGET) bower.json ## Prepare JS files for distribution
9494
dist-deps: ## Copy dependencies for distribution
9595
mkdir -p dist
9696
cp node_modules/codepage/dist/cpexcel.full.js dist/cpexcel.js
97-
cp jszip.js dist/jszip.js
9897

9998
.PHONY: aux
10099
aux: $(AUXTARGETS)

bits/83_numbers.js

Lines changed: 78 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ var NUMBERS = (function() {
5454
});
5555
return out;
5656
};
57+
var popcnt = function(x) {
58+
x -= x >> 1 & 1431655765;
59+
x = (x & 858993459) + (x >> 2 & 858993459);
60+
return (x + (x >> 4) & 252645135) * 16843009 >>> 24;
61+
};
5762

5863
// src/proto.ts
5964
function parse_varint49(buf, ptr) {
@@ -126,12 +131,16 @@ var NUMBERS = (function() {
126131
break;
127132
case 5:
128133
len = 4;
134+
res = buf.slice(ptr[0], ptr[0] + len);
135+
ptr[0] += len;
136+
break;
129137
case 1:
130-
if (!len)
131-
len = 8;
138+
len = 8;
139+
res = buf.slice(ptr[0], ptr[0] + len);
140+
ptr[0] += len;
141+
break;
132142
case 2:
133-
if (!len)
134-
len = parse_varint49(buf, ptr);
143+
len = parse_varint49(buf, ptr);
135144
res = buf.slice(ptr[0], ptr[0] + len);
136145
ptr[0] += len;
137146
break;
@@ -140,7 +149,7 @@ var NUMBERS = (function() {
140149
default:
141150
throw new Error("PB Type ".concat(type, " for Field ").concat(num, " at offset ").concat(off));
142151
}
143-
var v = { offset: off, data: res };
152+
var v = { offset: off, data: res, type: type };
144153
if (out[num] == null)
145154
out[num] = [v];
146155
else
@@ -172,14 +181,14 @@ var NUMBERS = (function() {
172181
var t = buf[l++];
173182
var len = buf[l] | buf[l + 1] << 8 | buf[l + 2] << 16;
174183
l += 3;
175-
out.push(process_chunk(t, buf.slice(l, l + len)));
184+
out.push(parse_snappy_chunk(t, buf.slice(l, l + len)));
176185
l += len;
177186
}
178187
if (l !== buf.length)
179188
throw new Error("data is not a valid framed stream!");
180189
return u8concat(out);
181190
}
182-
function process_chunk(type, buf) {
191+
function parse_snappy_chunk(type, buf) {
183192
if (type != 0)
184193
throw new Error("Unexpected Snappy chunk type ".concat(type));
185194
var ptr = [0];
@@ -270,6 +279,62 @@ var NUMBERS = (function() {
270279
return out;
271280
}
272281

282+
// src/prebnccell.ts
283+
function parseit(buf, version) {
284+
var dv = u8_to_dataview(buf);
285+
var ctype = buf[version == 4 ? 1 : 2];
286+
var flags = dv.getUint32(4, true);
287+
var data_offset = 12 + popcnt(flags & 16270) * 4;
288+
var sidx = -1, ieee = NaN, dt = NaN;
289+
if (flags & 16) {
290+
sidx = dv.getUint32(data_offset, true);
291+
data_offset += 4;
292+
}
293+
if (flags & 32) {
294+
ieee = dv.getFloat64(data_offset, true);
295+
data_offset += 8;
296+
}
297+
if (flags & 64) {
298+
dt = dv.getFloat64(data_offset, true);
299+
data_offset += 8;
300+
}
301+
var ret;
302+
switch (ctype) {
303+
case 0:
304+
break;
305+
case 2:
306+
ret = { t: "n", v: ieee };
307+
break;
308+
case 3:
309+
ret = { t: "s", v: sidx };
310+
break;
311+
case 5:
312+
var dd = new Date(2001, 0, 1);
313+
dd.setTime(dd.getTime() + dt * 1e3);
314+
ret = { t: "d", v: dd };
315+
break;
316+
case 6:
317+
ret = { t: "b", v: ieee > 0 };
318+
break;
319+
case 7:
320+
ret = { t: "n", v: ieee };
321+
break;
322+
default:
323+
throw new Error("Unsupported cell type ".concat(buf.slice(0, 4)));
324+
}
325+
return ret;
326+
}
327+
function parse(buf) {
328+
var version = buf[0];
329+
switch (version) {
330+
case 3:
331+
case 4:
332+
return parseit(buf, version);
333+
default:
334+
throw new Error("Unsupported pre-BNC version ".concat(version));
335+
}
336+
}
337+
273338
// src/numbers.ts
274339
var encode_col = function(C) {
275340
var s = "";
@@ -343,7 +408,7 @@ var NUMBERS = (function() {
343408
var pb = parse_shallow(root.data);
344409
var entries = pb[3];
345410
var data = [];
346-
entries == null ? void 0 : entries.forEach(function(entry) {
411+
(entries || []).forEach(function(entry) {
347412
var le = parse_shallow(entry.data);
348413
var key = varint_to_i32(le[1][0].data) >>> 0;
349414
data[key] = u8str(le[3][0].data);
@@ -405,50 +470,12 @@ var NUMBERS = (function() {
405470
tiles.forEach(function(tile2) {
406471
tile2.ref.forEach(function(row, R) {
407472
row.forEach(function(buf, C) {
408-
var dv = u8_to_dataview(buf);
409-
var ctype = buf[2];
410473
var addr = encode_cell({ r: R, c: C });
411-
switch (ctype) {
412-
case 0:
413-
{
414-
switch (buf[1]) {
415-
case 3:
416-
ws[addr] = { t: "s", v: sst[dv.getUint32(buf.length - 4, true)] };
417-
break;
418-
case 2:
419-
ws[addr] = { t: "n", v: dv.getFloat64(16, true) };
420-
break;
421-
case 0:
422-
break;
423-
case 5:
424-
break;
425-
case 7:
426-
break;
427-
case 6:
428-
ws[addr] = { t: "b", v: dv.getFloat64(buf.length - 8, true) > 0 };
429-
break;
430-
default:
431-
throw new Error("Unsupported cell type ".concat(buf.slice(0, 4)));
432-
}
433-
}
434-
break;
435-
case 3:
436-
{
437-
ws[addr] = { t: "s", v: sst[dv.getUint32(16, true)] };
438-
}
439-
break;
440-
case 2:
441-
{
442-
ws[addr] = { t: "n", v: dv.getFloat64(buf.length - 12, true) };
443-
}
444-
break;
445-
case 6:
446-
{
447-
ws[addr] = { t: "b", v: dv.getFloat64(16, true) > 0 };
448-
}
449-
break;
450-
default:
451-
throw new Error("Unsupported cell type ".concat(ctype));
474+
var res = parse(buf);
475+
if (res) {
476+
ws[addr] = res;
477+
if (res.t == "s" && typeof res.v == "number")
478+
res.v = sst[res.v];
452479
}
453480
});
454481
});

bits/85_parsezip.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ function parse_zip(zip/*:ZIP*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
6161
if(safegetzipfile(zip, 'objectdata.xml')) return parse_ods(zip, opts);
6262
/* Numbers */
6363
if(safegetzipfile(zip, 'Index/Document.iwa')) {
64-
if(typeof Uint8Array == "undefined") throw new Error('NUMBERS file parsing requires Uint8Array support')
64+
if(typeof Uint8Array == "undefined") throw new Error('NUMBERS file parsing requires Uint8Array support');
6565
if(typeof NUMBERS != "undefined") {
6666
if(zip.FileIndex) return NUMBERS.parse_numbers(zip);
6767
var _zip = CFB.utils.cfb_new();

0 commit comments

Comments
 (0)