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 (_bf "errors";_d "fmt";_af "github.com/unidoc/unipdf/v3/common";_aa "github.com/unidoc/unipdf/v3/internal/bitwise";_ab "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_b "io";);const (_dbf int =1024<<7;_abe int =3;_df uint =24;);func _ca (_fbb ,_ag int )int {if _fbb < _ag {return _ag ;};return _fbb ;};func (_dbe *Decoder )fillBitmap (_fbc *_ab .Bitmap ,_bc int ,_aab []int ,_abba int )error {var _aeb byte ;_dcb :=0;_dcf :=_fbc .GetByteIndex (_dcb ,_bc );for _cdc :=0;_cdc < _abba ;_cdc ++{_bg :=byte (1);_fd :=_aab [_cdc ];if (_cdc &1)==0{_bg =0;};for _dcb < _fd {_aeb =(_aeb <<1)|_bg ;_dcb ++;if (_dcb &7)==0{if _dad :=_fbc .SetByte (_dcf ,_aeb );_dad !=nil {return _dad ;};_dcf ++;_aeb =0;};};};if (_dcb &7)!=0{_aeb <<=uint (8-(_dcb &7));if _aac :=_fbc .SetByte (_dcf ,_aeb );_aac !=nil {return _aac ;};};return nil ;};const (EOF =-3;_ae =-2;EOL =-1;_aba =8;_ee =(1<<_aba )-1;_bdff =5;_ed =(1<<_bdff )-1;);func _bfed (_fef *_aa .SubstreamReader )(*runData ,error ){_ddb :=&runData {_fece :_fef ,_ff :0,_cee :1};_gdb :=_ef (_ca (_abe ,int (_fef .Length ())),_dbf );_ddb ._fff =make ([]byte ,_gdb );if _gf :=_ddb .fillBuffer (0);_gf !=nil {if _gf ==_b .EOF {_ddb ._fff =make ([]byte ,10);_af .Log .Debug ("F\u0069\u006c\u006c\u0042uf\u0066e\u0072\u0020\u0066\u0061\u0069l\u0065\u0064\u003a\u0020\u0025\u0076",_gf );}else {return nil ,_gf ;};};return _ddb ,nil ;};func (_gde *runData )uncompressGetCodeLittleEndian (_caa []*code )(*code ,error ){_cf ,_efc :=_gde .uncompressGetNextCodeLittleEndian ();if _efc !=nil {_af .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",_efc );return nil ,_efc ;};_cf &=0xffffff;_edf :=_cf >>(_df -_aba );_acd :=_caa [_edf ];if _acd !=nil &&_acd ._fb {_edf =(_cf >>(_df -_aba -_bdff ))&_ed ;_acd =_acd ._bd [_edf ];};return _acd ,nil ;};func (_cec *runData )align (){_cec ._ff =((_cec ._ff +7)>>3)<<3};func _fbd (_db [3]int )*code {return &code {_c :_db [0],_e :_db [1],_f :_db [2]}};type runData struct{_fece *_aa .SubstreamReader ;_ff int ;_cee int ;_bef int ;_fff []byte ;_cbc int ;_bgd int ;};func (_cce *Decoder )uncompress2d (_fee *runData ,_dcfg []int ,_bdg int ,_cdg []int ,_agf int )(int ,error ){var (_afa int ;_ccd int ;_acf int ;_aec =true ;_aef error ;_bbf *code ;);_dcfg [_bdg ]=_agf ;_dcfg [_bdg +1]=_agf ;_dcfg [_bdg +2]=_agf +1;_dcfg [_bdg +3]=_agf +1;_gc :for _acf < _agf {_bbf ,_aef =_fee .uncompressGetCode (_cce ._fc );if _aef !=nil {return EOL ,nil ;};if _bbf ==nil {_fee ._ff ++;break _gc ;};_fee ._ff +=_bbf ._c ;switch mmrCode (_bbf ._f ){case _ea :_acf =_dcfg [_afa ];case _ba :_acf =_dcfg [_afa ]+1;case _dg :_acf =_dcfg [_afa ]-1;case _bfe :_fec :=1;for _fec > 0{var _aeg []*code ;if _aec {_aeg =_cce ._edd ;}else {_aeg =_cce ._ce ;};_bbf ,_aef =_fee .uncompressGetCode (_aeg );if _aef !=nil {return 0,_aef ;};if _bbf ==nil {break _gc ;};_fee ._ff +=_bbf ._c ;if _bbf ._f < 64{if _bbf ._f < 0{_cdg [_ccd ]=_acf ;_ccd ++;_bbf =nil ;break _gc ;};_acf +=_bbf ._f ;_cdg [_ccd ]=_acf ;_ccd ++;break ;};_acf +=_bbf ._f ;};_fbde :=_acf ;_dge :=1;_fdf :for _dge > 0{var _agg []*code ;if !_aec {_agg =_cce ._edd ;}else {_agg =_cce ._ce ;};_bbf ,_aef =_fee .uncompressGetCode (_agg );if _aef !=nil {return 0,_aef ;};if _bbf ==nil {break _gc ;};_fee ._ff +=_bbf ._c ;if _bbf ._f < 64{if _bbf ._f < 0{_cdg [_ccd ]=_acf ;_ccd ++;break _gc ;};_acf +=_bbf ._f ;if _acf < _agf ||_acf !=_fbde {_cdg [_ccd ]=_acf ;_ccd ++;};break _fdf ;};_acf +=_bbf ._f ;};for _acf < _agf &&_dcfg [_afa ]<=_acf {_afa +=2;};continue _gc ;case _cc :_afa ++;_acf =_dcfg [_afa ];_afa ++;continue _gc ;case _be :_acf =_dcfg [_afa ]+2;case _bfd :_acf =_dcfg [_afa ]-2;case _da :_acf =_dcfg [_afa ]+3;case _bdf :_acf =_dcfg [_afa ]-3;default:if _fee ._ff ==12&&_bbf ._f ==EOL {_fee ._ff =0;if _ ,_aef =_cce .uncompress1d (_fee ,_dcfg ,_agf );_aef !=nil {return 0,_aef ;};_fee ._ff ++;if _ ,_aef =_cce .uncompress1d (_fee ,_cdg ,_agf );_aef !=nil {return 0,_aef ;};_fgb ,_ega :=_cce .uncompress1d (_fee ,_dcfg ,_agf );if _ega !=nil {return EOF ,_ega ;};_fee ._ff ++;return _fgb ,nil ;};_acf =_agf ;continue _gc ;};if _acf <=_agf {_aec =!_aec ;_cdg [_ccd ]=_acf ;_ccd ++;if _afa > 0{_afa --;}else {_afa ++;};for _acf < _agf &&_dcfg [_afa ]<=_acf {_afa +=2;};};};if _cdg [_ccd ]!=_agf {_cdg [_ccd ]=_agf ;};if _bbf ==nil {return EOL ,nil ;};return _ccd ,nil ;};func (_bcg *Decoder )initTables ()(_gg error ){if _bcg ._edd ==nil {_bcg ._edd ,_gg =_bcg .createLittleEndianTable (_aad );if _gg !=nil {return ;};_bcg ._ce ,_gg =_bcg .createLittleEndianTable (_abc );if _gg !=nil {return ;};_bcg ._fc ,_gg =_bcg .createLittleEndianTable (_fe );if _gg !=nil {return ;};};return nil ;};type mmrCode int ;func (_aga *Decoder )uncompress1d (_bgb *runData ,_bcc []int ,_efg int )(int ,error ){var (_ceba =true ;_ge int ;_bbe *code ;_dcg int ;_bde error ;);_ebg :for _ge < _efg {_fcfg :for {if _ceba {_bbe ,_bde =_bgb .uncompressGetCode (_aga ._edd );if _bde !=nil {return 0,_bde ;};}else {_bbe ,_bde =_bgb .uncompressGetCode (_aga ._ce );if _bde !=nil {return 0,_bde ;};};_bgb ._ff +=_bbe ._c ;if _bbe ._f < 0{break _ebg ;};_ge +=_bbe ._f ;if _bbe ._f < 64{_ceba =!_ceba ;_bcc [_dcg ]=_ge ;_dcg ++;break _fcfg ;};};};if _bcc [_dcg ]!=_efg {_bcc [_dcg ]=_efg ;};_eec :=EOL ;if _bbe !=nil &&_bbe ._f !=EOL {_eec =_dcg ;};return _eec ,nil ;};func New (r _aa .StreamReader ,width ,height int ,dataOffset ,dataLength int64 )(*Decoder ,error ){_de :=&Decoder {_age :width ,_abb :height };_fca ,_abag :=_aa .NewSubstreamReader (r ,uint64 (dataOffset ),uint64 (dataLength ));if _abag !=nil {return nil ,_abag ;};_eb ,_abag :=_bfed (_fca );if _abag !=nil {return nil ,_abag ;};_de ._bfa =_eb ;if _eef :=_de .initTables ();_eef !=nil {return nil ,_eef ;};return _de ,nil ;};func (_bag *runData )fillBuffer (_ebf int )error {_bag ._cbc =_ebf ;_ ,_gfa :=_bag ._fece .Seek (int64 (_ebf ),_b .SeekStart );if _gfa !=nil {if _gfa ==_b .EOF {_af .Log .Debug ("\u0053\u0065\u0061\u006b\u0020\u0045\u004f\u0046");_bag ._bgd =-1;}else {return _gfa ;};};if _gfa ==nil {_bag ._bgd ,_gfa =_bag ._fece .Read (_bag ._fff );if _gfa !=nil {if _gfa ==_b .EOF {_af .Log .Trace ("\u0052\u0065\u0061\u0064\u0020\u0045\u004f\u0046");_bag ._bgd =-1;}else {return _gfa ;};};};if _bag ._bgd > -1&&_bag ._bgd < 3{for _bag ._bgd < 3{_fga ,_dfb :=_bag ._fece .ReadByte ();if _dfb !=nil {if _dfb ==_b .EOF {_bag ._fff [_bag ._bgd ]=0;}else {return _dfb ;};}else {_bag ._fff [_bag ._bgd ]=_fga &0xFF;};_bag ._bgd ++;};};_bag ._bgd -=3;if _bag ._bgd < 0{_bag ._fff =make ([]byte ,len (_bag ._fff ));_bag ._bgd =len (_bag ._fff )-3;};return nil ;};func (_afc *Decoder )createLittleEndianTable (_eg [][3]int )([]*code ,error ){_fce :=make ([]*code ,_ee +1);for _bdd :=0;_bdd < len (_eg );_bdd ++{_gd :=_fbd (_eg [_bdd ]);if _gd ._c <=_aba {_eda :=_aba -_gd ._c ;_dgd :=_gd ._e <<uint (_eda );for _fcf :=(1<<uint (_eda ))-1;_fcf >=0;_fcf --{_cd :=_dgd |_fcf ;_fce [_cd ]=_gd ;};}else {_edaf :=_gd ._e >>uint (_gd ._c -_aba );if _fce [_edaf ]==nil {var _dae =_fbd ([3]int {});_dae ._bd =make ([]*code ,_ed +1);_fce [_edaf ]=_dae ;};if _gd ._c <=_aba +_bdff {_fg :=_aba +_bdff -_gd ._c ;_dc :=(_gd ._e <<uint (_fg ))&_ed ;_fce [_edaf ]._fb =true ;for _ceg :=(1<<uint (_fg ))-1;_ceg >=0;_ceg --{_fce [_edaf ]._bd [_dc |_ceg ]=_gd ;};}else {return nil ,_bf .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 _fce ,nil ;};func (_ceb *Decoder )detectAndSkipEOL ()error {for {_cdd ,_dac :=_ceb ._bfa .uncompressGetCode (_ceb ._fc );if _dac !=nil {return _dac ;};if _cdd !=nil &&_cdd ._f ==EOL {_ceb ._bfa ._ff +=_cdd ._c ;}else {return nil ;};};};const (_cc mmrCode =iota ;_bfe ;_ea ;_ba ;_be ;_da ;_dg ;_bfd ;_bdf ;_dda ;_bb ;);type Decoder struct{_age ,_abb int ;_bfa *runData ;_edd []*code ;_ce []*code ;_fc []*code ;};type code struct{_c int ;_e int ;_f int ;_bd []*code ;_fb bool ;};func _ef (_cg ,_g int )int {if _cg > _g {return _g ;};return _cg ;};var (_fe =[][3]int {{4,0x1,int (_cc )},{3,0x1,int (_bfe )},{1,0x1,int (_ea )},{3,0x3,int (_ba )},{6,0x3,int (_be )},{7,0x3,int (_da )},{3,0x2,int (_dg )},{6,0x2,int (_bfd )},{7,0x2,int (_bdf )},{10,0xf,int (_dda )},{12,0xf,int (_bb )},{12,0x1,int (EOL )}};_aad =[][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,_ae },{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,_ae },{11,0x01,_ae },{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}};_abc =[][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,_ae },{9,0x18,15},{10,0x01,_ae },{10,0x17,16},{10,0x18,17},{10,0x37,0},{10,0x08,18},{10,0x0F,64},{11,0x01,_ae },{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 (_ad *Decoder )UncompressMMR ()(_ac *_ab .Bitmap ,_eed error ){_ac =_ab .New (_ad ._age ,_ad ._abb );_eeg :=make ([]int ,_ac .Width +5);_edda :=make ([]int ,_ac .Width +5);_edda [0]=_ac .Width ;_ede :=1;var _dbg int ;for _cb :=0;_cb < _ac .Height ;_cb ++{_dbg ,_eed =_ad .uncompress2d (_ad ._bfa ,_edda ,_ede ,_eeg ,_ac .Width );if _eed !=nil {return nil ,_eed ;};if _dbg ==EOF {break ;};if _dbg > 0{_eed =_ad .fillBitmap (_ac ,_cb ,_eeg ,_dbg );if _eed !=nil {return nil ,_eed ;};};_edda ,_eeg =_eeg ,_edda ;_ede =_dbg ;};if _eed =_ad .detectAndSkipEOL ();_eed !=nil {return nil ,_eed ;};_ad ._bfa .align ();return _ac ,nil ;};func (_ged *runData )uncompressGetCode (_ebb []*code )(*code ,error ){return _ged .uncompressGetCodeLittleEndian (_ebb );};func (_ddag *runData )uncompressGetNextCodeLittleEndian ()(int ,error ){_ga :=_ddag ._ff -_ddag ._cee ;if _ga < 0||_ga > 24{_dgda :=(_ddag ._ff >>3)-_ddag ._cbc ;if _dgda >=_ddag ._bgd {_dgda +=_ddag ._cbc ;if _dcfgg :=_ddag .fillBuffer (_dgda );_dcfgg !=nil {return 0,_dcfgg ;};_dgda -=_ddag ._cbc ;};_efe :=(uint32 (_ddag ._fff [_dgda ]&0xFF)<<16)|(uint32 (_ddag ._fff [_dgda +1]&0xFF)<<8)|(uint32 (_ddag ._fff [_dgda +2]&0xFF));_fbg :=uint32 (_ddag ._ff &7);_efe <<=_fbg ;_ddag ._bef =int (_efe );}else {_ddc :=_ddag ._cee &7;_gce :=7-_ddc ;if _ga <=_gce {_ddag ._bef <<=uint (_ga );}else {_gga :=(_ddag ._cee >>3)+3-_ddag ._cbc ;if _gga >=_ddag ._bgd {_gga +=_ddag ._cbc ;if _bgc :=_ddag .fillBuffer (_gga );_bgc !=nil {return 0,_bgc ;};_gga -=_ddag ._cbc ;};_ddc =8-_ddc ;for {_ddag ._bef <<=uint (_ddc );_ddag ._bef |=int (uint (_ddag ._fff [_gga ])&0xFF);_ga -=_ddc ;_gga ++;_ddc =8;if !(_ga >=8){break ;};};_ddag ._bef <<=uint (_ga );};};_ddag ._cee =_ddag ._ff ;return _ddag ._bef ,nil ;};func (_dd *code )String ()string {return _d .Sprintf ("\u0025\u0064\u002f\u0025\u0064\u002f\u0025\u0064",_dd ._c ,_dd ._e ,_dd ._f );}; |