mirror of
https://github.com/unidoc/unioffice.git
synced 2025-05-02 22:17:07 +08:00
59 lines
38 KiB
Go
59 lines
38 KiB
Go
//
|
|
// Copyright 2020 FoxyUtils ehf. All rights reserved.
|
|
//
|
|
// This is a commercial product and requires a license to operate.
|
|
// A trial license can be obtained at https://unidoc.io
|
|
//
|
|
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
|
|
//
|
|
// Use of this source code is governed by the UniDoc End User License Agreement
|
|
// terms that can be accessed at https://unidoc.io/eula/
|
|
|
|
// Package format provides support for parsing and evaluating
|
|
// spreadsheetml/Excel number formats.
|
|
//
|
|
// Internally spreadsheets store numbers and dates values as a text
|
|
// representation of a floating point number (e.g. 1.2345). This number is then
|
|
// displayed in Excel or another spreadsheet viewer differently depending on the
|
|
// number fornat of the cell style applied to the cell.
|
|
//
|
|
// As an example, the same value of 1.2345 can be displayed as:
|
|
// - "1" with format "0"
|
|
// - "1.2" with format "0.0"
|
|
// - "1.23" with format "0.00"
|
|
// - "1.235" with format "0.000"
|
|
// - "123%" with format "0%"
|
|
// - "1 23/100" with fornat "0 0/100"
|
|
// - "1.23E+00" with format "0.00E+00"
|
|
// - "29:37:41s" with format `[h]:mm:ss"s"`
|
|
package format ;import (_cb "bytes";_g "fmt";_ca "github.com/unidoc/unioffice/common/logger";_d "io";_ce "math";_ge "strconv";_a "strings";_cd "time";);
|
|
|
|
// AddToken adds a format token to the format.
|
|
func (_dg *Format )AddToken (t FmtType ,l []byte ){if _dg ._eb {_dg ._eb =false ;return ;};switch t {case FmtTypeDecimal :_dg ._db =true ;case FmtTypeUnderscore :_dg ._eb =true ;case FmtTypeText :_dg .Whole =append (_dg .Whole ,Token {Type :t });case FmtTypeDate ,FmtTypeTime :_dg .Whole =append (_dg .Whole ,Token {Type :t ,DateTime :string (l )});case FmtTypePercent :_dg ._gc =true ;t =FmtTypeLiteral ;l =[]byte {'%'};fallthrough;case FmtTypeDigitOpt :fallthrough;case FmtTypeLiteral ,FmtTypeDigit ,FmtTypeDollar ,FmtTypeComma :if l ==nil {l =[]byte {0};};for _ ,_bb :=range l {if _dg .IsExponential {_dg .Exponent =append (_dg .Exponent ,Token {Type :t ,Literal :_bb });}else if !_dg ._db {_dg .Whole =append (_dg .Whole ,Token {Type :t ,Literal :_bb });}else {_dg .Fractional =append (_dg .Fractional ,Token {Type :t ,Literal :_bb });};};case FmtTypeDigitOptThousands :_dg ._gfg =true ;case FmtTypeFraction :_cc :=_a .Split (string (l ),"\u002f");if len (_cc )==2{_dg ._aa =true ;_dg ._gcg ,_ =_ge .ParseInt (_cc [1],10,64);for _ ,_dbe :=range _cc [1]{if _dbe =='?'||_dbe =='0'{_dg ._gdd ++;};};};default:_ca .Log .Debug ("\u0075\u006e\u0073u\u0070\u0070\u006f\u0072t\u0065\u0064\u0020\u0070\u0068\u0020\u0074y\u0070\u0065\u0020\u0069\u006e\u0020\u0070\u0061\u0072\u0073\u0065\u0020\u0025\u0076",t );};};func (_bea *Lexer )nextFmt (){_bea ._ffa =append (_bea ._ffa ,_bea ._cbg );_bea ._cbg =Format {}};var _gf =[...]uint8 {0,14,26,41,53,67,81,94,118,135,146,157,172,183};const _acfe int =34;func _ea (_ecd int64 )int64 {if _ecd < 0{return -_ecd ;};return _ecd ;};type Lexer struct{_cbg Format ;_ffa []Format ;};func (_gecc *Lexer )Lex (r _d .Reader ){_ffd ,_bgd ,_caa :=0,0,0;_aea :=-1;_ccff ,_ebcd ,_cegc :=0,0,0;_ =_ebcd ;_ =_cegc ;_bcef :=1;_ =_bcef ;_bgf :=make ([]byte ,4096);_bfa :=false ;for !_bfa {_ffb :=0;if _ccff > 0{_ffb =_bgd -_ccff ;};_bgd =0;_ceb ,_ecef :=r .Read (_bgf [_ffb :]);if _ceb ==0||_ecef !=nil {_bfa =true ;};_caa =_ceb +_ffb ;if _caa < len (_bgf ){_aea =_caa ;};{_ffd =_cce ;_ccff =0;_ebcd =0;_cegc =0;};{if _bgd ==_caa {goto _ccge ;};switch _ffd {case 34:goto _fbfa ;case 35:goto _ced ;case 0:goto _cfbe ;case 36:goto _ecca ;case 37:goto _afd ;case 1:goto _fdc ;case 2:goto _edg ;case 38:goto _cda ;case 3:goto _bebb ;case 4:goto _aed ;case 39:goto _dfda ;case 5:goto _ggg ;case 6:goto _cafc ;case 7:goto _ebf ;case 8:goto _acb ;case 40:goto _ggbd ;case 9:goto _caef ;case 41:goto _abcb ;case 10:goto _effb ;case 42:goto _gffc ;case 11:goto _dbc ;case 43:goto _aebd ;case 44:goto _aaf ;case 45:goto _ecf ;case 12:goto _daba ;case 46:goto _bcc ;case 13:goto _gfgc ;case 14:goto _dgf ;case 15:goto _cffe ;case 16:goto _addc ;case 47:goto _fcg ;case 17:goto _aef ;case 48:goto _abb ;case 18:goto _affd ;case 19:goto _cafb ;case 20:goto _dge ;case 49:goto _aedd ;case 50:goto _adef ;case 21:goto _fga ;case 22:goto _eggf ;case 23:goto _gdcb ;case 24:goto _gca ;case 25:goto _ddge ;case 51:goto _eaeg ;case 26:goto _feaf ;case 52:goto _gada ;case 53:goto _bab ;case 54:goto _egcc ;case 55:goto _fbde ;case 56:goto _ffab ;case 57:goto _abaa ;case 27:goto _cag ;case 28:goto _cbdb ;case 29:goto _cgg ;case 30:goto _afdf ;case 31:goto _aad ;case 58:goto _aged ;case 32:goto _aacb ;case 59:goto _befd ;case 33:goto _dgbg ;case 60:goto _daa ;case 61:goto _fca ;case 62:goto _ffbe ;};goto _abfb ;_cebg :switch _cegc {case 2:{_bgd =(_ebcd )-1;_gecc ._cbg .AddToken (FmtTypeDigit ,nil );};case 3:{_bgd =(_ebcd )-1;_gecc ._cbg .AddToken (FmtTypeDigitOpt ,nil );};case 5:{_bgd =(_ebcd )-1;};case 8:{_bgd =(_ebcd )-1;_gecc ._cbg .AddToken (FmtTypePercent ,nil );};case 13:{_bgd =(_ebcd )-1;_gecc ._cbg .AddToken (FmtTypeFraction ,_bgf [_ccff :_ebcd ]);};case 14:{_bgd =(_ebcd )-1;_gecc ._cbg .AddToken (FmtTypeDate ,_bgf [_ccff :_ebcd ]);};case 15:{_bgd =(_ebcd )-1;_gecc ._cbg .AddToken (FmtTypeTime ,_bgf [_ccff :_ebcd ]);};case 16:{_bgd =(_ebcd )-1;_gecc ._cbg .AddToken (FmtTypeTime ,_bgf [_ccff :_ebcd ]);};case 18:{_bgd =(_ebcd )-1;};case 20:{_bgd =(_ebcd )-1;_gecc ._cbg .AddToken (FmtTypeLiteral ,_bgf [_ccff :_ebcd ]);};case 21:{_bgd =(_ebcd )-1;_gecc ._cbg .AddToken (FmtTypeLiteral ,_bgf [_ccff +1:_ebcd -1]);};};goto _agge ;_efc :_bgd =(_ebcd )-1;{_gecc ._cbg .AddToken (FmtTypeFraction ,_bgf [_ccff :_ebcd ]);};goto _agge ;_abe :_bgd =(_ebcd )-1;{_gecc ._cbg .AddToken (FmtTypeDigitOpt ,nil );};goto _agge ;_bdff :_ebcd =_bgd +1;{_gecc ._cbg .AddToken (FmtTypeDigitOptThousands ,nil );};goto _agge ;_ggb :_bgd =(_ebcd )-1;{_gecc ._cbg .AddToken (FmtTypePercent ,nil );};goto _agge ;_bgge :_bgd =(_ebcd )-1;{_gecc ._cbg .AddToken (FmtTypeDate ,_bgf [_ccff :_ebcd ]);};goto _agge ;_bfd :_bgd =(_ebcd )-1;{_gecc ._cbg .AddToken (FmtTypeDigit ,nil );};goto _agge ;_gaeb :_bgd =(_ebcd )-1;{_gecc ._cbg .AddToken (FmtTypeTime ,_bgf [_ccff :_ebcd ]);};goto _agge ;_efag :_bgd =(_ebcd )-1;{_gecc ._cbg .AddToken (FmtTypeLiteral ,_bgf [_ccff :_ebcd ]);};goto _agge ;_cea :_ebcd =_bgd +1;{_gecc ._cbg ._caf =true ;};goto _agge ;_cfbc :_ebcd =_bgd +1;{_gecc ._cbg .AddToken (FmtTypeLiteral ,_bgf [_ccff :_ebcd ]);};goto _agge ;_bgfd :_ebcd =_bgd +1;{_gecc ._cbg .AddToken (FmtTypeDollar ,nil );};goto _agge ;_adbb :_ebcd =_bgd +1;{_gecc ._cbg .AddToken (FmtTypeComma ,nil );};goto _agge ;_eca :_ebcd =_bgd +1;{_gecc ._cbg .AddToken (FmtTypeDecimal ,nil );};goto _agge ;_gea :_ebcd =_bgd +1;{_gecc .nextFmt ();};goto _agge ;_dbf :_ebcd =_bgd +1;{_gecc ._cbg .AddToken (FmtTypeText ,nil );};goto _agge ;_fdb :_ebcd =_bgd +1;{_gecc ._cbg .AddToken (FmtTypeUnderscore ,nil );};goto _agge ;_bedd :_ebcd =_bgd ;_bgd --;{_gecc ._cbg .AddToken (FmtTypeLiteral ,_bgf [_ccff :_ebcd ]);};goto _agge ;_dfc :_ebcd =_bgd ;_bgd --;{_gecc ._cbg .AddToken (FmtTypeLiteral ,_bgf [_ccff +1:_ebcd -1]);};goto _agge ;_dee :_ebcd =_bgd ;_bgd --;{_gecc ._cbg .AddToken (FmtTypeDigitOpt ,nil );};goto _agge ;_egad :_ebcd =_bgd ;_bgd --;{_gecc ._cbg .AddToken (FmtTypeFraction ,_bgf [_ccff :_ebcd ]);};goto _agge ;_dggb :_ebcd =_bgd ;_bgd --;{_gecc ._cbg .AddToken (FmtTypePercent ,nil );};goto _agge ;_bdb :_ebcd =_bgd ;_bgd --;{_gecc ._cbg .AddToken (FmtTypeDate ,_bgf [_ccff :_ebcd ]);};goto _agge ;_fdbg :_ebcd =_bgd ;_bgd --;{_gecc ._cbg .AddToken (FmtTypeDigit ,nil );};goto _agge ;_dfge :_ebcd =_bgd ;_bgd --;{_gecc ._cbg .AddToken (FmtTypeTime ,_bgf [_ccff :_ebcd ]);};goto _agge ;_aee :_ebcd =_bgd ;_bgd --;{};goto _agge ;_efac :_ebcd =_bgd +1;{_gecc ._cbg .IsExponential =true ;};goto _agge ;_cbe :_ebcd =_bgd +1;{_gecc ._cbg .AddToken (FmtTypeLiteral ,_bgf [_ccff +1:_ebcd ]);};goto _agge ;_agge :_ccff =0;if _bgd ++;_bgd ==_caa {goto _dceg ;};_fbfa :_ccff =_bgd ;switch _bgf [_bgd ]{case 34:goto _gac ;case 35:goto _eceg ;case 36:goto _bgfd ;case 37:goto _fegb ;case 44:goto _adbb ;case 46:goto _eca ;case 47:goto _dda ;case 48:goto _bfb ;case 58:goto _eag ;case 59:goto _gea ;case 63:goto _ffc ;case 64:goto _dbf ;case 65:goto _afdb ;case 69:goto _eea ;case 71:goto _afc ;case 91:goto _ecee ;case 92:goto _ddb ;case 95:goto _fdb ;case 100:goto _dda ;case 104:goto _eag ;case 109:goto _fce ;case 115:goto _afgc ;case 121:goto _faf ;};if 49<=_bgf [_bgd ]&&_bgf [_bgd ]<=57{goto _ggdc ;};goto _cfbc ;_gac :_ebcd =_bgd +1;_cegc =20;goto _cac ;_cac :if _bgd ++;_bgd ==_caa {goto _bdda ;};_ced :if _bgf [_bgd ]==34{goto _bfaa ;};goto _abf ;_abf :if _bgd ++;_bgd ==_caa {goto _bbb ;};_cfbe :if _bgf [_bgd ]==34{goto _bfaa ;};goto _abf ;_bfaa :_ebcd =_bgd +1;_cegc =21;goto _beba ;_beba :if _bgd ++;_bgd ==_caa {goto _fafc ;};_ecca :if _bgf [_bgd ]==34{goto _abf ;};goto _dfc ;_eceg :_ebcd =_bgd +1;_cegc =3;goto _eae ;_eae :if _bgd ++;_bgd ==_caa {goto _afe ;};_afd :switch _bgf [_bgd ]{case 35:goto _dec ;case 37:goto _dec ;case 44:goto _fgeg ;case 47:goto _cec ;case 48:goto _dec ;case 63:goto _dec ;};goto _dee ;_dec :if _bgd ++;_bgd ==_caa {goto _fgf ;};_fdc :switch _bgf [_bgd ]{case 35:goto _dec ;case 37:goto _dec ;case 47:goto _cec ;case 48:goto _dec ;case 63:goto _dec ;};goto _cebg ;_cec :if _bgd ++;_bgd ==_caa {goto _baab ;};_edg :switch _bgf [_bgd ]{case 35:goto _abg ;case 37:goto _dba ;case 48:goto _egc ;case 63:goto _abg ;};if 49<=_bgf [_bgd ]&&_bgf [_bgd ]<=57{goto _decf ;};goto _cebg ;_abg :_ebcd =_bgd +1;goto _caaf ;_caaf :if _bgd ++;_bgd ==_caa {goto _dae ;};_cda :switch _bgf [_bgd ]{case 35:goto _abg ;case 37:goto _abg ;case 44:goto _abg ;case 46:goto _abg ;case 48:goto _abg ;case 63:goto _abg ;case 65:goto _bfg ;};goto _egad ;_bfg :if _bgd ++;_bgd ==_caa {goto _ceab ;};_bebb :switch _bgf [_bgd ]{case 47:goto _cacd ;case 77:goto _cdgfe ;};goto _efc ;_cacd :if _bgd ++;_bgd ==_caa {goto _ffg ;};_aed :if _bgf [_bgd ]==80{goto _dgb ;};goto _efc ;_dgb :_ebcd =_bgd +1;goto _dfbb ;_dfbb :if _bgd ++;_bgd ==_caa {goto _dfef ;};_dfda :if _bgf [_bgd ]==65{goto _bfg ;};goto _egad ;_cdgfe :if _bgd ++;_bgd ==_caa {goto _dfcg ;};_ggg :if _bgf [_bgd ]==47{goto _bbg ;};goto _efc ;_bbg :if _bgd ++;_bgd ==_caa {goto _aedf ;};_cafc :if _bgf [_bgd ]==80{goto _cff ;};goto _efc ;_cff :if _bgd ++;_bgd ==_caa {goto _agebg ;};_ebf :if _bgf [_bgd ]==77{goto _dgb ;};goto _efc ;_dba :if _bgd ++;_bgd ==_caa {goto _gabf ;};_acb :switch _bgf [_bgd ]{case 35:goto _eggb ;case 37:goto _gdf ;case 63:goto _eggb ;};if 48<=_bgf [_bgd ]&&_bgf [_bgd ]<=57{goto _ccbg ;};goto _cebg ;_eggb :_ebcd =_bgd +1;goto _efbg ;_efbg :if _bgd ++;_bgd ==_caa {goto _bgcf ;};_ggbd :switch _bgf [_bgd ]{case 35:goto _abg ;case 37:goto _deb ;case 44:goto _abg ;case 46:goto _abg ;case 48:goto _abg ;case 63:goto _abg ;case 65:goto _bfg ;};goto _egad ;_deb :if _bgd ++;_bgd ==_caa {goto _bgfc ;};_caef :switch _bgf [_bgd ]{case 35:goto _fgb ;case 44:goto _fgb ;case 46:goto _fgb ;case 48:goto _fgb ;case 63:goto _fgb ;};goto _efc ;_fgb :_ebcd =_bgd +1;goto _bcd ;_bcd :if _bgd ++;_bgd ==_caa {goto _gdba ;};_abcb :switch _bgf [_bgd ]{case 35:goto _fgb ;case 44:goto _fgb ;case 46:goto _fgb ;case 48:goto _fgb ;case 63:goto _fgb ;case 65:goto _bfg ;};goto _egad ;_gdf :if _bgd ++;_bgd ==_caa {goto _cbf ;};_effb :if _bgf [_bgd ]==37{goto _gdf ;};if 48<=_bgf [_bgd ]&&_bgf [_bgd ]<=57{goto _ccbg ;};goto _cebg ;_ccbg :_ebcd =_bgd +1;_cegc =13;goto _gafbg ;_gafbg :if _bgd ++;_bgd ==_caa {goto _cfc ;};_gffc :switch _bgf [_bgd ]{case 35:goto _abg ;case 37:goto _aace ;case 44:goto _abg ;case 46:goto _abg ;case 48:goto _cfd ;case 63:goto _abg ;case 65:goto _bfg ;};if 49<=_bgf [_bgd ]&&_bgf [_bgd ]<=57{goto _ccbg ;};goto _egad ;_aace :if _bgd ++;_bgd ==_caa {goto _caad ;};_dbc :switch _bgf [_bgd ]{case 35:goto _fgb ;case 37:goto _gdf ;case 44:goto _fgb ;case 46:goto _fgb ;case 63:goto _fgb ;};if 48<=_bgf [_bgd ]&&_bgf [_bgd ]<=57{goto _ccbg ;};goto _efc ;_cfd :_ebcd =_bgd +1;goto _bag ;_bag :if _bgd ++;_bgd ==_caa {goto _dabg ;};_aebd :switch _bgf [_bgd ]{case 35:goto _abg ;case 37:goto _cfd ;case 44:goto _abg ;case 46:goto _abg ;case 48:goto _cfd ;case 63:goto _abg ;case 65:goto _bfg ;};if 49<=_bgf [_bgd ]&&_bgf [_bgd ]<=57{goto _ccbg ;};goto _egad ;_egc :_ebcd =_bgd +1;goto _agd ;_agd :if _bgd ++;_bgd ==_caa {goto _egcf ;};_aaf :switch _bgf [_bgd ]{case 35:goto _abg ;case 37:goto _cfd ;case 44:goto _abg ;case 46:goto _abg ;case 48:goto _egc ;case 63:goto _abg ;case 65:goto _bfg ;};if 49<=_bgf [_bgd ]&&_bgf [_bgd ]<=57{goto _decf ;};goto _egad ;_decf :_ebcd =_bgd +1;goto _deggb ;_deggb :if _bgd ++;_bgd ==_caa {goto _eec ;};_ecf :switch _bgf [_bgd ]{case 35:goto _abg ;case 37:goto _ccbg ;case 44:goto _abg ;case 46:goto _abg ;case 48:goto _egc ;case 63:goto _abg ;case 65:goto _bfg ;};if 49<=_bgf [_bgd ]&&_bgf [_bgd ]<=57{goto _decf ;};goto _egad ;_fgeg :if _bgd ++;_bgd ==_caa {goto _afee ;};_daba :if _bgf [_bgd ]==35{goto _bdff ;};goto _abe ;_fegb :_ebcd =_bgd +1;_cegc =8;goto _effe ;_effe :if _bgd ++;_bgd ==_caa {goto _fcfd ;};_bcc :switch _bgf [_bgd ]{case 35:goto _fed ;case 37:goto _bcb ;case 48:goto _gebd ;case 63:goto _fed ;};if 49<=_bgf [_bgd ]&&_bgf [_bgd ]<=57{goto _ccfe ;};goto _dggb ;_fed :if _bgd ++;_bgd ==_caa {goto _dca ;};_gfgc :switch _bgf [_bgd ]{case 35:goto _fed ;case 47:goto _cec ;case 48:goto _fed ;case 63:goto _fed ;};goto _ggb ;_bcb :if _bgd ++;_bgd ==_caa {goto _ccbgc ;};_dgf :if _bgf [_bgd ]==37{goto _bcb ;};if 48<=_bgf [_bgd ]&&_bgf [_bgd ]<=57{goto _ccfe ;};goto _cebg ;_ccfe :if _bgd ++;_bgd ==_caa {goto _feafd ;};_cffe :switch _bgf [_bgd ]{case 37:goto _bcb ;case 47:goto _cec ;};if 48<=_bgf [_bgd ]&&_bgf [_bgd ]<=57{goto _ccfe ;};goto _cebg ;_gebd :if _bgd ++;_bgd ==_caa {goto _ccgd ;};_addc :switch _bgf [_bgd ]{case 35:goto _fed ;case 37:goto _bcb ;case 47:goto _cec ;case 48:goto _gebd ;case 63:goto _fed ;};if 49<=_bgf [_bgd ]&&_bgf [_bgd ]<=57{goto _ccfe ;};goto _ggb ;_dda :_ebcd =_bgd +1;goto _gad ;_gad :if _bgd ++;_bgd ==_caa {goto _fdbe ;};_fcg :switch _bgf [_bgd ]{case 47:goto _dda ;case 100:goto _dda ;case 109:goto _dda ;case 121:goto _bgdf ;};goto _bdb ;_bgdf :if _bgd ++;_bgd ==_caa {goto _aabg ;};_aef :if _bgf [_bgd ]==121{goto _dda ;};goto _bgge ;_bfb :_ebcd =_bgd +1;_cegc =2;goto _bgc ;_bgc :if _bgd ++;_bgd ==_caa {goto _dagg ;};_abb :switch _bgf [_bgd ]{case 35:goto _dec ;case 37:goto _eac ;case 47:goto _cec ;case 48:goto _fedd ;case 63:goto _dec ;};if 49<=_bgf [_bgd ]&&_bgf [_bgd ]<=57{goto _gfgf ;};goto _fdbg ;_eac :if _bgd ++;_bgd ==_caa {goto _abd ;};_affd :switch _bgf [_bgd ]{case 35:goto _dec ;case 37:goto _eac ;case 47:goto _cec ;case 48:goto _eac ;case 63:goto _dec ;};if 49<=_bgf [_bgd ]&&_bgf [_bgd ]<=57{goto _ccfe ;};goto _bfd ;_fedd :if _bgd ++;_bgd ==_caa {goto _gabe ;};_cafb :switch _bgf [_bgd ]{case 35:goto _dec ;case 37:goto _eac ;case 47:goto _cec ;case 48:goto _fedd ;case 63:goto _dec ;};if 49<=_bgf [_bgd ]&&_bgf [_bgd ]<=57{goto _gfgf ;};goto _bfd ;_gfgf :if _bgd ++;_bgd ==_caa {goto _cebb ;};_dge :switch _bgf [_bgd ]{case 37:goto _ccfe ;case 47:goto _cec ;};if 48<=_bgf [_bgd ]&&_bgf [_bgd ]<=57{goto _gfgf ;};goto _cebg ;_ggdc :_ebcd =_bgd +1;_cegc =20;goto _bedc ;_bedc :if _bgd ++;_bgd ==_caa {goto _eaegb ;};_aedd :switch _bgf [_bgd ]{case 37:goto _ccfe ;case 47:goto _cec ;};if 48<=_bgf [_bgd ]&&_bgf [_bgd ]<=57{goto _gfgf ;};goto _bedd ;_eag :_ebcd =_bgd +1;_cegc =15;goto _cfdd ;_cfdd :if _bgd ++;_bgd ==_caa {goto _agea ;};_adef :switch _bgf [_bgd ]{case 58:goto _eag ;case 65:goto _cga ;case 104:goto _eag ;case 109:goto _eag ;case 115:goto _afgc ;};goto _dfge ;_cga :if _bgd ++;_bgd ==_caa {goto _edbb ;};_fga :switch _bgf [_bgd ]{case 47:goto _fcba ;case 77:goto _gfc ;};goto _cebg ;_fcba :if _bgd ++;_bgd ==_caa {goto _fbcg ;};_eggf :if _bgf [_bgd ]==80{goto _eag ;};goto _cebg ;_gfc :if _bgd ++;_bgd ==_caa {goto _bac ;};_gdcb :if _bgf [_bgd ]==47{goto _bfab ;};goto _cebg ;_bfab :if _bgd ++;_bgd ==_caa {goto _aeef ;};_gca :if _bgf [_bgd ]==80{goto _bdcb ;};goto _cebg ;_bdcb :if _bgd ++;_bgd ==_caa {goto _bga ;};_ddge :if _bgf [_bgd ]==77{goto _eag ;};goto _cebg ;_afgc :_ebcd =_bgd +1;_cegc =15;goto _aeec ;_aeec :if _bgd ++;_bgd ==_caa {goto _gbb ;};_eaeg :switch _bgf [_bgd ]{case 46:goto _eda ;case 58:goto _eag ;case 65:goto _cga ;case 104:goto _eag ;case 109:goto _eag ;case 115:goto _afgc ;};goto _dfge ;_eda :if _bgd ++;_bgd ==_caa {goto _bdde ;};_feaf :if _bgf [_bgd ]==48{goto _dfbg ;};goto _gaeb ;_dfbg :_ebcd =_bgd +1;_cegc =15;goto _ebcb ;_ebcb :if _bgd ++;_bgd ==_caa {goto _cbge ;};_gada :switch _bgf [_bgd ]{case 48:goto _aaga ;case 58:goto _eag ;case 65:goto _cga ;case 104:goto _eag ;case 109:goto _eag ;case 115:goto _afgc ;};goto _dfge ;_aaga :_ebcd =_bgd +1;_cegc =15;goto _bbdf ;_bbdf :if _bgd ++;_bgd ==_caa {goto _gbg ;};_bab :switch _bgf [_bgd ]{case 48:goto _eag ;case 58:goto _eag ;case 65:goto _cga ;case 104:goto _eag ;case 109:goto _eag ;case 115:goto _afgc ;};goto _dfge ;_ffc :_ebcd =_bgd +1;_cegc =5;goto _gab ;_gab :if _bgd ++;_bgd ==_caa {goto _bagb ;};_egcc :switch _bgf [_bgd ]{case 35:goto _dec ;case 37:goto _dec ;case 47:goto _cec ;case 48:goto _dec ;case 63:goto _dec ;};goto _aee ;_afdb :_ebcd =_bgd +1;_cegc =20;goto _cfa ;_cfa :if _bgd ++;_bgd ==_caa {goto _ecfe ;};_fbde :switch _bgf [_bgd ]{case 47:goto _fcba ;case 77:goto _gfc ;};goto _bedd ;_eea :if _bgd ++;_bgd ==_caa {goto _abbb ;};_ffab :switch _bgf [_bgd ]{case 43:goto _efac ;case 45:goto _efac ;};goto _bedd ;_afc :_ebcd =_bgd +1;goto _bfee ;_bfee :if _bgd ++;_bgd ==_caa {goto _ffe ;};_abaa :if _bgf [_bgd ]==101{goto _bgfb ;};goto _bedd ;_bgfb :if _bgd ++;_bgd ==_caa {goto _afde ;};_cag :if _bgf [_bgd ]==110{goto _ecae ;};goto _efag ;_ecae :if _bgd ++;_bgd ==_caa {goto _dgfb ;};_cbdb :if _bgf [_bgd ]==101{goto _ffcc ;};goto _efag ;_ffcc :if _bgd ++;_bgd ==_caa {goto _bacd ;};_cgg :if _bgf [_bgd ]==114{goto _cdb ;};goto _efag ;_cdb :if _bgd ++;_bgd ==_caa {goto _ege ;};_afdf :if _bgf [_bgd ]==97{goto _adf ;};goto _efag ;_adf :if _bgd ++;_bgd ==_caa {goto _fgfb ;};_aad :if _bgf [_bgd ]==108{goto _cea ;};goto _efag ;_ecee :_ebcd =_bgd +1;_cegc =20;goto _gdb ;_gdb :if _bgd ++;_bgd ==_caa {goto _cfgc ;};_aged :switch _bgf [_bgd ]{case 104:goto _bfge ;case 109:goto _bfge ;case 115:goto _bfge ;};goto _egcg ;_egcg :if _bgd ++;_bgd ==_caa {goto _agda ;};_aacb :if _bgf [_bgd ]==93{goto _bbc ;};goto _egcg ;_bbc :_ebcd =_bgd +1;_cegc =18;goto _gcge ;_dcd :_ebcd =_bgd +1;_cegc =16;goto _gcge ;_gcge :if _bgd ++;_bgd ==_caa {goto _ggc ;};_befd :if _bgf [_bgd ]==93{goto _bbc ;};goto _egcg ;_bfge :if _bgd ++;_bgd ==_caa {goto _ceaa ;};_dgbg :if _bgf [_bgd ]==93{goto _dcd ;};goto _egcg ;_ddb :if _bgd ++;_bgd ==_caa {goto _abgc ;};_daa :goto _cbe ;_fce :_ebcd =_bgd +1;_cegc =14;goto _bbgg ;_bbgg :if _bgd ++;_bgd ==_caa {goto _bgag ;};_fca :switch _bgf [_bgd ]{case 47:goto _dda ;case 58:goto _eag ;case 65:goto _cga ;case 100:goto _dda ;case 104:goto _eag ;case 109:goto _fce ;case 115:goto _afgc ;case 121:goto _bgdf ;};goto _bdb ;_faf :if _bgd ++;_bgd ==_caa {goto _fged ;};_ffbe :if _bgf [_bgd ]==121{goto _dda ;};goto _bedd ;_abfb :_dceg :_ffd =34;goto _ccge ;_bdda :_ffd =35;goto _ccge ;_bbb :_ffd =0;goto _ccge ;_fafc :_ffd =36;goto _ccge ;_afe :_ffd =37;goto _ccge ;_fgf :_ffd =1;goto _ccge ;_baab :_ffd =2;goto _ccge ;_dae :_ffd =38;goto _ccge ;_ceab :_ffd =3;goto _ccge ;_ffg :_ffd =4;goto _ccge ;_dfef :_ffd =39;goto _ccge ;_dfcg :_ffd =5;goto _ccge ;_aedf :_ffd =6;goto _ccge ;_agebg :_ffd =7;goto _ccge ;_gabf :_ffd =8;goto _ccge ;_bgcf :_ffd =40;goto _ccge ;_bgfc :_ffd =9;goto _ccge ;_gdba :_ffd =41;goto _ccge ;_cbf :_ffd =10;goto _ccge ;_cfc :_ffd =42;goto _ccge ;_caad :_ffd =11;goto _ccge ;_dabg :_ffd =43;goto _ccge ;_egcf :_ffd =44;goto _ccge ;_eec :_ffd =45;goto _ccge ;_afee :_ffd =12;goto _ccge ;_fcfd :_ffd =46;goto _ccge ;_dca :_ffd =13;goto _ccge ;_ccbgc :_ffd =14;goto _ccge ;_feafd :_ffd =15;goto _ccge ;_ccgd :_ffd =16;goto _ccge ;_fdbe :_ffd =47;goto _ccge ;_aabg :_ffd =17;goto _ccge ;_dagg :_ffd =48;goto _ccge ;_abd :_ffd =18;goto _ccge ;_gabe :_ffd =19;goto _ccge ;_cebb :_ffd =20;goto _ccge ;_eaegb :_ffd =49;goto _ccge ;_agea :_ffd =50;goto _ccge ;_edbb :_ffd =21;goto _ccge ;_fbcg :_ffd =22;goto _ccge ;_bac :_ffd =23;goto _ccge ;_aeef :_ffd =24;goto _ccge ;_bga :_ffd =25;goto _ccge ;_gbb :_ffd =51;goto _ccge ;_bdde :_ffd =26;goto _ccge ;_cbge :_ffd =52;goto _ccge ;_gbg :_ffd =53;goto _ccge ;_bagb :_ffd =54;goto _ccge ;_ecfe :_ffd =55;goto _ccge ;_abbb :_ffd =56;goto _ccge ;_ffe :_ffd =57;goto _ccge ;_afde :_ffd =27;goto _ccge ;_dgfb :_ffd =28;goto _ccge ;_bacd :_ffd =29;goto _ccge ;_ege :_ffd =30;goto _ccge ;_fgfb :_ffd =31;goto _ccge ;_cfgc :_ffd =58;goto _ccge ;_agda :_ffd =32;goto _ccge ;_ggc :_ffd =59;goto _ccge ;_ceaa :_ffd =33;goto _ccge ;_abgc :_ffd =60;goto _ccge ;_bgag :_ffd =61;goto _ccge ;_fged :_ffd =62;goto _ccge ;_ccge :{};if _bgd ==_aea {switch _ffd {case 35:goto _bedd ;case 0:goto _cebg ;case 36:goto _dfc ;case 37:goto _dee ;case 1:goto _cebg ;case 2:goto _cebg ;case 38:goto _egad ;case 3:goto _efc ;case 4:goto _efc ;case 39:goto _egad ;case 5:goto _efc ;case 6:goto _efc ;case 7:goto _efc ;case 8:goto _cebg ;case 40:goto _egad ;case 9:goto _efc ;case 41:goto _egad ;case 10:goto _cebg ;case 42:goto _egad ;case 11:goto _efc ;case 43:goto _egad ;case 44:goto _egad ;case 45:goto _egad ;case 12:goto _abe ;case 46:goto _dggb ;case 13:goto _ggb ;case 14:goto _cebg ;case 15:goto _cebg ;case 16:goto _ggb ;case 47:goto _bdb ;case 17:goto _bgge ;case 48:goto _fdbg ;case 18:goto _bfd ;case 19:goto _bfd ;case 20:goto _cebg ;case 49:goto _bedd ;case 50:goto _dfge ;case 21:goto _cebg ;case 22:goto _cebg ;case 23:goto _cebg ;case 24:goto _cebg ;case 25:goto _cebg ;case 51:goto _dfge ;case 26:goto _gaeb ;case 52:goto _dfge ;case 53:goto _dfge ;case 54:goto _aee ;case 55:goto _bedd ;case 56:goto _bedd ;case 57:goto _bedd ;case 27:goto _efag ;case 28:goto _efag ;case 29:goto _efag ;case 30:goto _efag ;case 31:goto _efag ;case 58:goto _bedd ;case 32:goto _cebg ;case 59:goto _cebg ;case 33:goto _efag ;case 60:goto _bedd ;case 61:goto _bdb ;case 62:goto _bedd ;};};};if _ccff > 0{copy (_bgf [0:],_bgf [_ccff :]);};};_ =_aea ;if _ffd ==_egg {_ca .Log .Debug ("\u0066o\u0072m\u0061\u0074\u0020\u0070\u0061r\u0073\u0065 \u0065\u0072\u0072\u006f\u0072");};};const (FmtTypeLiteral FmtType =iota ;FmtTypeDigit ;FmtTypeDigitOpt ;FmtTypeComma ;FmtTypeDecimal ;FmtTypePercent ;FmtTypeDollar ;FmtTypeDigitOptThousands ;FmtTypeUnderscore ;FmtTypeDate ;FmtTypeTime ;FmtTypeFraction ;FmtTypeText ;);func IsNumber (data string )(_cccgd bool ){_bcf ,_fa ,_baa :=0,0,len (data );_dfe :=len (data );_cee ,_fae ,_ceea :=0,0,0;_ =_fae ;_ =_ceea ;_ =_cee ;{_bcf =_cbd ;_cee =0;_fae =0;_ceea =0;};{if _fa ==_baa {goto _afb ;};switch _bcf {case 0:goto _eab ;case 1:goto _cfg ;case 2:goto _gga ;case 3:goto _gce ;case 4:goto _ageb ;case 5:goto _aaa ;case 6:goto _dac ;case 7:goto _bff ;};goto _beb ;_dfg :_fae =_fa ;_fa --;{_cccgd =false ;};goto _ebce ;_ead :_fae =_fa ;_fa --;{_cccgd =_fae ==len (data );};goto _ebce ;_ece :_fae =_fa ;_fa --;{_cccgd =_fae ==len (data );};goto _ebce ;_deg :switch _ceea {case 2:{_fa =(_fae )-1;_cccgd =_fae ==len (data );};case 3:{_fa =(_fae )-1;_cccgd =false ;};};goto _ebce ;_ebce :_cee =0;if _fa ++;_fa ==_baa {goto _dgde ;};_eab :_cee =_fa ;switch data [_fa ]{case 43:goto _bef ;case 45:goto _bef ;};if 48<=data [_fa ]&&data [_fa ]<=57{goto _bdc ;};goto _adae ;_adae :if _fa ++;_fa ==_baa {goto _gebb ;};_cfg :goto _adae ;_bef :if _fa ++;_fa ==_baa {goto _ddg ;};_gga :if 48<=data [_fa ]&&data [_fa ]<=57{goto _bdc ;};goto _adae ;_bdc :if _fa ++;_fa ==_baa {goto _dgg ;};_gce :if data [_fa ]==46{goto _gcb ;};if 48<=data [_fa ]&&data [_fa ]<=57{goto _bdc ;};goto _adae ;_gcb :if _fa ++;_fa ==_baa {goto _degg ;};_ageb :if 48<=data [_fa ]&&data [_fa ]<=57{goto _dgc ;};goto _adae ;_dgc :if _fa ++;_fa ==_baa {goto _bddb ;};_aaa :if data [_fa ]==69{goto _cab ;};if 48<=data [_fa ]&&data [_fa ]<=57{goto _dgc ;};goto _adae ;_cab :if _fa ++;_fa ==_baa {goto _gff ;};_dac :switch data [_fa ]{case 43:goto _bed ;case 45:goto _bed ;};goto _adae ;_bed :_fae =_fa +1;_ceea =3;goto _geg ;_dag :_fae =_fa +1;_ceea =2;goto _geg ;_geg :if _fa ++;_fa ==_baa {goto _fge ;};_bff :if 48<=data [_fa ]&&data [_fa ]<=57{goto _dag ;};goto _adae ;_beb :_dgde :_bcf =0;goto _afb ;_gebb :_bcf =1;goto _afb ;_ddg :_bcf =2;goto _afb ;_dgg :_bcf =3;goto _afb ;_degg :_bcf =4;goto _afb ;_bddb :_bcf =5;goto _afb ;_gff :_bcf =6;goto _afb ;_fge :_bcf =7;goto _afb ;_afb :{};if _fa ==_dfe {switch _bcf {case 1:goto _dfg ;case 2:goto _dfg ;case 3:goto _ead ;case 4:goto _dfg ;case 5:goto _ece ;case 6:goto _dfg ;case 7:goto _deg ;};};};if _bcf ==_egg {return false ;};return ;};func _fg (_ecb _cd .Time ,_fcb string )[]byte {_ggd :=[]byte {};_bgg :=0;for _eba :=0;_eba < len (_fcb );_eba ++{var _dad string ;if _fcb [_eba ]=='/'{_dad =string (_fcb [_bgg :_eba ]);_bgg =_eba +1;}else if _eba ==len (_fcb )-1{_dad =string (_fcb [_bgg :_eba +1]);}else {continue ;};switch _dad {case "\u0079\u0079":_ggd =_ecb .AppendFormat (_ggd ,"\u0030\u0036");case "\u0079\u0079\u0079\u0079":_ggd =_ecb .AppendFormat (_ggd ,"\u0032\u0030\u0030\u0036");case "\u006d":_ggd =_ecb .AppendFormat (_ggd ,"\u0031");case "\u006d\u006d":_ggd =_ecb .AppendFormat (_ggd ,"\u0030\u0031");case "\u006d\u006d\u006d":_ggd =_ecb .AppendFormat (_ggd ,"\u004a\u0061\u006e");case "\u006d\u006d\u006d\u006d":_ggd =_ecb .AppendFormat (_ggd ,"\u004aa\u006e\u0075\u0061\u0072\u0079");case "\u006d\u006d\u006dm\u006d":switch _ecb .Month (){case _cd .January ,_cd .July ,_cd .June :_ggd =append (_ggd ,'J');case _cd .February :_ggd =append (_ggd ,'M');case _cd .March ,_cd .May :_ggd =append (_ggd ,'M');case _cd .April ,_cd .August :_ggd =append (_ggd ,'A');case _cd .September :_ggd =append (_ggd ,'S');case _cd .October :_ggd =append (_ggd ,'O');case _cd .November :_ggd =append (_ggd ,'N');case _cd .December :_ggd =append (_ggd ,'D');};case "\u0064":_ggd =_ecb .AppendFormat (_ggd ,"\u0032");case "\u0064\u0064":_ggd =_ecb .AppendFormat (_ggd ,"\u0030\u0032");case "\u0064\u0064\u0064":_ggd =_ecb .AppendFormat (_ggd ,"\u004d\u006f\u006e");case "\u0064\u0064\u0064\u0064":_ggd =_ecb .AppendFormat (_ggd ,"\u004d\u006f\u006e\u0064\u0061\u0079");default:_ca .Log .Debug ("\u0075\u006e\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064 \u0064\u0061\u0074\u0065\u0020\u0066\u006f\u0072\u006d\u0061t\u0020\u0025\u0073",_dad );};if _fcb [_eba ]=='/'{_ggd =append (_ggd ,'/');};};return _ggd ;};const _egg int =-1;func _adb (_bc float64 )string {_gba :=_ge .FormatFloat (_bc ,'E',-1,64);_bdd :=_ge .FormatFloat (_bc ,'E',5,64);if len (_gba )< len (_bdd ){return _ge .FormatFloat (_bc ,'E',2,64);};return _bdd ;};func _gccc (_fbg int64 ,_ccg Format )[]byte {if !_ccg .IsExponential ||len (_ccg .Exponent )==0{return nil ;};_age :=_ge .AppendInt (nil ,_ea (_fbg ),10);_fea :=make ([]byte ,0,len (_age )+2);_fea =append (_fea ,'E');if _fbg >=0{_fea =append (_fea ,'+');}else {_fea =append (_fea ,'-');_fbg *=-1;};_dfd :=0;_gdc :for _dgd :=len (_ccg .Exponent )-1;_dgd >=0;_dgd --{_ba :=len (_age )-1-_dfd ;_eff :=_ccg .Exponent [_dgd ];switch _eff .Type {case FmtTypeDigit :if _ba >=0{_fea =append (_fea ,_age [_ba ]);_dfd ++;}else {_fea =append (_fea ,'0');};case FmtTypeDigitOpt :if _ba >=0{_fea =append (_fea ,_age [_ba ]);_dfd ++;}else {for _aag :=_dgd ;_aag >=0;_aag --{_fee :=_ccg .Exponent [_aag ];if _fee .Type ==FmtTypeLiteral {_fea =append (_fea ,_fee .Literal );};};break _gdc ;};case FmtTypeLiteral :_fea =append (_fea ,_eff .Literal );default:_ca .Log .Debug ("\u0075\u006e\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064 \u0074\u0079\u0070\u0065\u0020\u0069\u006e\u0020\u0065\u0078p\u0020\u0025\u0076",_eff );};};if _dfd < len (_age ){_fea =append (_fea ,_age [len (_age )-_dfd -1:_dfd -1]...);};_ec (_fea [2:]);return _fea ;};func _aga (_ae ,_feb float64 ,_cdgf Format )[]byte {if len (_cdgf .Fractional )==0{return nil ;};_cbc :=_ge .AppendFloat (nil ,_ae ,'f',-1,64);if len (_cbc )> 2{_cbc =_cbc [2:];}else {_cbc =nil ;};_geb :=make ([]byte ,0,len (_cbc ));_geb =append (_geb ,'.');_edb :=0;_fc :for _aeb :=0;_aeb < len (_cdgf .Fractional );_aeb ++{_adc :=_aeb ;_ade :=_cdgf .Fractional [_aeb ];switch _ade .Type {case FmtTypeDigit :if _adc < len (_cbc ){_geb =append (_geb ,_cbc [_adc ]);_edb ++;}else {_geb =append (_geb ,'0');};case FmtTypeDigitOpt :if _adc >=0{_geb =append (_geb ,_cbc [_adc ]);_edb ++;}else {break _fc ;};case FmtTypeLiteral :_geb =append (_geb ,_ade .Literal );default:_ca .Log .Debug ("\u0075\u006e\u0073\u0075\u0070\u0070o\u0072\u0074\u0065\u0064\u0020\u0074\u0079\u0070\u0065\u0020\u0069\u006e\u0020f\u0072\u0061\u0063\u0074\u0069\u006f\u006ea\u006c\u0020\u0025\u0076",_ade );};};return _geb ;};func _bge (_bad []byte )[]byte {_feg :=len (_bad );_dce :=false ;_gaf :=false ;for _gafb :=len (_bad )-1;_gafb >=0;_gafb --{if _bad [_gafb ]=='0'&&!_gaf &&!_dce {_feg =_gafb ;}else if _bad [_gafb ]=='.'{_dce =true ;}else {_gaf =true ;};};if _dce &&_gaf {if _bad [_feg -1]=='.'{_feg --;};return _bad [0:_feg ];};return _bad ;};func _gcc (_de ,_abc float64 ,_cfb Format )[]byte {if len (_cfb .Whole )==0{return nil ;};_dcf :=_cd .Date (1899,12,30,0,0,0,0,_cd .UTC );_gec :=_dcf .Add (_cd .Duration (_abc *float64 (24*_cd .Hour )));_gec =_eaf (_gec );_aba :=_ge .AppendFloat (nil ,_de ,'f',-1,64);_fff :=make ([]byte ,0,len (_aba ));_ad :=0;_bdf :=1;_gbc :for _ee :=len (_cfb .Whole )-1;_ee >=0;_ee --{_cccg :=len (_aba )-1-_ad ;_fe :=_cfb .Whole [_ee ];switch _fe .Type {case FmtTypeDigit :if _cccg >=0{_fff =append (_fff ,_aba [_cccg ]);_ad ++;_bdf =_ee ;}else {_fff =append (_fff ,'0');};case FmtTypeDigitOpt :if _cccg >=0{_fff =append (_fff ,_aba [_cccg ]);_ad ++;_bdf =_ee ;}else {for _fba :=_ee ;_fba >=0;_fba --{_bba :=_cfb .Whole [_fba ];if _bba .Type ==FmtTypeLiteral {_fff =append (_fff ,_bba .Literal );};};break _gbc ;};case FmtTypeDollar :for _dea :=_ad ;_dea < len (_aba );_dea ++{_fff =append (_fff ,_aba [len (_aba )-1-_dea ]);_ad ++;};_fff =append (_fff ,'$');case FmtTypeComma :if !_cfb ._gfg {_fff =append (_fff ,',');};case FmtTypeLiteral :_fff =append (_fff ,_fe .Literal );case FmtTypeDate :_fff =append (_fff ,_ec (_fg (_gec ,_fe .DateTime ))...);case FmtTypeTime :_fff =append (_fff ,_ec (_ede (_gec ,_abc ,_fe .DateTime ))...);default:_ca .Log .Debug ("\u0075\u006e\u0073\u0075p\u0070\u006f\u0072\u0074\u0065\u0064\u0020\u0074\u0079\u0070e\u0020i\u006e\u0020\u0077\u0068\u006f\u006c\u0065 \u0025\u0076",_fe );};};_bfe :=_ec (_fff );if _ad < len (_aba )&&(_ad !=0||_cfb ._db ){_ccf :=len (_aba )-_ad ;_cgd :=make ([]byte ,len (_bfe )+_ccf );copy (_cgd ,_bfe [0:_bdf ]);copy (_cgd [_bdf :],_aba [0:]);copy (_cgd [_bdf +_ccf :],_bfe [_bdf :]);_bfe =_cgd ;};if _cfb ._gfg {_ada :=_cb .Buffer {};_df :=0;for _dd :=len (_bfe )-1;_dd >=0;_dd --{if !(_bfe [_dd ]>='0'&&_bfe [_dd ]<='9'){_df ++;}else {break ;};};for _gg :=0;_gg < len (_bfe );_gg ++{_ebe :=(len (_bfe )-_gg -_df );if _ebe %3==0&&_ebe !=0&&_gg !=0{_ada .WriteByte (',');};_ada .WriteByte (_bfe [_gg ]);};_bfe =_ada .Bytes ();};return _bfe ;};const _cce int =34;const _ac =1e11;
|
|
|
|
// NumberGeneric formats the number with the generic format which attemps to
|
|
// mimic Excel's general formatting.
|
|
func NumberGeneric (v float64 )string {if _ce .Abs (v )>=_ac ||_ce .Abs (v )<=_b &&v !=0{return _adb (v );};_fbd :=make ([]byte ,0,15);_fbd =_ge .AppendFloat (_fbd ,v ,'f',-1,64);if len (_fbd )> 11{_fbc :=_fbd [11]-'0';if _fbc >=5&&_fbc <=9{_fbd [10]++;_fbd =_fbd [0:11];_fbd =_ebc (_fbd );};_fbd =_fbd [0:11];}else if len (_fbd )==11{if _fbd [len (_fbd )-1]=='9'{_fbd [len (_fbd )-1]++;_fbd =_ebc (_fbd );};};_fbd =_bge (_fbd );return string (_fbd );};func _ebc (_gfgg []byte )[]byte {for _ecc :=len (_gfgg )-1;_ecc > 0;_ecc --{if _gfgg [_ecc ]=='9'+1{_gfgg [_ecc ]='0';if _gfgg [_ecc -1]=='.'{_ecc --;};_gfgg [_ecc -1]++;};};if _gfgg [0]=='9'+1{_gfgg [0]='0';copy (_gfgg [1:],_gfgg [0:]);_gfgg [0]='1';};return _gfgg ;};const _cbd int =0;const _dcfd int =0;func _ede (_dfb _cd .Time ,_bca float64 ,_aac string )[]byte {_ega :=[]byte {};_fgd :=0;for _efb :=0;_efb < len (_aac );_efb ++{var _acf string ;if _aac [_efb ]==':'{_acf =string (_aac [_fgd :_efb ]);_fgd =_efb +1;}else if _efb ==len (_aac )-1{_acf =string (_aac [_fgd :_efb +1]);}else {continue ;};switch _acf {case "\u0064":_ega =_dfb .AppendFormat (_ega ,"\u0032");case "\u0068":_ega =_dfb .AppendFormat (_ega ,"\u0033");case "\u0068\u0068":_ega =_dfb .AppendFormat (_ega ,"\u0031\u0035");case "\u006d":_ega =_dfb .AppendFormat (_ega ,"\u0034");case "\u006d\u006d":_ega =_dfb .AppendFormat (_ega ,"\u0030\u0034");case "\u0073":_ega =_dfb .Round (_cd .Second ).AppendFormat (_ega ,"\u0035");case "\u0073\u002e\u0030":_ega =_dfb .Round (_cd .Second /10).AppendFormat (_ega ,"\u0035\u002e\u0030");case "\u0073\u002e\u0030\u0030":_ega =_dfb .Round (_cd .Second /100).AppendFormat (_ega ,"\u0035\u002e\u0030\u0030");case "\u0073\u002e\u00300\u0030":_ega =_dfb .Round (_cd .Second /1000).AppendFormat (_ega ,"\u0035\u002e\u00300\u0030");case "\u0073\u0073":_ega =_dfb .Round (_cd .Second ).AppendFormat (_ega ,"\u0030\u0035");case "\u0073\u0073\u002e\u0030":_ega =_dfb .Round (_cd .Second /10).AppendFormat (_ega ,"\u0030\u0035\u002e\u0030");case "\u0073\u0073\u002e0\u0030":_ega =_dfb .Round (_cd .Second /100).AppendFormat (_ega ,"\u0030\u0035\u002e0\u0030");case "\u0073\u0073\u002e\u0030\u0030\u0030":_ega =_dfb .Round (_cd .Second /1000).AppendFormat (_ega ,"\u0030\u0035\u002e\u0030\u0030\u0030");case "\u0041\u004d\u002fP\u004d":_ega =_dfb .AppendFormat (_ega ,"\u0050\u004d");case "\u005b\u0068\u005d":_ega =_ge .AppendInt (_ega ,int64 (_bca *24),10);case "\u005b\u006d\u005d":_ega =_ge .AppendInt (_ega ,int64 (_bca *24*60),10);case "\u005b\u0073\u005d":_ega =_ge .AppendInt (_ega ,int64 (_bca *24*60*60),10);case "":default:_ca .Log .Debug ("\u0075\u006e\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064 \u0074\u0069\u006d\u0065\u0020\u0066\u006f\u0072\u006d\u0061t\u0020\u0025\u0073",_acf );};if _aac [_efb ]==':'{_ega =append (_ega ,':');};};return _ega ;};
|
|
|
|
// Format is a parsed number format.
|
|
type Format struct{Whole []Token ;Fractional []Token ;Exponent []Token ;IsExponential bool ;_aa bool ;_gc bool ;_caf bool ;_gfg bool ;_eb bool ;_db bool ;_gcg int64 ;_gdd int ;};func (_gd FmtType )String ()string {if _gd >=FmtType (len (_gf )-1){return _g .Sprintf ("F\u006d\u0074\u0054\u0079\u0070\u0065\u0028\u0025\u0064\u0029",_gd );};return _e [_gf [_gd ]:_gf [_gd +1]];};
|
|
|
|
// Number is used to format a number with a format string. If the format
|
|
// string is empty, then General number formatting is used which attempts to mimic
|
|
// Excel's general formatting.
|
|
func Number (v float64 ,f string )string {if f ==""||f =="\u0047e\u006e\u0065\u0072\u0061\u006c"||f =="\u0040"{return NumberGeneric (v );};_gb :=Parse (f );if len (_gb )==1{return _af (v ,_gb [0],false );}else if len (_gb )> 1&&v < 0{return _af (v ,_gb [1],true );}else if len (_gb )> 2&&v ==0{return _af (v ,_gb [2],false );};return _af (v ,_gb [0],false );};const _b =1e-10;func Parse (s string )[]Format {_afg :=Lexer {};_afg .Lex (_a .NewReader (s ));_afg ._ffa =append (_afg ._ffa ,_afg ._cbg );return _afg ._ffa ;};
|
|
|
|
// Token is a format token in the Excel format string.
|
|
type Token struct{Type FmtType ;Literal byte ;DateTime string ;};const _aff int =-1;func _af (_bbd float64 ,_cgf Format ,_fbfe bool )string {if _cgf ._caf {return NumberGeneric (_bbd );};_ef :=make ([]byte ,0,20);_fdd :=_ce .Signbit (_bbd );_ecg :=_ce .Abs (_bbd );_ccb :=int64 (0);_efa :=int64 (0);if _cgf .IsExponential {for _ecg >=10{_efa ++;_ecg /=10;};for _ecg < 1{_efa --;_ecg *=10;};}else if _cgf ._gc {_ecg *=100;}else if _cgf ._aa {if _cgf ._gcg ==0{_aca :=_ce .Pow (10,float64 (_cgf ._gdd ));_dc ,_ff :=1.0,1.0;_ =_dc ;for _bf :=1.0;_bf < _aca ;_bf ++{_ ,_da :=_ce .Modf (_ecg *float64 (_bf ));if _da < _ff {_ff =_da ;_dc =_bf ;if _da ==0{break ;};};};_cgf ._gcg =int64 (_dc );};_ccb =int64 (_ecg *float64 (_cgf ._gcg )+0.5);if len (_cgf .Whole )> 0&&_ccb > _cgf ._gcg {_ccb =int64 (_ecg *float64 (_cgf ._gcg ))%_cgf ._gcg ;_ecg -=float64 (_ccb )/float64 (_cgf ._gcg );}else {_ecg -=float64 (_ccb )/float64 (_cgf ._gcg );if _ce .Abs (_ecg )< 1{_cdg :=true ;for _ ,_bdee :=range _cgf .Whole {if _bdee .Type ==FmtTypeDigitOpt {continue ;};if _bdee .Type ==FmtTypeLiteral &&_bdee .Literal ==' '{continue ;};_cdg =false ;};if _cdg {_cgf .Whole =nil ;};};};};_bg :=1;for _ ,_ab :=range _cgf .Fractional {if _ab .Type ==FmtTypeDigit ||_ab .Type ==FmtTypeDigitOpt {_bg ++;};};_ecg +=5*_ce .Pow10 (-_bg );_dab ,_cef :=_ce .Modf (_ecg );_ef =append (_ef ,_gcc (_dab ,_bbd ,_cgf )...);_ef =append (_ef ,_aga (_cef ,_bbd ,_cgf )...);_ef =append (_ef ,_gccc (_efa ,_cgf )...);if _cgf ._aa {_ef =_ge .AppendInt (_ef ,_ccb ,10);_ef =append (_ef ,'/');_ef =_ge .AppendInt (_ef ,_cgf ._gcg ,10);};if !_fbfe &&_fdd {return "\u002d"+string (_ef );};return string (_ef );};const _e ="\u0046\u006d\u0074\u0054\u0079\u0070\u0065\u004c\u0069\u0074\u0065\u0072a\u006c\u0046\u006d\u0074\u0054\u0079\u0070\u0065\u0044\u0069\u0067\u0069\u0074\u0046\u006d\u0074\u0054y\u0070\u0065\u0044i\u0067\u0069\u0074\u004f\u0070\u0074\u0046\u006d\u0074\u0054\u0079\u0070\u0065\u0043o\u006d\u006d\u0061\u0046\u006d\u0074\u0054\u0079\u0070\u0065\u0044\u0065\u0063\u0069\u006da\u006c\u0046\u006d\u0074\u0054\u0079\u0070\u0065Pe\u0072\u0063e\u006e\u0074\u0046\u006d\u0074\u0054\u0079\u0070e\u0044\u006f\u006c\u006c\u0061\u0072\u0046\u006d\u0074Ty\u0070\u0065\u0044i\u0067\u0069\u0074\u004f\u0070\u0074\u0054\u0068\u006f\u0075\u0073\u0061n\u0064\u0073\u0046\u006d\u0074\u0054\u0079\u0070\u0065\u0055n\u0064\u0065\u0072\u0073c\u006f\u0072\u0065\u0046\u006d\u0074T\u0079\u0070\u0065\u0044\u0061\u0074\u0065\u0046\u006d\u0074\u0054y\u0070e\u0054\u0069\u006d\u0065\u0046\u006d\u0074\u0054\u0079\u0070\u0065\u0046\u0072\u0061\u0063t\u0069\u006f\u006e\u0046\u006dt\u0054\u0079\u0070\u0065\u0054e\u0078\u0074";
|
|
|
|
// FmtType is the type of a format token.
|
|
//go:generate stringer -type=FmtType
|
|
type FmtType byte ;
|
|
|
|
// Value formats a value as a number or string depending on if it appears to be
|
|
// a number or string.
|
|
func Value (v string ,f string )string {if IsNumber (v ){_bd ,_ :=_ge .ParseFloat (v ,64);return Number (_bd ,f );};return String (v ,f );};func _ec (_agg []byte )[]byte {for _dbg :=0;_dbg < len (_agg )/2;_dbg ++{_fbf :=len (_agg )-1-_dbg ;_agg [_dbg ],_agg [_fbf ]=_agg [_fbf ],_agg [_dbg ];};return _agg ;};const _fcf int =34;func _eaf (_aagc _cd .Time )_cd .Time {_aagc =_aagc .UTC ();return _cd .Date (_aagc .Year (),_aagc .Month (),_aagc .Day (),_aagc .Hour (),_aagc .Minute (),_aagc .Second (),_aagc .Nanosecond (),_cd .Local );};const _bdeee int =0;
|
|
|
|
// String returns the string formatted according to the type. In format strings
|
|
// this is the fourth item, where '@' is used as a placeholder for text.
|
|
func String (v string ,f string )string {_eg :=Parse (f );var _f Format ;if len (_eg )==1{_f =_eg [0];}else if len (_eg )==4{_f =_eg [3];};_cae :=false ;for _ ,_fd :=range _f .Whole {if _fd .Type ==FmtTypeText {_cae =true ;};};if !_cae {return v ;};_ag :=_cb .Buffer {};for _ ,_ccc :=range _f .Whole {switch _ccc .Type {case FmtTypeLiteral :_ag .WriteByte (_ccc .Literal );case FmtTypeText :_ag .WriteString (v );};};return _ag .String ();}; |