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 (_a "errors";_c "fmt";_be "github.com/unidoc/unipdf/v3/common";_f "github.com/unidoc/unipdf/v3/internal/bitwise";_ae "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_e "io";);func New (r _f .StreamReader ,width ,height int ,dataOffset ,dataLength int64 )(*Decoder ,error ){_dga :=&Decoder {_gf :width ,_dd :height };
|
|
_ada ,_fc :=_f .NewSubstreamReader (r ,uint64 (dataOffset ),uint64 (dataLength ));if _fc !=nil {return nil ,_fc ;};_eg ,_fc :=_fedc (_ada );if _fc !=nil {return nil ,_fc ;};_dga ._bf =_eg ;if _ddg :=_dga .initTables ();_ddg !=nil {return nil ,_ddg ;};return _dga ,nil ;
|
|
};func _cd (_cf [3]int )*code {return &code {_d :_cf [0],_ad :_cf [1],_ca :_cf [2]}};func _dg (_fe ,_bd int )int {if _fe > _bd {return _bd ;};return _fe ;};func (_ddb *runData )uncompressGetCodeLittleEndian (_ccf []*code )(*code ,error ){_efd ,_ccc :=_ddb .uncompressGetNextCodeLittleEndian ();
|
|
if _ccc !=nil {_be .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",_ccc );
|
|
return nil ,_ccc ;};_efd &=0xffffff;_afc :=_efd >>(_dbfb -_ge );_agg :=_ccf [_afc ];if _agg !=nil &&_agg ._beg {_afc =(_efd >>(_dbfb -_ge -_aff ))&_fg ;_agg =_agg ._cb [_afc ];};return _agg ,nil ;};var (_dge =[][3]int {{4,0x1,int (_g )},{3,0x1,int (_dc )},{1,0x1,int (_ba )},{3,0x3,int (_ab )},{6,0x3,int (_cfab )},{7,0x3,int (_gc )},{3,0x2,int (_cc )},{6,0x2,int (_cac )},{7,0x2,int (_bc )},{10,0xf,int (_af )},{12,0xf,int (_aeb )},{12,0x1,int (EOL )}};
|
|
_cfaf =[][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,_ac },{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,_ac },{11,0x01,_ac },{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}};
|
|
_efa =[][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,_ac },{9,0x18,15},{10,0x01,_ac },{10,0x17,16},{10,0x18,17},{10,0x37,0},{10,0x08,18},{10,0x0F,64},{11,0x01,_ac },{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 (_gac *Decoder )UncompressMMR ()(_cfe *_ae .Bitmap ,_cfg error ){_cfe =_ae .New (_gac ._gf ,_gac ._dd );_bea :=make ([]int ,_cfe .Width +5);_dbf :=make ([]int ,_cfe .Width +5);_dbf [0]=_cfe .Width ;_abc :=1;var _gfa int ;for _aee :=0;_aee < _cfe .Height ;
|
|
_aee ++{_gfa ,_cfg =_gac .uncompress2d (_gac ._bf ,_dbf ,_abc ,_bea ,_cfe .Width );if _cfg !=nil {return nil ,_cfg ;};if _gfa ==EOF {break ;};if _gfa > 0{_cfg =_gac .fillBitmap (_cfe ,_aee ,_bea ,_gfa );if _cfg !=nil {return nil ,_cfg ;};};_dbf ,_bea =_bea ,_dbf ;
|
|
_abc =_gfa ;};if _cfg =_gac .detectAndSkipEOL ();_cfg !=nil {return nil ,_cfg ;};_gac ._bf .align ();return _cfe ,nil ;};const (EOF =-3;_ac =-2;EOL =-1;_ge =8;_fd =(1<<_ge )-1;_aff =5;_fg =(1<<_aff )-1;);func (_bg *Decoder )createLittleEndianTable (_gce [][3]int )([]*code ,error ){_aec :=make ([]*code ,_fd +1);
|
|
for _fee :=0;_fee < len (_gce );_fee ++{_cfc :=_cd (_gce [_fee ]);if _cfc ._d <=_ge {_ce :=_ge -_cfc ._d ;_gd :=_cfc ._ad <<uint (_ce );for _cad :=(1<<uint (_ce ))-1;_cad >=0;_cad --{_acf :=_gd |_cad ;_aec [_acf ]=_cfc ;};}else {_gcef :=_cfc ._ad >>uint (_cfc ._d -_ge );
|
|
if _aec [_gcef ]==nil {var _ec =_cd ([3]int {});_ec ._cb =make ([]*code ,_fg +1);_aec [_gcef ]=_ec ;};if _cfc ._d <=_ge +_aff {_bce :=_ge +_aff -_cfc ._d ;_gg :=(_cfc ._ad <<uint (_bce ))&_fg ;_aec [_gcef ]._beg =true ;for _cg :=(1<<uint (_bce ))-1;_cg >=0;
|
|
_cg --{_aec [_gcef ]._cb [_gg |_cg ]=_cfc ;};}else {return nil ,_a .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 _aec ,nil ;};const (_g mmrCode =iota ;_dc ;_ba ;_ab ;_cfab ;_gc ;_cc ;_cac ;_bc ;_af ;_aeb ;);type runData struct{_eca *_f .SubstreamReader ;_cbce int ;_abb int ;_cee int ;_ccg []byte ;_ege int ;_gda int ;};func (_ff *Decoder )uncompress2d (_gace *runData ,_bff []int ,_dfg int ,_bfbf []int ,_aac int )(int ,error ){var (_gee int ;
|
|
_ade int ;_da int ;_dddg =true ;_dce error ;_gb *code ;);_bff [_dfg ]=_aac ;_bff [_dfg +1]=_aac ;_bff [_dfg +2]=_aac +1;_bff [_dfg +3]=_aac +1;_ecb :for _da < _aac {_gb ,_dce =_gace .uncompressGetCode (_ff ._ga );if _dce !=nil {return EOL ,nil ;};if _gb ==nil {_gace ._cbce ++;
|
|
break _ecb ;};_gace ._cbce +=_gb ._d ;switch mmrCode (_gb ._ca ){case _ba :_da =_bff [_gee ];case _ab :_da =_bff [_gee ]+1;case _cc :_da =_bff [_gee ]-1;case _dc :for {var _cec []*code ;if _dddg {_cec =_ff ._cdf ;}else {_cec =_ff ._de ;};_gb ,_dce =_gace .uncompressGetCode (_cec );
|
|
if _dce !=nil {return 0,_dce ;};if _gb ==nil {break _ecb ;};_gace ._cbce +=_gb ._d ;if _gb ._ca < 64{if _gb ._ca < 0{_bfbf [_ade ]=_da ;_ade ++;_gb =nil ;break _ecb ;};_da +=_gb ._ca ;_bfbf [_ade ]=_da ;_ade ++;break ;};_da +=_gb ._ca ;};_adee :=_da ;_caa :for {var _cfed []*code ;
|
|
if !_dddg {_cfed =_ff ._cdf ;}else {_cfed =_ff ._de ;};_gb ,_dce =_gace .uncompressGetCode (_cfed );if _dce !=nil {return 0,_dce ;};if _gb ==nil {break _ecb ;};_gace ._cbce +=_gb ._d ;if _gb ._ca < 64{if _gb ._ca < 0{_bfbf [_ade ]=_da ;_ade ++;break _ecb ;
|
|
};_da +=_gb ._ca ;if _da < _aac ||_da !=_adee {_bfbf [_ade ]=_da ;_ade ++;};break _caa ;};_da +=_gb ._ca ;};for _da < _aac &&_bff [_gee ]<=_da {_gee +=2;};continue _ecb ;case _g :_gee ++;_da =_bff [_gee ];_gee ++;continue _ecb ;case _cfab :_da =_bff [_gee ]+2;
|
|
case _cac :_da =_bff [_gee ]-2;case _gc :_da =_bff [_gee ]+3;case _bc :_da =_bff [_gee ]-3;default:if _gace ._cbce ==12&&_gb ._ca ==EOL {_gace ._cbce =0;if _ ,_dce =_ff .uncompress1d (_gace ,_bff ,_aac );_dce !=nil {return 0,_dce ;};_gace ._cbce ++;if _ ,_dce =_ff .uncompress1d (_gace ,_bfbf ,_aac );
|
|
_dce !=nil {return 0,_dce ;};_def ,_dba :=_ff .uncompress1d (_gace ,_bff ,_aac );if _dba !=nil {return EOF ,_dba ;};_gace ._cbce ++;return _def ,nil ;};_da =_aac ;continue _ecb ;};if _da <=_aac {_dddg =!_dddg ;_bfbf [_ade ]=_da ;_ade ++;if _gee > 0{_gee --;
|
|
}else {_gee ++;};for _da < _aac &&_bff [_gee ]<=_da {_gee +=2;};};};if _bfbf [_ade ]!=_aac {_bfbf [_ade ]=_aac ;};if _gb ==nil {return EOL ,nil ;};return _ade ,nil ;};const (_fef int =1024<<7;_cbf int =3;_dbfb uint =24;);func (_gef *Decoder )initTables ()(_gcf error ){if _gef ._cdf ==nil {_gef ._cdf ,_gcf =_gef .createLittleEndianTable (_cfaf );
|
|
if _gcf !=nil {return ;};_gef ._de ,_gcf =_gef .createLittleEndianTable (_efa );if _gcf !=nil {return ;};_gef ._ga ,_gcf =_gef .createLittleEndianTable (_dge );if _gcf !=nil {return ;};};return nil ;};type mmrCode int ;func (_ef *code )String ()string {return _c .Sprintf ("\u0025\u0064\u002f\u0025\u0064\u002f\u0025\u0064",_ef ._d ,_ef ._ad ,_ef ._ca );
|
|
};func (_ccd *runData )uncompressGetNextCodeLittleEndian ()(int ,error ){_dbfg :=_ccd ._cbce -_ccd ._abb ;if _dbfg < 0||_dbfg > 24{_cdg :=(_ccd ._cbce >>3)-_ccd ._ege ;if _cdg >=_ccd ._gda {_cdg +=_ccd ._ege ;if _ggg :=_ccd .fillBuffer (_cdg );_ggg !=nil {return 0,_ggg ;
|
|
};_cdg -=_ccd ._ege ;};_feda :=(uint32 (_ccd ._ccg [_cdg ]&0xFF)<<16)|(uint32 (_ccd ._ccg [_cdg +1]&0xFF)<<8)|(uint32 (_ccd ._ccg [_cdg +2]&0xFF));_baa :=uint32 (_ccd ._cbce &7);_feda <<=_baa ;_ccd ._cee =int (_feda );}else {_eb :=_ccd ._abb &7;_cdab :=7-_eb ;
|
|
if _dbfg <=_cdab {_ccd ._cee <<=uint (_dbfg );}else {_dff :=(_ccd ._abb >>3)+3-_ccd ._ege ;if _dff >=_ccd ._gda {_dff +=_ccd ._ege ;if _cae :=_ccd .fillBuffer (_dff );_cae !=nil {return 0,_cae ;};_dff -=_ccd ._ege ;};_eb =8-_eb ;for {_ccd ._cee <<=uint (_eb );
|
|
_ccd ._cee |=int (uint (_ccd ._ccg [_dff ])&0xFF);_dbfg -=_eb ;_dff ++;_eb =8;if !(_dbfg >=8){break ;};};_ccd ._cee <<=uint (_dbfg );};};_ccd ._abb =_ccd ._cbce ;return _ccd ._cee ,nil ;};func (_cfb *Decoder )uncompress1d (_aa *runData ,_geb []int ,_ea int )(int ,error ){var (_gdg =true ;
|
|
_add int ;_fed *code ;_acff int ;_gacd error ;);_bbb :for _add < _ea {_dgc :for {if _gdg {_fed ,_gacd =_aa .uncompressGetCode (_cfb ._cdf );if _gacd !=nil {return 0,_gacd ;};}else {_fed ,_gacd =_aa .uncompressGetCode (_cfb ._de );if _gacd !=nil {return 0,_gacd ;
|
|
};};_aa ._cbce +=_fed ._d ;if _fed ._ca < 0{break _bbb ;};_add +=_fed ._ca ;if _fed ._ca < 64{_gdg =!_gdg ;_geb [_acff ]=_add ;_acff ++;break _dgc ;};};};if _geb [_acff ]!=_ea {_geb [_acff ]=_ea ;};_bac :=EOL ;if _fed !=nil &&_fed ._ca !=EOL {_bac =_acff ;
|
|
};return _bac ,nil ;};func _fedc (_ee *_f .SubstreamReader )(*runData ,error ){_efc :=&runData {_eca :_ee ,_cbce :0,_abb :1};_fdg :=_dg (_cfa (_cbf ,int (_ee .Length ())),_fef );_efc ._ccg =make ([]byte ,_fdg );if _dbb :=_efc .fillBuffer (0);_dbb !=nil {if _dbb ==_e .EOF {_efc ._ccg =make ([]byte ,10);
|
|
_be .Log .Debug ("F\u0069\u006c\u006c\u0042uf\u0066e\u0072\u0020\u0066\u0061\u0069l\u0065\u0064\u003a\u0020\u0025\u0076",_dbb );}else {return nil ,_dbb ;};};return _efc ,nil ;};func (_ecd *runData )uncompressGetCode (_ceeg []*code )(*code ,error ){return _ecd .uncompressGetCodeLittleEndian (_ceeg );
|
|
};type code struct{_d int ;_ad int ;_ca int ;_cb []*code ;_beg bool ;};func _cfa (_db ,_df int )int {if _db < _df {return _df ;};return _db ;};func (_ced *runData )fillBuffer (_bfg int )error {_ced ._ege =_bfg ;_ ,_bef :=_ced ._eca .Seek (int64 (_bfg ),_e .SeekStart );
|
|
if _bef !=nil {if _bef ==_e .EOF {_be .Log .Debug ("\u0053\u0065\u0061\u006b\u0020\u0045\u004f\u0046");_ced ._gda =-1;}else {return _bef ;};};if _bef ==nil {_ced ._gda ,_bef =_ced ._eca .Read (_ced ._ccg );if _bef !=nil {if _bef ==_e .EOF {_be .Log .Trace ("\u0052\u0065\u0061\u0064\u0020\u0045\u004f\u0046");
|
|
_ced ._gda =-1;}else {return _bef ;};};};if _ced ._gda > -1&&_ced ._gda < 3{for _ced ._gda < 3{_ceb ,_ecbg :=_ced ._eca .ReadByte ();if _ecbg !=nil {if _ecbg ==_e .EOF {_ced ._ccg [_ced ._gda ]=0;}else {return _ecbg ;};}else {_ced ._ccg [_ced ._gda ]=_ceb &0xFF;
|
|
};_ced ._gda ++;};};_ced ._gda -=3;if _ced ._gda < 0{_ced ._ccg =make ([]byte ,len (_ced ._ccg ));_ced ._gda =len (_ced ._ccg )-3;};return nil ;};func (_bb *Decoder )fillBitmap (_ddd *_ae .Bitmap ,_egb int ,_fgc []int ,_egg int )error {var _bgc byte ;_cdb :=0;
|
|
_afe :=_ddd .GetByteIndex (_cdb ,_egb );for _ag :=0;_ag < _egg ;_ag ++{_bae :=byte (1);_gec :=_fgc [_ag ];if (_ag &1)==0{_bae =0;};for _cdb < _gec {_bgc =(_bgc <<1)|_bae ;_cdb ++;if (_cdb &7)==0{if _cbc :=_ddd .SetByte (_afe ,_bgc );_cbc !=nil {return _cbc ;
|
|
};_afe ++;_bgc =0;};};};if (_cdb &7)!=0{_bgc <<=uint (8-(_cdb &7));if _cda :=_ddd .SetByte (_afe ,_bgc );_cda !=nil {return _cda ;};};return nil ;};func (_cge *Decoder )detectAndSkipEOL ()error {for {_bfa ,_bfb :=_cge ._bf .uncompressGetCode (_cge ._ga );
|
|
if _bfb !=nil {return _bfb ;};if _bfa !=nil &&_bfa ._ca ==EOL {_cge ._bf ._cbce +=_bfa ._d ;}else {return nil ;};};};func (_bbf *runData )align (){_bbf ._cbce =((_bbf ._cbce +7)>>3)<<3};type Decoder struct{_gf ,_dd int ;_bf *runData ;_cdf []*code ;_de []*code ;
|
|
_ga []*code ;}; |