mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-05 19:30:30 +08:00
51 lines
13 KiB
Go
51 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 (_f "errors";_g "fmt";_gd "github.com/unidoc/unipdf/v3/common";_d "github.com/unidoc/unipdf/v3/internal/bitwise";_cf "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_ce "io";);type mmrCode int ;func (_fag *Decoder )fillBitmap (_ccf *_cf .Bitmap ,_dg int ,_ab []int ,_geb int )error {var _dbd byte ;
|
|
_bff :=0;_fcb :=_ccf .GetByteIndex (_bff ,_dg );for _afg :=0;_afg < _geb ;_afg ++{_acf :=byte (1);_fga :=_ab [_afg ];if (_afg &1)==0{_acf =0;};for _bff < _fga {_dbd =(_dbd <<1)|_acf ;_bff ++;if (_bff &7)==0{if _ed :=_ccf .SetByte (_fcb ,_dbd );_ed !=nil {return _ed ;
|
|
};_fcb ++;_dbd =0;};};};if (_bff &7)!=0{_dbd <<=uint (8-(_bff &7));if _aed :=_ccf .SetByte (_fcb ,_dbd );_aed !=nil {return _aed ;};};return nil ;};func New (r _d .StreamReader ,width ,height int ,dataOffset ,dataLength int64 )(*Decoder ,error ){_fc :=&Decoder {_dcg :width ,_afd :height };
|
|
_gfg ,_cc :=_d .NewSubstreamReader (r ,uint64 (dataOffset ),uint64 (dataLength ));if _cc !=nil {return nil ,_cc ;};_bf ,_cc :=_ccb (_gfg );if _cc !=nil {return nil ,_cc ;};_fc ._gef =_bf ;if _gdd :=_fc .initTables ();_gdd !=nil {return nil ,_gdd ;};return _fc ,nil ;
|
|
};func (_fgg *runData )fillBuffer (_aea int )error {_fgg ._eda =_aea ;_ ,_bcc :=_fgg ._dac .Seek (int64 (_aea ),_ce .SeekStart );if _bcc !=nil {if _bcc ==_ce .EOF {_gd .Log .Debug ("\u0053\u0065\u0061\u006b\u0020\u0045\u004f\u0046");_fgg ._ggc =-1;}else {return _bcc ;
|
|
};};if _bcc ==nil {_fgg ._ggc ,_bcc =_fgg ._dac .Read (_fgg ._aedb );if _bcc !=nil {if _bcc ==_ce .EOF {_gd .Log .Trace ("\u0052\u0065\u0061\u0064\u0020\u0045\u004f\u0046");_fgg ._ggc =-1;}else {return _bcc ;};};};if _fgg ._ggc > -1&&_fgg ._ggc < 3{for _fgg ._ggc < 3{_fdg ,_aga :=_fgg ._dac .ReadByte ();
|
|
if _aga !=nil {if _aga ==_ce .EOF {_fgg ._aedb [_fgg ._ggc ]=0;}else {return _aga ;};}else {_fgg ._aedb [_fgg ._ggc ]=_fdg &0xFF;};_fgg ._ggc ++;};};_fgg ._ggc -=3;if _fgg ._ggc < 0{_fgg ._aedb =make ([]byte ,len (_fgg ._aedb ));_fgg ._ggc =len (_fgg ._aedb )-3;
|
|
};return nil ;};func _b (_bg [3]int )*code {return &code {_e :_bg [0],_a :_bg [1],_aa :_bg [2]}};type runData struct{_dac *_d .SubstreamReader ;_aba int ;_dcgd int ;_agf int ;_aedb []byte ;_eda int ;_ggc int ;};const (EOF =-3;_fd =-2;EOL =-1;_ef =8;_ffc =(1<<_ef )-1;
|
|
_eae =5;_gg =(1<<_eae )-1;);func (_fbf *Decoder )createLittleEndianTable (_fadg [][3]int )([]*code ,error ){_gfe :=make ([]*code ,_ffc +1);for _dcf :=0;_dcf < len (_fadg );_dcf ++{_eab :=_b (_fadg [_dcf ]);if _eab ._e <=_ef {_fg :=_ef -_eab ._e ;_gfa :=_eab ._a <<uint (_fg );
|
|
for _fde :=(1<<uint (_fg ))-1;_fde >=0;_fde --{_fdec :=_gfa |_fde ;_gfe [_fdec ]=_eab ;};}else {_adc :=_eab ._a >>uint (_eab ._e -_ef );if _gfe [_adc ]==nil {var _ec =_b ([3]int {});_ec ._fb =make ([]*code ,_gg +1);_gfe [_adc ]=_ec ;};if _eab ._e <=_ef +_eae {_afe :=_ef +_eae -_eab ._e ;
|
|
_eaga :=(_eab ._a <<uint (_afe ))&_gg ;_gfe [_adc ]._ge =true ;for _aag :=(1<<uint (_afe ))-1;_aag >=0;_aag --{_gfe [_adc ]._fb [_eaga |_aag ]=_eab ;};}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 _gfe ,nil ;};func (_eff *Decoder )initTables ()(_fce error ){if _eff ._fec ==nil {_eff ._fec ,_fce =_eff .createLittleEndianTable (_ac );if _fce !=nil {return ;};_eff ._ae ,_fce =_eff .createLittleEndianTable (_gb );if _fce !=nil {return ;
|
|
};_eff ._cg ,_fce =_eff .createLittleEndianTable (_bd );if _fce !=nil {return ;};};return nil ;};func (_eag *Decoder )UncompressMMR ()(_gag *_cf .Bitmap ,_bc error ){_gag =_cf .New (_eag ._dcg ,_eag ._afd );_cff :=make ([]int ,_gag .Width +5);_ba :=make ([]int ,_gag .Width +5);
|
|
_ba [0]=_gag .Width ;_bfc :=1;var _fff int ;for _ad :=0;_ad < _gag .Height ;_ad ++{_fff ,_bc =_eag .uncompress2d (_eag ._gef ,_ba ,_bfc ,_cff ,_gag .Width );if _bc !=nil {return nil ,_bc ;};if _fff ==EOF {break ;};if _fff > 0{_bc =_eag .fillBitmap (_gag ,_ad ,_cff ,_fff );
|
|
if _bc !=nil {return nil ,_bc ;};};_ba ,_cff =_cff ,_ba ;_bfc =_fff ;};if _bc =_eag .detectAndSkipEOL ();_bc !=nil {return nil ,_bc ;};_eag ._gef .align ();return _gag ,nil ;};func (_cgd *runData )uncompressGetCode (_cbc []*code )(*code ,error ){return _cgd .uncompressGetCodeLittleEndian (_cbc );
|
|
};func (_efe *runData )align (){_efe ._aba =((_efe ._aba +7)>>3)<<3};func (_fac *Decoder )uncompress2d (_eaeg *runData ,_adb []int ,_ged int ,_gaec []int ,_ffca int )(int ,error ){var (_aedf int ;_agd int ;_ced int ;_gfae =true ;_gea error ;_dae *code ;
|
|
);_adb [_ged ]=_ffca ;_adb [_ged +1]=_ffca ;_adb [_ged +2]=_ffca +1;_adb [_ged +3]=_ffca +1;_adda :for _ced < _ffca {_dae ,_gea =_eaeg .uncompressGetCode (_fac ._cg );if _gea !=nil {return EOL ,nil ;};if _dae ==nil {_eaeg ._aba ++;break _adda ;};_eaeg ._aba +=_dae ._e ;
|
|
switch mmrCode (_dae ._aa ){case _ff :_ced =_adb [_aedf ];case _fad :_ced =_adb [_aedf ]+1;case _eg :_ced =_adb [_aedf ]-1;case _ag :for {var _fef []*code ;if _gfae {_fef =_fac ._fec ;}else {_fef =_fac ._ae ;};_dae ,_gea =_eaeg .uncompressGetCode (_fef );
|
|
if _gea !=nil {return 0,_gea ;};if _dae ==nil {break _adda ;};_eaeg ._aba +=_dae ._e ;if _dae ._aa < 64{if _dae ._aa < 0{_gaec [_agd ]=_ced ;_agd ++;_dae =nil ;break _adda ;};_ced +=_dae ._aa ;_gaec [_agd ]=_ced ;_agd ++;break ;};_ced +=_dae ._aa ;};_cdg :=_ced ;
|
|
_agdg :for {var _bgea []*code ;if !_gfae {_bgea =_fac ._fec ;}else {_bgea =_fac ._ae ;};_dae ,_gea =_eaeg .uncompressGetCode (_bgea );if _gea !=nil {return 0,_gea ;};if _dae ==nil {break _adda ;};_eaeg ._aba +=_dae ._e ;if _dae ._aa < 64{if _dae ._aa < 0{_gaec [_agd ]=_ced ;
|
|
_agd ++;break _adda ;};_ced +=_dae ._aa ;if _ced < _ffca ||_ced !=_cdg {_gaec [_agd ]=_ced ;_agd ++;};break _agdg ;};_ced +=_dae ._aa ;};for _ced < _ffca &&_adb [_aedf ]<=_ced {_aedf +=2;};continue _adda ;case _fe :_aedf ++;_ced =_adb [_aedf ];_aedf ++;
|
|
continue _adda ;case _ea :_ced =_adb [_aedf ]+2;case _dbb :_ced =_adb [_aedf ]-2;case _aad :_ced =_adb [_aedf ]+3;case _afc :_ced =_adb [_aedf ]-3;default:if _eaeg ._aba ==12&&_dae ._aa ==EOL {_eaeg ._aba =0;if _ ,_gea =_fac .uncompress1d (_eaeg ,_adb ,_ffca );
|
|
_gea !=nil {return 0,_gea ;};_eaeg ._aba ++;if _ ,_gea =_fac .uncompress1d (_eaeg ,_gaec ,_ffca );_gea !=nil {return 0,_gea ;};_dbf ,_afec :=_fac .uncompress1d (_eaeg ,_adb ,_ffca );if _afec !=nil {return EOF ,_afec ;};_eaeg ._aba ++;return _dbf ,nil ;
|
|
};_ced =_ffca ;continue _adda ;};if _ced <=_ffca {_gfae =!_gfae ;_gaec [_agd ]=_ced ;_agd ++;if _aedf > 0{_aedf --;}else {_aedf ++;};for _ced < _ffca &&_adb [_aedf ]<=_ced {_aedf +=2;};};};if _gaec [_agd ]!=_ffca {_gaec [_agd ]=_ffca ;};if _dae ==nil {return EOL ,nil ;
|
|
};return _agd ,nil ;};func (_agg *runData )uncompressGetNextCodeLittleEndian ()(int ,error ){_dgb :=_agg ._aba -_agg ._dcgd ;if _dgb < 0||_dgb > 24{_dd :=(_agg ._aba >>3)-_agg ._eda ;if _dd >=_agg ._ggc {_dd +=_agg ._eda ;if _dgf :=_agg .fillBuffer (_dd );
|
|
_dgf !=nil {return 0,_dgf ;};_dd -=_agg ._eda ;};_gbf :=(uint32 (_agg ._aedb [_dd ]&0xFF)<<16)|(uint32 (_agg ._aedb [_dd +1]&0xFF)<<8)|(uint32 (_agg ._aedb [_dd +2]&0xFF));_ebc :=uint32 (_agg ._aba &7);_gbf <<=_ebc ;_agg ._agf =int (_gbf );}else {_edb :=_agg ._dcgd &7;
|
|
_ddb :=7-_edb ;if _dgb <=_ddb {_agg ._agf <<=uint (_dgb );}else {_ece :=(_agg ._dcgd >>3)+3-_agg ._eda ;if _ece >=_agg ._ggc {_ece +=_agg ._eda ;if _ebe :=_agg .fillBuffer (_ece );_ebe !=nil {return 0,_ebe ;};_ece -=_agg ._eda ;};_edb =8-_edb ;for {_agg ._agf <<=uint (_edb );
|
|
_agg ._agf |=int (uint (_agg ._aedb [_ece ])&0xFF);_dgb -=_edb ;_ece ++;_edb =8;if !(_dgb >=8){break ;};};_agg ._agf <<=uint (_dgb );};};_agg ._dcgd =_agg ._aba ;return _agg ._agf ,nil ;};func _af (_db ,_dc int )int {if _db < _dc {return _dc ;};return _db ;
|
|
};const (_fe mmrCode =iota ;_ag ;_ff ;_fad ;_ea ;_aad ;_eg ;_dbb ;_afc ;_ga ;_fae ;);func _bge (_gf ,_fa int )int {if _gf > _fa {return _fa ;};return _gf ;};type code struct{_e int ;_a int ;_aa int ;_fb []*code ;_ge bool ;};func (_feg *runData )uncompressGetCodeLittleEndian (_fbb []*code )(*code ,error ){_gdf ,_bfa :=_feg .uncompressGetNextCodeLittleEndian ();
|
|
if _bfa !=nil {_gd .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",_bfa );
|
|
return nil ,_bfa ;};_gdf &=0xffffff;_fee :=_gdf >>(_cfe -_ef );_gfag :=_fbb [_fee ];if _gfag !=nil &&_gfag ._ge {_fee =(_gdf >>(_cfe -_ef -_eae ))&_gg ;_gfag =_gfag ._fb [_fee ];};return _gfag ,nil ;};func (_eb *code )String ()string {return _g .Sprintf ("\u0025\u0064\u002f\u0025\u0064\u002f\u0025\u0064",_eb ._e ,_eb ._a ,_eb ._aa );
|
|
};var (_bd =[][3]int {{4,0x1,int (_fe )},{3,0x1,int (_ag )},{1,0x1,int (_ff )},{3,0x3,int (_fad )},{6,0x3,int (_ea )},{7,0x3,int (_aad )},{3,0x2,int (_eg )},{6,0x2,int (_dbb )},{7,0x2,int (_afc )},{10,0xf,int (_ga )},{12,0xf,int (_fae )},{12,0x1,int (EOL )}};
|
|
_ac =[][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,_fd },{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,_fd },{11,0x01,_fd },{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}};
|
|
_gb =[][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,_fd },{9,0x18,15},{10,0x01,_fd },{10,0x17,16},{10,0x18,17},{10,0x37,0},{10,0x08,18},{10,0x0F,64},{11,0x01,_fd },{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}};
|
|
);const (_gbe int =1024<<7;_adgc int =3;_cfe uint =24;);func (_abb *Decoder )uncompress1d (_ee *runData ,_gae []int ,_fda int )(int ,error ){var (_cd =true ;_adg int ;_dcc *code ;_add int ;_cb error ;);_acg :for _adg < _fda {_abd :for {if _cd {_dcc ,_cb =_ee .uncompressGetCode (_abb ._fec );
|
|
if _cb !=nil {return 0,_cb ;};}else {_dcc ,_cb =_ee .uncompressGetCode (_abb ._ae );if _cb !=nil {return 0,_cb ;};};_ee ._aba +=_dcc ._e ;if _dcc ._aa < 0{break _acg ;};_adg +=_dcc ._aa ;if _dcc ._aa < 64{_cd =!_cd ;_gae [_add ]=_adg ;_add ++;break _abd ;
|
|
};};};if _gae [_add ]!=_fda {_gae [_add ]=_fda ;};_bcb :=EOL ;if _dcc !=nil &&_dcc ._aa !=EOL {_bcb =_add ;};return _bcb ,nil ;};type Decoder struct{_dcg ,_afd int ;_gef *runData ;_fec []*code ;_ae []*code ;_cg []*code ;};func _ccb (_fgf *_d .SubstreamReader )(*runData ,error ){_be :=&runData {_dac :_fgf ,_aba :0,_dcgd :1};
|
|
_gdc :=_bge (_af (_adgc ,int (_fgf .Length ())),_gbe );_be ._aedb =make ([]byte ,_gdc );if _efg :=_be .fillBuffer (0);_efg !=nil {if _efg ==_ce .EOF {_be ._aedb =make ([]byte ,10);_gd .Log .Debug ("F\u0069\u006c\u006c\u0042uf\u0066e\u0072\u0020\u0066\u0061\u0069l\u0065\u0064\u003a\u0020\u0025\u0076",_efg );
|
|
}else {return nil ,_efg ;};};return _be ,nil ;};func (_fbd *Decoder )detectAndSkipEOL ()error {for {_da ,_aadc :=_fbd ._gef .uncompressGetCode (_fbd ._cg );if _aadc !=nil {return _aadc ;};if _da !=nil &&_da ._aa ==EOL {_fbd ._gef ._aba +=_da ._e ;}else {return nil ;
|
|
};};}; |