forked from sheetjs/sheetjs
NUMBERS read/write threaded comments
This commit is contained in:
parent
6e260c9185
commit
36c5b7c0f5
@ -374,7 +374,7 @@ function write_comments_biff8(ba/*:BufArray*/, comments/*:Array<[Comment[], numb
|
||||
}
|
||||
}
|
||||
}
|
||||
write_biff_rec(ba, 0x00EC, /* hdr */ bconcat([hdr, _oasc]));
|
||||
write_biff_rec(ba, 0x00EC, /* hdr */ _oasc ? bconcat([hdr, _oasc]) : hdr);
|
||||
}
|
||||
ba.push(pl.end());
|
||||
notes.forEach(function(n) { write_biff_rec(ba, 0x001C, n); });
|
||||
|
@ -739,98 +739,133 @@ function parse_new_storage(buf, lut) {
|
||||
ret.v /= 86400;
|
||||
return ret;
|
||||
}
|
||||
function write_new_storage(cell, sst, rsst) {
|
||||
var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;
|
||||
function write_new_storage(cell, lut) {
|
||||
var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, fields = 0;
|
||||
out[0] = 5;
|
||||
switch (cell.t) {
|
||||
case "n":
|
||||
out[1] = 2;
|
||||
writeDecimal128LE(out, l, cell.v);
|
||||
flags |= 1;
|
||||
fields |= 1;
|
||||
l += 16;
|
||||
break;
|
||||
case "b":
|
||||
out[1] = 6;
|
||||
dv.setFloat64(l, cell.v ? 1 : 0, true);
|
||||
flags |= 2;
|
||||
fields |= 2;
|
||||
l += 8;
|
||||
break;
|
||||
case "s":
|
||||
{
|
||||
var s = cell.v == null ? "" : String(cell.v);
|
||||
if (cell.l) {
|
||||
var irsst = rsst.findIndex(function(v) {
|
||||
var irsst = lut.rsst.findIndex(function(v) {
|
||||
var _a;
|
||||
return v.v == s && v.l == ((_a = cell.l) == null ? void 0 : _a.Target);
|
||||
});
|
||||
if (irsst == -1)
|
||||
rsst[irsst = rsst.length] = { v: s, l: cell.l.Target };
|
||||
lut.rsst[irsst = lut.rsst.length] = { v: s, l: cell.l.Target };
|
||||
out[1] = 9;
|
||||
dv.setUint32(l, irsst, true);
|
||||
flags |= 16;
|
||||
fields |= 16;
|
||||
l += 4;
|
||||
} else {
|
||||
var isst = sst.indexOf(s);
|
||||
var isst = lut.sst.indexOf(s);
|
||||
if (isst == -1)
|
||||
sst[isst = sst.length] = s;
|
||||
lut.sst[isst = lut.sst.length] = s;
|
||||
out[1] = 3;
|
||||
dv.setUint32(l, isst, true);
|
||||
flags |= 8;
|
||||
fields |= 8;
|
||||
l += 4;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "z":
|
||||
out[1] = 0;
|
||||
break;
|
||||
default:
|
||||
throw "unsupported cell type " + cell.t;
|
||||
}
|
||||
dv.setUint32(8, flags, true);
|
||||
if (cell.c) {
|
||||
lut.cmnt.push(s5s_to_iwa_comment(cell.c));
|
||||
dv.setUint32(l, lut.cmnt.length - 1, true);
|
||||
fields |= 524288;
|
||||
l += 4;
|
||||
}
|
||||
dv.setUint32(8, fields, true);
|
||||
return out[subarray](0, l);
|
||||
}
|
||||
function write_old_storage(cell, sst, rsst) {
|
||||
var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;
|
||||
function write_old_storage(cell, lut) {
|
||||
var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, fields = 0;
|
||||
out[0] = 4;
|
||||
switch (cell.t) {
|
||||
case "n":
|
||||
break;
|
||||
case "b":
|
||||
break;
|
||||
case "s":
|
||||
{
|
||||
var s = cell.v == null ? "" : String(cell.v);
|
||||
if (cell.l) {
|
||||
var irsst = lut.rsst.findIndex(function(v) {
|
||||
var _a;
|
||||
return v.v == s && v.l == ((_a = cell.l) == null ? void 0 : _a.Target);
|
||||
});
|
||||
if (irsst == -1)
|
||||
lut.rsst[irsst = lut.rsst.length] = { v: s, l: cell.l.Target };
|
||||
out[1] = 9;
|
||||
dv.setUint32(l, irsst, true);
|
||||
fields |= 512;
|
||||
l += 4;
|
||||
} else {
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "z":
|
||||
break;
|
||||
default:
|
||||
throw "unsupported cell type " + cell.t;
|
||||
}
|
||||
if (cell.c) {
|
||||
dv.setUint32(l, lut.cmnt.length - 1, true);
|
||||
fields |= 4096;
|
||||
l += 4;
|
||||
}
|
||||
switch (cell.t) {
|
||||
case "n":
|
||||
out[1] = 2;
|
||||
dv.setFloat64(l, cell.v, true);
|
||||
flags |= 32;
|
||||
fields |= 32;
|
||||
l += 8;
|
||||
break;
|
||||
case "b":
|
||||
out[1] = 6;
|
||||
dv.setFloat64(l, cell.v ? 1 : 0, true);
|
||||
flags |= 32;
|
||||
fields |= 32;
|
||||
l += 8;
|
||||
break;
|
||||
case "s":
|
||||
{
|
||||
var s = cell.v == null ? "" : String(cell.v);
|
||||
if (cell.l) {
|
||||
var irsst = rsst.findIndex(function(v) {
|
||||
var _a;
|
||||
return v.v == s && v.l == ((_a = cell.l) == null ? void 0 : _a.Target);
|
||||
});
|
||||
if (irsst == -1)
|
||||
rsst[irsst = rsst.length] = { v: s, l: cell.l.Target };
|
||||
out[1] = 9;
|
||||
dv.setUint32(l, irsst, true);
|
||||
flags |= 512;
|
||||
l += 4;
|
||||
} else {
|
||||
var isst = sst.indexOf(s);
|
||||
var isst = lut.sst.indexOf(s);
|
||||
if (isst == -1)
|
||||
sst[isst = sst.length] = s;
|
||||
lut.sst[isst = lut.sst.length] = s;
|
||||
out[1] = 3;
|
||||
dv.setUint32(l, isst, true);
|
||||
flags |= 16;
|
||||
fields |= 16;
|
||||
l += 4;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "z":
|
||||
out[1] = 0;
|
||||
break;
|
||||
default:
|
||||
throw "unsupported cell type " + cell.t;
|
||||
}
|
||||
dv.setUint32(8, flags, true);
|
||||
dv.setUint32(8, fields, true);
|
||||
return out[subarray](0, l);
|
||||
}
|
||||
function parse_cell_storage(buf, lut) {
|
||||
@ -1035,6 +1070,18 @@ function iwa_to_s5s_comment(iwa) {
|
||||
});
|
||||
return out;
|
||||
}
|
||||
function s5s_to_iwa_comment(s5s) {
|
||||
var out = { a: "", t: "", replies: [] };
|
||||
for (var i = 0; i < s5s.length; ++i) {
|
||||
if (i == 0) {
|
||||
out.a = s5s[i].a;
|
||||
out.t = s5s[i].t;
|
||||
} else {
|
||||
out.replies.push({ a: s5s[i].a, t: s5s[i].t });
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
function parse_TST_TableModelArchive(M, root, ws) {
|
||||
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
||||
var pb = parse_shallow(root.data);
|
||||
@ -1208,8 +1255,8 @@ function parse_numbers_iwa(cfb, opts) {
|
||||
throw new Error("Cannot find Document root");
|
||||
return parse_TN_DocumentArchive(M, docroot, opts);
|
||||
}
|
||||
function write_TST_TileRowInfo(data, SST, RSST, wide) {
|
||||
var _a, _b;
|
||||
function write_TST_TileRowInfo(data, lut, wide) {
|
||||
var _a, _b, _c;
|
||||
var tri = [
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
@ -1242,7 +1289,7 @@ function write_TST_TileRowInfo(data, SST, RSST, wide) {
|
||||
var _dv = u8_to_dataview(tri[4][0].data), _last_offset = 0, _cell_storage = [];
|
||||
var width = wide ? 4 : 1;
|
||||
for (var C = 0; C < data.length; ++C) {
|
||||
if (data[C] == null || data[C].t == "z" || data[C].t == "e") {
|
||||
if (data[C] == null || data[C].t == "z" && !((_c = data[C].c) == null ? void 0 : _c.length) || data[C].t == "e") {
|
||||
dv.setUint16(C * 2, 65535, true);
|
||||
_dv.setUint16(C * 2, 65535);
|
||||
continue;
|
||||
@ -1253,18 +1300,19 @@ function write_TST_TileRowInfo(data, SST, RSST, wide) {
|
||||
switch (data[C].t) {
|
||||
case "d":
|
||||
if (data[C].v instanceof Date) {
|
||||
celload = write_new_storage({ t: "s", v: data[C].v.toISOString() }, SST, RSST);
|
||||
_celload = write_old_storage({ t: "s", v: data[C].v.toISOString() }, SST, RSST);
|
||||
celload = write_new_storage({ t: "s", v: data[C].v.toISOString() }, lut);
|
||||
_celload = write_old_storage({ t: "s", v: data[C].v.toISOString() }, lut);
|
||||
break;
|
||||
}
|
||||
celload = write_new_storage(data[C], SST, RSST);
|
||||
_celload = write_old_storage(data[C], SST, RSST);
|
||||
celload = write_new_storage(data[C], lut);
|
||||
_celload = write_old_storage(data[C], lut);
|
||||
break;
|
||||
case "s":
|
||||
case "n":
|
||||
case "b":
|
||||
celload = write_new_storage(data[C], SST, RSST);
|
||||
_celload = write_old_storage(data[C], SST, RSST);
|
||||
case "z":
|
||||
celload = write_new_storage(data[C], lut);
|
||||
_celload = write_old_storage(data[C], lut);
|
||||
break;
|
||||
default:
|
||||
throw new Error("Unsupported value " + data[C]);
|
||||
@ -1344,6 +1392,34 @@ function build_numbers_deps(cfb) {
|
||||
});
|
||||
return dependents;
|
||||
}
|
||||
function write_TSP_Color_RGB(r, g, b) {
|
||||
return write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(1) }],
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(Float32Array.from([r / 255]).buffer) }],
|
||||
[{ type: 5, data: new Uint8Array(Float32Array.from([g / 255]).buffer) }],
|
||||
[{ type: 5, data: new Uint8Array(Float32Array.from([b / 255]).buffer) }],
|
||||
[{ type: 5, data: new Uint8Array(Float32Array.from([1]).buffer) }],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(1) }]
|
||||
]);
|
||||
}
|
||||
function get_author_color(n) {
|
||||
switch (n) {
|
||||
case 0:
|
||||
return write_TSP_Color_RGB(99, 222, 171);
|
||||
case 1:
|
||||
return write_TSP_Color_RGB(162, 197, 240);
|
||||
case 2:
|
||||
return write_TSP_Color_RGB(255, 189, 189);
|
||||
}
|
||||
return write_TSP_Color_RGB(Math.random() * 255, Math.random() * 255, Math.random() * 255);
|
||||
}
|
||||
function write_numbers_iwa(wb, opts) {
|
||||
if (!opts || !opts.numbers)
|
||||
throw new Error("Must pass a `numbers` option -- check the README");
|
||||
@ -1387,6 +1463,24 @@ function numbers_iwa_find(cfb, deps, id) {
|
||||
});
|
||||
return ainfo;
|
||||
}
|
||||
function numbers_add_meta(mlist, newid, newloc) {
|
||||
mlist[3].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newid) }],
|
||||
[{ type: 2, data: stru8(newloc.replace(/-.*$/, "")) }],
|
||||
[{ type: 2, data: stru8(newloc) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }]
|
||||
]) });
|
||||
mlist[1] = [{ type: 0, data: write_varint49(Math.max(newid + 1, varint_to_i32(mlist[1][0].data))) }];
|
||||
}
|
||||
function numbers_add_msg(cfb, type, msg, path, deps, id) {
|
||||
if (!id)
|
||||
id = get_unique_msgid({ deps: [], location: "", type: type }, deps);
|
||||
@ -1399,26 +1493,55 @@ function numbers_add_msg(cfb, type, msg, path, deps, id) {
|
||||
var newloc = loc.replace(/^[\/]/, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
mlist[3].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(id) }],
|
||||
[{ type: 2, data: stru8(newloc.replace(/-.*$/, "")) }],
|
||||
[{ type: 2, data: stru8(newloc) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }]
|
||||
]) });
|
||||
mlist[1] = [{ type: 0, data: write_varint49(Math.max(id + 1, varint_to_i32(mlist[1][0].data))) }];
|
||||
numbers_add_meta(mlist, id || 0, newloc);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
return id;
|
||||
}
|
||||
function numbers_meta_add_dep(mlist, deps, id, dep) {
|
||||
var loc = deps[id].location.replace(/^Root Entry\//, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a, _b;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a = mm[3]) == null ? void 0 : _a[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
(Array.isArray(dep) ? dep : [dep]).forEach(function(dep2) {
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(dep2) }]
|
||||
])
|
||||
});
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
}
|
||||
function numbers_meta_del_dep(mlist, deps, id, dep) {
|
||||
var loc = deps[id].location.replace(/^Root Entry\//, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a, _b;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a = mm[3]) == null ? void 0 : _a[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6] = parent[6].filter(function(m) {
|
||||
return varint_to_i32(parse_shallow(m.data)[1][0].data) != dep;
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
}
|
||||
function numbers_add_ws(cfb, deps, wsidx) {
|
||||
var sheetref = -1, newsheetref = -1;
|
||||
var remap = {};
|
||||
@ -1457,31 +1580,9 @@ function numbers_add_ws(cfb, deps, wsidx) {
|
||||
if (deps[drawables[0]].location == deps[newsheetref].location)
|
||||
arch.push(tia);
|
||||
else {
|
||||
var loc2 = deps[newsheetref].location;
|
||||
loc2 = loc2.replace(/^Root Entry\//, "");
|
||||
loc2 = loc2.replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a, _b;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a = mm[3]) == null ? void 0 : _a[0])
|
||||
return u8str(mm[3][0].data) == loc2;
|
||||
if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc2)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(tiaref) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, newsheetref, tiaref);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
numbers_iwa_doit(cfb, deps, tiaref, function(_, x) {
|
||||
@ -1515,9 +1616,6 @@ function numbers_add_ws(cfb, deps, wsidx) {
|
||||
});
|
||||
tiaroot.messages[0].data = write_shallow(tia);
|
||||
});
|
||||
var loc = deps[tmaref].location;
|
||||
loc = loc.replace(/^Root Entry\//, "");
|
||||
loc = loc.replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
numbers_iwa_doit(cfb, deps, tmaref, function(tmaroot, arch) {
|
||||
var _a, _b;
|
||||
var tma = parse_shallow(tmaroot.messages[0].data);
|
||||
@ -1599,47 +1697,11 @@ function numbers_add_ws(cfb, deps, wsidx) {
|
||||
if (deps[newref].location == deps[oldref].location)
|
||||
deps[newref].location = deps[newref].location.replace(/\.iwa/, "-".concat(newref, ".iwa"));
|
||||
CFB.utils.cfb_add(cfb, deps[newref].location, compress_iwa_file(write_iwa_file([msg])));
|
||||
var newloc = deps[newref].location;
|
||||
newloc = newloc.replace(/^Root Entry\//, "");
|
||||
newloc = newloc.replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
var newloc = deps[newref].location.replace(/^Root Entry\//, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
mlist[3].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newref) }],
|
||||
[{ type: 2, data: stru8(newloc.replace(/-.*$/, "")) }],
|
||||
[{ type: 2, data: stru8(newloc) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }]
|
||||
]) });
|
||||
mlist[1] = [{ type: 0, data: write_varint49(Math.max(newref + 1, varint_to_i32(mlist[1][0].data))) }];
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a3, _b2;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a3 = mm[3]) == null ? void 0 : _a3[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newref) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_add_meta(mlist, newref, newloc);
|
||||
numbers_meta_add_dep(mlist, deps, tmaref, newref);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
}
|
||||
@ -1662,47 +1724,11 @@ function numbers_add_ws(cfb, deps, wsidx) {
|
||||
if (deps[newref].location == deps[oldref].location)
|
||||
deps[newref].location = deps[newref].location.replace(/\.iwa/, "-".concat(newref, ".iwa"));
|
||||
CFB.utils.cfb_add(cfb, deps[newref].location, compress_iwa_file(write_iwa_file([msg])));
|
||||
var newloc = deps[newref].location;
|
||||
newloc = newloc.replace(/^Root Entry\//, "");
|
||||
newloc = newloc.replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
var newloc = deps[newref].location.replace(/^Root Entry\//, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
mlist[3].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newref) }],
|
||||
[{ type: 2, data: stru8(newloc.replace(/-.*$/, "")) }],
|
||||
[{ type: 2, data: stru8(newloc) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }]
|
||||
]) });
|
||||
mlist[1] = [{ type: 0, data: write_varint49(Math.max(newref + 1, varint_to_i32(mlist[1][0].data))) }];
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a2, _b2;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a2 = mm[3]) == null ? void 0 : _a2[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newref) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_add_meta(mlist, newref, newloc);
|
||||
numbers_meta_add_dep(mlist, deps, tmaref, newref);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
}
|
||||
@ -1743,26 +1769,7 @@ function numbers_add_ws(cfb, deps, wsidx) {
|
||||
[{ type: 0, data: write_varint49(0) }]
|
||||
]) });
|
||||
mlist[1] = [{ type: 0, data: write_varint49(Math.max(newtileref + 1, varint_to_i32(mlist[1][0].data))) }];
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a2, _b2;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a2 = mm[3]) == null ? void 0 : _a2[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newtileref) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, tmaref, newtileref);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
}
|
||||
@ -1825,12 +1832,15 @@ function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
}
|
||||
}
|
||||
}
|
||||
sheet_to_json(ws, { range: range, header: 1 });
|
||||
var SST = ["~Sh33tJ5~"];
|
||||
var RSST = [{ v: "~54ee77S~", l: "https://sheetjs.com/" }];
|
||||
var loc = deps[tmaref].location;
|
||||
loc = loc.replace(/^Root Entry\//, "");
|
||||
loc = loc.replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
var LUT = {
|
||||
cmnt: [{ a: "~54ee77S~", t: "... the people who are crazy enough to think they can change the world, are the ones who do." }],
|
||||
ferr: [],
|
||||
fmla: [],
|
||||
nfmt: [],
|
||||
ofmt: [],
|
||||
rsst: [{ v: "~54ee77S~", l: "https://sheetjs.com/" }],
|
||||
sst: ["~Sh33tJ5~"]
|
||||
};
|
||||
var pb = parse_shallow(tmaroot.messages[0].data);
|
||||
{
|
||||
pb[6][0].data = write_varint49(range.e.r + 1);
|
||||
@ -1884,22 +1894,7 @@ function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
mlist[3] = mlist[3].filter(function(m) {
|
||||
return varint_to_i32(parse_shallow(m.data)[1][0].data) != tileref;
|
||||
});
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a, _b;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a = mm[3]) == null ? void 0 : _a[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6] = parent[6].filter(function(m) {
|
||||
return varint_to_i32(parse_shallow(m.data)[1][0].data) != tileref;
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_del_dep(mlist, deps, tmaref, tileref);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
numbers_del_oref(tmaroot, tileref);
|
||||
@ -1925,7 +1920,7 @@ function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
[{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }]
|
||||
];
|
||||
for (var R = tidx * tstride; R <= Math.min(range.e.r, (tidx + 1) * tstride - 1); ++R) {
|
||||
var tilerow = write_TST_TileRowInfo(data[R], SST, RSST, USE_WIDE_ROWS);
|
||||
var tilerow = write_TST_TileRowInfo(data[R], LUT, USE_WIDE_ROWS);
|
||||
tilerow[1][0].data = write_varint49(R - tidx * tstride);
|
||||
tiledata[5].push({ data: write_shallow(tilerow), type: 2 });
|
||||
}
|
||||
@ -1958,26 +1953,7 @@ function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
[{ type: 0, data: write_varint49(save_token) }]
|
||||
]) });
|
||||
mlist[1] = [{ type: 0, data: write_varint49(Math.max(newtileid + 1, varint_to_i32(mlist[1][0].data))) }];
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a, _b;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a = mm[3]) == null ? void 0 : _a[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newtileid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, tmaref, newtileid);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
numbers_add_oref(tmaroot, newtileid);
|
||||
@ -2019,26 +1995,7 @@ function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
store[13] = [{ type: 2, data: write_TSP_Reference(mergeid) }];
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a, _b;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a = mm[3]) == null ? void 0 : _a[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(mergeid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, tmaref, mergeid);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
numbers_add_oref(tmaroot, mergeid);
|
||||
@ -2049,7 +2006,7 @@ function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
var sstdata = parse_shallow(sstroot.messages[0].data);
|
||||
{
|
||||
sstdata[3] = [];
|
||||
SST.forEach(function(str, i) {
|
||||
LUT.sst.forEach(function(str, i) {
|
||||
if (i == 0)
|
||||
return;
|
||||
sstdata[3].push({ type: 2, data: write_shallow([
|
||||
@ -2072,7 +2029,7 @@ function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
903815,
|
||||
903845
|
||||
];
|
||||
RSST.forEach(function(rsst, i) {
|
||||
LUT.rsst.forEach(function(rsst, i) {
|
||||
if (i == 0)
|
||||
return;
|
||||
var tswpsa = [
|
||||
@ -2143,85 +2100,116 @@ function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
numbers_add_oref(rsstroot, rtpaid);
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
var loc2 = deps[rsstref].location.replace(/^Root Entry\//, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a, _b;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a = mm[3]) == null ? void 0 : _a[0])
|
||||
return u8str(mm[3][0].data) == loc2;
|
||||
if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc2)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(rtpaid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
loc2 = deps[rtpaid].location.replace(/^Root Entry\//, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a, _b;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a = mm[3]) == null ? void 0 : _a[0])
|
||||
return u8str(mm[3][0].data) == loc2;
|
||||
if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc2)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(tswpsaid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
loc2 = deps[tswpsaid].location.replace(/^Root Entry\//, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a, _b;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a = mm[3]) == null ? void 0 : _a[0])
|
||||
return u8str(mm[3][0].data) == loc2;
|
||||
if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc2)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
tswpsarefs.forEach(function(id) {
|
||||
return parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(id) }]
|
||||
])
|
||||
});
|
||||
});
|
||||
style_indices.forEach(function(n) {
|
||||
return parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(n) }]
|
||||
])
|
||||
});
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, rsstref, rtpaid);
|
||||
numbers_meta_add_dep(mlist, deps, rtpaid, tswpsaid);
|
||||
numbers_meta_add_dep(mlist, deps, tswpsaid, tswpsarefs);
|
||||
numbers_meta_add_dep(mlist, deps, tswpsaid, style_indices);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
});
|
||||
rsstroot.messages[0].data = write_shallow(rsstdata);
|
||||
});
|
||||
if (LUT.cmnt.length > 1) {
|
||||
var cmntref = parse_TSP_Reference(store[19][0].data);
|
||||
var authors = {}, iauthor = 0;
|
||||
numbers_iwa_doit(cfb, deps, cmntref, function(cmntroot) {
|
||||
var cmntdata = parse_shallow(cmntroot.messages[0].data);
|
||||
{
|
||||
cmntdata[3] = [];
|
||||
LUT.cmnt.forEach(function(cc, i) {
|
||||
if (i == 0)
|
||||
return;
|
||||
var replies = [];
|
||||
if (cc.replies)
|
||||
cc.replies.forEach(function(c) {
|
||||
if (!authors[c.a || ""])
|
||||
authors[c.a || ""] = numbers_add_msg(cfb, 212, [
|
||||
[],
|
||||
[{ type: 2, data: stru8(c.a || "") }],
|
||||
[{ type: 2, data: get_author_color(++iauthor) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }]
|
||||
], "/Index/Tables/DataList", deps);
|
||||
var aaaid2 = authors[c.a || ""];
|
||||
var csaid2 = numbers_add_msg(cfb, 3056, [
|
||||
[],
|
||||
[{ type: 2, data: stru8(c.t || "") }],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 1, data: new Uint8Array([0, 0, 0, 128, 116, 109, 182, 65]) }]
|
||||
]) }],
|
||||
[{ type: 2, data: write_TSP_Reference(aaaid2) }]
|
||||
], "/Index/Tables/DataList", deps);
|
||||
numbers_iwa_doit(cfb, deps, csaid2, function(iwa) {
|
||||
return numbers_add_oref(iwa, aaaid2);
|
||||
});
|
||||
replies.push(csaid2);
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
numbers_meta_add_dep(mlist, deps, csaid2, aaaid2);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
});
|
||||
if (!authors[cc.a || ""])
|
||||
authors[cc.a || ""] = numbers_add_msg(cfb, 212, [
|
||||
[],
|
||||
[{ type: 2, data: stru8(cc.a || "") }],
|
||||
[{ type: 2, data: get_author_color(++iauthor) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }]
|
||||
], "/Index/Tables/DataList", deps);
|
||||
var aaaid = authors[cc.a || ""];
|
||||
var csaid = numbers_add_msg(cfb, 3056, [
|
||||
[],
|
||||
[{ type: 2, data: stru8(cc.t || "") }],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 1, data: new Uint8Array([0, 0, 0, 128, 116, 109, 182, 65]) }]
|
||||
]) }],
|
||||
[{ type: 2, data: write_TSP_Reference(aaaid) }],
|
||||
replies.map(function(r) {
|
||||
return { type: 2, data: write_TSP_Reference(r) };
|
||||
}),
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(i) }],
|
||||
[{ type: 0, data: write_varint49(0) }]
|
||||
]) }]
|
||||
], "/Index/Tables/DataList", deps);
|
||||
numbers_iwa_doit(cfb, deps, csaid, function(iwa) {
|
||||
numbers_add_oref(iwa, aaaid);
|
||||
replies.forEach(function(r) {
|
||||
return numbers_add_oref(iwa, r);
|
||||
});
|
||||
});
|
||||
cmntdata[3].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(i) }],
|
||||
[{ type: 0, data: write_varint49(1) }],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[{ type: 2, data: write_TSP_Reference(csaid) }]
|
||||
]) });
|
||||
numbers_add_oref(cmntroot, csaid);
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
numbers_meta_add_dep(mlist, deps, cmntref, csaid);
|
||||
numbers_meta_add_dep(mlist, deps, csaid, aaaid);
|
||||
if (replies.length)
|
||||
numbers_meta_add_dep(mlist, deps, csaid, replies);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
});
|
||||
}
|
||||
cmntdata[2][0].data = write_varint49(LUT.cmnt.length + 1);
|
||||
cmntroot.messages[0].data = write_shallow(cmntdata);
|
||||
});
|
||||
}
|
||||
}
|
||||
pb[4][0].data = write_shallow(store);
|
||||
}
|
||||
|
@ -739,98 +739,133 @@ function parse_new_storage(buf, lut) {
|
||||
ret.v /= 86400;
|
||||
return ret;
|
||||
}
|
||||
function write_new_storage(cell, sst, rsst) {
|
||||
var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;
|
||||
function write_new_storage(cell, lut) {
|
||||
var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, fields = 0;
|
||||
out[0] = 5;
|
||||
switch (cell.t) {
|
||||
case "n":
|
||||
out[1] = 2;
|
||||
writeDecimal128LE(out, l, cell.v);
|
||||
flags |= 1;
|
||||
fields |= 1;
|
||||
l += 16;
|
||||
break;
|
||||
case "b":
|
||||
out[1] = 6;
|
||||
dv.setFloat64(l, cell.v ? 1 : 0, true);
|
||||
flags |= 2;
|
||||
fields |= 2;
|
||||
l += 8;
|
||||
break;
|
||||
case "s":
|
||||
{
|
||||
var s = cell.v == null ? "" : String(cell.v);
|
||||
if (cell.l) {
|
||||
var irsst = rsst.findIndex(function(v) {
|
||||
var irsst = lut.rsst.findIndex(function(v) {
|
||||
var _a;
|
||||
return v.v == s && v.l == ((_a = cell.l) == null ? void 0 : _a.Target);
|
||||
});
|
||||
if (irsst == -1)
|
||||
rsst[irsst = rsst.length] = { v: s, l: cell.l.Target };
|
||||
lut.rsst[irsst = lut.rsst.length] = { v: s, l: cell.l.Target };
|
||||
out[1] = 9;
|
||||
dv.setUint32(l, irsst, true);
|
||||
flags |= 16;
|
||||
fields |= 16;
|
||||
l += 4;
|
||||
} else {
|
||||
var isst = sst.indexOf(s);
|
||||
var isst = lut.sst.indexOf(s);
|
||||
if (isst == -1)
|
||||
sst[isst = sst.length] = s;
|
||||
lut.sst[isst = lut.sst.length] = s;
|
||||
out[1] = 3;
|
||||
dv.setUint32(l, isst, true);
|
||||
flags |= 8;
|
||||
fields |= 8;
|
||||
l += 4;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "z":
|
||||
out[1] = 0;
|
||||
break;
|
||||
default:
|
||||
throw "unsupported cell type " + cell.t;
|
||||
}
|
||||
dv.setUint32(8, flags, true);
|
||||
if (cell.c) {
|
||||
lut.cmnt.push(s5s_to_iwa_comment(cell.c));
|
||||
dv.setUint32(l, lut.cmnt.length - 1, true);
|
||||
fields |= 524288;
|
||||
l += 4;
|
||||
}
|
||||
dv.setUint32(8, fields, true);
|
||||
return out[subarray](0, l);
|
||||
}
|
||||
function write_old_storage(cell, sst, rsst) {
|
||||
var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;
|
||||
function write_old_storage(cell, lut) {
|
||||
var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, fields = 0;
|
||||
out[0] = 4;
|
||||
switch (cell.t) {
|
||||
case "n":
|
||||
break;
|
||||
case "b":
|
||||
break;
|
||||
case "s":
|
||||
{
|
||||
var s = cell.v == null ? "" : String(cell.v);
|
||||
if (cell.l) {
|
||||
var irsst = lut.rsst.findIndex(function(v) {
|
||||
var _a;
|
||||
return v.v == s && v.l == ((_a = cell.l) == null ? void 0 : _a.Target);
|
||||
});
|
||||
if (irsst == -1)
|
||||
lut.rsst[irsst = lut.rsst.length] = { v: s, l: cell.l.Target };
|
||||
out[1] = 9;
|
||||
dv.setUint32(l, irsst, true);
|
||||
fields |= 512;
|
||||
l += 4;
|
||||
} else {
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "z":
|
||||
break;
|
||||
default:
|
||||
throw "unsupported cell type " + cell.t;
|
||||
}
|
||||
if (cell.c) {
|
||||
dv.setUint32(l, lut.cmnt.length - 1, true);
|
||||
fields |= 4096;
|
||||
l += 4;
|
||||
}
|
||||
switch (cell.t) {
|
||||
case "n":
|
||||
out[1] = 2;
|
||||
dv.setFloat64(l, cell.v, true);
|
||||
flags |= 32;
|
||||
fields |= 32;
|
||||
l += 8;
|
||||
break;
|
||||
case "b":
|
||||
out[1] = 6;
|
||||
dv.setFloat64(l, cell.v ? 1 : 0, true);
|
||||
flags |= 32;
|
||||
fields |= 32;
|
||||
l += 8;
|
||||
break;
|
||||
case "s":
|
||||
{
|
||||
var s = cell.v == null ? "" : String(cell.v);
|
||||
if (cell.l) {
|
||||
var irsst = rsst.findIndex(function(v) {
|
||||
var _a;
|
||||
return v.v == s && v.l == ((_a = cell.l) == null ? void 0 : _a.Target);
|
||||
});
|
||||
if (irsst == -1)
|
||||
rsst[irsst = rsst.length] = { v: s, l: cell.l.Target };
|
||||
out[1] = 9;
|
||||
dv.setUint32(l, irsst, true);
|
||||
flags |= 512;
|
||||
l += 4;
|
||||
} else {
|
||||
var isst = sst.indexOf(s);
|
||||
var isst = lut.sst.indexOf(s);
|
||||
if (isst == -1)
|
||||
sst[isst = sst.length] = s;
|
||||
lut.sst[isst = lut.sst.length] = s;
|
||||
out[1] = 3;
|
||||
dv.setUint32(l, isst, true);
|
||||
flags |= 16;
|
||||
fields |= 16;
|
||||
l += 4;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "z":
|
||||
out[1] = 0;
|
||||
break;
|
||||
default:
|
||||
throw "unsupported cell type " + cell.t;
|
||||
}
|
||||
dv.setUint32(8, flags, true);
|
||||
dv.setUint32(8, fields, true);
|
||||
return out[subarray](0, l);
|
||||
}
|
||||
function parse_cell_storage(buf, lut) {
|
||||
@ -1035,6 +1070,18 @@ function iwa_to_s5s_comment(iwa) {
|
||||
});
|
||||
return out;
|
||||
}
|
||||
function s5s_to_iwa_comment(s5s) {
|
||||
var out = { a: "", t: "", replies: [] };
|
||||
for (var i = 0; i < s5s.length; ++i) {
|
||||
if (i == 0) {
|
||||
out.a = s5s[i].a;
|
||||
out.t = s5s[i].t;
|
||||
} else {
|
||||
out.replies.push({ a: s5s[i].a, t: s5s[i].t });
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
function parse_TST_TableModelArchive(M, root, ws) {
|
||||
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
||||
var pb = parse_shallow(root.data);
|
||||
@ -1208,8 +1255,8 @@ function parse_numbers_iwa(cfb, opts) {
|
||||
throw new Error("Cannot find Document root");
|
||||
return parse_TN_DocumentArchive(M, docroot, opts);
|
||||
}
|
||||
function write_TST_TileRowInfo(data, SST, RSST, wide) {
|
||||
var _a, _b;
|
||||
function write_TST_TileRowInfo(data, lut, wide) {
|
||||
var _a, _b, _c;
|
||||
var tri = [
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
@ -1242,7 +1289,7 @@ function write_TST_TileRowInfo(data, SST, RSST, wide) {
|
||||
var _dv = u8_to_dataview(tri[4][0].data), _last_offset = 0, _cell_storage = [];
|
||||
var width = wide ? 4 : 1;
|
||||
for (var C = 0; C < data.length; ++C) {
|
||||
if (data[C] == null || data[C].t == "z" || data[C].t == "e") {
|
||||
if (data[C] == null || data[C].t == "z" && !((_c = data[C].c) == null ? void 0 : _c.length) || data[C].t == "e") {
|
||||
dv.setUint16(C * 2, 65535, true);
|
||||
_dv.setUint16(C * 2, 65535);
|
||||
continue;
|
||||
@ -1253,18 +1300,19 @@ function write_TST_TileRowInfo(data, SST, RSST, wide) {
|
||||
switch (data[C].t) {
|
||||
case "d":
|
||||
if (data[C].v instanceof Date) {
|
||||
celload = write_new_storage({ t: "s", v: data[C].v.toISOString() }, SST, RSST);
|
||||
_celload = write_old_storage({ t: "s", v: data[C].v.toISOString() }, SST, RSST);
|
||||
celload = write_new_storage({ t: "s", v: data[C].v.toISOString() }, lut);
|
||||
_celload = write_old_storage({ t: "s", v: data[C].v.toISOString() }, lut);
|
||||
break;
|
||||
}
|
||||
celload = write_new_storage(data[C], SST, RSST);
|
||||
_celload = write_old_storage(data[C], SST, RSST);
|
||||
celload = write_new_storage(data[C], lut);
|
||||
_celload = write_old_storage(data[C], lut);
|
||||
break;
|
||||
case "s":
|
||||
case "n":
|
||||
case "b":
|
||||
celload = write_new_storage(data[C], SST, RSST);
|
||||
_celload = write_old_storage(data[C], SST, RSST);
|
||||
case "z":
|
||||
celload = write_new_storage(data[C], lut);
|
||||
_celload = write_old_storage(data[C], lut);
|
||||
break;
|
||||
default:
|
||||
throw new Error("Unsupported value " + data[C]);
|
||||
@ -1344,6 +1392,34 @@ function build_numbers_deps(cfb) {
|
||||
});
|
||||
return dependents;
|
||||
}
|
||||
function write_TSP_Color_RGB(r, g, b) {
|
||||
return write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(1) }],
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(Float32Array.from([r / 255]).buffer) }],
|
||||
[{ type: 5, data: new Uint8Array(Float32Array.from([g / 255]).buffer) }],
|
||||
[{ type: 5, data: new Uint8Array(Float32Array.from([b / 255]).buffer) }],
|
||||
[{ type: 5, data: new Uint8Array(Float32Array.from([1]).buffer) }],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(1) }]
|
||||
]);
|
||||
}
|
||||
function get_author_color(n) {
|
||||
switch (n) {
|
||||
case 0:
|
||||
return write_TSP_Color_RGB(99, 222, 171);
|
||||
case 1:
|
||||
return write_TSP_Color_RGB(162, 197, 240);
|
||||
case 2:
|
||||
return write_TSP_Color_RGB(255, 189, 189);
|
||||
}
|
||||
return write_TSP_Color_RGB(Math.random() * 255, Math.random() * 255, Math.random() * 255);
|
||||
}
|
||||
function write_numbers_iwa(wb, opts) {
|
||||
if (!opts || !opts.numbers)
|
||||
throw new Error("Must pass a `numbers` option -- check the README");
|
||||
@ -1387,6 +1463,24 @@ function numbers_iwa_find(cfb, deps, id) {
|
||||
});
|
||||
return ainfo;
|
||||
}
|
||||
function numbers_add_meta(mlist, newid, newloc) {
|
||||
mlist[3].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newid) }],
|
||||
[{ type: 2, data: stru8(newloc.replace(/-.*$/, "")) }],
|
||||
[{ type: 2, data: stru8(newloc) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }]
|
||||
]) });
|
||||
mlist[1] = [{ type: 0, data: write_varint49(Math.max(newid + 1, varint_to_i32(mlist[1][0].data))) }];
|
||||
}
|
||||
function numbers_add_msg(cfb, type, msg, path, deps, id) {
|
||||
if (!id)
|
||||
id = get_unique_msgid({ deps: [], location: "", type: type }, deps);
|
||||
@ -1399,26 +1493,55 @@ function numbers_add_msg(cfb, type, msg, path, deps, id) {
|
||||
var newloc = loc.replace(/^[\/]/, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
mlist[3].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(id) }],
|
||||
[{ type: 2, data: stru8(newloc.replace(/-.*$/, "")) }],
|
||||
[{ type: 2, data: stru8(newloc) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }]
|
||||
]) });
|
||||
mlist[1] = [{ type: 0, data: write_varint49(Math.max(id + 1, varint_to_i32(mlist[1][0].data))) }];
|
||||
numbers_add_meta(mlist, id || 0, newloc);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
return id;
|
||||
}
|
||||
function numbers_meta_add_dep(mlist, deps, id, dep) {
|
||||
var loc = deps[id].location.replace(/^Root Entry\//, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a, _b;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a = mm[3]) == null ? void 0 : _a[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
(Array.isArray(dep) ? dep : [dep]).forEach(function(dep2) {
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(dep2) }]
|
||||
])
|
||||
});
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
}
|
||||
function numbers_meta_del_dep(mlist, deps, id, dep) {
|
||||
var loc = deps[id].location.replace(/^Root Entry\//, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a, _b;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a = mm[3]) == null ? void 0 : _a[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6] = parent[6].filter(function(m) {
|
||||
return varint_to_i32(parse_shallow(m.data)[1][0].data) != dep;
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
}
|
||||
function numbers_add_ws(cfb, deps, wsidx) {
|
||||
var sheetref = -1, newsheetref = -1;
|
||||
var remap = {};
|
||||
@ -1457,31 +1580,9 @@ function numbers_add_ws(cfb, deps, wsidx) {
|
||||
if (deps[drawables[0]].location == deps[newsheetref].location)
|
||||
arch.push(tia);
|
||||
else {
|
||||
var loc2 = deps[newsheetref].location;
|
||||
loc2 = loc2.replace(/^Root Entry\//, "");
|
||||
loc2 = loc2.replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a, _b;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a = mm[3]) == null ? void 0 : _a[0])
|
||||
return u8str(mm[3][0].data) == loc2;
|
||||
if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc2)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(tiaref) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, newsheetref, tiaref);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
numbers_iwa_doit(cfb, deps, tiaref, function(_, x) {
|
||||
@ -1515,9 +1616,6 @@ function numbers_add_ws(cfb, deps, wsidx) {
|
||||
});
|
||||
tiaroot.messages[0].data = write_shallow(tia);
|
||||
});
|
||||
var loc = deps[tmaref].location;
|
||||
loc = loc.replace(/^Root Entry\//, "");
|
||||
loc = loc.replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
numbers_iwa_doit(cfb, deps, tmaref, function(tmaroot, arch) {
|
||||
var _a, _b;
|
||||
var tma = parse_shallow(tmaroot.messages[0].data);
|
||||
@ -1599,47 +1697,11 @@ function numbers_add_ws(cfb, deps, wsidx) {
|
||||
if (deps[newref].location == deps[oldref].location)
|
||||
deps[newref].location = deps[newref].location.replace(/\.iwa/, "-".concat(newref, ".iwa"));
|
||||
CFB.utils.cfb_add(cfb, deps[newref].location, compress_iwa_file(write_iwa_file([msg])));
|
||||
var newloc = deps[newref].location;
|
||||
newloc = newloc.replace(/^Root Entry\//, "");
|
||||
newloc = newloc.replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
var newloc = deps[newref].location.replace(/^Root Entry\//, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
mlist[3].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newref) }],
|
||||
[{ type: 2, data: stru8(newloc.replace(/-.*$/, "")) }],
|
||||
[{ type: 2, data: stru8(newloc) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }]
|
||||
]) });
|
||||
mlist[1] = [{ type: 0, data: write_varint49(Math.max(newref + 1, varint_to_i32(mlist[1][0].data))) }];
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a3, _b2;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a3 = mm[3]) == null ? void 0 : _a3[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newref) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_add_meta(mlist, newref, newloc);
|
||||
numbers_meta_add_dep(mlist, deps, tmaref, newref);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
}
|
||||
@ -1662,47 +1724,11 @@ function numbers_add_ws(cfb, deps, wsidx) {
|
||||
if (deps[newref].location == deps[oldref].location)
|
||||
deps[newref].location = deps[newref].location.replace(/\.iwa/, "-".concat(newref, ".iwa"));
|
||||
CFB.utils.cfb_add(cfb, deps[newref].location, compress_iwa_file(write_iwa_file([msg])));
|
||||
var newloc = deps[newref].location;
|
||||
newloc = newloc.replace(/^Root Entry\//, "");
|
||||
newloc = newloc.replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
var newloc = deps[newref].location.replace(/^Root Entry\//, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
mlist[3].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newref) }],
|
||||
[{ type: 2, data: stru8(newloc.replace(/-.*$/, "")) }],
|
||||
[{ type: 2, data: stru8(newloc) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }]
|
||||
]) });
|
||||
mlist[1] = [{ type: 0, data: write_varint49(Math.max(newref + 1, varint_to_i32(mlist[1][0].data))) }];
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a2, _b2;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a2 = mm[3]) == null ? void 0 : _a2[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newref) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_add_meta(mlist, newref, newloc);
|
||||
numbers_meta_add_dep(mlist, deps, tmaref, newref);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
}
|
||||
@ -1743,26 +1769,7 @@ function numbers_add_ws(cfb, deps, wsidx) {
|
||||
[{ type: 0, data: write_varint49(0) }]
|
||||
]) });
|
||||
mlist[1] = [{ type: 0, data: write_varint49(Math.max(newtileref + 1, varint_to_i32(mlist[1][0].data))) }];
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a2, _b2;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a2 = mm[3]) == null ? void 0 : _a2[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newtileref) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, tmaref, newtileref);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
}
|
||||
@ -1825,12 +1832,15 @@ function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
}
|
||||
}
|
||||
}
|
||||
sheet_to_json(ws, { range: range, header: 1 });
|
||||
var SST = ["~Sh33tJ5~"];
|
||||
var RSST = [{ v: "~54ee77S~", l: "https://sheetjs.com/" }];
|
||||
var loc = deps[tmaref].location;
|
||||
loc = loc.replace(/^Root Entry\//, "");
|
||||
loc = loc.replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
var LUT = {
|
||||
cmnt: [{ a: "~54ee77S~", t: "... the people who are crazy enough to think they can change the world, are the ones who do." }],
|
||||
ferr: [],
|
||||
fmla: [],
|
||||
nfmt: [],
|
||||
ofmt: [],
|
||||
rsst: [{ v: "~54ee77S~", l: "https://sheetjs.com/" }],
|
||||
sst: ["~Sh33tJ5~"]
|
||||
};
|
||||
var pb = parse_shallow(tmaroot.messages[0].data);
|
||||
{
|
||||
pb[6][0].data = write_varint49(range.e.r + 1);
|
||||
@ -1884,22 +1894,7 @@ function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
mlist[3] = mlist[3].filter(function(m) {
|
||||
return varint_to_i32(parse_shallow(m.data)[1][0].data) != tileref;
|
||||
});
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a, _b;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a = mm[3]) == null ? void 0 : _a[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6] = parent[6].filter(function(m) {
|
||||
return varint_to_i32(parse_shallow(m.data)[1][0].data) != tileref;
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_del_dep(mlist, deps, tmaref, tileref);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
numbers_del_oref(tmaroot, tileref);
|
||||
@ -1925,7 +1920,7 @@ function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
[{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }]
|
||||
];
|
||||
for (var R = tidx * tstride; R <= Math.min(range.e.r, (tidx + 1) * tstride - 1); ++R) {
|
||||
var tilerow = write_TST_TileRowInfo(data[R], SST, RSST, USE_WIDE_ROWS);
|
||||
var tilerow = write_TST_TileRowInfo(data[R], LUT, USE_WIDE_ROWS);
|
||||
tilerow[1][0].data = write_varint49(R - tidx * tstride);
|
||||
tiledata[5].push({ data: write_shallow(tilerow), type: 2 });
|
||||
}
|
||||
@ -1958,26 +1953,7 @@ function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
[{ type: 0, data: write_varint49(save_token) }]
|
||||
]) });
|
||||
mlist[1] = [{ type: 0, data: write_varint49(Math.max(newtileid + 1, varint_to_i32(mlist[1][0].data))) }];
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a, _b;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a = mm[3]) == null ? void 0 : _a[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newtileid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, tmaref, newtileid);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
numbers_add_oref(tmaroot, newtileid);
|
||||
@ -2019,26 +1995,7 @@ function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
store[13] = [{ type: 2, data: write_TSP_Reference(mergeid) }];
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a, _b;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a = mm[3]) == null ? void 0 : _a[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(mergeid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, tmaref, mergeid);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
numbers_add_oref(tmaroot, mergeid);
|
||||
@ -2049,7 +2006,7 @@ function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
var sstdata = parse_shallow(sstroot.messages[0].data);
|
||||
{
|
||||
sstdata[3] = [];
|
||||
SST.forEach(function(str, i) {
|
||||
LUT.sst.forEach(function(str, i) {
|
||||
if (i == 0)
|
||||
return;
|
||||
sstdata[3].push({ type: 2, data: write_shallow([
|
||||
@ -2072,7 +2029,7 @@ function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
903815,
|
||||
903845
|
||||
];
|
||||
RSST.forEach(function(rsst, i) {
|
||||
LUT.rsst.forEach(function(rsst, i) {
|
||||
if (i == 0)
|
||||
return;
|
||||
var tswpsa = [
|
||||
@ -2143,85 +2100,116 @@ function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
numbers_add_oref(rsstroot, rtpaid);
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
var loc2 = deps[rsstref].location.replace(/^Root Entry\//, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a, _b;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a = mm[3]) == null ? void 0 : _a[0])
|
||||
return u8str(mm[3][0].data) == loc2;
|
||||
if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc2)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(rtpaid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
loc2 = deps[rtpaid].location.replace(/^Root Entry\//, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a, _b;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a = mm[3]) == null ? void 0 : _a[0])
|
||||
return u8str(mm[3][0].data) == loc2;
|
||||
if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc2)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(tswpsaid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
loc2 = deps[tswpsaid].location.replace(/^Root Entry\//, "").replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a, _b;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a = mm[3]) == null ? void 0 : _a[0])
|
||||
return u8str(mm[3][0].data) == loc2;
|
||||
if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc2)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
tswpsarefs.forEach(function(id) {
|
||||
return parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(id) }]
|
||||
])
|
||||
});
|
||||
});
|
||||
style_indices.forEach(function(n) {
|
||||
return parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(n) }]
|
||||
])
|
||||
});
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, rsstref, rtpaid);
|
||||
numbers_meta_add_dep(mlist, deps, rtpaid, tswpsaid);
|
||||
numbers_meta_add_dep(mlist, deps, tswpsaid, tswpsarefs);
|
||||
numbers_meta_add_dep(mlist, deps, tswpsaid, style_indices);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
});
|
||||
rsstroot.messages[0].data = write_shallow(rsstdata);
|
||||
});
|
||||
if (LUT.cmnt.length > 1) {
|
||||
var cmntref = parse_TSP_Reference(store[19][0].data);
|
||||
var authors = {}, iauthor = 0;
|
||||
numbers_iwa_doit(cfb, deps, cmntref, function(cmntroot) {
|
||||
var cmntdata = parse_shallow(cmntroot.messages[0].data);
|
||||
{
|
||||
cmntdata[3] = [];
|
||||
LUT.cmnt.forEach(function(cc, i) {
|
||||
if (i == 0)
|
||||
return;
|
||||
var replies = [];
|
||||
if (cc.replies)
|
||||
cc.replies.forEach(function(c) {
|
||||
if (!authors[c.a || ""])
|
||||
authors[c.a || ""] = numbers_add_msg(cfb, 212, [
|
||||
[],
|
||||
[{ type: 2, data: stru8(c.a || "") }],
|
||||
[{ type: 2, data: get_author_color(++iauthor) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }]
|
||||
], "/Index/Tables/DataList", deps);
|
||||
var aaaid2 = authors[c.a || ""];
|
||||
var csaid2 = numbers_add_msg(cfb, 3056, [
|
||||
[],
|
||||
[{ type: 2, data: stru8(c.t || "") }],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 1, data: new Uint8Array([0, 0, 0, 128, 116, 109, 182, 65]) }]
|
||||
]) }],
|
||||
[{ type: 2, data: write_TSP_Reference(aaaid2) }]
|
||||
], "/Index/Tables/DataList", deps);
|
||||
numbers_iwa_doit(cfb, deps, csaid2, function(iwa) {
|
||||
return numbers_add_oref(iwa, aaaid2);
|
||||
});
|
||||
replies.push(csaid2);
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
numbers_meta_add_dep(mlist, deps, csaid2, aaaid2);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
});
|
||||
if (!authors[cc.a || ""])
|
||||
authors[cc.a || ""] = numbers_add_msg(cfb, 212, [
|
||||
[],
|
||||
[{ type: 2, data: stru8(cc.a || "") }],
|
||||
[{ type: 2, data: get_author_color(++iauthor) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }]
|
||||
], "/Index/Tables/DataList", deps);
|
||||
var aaaid = authors[cc.a || ""];
|
||||
var csaid = numbers_add_msg(cfb, 3056, [
|
||||
[],
|
||||
[{ type: 2, data: stru8(cc.t || "") }],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 1, data: new Uint8Array([0, 0, 0, 128, 116, 109, 182, 65]) }]
|
||||
]) }],
|
||||
[{ type: 2, data: write_TSP_Reference(aaaid) }],
|
||||
replies.map(function(r) {
|
||||
return { type: 2, data: write_TSP_Reference(r) };
|
||||
}),
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(i) }],
|
||||
[{ type: 0, data: write_varint49(0) }]
|
||||
]) }]
|
||||
], "/Index/Tables/DataList", deps);
|
||||
numbers_iwa_doit(cfb, deps, csaid, function(iwa) {
|
||||
numbers_add_oref(iwa, aaaid);
|
||||
replies.forEach(function(r) {
|
||||
return numbers_add_oref(iwa, r);
|
||||
});
|
||||
});
|
||||
cmntdata[3].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(i) }],
|
||||
[{ type: 0, data: write_varint49(1) }],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[{ type: 2, data: write_TSP_Reference(csaid) }]
|
||||
]) });
|
||||
numbers_add_oref(cmntroot, csaid);
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
numbers_meta_add_dep(mlist, deps, cmntref, csaid);
|
||||
numbers_meta_add_dep(mlist, deps, csaid, aaaid);
|
||||
if (replies.length)
|
||||
numbers_meta_add_dep(mlist, deps, csaid, replies);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
});
|
||||
}
|
||||
cmntdata[2][0].data = write_varint49(LUT.cmnt.length + 1);
|
||||
cmntroot.messages[0].data = write_shallow(cmntdata);
|
||||
});
|
||||
}
|
||||
}
|
||||
pb[4][0].data = write_shallow(store);
|
||||
}
|
||||
|
@ -11,7 +11,6 @@ declare var encode_row: typeof utils.encode_row;
|
||||
declare var encode_range: typeof utils.encode_range;
|
||||
declare var book_new: typeof utils.book_new;
|
||||
declare var book_append_sheet: typeof utils.book_append_sheet;
|
||||
declare var sheet_to_json: typeof utils.sheet_to_json;
|
||||
declare var decode_range: typeof utils.decode_range;
|
||||
import * as _CFB from 'cfb';
|
||||
declare var CFB: typeof _CFB;
|
||||
@ -600,51 +599,72 @@ function parse_new_storage(buf: Uint8Array, lut: DataLUT): CellObject | void {
|
||||
}
|
||||
|
||||
/** Write a cell "new storage" (version 5) */
|
||||
function write_new_storage(cell: CellObject, sst: string[], rsst: RichText[]): Uint8Array {
|
||||
var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;
|
||||
function write_new_storage(cell: CellObject, lut: DataLUT): Uint8Array {
|
||||
var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, fields = 0;
|
||||
out[0] = 5;
|
||||
switch(cell.t) {
|
||||
case "n": out[1] = 2; writeDecimal128LE(out, l, cell.v as number); flags |= 1; l += 16; break;
|
||||
case "b": out[1] = 6; dv.setFloat64(l, cell.v ? 1 : 0, true); flags |= 2; l += 8; break;
|
||||
case "n": out[1] = 2; writeDecimal128LE(out, l, cell.v as number); fields |= 1; l += 16; break;
|
||||
case "b": out[1] = 6; dv.setFloat64(l, cell.v ? 1 : 0, true); fields |= 2; l += 8; break;
|
||||
case "s": {
|
||||
var s = cell.v == null ? "" : String(cell.v);
|
||||
if(cell.l) {
|
||||
var irsst = rsst.findIndex(v => v.v == s && v.l == cell.l?.Target);
|
||||
if(irsst == -1) rsst[irsst = rsst.length] = { v: s , l: cell.l.Target };
|
||||
out[1] = 9; dv.setUint32(l, irsst, true); flags |= 0x10; l += 4;
|
||||
var irsst = lut.rsst.findIndex(v => v.v == s && v.l == cell.l?.Target);
|
||||
if(irsst == -1) lut.rsst[irsst = lut.rsst.length] = { v: s , l: cell.l.Target };
|
||||
out[1] = 9; dv.setUint32(l, irsst, true); fields |= 0x10; l += 4;
|
||||
} else {
|
||||
var isst = sst.indexOf(s);
|
||||
if(isst == -1) sst[isst = sst.length] = s;
|
||||
out[1] = 3; dv.setUint32(l, isst, true); flags |= 8; l += 4;
|
||||
var isst = lut.sst.indexOf(s);
|
||||
if(isst == -1) lut.sst[isst = lut.sst.length] = s;
|
||||
out[1] = 3; dv.setUint32(l, isst, true); fields |= 8; l += 4;
|
||||
}
|
||||
} break;
|
||||
case "z": out[1] = 0; break;
|
||||
default: throw "unsupported cell type " + cell.t;
|
||||
}
|
||||
dv.setUint32(8, flags, true);
|
||||
if(cell.c) {
|
||||
lut.cmnt.push(s5s_to_iwa_comment(cell.c));
|
||||
dv.setUint32(l, lut.cmnt.length - 1, true); fields |= 0x80000; l += 4;
|
||||
}
|
||||
dv.setUint32(8, fields, true);
|
||||
return out[subarray](0, l);
|
||||
}
|
||||
/** Write a cell "old storage" (version 4) */
|
||||
function write_old_storage(cell: CellObject, sst: string[], rsst: RichText[]): Uint8Array {
|
||||
var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;
|
||||
function write_old_storage(cell: CellObject, lut: DataLUT): Uint8Array {
|
||||
var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, fields = 0;
|
||||
out[0] = 4;
|
||||
/* note: rich text appears *before* comments */
|
||||
switch(cell.t) {
|
||||
case "n": out[1] = 2; dv.setFloat64(l, cell.v as number, true); flags |= 0x20; l += 8; break;
|
||||
case "b": out[1] = 6; dv.setFloat64(l, cell.v ? 1 : 0, true); flags |= 0x20; l += 8; break;
|
||||
case "n": break;
|
||||
case "b": break;
|
||||
case "s": {
|
||||
var s = cell.v == null ? "" : String(cell.v);
|
||||
if(cell.l) {
|
||||
var irsst = rsst.findIndex(v => v.v == s && v.l == cell.l?.Target);
|
||||
if(irsst == -1) rsst[irsst = rsst.length] = { v: s, l: cell.l.Target };
|
||||
out[1] = 9; dv.setUint32(l, irsst, true); flags |= 0x200; l += 4;
|
||||
} else {
|
||||
var isst = sst.indexOf(s);
|
||||
if(isst == -1) sst[isst = sst.length] = s;
|
||||
out[1] = 3; dv.setUint32(l, isst, true); flags |= 0x10; l += 4;
|
||||
}
|
||||
var irsst = lut.rsst.findIndex(v => v.v == s && v.l == cell.l?.Target);
|
||||
if(irsst == -1) lut.rsst[irsst = lut.rsst.length] = { v: s, l: cell.l.Target };
|
||||
out[1] = 9; dv.setUint32(l, irsst, true); fields |= 0x200; l += 4;
|
||||
} else { }
|
||||
} break;
|
||||
case "z": break;
|
||||
default: throw "unsupported cell type " + cell.t;
|
||||
}
|
||||
dv.setUint32(8, flags, true);
|
||||
if(cell.c) {
|
||||
/* NOTE: THIS ASSUMES write_new_storage was called */
|
||||
dv.setUint32(l, lut.cmnt.length - 1, true); fields |= 0x1000; l += 4;
|
||||
}
|
||||
switch(cell.t) {
|
||||
case "n": out[1] = 2; dv.setFloat64(l, cell.v as number, true); fields |= 0x20; l += 8; break;
|
||||
case "b": out[1] = 6; dv.setFloat64(l, cell.v ? 1 : 0, true); fields |= 0x20; l += 8; break;
|
||||
case "s": {
|
||||
var s = cell.v == null ? "" : String(cell.v);
|
||||
if(cell.l) { } else {
|
||||
var isst = lut.sst.indexOf(s);
|
||||
if(isst == -1) lut.sst[isst = lut.sst.length] = s;
|
||||
out[1] = 3; dv.setUint32(l, isst, true); fields |= 0x10; l += 4;
|
||||
}
|
||||
} break;
|
||||
case "z": out[1] = 0; break;
|
||||
default: throw "unsupported cell type " + cell.t;
|
||||
}
|
||||
dv.setUint32(8, fields, true);
|
||||
return out[subarray](0, l);
|
||||
}
|
||||
//<<export { write_new_storage, write_old_storage };
|
||||
@ -669,8 +689,7 @@ function parse_TSP_Reference(buf: Uint8Array): number {
|
||||
}
|
||||
/** Write .TSP.Reference */
|
||||
function write_TSP_Reference(idx: number): Uint8Array {
|
||||
return write_shallow([
|
||||
[],
|
||||
return write_shallow([ [],
|
||||
[ { type: 0, data: write_varint49(idx) } ]
|
||||
]);
|
||||
}
|
||||
@ -853,6 +872,17 @@ function iwa_to_s5s_comment(iwa: IWAComment): Comments {
|
||||
});
|
||||
return out;
|
||||
}
|
||||
/** Create IWA comment from SheetJS threaded comment structure */
|
||||
function s5s_to_iwa_comment(s5s: Comments): IWAComment {
|
||||
var out: IWAComment = {a: "", t:"", replies:[]};
|
||||
for(var i = 0; i < s5s.length; ++i) {
|
||||
if(i == 0) { out.a = s5s[i].a; out.t = s5s[i].t; }
|
||||
else {
|
||||
out.replies!.push({a: s5s[i].a, t: s5s[i].t});
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/** Parse .TST.TableModelArchive (6001) */
|
||||
function parse_TST_TableModelArchive(M: MessageSpace, root: IWAMessage, ws: WorkSheet) {
|
||||
@ -1024,7 +1054,7 @@ interface DependentInfo {
|
||||
type: number;
|
||||
}
|
||||
/** Write .TST.TileRowInfo */
|
||||
function write_TST_TileRowInfo(data: CellObject[], SST: string[], RSST: RichText[], wide: boolean): ProtoMessage {
|
||||
function write_TST_TileRowInfo(data: CellObject[], lut: DataLUT, wide: boolean): ProtoMessage {
|
||||
var tri: ProtoMessage = [
|
||||
[],
|
||||
[ { type: 0, data: write_varint49(0) }],
|
||||
@ -1056,7 +1086,8 @@ function write_TST_TileRowInfo(data: CellObject[], SST: string[], RSST: RichText
|
||||
var _dv = u8_to_dataview(tri[4][0].data), _last_offset = 0, _cell_storage: Uint8Array[] = [];
|
||||
var width = wide ? 4 : 1;
|
||||
for(var C = 0; C < data.length; ++C) {
|
||||
if(data[C] == null || data[C].t == "z" || data[C].t == "e") { dv.setUint16(C*2, 0xFFFF, true); _dv.setUint16(C*2, 0xFFFF); continue; }
|
||||
/* TODO: serialize errors */
|
||||
if(data[C] == null || (data[C].t == "z" && !data[C].c?.length) || data[C].t == "e") { dv.setUint16(C*2, 0xFFFF, true); _dv.setUint16(C*2, 0xFFFF); continue; }
|
||||
dv.setUint16(C*2, last_offset / width, true);
|
||||
/*if(!wide)*/ _dv.setUint16(C*2, _last_offset / width, true);
|
||||
var celload: Uint8Array, _celload: Uint8Array;
|
||||
@ -1064,17 +1095,17 @@ function write_TST_TileRowInfo(data: CellObject[], SST: string[], RSST: RichText
|
||||
case "d":
|
||||
// TODO: write the actual date code
|
||||
if(data[C].v instanceof Date) {
|
||||
celload = write_new_storage({t: "s", v: (data[C].v as Date).toISOString()}, SST, RSST);
|
||||
/*if(!wide)*/ _celload = write_old_storage({t: "s", v: (data[C].v as Date).toISOString()}, SST, RSST);
|
||||
celload = write_new_storage({t: "s", v: (data[C].v as Date).toISOString()}, lut);
|
||||
/*if(!wide)*/ _celload = write_old_storage({t: "s", v: (data[C].v as Date).toISOString()}, lut);
|
||||
break;
|
||||
}
|
||||
/* TODO: can esbuild preserve falls through comments ? */
|
||||
celload = write_new_storage(data[C], SST, RSST);
|
||||
/*if(!wide)*/ _celload = write_old_storage(data[C], SST, RSST);
|
||||
celload = write_new_storage(data[C], lut);
|
||||
/*if(!wide)*/ _celload = write_old_storage(data[C], lut);
|
||||
break;
|
||||
case "s": case "n": case "b":
|
||||
celload = write_new_storage(data[C], SST, RSST);
|
||||
/*if(!wide)*/ _celload = write_old_storage(data[C], SST, RSST);
|
||||
case "s": case "n": case "b": case "z":
|
||||
celload = write_new_storage(data[C], lut);
|
||||
/*if(!wide)*/ _celload = write_old_storage(data[C], lut);
|
||||
break;
|
||||
default:
|
||||
throw new Error("Unsupported value " + data[C]);
|
||||
@ -1153,6 +1184,27 @@ function build_numbers_deps(cfb: CFB$Container): Dependents {
|
||||
return dependents;
|
||||
}
|
||||
|
||||
/** Generate .TSP.Color from r/g/b (0-255) */
|
||||
function write_TSP_Color_RGB(r: number, g: number, b: number): Uint8Array { return write_shallow([[],
|
||||
[{ type: 0, data: write_varint49(1) }],
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(Float32Array.from([r/255]).buffer)}],
|
||||
[{ type: 5, data: new Uint8Array(Float32Array.from([g/255]).buffer)}],
|
||||
[{ type: 5, data: new Uint8Array(Float32Array.from([b/255]).buffer)}],
|
||||
[{ type: 5, data: new Uint8Array(Float32Array.from([1]).buffer)}],
|
||||
[], [], [], [], [],
|
||||
[{ type: 0, data: write_varint49(1) }]
|
||||
]); }
|
||||
|
||||
function get_author_color(n: number): Uint8Array {
|
||||
switch(n) {
|
||||
case 0: return write_TSP_Color_RGB(0x63, 0xDE, 0xAB);
|
||||
case 1: return write_TSP_Color_RGB(0xA2, 0xC5, 0xF0);
|
||||
case 2: return write_TSP_Color_RGB(0xFF, 0xBD, 0xBD);
|
||||
}
|
||||
return write_TSP_Color_RGB(Math.random()*255, Math.random()*255, Math.random()*255);
|
||||
}
|
||||
|
||||
/** Write NUMBERS workbook */
|
||||
function write_numbers_iwa(wb: WorkBook, opts?: WritingOptions): CFB$Container {
|
||||
if(!opts || !opts.numbers) throw new Error("Must pass a `numbers` option -- check the README");
|
||||
@ -1198,6 +1250,21 @@ function numbers_iwa_find(cfb: CFB$Container, deps: Dependents, id: number) {
|
||||
return ainfo;
|
||||
}
|
||||
|
||||
function numbers_add_meta(mlist: ProtoMessage, newid: number, newloc: string) {
|
||||
mlist[3].push({type: 2, data: write_shallow([ [],
|
||||
[{type: 0, data: write_varint49(newid)}],
|
||||
[{type: 2, data: stru8(newloc.replace(/-.*$/, "")) }],
|
||||
[{type: 2, data: stru8(newloc)}],
|
||||
[{type: 2, data: new Uint8Array([2, 0, 0])}],
|
||||
[{type: 2, data: new Uint8Array([2, 0, 0])}],
|
||||
[], [], [], [], // skip fields 6-9
|
||||
[{type: 0, data: write_varint49(0)}],
|
||||
[],
|
||||
[{type: 0, data: write_varint49(0 /* TODO: save_token */)}],
|
||||
])});
|
||||
mlist[1] = [{type: 0, data: write_varint49(Math.max(newid + 1, varint_to_i32(mlist[1][0].data) ))}];
|
||||
}
|
||||
|
||||
function numbers_add_msg(cfb: CFB$Container, type: number, msg: ProtoMessage, path: string, deps: Dependents, id?: number): number {
|
||||
if(!id) id = get_unique_msgid({ deps: [], location: "", type }, deps);
|
||||
var loc = `${path}-${id}.iwa`;
|
||||
@ -1209,25 +1276,50 @@ function numbers_add_msg(cfb: CFB$Container, type: number, msg: ProtoMessage, pa
|
||||
var newloc = loc.replace(/^[\/]/, "").replace(/^Index\//, "").replace(/\.iwa$/,"");
|
||||
numbers_iwa_doit(cfb, deps, 2, ai => {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
|
||||
mlist[3].push({type: 2, data: write_shallow([ [],
|
||||
[{type: 0, data: write_varint49(id as number)}],
|
||||
[{type: 2, data: stru8(newloc.replace(/-.*$/, "")) }],
|
||||
[{type: 2, data: stru8(newloc)}],
|
||||
[{type: 2, data: new Uint8Array([2, 0, 0])}],
|
||||
[{type: 2, data: new Uint8Array([2, 0, 0])}],
|
||||
[], [], [], [],
|
||||
[{type: 0, data: write_varint49(0)}],
|
||||
[],
|
||||
[{type: 0, data: write_varint49(0 /* TODO: save_token */)}],
|
||||
])});
|
||||
mlist[1] = [{type: 0, data: write_varint49(Math.max((id as number) + 1, varint_to_i32(mlist[1][0].data) ))}];
|
||||
numbers_add_meta(mlist, id||0, newloc);
|
||||
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
})
|
||||
return id;
|
||||
}
|
||||
|
||||
/** Add dependency to metadata */
|
||||
function numbers_meta_add_dep(mlist: ProtoMessage, deps: Dependents, id: number, dep: number|number[]) {
|
||||
var loc = deps[id].location.replace(/^Root Entry\//,"").replace(/^Index\//, "").replace(/\.iwa$/,"");
|
||||
var parentidx = mlist[3].findIndex(m => {
|
||||
var mm = parse_shallow(m.data);
|
||||
if(mm[3]?.[0]) return u8str(mm[3][0].data) == loc;
|
||||
if(mm[2]?.[0] && u8str(mm[2][0].data) == loc) return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if(!parent[6]) parent[6] = [];
|
||||
(Array.isArray(dep) ? dep : [dep]).forEach(dep => {
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([ [],
|
||||
[{type: 0, data: write_varint49(dep) }]
|
||||
])
|
||||
});
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
}
|
||||
|
||||
/** Remove dependency from metadata */
|
||||
function numbers_meta_del_dep(mlist: ProtoMessage, deps: Dependents, id: number, dep: number|number[]) {
|
||||
var loc = deps[id].location.replace(/^Root Entry\//,"").replace(/^Index\//, "").replace(/\.iwa$/,"");
|
||||
var parentidx = mlist[3].findIndex(m => {
|
||||
var mm = parse_shallow(m.data);
|
||||
if(mm[3]?.[0]) return u8str(mm[3][0].data) == loc;
|
||||
if(mm[2]?.[0] && u8str(mm[2][0].data) == loc) return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if(!parent[6]) parent[6] = [];
|
||||
parent[6] = parent[6].filter(m => varint_to_i32(parse_shallow(m.data)[1][0].data) != dep);
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
}
|
||||
|
||||
/** Deep copy of the essential parts of a worksheet */
|
||||
function numbers_add_ws(cfb: CFB$Container, deps: Dependents, wsidx: number) {
|
||||
var sheetref = -1, newsheetref = -1;
|
||||
@ -1277,29 +1369,12 @@ function numbers_add_ws(cfb: CFB$Container, deps: Dependents, wsidx: number) {
|
||||
tia.id = tiaref;
|
||||
if(deps[drawables[0]].location == deps[newsheetref].location) arch.push(tia);
|
||||
else {
|
||||
var loc = deps[newsheetref].location;
|
||||
loc = loc.replace(/^Root Entry\//,""); // NOTE: the Root Entry prefix is an artifact of the CFB container library
|
||||
loc = loc.replace(/^Index\//, "").replace(/\.iwa$/,"");
|
||||
/* TODO: there are a number of places that assume the metadata record has ID=2 */
|
||||
numbers_iwa_doit(cfb, deps, 2, (ai => {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
|
||||
/* add reference from SheetArchive file to TIA */
|
||||
var parentidx = mlist[3].findIndex(m => {
|
||||
var mm = parse_shallow(m.data);
|
||||
if(mm[3]?.[0]) return u8str(mm[3][0].data) == loc;
|
||||
if(mm[2]?.[0] && u8str(mm[2][0].data) == loc) return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if(!parent[6]) parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{type: 0, data: write_varint49(tiaref) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, newsheetref, tiaref);
|
||||
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
}));
|
||||
@ -1340,11 +1415,6 @@ function numbers_add_ws(cfb: CFB$Container, deps: Dependents, wsidx: number) {
|
||||
tiaroot.messages[0].data = write_shallow(tia);
|
||||
});
|
||||
|
||||
/* identifier for finding the TableModelArchive in the archive */
|
||||
var loc = deps[tmaref].location;
|
||||
loc = loc.replace(/^Root Entry\//,""); // NOTE: the Root Entry prefix is an artifact of the CFB container library
|
||||
loc = loc.replace(/^Index\//, "").replace(/\.iwa$/,"");
|
||||
|
||||
/* .TST.TableModelArchive */
|
||||
numbers_iwa_doit(cfb, deps, tmaref, (tmaroot: IWAArchiveInfo, arch: IWAArchiveInfo[]) => {
|
||||
/* TODO: formulae currently break due to missing CE details */
|
||||
@ -1412,46 +1482,14 @@ function numbers_add_ws(cfb: CFB$Container, deps: Dependents, wsidx: number) {
|
||||
if(deps[newref].location == deps[oldref].location) deps[newref].location = deps[newref].location.replace(/\.iwa/, `-${newref}.iwa`);
|
||||
CFB.utils.cfb_add(cfb, deps[newref].location, compress_iwa_file(write_iwa_file([ msg ])));
|
||||
|
||||
var newloc = deps[newref].location;
|
||||
newloc = newloc.replace(/^Root Entry\//,""); // NOTE: the Root Entry prefix is an artifact of the CFB container library
|
||||
newloc = newloc.replace(/^Index\//, "").replace(/\.iwa$/,"");
|
||||
var newloc = deps[newref].location.replace(/^Root Entry\//,"").replace(/^Index\//, "").replace(/\.iwa$/,"");
|
||||
|
||||
numbers_iwa_doit(cfb, deps, 2, ai => {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
mlist[3].push({type: 2, data: write_shallow([
|
||||
[],
|
||||
[{type: 0, data: write_varint49(newref)}],
|
||||
[{type: 2, data: stru8(newloc.replace(/-.*$/, "")) }],
|
||||
[{type: 2, data: stru8(newloc)}],
|
||||
[{type: 2, data: new Uint8Array([2, 0, 0])}],
|
||||
[{type: 2, data: new Uint8Array([2, 0, 0])}],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[{type: 0, data: write_varint49(0)}],
|
||||
[],
|
||||
[{type: 0, data: write_varint49(0 /* TODO: save_token */)}],
|
||||
])});
|
||||
mlist[1] = [{type: 0, data: write_varint49(Math.max(newref + 1, varint_to_i32(mlist[1][0].data) ))}];
|
||||
numbers_add_meta(mlist, newref, newloc);
|
||||
|
||||
/* add reference from TableModelArchive file to Tile */
|
||||
var parentidx = mlist[3].findIndex(m => {
|
||||
var mm = parse_shallow(m.data);
|
||||
if(mm[3]?.[0]) return u8str(mm[3][0].data) == loc;
|
||||
if(mm[2]?.[0] && u8str(mm[2][0].data) == loc) return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if(!parent[6]) parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{type: 0, data: write_varint49(newref) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, tmaref, newref);
|
||||
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
@ -1477,45 +1515,14 @@ function numbers_add_ws(cfb: CFB$Container, deps: Dependents, wsidx: number) {
|
||||
if(deps[newref].location == deps[oldref].location) deps[newref].location = deps[newref].location.replace(/\.iwa/, `-${newref}.iwa`);
|
||||
CFB.utils.cfb_add(cfb, deps[newref].location, compress_iwa_file(write_iwa_file([ msg ])));
|
||||
|
||||
var newloc = deps[newref].location;
|
||||
newloc = newloc.replace(/^Root Entry\//,""); // NOTE: the Root Entry prefix is an artifact of the CFB container library
|
||||
newloc = newloc.replace(/^Index\//, "").replace(/\.iwa$/,"");
|
||||
var newloc = deps[newref].location.replace(/^Root Entry\//,"").replace(/^Index\//, "").replace(/\.iwa$/,"");
|
||||
|
||||
numbers_iwa_doit(cfb, deps, 2, (ai => {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
mlist[3].push({type: 2, data: write_shallow([ [],
|
||||
[{type: 0, data: write_varint49(newref)}],
|
||||
[{type: 2, data: stru8(newloc.replace(/-.*$/, "")) }],
|
||||
[{type: 2, data: stru8(newloc)}],
|
||||
[{type: 2, data: new Uint8Array([2, 0, 0])}],
|
||||
[{type: 2, data: new Uint8Array([2, 0, 0])}],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[{type: 0, data: write_varint49(0)}],
|
||||
[],
|
||||
[{type: 0, data: write_varint49(0 /* TODO: save_token */)}],
|
||||
])});
|
||||
mlist[1] = [{type: 0, data: write_varint49(Math.max(newref + 1, varint_to_i32(mlist[1][0].data) ))}];
|
||||
numbers_add_meta(mlist, newref, newloc);
|
||||
|
||||
/* add reference from TableModelArchive file to Tile */
|
||||
var parentidx = mlist[3].findIndex(m => {
|
||||
var mm = parse_shallow(m.data);
|
||||
if(mm[3]?.[0]) return u8str(mm[3][0].data) == loc;
|
||||
if(mm[2]?.[0] && u8str(mm[2][0].data) == loc) return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if(!parent[6]) parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{type: 0, data: write_varint49(newref) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, tmaref, newref);
|
||||
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
}));
|
||||
@ -1552,10 +1559,7 @@ function numbers_add_ws(cfb: CFB$Container, deps: Dependents, wsidx: number) {
|
||||
[{type: 2, data: stru8(`Tables/Tile-${newtileref}`)}],
|
||||
[{type: 2, data: new Uint8Array([2, 0, 0])}],
|
||||
[{type: 2, data: new Uint8Array([2, 0, 0])}],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[], [], [], [], // skip fields 6-9
|
||||
[{type: 0, data: write_varint49(0)}],
|
||||
[],
|
||||
[{type: 0, data: write_varint49(0 /* TODO: save_token */)}],
|
||||
@ -1563,22 +1567,7 @@ function numbers_add_ws(cfb: CFB$Container, deps: Dependents, wsidx: number) {
|
||||
mlist[1] = [{type: 0, data: write_varint49(Math.max(newtileref + 1, varint_to_i32(mlist[1][0].data) ))}];
|
||||
|
||||
/* add reference from TableModelArchive file to Tile */
|
||||
var parentidx = mlist[3].findIndex(m => {
|
||||
var mm = parse_shallow(m.data);
|
||||
if(mm[3]?.[0]) return u8str(mm[3][0].data) == loc;
|
||||
if(mm[2]?.[0] && u8str(mm[2][0].data) == loc) return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if(!parent[6]) parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{type: 0, data: write_varint49(newtileref) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, tmaref, newtileref);
|
||||
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
}));
|
||||
@ -1648,14 +1637,17 @@ function write_numbers_tma(cfb: CFB$Container, deps: Dependents, ws: WorkSheet,
|
||||
data[R_][_C] = _cell;
|
||||
}
|
||||
}
|
||||
} sheet_to_json<any>(ws, { range, header: 1 });
|
||||
var SST: string[] = ["~Sh33tJ5~"];
|
||||
var RSST: RichText[] = [{v:"~54ee77S~", l: "https://sheetjs.com/"}];
|
||||
}
|
||||
var LUT: DataLUT = {
|
||||
cmnt: [{a: "~54ee77S~", t: "... the people who are crazy enough to think they can change the world, are the ones who do."}],
|
||||
ferr: [],
|
||||
fmla: [],
|
||||
nfmt: [],
|
||||
ofmt: [],
|
||||
rsst: [{v:"~54ee77S~", l: "https://sheetjs.com/"}],
|
||||
sst: ["~Sh33tJ5~"]
|
||||
};
|
||||
|
||||
/* identifier for finding the TableModelArchive in the archive */
|
||||
var loc = deps[tmaref].location;
|
||||
loc = loc.replace(/^Root Entry\//,""); // NOTE: the Root Entry prefix is an artifact of the CFB container library
|
||||
loc = loc.replace(/^Index\//, "").replace(/\.iwa$/,"");
|
||||
|
||||
var pb = parse_shallow(tmaroot.messages[0].data);
|
||||
{
|
||||
@ -1721,23 +1713,15 @@ function write_numbers_tma(cfb: CFB$Container, deps: Dependents, ws: WorkSheet,
|
||||
{
|
||||
CFB.utils.cfb_del(cfb, deps[tileref].location);
|
||||
|
||||
/* remove existing tile from reference -- TODO: can this have an id other than 2? */
|
||||
/* remove existing tile from reference */
|
||||
numbers_iwa_doit(cfb, deps, 2, (ai => {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
|
||||
/* remove metadata entry for tile */
|
||||
mlist[3] = mlist[3].filter(m => varint_to_i32(parse_shallow(m.data)[1][0].data) != tileref);
|
||||
|
||||
/* remove reference from TableModelArchive file to Tile */
|
||||
var parentidx = mlist[3].findIndex(m => {
|
||||
var mm = parse_shallow(m.data);
|
||||
if(mm[3]?.[0]) return u8str(mm[3][0].data) == loc;
|
||||
if(mm[2]?.[0] && u8str(mm[2][0].data) == loc) return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if(!parent[6]) parent[6] = [];
|
||||
parent[6] = parent[6].filter(m => varint_to_i32(parse_shallow(m.data)[1][0].data) != tileref);
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_del_dep(mlist, deps, tmaref, tileref);
|
||||
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
}));
|
||||
@ -1769,7 +1753,7 @@ function write_numbers_tma(cfb: CFB$Container, deps: Dependents, ws: WorkSheet,
|
||||
[{type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0)}]
|
||||
];
|
||||
for(var R = tidx * tstride; R <= Math.min(range.e.r, (tidx + 1) * tstride - 1); ++R) {
|
||||
var tilerow = write_TST_TileRowInfo(data[R], SST, RSST, USE_WIDE_ROWS);
|
||||
var tilerow = write_TST_TileRowInfo(data[R], LUT, USE_WIDE_ROWS);
|
||||
tilerow[1][0].data = write_varint49(R - tidx * tstride);
|
||||
tiledata[5].push({data: write_shallow(tilerow), type: 2});
|
||||
}
|
||||
@ -1788,7 +1772,7 @@ function write_numbers_tma(cfb: CFB$Container, deps: Dependents, ws: WorkSheet,
|
||||
var tilecontent = compress_iwa_file(write_iwa_file([newtile]));
|
||||
CFB.utils.cfb_add(cfb, `/Index/Tables/Tile-${newtileid}.iwa`, tilecontent);
|
||||
|
||||
/* update metadata -- TODO: can this have an id other than 2? */
|
||||
/* update metadata */
|
||||
numbers_iwa_doit(cfb, deps, 2, (ai => {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
mlist[3].push({type: 2, data: write_shallow([ [],
|
||||
@ -1805,21 +1789,7 @@ function write_numbers_tma(cfb: CFB$Container, deps: Dependents, ws: WorkSheet,
|
||||
mlist[1] = [{type: 0, data: write_varint49(Math.max(newtileid + 1, varint_to_i32(mlist[1][0].data) ))}];
|
||||
|
||||
/* add reference from TableModelArchive file to Tile */
|
||||
var parentidx = mlist[3].findIndex(m => {
|
||||
var mm = parse_shallow(m.data);
|
||||
if(mm[3]?.[0]) return u8str(mm[3][0].data) == loc;
|
||||
if(mm[2]?.[0] && u8str(mm[2][0].data) == loc) return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if(!parent[6]) parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([ [],
|
||||
[{type: 0, data: write_varint49(newtileid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, tmaref, newtileid);
|
||||
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
}));
|
||||
@ -1865,22 +1835,7 @@ function write_numbers_tma(cfb: CFB$Container, deps: Dependents, ws: WorkSheet,
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
|
||||
/* add reference from TableModelArchive file to merge */
|
||||
var parentidx = mlist[3].findIndex(m => {
|
||||
var mm = parse_shallow(m.data);
|
||||
if(mm[3]?.[0]) return u8str(mm[3][0].data) == loc;
|
||||
if(mm[2]?.[0] && u8str(mm[2][0].data) == loc) return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if(!parent[6]) parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{type: 0, data: write_varint49(mergeid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, tmaref, mergeid);
|
||||
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
}));
|
||||
@ -1896,7 +1851,7 @@ function write_numbers_tma(cfb: CFB$Container, deps: Dependents, ws: WorkSheet,
|
||||
var sstdata = parse_shallow(sstroot.messages[0].data);
|
||||
{
|
||||
sstdata[3] = [];
|
||||
SST.forEach((str, i) => {
|
||||
LUT.sst.forEach((str, i) => {
|
||||
if(i == 0) return; // Numbers will assert if index zero
|
||||
sstdata[3].push({type: 2, data: write_shallow([ [],
|
||||
[ { type: 0, data: write_varint49(i) } ],
|
||||
@ -1923,7 +1878,7 @@ function write_numbers_tma(cfb: CFB$Container, deps: Dependents, ws: WorkSheet,
|
||||
903845 // character style
|
||||
];
|
||||
|
||||
RSST.forEach((rsst, i) => {
|
||||
LUT.rsst.forEach((rsst, i) => {
|
||||
if(i == 0) return;
|
||||
|
||||
/* create .TSWP.StorageArchive (2001) */
|
||||
@ -1999,70 +1954,117 @@ function write_numbers_tma(cfb: CFB$Container, deps: Dependents, ws: WorkSheet,
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
|
||||
/* rsst -> rich text payload */
|
||||
var loc = deps[rsstref].location.replace(/^Root Entry\//,"").replace(/^Index\//, "").replace(/\.iwa$/,"");
|
||||
var parentidx = mlist[3].findIndex(m => {
|
||||
var mm = parse_shallow(m.data);
|
||||
if(mm[3]?.[0]) return u8str(mm[3][0].data) == loc;
|
||||
if(mm[2]?.[0] && u8str(mm[2][0].data) == loc) return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if(!parent[6]) parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([ [],
|
||||
[{type: 0, data: write_varint49(rtpaid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, rsstref, rtpaid);
|
||||
|
||||
/* rich text payload -> storage archive */
|
||||
loc = deps[rtpaid].location.replace(/^Root Entry\//,"").replace(/^Index\//, "").replace(/\.iwa$/,"");
|
||||
parentidx = mlist[3].findIndex(m => {
|
||||
var mm = parse_shallow(m.data);
|
||||
if(mm[3]?.[0]) return u8str(mm[3][0].data) == loc;
|
||||
if(mm[2]?.[0] && u8str(mm[2][0].data) == loc) return true;
|
||||
return false;
|
||||
});
|
||||
parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if(!parent[6]) parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([ [],
|
||||
[{type: 0, data: write_varint49(tswpsaid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, rtpaid, tswpsaid);
|
||||
|
||||
/* storage archive -> smart fields */
|
||||
loc = deps[tswpsaid].location.replace(/^Root Entry\//,"").replace(/^Index\//, "").replace(/\.iwa$/,"");
|
||||
parentidx = mlist[3].findIndex(m => {
|
||||
var mm = parse_shallow(m.data);
|
||||
if(mm[3]?.[0]) return u8str(mm[3][0].data) == loc;
|
||||
if(mm[2]?.[0] && u8str(mm[2][0].data) == loc) return true;
|
||||
return false;
|
||||
});
|
||||
parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if(!parent[6]) parent[6] = [];
|
||||
tswpsarefs.forEach(id => parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([ [],
|
||||
[{type: 0, data: write_varint49(id) }]
|
||||
])
|
||||
}));
|
||||
style_indices.forEach(n => parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([ [],
|
||||
[{type: 0, data: write_varint49(n) }]
|
||||
])
|
||||
}));
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
numbers_meta_add_dep(mlist, deps, tswpsaid, tswpsarefs);
|
||||
numbers_meta_add_dep(mlist, deps, tswpsaid, style_indices);
|
||||
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
});
|
||||
rsstroot.messages[0].data = write_shallow(rsstdata);
|
||||
});
|
||||
|
||||
/* rebuild comment table */
|
||||
if(LUT.cmnt.length > 1) {
|
||||
/* TODO: verify zahl has a comment storage */
|
||||
var cmntref = parse_TSP_Reference(store[19][0].data);
|
||||
var authors: {[a: string]: number} = {}, iauthor = 0; /* TODO: this should be a Map */
|
||||
numbers_iwa_doit(cfb, deps, cmntref, (cmntroot) => {
|
||||
var cmntdata = parse_shallow(cmntroot.messages[0].data);
|
||||
{
|
||||
cmntdata[3] = [];
|
||||
LUT.cmnt.forEach((cc,i) => {
|
||||
if(i == 0) return;
|
||||
var replies: number[] = [];
|
||||
/* TODO: this assumes one level of replies */
|
||||
if(cc.replies) cc.replies.forEach(c => {
|
||||
/* .TSK.AnnotationAuthorArchive (212) TODO: unify names across book */
|
||||
if(!authors[c.a||""]) authors[c.a||""] = numbers_add_msg(cfb, 212, [ [],
|
||||
[ { type: 2, data: stru8(c.a||"") }],
|
||||
[ { type: 2, data: get_author_color(++iauthor) }],
|
||||
[],
|
||||
[ { type: 0, data: write_varint49(0) } ]
|
||||
], "/Index/Tables/DataList", deps);
|
||||
var aaaid = authors[c.a||""];
|
||||
|
||||
/* .TSD.CommentStorageArchive (3056) */
|
||||
var csaid = numbers_add_msg(cfb, 3056, [ [],
|
||||
[ { type: 2, data: stru8(c.t||"") }],
|
||||
[ { type: 2, data: write_shallow([[],
|
||||
[ { type: 1, data: new Uint8Array([0, 0, 0, 128, 116, 109, 182, 65]) }]
|
||||
]) }],
|
||||
[ { type: 2, data: write_TSP_Reference(aaaid) }]
|
||||
], "/Index/Tables/DataList", deps);
|
||||
numbers_iwa_doit(cfb, deps, csaid, iwa => numbers_add_oref(iwa, aaaid));
|
||||
replies.push(csaid);
|
||||
|
||||
/* meta deps */
|
||||
numbers_iwa_doit(cfb, deps, 2, ai => {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
|
||||
/* CSA -> AAA */
|
||||
numbers_meta_add_dep(mlist, deps, csaid, aaaid);
|
||||
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
});
|
||||
|
||||
/* .TSK.AnnotationAuthorArchive (212) TODO: unify names across book */
|
||||
if(!authors[cc.a||""]) authors[cc.a||""] = numbers_add_msg(cfb, 212, [ [],
|
||||
[ { type: 2, data: stru8(cc.a||"") }],
|
||||
[ { type: 2, data: get_author_color(++iauthor) }],
|
||||
[],
|
||||
[ { type: 0, data: write_varint49(0) } ]
|
||||
], "/Index/Tables/DataList", deps);
|
||||
var aaaid = authors[cc.a||""];
|
||||
|
||||
/* .TSD.CommentStorageArchive (3056) */
|
||||
var csaid = numbers_add_msg(cfb, 3056, [ [],
|
||||
[ { type: 2, data: stru8(cc.t||"") }],
|
||||
[ { type: 2, data: write_shallow([[],
|
||||
[ { type: 1, data: new Uint8Array([0, 0, 0, 128, 116, 109, 182, 65]) }]
|
||||
]) }],
|
||||
[ { type: 2, data: write_TSP_Reference(aaaid) }],
|
||||
replies.map(r => ({type: 2, data: write_TSP_Reference(r)})),
|
||||
[ { type: 2, data: write_shallow([[],
|
||||
[ { type: 0, data: write_varint49(i) }],
|
||||
[ { type: 0, data: write_varint49(0) }]
|
||||
]) }],
|
||||
], "/Index/Tables/DataList", deps);
|
||||
numbers_iwa_doit(cfb, deps, csaid, iwa => {
|
||||
numbers_add_oref(iwa, aaaid);
|
||||
replies.forEach(r => numbers_add_oref(iwa, r));
|
||||
});
|
||||
|
||||
/* add to TableDataList */
|
||||
cmntdata[3].push({type: 2, data: write_shallow([ [],
|
||||
[ { type: 0, data: write_varint49(i) } ],
|
||||
[ { type: 0, data: write_varint49(1) } ],
|
||||
[], [], [], [], [], [], [], // skip fields 3-9
|
||||
[ { type: 2, data: write_TSP_Reference(csaid) } ]
|
||||
])});
|
||||
numbers_add_oref(cmntroot, csaid);
|
||||
|
||||
/* meta deps */
|
||||
numbers_iwa_doit(cfb, deps, 2, ai => {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
numbers_meta_add_dep(mlist, deps, cmntref, csaid); // table -> CSA
|
||||
numbers_meta_add_dep(mlist, deps, csaid, aaaid); // CSA -> author
|
||||
if(replies.length) numbers_meta_add_dep(mlist, deps, csaid, replies); // CSA -> replies
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
cmntdata[2][0].data = write_varint49(LUT.cmnt.length + 1);
|
||||
cmntroot.messages[0].data = write_shallow(cmntdata);
|
||||
});
|
||||
}
|
||||
}
|
||||
pb[4][0].data = write_shallow(store);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user