2020-12-06 13:03:03 +00:00
|
|
|
package arithmetic ;import (_f "bytes";_e "github.com/unidoc/unipdf/v3/common";_ea "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_cd "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_fb "io";);type Encoder struct{_edaa uint32 ;_dd uint16 ;_gaa ,_bc uint8 ;_gga int ;_cga int ;_aa [][]byte ;_eg []byte ;_ega int ;_fbd *codingContext ;_ac [13]*codingContext ;_ab *codingContext ;};func (_afbe *Encoder )encodeIAID (_cde ,_ecg int )error {if _afbe ._ab ==nil {_afbe ._ab =_ae (1<<uint (_cde ));};_aag :=uint32 (1<<uint32 (_cde +1))-1;_ecg <<=uint (32-_cde );_bd :=uint32 (1);for _aga :=0;_aga < _cde ;_aga ++{_gda :=_bd &_aag ;_bae :=uint8 ((uint32 (_ecg )&0x80000000)>>31);if _fea :=_afbe .encodeBit (_afbe ._ab ,_gda ,_bae );_fea !=nil {return _fea ;};_bd =(_bd <<1)|uint32 (_bae );_ecg <<=1;};return nil ;};func (_ebd *Encoder )byteOut (){if _ebd ._bc ==0xff{_ebd .rBlock ();return ;};if _ebd ._edaa < 0x8000000{_ebd .lBlock ();return ;};_ebd ._bc ++;if _ebd ._bc !=0xff{_ebd .lBlock ();return ;};_ebd ._edaa &=0x7ffffff;_ebd .rBlock ();};func (_dgd *Encoder )codeLPS (_abf *codingContext ,_ggdd uint32 ,_dbf uint16 ,_affg byte ){_dgd ._dd -=_dbf ;if _dgd ._dd < _dbf {_dgd ._edaa +=uint32 (_dbf );}else {_dgd ._dd =_dbf ;};if _bca [_affg ]._egfd ==1{_abf .flipMps (_ggdd );};_abf ._cg [_ggdd ]=_bca [_affg ]._ggbc ;_dgd .renormalize ();};func (_eb *Encoder )DataSize ()int {return _eb .dataSize ()};const (_add =65536;_beac =20*1024;);func _ae (_gg int )*codingContext {return &codingContext {_cg :make ([]byte ,_gg ),_ead :make ([]byte ,_gg )};};func (_acd *Encoder )EncodeInteger (proc Class ,value int )(_cgb error ){_e .Log .Trace ("\u0045\u006eco\u0064\u0065\u0020I\u006e\u0074\u0065\u0067er:\u0027%d\u0027\u0020\u0077\u0069\u0074\u0068\u0020Cl\u0061\u0073\u0073\u003a\u0020\u0027\u0025s\u0027",value ,proc );if _cgb =_acd .encodeInteger (proc ,value );_cgb !=nil {return _cd .Wrap (_cgb ,"\u0045\u006e\u0063\u006f\u0064\u0065\u0049\u006e\u0074\u0065\u0067\u0065\u0072","");};return nil ;};var _g =[]intEncRangeS {{0,3,0,2,0,2},{-1,-1,9,4,0,0},{-3,-2,5,3,2,1},{4,19,2,3,4,4},{-19,-4,3,3,4,4},{20,83,6,4,20,6},{-83,-20,7,4,20,6},{84,339,14,5,84,8},{-339,-84,15,5,84,8},{340,4435,30,6,340,12},{-4435,-340,31,6,340,12},{4436,2000000000,62,6,4436,32},{-2000000000,-4436,63,6,4436,32}};func (_bbd *Encoder )emit (){if _bbd ._ega ==_beac {_bbd ._aa =append (_bbd ._aa ,_bbd ._eg );_bbd ._eg =make ([]byte ,_beac );_bbd ._ega =0;};_bbd ._eg [_bbd ._ega ]=_bbd ._bc ;_bbd ._ega ++;};func (_ccg *Encoder )code0 (_aaeg *codingContext ,_afbb uint32 ,_ec uint16 ,_fef byte ){if _aaeg .mps (_afbb )==0{_ccg .codeMPS (_aaeg ,_afbb ,_ec ,_fef );}else {_ccg .codeLPS (_aaeg ,_afbb ,_ec ,_fef );};};func (_ga *codingContext )flipMps (_b uint32 ){_ga ._ead [_b ]=1-_ga ._ead [_b ]};func (_eee *Encoder )encodeInteger (_dac Class ,_ebg int )error {const _bbg ="E\u006e\u0063\u006f\u0064er\u002ee\u006e\u0063\u006f\u0064\u0065I\u006e\u0074\u0065\u0067\u0065\u0072";if _ebg > 2000000000||_ebg < -2000000000{return _cd .Errorf (_bbg ,"\u0061\u0072\u0069\u0074\u0068\u006d\u0065\u0074i\u0063\u0020\u0065nc\u006f\u0064\u0065\u0072\u0020\u002d \u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0069\u006e\u0074\u0065\u0067\u0065\u0072 \u0076\u0061\u006c\u0075\u0065\u003a\u0020\u0027%\u0064\u0027",_ebg );};_ddg :=_eee ._ac [_dac ];_ceg :=uint32 (1);var _abd int ;for ;;_abd ++{if _g [_abd ]._ed <=_ebg &&_g [_abd ]._eda >=_ebg {break ;};};if _ebg < 0{_ebg =-_ebg ;};_ebg -=int (_g [_abd ]._da );_dff :=_g [_abd ]._cdg ;for _cfe :=uint8 (0);_cfe < _g [_abd ]._fbf ;_cfe ++{_aca :=_dff &1;if _gef :=_eee .encodeBit (_ddg ,_ceg ,_aca );_gef !=nil {return _cd .Wrap (_gef ,_bbg ,"");};_dff >>=1;if _ceg &0x100> 0{_ceg =(((_ceg <<1)|uint32 (_aca ))&0x1ff)|0x100;}else {_ceg =(_ceg <<1)|uint32 (_aca );};};_ebg <<=32-_g [_abd ]._cc ;for _faa :=uint8 (0);_faa < _g [_abd ]._cc ;_faa ++{_fac :=uint8 ((uint32 (_ebg )&0x80000000)>>31);if _eeb :=_eee .encodeBit (_ddg ,_ceg ,_fac );_eeb !=nil {return _cd .Wrap (_eeb ,_bbg ,"\u006d\u006f\u0076\u0065 \u0064\u0061\u0074\u0061\u0020\u0074\u006f\u0020\u0074\u0068e\u0
|