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 (_d "errors";_f "fmt";_g "github.com/unidoc/unipdf/v3/common";_ed "github.com/unidoc/unipdf/v3/internal/bitwise";_ec "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_b "io";);func _a (_ba ,_ge int )int {if _ba < _ge {return _ge ;
|
|
};return _ba ;};const (EOF =-3;_de =-2;EOL =-1;_dgda =8;_ca =(1<<_dgda )-1;_edf =5;_cda =(1<<_edf )-1;);const (_bab mmrCode =iota ;_db ;_bb ;_dgd ;_gb ;_dad ;_gd ;_ee ;_bf ;_gg ;_cd ;);func _dd (_aa ,_dag int )int {if _aa > _dag {return _dag ;};return _aa ;
|
|
};type Decoder struct{_ea ,_cf int ;_ad *runData ;_bbe []*code ;_fde []*code ;_gc []*code ;};func (_ffa *runData )uncompressGetNextCodeLittleEndian ()(int ,error ){_dbf :=_ffa ._fda -_ffa ._aba ;if _dbf < 0||_dbf > 24{_dcge :=(_ffa ._fda >>3)-_ffa ._ddf ;
|
|
if _dcge >=_ffa ._dgg {_dcge +=_ffa ._ddf ;if _df :=_ffa .fillBuffer (_dcge );_df !=nil {return 0,_df ;};_dcge -=_ffa ._ddf ;};_aeb :=(uint32 (_ffa ._cbe [_dcge ]&0xFF)<<16)|(uint32 (_ffa ._cbe [_dcge +1]&0xFF)<<8)|(uint32 (_ffa ._cbe [_dcge +2]&0xFF));
|
|
_dfa :=uint32 (_ffa ._fda &7);_aeb <<=_dfa ;_ffa ._bag =int (_aeb );}else {_efb :=_ffa ._aba &7;_geb :=7-_efb ;if _dbf <=_geb {_ffa ._bag <<=uint (_dbf );}else {_cdba :=(_ffa ._aba >>3)+3-_ffa ._ddf ;if _cdba >=_ffa ._dgg {_cdba +=_ffa ._ddf ;if _becd :=_ffa .fillBuffer (_cdba );
|
|
_becd !=nil {return 0,_becd ;};_cdba -=_ffa ._ddf ;};_efb =8-_efb ;for {_ffa ._bag <<=uint (_efb );_ffa ._bag |=int (uint (_ffa ._cbe [_cdba ])&0xFF);_dbf -=_efb ;_cdba ++;_efb =8;if !(_dbf >=8){break ;};};_ffa ._bag <<=uint (_dbf );};};_ffa ._aba =_ffa ._fda ;
|
|
return _ffa ._bag ,nil ;};func (_ecd *Decoder )uncompress2d (_bce *runData ,_aee []int ,_cad int ,_cdce []int ,_gfad int )(int ,error ){var (_cb int ;_dgdc int ;_aga int ;_eef =true ;_agb error ;_cdcf *code ;);_aee [_cad ]=_gfad ;_aee [_cad +1]=_gfad ;
|
|
_aee [_cad +2]=_gfad +1;_aee [_cad +3]=_gfad +1;_cc :for _aga < _gfad {_cdcf ,_agb =_bce .uncompressGetCode (_ecd ._gc );if _agb !=nil {return EOL ,nil ;};if _cdcf ==nil {_bce ._fda ++;break _cc ;};_bce ._fda +=_cdcf ._eb ;switch mmrCode (_cdcf ._fd ){case _bb :_aga =_aee [_cb ];
|
|
case _dgd :_aga =_aee [_cb ]+1;case _gd :_aga =_aee [_cb ]-1;case _db :for {var _aaf []*code ;if _eef {_aaf =_ecd ._bbe ;}else {_aaf =_ecd ._fde ;};_cdcf ,_agb =_bce .uncompressGetCode (_aaf );if _agb !=nil {return 0,_agb ;};if _cdcf ==nil {break _cc ;
|
|
};_bce ._fda +=_cdcf ._eb ;if _cdcf ._fd < 64{if _cdcf ._fd < 0{_cdce [_dgdc ]=_aga ;_dgdc ++;_cdcf =nil ;break _cc ;};_aga +=_cdcf ._fd ;_cdce [_dgdc ]=_aga ;_dgdc ++;break ;};_aga +=_cdcf ._fd ;};_fbab :=_aga ;_ef :for {var _eae []*code ;if !_eef {_eae =_ecd ._bbe ;
|
|
}else {_eae =_ecd ._fde ;};_cdcf ,_agb =_bce .uncompressGetCode (_eae );if _agb !=nil {return 0,_agb ;};if _cdcf ==nil {break _cc ;};_bce ._fda +=_cdcf ._eb ;if _cdcf ._fd < 64{if _cdcf ._fd < 0{_cdce [_dgdc ]=_aga ;_dgdc ++;break _cc ;};_aga +=_cdcf ._fd ;
|
|
if _aga < _gfad ||_aga !=_fbab {_cdce [_dgdc ]=_aga ;_dgdc ++;};break _ef ;};_aga +=_cdcf ._fd ;};for _aga < _gfad &&_aee [_cb ]<=_aga {_cb +=2;};continue _cc ;case _bab :_cb ++;_aga =_aee [_cb ];_cb ++;continue _cc ;case _gb :_aga =_aee [_cb ]+2;case _ee :_aga =_aee [_cb ]-2;
|
|
case _dad :_aga =_aee [_cb ]+3;case _bf :_aga =_aee [_cb ]-3;default:if _bce ._fda ==12&&_cdcf ._fd ==EOL {_bce ._fda =0;if _ ,_agb =_ecd .uncompress1d (_bce ,_aee ,_gfad );_agb !=nil {return 0,_agb ;};_bce ._fda ++;if _ ,_agb =_ecd .uncompress1d (_bce ,_cdce ,_gfad );
|
|
_agb !=nil {return 0,_agb ;};_ceg ,_dadg :=_ecd .uncompress1d (_bce ,_aee ,_gfad );if _dadg !=nil {return EOF ,_dadg ;};_bce ._fda ++;return _ceg ,nil ;};_aga =_gfad ;continue _cc ;};if _aga <=_gfad {_eef =!_eef ;_cdce [_dgdc ]=_aga ;_dgdc ++;if _cb > 0{_cb --;
|
|
}else {_cb ++;};for _aga < _gfad &&_aee [_cb ]<=_aga {_cb +=2;};};};if _cdce [_dgdc ]!=_gfad {_cdce [_dgdc ]=_gfad ;};if _cdcf ==nil {return EOL ,nil ;};return _dgdc ,nil ;};func (_eeg *Decoder )detectAndSkipEOL ()error {for {_gba ,_egd :=_eeg ._ad .uncompressGetCode (_eeg ._gc );
|
|
if _egd !=nil {return _egd ;};if _gba !=nil &&_gba ._fd ==EOL {_eeg ._ad ._fda +=_gba ._eb ;}else {return nil ;};};};type runData struct{_ggd *_ed .SubstreamReader ;_fda int ;_aba int ;_bag int ;_cbe []byte ;_ddf int ;_dgg int ;};func (_degb *runData )uncompressGetCode (_add []*code )(*code ,error ){return _degb .uncompressGetCodeLittleEndian (_add );
|
|
};type mmrCode int ;func (_fcb *Decoder )UncompressMMR ()(_ebg *_ec .Bitmap ,_fcd error ){_ebg =_ec .New (_fcb ._ea ,_fcb ._cf );_fb :=make ([]int ,_ebg .Width +5);_bae :=make ([]int ,_ebg .Width +5);_bae [0]=_ebg .Width ;_cdc :=1;var _dca int ;for _ebgb :=0;
|
|
_ebgb < _ebg .Height ;_ebgb ++{_dca ,_fcd =_fcb .uncompress2d (_fcb ._ad ,_bae ,_cdc ,_fb ,_ebg .Width );if _fcd !=nil {return nil ,_fcd ;};if _dca ==EOF {break ;};if _dca > 0{_fcd =_fcb .fillBitmap (_ebg ,_ebgb ,_fb ,_dca );if _fcd !=nil {return nil ,_fcd ;
|
|
};};_bae ,_fb =_fb ,_bae ;_cdc =_dca ;};if _fcd =_fcb .detectAndSkipEOL ();_fcd !=nil {return nil ,_fcd ;};_fcb ._ad .align ();return _ebg ,nil ;};func _c (_ece [3]int )*code {return &code {_eb :_ece [0],_dg :_ece [1],_fd :_ece [2]}};func (_deg *runData )align (){_deg ._fda =((_deg ._fda +7)>>3)<<3};
|
|
var (_bg =[][3]int {{4,0x1,int (_bab )},{3,0x1,int (_db )},{1,0x1,int (_bb )},{3,0x3,int (_dgd )},{6,0x3,int (_gb )},{7,0x3,int (_dad )},{3,0x2,int (_gd )},{6,0x2,int (_ee )},{7,0x2,int (_bf )},{10,0xf,int (_gg )},{12,0xf,int (_cd )},{12,0x1,int (EOL )}};
|
|
_fc =[][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,_de },{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,_de },{11,0x01,_de },{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}};
|
|
_gbe =[][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,_de },{9,0x18,15},{10,0x01,_de },{10,0x17,16},{10,0x18,17},{10,0x37,0},{10,0x08,18},{10,0x0F,64},{11,0x01,_de },{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 _efd (_dee *_ed .SubstreamReader )(*runData ,error ){_cac :=&runData {_ggd :_dee ,_fda :0,_aba :1};_ded :=_dd (_a (_dbea ,int (_dee .Length ())),_cfd );_cac ._cbe =make ([]byte ,_ded );if _gce :=_cac .fillBuffer (0);_gce !=nil {if _gce ==_b .EOF {_cac ._cbe =make ([]byte ,10);
|
|
_g .Log .Debug ("F\u0069\u006c\u006c\u0042uf\u0066e\u0072\u0020\u0066\u0061\u0069l\u0065\u0064\u003a\u0020\u0025\u0076",_gce );}else {return nil ,_gce ;};};return _cac ,nil ;};func (_dedc *runData )uncompressGetCodeLittleEndian (_ebb []*code )(*code ,error ){_fdeg ,_edg :=_dedc .uncompressGetNextCodeLittleEndian ();
|
|
if _edg !=nil {_g .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",_edg );
|
|
return nil ,_edg ;};_fdeg &=0xffffff;_eaea :=_fdeg >>(_fbe -_dgda );_eab :=_ebb [_eaea ];if _eab !=nil &&_eab ._dc {_eaea =(_fdeg >>(_fbe -_dgda -_edf ))&_cda ;_eab =_eab ._da [_eaea ];};return _eab ,nil ;};func (_ebd *code )String ()string {return _f .Sprintf ("\u0025\u0064\u002f\u0025\u0064\u002f\u0025\u0064",_ebd ._eb ,_ebd ._dg ,_ebd ._fd );
|
|
};func (_dge *Decoder )uncompress1d (_cab *runData ,_bec []int ,_cg int )(int ,error ){var (_gfa =true ;_gfb int ;_fdc *code ;_abe int ;_ae error ;);_ebgbg :for _gfb < _cg {_eegg :for {if _gfa {_fdc ,_ae =_cab .uncompressGetCode (_dge ._bbe );if _ae !=nil {return 0,_ae ;
|
|
};}else {_fdc ,_ae =_cab .uncompressGetCode (_dge ._fde );if _ae !=nil {return 0,_ae ;};};_cab ._fda +=_fdc ._eb ;if _fdc ._fd < 0{break _ebgbg ;};_gfb +=_fdc ._fd ;if _fdc ._fd < 64{_gfa =!_gfa ;_bec [_abe ]=_gfb ;_abe ++;break _eegg ;};};};if _bec [_abe ]!=_cg {_bec [_abe ]=_cg ;
|
|
};_ff :=EOL ;if _fdc !=nil &&_fdc ._fd !=EOL {_ff =_abe ;};return _ff ,nil ;};type code struct{_eb int ;_dg int ;_fd int ;_da []*code ;_dc bool ;};func (_cdb *Decoder )createLittleEndianTable (_aag [][3]int )([]*code ,error ){_dcf :=make ([]*code ,_ca +1);
|
|
for _gga :=0;_gga < len (_aag );_gga ++{_fg :=_c (_aag [_gga ]);if _fg ._eb <=_dgda {_gf :=_dgda -_fg ._eb ;_eg :=_fg ._dg <<uint (_gf );for _dab :=(1<<uint (_gf ))-1;_dab >=0;_dab --{_ab :=_eg |_dab ;_dcf [_ab ]=_fg ;};}else {_cdg :=_fg ._dg >>uint (_fg ._eb -_dgda );
|
|
if _dcf [_cdg ]==nil {var _ebc =_c ([3]int {});_ebc ._da =make ([]*code ,_cda +1);_dcf [_cdg ]=_ebc ;};if _fg ._eb <=_dgda +_edf {_ebcd :=_dgda +_edf -_fg ._eb ;_gge :=(_fg ._dg <<uint (_ebcd ))&_cda ;_dcf [_cdg ]._dc =true ;for _egc :=(1<<uint (_ebcd ))-1;
|
|
_egc >=0;_egc --{_dcf [_cdg ]._da [_gge |_egc ]=_fg ;};}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 _dcf ,nil ;};const (_cfd int =1024<<7;_dbea int =3;_fbe uint =24;);func (_dcc *runData )fillBuffer (_dfe int )error {_dcc ._ddf =_dfe ;_ ,_bgf :=_dcc ._ggd .Seek (int64 (_dfe ),_b .SeekStart );if _bgf !=nil {if _bgf ==_b .EOF {_g .Log .Debug ("\u0053\u0065\u0061\u006b\u0020\u0045\u004f\u0046");
|
|
_dcc ._dgg =-1;}else {return _bgf ;};};if _bgf ==nil {_dcc ._dgg ,_bgf =_dcc ._ggd .Read (_dcc ._cbe );if _bgf !=nil {if _bgf ==_b .EOF {_g .Log .Trace ("\u0052\u0065\u0061\u0064\u0020\u0045\u004f\u0046");_dcc ._dgg =-1;}else {return _bgf ;};};};if _dcc ._dgg > -1&&_dcc ._dgg < 3{for _dcc ._dgg < 3{_cbf ,_dega :=_dcc ._ggd .ReadByte ();
|
|
if _dega !=nil {if _dega ==_b .EOF {_dcc ._cbe [_dcc ._dgg ]=0;}else {return _dega ;};}else {_dcc ._cbe [_dcc ._dgg ]=_cbf &0xFF;};_dcc ._dgg ++;};};_dcc ._dgg -=3;if _dcc ._dgg < 0{_dcc ._cbe =make ([]byte ,len (_dcc ._cbe ));_dcc ._dgg =len (_dcc ._cbe )-3;
|
|
};return nil ;};func (_fba *Decoder )fillBitmap (_geg *_ec .Bitmap ,_dbe int ,_aaa []int ,_dabb int )error {var _gdf byte ;_dcg :=0;_bba :=_geg .GetByteIndex (_dcg ,_dbe );for _bd :=0;_bd < _dabb ;_bd ++{_ddd :=byte (1);_bc :=_aaa [_bd ];if (_bd &1)==0{_ddd =0;
|
|
};for _dcg < _bc {_gdf =(_gdf <<1)|_ddd ;_dcg ++;if (_dcg &7)==0{if _ac :=_geg .SetByte (_bba ,_gdf );_ac !=nil {return _ac ;};_bba ++;_gdf =0;};};};if (_dcg &7)!=0{_gdf <<=uint (8-(_dcg &7));if _cfe :=_geg .SetByte (_bba ,_gdf );_cfe !=nil {return _cfe ;
|
|
};};return nil ;};func New (r _ed .StreamReader ,width ,height int ,dataOffset ,dataLength int64 )(*Decoder ,error ){_bfe :=&Decoder {_ea :width ,_cf :height };_be ,_fded :=_ed .NewSubstreamReader (r ,uint64 (dataOffset ),uint64 (dataLength ));if _fded !=nil {return nil ,_fded ;
|
|
};_edc ,_fded :=_efd (_be );if _fded !=nil {return nil ,_fded ;};_bfe ._ad =_edc ;if _gde :=_bfe .initTables ();_gde !=nil {return nil ,_gde ;};return _bfe ,nil ;};func (_ag *Decoder )initTables ()(_ce error ){if _ag ._bbe ==nil {_ag ._bbe ,_ce =_ag .createLittleEndianTable (_fc );
|
|
if _ce !=nil {return ;};_ag ._fde ,_ce =_ag .createLittleEndianTable (_gbe );if _ce !=nil {return ;};_ag ._gc ,_ce =_ag .createLittleEndianTable (_bg );if _ce !=nil {return ;};};return nil ;}; |