2020-10-12 14:17:59 +00:00
|
|
|
package mmr ;import (_g "errors";_ea "fmt";_bc "github.com/unidoc/unipdf/v3/common";_ef "github.com/unidoc/unipdf/v3/internal/bitwise";_f "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_b "io";);type code struct{_gg int ;_ba int ;_a int ;_bcb []*code ;_ga bool ;};type mmrCode int ;func _df (_c ,_bg int )int {if _c < _bg {return _bg ;};return _c ;};func _gf (_eb ,_cb int )int {if _eb > _cb {return _cb ;};return _eb ;};func (_gga *Decoder )uncompress2d (_aed *runData ,_cge []int ,_eef int ,_bdb []int ,_cggf int )(int ,error ){var (_fbg int ;_deg int ;_fff int ;_agf =true ;_fec error ;_fd *code ;);_cge [_eef ]=_cggf ;_cge [_eef +1]=_cggf ;_cge [_eef +2]=_cggf +1;_cge [_eef +3]=_cggf +1;_gffe :for _fff < _cggf {_fd ,_fec =_aed .uncompressGetCode (_gga ._edc );if _fec !=nil {return EOL ,nil ;};if _fd ==nil {_aed ._bef ++;break _gffe ;};_aed ._bef +=_fd ._gg ;switch mmrCode (_fd ._a ){case _dd :_fff =_cge [_fbg ];case _ddb :_fff =_cge [_fbg ]+1;case _eg :_fff =_cge [_fbg ]-1;case _eaa :_edg :=1;for _edg > 0{var _ged []*code ;if _agf {_ged =_gga ._cg ;}else {_ged =_gga ._ce ;};_fd ,_fec =_aed .uncompressGetCode (_ged );if _fec !=nil {return 0,_fec ;};if _fd ==nil {break _gffe ;};_aed ._bef +=_fd ._gg ;if _fd ._a < 64{if _fd ._a < 0{_bdb [_deg ]=_fff ;_deg ++;_fd =nil ;break _gffe ;};_fff +=_fd ._a ;_bdb [_deg ]=_fff ;_deg ++;break ;};_fff +=_fd ._a ;};_gcg :=_fff ;_ccg :=1;_gdc :for _ccg > 0{var _daa []*code ;if !_agf {_daa =_gga ._cg ;}else {_daa =_gga ._ce ;};_fd ,_fec =_aed .uncompressGetCode (_daa );if _fec !=nil {return 0,_fec ;};if _fd ==nil {break _gffe ;};_aed ._bef +=_fd ._gg ;if _fd ._a < 64{if _fd ._a < 0{_bdb [_deg ]=_fff ;_deg ++;break _gffe ;};_fff +=_fd ._a ;if _fff < _cggf ||_fff !=_gcg {_bdb [_deg ]=_fff ;_deg ++;};break _gdc ;};_fff +=_fd ._a ;};for _fff < _cggf &&_cge [_fbg ]<=_fff {_fbg +=2;};continue _gffe ;case _eae :_fbg ++;_fff =_cge [_fbg ];_fbg ++;continue _gffe ;case _efb :_fff =_cge [_fbg ]+2;case _bgc :_fff =_cge [_fbg ]-2;case _bdd :_fff =_cge [_fbg ]+3;case _cc :_fff =_cge [_fbg ]-3;default:if _aed ._bef ==12&&_fd ._a ==EOL {_aed ._bef =0;if _ ,_fec =_gga .uncompress1d (_aed ,_cge ,_cggf );_fec !=nil {return 0,_fec ;};_aed ._bef ++;if _ ,_fec =_gga .uncompress1d (_aed ,_bdb ,_cggf );_fec !=nil {return 0,_fec ;};_fcfg ,_eac :=_gga .uncompress1d (_aed ,_cge ,_cggf );if _eac !=nil {return EOF ,_eac ;};_aed ._bef ++;return _fcfg ,nil ;};_fff =_cggf ;continue _gffe ;};if _fff <=_cggf {_agf =!_agf ;_bdb [_deg ]=_fff ;_deg ++;if _fbg > 0{_fbg --;}else {_fbg ++;};for _fff < _cggf &&_cge [_fbg ]<=_fff {_fbg +=2;};};};if _bdb [_deg ]!=_cggf {_bdb [_deg ]=_cggf ;};if _fd ==nil {return EOL ,nil ;};return _deg ,nil ;};func (_ae *Decoder )detectAndSkipEOL ()error {for {_dgg ,_fb :=_ae ._bf .uncompressGetCode (_ae ._edc );if _fb !=nil {return _fb ;};if _dgg !=nil &&_dgg ._a ==EOL {_ae ._bf ._bef +=_dgg ._gg ;}else {return nil ;};};};func (_aba *runData )fillBuffer (_dad int )error {_aba ._dbg =_dad ;_ ,_cfg :=_aba ._db .Seek (int64 (_dad ),_b .SeekStart );if _cfg !=nil {if _cfg ==_b .EOF {_bc .Log .Debug ("\u0053\u0065\u0061\u006b\u0020\u0045\u004f\u0046");_aba ._fag =-1;}else {return _cfg ;};};if _cfg ==nil {_aba ._fag ,_cfg =_aba ._db .Read (_aba ._afc );if _cfg !=nil {if _cfg ==_b .EOF {_bc .Log .Trace ("\u0052\u0065\u0061\u0064\u0020\u0045\u004f\u0046");_aba ._fag =-1;}else {return _cfg ;};};};if _aba ._fag > -1&&_aba ._fag < 3{for _aba ._fag < 3{_degc ,_efg :=_aba ._db .ReadByte ();if _efg !=nil {if _efg ==_b .EOF {_aba ._afc [_aba ._fag ]=0;}else {return _efg ;};}else {_aba ._afc [_aba ._fag ]=_degc &0xFF;};_aba ._fag ++;};};_aba ._fag -=3;if _aba ._fag < 0{_aba ._afc =make ([]byte ,len (_aba ._afc ));_aba ._fag =len (_aba ._afc )-3;};return nil ;};type runData struct{_db *_ef .SubstreamReader ;_bef int ;_gcf int ;_bgb int ;_afc []byte ;_dbg int ;_fag int ;};var (_ca =[][3]int {{4,0x1,int (_eae )},{3,0x1,int (_eaa )},{1,0x1,int (_dd )},{3,0x3,int (_ddb )},{6,0x3,int (_efb )},{7,0x3,int (_bdd )},{3,0x2,int (_eg )},{6,0x2,int (_bgc )},{7,0x2,int (_cc )},{10,0xf,int (_dg )},{12,0xf,int (_egb )},{12,0x1,
|