3
3
/*jshint eqnull:true */
4
4
var XLSX = { } ;
5
5
( function ( XLSX ) {
6
- XLSX . version = '0.6.0 ' ;
6
+ XLSX . version = '0.6.1 ' ;
7
7
/* ssf.js (C) 2013-2014 SheetJS -- http://sheetjs.com */
8
8
var SSF = { } ;
9
9
var make_ssf = function ( SSF ) {
@@ -111,7 +111,7 @@ var general_fmt = function(v) {
111
111
}
112
112
else {
113
113
o = v . toFixed ( 11 ) . replace ( / ( \. [ 0 - 9 ] * [ 1 - 9 ] ) 0 * $ / , "$1" ) ;
114
- if ( o . length > 11 + ( v < 0 ?1 :0 ) ) o = v . toPrecision ( 6 ) ;
114
+ if ( o . length > 11 + ( v < 0 ?1 :0 ) ) o = v . toPrecision ( 6 ) ;
115
115
}
116
116
o = o . replace ( / ( \. [ 0 - 9 ] * [ 1 - 9 ] ) 0 + e / , "$1e" ) . replace ( / \. 0 * e / , "e" ) ;
117
117
return o . replace ( "e" , "E" ) . replace ( / \. 0 * $ / , "" ) . replace ( / \. ( [ 0 - 9 ] * [ ^ 0 ] ) 0 * $ / , ".$1" ) . replace ( / ( E [ + - ] ) ( [ 0 - 9 ] ) $ / , "$1" + "0" + "$2" ) ;
@@ -223,7 +223,7 @@ var write_num = function(type, fmt, val) {
223
223
if ( fmt . indexOf ( "E" ) > - 1 ) {
224
224
var idx = fmt . indexOf ( "E" ) - fmt . indexOf ( "." ) - 1 ;
225
225
if ( fmt . match ( / ^ # + 0 .0 E \+ 0 $ / ) ) {
226
- var period = fmt . indexOf ( "." ) ; if ( period === - 1 ) period = fmt . indexOf ( 'E' ) ;
226
+ var period = fmt . indexOf ( "." ) ; if ( period === - 1 ) period = fmt . indexOf ( 'E' ) ;
227
227
var ee = ( Number ( val . toExponential ( 0 ) . substr ( 2 + ( val < 0 ) ) ) ) % period ;
228
228
if ( ee < 0 ) ee += period ;
229
229
o = ( val / Math . pow ( 10 , ee ) ) . toPrecision ( idx + 1 + ( period + ee ) % period ) ;
@@ -841,12 +841,36 @@ function parse_FontFlags(data, length) {
841
841
} ;
842
842
return out ;
843
843
}
844
+ /* 18.4.1 charset to codepage mapping */
845
+ var CS2CP = {
846
+ 0 : 1252 , /* ANSI */
847
+ 1 : 65001 , /* DEFAULT */
848
+ 2 : 65001 , /* SYMBOL */
849
+ 77 : 10000 , /* MAC */
850
+ 128 : 932 , /* SHIFTJIS */
851
+ 129 : 949 , /* HANGUL */
852
+ 130 : 1361 , /* JOHAB */
853
+ 134 : 936 , /* GB2312 */
854
+ 136 : 950 , /* CHINESEBIG5 */
855
+ 161 : 1253 , /* GREEK */
856
+ 162 : 1254 , /* TURKISH */
857
+ 163 : 1258 , /* VIETNAMESE */
858
+ 177 : 1255 , /* HEBREW */
859
+ 178 : 1256 , /* ARABIC */
860
+ 186 : 1257 , /* BALTIC */
861
+ 204 : 1251 , /* RUSSIAN */
862
+ 222 : 874 , /* THAI */
863
+ 238 : 1250 , /* EASTEUROPE */
864
+ 255 : 1252 , /* OEM */
865
+ 69 : 6969 /* MISC */
866
+ } ;
867
+
844
868
/* Parse a list of <r> tags */
845
869
var parse_rs = ( function ( ) {
846
870
var tregex = matchtag ( "t" ) , rpregex = matchtag ( "rPr" ) ;
847
871
/* 18.4.7 rPr CT_RPrElt */
848
872
var parse_rpr = function ( rpr , intro , outro ) {
849
- var font = { } ;
873
+ var font = { } , cp = 65001 ;
850
874
( rpr . match ( / < [ ^ > ] * > / g) || [ ] ) . forEach ( function ( x ) {
851
875
var y = parsexmltag ( x ) ;
852
876
switch ( y [ 0 ] ) {
@@ -863,7 +887,10 @@ var parse_rs = (function() {
863
887
case '<shadow/>' : break ;
864
888
865
889
/* 18.4.1 charset CT_IntProperty TODO */
866
- case '<charset' : break ;
890
+ case '<charset' :
891
+ if ( y . val == '1' ) break ;
892
+ cp = CS2CP [ parseInt ( y . val , 10 ) ] ;
893
+ break ;
867
894
868
895
/* 18.4.2 outline CT_BooleanProperty TODO */
869
896
case '<outline' :
@@ -928,18 +955,20 @@ var parse_rs = (function() {
928
955
if ( font . i ) style . push ( "font-style: italic;" ) ;
929
956
intro . push ( '<span style="' + style . join ( "" ) + '">' ) ;
930
957
outro . push ( "</span>" ) ;
958
+ return cp ;
931
959
} ;
932
960
933
961
/* 18.4.4 r CT_RElt */
934
962
function parse_r ( r ) {
935
963
var terms = [ [ ] , "" , [ ] ] ;
936
964
/* 18.4.12 t ST_Xstring */
937
- var t = r . match ( tregex ) ;
965
+ var t = r . match ( tregex ) , cp = 65001 ;
938
966
if ( ! isval ( t ) ) return "" ;
939
967
terms [ 1 ] = t [ 1 ] ;
940
968
941
969
var rpr = r . match ( rpregex ) ;
942
- if ( isval ( rpr ) ) parse_rpr ( rpr [ 1 ] , terms [ 0 ] , terms [ 2 ] ) ;
970
+ if ( isval ( rpr ) ) cp = parse_rpr ( rpr [ 1 ] , terms [ 0 ] , terms [ 2 ] ) ;
971
+
943
972
return terms [ 0 ] . join ( "" ) + terms [ 1 ] . replace ( / \r \n / g, '<br/>' ) + terms [ 2 ] . join ( "" ) ;
944
973
}
945
974
return function ( rs ) {
@@ -1016,7 +1045,7 @@ function parseNumFmts(t, opts) {
1016
1045
switch ( y [ 0 ] ) {
1017
1046
case '<numFmts' : case '</numFmts>' : case '<numFmts/>' : break ;
1018
1047
case '<numFmt' : {
1019
- var f = unescapexml ( y . formatCode ) , i = parseInt ( y . numFmtId , 10 ) ;
1048
+ var f = utf8read ( unescapexml ( y . formatCode ) ) , i = parseInt ( y . numFmtId , 10 ) ;
1020
1049
styles . NumberFmt [ i ] = f ; if ( i > 0 ) SSF . load ( f , i ) ;
1021
1050
} break ;
1022
1051
default : if ( opts . WTF ) throw 'unrecognized ' + y [ 0 ] + ' in numFmts' ;
0 commit comments