mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-05 19:30:30 +08:00
50 lines
13 KiB
Go
50 lines
13 KiB
Go
//
|
|
// Copyright 2020 FoxyUtils ehf. All rights reserved.
|
|
//
|
|
// This is a commercial product and requires a license to operate.
|
|
// A trial license can be obtained at https://unidoc.io
|
|
//
|
|
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
|
|
//
|
|
// Use of this source code is governed by the UniDoc End User License Agreement
|
|
// terms that can be accessed at https://unidoc.io/eula/
|
|
|
|
package mmr ;import (_d "errors";_e "fmt";_c "github.com/unidoc/unipdf/v3/common";_gg "github.com/unidoc/unipdf/v3/internal/bitwise";_be "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_b "io";);func New (r *_gg .Reader ,width ,height int ,dataOffset ,dataLength int64 )(*Decoder ,error ){_ggc :=&Decoder {_ff :width ,_bg :height };
|
|
_ada ,_ae :=r .NewPartialReader (int (dataOffset ),int (dataLength ),false );if _ae !=nil {return nil ,_ae ;};_aac ,_ae :=_bbf (_ada );if _ae !=nil {return nil ,_ae ;};_ ,_ae =r .Seek (_ada .RelativePosition (),_b .SeekCurrent );if _ae !=nil {return nil ,_ae ;
|
|
};_ggc ._gab =_aac ;if _fg :=_ggc .initTables ();_fg !=nil {return nil ,_fg ;};return _ggc ,nil ;};type mmrCode int ;func (_fbe *runData )uncompressGetCode (_gd []*code )(*code ,error ){return _fbe .uncompressGetCodeLittleEndian (_gd );};type runData struct{_edb *_gg .Reader ;
|
|
_fed int ;_fbd int ;_ggg int ;_fda []byte ;_fbb int ;_fag int ;};var (_ccd =[][3]int {{4,0x1,int (_aa )},{3,0x1,int (_ad )},{1,0x1,int (_bc )},{3,0x3,int (_ee )},{6,0x3,int (_cc )},{7,0x3,int (_cfb )},{3,0x2,int (_agf )},{6,0x2,int (_ac )},{7,0x2,int (_gcg )},{10,0xf,int (_bfdd )},{12,0xf,int (_bcb )},{12,0x1,int (EOL )}};
|
|
_eec =[][3]int {{4,0x07,2},{4,0x08,3},{4,0x0B,4},{4,0x0C,5},{4,0x0E,6},{4,0x0F,7},{5,0x12,128},{5,0x13,8},{5,0x14,9},{5,0x1B,64},{5,0x07,10},{5,0x08,11},{6,0x17,192},{6,0x18,1664},{6,0x2A,16},{6,0x2B,17},{6,0x03,13},{6,0x34,14},{6,0x35,15},{6,0x07,1},{6,0x08,12},{7,0x13,26},{7,0x17,21},{7,0x18,28},{7,0x24,27},{7,0x27,18},{7,0x28,24},{7,0x2B,25},{7,0x03,22},{7,0x37,256},{7,0x04,23},{7,0x08,20},{7,0xC,19},{8,0x12,33},{8,0x13,34},{8,0x14,35},{8,0x15,36},{8,0x16,37},{8,0x17,38},{8,0x1A,31},{8,0x1B,32},{8,0x02,29},{8,0x24,53},{8,0x25,54},{8,0x28,39},{8,0x29,40},{8,0x2A,41},{8,0x2B,42},{8,0x2C,43},{8,0x2D,44},{8,0x03,30},{8,0x32,61},{8,0x33,62},{8,0x34,63},{8,0x35,0},{8,0x36,320},{8,0x37,384},{8,0x04,45},{8,0x4A,59},{8,0x4B,60},{8,0x5,46},{8,0x52,49},{8,0x53,50},{8,0x54,51},{8,0x55,52},{8,0x58,55},{8,0x59,56},{8,0x5A,57},{8,0x5B,58},{8,0x64,448},{8,0x65,512},{8,0x67,640},{8,0x68,576},{8,0x0A,47},{8,0x0B,48},{9,0x01,_ebe },{9,0x98,1472},{9,0x99,1536},{9,0x9A,1600},{9,0x9B,1728},{9,0xCC,704},{9,0xCD,768},{9,0xD2,832},{9,0xD3,896},{9,0xD4,960},{9,0xD5,1024},{9,0xD6,1088},{9,0xD7,1152},{9,0xD8,1216},{9,0xD9,1280},{9,0xDA,1344},{9,0xDB,1408},{10,0x01,_ebe },{11,0x01,_ebe },{11,0x08,1792},{11,0x0C,1856},{11,0x0D,1920},{12,0x00,EOF },{12,0x01,EOL },{12,0x12,1984},{12,0x13,2048},{12,0x14,2112},{12,0x15,2176},{12,0x16,2240},{12,0x17,2304},{12,0x1C,2368},{12,0x1D,2432},{12,0x1E,2496},{12,0x1F,2560}};
|
|
_cb =[][3]int {{2,0x02,3},{2,0x03,2},{3,0x02,1},{3,0x03,4},{4,0x02,6},{4,0x03,5},{5,0x03,7},{6,0x04,9},{6,0x05,8},{7,0x04,10},{7,0x05,11},{7,0x07,12},{8,0x04,13},{8,0x07,14},{9,0x01,_ebe },{9,0x18,15},{10,0x01,_ebe },{10,0x17,16},{10,0x18,17},{10,0x37,0},{10,0x08,18},{10,0x0F,64},{11,0x01,_ebe },{11,0x17,24},{11,0x18,25},{11,0x28,23},{11,0x37,22},{11,0x67,19},{11,0x68,20},{11,0x6C,21},{11,0x08,1792},{11,0x0C,1856},{11,0x0D,1920},{12,0x00,EOF },{12,0x01,EOL },{12,0x12,1984},{12,0x13,2048},{12,0x14,2112},{12,0x15,2176},{12,0x16,2240},{12,0x17,2304},{12,0x1C,2368},{12,0x1D,2432},{12,0x1E,2496},{12,0x1F,2560},{12,0x24,52},{12,0x27,55},{12,0x28,56},{12,0x2B,59},{12,0x2C,60},{12,0x33,320},{12,0x34,384},{12,0x35,448},{12,0x37,53},{12,0x38,54},{12,0x52,50},{12,0x53,51},{12,0x54,44},{12,0x55,45},{12,0x56,46},{12,0x57,47},{12,0x58,57},{12,0x59,58},{12,0x5A,61},{12,0x5B,256},{12,0x64,48},{12,0x65,49},{12,0x66,62},{12,0x67,63},{12,0x68,30},{12,0x69,31},{12,0x6A,32},{12,0x6B,33},{12,0x6C,40},{12,0x6D,41},{12,0xC8,128},{12,0xC9,192},{12,0xCA,26},{12,0xCB,27},{12,0xCC,28},{12,0xCD,29},{12,0xD2,34},{12,0xD3,35},{12,0xD4,36},{12,0xD5,37},{12,0xD6,38},{12,0xD7,39},{12,0xDA,42},{12,0xDB,43},{13,0x4A,640},{13,0x4B,704},{13,0x4C,768},{13,0x4D,832},{13,0x52,1280},{13,0x53,1344},{13,0x54,1408},{13,0x55,1472},{13,0x5A,1536},{13,0x5B,1600},{13,0x64,1664},{13,0x65,1728},{13,0x6C,512},{13,0x6D,576},{13,0x72,896},{13,0x73,960},{13,0x74,1024},{13,0x75,1088},{13,0x76,1152},{13,0x77,1216}};
|
|
);const (EOF =-3;_ebe =-2;EOL =-1;_ba =8;_da =(1<<_ba )-1;_acf =5;_aaf =(1<<_acf )-1;);func (_aea *runData )uncompressGetNextCodeLittleEndian ()(int ,error ){_agd :=_aea ._fed -_aea ._fbd ;if _agd < 0||_agd > 24{_cag :=(_aea ._fed >>3)-_aea ._fbb ;if _cag >=_aea ._fag {_cag +=_aea ._fbb ;
|
|
if _gfc :=_aea .fillBuffer (_cag );_gfc !=nil {return 0,_gfc ;};_cag -=_aea ._fbb ;};_ecec :=(uint32 (_aea ._fda [_cag ]&0xFF)<<16)|(uint32 (_aea ._fda [_cag +1]&0xFF)<<8)|(uint32 (_aea ._fda [_cag +2]&0xFF));_dcf :=uint32 (_aea ._fed &7);_ecec <<=_dcf ;
|
|
_aea ._ggg =int (_ecec );}else {_dbc :=_aea ._fbd &7;_gde :=7-_dbc ;if _agd <=_gde {_aea ._ggg <<=uint (_agd );}else {_begf :=(_aea ._fbd >>3)+3-_aea ._fbb ;if _begf >=_aea ._fag {_begf +=_aea ._fbb ;if _fbg :=_aea .fillBuffer (_begf );_fbg !=nil {return 0,_fbg ;
|
|
};_begf -=_aea ._fbb ;};_dbc =8-_dbc ;for {_aea ._ggg <<=uint (_dbc );_aea ._ggg |=int (uint (_aea ._fda [_begf ])&0xFF);_agd -=_dbc ;_begf ++;_dbc =8;if !(_agd >=8){break ;};};_aea ._ggg <<=uint (_agd );};};_aea ._fbd =_aea ._fed ;return _aea ._ggg ,nil ;
|
|
};type code struct{_a int ;_af int ;_db int ;_ec []*code ;_eb bool ;};func (_gga *Decoder )uncompress1d (_gf *runData ,_bdf []int ,_cce int )(int ,error ){var (_dab =true ;_fdb int ;_dgb *code ;_gcc int ;_bef error ;);_ef :for _fdb < _cce {_gff :for {if _dab {_dgb ,_bef =_gf .uncompressGetCode (_gga ._fa );
|
|
if _bef !=nil {return 0,_bef ;};}else {_dgb ,_bef =_gf .uncompressGetCode (_gga ._ge );if _bef !=nil {return 0,_bef ;};};_gf ._fed +=_dgb ._a ;if _dgb ._db < 0{break _ef ;};_fdb +=_dgb ._db ;if _dgb ._db < 64{_dab =!_dab ;_bdf [_gcc ]=_fdb ;_gcc ++;break _gff ;
|
|
};};};if _bdf [_gcc ]!=_cce {_bdf [_gcc ]=_cce ;};_bec :=EOL ;if _dgb !=nil &&_dgb ._db !=EOL {_bec =_gcc ;};return _bec ,nil ;};func (_dc *Decoder )initTables ()(_eca error ){if _dc ._fa ==nil {_dc ._fa ,_eca =_dc .createLittleEndianTable (_eec );if _eca !=nil {return ;
|
|
};_dc ._ge ,_eca =_dc .createLittleEndianTable (_cb );if _eca !=nil {return ;};_dc ._fd ,_eca =_dc .createLittleEndianTable (_ccd );if _eca !=nil {return ;};};return nil ;};func (_bd *Decoder )fillBitmap (_afa *_be .Bitmap ,_edg int ,_dag []int ,_beg int )error {var _acd byte ;
|
|
_dgd :=0;_bge :=_afa .GetByteIndex (_dgd ,_edg );for _fgc :=0;_fgc < _beg ;_fgc ++{_fb :=byte (1);_ffe :=_dag [_fgc ];if (_fgc &1)==0{_fb =0;};for _dgd < _ffe {_acd =(_acd <<1)|_fb ;_dgd ++;if (_dgd &7)==0{if _eee :=_afa .SetByte (_bge ,_acd );_eee !=nil {return _eee ;
|
|
};_bge ++;_acd =0;};};};if (_dgd &7)!=0{_acd <<=uint (8-(_dgd &7));if _bccf :=_afa .SetByte (_bge ,_acd );_bccf !=nil {return _bccf ;};};return nil ;};func _bbf (_add *_gg .Reader )(*runData ,error ){_cgd :=&runData {_edb :_add ,_fed :0,_fbd :1};_ecd :=_ece (_de (_ebg ,int (_add .Length ())),_afb );
|
|
_cgd ._fda =make ([]byte ,_ecd );if _fecg :=_cgd .fillBuffer (0);_fecg !=nil {if _fecg ==_b .EOF {_cgd ._fda =make ([]byte ,10);_c .Log .Debug ("F\u0069\u006c\u006c\u0042uf\u0066e\u0072\u0020\u0066\u0061\u0069l\u0065\u0064\u003a\u0020\u0025\u0076",_fecg );
|
|
}else {return nil ,_fecg ;};};return _cgd ,nil ;};func (_gb *Decoder )uncompress2d (_df *runData ,_ddgb []int ,_fga int ,_gbg []int ,_bgf int )(int ,error ){var (_dfd int ;_dea int ;_cg int ;_fea =true ;_gfg error ;_ffg *code ;);_ddgb [_fga ]=_bgf ;_ddgb [_fga +1]=_bgf ;
|
|
_ddgb [_fga +2]=_bgf +1;_ddgb [_fga +3]=_bgf +1;_cea :for _cg < _bgf {_ffg ,_gfg =_df .uncompressGetCode (_gb ._fd );if _gfg !=nil {return EOL ,nil ;};if _ffg ==nil {_df ._fed ++;break _cea ;};_df ._fed +=_ffg ._a ;switch mmrCode (_ffg ._db ){case _bc :_cg =_ddgb [_dfd ];
|
|
case _ee :_cg =_ddgb [_dfd ]+1;case _agf :_cg =_ddgb [_dfd ]-1;case _ad :for {var _fffg []*code ;if _fea {_fffg =_gb ._fa ;}else {_fffg =_gb ._ge ;};_ffg ,_gfg =_df .uncompressGetCode (_fffg );if _gfg !=nil {return 0,_gfg ;};if _ffg ==nil {break _cea ;
|
|
};_df ._fed +=_ffg ._a ;if _ffg ._db < 64{if _ffg ._db < 0{_gbg [_dea ]=_cg ;_dea ++;_ffg =nil ;break _cea ;};_cg +=_ffg ._db ;_gbg [_dea ]=_cg ;_dea ++;break ;};_cg +=_ffg ._db ;};_afc :=_cg ;_fae :for {var _ea []*code ;if !_fea {_ea =_gb ._fa ;}else {_ea =_gb ._ge ;
|
|
};_ffg ,_gfg =_df .uncompressGetCode (_ea );if _gfg !=nil {return 0,_gfg ;};if _ffg ==nil {break _cea ;};_df ._fed +=_ffg ._a ;if _ffg ._db < 64{if _ffg ._db < 0{_gbg [_dea ]=_cg ;_dea ++;break _cea ;};_cg +=_ffg ._db ;if _cg < _bgf ||_cg !=_afc {_gbg [_dea ]=_cg ;
|
|
_dea ++;};break _fae ;};_cg +=_ffg ._db ;};for _cg < _bgf &&_ddgb [_dfd ]<=_cg {_dfd +=2;};continue _cea ;case _aa :_dfd ++;_cg =_ddgb [_dfd ];_dfd ++;continue _cea ;case _cc :_cg =_ddgb [_dfd ]+2;case _ac :_cg =_ddgb [_dfd ]-2;case _cfb :_cg =_ddgb [_dfd ]+3;
|
|
case _gcg :_cg =_ddgb [_dfd ]-3;default:if _df ._fed ==12&&_ffg ._db ==EOL {_df ._fed =0;if _ ,_gfg =_gb .uncompress1d (_df ,_ddgb ,_bgf );_gfg !=nil {return 0,_gfg ;};_df ._fed ++;if _ ,_gfg =_gb .uncompress1d (_df ,_gbg ,_bgf );_gfg !=nil {return 0,_gfg ;
|
|
};_ab ,_fbf :=_gb .uncompress1d (_df ,_ddgb ,_bgf );if _fbf !=nil {return EOF ,_fbf ;};_df ._fed ++;return _ab ,nil ;};_cg =_bgf ;continue _cea ;};if _cg <=_bgf {_fea =!_fea ;_gbg [_dea ]=_cg ;_dea ++;if _dfd > 0{_dfd --;}else {_dfd ++;};for _cg < _bgf &&_ddgb [_dfd ]<=_cg {_dfd +=2;
|
|
};};};if _gbg [_dea ]!=_bgf {_gbg [_dea ]=_bgf ;};if _ffg ==nil {return EOL ,nil ;};return _dea ,nil ;};func (_caf *runData )uncompressGetCodeLittleEndian (_cd []*code )(*code ,error ){_ggge ,_gceg :=_caf .uncompressGetNextCodeLittleEndian ();if _gceg !=nil {_c .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",_gceg );
|
|
return nil ,_gceg ;};_ggge &=0xffffff;_ffgf :=_ggge >>(_ecaa -_ba );_gec :=_cd [_ffgf ];if _gec !=nil &&_gec ._eb {_ffgf =(_ggge >>(_ecaa -_ba -_acf ))&_aaf ;_gec =_gec ._ec [_ffgf ];};return _gec ,nil ;};const (_afb int =1024<<7;_ebg int =3;_ecaa uint =24;
|
|
);func (_gce *Decoder )createLittleEndianTable (_ca [][3]int )([]*code ,error ){_deg :=make ([]*code ,_da +1);for _ebf :=0;_ebf < len (_ca );_ebf ++{_ddg :=_gc (_ca [_ebf ]);if _ddg ._a <=_ba {_cff :=_ba -_ddg ._a ;_eg :=_ddg ._af <<uint (_cff );for _dg :=(1<<uint (_cff ))-1;
|
|
_dg >=0;_dg --{_adf :=_eg |_dg ;_deg [_adf ]=_ddg ;};}else {_cccd :=_ddg ._af >>uint (_ddg ._a -_ba );if _deg [_cccd ]==nil {var _fff =_gc ([3]int {});_fff ._ec =make ([]*code ,_aaf +1);_deg [_cccd ]=_fff ;};if _ddg ._a <=_ba +_acf {_ffc :=_ba +_acf -_ddg ._a ;
|
|
_ce :=(_ddg ._af <<uint (_ffc ))&_aaf ;_deg [_cccd ]._eb =true ;for _edc :=(1<<uint (_ffc ))-1;_edc >=0;_edc --{_deg [_cccd ]._ec [_ce |_edc ]=_ddg ;};}else {return nil ,_d .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 _deg ,nil ;};const (_aa mmrCode =iota ;_ad ;_bc ;_ee ;_cc ;_cfb ;_agf ;_ac ;_gcg ;_bfdd ;_bcb ;);func (_bba *Decoder )detectAndSkipEOL ()error {for {_bfb ,_fec :=_bba ._gab .uncompressGetCode (_bba ._fd );if _fec !=nil {return _fec ;};if _bfb !=nil &&_bfb ._db ==EOL {_bba ._gab ._fed +=_bfb ._a ;
|
|
}else {return nil ;};};};func (_ace *runData )fillBuffer (_ceae int )error {_ace ._fbb =_ceae ;_ ,_bfg :=_ace ._edb .Seek (int64 (_ceae ),_b .SeekStart );if _bfg !=nil {if _bfg ==_b .EOF {_c .Log .Debug ("\u0053\u0065\u0061\u006b\u0020\u0045\u004f\u0046");
|
|
_ace ._fag =-1;}else {return _bfg ;};};if _bfg ==nil {_ace ._fag ,_bfg =_ace ._edb .Read (_ace ._fda );if _bfg !=nil {if _bfg ==_b .EOF {_c .Log .Trace ("\u0052\u0065\u0061\u0064\u0020\u0045\u004f\u0046");_ace ._fag =-1;}else {return _bfg ;};};};if _ace ._fag > -1&&_ace ._fag < 3{for _ace ._fag < 3{_abc ,_eea :=_ace ._edb .ReadByte ();
|
|
if _eea !=nil {if _eea ==_b .EOF {_ace ._fda [_ace ._fag ]=0;}else {return _eea ;};}else {_ace ._fda [_ace ._fag ]=_abc &0xFF;};_ace ._fag ++;};};_ace ._fag -=3;if _ace ._fag < 0{_ace ._fda =make ([]byte ,len (_ace ._fda ));_ace ._fag =len (_ace ._fda )-3;
|
|
};return nil ;};type Decoder struct{_ff ,_bg int ;_gab *runData ;_fa []*code ;_ge []*code ;_fd []*code ;};func _gc (_f [3]int )*code {return &code {_a :_f [0],_af :_f [1],_db :_f [2]}};func _de (_ga ,_bf int )int {if _ga < _bf {return _bf ;};return _ga ;
|
|
};func (_dfe *runData )align (){_dfe ._fed =((_dfe ._fed +7)>>3)<<3};func (_ag *code )String ()string {return _e .Sprintf ("\u0025\u0064\u002f\u0025\u0064\u002f\u0025\u0064",_ag ._a ,_ag ._af ,_ag ._db );};func (_ed *Decoder )UncompressMMR ()(_dd *_be .Bitmap ,_dbg error ){_dd =_be .New (_ed ._ff ,_ed ._bg );
|
|
_bb :=make ([]int ,_dd .Width +5);_bcc :=make ([]int ,_dd .Width +5);_bcc [0]=_dd .Width ;_fc :=1;var _gad int ;for _ccc :=0;_ccc < _dd .Height ;_ccc ++{_gad ,_dbg =_ed .uncompress2d (_ed ._gab ,_bcc ,_fc ,_bb ,_dd .Width );if _dbg !=nil {return nil ,_dbg ;
|
|
};if _gad ==EOF {break ;};if _gad > 0{_dbg =_ed .fillBitmap (_dd ,_ccc ,_bb ,_gad );if _dbg !=nil {return nil ,_dbg ;};};_bcc ,_bb =_bb ,_bcc ;_fc =_gad ;};if _dbg =_ed .detectAndSkipEOL ();_dbg !=nil {return nil ,_dbg ;};_ed ._gab .align ();return _dd ,nil ;
|
|
};func _ece (_bfd ,_cf int )int {if _bfd > _cf {return _cf ;};return _bfd ;}; |