mirror of
https://github.com/unidoc/unipdf.git
synced 2025-04-27 13:48:51 +08:00
12 lines
13 KiB
Go
12 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 (_e "errors";_g "fmt";_ac "github.com/unidoc/unipdf/v3/common";_aa "github.com/unidoc/unipdf/v3/internal/bitwise";_b "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_d "io";);type runData struct{_dea *_aa .SubstreamReader ;_bgb int ;_acf int ;_ccd int ;_adb []byte ;_gabf int ;_eee int ;};const (EOF =-3;_ba =-2;EOL =-1;_ec =8;_cf =(1<<_ec )-1;_fe =5;_ca =(1<<_fe )-1;);func (_ggda *runData )uncompressGetCode (_cbb []*code )(*code ,error ){return _ggda .uncompressGetCodeLittleEndian (_cbb );};func (_gce *Decoder )detectAndSkipEOL ()error {for {_eaa ,_gbf :=_gce ._bg .uncompressGetCode (_gce ._cfe );if _gbf !=nil {return _gbf ;};if _eaa !=nil &&_eaa ._c ==EOL {_gce ._bg ._bgb +=_eaa ._aca ;}else {return nil ;};};};func (_bdd *Decoder )initTables ()(_gbb error ){if _bdd ._ad ==nil {_bdd ._ad ,_gbb =_bdd .createLittleEndianTable (_de );if _gbb !=nil {return ;};_bdd ._dbe ,_gbb =_bdd .createLittleEndianTable (_fga );if _gbb !=nil {return ;};_bdd ._cfe ,_gbb =_bdd .createLittleEndianTable (_dca );if _gbb !=nil {return ;};};return nil ;};type code struct{_aca int ;_f int ;_c int ;_ff []*code ;_dc bool ;};const (_cbg int =1024<<7;_gea int =3;_cec uint =24;);type Decoder struct{_acc ,_aed int ;_bg *runData ;_ad []*code ;_dbe []*code ;_cfe []*code ;};func (_gcb *runData )align (){_gcb ._bgb =((_gcb ._bgb +7)>>3)<<3};func (_edb *Decoder )createLittleEndianTable (_cg [][3]int )([]*code ,error ){_egb :=make ([]*code ,_cf +1);for _gc :=0;_gc < len (_cg );_gc ++{_eda :=_eg (_cg [_gc ]);if _eda ._aca <=_ec {_cd :=_ec -_eda ._aca ;_dd :=_eda ._f <<uint (_cd );for _bf :=(1<<uint (_cd ))-1;_bf >=0;_bf --{_cbf :=_dd |_bf ;_egb [_cbf ]=_eda ;};}else {_cfg :=_eda ._f >>uint (_eda ._aca -_ec );if _egb [_cfg ]==nil {var _ceg =_eg ([3]int {});_ceg ._ff =make ([]*code ,_ca +1);_egb [_cfg ]=_ceg ;};if _eda ._aca <=_ec +_fe {_cc :=_ec +_fe -_eda ._aca ;_beb :=(_eda ._f <<uint (_cc ))&_ca ;_egb [_cfg ]._dc =true ;for _dae :=(1<<uint (_cc ))-1;_dae >=0;_dae --{_egb [_cfg ]._ff [_beb |_dae ]=_eda ;};}else {return nil ,_e .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 _egb ,nil ;};const (_bd mmrCode =iota ;_gb ;_ef ;_df ;_edd ;_fcc ;_ab ;_db ;_fg ;_eeb ;_ae ;);func _eg (_fff [3]int )*code {return &code {_aca :_fff [0],_f :_fff [1],_c :_fff [2]}};func New (r _aa .StreamReader ,width ,height int ,dataOffset ,dataLength int64 )(*Decoder ,error ){_bb :=&Decoder {_acc :width ,_aed :height };_ea ,_ffa :=_aa .NewSubstreamReader (r ,uint64 (dataOffset ),uint64 (dataLength ));if _ffa !=nil {return nil ,_ffa ;};_dfd ,_ffa :=_gbc (_ea );if _ffa !=nil {return nil ,_ffa ;};_bb ._bg =_dfd ;if _afa :=_bb .initTables ();_afa !=nil {return nil ,_afa ;};return _bb ,nil ;};type mmrCode int ;func (_ded *Decoder )UncompressMMR ()(_be *_b .Bitmap ,_ace error ){_be =_b .New (_ded ._acc ,_ded ._aed );_ead :=make ([]int ,_be .Width +5);_fa :=make ([]int ,_be .Width +5);_fa [0]=_be .Width ;_ga :=1;var _fd int ;for _gg :=0;_gg < _be .Height ;_gg ++{_fd ,_ace =_ded .uncompress2d (_ded ._bg ,_fa ,_ga ,_ead ,_be .Width );if _ace !=nil {return nil ,_ace ;};if _fd ==EOF {break ;};if _fd > 0{_ace =_ded .fillBitmap (_be ,_gg ,_ead ,_fd );if _ace !=nil {return nil ,_ace ;};};_fa ,_ead =_ead ,_fa ;_ga =_fd ;};if _ace =_ded .detectAndSkipEOL ();_ace !=nil {return nil ,_ace ;};_ded ._bg .align ();return _be ,nil ;};func (_fce *runData )uncompressGetCodeLittleEndian (_caee []*code )(*code ,error ){_acac ,_ddbb :=_fce .uncompressGetNextCodeLittleEndian ();if _ddbb !=nil {_ac .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",_ddbb );return nil ,_ddbb ;};_acac &=0xffffff;_ddf :=_acac >>(_cec -_ec );_aefg :=_caee [_ddf ];if _aefg !=nil &&_aefg ._dc {_ddf =(_acac >>(_cec -_ec -_fe ))&_ca ;_aefg =_aefg ._ff [_ddf ];};return _aefg ,nil ;};var (_dca =[][3]int {{4,0x1,int (_bd )},{3,0x1,int (_gb )},{1,0x1,int (_ef )},{3,0x3,int (_df )},{6,0x3,int (_edd )},{7,0x3,int (_fcc )},{3,0x2,int (_ab )},{6,0x2,int (_db )},{7,0x2,int (_fg )},{10,0xf,int (_eeb )},{12,0xf,int (_ae )},{12,0x1,int (EOL )}};_de =[][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,_ba },{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,_ba },{11,0x01,_ba },{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}};_fga =[][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,_ba },{9,0x18,15},{10,0x01,_ba },{10,0x17,16},{10,0x18,17},{10,0x37,0},{10,0x08,18},{10,0x0F,64},{11,0x01,_ba },{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 (_gdc *Decoder )uncompress2d (_gab *runData ,_dff []int ,_accg int ,_afad []int ,_fed int )(int ,error ){var (_gfb int ;_cef int ;_gee int ;_gcc =true ;_afaf error ;_aec *code ;);_dff [_accg ]=_fed ;_dff [_accg +1]=_fed ;_dff [_accg +2]=_fed +1;_dff [_accg +3]=_fed +1;_afc :for _gee < _fed {_aec ,_afaf =_gab .uncompressGetCode (_gdc ._cfe );if _afaf !=nil {return EOL ,nil ;};if _aec ==nil {_gab ._bgb ++;break _afc ;};_gab ._bgb +=_aec ._aca ;switch mmrCode (_aec ._c ){case _ef :_gee =_dff [_gfb ];case _df :_gee =_dff [_gfb ]+1;case _ab :_gee =_dff [_gfb ]-1;case _gb :_gbd :=1;for _gbd > 0{var _caa []*code ;if _gcc {_caa =_gdc ._ad ;}else {_caa =_gdc ._dbe ;};_aec ,_afaf =_gab .uncompressGetCode (_caa );if _afaf !=nil {return 0,_afaf ;};if _aec ==nil {break _afc ;};_gab ._bgb +=_aec ._aca ;if _aec ._c < 64{if _aec ._c < 0{_afad [_cef ]=_gee ;_cef ++;_aec =nil ;break _afc ;};_gee +=_aec ._c ;_afad [_cef ]=_gee ;_cef ++;break ;};_gee +=_aec ._c ;};_adg :=_gee ;_cdg :=1;_ffd :for _cdg > 0{var _dbf []*code ;if !_gcc {_dbf =_gdc ._ad ;}else {_dbf =_gdc ._dbe ;};_aec ,_afaf =_gab .uncompressGetCode (_dbf );if _afaf !=nil {return 0,_afaf ;};if _aec ==nil {break _afc ;};_gab ._bgb +=_aec ._aca ;if _aec ._c < 64{if _aec ._c < 0{_afad [_cef ]=_gee ;_cef ++;break _afc ;};_gee +=_aec ._c ;if _gee < _fed ||_gee !=_adg {_afad [_cef ]=_gee ;_cef ++;};break _ffd ;};_gee +=_aec ._c ;};for _gee < _fed &&_dff [_gfb ]<=_gee {_gfb +=2;};continue _afc ;case _bd :_gfb ++;_gee =_dff [_gfb ];_gfb ++;continue _afc ;case _edd :_gee =_dff [_gfb ]+2;case _db :_gee =_dff [_gfb ]-2;case _fcc :_gee =_dff [_gfb ]+3;case _fg :_gee =_dff [_gfb ]-3;default:if _gab ._bgb ==12&&_aec ._c ==EOL {_gab ._bgb =0;if _ ,_afaf =_gdc .uncompress1d (_gab ,_dff ,_fed );_afaf !=nil {return 0,_afaf ;};_gab ._bgb ++;if _ ,_afaf =_gdc .uncompress1d (_gab ,_afad ,_fed );_afaf !=nil {return 0,_afaf ;};_gcg ,_dcg :=_gdc .uncompress1d (_gab ,_dff ,_fed );if _dcg !=nil {return EOF ,_dcg ;};_gab ._bgb ++;return _gcg ,nil ;};_gee =_fed ;continue _afc ;};if _gee <=_fed {_gcc =!_gcc ;_afad [_cef ]=_gee ;_cef ++;if _gfb > 0{_gfb --;}else {_gfb ++;};for _gee < _fed &&_dff [_gfb ]<=_gee {_gfb +=2;};};};if _afad [_cef ]!=_fed {_afad [_cef ]=_fed ;};if _aec ==nil {return EOL ,nil ;};return _cef ,nil ;};func (_eae *Decoder )uncompress1d (_cbe *runData ,_ddd []int ,_aef int )(int ,error ){var (_ge =true ;_fab int ;_dgf *code ;_eag int ;_gf error ;);_fb :for _fab < _aef {_gad :for {if _ge {_dgf ,_gf =_cbe .uncompressGetCode (_eae ._ad );if _gf !=nil {return 0,_gf ;};}else {_dgf ,_gf =_cbe .uncompressGetCode (_eae ._dbe );if _gf !=nil {return 0,_gf ;};};_cbe ._bgb +=_dgf ._aca ;if _dgf ._c < 0{break _fb ;};_fab +=_dgf ._c ;if _dgf ._c < 64{_ge =!_ge ;_ddd [_eag ]=_fab ;_eag ++;break _gad ;};};};if _ddd [_eag ]!=_aef {_ddd [_eag ]=_aef ;};_edc :=EOL ;if _dgf !=nil &&_dgf ._c !=EOL {_edc =_eag ;};return _edc ,nil ;};func _af (_ee ,_cb int )int {if _ee < _cb {return _cb ;};return _ee ;};func (_fc *code )String ()string {return _g .Sprintf ("\u0025\u0064\u002f\u0025\u0064\u002f\u0025\u0064",_fc ._aca ,_fc ._f ,_fc ._c );};func (_fbf *runData )fillBuffer (_cea int )error {_fbf ._gabf =_cea ;_ ,_bed :=_fbf ._dea .Seek (int64 (_cea ),_d .SeekStart );if _bed !=nil {if _bed ==_d .EOF {_ac .Log .Debug ("\u0053\u0065\u0061\u006b\u0020\u0045\u004f\u0046");_fbf ._eee =-1;}else {return _bed ;};};if _bed ==nil {_fbf ._eee ,_bed =_fbf ._dea .Read (_fbf ._adb );if _bed !=nil {if _bed ==_d .EOF {_ac .Log .Trace ("\u0052\u0065\u0061\u0064\u0020\u0045\u004f\u0046");_fbf ._eee =-1;}else {return _bed ;};};};if _fbf ._eee > -1&&_fbf ._eee < 3{for _fbf ._eee < 3{_gdca ,_caf :=_fbf ._dea .ReadByte ();if _caf !=nil {if _caf ==_d .EOF {_fbf ._adb [_fbf ._eee ]=0;}else {return _caf ;};}else {_fbf ._adb [_fbf ._eee ]=_gdca &0xFF;};_fbf ._eee ++;};};_fbf ._eee -=3;if _fbf ._eee < 0{_fbf ._adb =make ([]byte ,len (_fbf ._adb ));_fbf ._eee =len (_fbf ._adb )-3;};return nil ;};func (_egg *runData )uncompressGetNextCodeLittleEndian ()(int ,error ){_bde :=_egg ._bgb -_egg ._acf ;if _bde < 0||_bde > 24{_eb :=(_egg ._bgb >>3)-_egg ._gabf ;if _eb >=_egg ._eee {_eb +=_egg ._gabf ;if _aab :=_egg .fillBuffer (_eb );_aab !=nil {return 0,_aab ;};_eb -=_egg ._gabf ;};_bfe :=(uint32 (_egg ._adb [_eb ]&0xFF)<<16)|(uint32 (_egg ._adb [_eb +1]&0xFF)<<8)|(uint32 (_egg ._adb [_eb +2]&0xFF));_ccad :=uint32 (_egg ._bgb &7);_bfe <<=_ccad ;_egg ._ccd =int (_bfe );}else {_cff :=_egg ._acf &7;_egf :=7-_cff ;if _bde <=_egf {_egg ._ccd <<=uint (_bde );}else {_dab :=(_egg ._acf >>3)+3-_egg ._gabf ;if _dab >=_egg ._eee {_dab +=_egg ._gabf ;if _bba :=_egg .fillBuffer (_dab );_bba !=nil {return 0,_bba ;};_dab -=_egg ._gabf ;};_cff =8-_cff ;for {_egg ._ccd <<=uint (_cff );_egg ._ccd |=int (uint (_egg ._adb [_dab ])&0xFF);_bde -=_cff ;_dab ++;_cff =8;if !(_bde >=8){break ;};};_egg ._ccd <<=uint (_bde );};};_egg ._acf =_egg ._bgb ;return _egg ._ccd ,nil ;};func _ce (_da ,_ed int )int {if _da > _ed {return _ed ;};return _da ;};func (_bc *Decoder )fillBitmap (_ffc *_b .Bitmap ,_ddb int ,_dg []int ,_gd int )error {var _cdf byte ;_cfb :=0;_fag :=_ffc .GetByteIndex (_cfb ,_ddb );for _cae :=0;_cae < _gd ;_cae ++{_efb :=byte (1);_cca :=_dg [_cae ];if (_cae &1)==0{_efb =0;};for _cfb < _cca {_cdf =(_cdf <<1)|_efb ;_cfb ++;if (_cfb &7)==0{if _ecg :=_ffc .SetByte (_fag ,_cdf );_ecg !=nil {return _ecg ;};_fag ++;_cdf =0;};};};if (_cfb &7)!=0{_cdf <<=uint (8-(_cfb &7));if _fae :=_ffc .SetByte (_fag ,_cdf );_fae !=nil {return _fae ;};};return nil ;};func _gbc (_ecb *_aa .SubstreamReader )(*runData ,error ){_ggd :=&runData {_dea :_ecb ,_bgb :0,_acf :1};_efe :=_ce (_af (_gea ,int (_ecb .Length ())),_cbg );_ggd ._adb =make ([]byte ,_efe );if _afd :=_ggd .fillBuffer (0);_afd !=nil {if _afd ==_d .EOF {_ggd ._adb =make ([]byte ,10);_ac .Log .Debug ("F\u0069\u006c\u006c\u0042uf\u0066e\u0072\u0020\u0066\u0061\u0069l\u0065\u0064\u003a\u0020\u0025\u0076",_afd );}else {return nil ,_afd ;};};return _ggd ,nil ;}; |