@@ -40,7 +40,7 @@ var NUMBERS = (function() {
40
40
return new DataView ( array . buffer , array . byteOffset , array . byteLength ) ;
41
41
} ;
42
42
var u8str = function ( u8 ) {
43
- return new TextDecoder ( ) . decode ( u8 ) ;
43
+ return typeof TextDecoder != "undefined" ? new TextDecoder ( ) . decode ( u8 ) : utf8read ( a2s ( u8 ) ) ;
44
44
} ;
45
45
var u8concat = function ( u8a ) {
46
46
var len = u8a . reduce ( function ( acc , x ) {
@@ -280,12 +280,17 @@ var NUMBERS = (function() {
280
280
}
281
281
282
282
// src/prebnccell.ts
283
- function parseit ( buf , version ) {
283
+ function parseit ( buf , sst , rsst , version ) {
284
284
var dv = u8_to_dataview ( buf ) ;
285
285
var ctype = buf [ version == 4 ? 1 : 2 ] ;
286
286
var flags = dv . getUint32 ( 4 , true ) ;
287
- var data_offset = 12 + popcnt ( flags & 16270 ) * 4 ;
288
- var sidx = - 1 , ieee = NaN , dt = NaN ;
287
+ var data_offset = 12 + popcnt ( flags & 3470 ) * 4 ;
288
+ var ridx = - 1 , sidx = - 1 , ieee = NaN , dt = new Date ( 2001 , 0 , 1 ) ;
289
+ if ( flags & 512 ) {
290
+ ridx = dv . getUint32 ( data_offset , true ) ;
291
+ data_offset += 4 ;
292
+ }
293
+ data_offset += popcnt ( flags & 12288 ) * 4 ;
289
294
if ( flags & 16 ) {
290
295
sidx = dv . getUint32 ( data_offset , true ) ;
291
296
data_offset += 4 ;
@@ -295,7 +300,7 @@ var NUMBERS = (function() {
295
300
data_offset += 8 ;
296
301
}
297
302
if ( flags & 64 ) {
298
- dt = dv . getFloat64 ( data_offset , true ) ;
303
+ dt . setTime ( dt . getTime ( ) + dv . getFloat64 ( data_offset , true ) * 1e3 ) ;
299
304
data_offset += 8 ;
300
305
}
301
306
var ret ;
@@ -306,30 +311,43 @@ var NUMBERS = (function() {
306
311
ret = { t : "n" , v : ieee } ;
307
312
break ;
308
313
case 3 :
309
- ret = { t : "s" , v : sidx } ;
314
+ ret = { t : "s" , v : sst [ sidx ] } ;
310
315
break ;
311
316
case 5 :
312
- var dd = new Date ( 2001 , 0 , 1 ) ;
313
- dd . setTime ( dd . getTime ( ) + dt * 1e3 ) ;
314
- ret = { t : "d" , v : dd } ;
317
+ ret = { t : "d" , v : dt } ;
315
318
break ;
316
319
case 6 :
317
320
ret = { t : "b" , v : ieee > 0 } ;
318
321
break ;
319
322
case 7 :
320
323
ret = { t : "n" , v : ieee } ;
321
324
break ;
325
+ case 8 :
326
+ ret = { t : "e" , v : 0 } ;
327
+ break ;
328
+ case 9 :
329
+ {
330
+ if ( ridx > - 1 )
331
+ ret = { t : "s" , v : rsst [ ridx ] } ;
332
+ else if ( sidx > - 1 )
333
+ ret = { t : "s" , v : sst [ sidx ] } ;
334
+ else if ( ! isNaN ( ieee ) )
335
+ ret = { t : "n" , v : ieee } ;
336
+ else
337
+ throw new Error ( "Unsupported cell type " . concat ( buf . slice ( 0 , 4 ) ) ) ;
338
+ }
339
+ break ;
322
340
default :
323
341
throw new Error ( "Unsupported cell type " . concat ( buf . slice ( 0 , 4 ) ) ) ;
324
342
}
325
343
return ret ;
326
344
}
327
- function parse ( buf ) {
345
+ function parse ( buf , sst , rsst ) {
328
346
var version = buf [ 0 ] ;
329
347
switch ( version ) {
330
348
case 3 :
331
349
case 4 :
332
- return parseit ( buf , version ) ;
350
+ return parseit ( buf , sst , rsst , version ) ;
333
351
default :
334
352
throw new Error ( "Unsupported pre-BNC version " . concat ( version ) ) ;
335
353
}
@@ -352,11 +370,18 @@ var NUMBERS = (function() {
352
370
return { Sheets : { } , SheetNames : [ ] } ;
353
371
} ;
354
372
var book_append_sheet = function ( wb , ws , name ) {
355
- if ( ! name ) {
356
- for ( var i = 1 ; i < 9999 ; ++ i )
373
+ if ( ! name )
374
+ for ( var i = 1 ; i < 9999 ; ++ i ) {
357
375
if ( wb . SheetNames . indexOf ( name = "Sheet " . concat ( i ) ) == - 1 )
358
376
break ;
359
- }
377
+ }
378
+ else if ( wb . SheetNames . indexOf ( name ) > - 1 )
379
+ for ( var i = 1 ; i < 9999 ; ++ i ) {
380
+ if ( wb . SheetNames . indexOf ( "" . concat ( name , "_" ) . concat ( i ) ) == - 1 ) {
381
+ name = "" . concat ( name , "_" ) . concat ( i ) ;
382
+ break ;
383
+ }
384
+ }
360
385
wb . SheetNames . push ( name ) ;
361
386
wb . Sheets [ name ] = ws ;
362
387
} ;
@@ -406,12 +431,31 @@ var NUMBERS = (function() {
406
431
}
407
432
function parse_TST_TableDataList ( M , root ) {
408
433
var pb = parse_shallow ( root . data ) ;
434
+ var type = varint_to_i32 ( pb [ 1 ] [ 0 ] . data ) ;
409
435
var entries = pb [ 3 ] ;
410
436
var data = [ ] ;
411
437
( entries || [ ] ) . forEach ( function ( entry ) {
412
438
var le = parse_shallow ( entry . data ) ;
413
439
var key = varint_to_i32 ( le [ 1 ] [ 0 ] . data ) >>> 0 ;
414
- data [ key ] = u8str ( le [ 3 ] [ 0 ] . data ) ;
440
+ switch ( type ) {
441
+ case 1 :
442
+ data [ key ] = u8str ( le [ 3 ] [ 0 ] . data ) ;
443
+ break ;
444
+ case 8 :
445
+ {
446
+ var rt = M [ parse_Reference ( le [ 9 ] [ 0 ] . data ) ] [ 0 ] ;
447
+ var rtp = parse_shallow ( rt . data ) ;
448
+ var rtpref = M [ parse_Reference ( rtp [ 1 ] [ 0 ] . data ) ] [ 0 ] ;
449
+ var mtype = varint_to_i32 ( rtpref . meta [ 1 ] [ 0 ] . data ) ;
450
+ if ( mtype != 2001 )
451
+ throw new Error ( "2000 unexpected reference to " . concat ( mtype ) ) ;
452
+ var tswpsa = parse_shallow ( rtpref . data ) ;
453
+ data [ key ] = tswpsa [ 3 ] . map ( function ( x ) {
454
+ return u8str ( x . data ) ;
455
+ } ) . join ( "" ) ;
456
+ }
457
+ break ;
458
+ }
415
459
} ) ;
416
460
return data ;
417
461
}
@@ -444,6 +488,7 @@ var NUMBERS = (function() {
444
488
} , [ ] ) ;
445
489
}
446
490
function parse_TST_TableModelArchive ( M , root , ws ) {
491
+ var _a ;
447
492
var pb = parse_shallow ( root . data ) ;
448
493
var range = { s : { r : 0 , c : 0 } , e : { r : 0 , c : 0 } } ;
449
494
range . e . r = ( varint_to_i32 ( pb [ 6 ] [ 0 ] . data ) >>> 0 ) - 1 ;
@@ -456,6 +501,7 @@ var NUMBERS = (function() {
456
501
{
457
502
var store = parse_shallow ( pb [ 4 ] [ 0 ] . data ) ;
458
503
var sst = parse_TST_TableDataList ( M , M [ parse_Reference ( store [ 4 ] [ 0 ] . data ) ] [ 0 ] ) ;
504
+ var rsst = ( ( _a = store [ 17 ] ) == null ? void 0 : _a [ 0 ] ) ? parse_TST_TableDataList ( M , M [ parse_Reference ( store [ 17 ] [ 0 ] . data ) ] [ 0 ] ) : [ ] ;
459
505
{
460
506
var tile = parse_shallow ( store [ 3 ] [ 0 ] . data ) ;
461
507
var tiles = [ ] ;
@@ -471,12 +517,9 @@ var NUMBERS = (function() {
471
517
tile2 . ref . forEach ( function ( row , R ) {
472
518
row . forEach ( function ( buf , C ) {
473
519
var addr = encode_cell ( { r : R , c : C } ) ;
474
- var res = parse ( buf ) ;
475
- if ( res ) {
520
+ var res = parse ( buf , sst , rsst ) ;
521
+ if ( res )
476
522
ws [ addr ] = res ;
477
- if ( res . t == "s" && typeof res . v == "number" )
478
- res . v = sst [ res . v ] ;
479
- }
480
523
} ) ;
481
524
} ) ;
482
525
} ) ;
@@ -496,18 +539,16 @@ var NUMBERS = (function() {
496
539
function parse_sheetroot ( M , root ) {
497
540
var _a ;
498
541
var pb = parse_shallow ( root . data ) ;
499
- var out = [ { "!ref" : "A1" } , ( ( _a = pb [ 1 ] ) == null ? void 0 : _a [ 0 ] ) ? u8str ( pb [ 1 ] [ 0 ] . data ) : "" ] ;
542
+ var out = {
543
+ name : ( ( _a = pb [ 1 ] ) == null ? void 0 : _a [ 0 ] ) ? u8str ( pb [ 1 ] [ 0 ] . data ) : "" ,
544
+ sheets : [ ]
545
+ } ;
500
546
var shapeoffs = mappa ( pb [ 2 ] , parse_Reference ) ;
501
- var seen = false ;
502
547
shapeoffs . forEach ( function ( off ) {
503
548
M [ off ] . forEach ( function ( m ) {
504
549
var mtype = varint_to_i32 ( m . meta [ 1 ] [ 0 ] . data ) ;
505
- if ( mtype == 6e3 ) {
506
- if ( seen )
507
- return ;
508
- out [ 0 ] = parse_TST_TableInfoArchive ( M , m ) ;
509
- seen = true ;
510
- }
550
+ if ( mtype == 6e3 )
551
+ out . sheets . push ( parse_TST_TableInfoArchive ( M , m ) ) ;
511
552
} ) ;
512
553
} ) ;
513
554
return out ;
@@ -521,7 +562,9 @@ var NUMBERS = (function() {
521
562
var mtype = varint_to_i32 ( m . meta [ 1 ] [ 0 ] . data ) ;
522
563
if ( mtype == 2 ) {
523
564
var root2 = parse_sheetroot ( M , m ) ;
524
- book_append_sheet ( out , root2 [ 0 ] , root2 [ 1 ] ) ;
565
+ root2 . sheets . forEach ( function ( sheet ) {
566
+ book_append_sheet ( out , sheet , root2 . name ) ;
567
+ } ) ;
525
568
}
526
569
} ) ;
527
570
} ) ;
0 commit comments