mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-07 19:29:16 +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 (_g "errors";_d "fmt";_ag "github.com/unidoc/unipdf/v3/common";_c "github.com/unidoc/unipdf/v3/internal/bitwise";_b "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_a "io";);func (_fcg *Decoder )UncompressMMR ()(_ad *_b .Bitmap ,_gbe error ){_ad =_b .New (_fcg ._ggg ,_fcg ._bg );
|
|
_cg :=make ([]int ,_ad .Width +5);_add :=make ([]int ,_ad .Width +5);_add [0]=_ad .Width ;_ecc :=1;var _cgc int ;for _fcf :=0;_fcf < _ad .Height ;_fcf ++{_cgc ,_gbe =_fcg .uncompress2d (_fcg ._gaa ,_add ,_ecc ,_cg ,_ad .Width );if _gbe !=nil {return nil ,_gbe ;
|
|
};if _cgc ==EOF {break ;};if _cgc > 0{_gbe =_fcg .fillBitmap (_ad ,_fcf ,_cg ,_cgc );if _gbe !=nil {return nil ,_gbe ;};};_add ,_cg =_cg ,_add ;_ecc =_cgc ;};if _gbe =_fcg .detectAndSkipEOL ();_gbe !=nil {return nil ,_gbe ;};_fcg ._gaa .align ();return _ad ,nil ;
|
|
};func (_bd *code )String ()string {return _d .Sprintf ("\u0025\u0064\u002f\u0025\u0064\u002f\u0025\u0064",_bd ._ab ,_bd ._gg ,_bd ._fa );};func (_be *Decoder )fillBitmap (_ef *_b .Bitmap ,_egd int ,_dff []int ,_addg int )error {var _gdeb byte ;_ed :=0;
|
|
_fag :=_ef .GetByteIndex (_ed ,_egd );for _gbf :=0;_gbf < _addg ;_gbf ++{_fbe :=byte (1);_bad :=_dff [_gbf ];if (_gbf &1)==0{_fbe =0;};for _ed < _bad {_gdeb =(_gdeb <<1)|_fbe ;_ed ++;if (_ed &7)==0{if _bed :=_ef .SetByte (_fag ,_gdeb );_bed !=nil {return _bed ;
|
|
};_fag ++;_gdeb =0;};};};if (_ed &7)!=0{_gdeb <<=uint (8-(_ed &7));if _dc :=_ef .SetByte (_fag ,_gdeb );_dc !=nil {return _dc ;};};return nil ;};const (_cc mmrCode =iota ;_ccf ;_af ;_ffc ;_bdb ;_dd ;_ac ;_gb ;_fca ;_db ;_gge ;);func (_fcfgb *runData )align (){_fcfgb ._aaf =((_fcfgb ._aaf +7)>>3)<<3};
|
|
func (_fgc *runData )uncompressGetCodeLittleEndian (_aed []*code )(*code ,error ){_bf ,_gbg :=_fgc .uncompressGetNextCodeLittleEndian ();if _gbg !=nil {_ag .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",_gbg );
|
|
return nil ,_gbg ;};_bf &=0xffffff;_bfa :=_bf >>(_bac -_ga );_egc :=_aed [_bfa ];if _egc !=nil &&_egc ._ae {_bfa =(_bf >>(_bac -_ga -_bc ))&_fcd ;_egc =_egc ._gf [_bfa ];};return _egc ,nil ;};func (_gdf *Decoder )createLittleEndianTable (_bb [][3]int )([]*code ,error ){_eeg :=make ([]*code ,_cdg +1);
|
|
for _fec :=0;_fec < len (_bb );_fec ++{_daf :=_da (_bb [_fec ]);if _daf ._ab <=_ga {_fg :=_ga -_daf ._ab ;_gbb :=_daf ._gg <<uint (_fg );for _fcea :=(1<<uint (_fg ))-1;_fcea >=0;_fcea --{_gde :=_gbb |_fcea ;_eeg [_gde ]=_daf ;};}else {_ca :=_daf ._gg >>uint (_daf ._ab -_ga );
|
|
if _eeg [_ca ]==nil {var _aea =_da ([3]int {});_aea ._gf =make ([]*code ,_fcd +1);_eeg [_ca ]=_aea ;};if _daf ._ab <=_ga +_bc {_ce :=_ga +_bc -_daf ._ab ;_ba :=(_daf ._gg <<uint (_ce ))&_fcd ;_eeg [_ca ]._ae =true ;for _ccb :=(1<<uint (_ce ))-1;_ccb >=0;
|
|
_ccb --{_eeg [_ca ]._gf [_ba |_ccb ]=_daf ;};}else {return nil ,_g .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 _eeg ,nil ;};func (_dcd *runData )uncompressGetNextCodeLittleEndian ()(int ,error ){_addd :=_dcd ._aaf -_dcd ._edf ;if _addd < 0||_addd > 24{_eebg :=(_dcd ._aaf >>3)-_dcd ._dae ;if _eebg >=_dcd ._cab {_eebg +=_dcd ._dae ;if _gda :=_dcd .fillBuffer (_eebg );
|
|
_gda !=nil {return 0,_gda ;};_eebg -=_dcd ._dae ;};_beg :=(uint32 (_dcd ._bgb [_eebg ]&0xFF)<<16)|(uint32 (_dcd ._bgb [_eebg +1]&0xFF)<<8)|(uint32 (_dcd ._bgb [_eebg +2]&0xFF));_cbf :=uint32 (_dcd ._aaf &7);_beg <<=_cbf ;_dcd ._bdg =int (_beg );}else {_dffd :=_dcd ._edf &7;
|
|
_edc :=7-_dffd ;if _addd <=_edc {_dcd ._bdg <<=uint (_addd );}else {_afc :=(_dcd ._edf >>3)+3-_dcd ._dae ;if _afc >=_dcd ._cab {_afc +=_dcd ._dae ;if _dea :=_dcd .fillBuffer (_afc );_dea !=nil {return 0,_dea ;};_afc -=_dcd ._dae ;};_dffd =8-_dffd ;for {_dcd ._bdg <<=uint (_dffd );
|
|
_dcd ._bdg |=int (uint (_dcd ._bgb [_afc ])&0xFF);_addd -=_dffd ;_afc ++;_dffd =8;if !(_addd >=8){break ;};};_dcd ._bdg <<=uint (_addd );};};_dcd ._edf =_dcd ._aaf ;return _dcd ._bdg ,nil ;};func New (r *_c .Reader ,width ,height int ,dataOffset ,dataLength int64 )(*Decoder ,error ){_dbb :=&Decoder {_ggg :width ,_bg :height };
|
|
_gae ,_ee :=r .NewPartialReader (int (dataOffset ),int (dataLength ),false );if _ee !=nil {return nil ,_ee ;};_aba ,_ee :=_eegc (_gae );if _ee !=nil {return nil ,_ee ;};_ ,_ee =r .Seek (_gae .RelativePosition (),_a .SeekCurrent );if _ee !=nil {return nil ,_ee ;
|
|
};_dbb ._gaa =_aba ;if _eb :=_dbb .initTables ();_eb !=nil {return nil ,_eb ;};return _dbb ,nil ;};func (_bade *Decoder )uncompress1d (_gdb *runData ,_ggb []int ,_ggc int )(int ,error ){var (_cga =true ;_fbc int ;_dg *code ;_dga int ;_ea error ;);_ecg :for _fbc < _ggc {_gad :for {if _cga {_dg ,_ea =_gdb .uncompressGetCode (_bade ._fce );
|
|
if _ea !=nil {return 0,_ea ;};}else {_dg ,_ea =_gdb .uncompressGetCode (_bade ._fb );if _ea !=nil {return 0,_ea ;};};_gdb ._aaf +=_dg ._ab ;if _dg ._fa < 0{break _ecg ;};_fbc +=_dg ._fa ;if _dg ._fa < 64{_cga =!_cga ;_ggb [_dga ]=_fbc ;_dga ++;break _gad ;
|
|
};};};if _ggb [_dga ]!=_ggc {_ggb [_dga ]=_ggc ;};_fea :=EOL ;if _dg !=nil &&_dg ._fa !=EOL {_fea =_dga ;};return _fea ,nil ;};const (_bdc int =1024<<7;_dfd int =3;_bac uint =24;);func (_cb *Decoder )initTables ()(_feg error ){if _cb ._fce ==nil {_cb ._fce ,_feg =_cb .createLittleEndianTable (_eg );
|
|
if _feg !=nil {return ;};_cb ._fb ,_feg =_cb .createLittleEndianTable (_ec );if _feg !=nil {return ;};_cb ._gd ,_feg =_cb .createLittleEndianTable (_fae );if _feg !=nil {return ;};};return nil ;};func (_bbb *Decoder )detectAndSkipEOL ()error {for {_agf ,_fd :=_bbb ._gaa .uncompressGetCode (_bbb ._gd );
|
|
if _fd !=nil {return _fd ;};if _agf !=nil &&_agf ._fa ==EOL {_bbb ._gaa ._aaf +=_agf ._ab ;}else {return nil ;};};};func (_ceb *runData )fillBuffer (_ebc int )error {_ceb ._dae =_ebc ;_ ,_cee :=_ceb ._ffa .Seek (int64 (_ebc ),_a .SeekStart );if _cee !=nil {if _cee ==_a .EOF {_ag .Log .Debug ("\u0053\u0065\u0061\u006b\u0020\u0045\u004f\u0046");
|
|
_ceb ._cab =-1;}else {return _cee ;};};if _cee ==nil {_ceb ._cab ,_cee =_ceb ._ffa .Read (_ceb ._bgb );if _cee !=nil {if _cee ==_a .EOF {_ag .Log .Trace ("\u0052\u0065\u0061\u0064\u0020\u0045\u004f\u0046");_ceb ._cab =-1;}else {return _cee ;};};};if _ceb ._cab > -1&&_ceb ._cab < 3{for _ceb ._cab < 3{_dgb ,_cdc :=_ceb ._ffa .ReadByte ();
|
|
if _cdc !=nil {if _cdc ==_a .EOF {_ceb ._bgb [_ceb ._cab ]=0;}else {return _cdc ;};}else {_ceb ._bgb [_ceb ._cab ]=_dgb &0xFF;};_ceb ._cab ++;};};_ceb ._cab -=3;if _ceb ._cab < 0{_ceb ._bgb =make ([]byte ,len (_ceb ._bgb ));_ceb ._cab =len (_ceb ._bgb )-3;
|
|
};return nil ;};type Decoder struct{_ggg ,_bg int ;_gaa *runData ;_fce []*code ;_fb []*code ;_gd []*code ;};type code struct{_ab int ;_gg int ;_fa int ;_gf []*code ;_ae bool ;};func _eegc (_gec *_c .Reader )(*runData ,error ){_gecb :=&runData {_ffa :_gec ,_aaf :0,_edf :1};
|
|
_cbd :=_fc (_fe (_dfd ,int (_gec .Length ())),_bdc );_gecb ._bgb =make ([]byte ,_cbd );if _fgg :=_gecb .fillBuffer (0);_fgg !=nil {if _fgg ==_a .EOF {_gecb ._bgb =make ([]byte ,10);_ag .Log .Debug ("F\u0069\u006c\u006c\u0042uf\u0066e\u0072\u0020\u0066\u0061\u0069l\u0065\u0064\u003a\u0020\u0025\u0076",_fgg );
|
|
}else {return nil ,_fgg ;};};return _gecb ,nil ;};func (_cdf *runData )uncompressGetCode (_dgae []*code )(*code ,error ){return _cdf .uncompressGetCodeLittleEndian (_dgae );};var (_fae =[][3]int {{4,0x1,int (_cc )},{3,0x1,int (_ccf )},{1,0x1,int (_af )},{3,0x3,int (_ffc )},{6,0x3,int (_bdb )},{7,0x3,int (_dd )},{3,0x2,int (_ac )},{6,0x2,int (_gb )},{7,0x2,int (_fca )},{10,0xf,int (_db )},{12,0xf,int (_gge )},{12,0x1,int (EOL )}};
|
|
_eg =[][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,_df },{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,_df },{11,0x01,_df },{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}};
|
|
_ec =[][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,_df },{9,0x18,15},{10,0x01,_df },{10,0x17,16},{10,0x18,17},{10,0x37,0},{10,0x08,18},{10,0x0F,64},{11,0x01,_df },{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}};
|
|
);type mmrCode int ;func _fc (_e ,_abg int )int {if _e > _abg {return _abg ;};return _e ;};func _da (_ff [3]int )*code {return &code {_ab :_ff [0],_gg :_ff [1],_fa :_ff [2]}};const (EOF =-3;_df =-2;EOL =-1;_ga =8;_cdg =(1<<_ga )-1;_bc =5;_fcd =(1<<_bc )-1;
|
|
);func _fe (_cd ,_cf int )int {if _cd < _cf {return _cf ;};return _cd ;};func (_ebd *Decoder )uncompress2d (_aa *runData ,_fbec []int ,_cgb int ,_badd []int ,_fee int )(int ,error ){var (_bedb int ;_fcb int ;_daa int ;_eeb =true ;_ge error ;_dfe *code ;
|
|
);_fbec [_cgb ]=_fee ;_fbec [_cgb +1]=_fee ;_fbec [_cgb +2]=_fee +1;_fbec [_cgb +3]=_fee +1;_fcfg :for _daa < _fee {_dfe ,_ge =_aa .uncompressGetCode (_ebd ._gd );if _ge !=nil {return EOL ,nil ;};if _dfe ==nil {_aa ._aaf ++;break _fcfg ;};_aa ._aaf +=_dfe ._ab ;
|
|
switch mmrCode (_dfe ._fa ){case _af :_daa =_fbec [_bedb ];case _ffc :_daa =_fbec [_bedb ]+1;case _ac :_daa =_fbec [_bedb ]-1;case _ccf :for {var _de []*code ;if _eeb {_de =_ebd ._fce ;}else {_de =_ebd ._fb ;};_dfe ,_ge =_aa .uncompressGetCode (_de );if _ge !=nil {return 0,_ge ;
|
|
};if _dfe ==nil {break _fcfg ;};_aa ._aaf +=_dfe ._ab ;if _dfe ._fa < 64{if _dfe ._fa < 0{_badd [_fcb ]=_daa ;_fcb ++;_dfe =nil ;break _fcfg ;};_daa +=_dfe ._fa ;_badd [_fcb ]=_daa ;_fcb ++;break ;};_daa +=_dfe ._fa ;};_adf :=_daa ;_afe :for {var _afb []*code ;
|
|
if !_eeb {_afb =_ebd ._fce ;}else {_afb =_ebd ._fb ;};_dfe ,_ge =_aa .uncompressGetCode (_afb );if _ge !=nil {return 0,_ge ;};if _dfe ==nil {break _fcfg ;};_aa ._aaf +=_dfe ._ab ;if _dfe ._fa < 64{if _dfe ._fa < 0{_badd [_fcb ]=_daa ;_fcb ++;break _fcfg ;
|
|
};_daa +=_dfe ._fa ;if _daa < _fee ||_daa !=_adf {_badd [_fcb ]=_daa ;_fcb ++;};break _afe ;};_daa +=_dfe ._fa ;};for _daa < _fee &&_fbec [_bedb ]<=_daa {_bedb +=2;};continue _fcfg ;case _cc :_bedb ++;_daa =_fbec [_bedb ];_bedb ++;continue _fcfg ;case _bdb :_daa =_fbec [_bedb ]+2;
|
|
case _gb :_daa =_fbec [_bedb ]-2;case _dd :_daa =_fbec [_bedb ]+3;case _fca :_daa =_fbec [_bedb ]-3;default:if _aa ._aaf ==12&&_dfe ._fa ==EOL {_aa ._aaf =0;if _ ,_ge =_ebd .uncompress1d (_aa ,_fbec ,_fee );_ge !=nil {return 0,_ge ;};_aa ._aaf ++;if _ ,_ge =_ebd .uncompress1d (_aa ,_badd ,_fee );
|
|
_ge !=nil {return 0,_ge ;};_fbb ,_bee :=_ebd .uncompress1d (_aa ,_fbec ,_fee );if _bee !=nil {return EOF ,_bee ;};_aa ._aaf ++;return _fbb ,nil ;};_daa =_fee ;continue _fcfg ;};if _daa <=_fee {_eeb =!_eeb ;_badd [_fcb ]=_daa ;_fcb ++;if _bedb > 0{_bedb --;
|
|
}else {_bedb ++;};for _daa < _fee &&_fbec [_bedb ]<=_daa {_bedb +=2;};};};if _badd [_fcb ]!=_fee {_badd [_fcb ]=_fee ;};if _dfe ==nil {return EOL ,nil ;};return _fcb ,nil ;};type runData struct{_ffa *_c .Reader ;_aaf int ;_edf int ;_bdg int ;_bgb []byte ;
|
|
_dae int ;_cab int ;}; |