2020-09-07 00:23:12 +00:00
|
|
|
package mmr ;import (_g "errors";_e "fmt";_ce "github.com/unidoc/unipdf/v3/common";_gf "github.com/unidoc/unipdf/v3/internal/bitwise";_cg "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_c "io";);func (_cbc *runData )fillBuffer (_aga int )error {_cbc ._aba =_aga ;_ ,_cgc :=_cbc ._ed .Seek (int64 (_aga ),_c .SeekStart );if _cgc !=nil {if _cgc ==_c .EOF {_ce .Log .Debug ("\u0053\u0065\u0061\u006b\u0020\u0045\u004f\u0046");_cbc ._eca =-1;}else {return _cgc ;};};if _cgc ==nil {_cbc ._eca ,_cgc =_cbc ._ed .Read (_cbc ._bffg );if _cgc !=nil {if _cgc ==_c .EOF {_ce .Log .Trace ("\u0052\u0065\u0061\u0064\u0020\u0045\u004f\u0046");_cbc ._eca =-1;}else {return _cgc ;};};};if _cbc ._eca > -1&&_cbc ._eca < 3{for _cbc ._eca < 3{_dab ,_ecfg :=_cbc ._ed .ReadByte ();if _ecfg !=nil {if _ecfg ==_c .EOF {_cbc ._bffg [_cbc ._eca ]=0;}else {return _ecfg ;};}else {_cbc ._bffg [_cbc ._eca ]=_dab &0xFF;};_cbc ._eca ++;};};_cbc ._eca -=3;if _cbc ._eca < 0{_cbc ._bffg =make ([]byte ,len (_cbc ._bffg ));_cbc ._eca =len (_cbc ._bffg )-3;};return nil ;};func _ae (_ggg ,_ee int )int {if _ggg > _ee {return _ee ;};return _ggg ;};func (_ff *Decoder )initTables ()(_fc error ){if _ff ._afb ==nil {_ff ._afb ,_fc =_ff .createLittleEndianTable (_gga );if _fc !=nil {return ;};_ff ._cgf ,_fc =_ff .createLittleEndianTable (_gc );if _fc !=nil {return ;};_ff ._cb ,_fc =_ff .createLittleEndianTable (_bd );if _fc !=nil {return ;};};return nil ;};func (_ccg *runData )align (){_ccg ._bfef =((_ccg ._bfef +7)>>3)<<3};type code struct{_dd int ;_a int ;_b int ;_df []*code ;_db bool ;};func _edf (_ddaa *_gf .SubstreamReader )(*runData ,error ){_eae :=&runData {_ed :_ddaa ,_bfef :0,_aeg :1};_gae :=_ae (_f (_gdc ,int (_ddaa .Length ())),_afcc );_eae ._bffg =make ([]byte ,_gae );if _ddg :=_eae .fillBuffer (0);_ddg !=nil {if _ddg ==_c .EOF {_eae ._bffg =make ([]byte ,10);_ce .Log .Debug ("F\u0069\u006c\u006c\u0042uf\u0066e\u0072\u0020\u0066\u0061\u0069l\u0065\u0064\u003a\u0020\u0025\u0076",_ddg );}else {return nil ,_ddg ;};};return _eae ,nil ;};type runData struct{_ed *_gf .SubstreamReader ;_bfef int ;_aeg int ;_gff int ;_bffg []byte ;_aba int ;_eca int ;};type Decoder struct{_gfc ,_fd int ;_fg *runData ;_afb []*code ;_cgf []*code ;_cb []*code ;};func (_ggbb *runData )uncompressGetCodeLittleEndian (_dee []*code )(*code ,error ){_edd ,_cfa :=_ggbb .uncompressGetNextCodeLittleEndian ();if _cfa !=nil {_ce .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",_cfa );return nil ,_cfa ;};_edd &=0xffffff;_gag :=_edd >>(_efg -_cd );_cdg :=_dee [_gag ];if _cdg !=nil &&_cdg ._db {_gag =(_edd >>(_efg -_cd -_ag ))&_da ;_cdg =_cdg ._df [_gag ];};return _cdg ,nil ;};type mmrCode int ;func (_fcef *runData )uncompressGetCode (_bg []*code )(*code ,error ){return _fcef .uncompressGetCodeLittleEndian (_bg );};func (_ef *Decoder )UncompressMMR ()(_ea *_cg .Bitmap ,_ca error ){_ea =_cg .New (_ef ._gfc ,_ef ._fd );_eb :=make ([]int ,_ea .Width +5);_gaa :=make ([]int ,_ea .Width +5);_gaa [0]=_ea .Width ;_dgb :=1;var _bc int ;for _caf :=0;_caf < _ea .Height ;_caf ++{_bc ,_ca =_ef .uncompress2d (_ef ._fg ,_gaa ,_dgb ,_eb ,_ea .Width );if _ca !=nil {return nil ,_ca ;};if _bc ==EOF {break ;};if _bc > 0{_ca =_ef .fillBitmap (_ea ,_caf ,_eb ,_bc );if _ca !=nil {return nil ,_ca ;};};_gaa ,_eb =_eb ,_gaa ;_dgb =_bc ;};if _ca =_ef .detectAndSkipEOL ();_ca !=nil {return nil ,_ca ;};_ef ._fg .align ();return _ea ,nil ;};func (_gad *Decoder )uncompress2d (_cdd *runData ,_ega []int ,_dbc int ,_agg []int ,_ebd int )(int ,error ){var (_fbg int ;_daa int ;_cgg int ;_ggaa =true ;_daf error ;_ebb *code ;);_ega [_dbc ]=_ebd ;_ega [_dbc +1]=_ebd ;_ega [_dbc +2]=_ebd +1;_ega [_dbc +3]=_ebd +1;_caa :for _cgg < _ebd {_ebb ,_daf =_cdd .uncompressGetCode (_gad ._cb );if _daf !=nil {return EOL ,nil ;};if _ebb ==nil {_cdd ._bfef ++;break _caa ;};_cdd ._bfef +=_ebb ._dd ;switch mmrCode (_ebb ._b ){case _ac :_cgg =_ega [_fbg ];case _af :_cgg =_ega
|