2020-10-19 10:58:10 +00:00
|
|
|
package mmr ;import (_a "errors";_ba "fmt";_g "github.com/unidoc/unipdf/v3/common";_f "github.com/unidoc/unipdf/v3/internal/bitwise";_fc "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_bc "io";);func _ge (_bf ,_bd int )int {if _bf < _bd {return _bd ;};return _bf ;};func (_cac *runData )uncompressGetCode (_egc []*code )(*code ,error ){return _cac .uncompressGetCodeLittleEndian (_egc );};func (_bdb *Decoder )createLittleEndianTable (_daf [][3]int )([]*code ,error ){_ffe :=make ([]*code ,_dag +1);for _gge :=0;_gge < len (_daf );_gge ++{_afd :=_ag (_daf [_gge ]);if _afd ._gf <=_cb {_ebc :=_cb -_afd ._gf ;_eg :=_afd ._be <<uint (_ebc );for _ebca :=(1<<uint (_ebc ))-1;_ebca >=0;_ebca --{_bbc :=_eg |_ebca ;_ffe [_bbc ]=_afd ;};}else {_ed :=_afd ._be >>uint (_afd ._gf -_cb );if _ffe [_ed ]==nil {var _acd =_ag ([3]int {});_acd ._e =make ([]*code ,_dd +1);_ffe [_ed ]=_acd ;};if _afd ._gf <=_cb +_fg {_ea :=_cb +_fg -_afd ._gf ;_df :=(_afd ._be <<uint (_ea ))&_dd ;_ffe [_ed ]._c =true ;for _bge :=(1<<uint (_ea ))-1;_bge >=0;_bge --{_ffe [_ed ]._e [_df |_bge ]=_afd ;};}else {return nil ,_a .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 _ffe ,nil ;};func (_d *code )String ()string {return _ba .Sprintf ("\u0025\u0064\u002f\u0025\u0064\u002f\u0025\u0064",_d ._gf ,_d ._be ,_d ._ff );};func (_def *runData )uncompressGetNextCodeLittleEndian ()(int ,error ){_fcd :=_def ._gac -_def ._bea ;if _fcd < 0||_fcd > 24{_eagf :=(_def ._gac >>3)-_def ._ddd ;if _eagf >=_def ._cd {_eagf +=_def ._ddd ;if _dcf :=_def .fillBuffer (_eagf );_dcf !=nil {return 0,_dcf ;};_eagf -=_def ._ddd ;};_abg :=(uint32 (_def ._dfg [_eagf ]&0xFF)<<16)|(uint32 (_def ._dfg [_eagf +1]&0xFF)<<8)|(uint32 (_def ._dfg [_eagf +2]&0xFF));_gbba :=uint32 (_def ._gac &7);_abg <<=_gbba ;_def ._bbb =int (_abg );}else {_cgd :=_def ._bea &7;_baf :=7-_cgd ;if _fcd <=_baf {_def ._bbb <<=uint (_fcd );}else {_abca :=(_def ._bea >>3)+3-_def ._ddd ;if _abca >=_def ._cd {_abca +=_def ._ddd ;if _ege :=_def .fillBuffer (_abca );_ege !=nil {return 0,_ege ;};_abca -=_def ._ddd ;};_cgd =8-_cgd ;for {_def ._bbb <<=uint (_cgd );_def ._bbb |=int (uint (_def ._dfg [_abca ])&0xFF);_fcd -=_cgd ;_abca ++;_cgd =8;if !(_fcd >=8){break ;};};_def ._bbb <<=uint (_fcd );};};_def ._bea =_def ._gac ;return _def ._bbb ,nil ;};func _bad (_ef ,_bg int )int {if _ef > _bg {return _bg ;};return _ef ;};func (_dfb *Decoder )detectAndSkipEOL ()error {for {_gbb ,_cgc :=_dfb ._gd .uncompressGetCode (_dfb ._gdb );if _cgc !=nil {return _cgc ;};if _gbb !=nil &&_gbb ._ff ==EOL {_dfb ._gd ._gac +=_gbb ._gf ;}else {return nil ;};};};func (_cf *Decoder )UncompressMMR ()(_afg *_fc .Bitmap ,_gdg error ){_afg =_fc .New (_cf ._fb ,_cf ._gb );_db :=make ([]int ,_afg .Width +5);_ggda :=make ([]int ,_afg .Width +5);_ggda [0]=_afg .Width ;_dac :=1;var _bcc int ;for _ebf :=0;_ebf < _afg .Height ;_ebf ++{_bcc ,_gdg =_cf .uncompress2d (_cf ._gd ,_ggda ,_dac ,_db ,_afg .Width );if _gdg !=nil {return nil ,_gdg ;};if _bcc ==EOF {break ;};if _bcc > 0{_gdg =_cf .fillBitmap (_afg ,_ebf ,_db ,_bcc );if _gdg !=nil {return nil ,_gdg ;};};_ggda ,_db =_db ,_ggda ;_dac =_bcc ;};if _gdg =_cf .detectAndSkipEOL ();_gdg !=nil {return nil ,_gdg ;};_cf ._gd .align ();return _afg ,nil ;};func (_ccd *Decoder )uncompress2d (_aca *runData ,_efde []int ,_bbd int ,_fbe []int ,_dde int )(int ,error ){var (_cfg int ;_ee int ;_bbdg int ;_gbbe =true ;_ggdf error ;_bae *code ;);_efde [_bbd ]=_dde ;_efde [_bbd +1]=_dde ;_efde [_bbd +2]=_dde +1;_efde [_bbd +3]=_dde +1;_fbg :for _bbdg < _dde {_bae ,_ggdf =_aca .uncompressGetCode (_ccd ._gdb );if _ggdf !=nil {return EOL ,nil ;};if _bae ==nil {_aca ._gac ++;break _fbg ;};_aca ._gac +=_bae ._gf ;switch mmrCode (_bae ._ff ){case _ca :_bbdg =_efde [_cfg ];case _agb :_bbdg =_efde [_cfg ]+1;case _gg :_bbdg =_efde [_cfg ]-1;case _bb :_acc :=1;for _acc > 0{var _bdf []*code ;if _gbbe {_bdf =_ccd ._ecd ;}else {_bdf =_ccd ._fec ;};_bae ,_ggdf =_aca .uncompressGetCode (_bdf )
|