2020-10-05 19:28:24 +00:00
|
|
|
package mmr ;import (_bf "errors";_d "fmt";_af "github.com/unidoc/unipdf/v3/common";_aa "github.com/unidoc/unipdf/v3/internal/bitwise";_ab "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_b "io";);const (_dbf int =1024<<7;_abe int =3;_df uint =24;);func _ca (_fbb ,_ag int )int {if _fbb < _ag {return _ag ;};return _fbb ;};func (_dbe *Decoder )fillBitmap (_fbc *_ab .Bitmap ,_bc int ,_aab []int ,_abba int )error {var _aeb byte ;_dcb :=0;_dcf :=_fbc .GetByteIndex (_dcb ,_bc );for _cdc :=0;_cdc < _abba ;_cdc ++{_bg :=byte (1);_fd :=_aab [_cdc ];if (_cdc &1)==0{_bg =0;};for _dcb < _fd {_aeb =(_aeb <<1)|_bg ;_dcb ++;if (_dcb &7)==0{if _dad :=_fbc .SetByte (_dcf ,_aeb );_dad !=nil {return _dad ;};_dcf ++;_aeb =0;};};};if (_dcb &7)!=0{_aeb <<=uint (8-(_dcb &7));if _aac :=_fbc .SetByte (_dcf ,_aeb );_aac !=nil {return _aac ;};};return nil ;};const (EOF =-3;_ae =-2;EOL =-1;_aba =8;_ee =(1<<_aba )-1;_bdff =5;_ed =(1<<_bdff )-1;);func _bfed (_fef *_aa .SubstreamReader )(*runData ,error ){_ddb :=&runData {_fece :_fef ,_ff :0,_cee :1};_gdb :=_ef (_ca (_abe ,int (_fef .Length ())),_dbf );_ddb ._fff =make ([]byte ,_gdb );if _gf :=_ddb .fillBuffer (0);_gf !=nil {if _gf ==_b .EOF {_ddb ._fff =make ([]byte ,10);_af .Log .Debug ("F\u0069\u006c\u006c\u0042uf\u0066e\u0072\u0020\u0066\u0061\u0069l\u0065\u0064\u003a\u0020\u0025\u0076",_gf );}else {return nil ,_gf ;};};return _ddb ,nil ;};func (_gde *runData )uncompressGetCodeLittleEndian (_caa []*code )(*code ,error ){_cf ,_efc :=_gde .uncompressGetNextCodeLittleEndian ();if _efc !=nil {_af .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",_efc );return nil ,_efc ;};_cf &=0xffffff;_edf :=_cf >>(_df -_aba );_acd :=_caa [_edf ];if _acd !=nil &&_acd ._fb {_edf =(_cf >>(_df -_aba -_bdff ))&_ed ;_acd =_acd ._bd [_edf ];};return _acd ,nil ;};func (_cec *runData )align (){_cec ._ff =((_cec ._ff +7)>>3)<<3};func _fbd (_db [3]int )*code {return &code {_c :_db [0],_e :_db [1],_f :_db [2]}};type runData struct{_fece *_aa .SubstreamReader ;_ff int ;_cee int ;_bef int ;_fff []byte ;_cbc int ;_bgd int ;};func (_cce *Decoder )uncompress2d (_fee *runData ,_dcfg []int ,_bdg int ,_cdg []int ,_agf int )(int ,error ){var (_afa int ;_ccd int ;_acf int ;_aec =true ;_aef error ;_bbf *code ;);_dcfg [_bdg ]=_agf ;_dcfg [_bdg +1]=_agf ;_dcfg [_bdg +2]=_agf +1;_dcfg [_bdg +3]=_agf +1;_gc :for _acf < _agf {_bbf ,_aef =_fee .uncompressGetCode (_cce ._fc );if _aef !=nil {return EOL ,nil ;};if _bbf ==nil {_fee ._ff ++;break _gc ;};_fee ._ff +=_bbf ._c ;switch mmrCode (_bbf ._f ){case _ea :_acf =_dcfg [_afa ];case _ba :_acf =_dcfg [_afa ]+1;case _dg :_acf =_dcfg [_afa ]-1;case _bfe :_fec :=1;for _fec > 0{var _aeg []*code ;if _aec {_aeg =_cce ._edd ;}else {_aeg =_cce ._ce ;};_bbf ,_aef =_fee .uncompressGetCode (_aeg );if _aef !=nil {return 0,_aef ;};if _bbf ==nil {break _gc ;};_fee ._ff +=_bbf ._c ;if _bbf ._f < 64{if _bbf ._f < 0{_cdg [_ccd ]=_acf ;_ccd ++;_bbf =nil ;break _gc ;};_acf +=_bbf ._f ;_cdg [_ccd ]=_acf ;_ccd ++;break ;};_acf +=_bbf ._f ;};_fbde :=_acf ;_dge :=1;_fdf :for _dge > 0{var _agg []*code ;if !_aec {_agg =_cce ._edd ;}else {_agg =_cce ._ce ;};_bbf ,_aef =_fee .uncompressGetCode (_agg );if _aef !=nil {return 0,_aef ;};if _bbf ==nil {break _gc ;};_fee ._ff +=_bbf ._c ;if _bbf ._f < 64{if _bbf ._f < 0{_cdg [_ccd ]=_acf ;_ccd ++;break _gc ;};_acf +=_bbf ._f ;if _acf < _agf ||_acf !=_fbde {_cdg [_ccd ]=_acf ;_ccd ++;};break _fdf ;};_acf +=_bbf ._f ;};for _acf < _agf &&_dcfg [_afa ]<=_acf {_afa +=2;};continue _gc ;case _cc :_afa ++;_acf =_dcfg [_afa ];_afa ++;continue _gc ;case _be :_acf =_dcfg [_afa ]+2;case _bfd :_acf =_dcfg [_afa ]-2;case _da :_acf =_dcfg [_afa ]+3;case _bdf :_acf =_dcfg [_afa ]-3;default:if _fee ._ff ==12&&_bbf ._f ==EOL {_fee ._ff =0;if _ ,_aef =_cce .uncompress1d (_fee ,_dcfg ,_agf );_aef !=nil {return 0,_aef ;};_fee ._ff ++;if _ ,_aef =_cce .uncompress1d (_fee ,_cdg ,_agf );_aef !=nil {return 0,_aef ;};_fgb
|