mirror of
https://github.com/unidoc/unipdf.git
synced 2025-04-27 13:48:51 +08:00
12 lines
13 KiB
Go
12 lines
13 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 mmr ;import (_gb "errors";_f "fmt";_c "github.com/unidoc/unipdf/v3/common";_gg "github.com/unidoc/unipdf/v3/internal/bitwise";_fa "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_e "io";);func (_da *code )String ()string {return _f .Sprintf ("\u0025\u0064\u002f\u0025\u0064\u002f\u0025\u0064",_da ._gd ,_da ._ec ,_da ._d );};type Decoder struct{_dca ,_fb int ;_fggg *runData ;_aa []*code ;_cc []*code ;_ff []*code ;};const (EOF =-3;_bgg =-2;EOL =-1;_cd =8;_de =(1<<_cd )-1;_ba =5;_dd =(1<<_ba )-1;);func New (r _gg .StreamReader ,width ,height int ,dataOffset ,dataLength int64 )(*Decoder ,error ){_fgc :=&Decoder {_dca :width ,_fb :height };_agf ,_dag :=_gg .NewSubstreamReader (r ,uint64 (dataOffset ),uint64 (dataLength ));if _dag !=nil {return nil ,_dag ;};_db ,_dag :=_ede (_agf );if _dag !=nil {return nil ,_dag ;};_fgc ._fggg =_db ;if _age :=_fgc .initTables ();_age !=nil {return nil ,_age ;};return _fgc ,nil ;};func (_ega *Decoder )uncompress1d (_cde *runData ,_gbgf []int ,_bgb int )(int ,error ){var (_bge =true ;_dge int ;_fbd *code ;_efc int ;_aag error ;);_beeb :for _dge < _bgb {_dbdd :for {if _bge {_fbd ,_aag =_cde .uncompressGetCode (_ega ._aa );if _aag !=nil {return 0,_aag ;};}else {_fbd ,_aag =_cde .uncompressGetCode (_ega ._cc );if _aag !=nil {return 0,_aag ;};};_cde ._df +=_fbd ._gd ;if _fbd ._d < 0{break _beeb ;};_dge +=_fbd ._d ;if _fbd ._d < 64{_bge =!_bge ;_gbgf [_efc ]=_dge ;_efc ++;break _dbdd ;};};};if _gbgf [_efc ]!=_bgb {_gbgf [_efc ]=_bgb ;};_eda :=EOL ;if _fbd !=nil &&_fbd ._d !=EOL {_eda =_efc ;};return _eda ,nil ;};type runData struct{_fdd *_gg .SubstreamReader ;_df int ;_dagd int ;_dad int ;_edbb []byte ;_becd int ;_ccaa int ;};var (_ecf =[][3]int {{4,0x1,int (_fg )},{3,0x1,int (_af )},{1,0x1,int (_ag )},{3,0x3,int (_ca )},{6,0x3,int (_fgg )},{7,0x3,int (_edf )},{3,0x2,int (_eb )},{6,0x2,int (_bg )},{7,0x2,int (_ggf )},{10,0xf,int (_dc )},{12,0xf,int (_eg )},{12,0x1,int (EOL )}};_ef =[][3]int {{4,0x07,2},{4,0x08,3},{4,0x0B,4},{4,0x0C,5},{4,0x0E,6},{4,0x0F,7},{5,0x12,128},{5,0x13,8},{5,0x14,9},{5,0x1B,64},{5,0x07,10},{5,0x08,11},{6,0x17,192},{6,0x18,1664},{6,0x2A,16},{6,0x2B,17},{6,0x03,13},{6,0x34,14},{6,0x35,15},{6,0x07,1},{6,0x08,12},{7,0x13,26},{7,0x17,21},{7,0x18,28},{7,0x24,27},{7,0x27,18},{7,0x28,24},{7,0x2B,25},{7,0x03,22},{7,0x37,256},{7,0x04,23},{7,0x08,20},{7,0xC,19},{8,0x12,33},{8,0x13,34},{8,0x14,35},{8,0x15,36},{8,0x16,37},{8,0x17,38},{8,0x1A,31},{8,0x1B,32},{8,0x02,29},{8,0x24,53},{8,0x25,54},{8,0x28,39},{8,0x29,40},{8,0x2A,41},{8,0x2B,42},{8,0x2C,43},{8,0x2D,44},{8,0x03,30},{8,0x32,61},{8,0x33,62},{8,0x34,63},{8,0x35,0},{8,0x36,320},{8,0x37,384},{8,0x04,45},{8,0x4A,59},{8,0x4B,60},{8,0x5,46},{8,0x52,49},{8,0x53,50},{8,0x54,51},{8,0x55,52},{8,0x58,55},{8,0x59,56},{8,0x5A,57},{8,0x5B,58},{8,0x64,448},{8,0x65,512},{8,0x67,640},{8,0x68,576},{8,0x0A,47},{8,0x0B,48},{9,0x01,_bgg },{9,0x98,1472},{9,0x99,1536},{9,0x9A,1600},{9,0x9B,1728},{9,0xCC,704},{9,0xCD,768},{9,0xD2,832},{9,0xD3,896},{9,0xD4,960},{9,0xD5,1024},{9,0xD6,1088},{9,0xD7,1152},{9,0xD8,1216},{9,0xD9,1280},{9,0xDA,1344},{9,0xDB,1408},{10,0x01,_bgg },{11,0x01,_bgg },{11,0x08,1792},{11,0x0C,1856},{11,0x0D,1920},{12,0x00,EOF },{12,0x01,EOL },{12,0x12,1984},{12,0x13,2048},{12,0x14,2112},{12,0x15,2176},{12,0x16,2240},{12,0x17,2304},{12,0x1C,2368},{12,0x1D,2432},{12,0x1E,2496},{12,0x1F,2560}};_cg =[][3]int {{2,0x02,3},{2,0x03,2},{3,0x02,1},{3,0x03,4},{4,0x02,6},{4,0x03,5},{5,0x03,7},{6,0x04,9},{6,0x05,8},{7,0x04,10},{7,0x05,11},{7,0x07,12},{8,0x04,13},{8,0x07,14},{9,0x01,_bgg },{9,0x18,15},{10,0x01,_bgg },{10,0x17,16},{10,0x18,17},{10,0x37,0},{10,0x08,18},{10,0x0F,64},{11,0x01,_bgg },{11,0x17,24},{11,0x18,25},{11,0x28,23},{11,0x37,22},{11,0x67,19},{11,0x68,20},{11,0x6C,21},{11,0x08,1792},{11,0x0C,1856},{11,0x0D,1920},{12,0x00,EOF },{12,0x01,EOL },{12,0x12,1984},{12,0x13,2048},{12,0x14,2112},{12,0x15,2176},{12,0x16,2240},{12,0x17,2304},{12,0x1C,2368},{12,0x1D,2432},{12,0x1E,2496},{12,0x1F,2560},{12,0x24,52},{12,0x27,55},{12,0x28,56},{12,0x2B,59},{12,0x2C,60},{12,0x33,320},{12,0x34,384},{12,0x35,448},{12,0x37,53},{12,0x38,54},{12,0x52,50},{12,0x53,51},{12,0x54,44},{12,0x55,45},{12,0x56,46},{12,0x57,47},{12,0x58,57},{12,0x59,58},{12,0x5A,61},{12,0x5B,256},{12,0x64,48},{12,0x65,49},{12,0x66,62},{12,0x67,63},{12,0x68,30},{12,0x69,31},{12,0x6A,32},{12,0x6B,33},{12,0x6C,40},{12,0x6D,41},{12,0xC8,128},{12,0xC9,192},{12,0xCA,26},{12,0xCB,27},{12,0xCC,28},{12,0xCD,29},{12,0xD2,34},{12,0xD3,35},{12,0xD4,36},{12,0xD5,37},{12,0xD6,38},{12,0xD7,39},{12,0xDA,42},{12,0xDB,43},{13,0x4A,640},{13,0x4B,704},{13,0x4C,768},{13,0x4D,832},{13,0x52,1280},{13,0x53,1344},{13,0x54,1408},{13,0x55,1472},{13,0x5A,1536},{13,0x5B,1600},{13,0x64,1664},{13,0x65,1728},{13,0x6C,512},{13,0x6D,576},{13,0x72,896},{13,0x73,960},{13,0x74,1024},{13,0x75,1088},{13,0x76,1152},{13,0x77,1216}};);func (_eac *Decoder )UncompressMMR ()(_edc *_fa .Bitmap ,_bd error ){_edc =_fa .New (_eac ._dca ,_eac ._fb );_ga :=make ([]int ,_edc .Width +5);_cge :=make ([]int ,_edc .Width +5);_cge [0]=_edc .Width ;_gga :=1;var _gbg int ;for _baa :=0;_baa < _edc .Height ;_baa ++{_gbg ,_bd =_eac .uncompress2d (_eac ._fggg ,_cge ,_gga ,_ga ,_edc .Width );if _bd !=nil {return nil ,_bd ;};if _gbg ==EOF {break ;};if _gbg > 0{_bd =_eac .fillBitmap (_edc ,_baa ,_ga ,_gbg );if _bd !=nil {return nil ,_bd ;};};_cge ,_ga =_ga ,_cge ;_gga =_gbg ;};if _bd =_eac .detectAndSkipEOL ();_bd !=nil {return nil ,_bd ;};_eac ._fggg .align ();return _edc ,nil ;};func (_bee *Decoder )createLittleEndianTable (_cca [][3]int )([]*code ,error ){_bac :=make ([]*code ,_de +1);for _ggd :=0;_ggd < len (_cca );_ggd ++{_aff :=_fe (_cca [_ggd ]);if _aff ._gd <=_cd {_faa :=_cd -_aff ._gd ;_caf :=_aff ._ec <<uint (_faa );for _gbb :=(1<<uint (_faa ))-1;_gbb >=0;_gbb --{_dg :=_caf |_gbb ;_bac [_dg ]=_aff ;};}else {_bba :=_aff ._ec >>uint (_aff ._gd -_cd );if _bac [_bba ]==nil {var _fde =_fe ([3]int {});_fde ._fd =make ([]*code ,_dd +1);_bac [_bba ]=_fde ;};if _aff ._gd <=_cd +_ba {_gdg :=_cd +_ba -_aff ._gd ;_cgb :=(_aff ._ec <<uint (_gdg ))&_dd ;_bac [_bba ]._ee =true ;for _ddf :=(1<<uint (_gdg ))-1;_ddf >=0;_ddf --{_bac [_bba ]._fd [_cgb |_ddf ]=_aff ;};}else {return nil ,_gb .New ("\u0043\u006f\u0064\u0065\u0020\u0074a\u0062\u006c\u0065\u0020\u006f\u0076\u0065\u0072\u0066\u006c\u006f\u0077\u0020i\u006e\u0020\u004d\u004d\u0052\u0044\u0065c\u006f\u0064\u0065\u0072");};};};return _bac ,nil ;};func (_bgf *runData )align (){_bgf ._df =((_bgf ._df +7)>>3)<<3};func (_dgc *runData )uncompressGetCodeLittleEndian (_efb []*code )(*code ,error ){_dgeb ,_dda :=_dgc .uncompressGetNextCodeLittleEndian ();if _dda !=nil {_c .Log .Debug ("\u0055n\u0063\u006fm\u0070\u0072\u0065\u0073s\u0047\u0065\u0074N\u0065\u0078\u0074\u0043\u006f\u0064\u0065\u004c\u0069tt\u006c\u0065\u0045n\u0064\u0069a\u006e\u0020\u0066\u0061\u0069\u006ce\u0064\u003a \u0025\u0076",_dda );return nil ,_dda ;};_dgeb &=0xffffff;_eba :=_dgeb >>(_fbg -_cd );_cf :=_efb [_eba ];if _cf !=nil &&_cf ._ee {_eba =(_dgeb >>(_fbg -_cd -_ba ))&_dd ;_cf =_cf ._fd [_eba ];};return _cf ,nil ;};func (_dcac *Decoder )fillBitmap (_fbc *_fa .Bitmap ,_cac int ,_eef []int ,_fc int )error {var _dbb byte ;_ce :=0;_ebd :=_fbc .GetByteIndex (_ce ,_cac );for _bf :=0;_bf < _fc ;_bf ++{_bed :=byte (1);_cb :=_eef [_bf ];if (_bf &1)==0{_bed =0;};for _ce < _cb {_dbb =(_dbb <<1)|_bed ;_ce ++;if (_ce &7)==0{if _dbbf :=_fbc .SetByte (_ebd ,_dbb );_dbbf !=nil {return _dbbf ;};_ebd ++;_dbb =0;};};};if (_ce &7)!=0{_dbb <<=uint (8-(_ce &7));if _dbd :=_fbc .SetByte (_ebd ,_dbb );_dbd !=nil {return _dbd ;};};return nil ;};func _fe (_b [3]int )*code {return &code {_gd :_b [0],_ec :_b [1],_d :_b [2]}};func (_fdec *runData )uncompressGetCode (_cagf []*code )(*code ,error ){return _fdec .uncompressGetCodeLittleEndian (_cagf );};func _gc (_ea ,_ed int )int {if _ea > _ed {return _ed ;};return _ea ;};const (_fae int =1024<<7;_gf int =3;_fbg uint =24;);func (_baac *Decoder )uncompress2d (_dcf *runData ,_daa []int ,_cag int ,_cbd []int ,_fca int )(int ,error ){var (_gdd int ;_ab int ;_fef int ;_fbf =true ;_dec error ;_ced *code ;);_daa [_cag ]=_fca ;_daa [_cag +1]=_fca ;_daa [_cag +2]=_fca +1;_daa [_cag +3]=_fca +1;_bc :for _fef < _fca {_ced ,_dec =_dcf .uncompressGetCode (_baac ._ff );if _dec !=nil {return EOL ,nil ;};if _ced ==nil {_dcf ._df ++;break _bc ;};_dcf ._df +=_ced ._gd ;switch mmrCode (_ced ._d ){case _ag :_fef =_daa [_gdd ];case _ca :_fef =_daa [_gdd ]+1;case _eb :_fef =_daa [_gdd ]-1;case _af :for {var _cba []*code ;if _fbf {_cba =_baac ._aa ;}else {_cba =_baac ._cc ;};_ced ,_dec =_dcf .uncompressGetCode (_cba );if _dec !=nil {return 0,_dec ;};if _ced ==nil {break _bc ;};_dcf ._df +=_ced ._gd ;if _ced ._d < 64{if _ced ._d < 0{_cbd [_ab ]=_fef ;_ab ++;_ced =nil ;break _bc ;};_fef +=_ced ._d ;_cbd [_ab ]=_fef ;_ab ++;break ;};_fef +=_ced ._d ;};_cgbd :=_fef ;_gac :for {var _beg []*code ;if !_fbf {_beg =_baac ._aa ;}else {_beg =_baac ._cc ;};_ced ,_dec =_dcf .uncompressGetCode (_beg );if _dec !=nil {return 0,_dec ;};if _ced ==nil {break _bc ;};_dcf ._df +=_ced ._gd ;if _ced ._d < 64{if _ced ._d < 0{_cbd [_ab ]=_fef ;_ab ++;break _bc ;};_fef +=_ced ._d ;if _fef < _fca ||_fef !=_cgbd {_cbd [_ab ]=_fef ;_ab ++;};break _gac ;};_fef +=_ced ._d ;};for _fef < _fca &&_daa [_gdd ]<=_fef {_gdd +=2;};continue _bc ;case _fg :_gdd ++;_fef =_daa [_gdd ];_gdd ++;continue _bc ;case _fgg :_fef =_daa [_gdd ]+2;case _bg :_fef =_daa [_gdd ]-2;case _edf :_fef =_daa [_gdd ]+3;case _ggf :_fef =_daa [_gdd ]-3;default:if _dcf ._df ==12&&_ced ._d ==EOL {_dcf ._df =0;if _ ,_dec =_baac .uncompress1d (_dcf ,_daa ,_fca );_dec !=nil {return 0,_dec ;};_dcf ._df ++;if _ ,_dec =_baac .uncompress1d (_dcf ,_cbd ,_fca );_dec !=nil {return 0,_dec ;};_dgf ,_bcg :=_baac .uncompress1d (_dcf ,_daa ,_fca );if _bcg !=nil {return EOF ,_bcg ;};_dcf ._df ++;return _dgf ,nil ;};_fef =_fca ;continue _bc ;};if _fef <=_fca {_fbf =!_fbf ;_cbd [_ab ]=_fef ;_ab ++;if _gdd > 0{_gdd --;}else {_gdd ++;};for _fef < _fca &&_daa [_gdd ]<=_fef {_gdd +=2;};};};if _cbd [_ab ]!=_fca {_cbd [_ab ]=_fca ;};if _ced ==nil {return EOL ,nil ;};return _ab ,nil ;};func (_bad *Decoder )detectAndSkipEOL ()error {for {_cgd ,_fbb :=_bad ._fggg .uncompressGetCode (_bad ._ff );if _fbb !=nil {return _fbb ;};if _cgd !=nil &&_cgd ._d ==EOL {_bad ._fggg ._df +=_cgd ._gd ;}else {return nil ;};};};func (_bbf *Decoder )initTables ()(_bec error ){if _bbf ._aa ==nil {_bbf ._aa ,_bec =_bbf .createLittleEndianTable (_ef );if _bec !=nil {return ;};_bbf ._cc ,_bec =_bbf .createLittleEndianTable (_cg );if _bec !=nil {return ;};_bbf ._ff ,_bec =_bbf .createLittleEndianTable (_ecf );if _bec !=nil {return ;};};return nil ;};func _a (_bb ,_be int )int {if _bb < _be {return _be ;};return _bb ;};const (_fg mmrCode =iota ;_af ;_ag ;_ca ;_fgg ;_edf ;_eb ;_bg ;_ggf ;_dc ;_eg ;);func (_efg *runData )fillBuffer (_fga int )error {_efg ._becd =_fga ;_ ,_efge :=_efg ._fdd .Seek (int64 (_fga ),_e .SeekStart );if _efge !=nil {if _efge ==_e .EOF {_c .Log .Debug ("\u0053\u0065\u0061\u006b\u0020\u0045\u004f\u0046");_efg ._ccaa =-1;}else {return _efge ;};};if _efge ==nil {_efg ._ccaa ,_efge =_efg ._fdd .Read (_efg ._edbb );if _efge !=nil {if _efge ==_e .EOF {_c .Log .Trace ("\u0052\u0065\u0061\u0064\u0020\u0045\u004f\u0046");_efg ._ccaa =-1;}else {return _efge ;};};};if _efg ._ccaa > -1&&_efg ._ccaa < 3{for _efg ._ccaa < 3{_fad ,_bgeg :=_efg ._fdd .ReadByte ();if _bgeg !=nil {if _bgeg ==_e .EOF {_efg ._edbb [_efg ._ccaa ]=0;}else {return _bgeg ;};}else {_efg ._edbb [_efg ._ccaa ]=_fad &0xFF;};_efg ._ccaa ++;};};_efg ._ccaa -=3;if _efg ._ccaa < 0{_efg ._edbb =make ([]byte ,len (_efg ._edbb ));_efg ._ccaa =len (_efg ._edbb )-3;};return nil ;};type code struct{_gd int ;_ec int ;_d int ;_fd []*code ;_ee bool ;};func _ede (_gfd *_gg .SubstreamReader )(*runData ,error ){_bbfd :=&runData {_fdd :_gfd ,_df :0,_dagd :1};_edg :=_gc (_a (_gf ,int (_gfd .Length ())),_fae );_bbfd ._edbb =make ([]byte ,_edg );if _cbb :=_bbfd .fillBuffer (0);_cbb !=nil {if _cbb ==_e .EOF {_bbfd ._edbb =make ([]byte ,10);_c .Log .Debug ("F\u0069\u006c\u006c\u0042uf\u0066e\u0072\u0020\u0066\u0061\u0069l\u0065\u0064\u003a\u0020\u0025\u0076",_cbb );}else {return nil ,_cbb ;};};return _bbfd ,nil ;};type mmrCode int ;func (_dgb *runData )uncompressGetNextCodeLittleEndian ()(int ,error ){_gfb :=_dgb ._df -_dgb ._dagd ;if _gfb < 0||_gfb > 24{_aged :=(_dgb ._df >>3)-_dgb ._becd ;if _aged >=_dgb ._ccaa {_aged +=_dgb ._becd ;if _ecfa :=_dgb .fillBuffer (_aged );_ecfa !=nil {return 0,_ecfa ;};_aged -=_dgb ._becd ;};_bada :=(uint32 (_dgb ._edbb [_aged ]&0xFF)<<16)|(uint32 (_dgb ._edbb [_aged +1]&0xFF)<<8)|(uint32 (_dgb ._edbb [_aged +2]&0xFF));_gff :=uint32 (_dgb ._df &7);_bada <<=_gff ;_dgb ._dad =int (_bada );}else {_eacb :=_dgb ._dagd &7;_efe :=7-_eacb ;if _gfb <=_efe {_dgb ._dad <<=uint (_gfb );}else {_deg :=(_dgb ._dagd >>3)+3-_dgb ._becd ;if _deg >=_dgb ._ccaa {_deg +=_dgb ._becd ;if _efd :=_dgb .fillBuffer (_deg );_efd !=nil {return 0,_efd ;};_deg -=_dgb ._becd ;};_eacb =8-_eacb ;for {_dgb ._dad <<=uint (_eacb );_dgb ._dad |=int (uint (_dgb ._edbb [_deg ])&0xFF);_gfb -=_eacb ;_deg ++;_eacb =8;if !(_gfb >=8){break ;};};_dgb ._dad <<=uint (_gfb );};};_dgb ._dagd =_dgb ._df ;return _dgb ._dad ,nil ;}; |