mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-05 19:30:30 +08:00
50 lines
14 KiB
Go
50 lines
14 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 (_f "errors";_b "fmt";_fa "github.com/unidoc/unipdf/v3/common";_e "github.com/unidoc/unipdf/v3/internal/bitwise";_eb "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_af "io";);var (_afd =[][3]int {{4,0x1,int (_bac )},{3,0x1,int (_efd )},{1,0x1,int (_fb )},{3,0x3,int (_cd )},{6,0x3,int (_cee )},{7,0x3,int (_gg )},{3,0x2,int (_baa )},{6,0x2,int (_ff )},{7,0x2,int (_ee )},{10,0xf,int (_dg )},{12,0xf,int (_fe )},{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,_ga },{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,_ga },{11,0x01,_ga },{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}};
|
|
_cdf =[][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,_ga },{9,0x18,15},{10,0x01,_ga },{10,0x17,16},{10,0x18,17},{10,0x37,0},{10,0x08,18},{10,0x0F,64},{11,0x01,_ga },{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 code struct{_c int ;_ef int ;_ba int ;_g []*code ;_cf bool ;};func _ad (_ca ,_ce int )int {if _ca < _ce {return _ce ;};return _ca ;};func _fdd (_bfc *_e .Reader )(*runData ,error ){_dcf :=&runData {_ead :_bfc ,_fdee :0,_bagg :1};_eee :=_fae (_ad (_adf ,int (_bfc .Length ())),_dce );
|
|
_dcf ._dbf =make ([]byte ,_eee );if _edbb :=_dcf .fillBuffer (0);_edbb !=nil {if _edbb ==_af .EOF {_dcf ._dbf =make ([]byte ,10);_fa .Log .Debug ("F\u0069\u006c\u006c\u0042uf\u0066e\u0072\u0020\u0066\u0061\u0069l\u0065\u0064\u003a\u0020\u0025\u0076",_edbb );
|
|
}else {return nil ,_edbb ;};};return _dcf ,nil ;};func _d (_ae [3]int )*code {return &code {_c :_ae [0],_ef :_ae [1],_ba :_ae [2]}};func (_bgaa *runData )uncompressGetNextCodeLittleEndian ()(int ,error ){_bcbc :=_bgaa ._fdee -_bgaa ._bagg ;if _bcbc < 0||_bcbc > 24{_fad :=(_bgaa ._fdee >>3)-_bgaa ._ddc ;
|
|
if _fad >=_bgaa ._faca {_fad +=_bgaa ._ddc ;if _aga :=_bgaa .fillBuffer (_fad );_aga !=nil {return 0,_aga ;};_fad -=_bgaa ._ddc ;};_ge :=(uint32 (_bgaa ._dbf [_fad ]&0xFF)<<16)|(uint32 (_bgaa ._dbf [_fad +1]&0xFF)<<8)|(uint32 (_bgaa ._dbf [_fad +2]&0xFF));
|
|
_faa :=uint32 (_bgaa ._fdee &7);_ge <<=_faa ;_bgaa ._dced =int (_ge );}else {_gcb :=_bgaa ._bagg &7;_gaa :=7-_gcb ;if _bcbc <=_gaa {_bgaa ._dced <<=uint (_bcbc );}else {_gbaa :=(_bgaa ._bagg >>3)+3-_bgaa ._ddc ;if _gbaa >=_bgaa ._faca {_gbaa +=_bgaa ._ddc ;
|
|
if _bad :=_bgaa .fillBuffer (_gbaa );_bad !=nil {return 0,_bad ;};_gbaa -=_bgaa ._ddc ;};_gcb =8-_gcb ;for {_bgaa ._dced <<=uint (_gcb );_bgaa ._dced |=int (uint (_bgaa ._dbf [_gbaa ])&0xFF);_bcbc -=_gcb ;_gbaa ++;_gcb =8;if !(_bcbc >=8){break ;};};_bgaa ._dced <<=uint (_bcbc );
|
|
};};_bgaa ._bagg =_bgaa ._fdee ;return _bgaa ._dced ,nil ;};type Decoder struct{_eda ,_bf int ;_afc *runData ;_aa []*code ;_bag []*code ;_df []*code ;};func (_cbbc *runData )fillBuffer (_cbge int )error {_cbbc ._ddc =_cbge ;_ ,_adfa :=_cbbc ._ead .Seek (int64 (_cbge ),_af .SeekStart );
|
|
if _adfa !=nil {if _adfa ==_af .EOF {_fa .Log .Debug ("\u0053\u0065\u0061\u006b\u0020\u0045\u004f\u0046");_cbbc ._faca =-1;}else {return _adfa ;};};if _adfa ==nil {_cbbc ._faca ,_adfa =_cbbc ._ead .Read (_cbbc ._dbf );if _adfa !=nil {if _adfa ==_af .EOF {_fa .Log .Trace ("\u0052\u0065\u0061\u0064\u0020\u0045\u004f\u0046");
|
|
_cbbc ._faca =-1;}else {return _adfa ;};};};if _cbbc ._faca > -1&&_cbbc ._faca < 3{for _cbbc ._faca < 3{_fce ,_adec :=_cbbc ._ead .ReadByte ();if _adec !=nil {if _adec ==_af .EOF {_cbbc ._dbf [_cbbc ._faca ]=0;}else {return _adec ;};}else {_cbbc ._dbf [_cbbc ._faca ]=_fce &0xFF;
|
|
};_cbbc ._faca ++;};};_cbbc ._faca -=3;if _cbbc ._faca < 0{_cbbc ._dbf =make ([]byte ,len (_cbbc ._dbf ));_cbbc ._faca =len (_cbbc ._dbf )-3;};return nil ;};func (_eec *Decoder )uncompress2d (_eged *runData ,_dfd []int ,_deb int ,_fda []int ,_bcb int )(int ,error ){var (_cfg int ;
|
|
_cbf int ;_edae int ;_cbb =true ;_ffg error ;_ag *code ;);_dfd [_deb ]=_bcb ;_dfd [_deb +1]=_bcb ;_dfd [_deb +2]=_bcb +1;_dfd [_deb +3]=_bcb +1;_gfe :for _edae < _bcb {_ag ,_ffg =_eged .uncompressGetCode (_eec ._df );if _ffg !=nil {return EOL ,nil ;};if _ag ==nil {_eged ._fdee ++;
|
|
break _gfe ;};_eged ._fdee +=_ag ._c ;switch mmrCode (_ag ._ba ){case _fb :_edae =_dfd [_cfg ];case _cd :_edae =_dfd [_cfg ]+1;case _baa :_edae =_dfd [_cfg ]-1;case _efd :for {var _bddc []*code ;if _cbb {_bddc =_eec ._aa ;}else {_bddc =_eec ._bag ;};_ag ,_ffg =_eged .uncompressGetCode (_bddc );
|
|
if _ffg !=nil {return 0,_ffg ;};if _ag ==nil {break _gfe ;};_eged ._fdee +=_ag ._c ;if _ag ._ba < 64{if _ag ._ba < 0{_fda [_cbf ]=_edae ;_cbf ++;_ag =nil ;break _gfe ;};_edae +=_ag ._ba ;_fda [_cbf ]=_edae ;_cbf ++;break ;};_edae +=_ag ._ba ;};_dc :=_edae ;
|
|
_aea :for {var _fde []*code ;if !_cbb {_fde =_eec ._aa ;}else {_fde =_eec ._bag ;};_ag ,_ffg =_eged .uncompressGetCode (_fde );if _ffg !=nil {return 0,_ffg ;};if _ag ==nil {break _gfe ;};_eged ._fdee +=_ag ._c ;if _ag ._ba < 64{if _ag ._ba < 0{_fda [_cbf ]=_edae ;
|
|
_cbf ++;break _gfe ;};_edae +=_ag ._ba ;if _edae < _bcb ||_edae !=_dc {_fda [_cbf ]=_edae ;_cbf ++;};break _aea ;};_edae +=_ag ._ba ;};for _edae < _bcb &&_dfd [_cfg ]<=_edae {_cfg +=2;};continue _gfe ;case _bac :_cfg ++;_edae =_dfd [_cfg ];_cfg ++;continue _gfe ;
|
|
case _cee :_edae =_dfd [_cfg ]+2;case _ff :_edae =_dfd [_cfg ]-2;case _gg :_edae =_dfd [_cfg ]+3;case _ee :_edae =_dfd [_cfg ]-3;default:if _eged ._fdee ==12&&_ag ._ba ==EOL {_eged ._fdee =0;if _ ,_ffg =_eec .uncompress1d (_eged ,_dfd ,_bcb );_ffg !=nil {return 0,_ffg ;
|
|
};_eged ._fdee ++;if _ ,_ffg =_eec .uncompress1d (_eged ,_fda ,_bcb );_ffg !=nil {return 0,_ffg ;};_aag ,_edb :=_eec .uncompress1d (_eged ,_dfd ,_bcb );if _edb !=nil {return EOF ,_edb ;};_eged ._fdee ++;return _aag ,nil ;};_edae =_bcb ;continue _gfe ;};
|
|
if _edae <=_bcb {_cbb =!_cbb ;_fda [_cbf ]=_edae ;_cbf ++;if _cfg > 0{_cfg --;}else {_cfg ++;};for _edae < _bcb &&_dfd [_cfg ]<=_edae {_cfg +=2;};};};if _fda [_cbf ]!=_bcb {_fda [_cbf ]=_bcb ;};if _ag ==nil {return EOL ,nil ;};return _cbf ,nil ;};func (_cbg *Decoder )detectAndSkipEOL ()error {for {_ecc ,_gbe :=_cbg ._afc .uncompressGetCode (_cbg ._df );
|
|
if _gbe !=nil {return _gbe ;};if _ecc !=nil &&_ecc ._ba ==EOL {_cbg ._afc ._fdee +=_ecc ._c ;}else {return nil ;};};};func (_baac *Decoder )UncompressMMR ()(_ec *_eb .Bitmap ,_bd error ){_ec =_eb .New (_baac ._eda ,_baac ._bf );_fc :=make ([]int ,_ec .Width +5);
|
|
_da :=make ([]int ,_ec .Width +5);_da [0]=_ec .Width ;_ac :=1;var _cbd int ;for _ea :=0;_ea < _ec .Height ;_ea ++{_cbd ,_bd =_baac .uncompress2d (_baac ._afc ,_da ,_ac ,_fc ,_ec .Width );if _bd !=nil {return nil ,_bd ;};if _cbd ==EOF {break ;};if _cbd > 0{_bd =_baac .fillBitmap (_ec ,_ea ,_fc ,_cbd );
|
|
if _bd !=nil {return nil ,_bd ;};};_da ,_fc =_fc ,_da ;_ac =_cbd ;};if _bd =_baac .detectAndSkipEOL ();_bd !=nil {return nil ,_bd ;};_baac ._afc .align ();return _ec ,nil ;};type mmrCode int ;func (_egf *runData )align (){_egf ._fdee =((_egf ._fdee +7)>>3)<<3};
|
|
func (_fbf *runData )uncompressGetCodeLittleEndian (_dff []*code )(*code ,error ){_eaa ,_afdd :=_fbf .uncompressGetNextCodeLittleEndian ();if _afdd !=nil {_fa .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",_afdd );
|
|
return nil ,_afdd ;};_eaa &=0xffffff;_gfcb :=_eaa >>(_gc -_ed );_dag :=_dff [_gfcb ];if _dag !=nil &&_dag ._cf {_gfcb =(_eaa >>(_gc -_ed -_cb ))&_cag ;_dag =_dag ._g [_gfcb ];};return _dag ,nil ;};func (_dd *code )String ()string {return _b .Sprintf ("\u0025\u0064\u002f\u0025\u0064\u002f\u0025\u0064",_dd ._c ,_dd ._ef ,_dd ._ba );
|
|
};func New (r *_e .Reader ,width ,height int ,dataOffset ,dataLength int64 )(*Decoder ,error ){_edc :=&Decoder {_eda :width ,_bf :height };_bg ,_ddd :=r .NewPartialReader (int (dataOffset ),int (dataLength ),false );if _ddd !=nil {return nil ,_ddd ;};_gba ,_ddd :=_fdd (_bg );
|
|
if _ddd !=nil {return nil ,_ddd ;};_ ,_ddd =r .Seek (_bg .RelativePosition (),_af .SeekCurrent );if _ddd !=nil {return nil ,_ddd ;};_edc ._afc =_gba ;if _ggd :=_edc .initTables ();_ggd !=nil {return nil ,_ggd ;};return _edc ,nil ;};func (_eea *Decoder )fillBitmap (_bce *_eb .Bitmap ,_de int ,_feb []int ,_gd int )error {var _bdd byte ;
|
|
_ege :=0;_ffe :=_bce .GetByteIndex (_ege ,_de );for _afcd :=0;_afcd < _gd ;_afcd ++{_gbb :=byte (1);_bde :=_feb [_afcd ];if (_afcd &1)==0{_gbb =0;};for _ege < _bde {_bdd =(_bdd <<1)|_gbb ;_ege ++;if (_ege &7)==0{if _dbb :=_bce .SetByte (_ffe ,_bdd );_dbb !=nil {return _dbb ;
|
|
};_ffe ++;_bdd =0;};};};if (_ege &7)!=0{_bdd <<=uint (8-(_ege &7));if _aca :=_bce .SetByte (_ffe ,_bdd );_aca !=nil {return _aca ;};};return nil ;};func (_bga *Decoder )createLittleEndianTable (_faeg [][3]int )([]*code ,error ){_bb :=make ([]*code ,_ade +1);
|
|
for _bc :=0;_bc < len (_faeg );_bc ++{_cef :=_d (_faeg [_bc ]);if _cef ._c <=_ed {_db :=_ed -_cef ._c ;_dab :=_cef ._ef <<uint (_db );for _ece :=(1<<uint (_db ))-1;_ece >=0;_ece --{_fcg :=_dab |_ece ;_bb [_fcg ]=_cef ;};}else {_dga :=_cef ._ef >>uint (_cef ._c -_ed );
|
|
if _bb [_dga ]==nil {var _acb =_d ([3]int {});_acb ._g =make ([]*code ,_cag +1);_bb [_dga ]=_acb ;};if _cef ._c <=_ed +_cb {_fd :=_ed +_cb -_cef ._c ;_dad :=(_cef ._ef <<uint (_fd ))&_cag ;_bb [_dga ]._cf =true ;for _gf :=(1<<uint (_fd ))-1;_gf >=0;_gf --{_bb [_dga ]._g [_dad |_gf ]=_cef ;
|
|
};}else {return nil ,_f .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 _bb ,nil ;};type runData struct{_ead *_e .Reader ;
|
|
_fdee int ;_bagg int ;_dced int ;_dbf []byte ;_ddc int ;_faca int ;};func (_eceg *runData )uncompressGetCode (_facg []*code )(*code ,error ){return _eceg .uncompressGetCodeLittleEndian (_facg );};const (_bac mmrCode =iota ;_efd ;_fb ;_cd ;_cee ;_gg ;_baa ;
|
|
_ff ;_ee ;_dg ;_fe ;);func _fae (_gb ,_gbg int )int {if _gb > _gbg {return _gbg ;};return _gb ;};const (EOF =-3;_ga =-2;EOL =-1;_ed =8;_ade =(1<<_ed )-1;_cb =5;_cag =(1<<_cb )-1;);func (_cg *Decoder )uncompress1d (_afg *runData ,_ffb []int ,_cbde int )(int ,error ){var (_ecf =true ;
|
|
_edcf int ;_fcf *code ;_gfc int ;_fef error ;);_cbc :for _edcf < _cbde {_cfc :for {if _ecf {_fcf ,_fef =_afg .uncompressGetCode (_cg ._aa );if _fef !=nil {return 0,_fef ;};}else {_fcf ,_fef =_afg .uncompressGetCode (_cg ._bag );if _fef !=nil {return 0,_fef ;
|
|
};};_afg ._fdee +=_fcf ._c ;if _fcf ._ba < 0{break _cbc ;};_edcf +=_fcf ._ba ;if _fcf ._ba < 64{_ecf =!_ecf ;_ffb [_gfc ]=_edcf ;_gfc ++;break _cfc ;};};};if _ffb [_gfc ]!=_cbde {_ffb [_gfc ]=_cbde ;};_cdd :=EOL ;if _fcf !=nil &&_fcf ._ba !=EOL {_cdd =_gfc ;
|
|
};return _cdd ,nil ;};func (_fab *Decoder )initTables ()(_be error ){if _fab ._aa ==nil {_fab ._aa ,_be =_fab .createLittleEndianTable (_eg );if _be !=nil {return ;};_fab ._bag ,_be =_fab .createLittleEndianTable (_cdf );if _be !=nil {return ;};_fab ._df ,_be =_fab .createLittleEndianTable (_afd );
|
|
if _be !=nil {return ;};};return nil ;};const (_dce int =1024<<7;_adf int =3;_gc uint =24;); |