mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-07 19:29:16 +08:00
49 lines
13 KiB
Go
49 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";_aa "fmt";_c "github.com/unidoc/unipdf/v3/common";_f "github.com/unidoc/unipdf/v3/internal/bitwise";_ae "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_ag "io";);func (_eab *runData )uncompressGetNextCodeLittleEndian ()(int ,error ){_cgf :=_eab ._baa -_eab ._gce ;
|
|
if _cgf < 0||_cgf > 24{_ade :=(_eab ._baa >>3)-_eab ._abbf ;if _ade >=_eab ._bd {_ade +=_eab ._abbf ;if _agfb :=_eab .fillBuffer (_ade );_agfb !=nil {return 0,_agfb ;};_ade -=_eab ._abbf ;};_cegd :=(uint32 (_eab ._ffac [_ade ]&0xFF)<<16)|(uint32 (_eab ._ffac [_ade +1]&0xFF)<<8)|(uint32 (_eab ._ffac [_ade +2]&0xFF));
|
|
_adce :=uint32 (_eab ._baa &7);_cegd <<=_adce ;_eab ._cfc =int (_cegd );}else {_ega :=_eab ._gce &7;_dee :=7-_ega ;if _cgf <=_dee {_eab ._cfc <<=uint (_cgf );}else {_gdd :=(_eab ._gce >>3)+3-_eab ._abbf ;if _gdd >=_eab ._bd {_gdd +=_eab ._abbf ;if _agff :=_eab .fillBuffer (_gdd );
|
|
_agff !=nil {return 0,_agff ;};_gdd -=_eab ._abbf ;};_ega =8-_ega ;for {_eab ._cfc <<=uint (_ega );_eab ._cfc |=int (uint (_eab ._ffac [_gdd ])&0xFF);_cgf -=_ega ;_gdd ++;_ega =8;if !(_cgf >=8){break ;};};_eab ._cfc <<=uint (_cgf );};};_eab ._gce =_eab ._baa ;
|
|
return _eab ._cfc ,nil ;};func _g (_cc [3]int )*code {return &code {_da :_cc [0],_cd :_cc [1],_ab :_cc [2]}};func (_deg *Decoder )UncompressMMR ()(_fec *_ae .Bitmap ,_aea error ){_fec =_ae .New (_deg ._bb ,_deg ._bg );_ca :=make ([]int ,_fec .Width +5);
|
|
_gb :=make ([]int ,_fec .Width +5);_gb [0]=_fec .Width ;_aead :=1;var _fgf int ;for _cb :=0;_cb < _fec .Height ;_cb ++{_fgf ,_aea =_deg .uncompress2d (_deg ._fg ,_gb ,_aead ,_ca ,_fec .Width );if _aea !=nil {return nil ,_aea ;};if _fgf ==EOF {break ;};
|
|
if _fgf > 0{_aea =_deg .fillBitmap (_fec ,_cb ,_ca ,_fgf );if _aea !=nil {return nil ,_aea ;};};_gb ,_ca =_ca ,_gb ;_aead =_fgf ;};if _aea =_deg .detectAndSkipEOL ();_aea !=nil {return nil ,_aea ;};_deg ._fg .align ();return _fec ,nil ;};var (_ceg =[][3]int {{4,0x1,int (_ga )},{3,0x1,int (_gd )},{1,0x1,int (_aad )},{3,0x3,int (_dg )},{6,0x3,int (_aag )},{7,0x3,int (_agf )},{3,0x2,int (_fd )},{6,0x2,int (_be )},{7,0x2,int (_ad )},{10,0xf,int (_fe )},{12,0xf,int (_gf )},{12,0x1,int (EOL )}};
|
|
_aeb =[][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,_agd },{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,_agd },{11,0x01,_agd },{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}};
|
|
_dag =[][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,_agd },{9,0x18,15},{10,0x01,_agd },{10,0x17,16},{10,0x18,17},{10,0x37,0},{10,0x08,18},{10,0x0F,64},{11,0x01,_agd },{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 (_bce *runData )uncompressGetCodeLittleEndian (_cgdc []*code )(*code ,error ){_ffe ,_caa :=_bce .uncompressGetNextCodeLittleEndian ();if _caa !=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",_caa );
|
|
return nil ,_caa ;};_ffe &=0xffffff;_feb :=_ffe >>(_dcd -_abg );_dbe :=_cgdc [_feb ];if _dbe !=nil &&_dbe ._agc {_feb =(_ffe >>(_dcd -_abg -_cda ))&_ce ;_dbe =_dbe ._aed [_feb ];};return _dbe ,nil ;};func (_bga *Decoder )uncompress2d (_cca *runData ,_eca []int ,_abb int ,_eff []int ,_acg int )(int ,error ){var (_fegd int ;
|
|
_cfd int ;_gdf int ;_begd =true ;_agg error ;_cab *code ;);_eca [_abb ]=_acg ;_eca [_abb +1]=_acg ;_eca [_abb +2]=_acg +1;_eca [_abb +3]=_acg +1;_fgd :for _gdf < _acg {_cab ,_agg =_cca .uncompressGetCode (_bga ._cce );if _agg !=nil {return EOL ,nil ;};
|
|
if _cab ==nil {_cca ._baa ++;break _fgd ;};_cca ._baa +=_cab ._da ;switch mmrCode (_cab ._ab ){case _aad :_gdf =_eca [_fegd ];case _dg :_gdf =_eca [_fegd ]+1;case _fd :_gdf =_eca [_fegd ]-1;case _gd :for {var _bee []*code ;if _begd {_bee =_bga ._daga ;
|
|
}else {_bee =_bga ._cg ;};_cab ,_agg =_cca .uncompressGetCode (_bee );if _agg !=nil {return 0,_agg ;};if _cab ==nil {break _fgd ;};_cca ._baa +=_cab ._da ;if _cab ._ab < 64{if _cab ._ab < 0{_eff [_cfd ]=_gdf ;_cfd ++;_cab =nil ;break _fgd ;};_gdf +=_cab ._ab ;
|
|
_eff [_cfd ]=_gdf ;_cfd ++;break ;};_gdf +=_cab ._ab ;};_bc :=_gdf ;_cfa :for {var _cdc []*code ;if !_begd {_cdc =_bga ._daga ;}else {_cdc =_bga ._cg ;};_cab ,_agg =_cca .uncompressGetCode (_cdc );if _agg !=nil {return 0,_agg ;};if _cab ==nil {break _fgd ;
|
|
};_cca ._baa +=_cab ._da ;if _cab ._ab < 64{if _cab ._ab < 0{_eff [_cfd ]=_gdf ;_cfd ++;break _fgd ;};_gdf +=_cab ._ab ;if _gdf < _acg ||_gdf !=_bc {_eff [_cfd ]=_gdf ;_cfd ++;};break _cfa ;};_gdf +=_cab ._ab ;};for _gdf < _acg &&_eca [_fegd ]<=_gdf {_fegd +=2;
|
|
};continue _fgd ;case _ga :_fegd ++;_gdf =_eca [_fegd ];_fegd ++;continue _fgd ;case _aag :_gdf =_eca [_fegd ]+2;case _be :_gdf =_eca [_fegd ]-2;case _agf :_gdf =_eca [_fegd ]+3;case _ad :_gdf =_eca [_fegd ]-3;default:if _cca ._baa ==12&&_cab ._ab ==EOL {_cca ._baa =0;
|
|
if _ ,_agg =_bga .uncompress1d (_cca ,_eca ,_acg );_agg !=nil {return 0,_agg ;};_cca ._baa ++;if _ ,_agg =_bga .uncompress1d (_cca ,_eff ,_acg );_agg !=nil {return 0,_agg ;};_gfb ,_gee :=_bga .uncompress1d (_cca ,_eca ,_acg );if _gee !=nil {return EOF ,_gee ;
|
|
};_cca ._baa ++;return _gfb ,nil ;};_gdf =_acg ;continue _fgd ;};if _gdf <=_acg {_begd =!_begd ;_eff [_cfd ]=_gdf ;_cfd ++;if _fegd > 0{_fegd --;}else {_fegd ++;};for _gdf < _acg &&_eca [_fegd ]<=_gdf {_fegd +=2;};};};if _eff [_cfd ]!=_acg {_eff [_cfd ]=_acg ;
|
|
};if _cab ==nil {return EOL ,nil ;};return _cfd ,nil ;};type mmrCode int ;type code struct{_da int ;_cd int ;_ab int ;_aed []*code ;_agc bool ;};func (_e *code )String ()string {return _aa .Sprintf ("\u0025\u0064\u002f\u0025\u0064\u002f\u0025\u0064",_e ._da ,_e ._cd ,_e ._ab );
|
|
};func (_fc *Decoder )initTables ()(_ccdg error ){if _fc ._daga ==nil {_fc ._daga ,_ccdg =_fc .createLittleEndianTable (_aeb );if _ccdg !=nil {return ;};_fc ._cg ,_ccdg =_fc .createLittleEndianTable (_dag );if _ccdg !=nil {return ;};_fc ._cce ,_ccdg =_fc .createLittleEndianTable (_ceg );
|
|
if _ccdg !=nil {return ;};};return nil ;};const (_ea int =1024<<7;_cfg int =3;_dcd uint =24;);func _ee (_fa ,_ec int )int {if _fa > _ec {return _ec ;};return _fa ;};const (_ga mmrCode =iota ;_gd ;_aad ;_dg ;_aag ;_agf ;_fd ;_be ;_ad ;_fe ;_gf ;);type runData struct{_ebf *_f .SubstreamReader ;
|
|
_baa int ;_gce int ;_cfc int ;_ffac []byte ;_abbf int ;_bd int ;};func _db (_ef ,_b int )int {if _ef < _b {return _b ;};return _ef ;};func _dgg (_dcae *_f .SubstreamReader )(*runData ,error ){_accd :=&runData {_ebf :_dcae ,_baa :0,_gce :1};_fae :=_ee (_db (_cfg ,int (_dcae .Length ())),_ea );
|
|
_accd ._ffac =make ([]byte ,_fae );if _bcc :=_accd .fillBuffer (0);_bcc !=nil {if _bcc ==_ag .EOF {_accd ._ffac =make ([]byte ,10);_c .Log .Debug ("F\u0069\u006c\u006c\u0042uf\u0066e\u0072\u0020\u0066\u0061\u0069l\u0065\u0064\u003a\u0020\u0025\u0076",_bcc );
|
|
}else {return nil ,_bcc ;};};return _accd ,nil ;};func (_fed *Decoder )detectAndSkipEOL ()error {for {_gaf ,_cea :=_fed ._fg .uncompressGetCode (_fed ._cce );if _cea !=nil {return _cea ;};if _gaf !=nil &&_gaf ._ab ==EOL {_fed ._fg ._baa +=_gaf ._da ;}else {return nil ;
|
|
};};};func (_fad *Decoder )fillBitmap (_efe *_ae .Bitmap ,_gc int ,_eee []int ,_ace int )error {var _efbf byte ;_faf :=0;_agdd :=_efe .GetByteIndex (_faf ,_gc );for _adc :=0;_adc < _ace ;_adc ++{_bgf :=byte (1);_bag :=_eee [_adc ];if (_adc &1)==0{_bgf =0;
|
|
};for _faf < _bag {_efbf =(_efbf <<1)|_bgf ;_faf ++;if (_faf &7)==0{if _daa :=_efe .SetByte (_agdd ,_efbf );_daa !=nil {return _daa ;};_agdd ++;_efbf =0;};};};if (_faf &7)!=0{_efbf <<=uint (8-(_faf &7));if _ge :=_efe .SetByte (_agdd ,_efbf );_ge !=nil {return _ge ;
|
|
};};return nil ;};type Decoder struct{_bb ,_bg int ;_fg *runData ;_daga []*code ;_cg []*code ;_cce []*code ;};const (EOF =-3;_agd =-2;EOL =-1;_abg =8;_ccd =(1<<_abg )-1;_cda =5;_ce =(1<<_cda )-1;);func (_gg *runData )fillBuffer (_eaf int )error {_gg ._abbf =_eaf ;
|
|
_ ,_ed :=_gg ._ebf .Seek (int64 (_eaf ),_ag .SeekStart );if _ed !=nil {if _ed ==_ag .EOF {_c .Log .Debug ("\u0053\u0065\u0061\u006b\u0020\u0045\u004f\u0046");_gg ._bd =-1;}else {return _ed ;};};if _ed ==nil {_gg ._bd ,_ed =_gg ._ebf .Read (_gg ._ffac );
|
|
if _ed !=nil {if _ed ==_ag .EOF {_c .Log .Trace ("\u0052\u0065\u0061\u0064\u0020\u0045\u004f\u0046");_gg ._bd =-1;}else {return _ed ;};};};if _gg ._bd > -1&&_gg ._bd < 3{for _gg ._bd < 3{_gef ,_cdg :=_gg ._ebf .ReadByte ();if _cdg !=nil {if _cdg ==_ag .EOF {_gg ._ffac [_gg ._bd ]=0;
|
|
}else {return _cdg ;};}else {_gg ._ffac [_gg ._bd ]=_gef &0xFF;};_gg ._bd ++;};};_gg ._bd -=3;if _gg ._bd < 0{_gg ._ffac =make ([]byte ,len (_gg ._ffac ));_gg ._bd =len (_gg ._ffac )-3;};return nil ;};func (_gag *runData )uncompressGetCode (_faa []*code )(*code ,error ){return _gag .uncompressGetCodeLittleEndian (_faa );
|
|
};func (_ff *Decoder )uncompress1d (_acc *runData ,_eb []int ,_feg int )(int ,error ){var (_ccc =true ;_dba int ;_ccg *code ;_ffa int ;_ced error ;);_fbe :for _dba < _feg {_gca :for {if _ccc {_ccg ,_ced =_acc .uncompressGetCode (_ff ._daga );if _ced !=nil {return 0,_ced ;
|
|
};}else {_ccg ,_ced =_acc .uncompressGetCode (_ff ._cg );if _ced !=nil {return 0,_ced ;};};_acc ._baa +=_ccg ._da ;if _ccg ._ab < 0{break _fbe ;};_dba +=_ccg ._ab ;if _ccg ._ab < 64{_ccc =!_ccc ;_eb [_ffa ]=_dba ;_ffa ++;break _gca ;};};};if _eb [_ffa ]!=_feg {_eb [_ffa ]=_feg ;
|
|
};_acf :=EOL ;if _ccg !=nil &&_ccg ._ab !=EOL {_acf =_ffa ;};return _acf ,nil ;};func (_ecd *Decoder )createLittleEndianTable (_ac [][3]int )([]*code ,error ){_eec :=make ([]*code ,_ccd +1);for _dc :=0;_dc < len (_ac );_dc ++{_gfa :=_g (_ac [_dc ]);if _gfa ._da <=_abg {_ba :=_abg -_gfa ._da ;
|
|
_gae :=_gfa ._cd <<uint (_ba );for _cgd :=(1<<uint (_ba ))-1;_cgd >=0;_cgd --{_cef :=_gae |_cgd ;_eec [_cef ]=_gfa ;};}else {_fb :=_gfa ._cd >>uint (_gfa ._da -_abg );if _eec [_fb ]==nil {var _cec =_g ([3]int {});_cec ._aed =make ([]*code ,_ce +1);_eec [_fb ]=_cec ;
|
|
};if _gfa ._da <=_abg +_cda {_gdg :=_abg +_cda -_gfa ._da ;_bgc :=(_gfa ._cd <<uint (_gdg ))&_ce ;_eec [_fb ]._agc =true ;for _af :=(1<<uint (_gdg ))-1;_af >=0;_af --{_eec [_fb ]._aed [_bgc |_af ]=_gfa ;};}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 _eec ,nil ;};func New (r _f .StreamReader ,width ,height int ,dataOffset ,dataLength int64 )(*Decoder ,error ){_cf :=&Decoder {_bb :width ,_bg :height };_eg ,_efb :=_f .NewSubstreamReader (r ,uint64 (dataOffset ),uint64 (dataLength ));if _efb !=nil {return nil ,_efb ;
|
|
};_de ,_efb :=_dgg (_eg );if _efb !=nil {return nil ,_efb ;};_cf ._fg =_de ;if _beg :=_cf .initTables ();_beg !=nil {return nil ,_beg ;};return _cf ,nil ;};func (_bcf *runData )align (){_bcf ._baa =((_bcf ._baa +7)>>3)<<3}; |