mirror of
https://github.com/unidoc/unipdf.git
synced 2025-04-27 13:48:51 +08:00
12 lines
13 KiB
Go
12 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 (_ed "errors";_d "fmt";_a "github.com/unidoc/unipdf/v3/common";_edb "github.com/unidoc/unipdf/v3/internal/bitwise";_ae "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_c "io";);const (EOF =-3;_ge =-2;EOL =-1;_gf =8;_cf =(1<<_gf )-1;_efb =5;_ac =(1<<_efb )-1;);func (_fca *Decoder )fillBitmap (_ggc *_ae .Bitmap ,_bcf int ,_ca []int ,_cdc int )error {var _adb byte ;_efg :=0;_aea :=_ggc .GetByteIndex (_efg ,_bcf );for _aa :=0;_aa < _cdc ;_aa ++{_aag :=byte (1);_gd :=_ca [_aa ];if (_aa &1)==0{_aag =0;};for _efg < _gd {_adb =(_adb <<1)|_aag ;_efg ++;if (_efg &7)==0{if _ffb :=_ggc .SetByte (_aea ,_adb );_ffb !=nil {return _ffb ;};_aea ++;_adb =0;};};};if (_efg &7)!=0{_adb <<=uint (8-(_efg &7));if _gfd :=_ggc .SetByte (_aea ,_adb );_gfd !=nil {return _gfd ;};};return nil ;};type code struct{_edc int ;_b int ;_f int ;_ef []*code ;_g bool ;};func _ea (_fc ,_df int )int {if _fc > _df {return _df ;};return _fc ;};var (_cc =[][3]int {{4,0x1,int (_egg )},{3,0x1,int (_afb )},{1,0x1,int (_ad )},{3,0x3,int (_fg )},{6,0x3,int (_ag )},{7,0x3,int (_gg )},{3,0x2,int (_gc )},{6,0x2,int (_cd )},{7,0x2,int (_agf )},{10,0xf,int (_edf )},{12,0xf,int (_bbe )},{12,0x1,int (EOL )}};_fbb =[][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,_ge },{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,_ge },{11,0x01,_ge },{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}};_db =[][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,_ge },{9,0x18,15},{10,0x01,_ge },{10,0x17,16},{10,0x18,17},{10,0x37,0},{10,0x08,18},{10,0x0F,64},{11,0x01,_ge },{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}};);func (_caf *runData )align (){_caf ._fbd =((_caf ._fbd +7)>>3)<<3};func (_fbg *Decoder )initTables ()(_ada error ){if _fbg ._da ==nil {_fbg ._da ,_ada =_fbg .createLittleEndianTable (_fbb );if _ada !=nil {return ;};_fbg ._ec ,_ada =_fbg .createLittleEndianTable (_db );if _ada !=nil {return ;};_fbg ._dg ,_ada =_fbg .createLittleEndianTable (_cc );if _ada !=nil {return ;};};return nil ;};func (_cg *Decoder )createLittleEndianTable (_cgd [][3]int )([]*code ,error ){_cb :=make ([]*code ,_cf +1);for _cff :=0;_cff < len (_cgd );_cff ++{_ggae :=_eg (_cgd [_cff ]);if _ggae ._edc <=_gf {_bbg :=_gf -_ggae ._edc ;_bf :=_ggae ._b <<uint (_bbg );for _dad :=(1<<uint (_bbg ))-1;_dad >=0;_dad --{_ggb :=_bf |_dad ;_cb [_ggb ]=_ggae ;};}else {_ecf :=_ggae ._b >>uint (_ggae ._edc -_gf );if _cb [_ecf ]==nil {var _bbd =_eg ([3]int {});_bbd ._ef =make ([]*code ,_ac +1);_cb [_ecf ]=_bbd ;};if _ggae ._edc <=_gf +_efb {_ebb :=_gf +_efb -_ggae ._edc ;_ccf :=(_ggae ._b <<uint (_ebb ))&_ac ;_cb [_ecf ]._g =true ;for _be :=(1<<uint (_ebb ))-1;_be >=0;_be --{_cb [_ecf ]._ef [_ccf |_be ]=_ggae ;};}else {return nil ,_ed .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 _cb ,nil ;};const (_egg mmrCode =iota ;_afb ;_ad ;_fg ;_ag ;_gg ;_gc ;_cd ;_agf ;_edf ;_bbe ;);func (_fa *Decoder )uncompress2d (_gff *runData ,_ebg []int ,_cdf int ,_fbbc []int ,_bg int )(int ,error ){var (_abca int ;_adbe int ;_gfb int ;_fcd =true ;_dab error ;_ga *code ;);_ebg [_cdf ]=_bg ;_ebg [_cdf +1]=_bg ;_ebg [_cdf +2]=_bg +1;_ebg [_cdf +3]=_bg +1;_edd :for _gfb < _bg {_ga ,_dab =_gff .uncompressGetCode (_fa ._dg );if _dab !=nil {return EOL ,nil ;};if _ga ==nil {_gff ._fbd ++;break _edd ;};_gff ._fbd +=_ga ._edc ;switch mmrCode (_ga ._f ){case _ad :_gfb =_ebg [_abca ];case _fg :_gfb =_ebg [_abca ]+1;case _gc :_gfb =_ebg [_abca ]-1;case _afb :for {var _dfc []*code ;if _fcd {_dfc =_fa ._da ;}else {_dfc =_fa ._ec ;};_ga ,_dab =_gff .uncompressGetCode (_dfc );if _dab !=nil {return 0,_dab ;};if _ga ==nil {break _edd ;};_gff ._fbd +=_ga ._edc ;if _ga ._f < 64{if _ga ._f < 0{_fbbc [_adbe ]=_gfb ;_adbe ++;_ga =nil ;break _edd ;};_gfb +=_ga ._f ;_fbbc [_adbe ]=_gfb ;_adbe ++;break ;};_gfb +=_ga ._f ;};_cgg :=_gfb ;_aad :for {var _eafe []*code ;if !_fcd {_eafe =_fa ._da ;}else {_eafe =_fa ._ec ;};_ga ,_dab =_gff .uncompressGetCode (_eafe );if _dab !=nil {return 0,_dab ;};if _ga ==nil {break _edd ;};_gff ._fbd +=_ga ._edc ;if _ga ._f < 64{if _ga ._f < 0{_fbbc [_adbe ]=_gfb ;_adbe ++;break _edd ;};_gfb +=_ga ._f ;if _gfb < _bg ||_gfb !=_cgg {_fbbc [_adbe ]=_gfb ;_adbe ++;};break _aad ;};_gfb +=_ga ._f ;};for _gfb < _bg &&_ebg [_abca ]<=_gfb {_abca +=2;};continue _edd ;case _egg :_abca ++;_gfb =_ebg [_abca ];_abca ++;continue _edd ;case _ag :_gfb =_ebg [_abca ]+2;case _cd :_gfb =_ebg [_abca ]-2;case _gg :_gfb =_ebg [_abca ]+3;case _agf :_gfb =_ebg [_abca ]-3;default:if _gff ._fbd ==12&&_ga ._f ==EOL {_gff ._fbd =0;if _ ,_dab =_fa .uncompress1d (_gff ,_ebg ,_bg );_dab !=nil {return 0,_dab ;};_gff ._fbd ++;if _ ,_dab =_fa .uncompress1d (_gff ,_fbbc ,_bg );_dab !=nil {return 0,_dab ;};_gce ,_gcf :=_fa .uncompress1d (_gff ,_ebg ,_bg );if _gcf !=nil {return EOF ,_gcf ;};_gff ._fbd ++;return _gce ,nil ;};_gfb =_bg ;continue _edd ;};if _gfb <=_bg {_fcd =!_fcd ;_fbbc [_adbe ]=_gfb ;_adbe ++;if _abca > 0{_abca --;}else {_abca ++;};for _gfb < _bg &&_ebg [_abca ]<=_gfb {_abca +=2;};};};if _fbbc [_adbe ]!=_bg {_fbbc [_adbe ]=_bg ;};if _ga ==nil {return EOL ,nil ;};return _adbe ,nil ;};const (_dadc int =1024<<7;_ce int =3;_bcc uint =24;);func (_abc *Decoder )detectAndSkipEOL ()error {for {_aca ,_gfg :=_abc ._bbee .uncompressGetCode (_abc ._dg );if _gfg !=nil {return _gfg ;};if _aca !=nil &&_aca ._f ==EOL {_abc ._bbee ._fbd +=_aca ._edc ;}else {return nil ;};};};func (_fdc *runData )uncompressGetNextCodeLittleEndian ()(int ,error ){_bbdf :=_fdc ._fbd -_fdc ._def ;if _bbdf < 0||_bbdf > 24{_ffg :=(_fdc ._fbd >>3)-_fdc ._gde ;if _ffg >=_fdc ._fac {_ffg +=_fdc ._gde ;if _afe :=_fdc .fillBuffer (_ffg );_afe !=nil {return 0,_afe ;};_ffg -=_fdc ._gde ;};_cef :=(uint32 (_fdc ._fad [_ffg ]&0xFF)<<16)|(uint32 (_fdc ._fad [_ffg +1]&0xFF)<<8)|(uint32 (_fdc ._fad [_ffg +2]&0xFF));_gac :=uint32 (_fdc ._fbd &7);_cef <<=_gac ;_fdc ._cee =int (_cef );}else {_aae :=_fdc ._def &7;_ebe :=7-_aae ;if _bbdf <=_ebe {_fdc ._cee <<=uint (_bbdf );}else {_gbf :=(_fdc ._def >>3)+3-_fdc ._gde ;if _gbf >=_fdc ._fac {_gbf +=_fdc ._gde ;if _cfff :=_fdc .fillBuffer (_gbf );_cfff !=nil {return 0,_cfff ;};_gbf -=_fdc ._gde ;};_aae =8-_aae ;for {_fdc ._cee <<=uint (_aae );_fdc ._cee |=int (uint (_fdc ._fad [_gbf ])&0xFF);_bbdf -=_aae ;_gbf ++;_aae =8;if !(_bbdf >=8){break ;};};_fdc ._cee <<=uint (_bbdf );};};_fdc ._def =_fdc ._fbd ;return _fdc ._cee ,nil ;};func (_fb *code )String ()string {return _d .Sprintf ("\u0025\u0064\u002f\u0025\u0064\u002f\u0025\u0064",_fb ._edc ,_fb ._b ,_fb ._f );};func (_ee *Decoder )uncompress1d (_ccfe *runData ,_fde []int ,_dcf int )(int ,error ){var (_agc =true ;_ffc int ;_aec *code ;_caa int ;_eef error ;);_dbe :for _ffc < _dcf {_gbd :for {if _agc {_aec ,_eef =_ccfe .uncompressGetCode (_ee ._da );if _eef !=nil {return 0,_eef ;};}else {_aec ,_eef =_ccfe .uncompressGetCode (_ee ._ec );if _eef !=nil {return 0,_eef ;};};_ccfe ._fbd +=_aec ._edc ;if _aec ._f < 0{break _dbe ;};_ffc +=_aec ._f ;if _aec ._f < 64{_agc =!_agc ;_fde [_caa ]=_ffc ;_caa ++;break _gbd ;};};};if _fde [_caa ]!=_dcf {_fde [_caa ]=_dcf ;};_bef :=EOL ;if _aec !=nil &&_aec ._f !=EOL {_bef =_caa ;};return _bef ,nil ;};type runData struct{_egb *_edb .SubstreamReader ;_fbd int ;_def int ;_cee int ;_fad []byte ;_gde int ;_fac int ;};type mmrCode int ;func New (r _edb .StreamReader ,width ,height int ,dataOffset ,dataLength int64 )(*Decoder ,error ){_ecc :=&Decoder {_de :width ,_bc :height };_ab ,_gga :=_edb .NewSubstreamReader (r ,uint64 (dataOffset ),uint64 (dataLength ));if _gga !=nil {return nil ,_gga ;};_fe ,_gga :=_cffa (_ab );if _gga !=nil {return nil ,_gga ;};_ecc ._bbee =_fe ;if _eb :=_ecc .initTables ();_eb !=nil {return nil ,_eb ;};return _ecc ,nil ;};func _af (_gb ,_ba int )int {if _gb < _ba {return _ba ;};return _gb ;};func _cffa (_aga *_edb .SubstreamReader )(*runData ,error ){_dgf :=&runData {_egb :_aga ,_fbd :0,_def :1};_defd :=_ea (_af (_ce ,int (_aga .Length ())),_dadc );_dgf ._fad =make ([]byte ,_defd );if _edcd :=_dgf .fillBuffer (0);_edcd !=nil {if _edcd ==_c .EOF {_dgf ._fad =make ([]byte ,10);_a .Log .Debug ("F\u0069\u006c\u006c\u0042uf\u0066e\u0072\u0020\u0066\u0061\u0069l\u0065\u0064\u003a\u0020\u0025\u0076",_edcd );}else {return nil ,_edcd ;};};return _dgf ,nil ;};func (_ebf *runData )uncompressGetCode (_cbd []*code )(*code ,error ){return _ebf .uncompressGetCodeLittleEndian (_cbd );};type Decoder struct{_de ,_bc int ;_bbee *runData ;_da []*code ;_ec []*code ;_dg []*code ;};func (_gcc *runData )fillBuffer (_eae int )error {_gcc ._gde =_eae ;_ ,_cdff :=_gcc ._egb .Seek (int64 (_eae ),_c .SeekStart );if _cdff !=nil {if _cdff ==_c .EOF {_a .Log .Debug ("\u0053\u0065\u0061\u006b\u0020\u0045\u004f\u0046");_gcc ._fac =-1;}else {return _cdff ;};};if _cdff ==nil {_gcc ._fac ,_cdff =_gcc ._egb .Read (_gcc ._fad );if _cdff !=nil {if _cdff ==_c .EOF {_a .Log .Trace ("\u0052\u0065\u0061\u0064\u0020\u0045\u004f\u0046");_gcc ._fac =-1;}else {return _cdff ;};};};if _gcc ._fac > -1&&_gcc ._fac < 3{for _gcc ._fac < 3{_cbdg ,_befc :=_gcc ._egb .ReadByte ();if _befc !=nil {if _befc ==_c .EOF {_gcc ._fad [_gcc ._fac ]=0;}else {return _befc ;};}else {_gcc ._fad [_gcc ._fac ]=_cbdg &0xFF;};_gcc ._fac ++;};};_gcc ._fac -=3;if _gcc ._fac < 0{_gcc ._fad =make ([]byte ,len (_gcc ._fad ));_gcc ._fac =len (_gcc ._fad )-3;};return nil ;};func _eg (_bb [3]int )*code {return &code {_edc :_bb [0],_b :_bb [1],_f :_bb [2]}};func (_dce *runData )uncompressGetCodeLittleEndian (_efe []*code )(*code ,error ){_acd ,_dfa :=_dce .uncompressGetNextCodeLittleEndian ();if _dfa !=nil {_a .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",_dfa );return nil ,_dfa ;};_acd &=0xffffff;_abd :=_acd >>(_bcc -_gf );_bd :=_efe [_abd ];if _bd !=nil &&_bd ._g {_abd =(_acd >>(_bcc -_gf -_efb ))&_ac ;_bd =_bd ._ef [_abd ];};return _bd ,nil ;};func (_gca *Decoder )UncompressMMR ()(_dc *_ae .Bitmap ,_eaf error ){_dc =_ae .New (_gca ._de ,_gca ._bc );_efa :=make ([]int ,_dc .Width +5);_ff :=make ([]int ,_dc .Width +5);_ff [0]=_dc .Width ;_gfa :=1;var _ded int ;for _fd :=0;_fd < _dc .Height ;_fd ++{_ded ,_eaf =_gca .uncompress2d (_gca ._bbee ,_ff ,_gfa ,_efa ,_dc .Width );if _eaf !=nil {return nil ,_eaf ;};if _ded ==EOF {break ;};if _ded > 0{_eaf =_gca .fillBitmap (_dc ,_fd ,_efa ,_ded );if _eaf !=nil {return nil ,_eaf ;};};_ff ,_efa =_efa ,_ff ;_gfa =_ded ;};if _eaf =_gca .detectAndSkipEOL ();_eaf !=nil {return nil ,_eaf ;};_gca ._bbee .align ();return _dc ,nil ;}; |