mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-05 19:30:30 +08:00
50 lines
13 KiB
Go
50 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 (_d "errors";_cg "fmt";_ba "github.com/unidoc/unipdf/v3/common";_b "github.com/unidoc/unipdf/v3/internal/bitwise";_bc "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_g "io";);func (_babb *Decoder )uncompress1d (_ggf *runData ,_bca []int ,_cd int )(int ,error ){var (_aff =true ;
|
|
_gdb int ;_agd *code ;_acb int ;_fac error ;);_eff :for _gdb < _cd {_gdbd :for {if _aff {_agd ,_fac =_ggf .uncompressGetCode (_babb ._bb );if _fac !=nil {return 0,_fac ;};}else {_agd ,_fac =_ggf .uncompressGetCode (_babb ._cgce );if _fac !=nil {return 0,_fac ;
|
|
};};_ggf ._abc +=_agd ._a ;if _agd ._bcg < 0{break _eff ;};_gdb +=_agd ._bcg ;if _agd ._bcg < 64{_aff =!_aff ;_bca [_acb ]=_gdb ;_acb ++;break _gdbd ;};};};if _bca [_acb ]!=_cd {_bca [_acb ]=_cd ;};_abd :=EOL ;if _agd !=nil &&_agd ._bcg !=EOL {_abd =_acb ;
|
|
};return _abd ,nil ;};func (_cc *Decoder )uncompress2d (_dad *runData ,_cf []int ,_bfd int ,_cfd []int ,_fdg int )(int ,error ){var (_bd int ;_fdb int ;_ffc int ;_dfd =true ;_ccb error ;_dgd *code ;);_cf [_bfd ]=_fdg ;_cf [_bfd +1]=_fdg ;_cf [_bfd +2]=_fdg +1;
|
|
_cf [_bfd +3]=_fdg +1;_ga :for _ffc < _fdg {_dgd ,_ccb =_dad .uncompressGetCode (_cc ._fd );if _ccb !=nil {return EOL ,nil ;};if _dgd ==nil {_dad ._abc ++;break _ga ;};_dad ._abc +=_dgd ._a ;switch mmrCode (_dgd ._bcg ){case _ed :_ffc =_cf [_bd ];case _dfb :_ffc =_cf [_bd ]+1;
|
|
case _bf :_ffc =_cf [_bd ]-1;case _be :for {var _ade []*code ;if _dfd {_ade =_cc ._bb ;}else {_ade =_cc ._cgce ;};_dgd ,_ccb =_dad .uncompressGetCode (_ade );if _ccb !=nil {return 0,_ccb ;};if _dgd ==nil {break _ga ;};_dad ._abc +=_dgd ._a ;if _dgd ._bcg < 64{if _dgd ._bcg < 0{_cfd [_fdb ]=_ffc ;
|
|
_fdb ++;_dgd =nil ;break _ga ;};_ffc +=_dgd ._bcg ;_cfd [_fdb ]=_ffc ;_fdb ++;break ;};_ffc +=_dgd ._bcg ;};_ffe :=_ffc ;_bgf :for {var _dd []*code ;if !_dfd {_dd =_cc ._bb ;}else {_dd =_cc ._cgce ;};_dgd ,_ccb =_dad .uncompressGetCode (_dd );if _ccb !=nil {return 0,_ccb ;
|
|
};if _dgd ==nil {break _ga ;};_dad ._abc +=_dgd ._a ;if _dgd ._bcg < 64{if _dgd ._bcg < 0{_cfd [_fdb ]=_ffc ;_fdb ++;break _ga ;};_ffc +=_dgd ._bcg ;if _ffc < _fdg ||_ffc !=_ffe {_cfd [_fdb ]=_ffc ;_fdb ++;};break _bgf ;};_ffc +=_dgd ._bcg ;};for _ffc < _fdg &&_cf [_bd ]<=_ffc {_bd +=2;
|
|
};continue _ga ;case _egc :_bd ++;_ffc =_cf [_bd ];_bd ++;continue _ga ;case _ef :_ffc =_cf [_bd ]+2;case _ff :_ffc =_cf [_bd ]-2;case _gc :_ffc =_cf [_bd ]+3;case _fe :_ffc =_cf [_bd ]-3;default:if _dad ._abc ==12&&_dgd ._bcg ==EOL {_dad ._abc =0;if _ ,_ccb =_cc .uncompress1d (_dad ,_cf ,_fdg );
|
|
_ccb !=nil {return 0,_ccb ;};_dad ._abc ++;if _ ,_ccb =_cc .uncompress1d (_dad ,_cfd ,_fdg );_ccb !=nil {return 0,_ccb ;};_cde ,_ded :=_cc .uncompress1d (_dad ,_cf ,_fdg );if _ded !=nil {return EOF ,_ded ;};_dad ._abc ++;return _cde ,nil ;};_ffc =_fdg ;
|
|
continue _ga ;};if _ffc <=_fdg {_dfd =!_dfd ;_cfd [_fdb ]=_ffc ;_fdb ++;if _bd > 0{_bd --;}else {_bd ++;};for _ffc < _fdg &&_cf [_bd ]<=_ffc {_bd +=2;};};};if _cfd [_fdb ]!=_fdg {_cfd [_fdb ]=_fdg ;};if _dgd ==nil {return EOL ,nil ;};return _fdb ,nil ;
|
|
};func _bab (_gg ,_eac int )int {if _gg > _eac {return _eac ;};return _gg ;};type Decoder struct{_ega ,_af int ;_dfbc *runData ;_bb []*code ;_cgce []*code ;_fd []*code ;};func (_fca *Decoder )initTables ()(_egca error ){if _fca ._bb ==nil {_fca ._bb ,_egca =_fca .createLittleEndianTable (_fa );
|
|
if _egca !=nil {return ;};_fca ._cgce ,_egca =_fca .createLittleEndianTable (_aef );if _egca !=nil {return ;};_fca ._fd ,_egca =_fca .createLittleEndianTable (_ge );if _egca !=nil {return ;};};return nil ;};const (_dbdc int =1024<<7;_gbb int =3;_dgde uint =24;
|
|
);var (_ge =[][3]int {{4,0x1,int (_egc )},{3,0x1,int (_be )},{1,0x1,int (_ed )},{3,0x3,int (_dfb )},{6,0x3,int (_ef )},{7,0x3,int (_gc )},{3,0x2,int (_bf )},{6,0x2,int (_ff )},{7,0x2,int (_fe )},{10,0xf,int (_de )},{12,0xf,int (_cgc )},{12,0x1,int (EOL )}};
|
|
_fa =[][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}};
|
|
_aef =[][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 (_febb *runData )uncompressGetCodeLittleEndian (_cbe []*code )(*code ,error ){_ffbd ,_ffcg :=_febb .uncompressGetNextCodeLittleEndian ();if _ffcg !=nil {_ba .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",_ffcg );
|
|
return nil ,_ffcg ;};_ffbd &=0xffffff;_bdf :=_ffbd >>(_dgde -_cge );_bbf :=_cbe [_bdf ];if _bbf !=nil &&_bbf ._f {_bdf =(_ffbd >>(_dgde -_cge -_beg ))&_ffb ;_bbf =_bbf ._db [_bdf ];};return _bbf ,nil ;};func (_df *code )String ()string {return _cg .Sprintf ("\u0025\u0064\u002f\u0025\u0064\u002f\u0025\u0064",_df ._a ,_df ._e ,_df ._bcg );
|
|
};func (_ag *Decoder )createLittleEndianTable (_cgd [][3]int )([]*code ,error ){_dgb :=make ([]*code ,_ab +1);for _feb :=0;_feb < len (_cgd );_feb ++{_agg :=_ae (_cgd [_feb ]);if _agg ._a <=_cge {_gfc :=_cge -_agg ._a ;_cbb :=_agg ._e <<uint (_gfc );for _gfd :=(1<<uint (_gfc ))-1;
|
|
_gfd >=0;_gfd --{_efa :=_cbb |_gfd ;_dgb [_efa ]=_agg ;};}else {_egaf :=_agg ._e >>uint (_agg ._a -_cge );if _dgb [_egaf ]==nil {var _gee =_ae ([3]int {});_gee ._db =make ([]*code ,_ffb +1);_dgb [_egaf ]=_gee ;};if _agg ._a <=_cge +_beg {_ee :=_cge +_beg -_agg ._a ;
|
|
_add :=(_agg ._e <<uint (_ee ))&_ffb ;_dgb [_egaf ]._f =true ;for _bcc :=(1<<uint (_ee ))-1;_bcc >=0;_bcc --{_dgb [_egaf ]._db [_add |_bcc ]=_agg ;};}else {return nil ,_d .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 _dgb ,nil ;};func _ae (_ea [3]int )*code {return &code {_a :_ea [0],_e :_ea [1],_bcg :_ea [2]}};func _ec (_eg ,_bg int )int {if _eg < _bg {return _bg ;};return _eg ;};type runData struct{_adgf *_b .Reader ;_abc int ;_bee int ;_gaa int ;_edf []byte ;
|
|
_gfg int ;_fg int ;};func (_ce *runData )fillBuffer (_bbfa int )error {_ce ._gfg =_bbfa ;_ ,_ege :=_ce ._adgf .Seek (int64 (_bbfa ),_g .SeekStart );if _ege !=nil {if _ege ==_g .EOF {_ba .Log .Debug ("\u0053\u0065\u0061\u006b\u0020\u0045\u004f\u0046");_ce ._fg =-1;
|
|
}else {return _ege ;};};if _ege ==nil {_ce ._fg ,_ege =_ce ._adgf .Read (_ce ._edf );if _ege !=nil {if _ege ==_g .EOF {_ba .Log .Trace ("\u0052\u0065\u0061\u0064\u0020\u0045\u004f\u0046");_ce ._fg =-1;}else {return _ege ;};};};if _ce ._fg > -1&&_ce ._fg < 3{for _ce ._fg < 3{_gbf ,_bfdg :=_ce ._adgf .ReadByte ();
|
|
if _bfdg !=nil {if _bfdg ==_g .EOF {_ce ._edf [_ce ._fg ]=0;}else {return _bfdg ;};}else {_ce ._edf [_ce ._fg ]=_gbf &0xFF;};_ce ._fg ++;};};_ce ._fg -=3;if _ce ._fg < 0{_ce ._edf =make ([]byte ,len (_ce ._edf ));_ce ._fg =len (_ce ._edf )-3;};return nil ;
|
|
};func _afe (_dc *_b .Reader )(*runData ,error ){_adb :=&runData {_adgf :_dc ,_abc :0,_bee :1};_ddd :=_bab (_ec (_gbb ,int (_dc .Length ())),_dbdc );_adb ._edf =make ([]byte ,_ddd );if _bga :=_adb .fillBuffer (0);_bga !=nil {if _bga ==_g .EOF {_adb ._edf =make ([]byte ,10);
|
|
_ba .Log .Debug ("F\u0069\u006c\u006c\u0042uf\u0066e\u0072\u0020\u0066\u0061\u0069l\u0065\u0064\u003a\u0020\u0025\u0076",_bga );}else {return nil ,_bga ;};};return _adb ,nil ;};const (EOF =-3;_bgg =-2;EOL =-1;_cge =8;_ab =(1<<_cge )-1;_beg =5;_ffb =(1<<_beg )-1;
|
|
);func (_gda *runData )uncompressGetCode (_fdgd []*code )(*code ,error ){return _gda .uncompressGetCodeLittleEndian (_fdgd );};const (_egc mmrCode =iota ;_be ;_ed ;_dfb ;_ef ;_gc ;_bf ;_ff ;_fe ;_de ;_cgc ;);func (_fbb *runData )uncompressGetNextCodeLittleEndian ()(int ,error ){_gag :=_fbb ._abc -_fbb ._bee ;
|
|
if _gag < 0||_gag > 24{_ace :=(_fbb ._abc >>3)-_fbb ._gfg ;if _ace >=_fbb ._fg {_ace +=_fbb ._gfg ;if _bbfe :=_fbb .fillBuffer (_ace );_bbfe !=nil {return 0,_bbfe ;};_ace -=_fbb ._gfg ;};_dbg :=(uint32 (_fbb ._edf [_ace ]&0xFF)<<16)|(uint32 (_fbb ._edf [_ace +1]&0xFF)<<8)|(uint32 (_fbb ._edf [_ace +2]&0xFF));
|
|
_eabb :=uint32 (_fbb ._abc &7);_dbg <<=_eabb ;_fbb ._gaa =int (_dbg );}else {_edb :=_fbb ._bee &7;_eabg :=7-_edb ;if _gag <=_eabg {_fbb ._gaa <<=uint (_gag );}else {_gfcg :=(_fbb ._bee >>3)+3-_fbb ._gfg ;if _gfcg >=_fbb ._fg {_gfcg +=_fbb ._gfg ;if _dae :=_fbb .fillBuffer (_gfcg );
|
|
_dae !=nil {return 0,_dae ;};_gfcg -=_fbb ._gfg ;};_edb =8-_edb ;for {_fbb ._gaa <<=uint (_edb );_fbb ._gaa |=int (uint (_fbb ._edf [_gfcg ])&0xFF);_gag -=_edb ;_gfcg ++;_edb =8;if !(_gag >=8){break ;};};_fbb ._gaa <<=uint (_gag );};};_fbb ._bee =_fbb ._abc ;
|
|
return _fbb ._gaa ,nil ;};func New (r *_b .Reader ,width ,height int ,dataOffset ,dataLength int64 )(*Decoder ,error ){_bac :=&Decoder {_ega :width ,_af :height };_abe ,_babc :=r .NewPartialReader (int (dataOffset ),int (dataLength ),false );if _babc !=nil {return nil ,_babc ;
|
|
};_afc ,_babc :=_afe (_abe );if _babc !=nil {return nil ,_babc ;};_ ,_babc =r .Seek (_abe .RelativePosition (),_g .SeekCurrent );if _babc !=nil {return nil ,_babc ;};_bac ._dfbc =_afc ;if _bfa :=_bac .initTables ();_bfa !=nil {return nil ,_bfa ;};return _bac ,nil ;
|
|
};type code struct{_a int ;_e int ;_bcg int ;_db []*code ;_f bool ;};type mmrCode int ;func (_bba *Decoder )UncompressMMR ()(_dg *_bc .Bitmap ,_begg error ){_dg =_bc .New (_bba ._ega ,_bba ._af );_cb :=make ([]int ,_dg .Width +5);_gb :=make ([]int ,_dg .Width +5);
|
|
_gb [0]=_dg .Width ;_ad :=1;var _fc int ;for _egd :=0;_egd < _dg .Height ;_egd ++{_fc ,_begg =_bba .uncompress2d (_bba ._dfbc ,_gb ,_ad ,_cb ,_dg .Width );if _begg !=nil {return nil ,_begg ;};if _fc ==EOF {break ;};if _fc > 0{_begg =_bba .fillBitmap (_dg ,_egd ,_cb ,_fc );
|
|
if _begg !=nil {return nil ,_begg ;};};_gb ,_cb =_cb ,_gb ;_ad =_fc ;};if _begg =_bba .detectAndSkipEOL ();_begg !=nil {return nil ,_begg ;};_bba ._dfbc .align ();return _dg ,nil ;};func (_eag *Decoder )detectAndSkipEOL ()error {for {_da ,_dbd :=_eag ._dfbc .uncompressGetCode (_eag ._fd );
|
|
if _dbd !=nil {return _dbd ;};if _da !=nil &&_da ._bcg ==EOL {_eag ._dfbc ._abc +=_da ._a ;}else {return nil ;};};};func (_eab *Decoder )fillBitmap (_deg *_bc .Bitmap ,_adg int ,_dec []int ,_ac int )error {var _abf byte ;_dgbg :=0;_dgc :=_deg .GetByteIndex (_dgbg ,_adg );
|
|
for _gd :=0;_gd < _ac ;_gd ++{_fec :=byte (1);_fb :=_dec [_gd ];if (_gd &1)==0{_fec =0;};for _dgbg < _fb {_abf =(_abf <<1)|_fec ;_dgbg ++;if (_dgbg &7)==0{if _bcf :=_deg .SetByte (_dgc ,_abf );_bcf !=nil {return _bcf ;};_dgc ++;_abf =0;};};};if (_dgbg &7)!=0{_abf <<=uint (8-(_dgbg &7));
|
|
if _adc :=_deg .SetByte (_dgc ,_abf );_adc !=nil {return _adc ;};};return nil ;};func (_egb *runData )align (){_egb ._abc =((_egb ._abc +7)>>3)<<3}; |