mirror of
https://github.com/unidoc/unipdf.git
synced 2025-04-29 13:48:54 +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 (_e "errors";_c "fmt";_b "github.com/unidoc/unipdf/v3/common";_cd "github.com/unidoc/unipdf/v3/internal/bitwise";_a "github.com/unidoc/unipdf/v3/internal/jbig2/bitmap";_dc "io";);func (_bc *code )String ()string {return _c .Sprintf ("\u0025\u0064\u002f\u0025\u0064\u002f\u0025\u0064",_bc ._g ,_bc ._ca ,_bc ._ae );};func New (r _cd .StreamReader ,width ,height int ,dataOffset ,dataLength int64 )(*Decoder ,error ){_aea :=&Decoder {_ec :width ,_bbb :height };_gcg ,_bfd :=_cd .NewSubstreamReader (r ,uint64 (dataOffset ),uint64 (dataLength ));if _bfd !=nil {return nil ,_bfd ;};_fa ,_bfd :=_feef (_gcg );if _bfd !=nil {return nil ,_bfd ;};_aea ._fd =_fa ;if _caf :=_aea .initTables ();_caf !=nil {return nil ,_caf ;};return _aea ,nil ;};type runData struct{_dfg *_cd .SubstreamReader ;_dfe int ;_dfd int ;_bed int ;_dbf []byte ;_fcdd int ;_bef int ;};func (_dfc *Decoder )fillBitmap (_def *_a .Bitmap ,_dad int ,_fbc []int ,_db int )error {var _fee byte ;_dfcc :=0;_dbb :=_def .GetByteIndex (_dfcc ,_dad );for _efc :=0;_efc < _db ;_efc ++{_gdb :=byte (1);_cgg :=_fbc [_efc ];if (_efc &1)==0{_gdb =0;};for _dfcc < _cgg {_fee =(_fee <<1)|_gdb ;_dfcc ++;if (_dfcc &7)==0{if _daf :=_def .SetByte (_dbb ,_fee );_daf !=nil {return _daf ;};_dbb ++;_fee =0;};};};if (_dfcc &7)!=0{_fee <<=uint (8-(_dfcc &7));if _feb :=_def .SetByte (_dbb ,_fee );_feb !=nil {return _feb ;};};return nil ;};func (_abe *Decoder )initTables ()(_eee error ){if _abe ._bgf ==nil {_abe ._bgf ,_eee =_abe .createLittleEndianTable (_geg );if _eee !=nil {return ;};_abe ._fbe ,_eee =_abe .createLittleEndianTable (_cgc );if _eee !=nil {return ;};_abe ._ef ,_eee =_abe .createLittleEndianTable (_cde );if _eee !=nil {return ;};};return nil ;};func (_fbd *Decoder )createLittleEndianTable (_dee [][3]int )([]*code ,error ){_fec :=make ([]*code ,_af +1);for _ag :=0;_ag < len (_dee );_ag ++{_cag :=_egd (_dee [_ag ]);if _cag ._g <=_aed {_ecc :=_aed -_cag ._g ;_fc :=_cag ._ca <<uint (_ecc );for _ga :=(1<<uint (_ecc ))-1;_ga >=0;_ga --{_ab :=_fc |_ga ;_fec [_ab ]=_cag ;};}else {_bbg :=_cag ._ca >>uint (_cag ._g -_aed );if _fec [_bbg ]==nil {var _aac =_egd ([3]int {});_aac ._dca =make ([]*code ,_ge +1);_fec [_bbg ]=_aac ;};if _cag ._g <=_aed +_eae {_gd :=_aed +_eae -_cag ._g ;_aae :=(_cag ._ca <<uint (_gd ))&_ge ;_fec [_bbg ]._eg =true ;for _cb :=(1<<uint (_gd ))-1;_cb >=0;_cb --{_fec [_bbg ]._dca [_aae |_cb ]=_cag ;};}else {return nil ,_e .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 _fec ,nil ;};func (_ggb *runData )uncompressGetCode (_cdb []*code )(*code ,error ){return _ggb .uncompressGetCodeLittleEndian (_cdb );};const (_afe int =1024<<7;_gg int =3;_gaa uint =24;);type Decoder struct{_ec ,_bbb int ;_fd *runData ;_bgf []*code ;_fbe []*code ;_ef []*code ;};func (_afad *runData )uncompressGetNextCodeLittleEndian ()(int ,error ){_gda :=_afad ._dfe -_afad ._dfd ;if _gda < 0||_gda > 24{_eaa :=(_afad ._dfe >>3)-_afad ._fcdd ;if _eaa >=_afad ._bef {_eaa +=_afad ._fcdd ;if _ce :=_afad .fillBuffer (_eaa );_ce !=nil {return 0,_ce ;};_eaa -=_afad ._fcdd ;};_gdd :=(uint32 (_afad ._dbf [_eaa ]&0xFF)<<16)|(uint32 (_afad ._dbf [_eaa +1]&0xFF)<<8)|(uint32 (_afad ._dbf [_eaa +2]&0xFF));_cec :=uint32 (_afad ._dfe &7);_gdd <<=_cec ;_afad ._bed =int (_gdd );}else {_dda :=_afad ._dfd &7;_gbc :=7-_dda ;if _gda <=_gbc {_afad ._bed <<=uint (_gda );}else {_cbe :=(_afad ._dfd >>3)+3-_afad ._fcdd ;if _cbe >=_afad ._bef {_cbe +=_afad ._fcdd ;if _edb :=_afad .fillBuffer (_cbe );_edb !=nil {return 0,_edb ;};_cbe -=_afad ._fcdd ;};_dda =8-_dda ;for {_afad ._bed <<=uint (_dda );_afad ._bed |=int (uint (_afad ._dbf [_cbe ])&0xFF);_gda -=_dda ;_cbe ++;_dda =8;if !(_gda >=8){break ;};};_afad ._bed <<=uint (_gda );};};_afad ._dfd =_afad ._dfe ;return _afad ._bed ,nil ;};func (_bbe *Decoder )uncompress2d (_fgc *runData ,_eed []int ,_aeaf int ,_egf []int ,_bgb int )(int ,error ){var (_bd int ;_agf int ;_abc int ;_bce =true ;_bfb error ;_fdb *code ;);_eed [_aeaf ]=_bgb ;_eed [_aeaf +1]=_bgb ;_eed [_aeaf +2]=_bgb +1;_eed [_aeaf +3]=_bgb +1;_agg :for _abc < _bgb {_fdb ,_bfb =_fgc .uncompressGetCode (_bbe ._ef );if _bfb !=nil {return EOL ,nil ;};if _fdb ==nil {_fgc ._dfe ++;break _agg ;};_fgc ._dfe +=_fdb ._g ;switch mmrCode (_fdb ._ae ){case _bf :_abc =_eed [_bd ];case _fe :_abc =_eed [_bd ]+1;case _gf :_abc =_eed [_bd ]-1;case _aa :for {var _afa []*code ;if _bce {_afa =_bbe ._bgf ;}else {_afa =_bbe ._fbe ;};_fdb ,_bfb =_fgc .uncompressGetCode (_afa );if _bfb !=nil {return 0,_bfb ;};if _fdb ==nil {break _agg ;};_fgc ._dfe +=_fdb ._g ;if _fdb ._ae < 64{if _fdb ._ae < 0{_egf [_agf ]=_abc ;_agf ++;_fdb =nil ;break _agg ;};_abc +=_fdb ._ae ;_egf [_agf ]=_abc ;_agf ++;break ;};_abc +=_fdb ._ae ;};_eac :=_abc ;_ged :for {var _dbe []*code ;if !_bce {_dbe =_bbe ._bgf ;}else {_dbe =_bbe ._fbe ;};_fdb ,_bfb =_fgc .uncompressGetCode (_dbe );if _bfb !=nil {return 0,_bfb ;};if _fdb ==nil {break _agg ;};_fgc ._dfe +=_fdb ._g ;if _fdb ._ae < 64{if _fdb ._ae < 0{_egf [_agf ]=_abc ;_agf ++;break _agg ;};_abc +=_fdb ._ae ;if _abc < _bgb ||_abc !=_eac {_egf [_agf ]=_abc ;_agf ++;};break _ged ;};_abc +=_fdb ._ae ;};for _abc < _bgb &&_eed [_bd ]<=_abc {_bd +=2;};continue _agg ;case _df :_bd ++;_abc =_eed [_bd ];_bd ++;continue _agg ;case _bb :_abc =_eed [_bd ]+2;case _fg :_abc =_eed [_bd ]-2;case _ea :_abc =_eed [_bd ]+3;case _dg :_abc =_eed [_bd ]-3;default:if _fgc ._dfe ==12&&_fdb ._ae ==EOL {_fgc ._dfe =0;if _ ,_bfb =_bbe .uncompress1d (_fgc ,_eed ,_bgb );_bfb !=nil {return 0,_bfb ;};_fgc ._dfe ++;if _ ,_bfb =_bbe .uncompress1d (_fgc ,_egf ,_bgb );_bfb !=nil {return 0,_bfb ;};_gag ,_eeg :=_bbe .uncompress1d (_fgc ,_eed ,_bgb );if _eeg !=nil {return EOF ,_eeg ;};_fgc ._dfe ++;return _gag ,nil ;};_abc =_bgb ;continue _agg ;};if _abc <=_bgb {_bce =!_bce ;_egf [_agf ]=_abc ;_agf ++;if _bd > 0{_bd --;}else {_bd ++;};for _abc < _bgb &&_eed [_bd ]<=_abc {_bd +=2;};};};if _egf [_agf ]!=_bgb {_egf [_agf ]=_bgb ;};if _fdb ==nil {return EOL ,nil ;};return _agf ,nil ;};func (_ff *Decoder )UncompressMMR ()(_fga *_a .Bitmap ,_cf error ){_fga =_a .New (_ff ._ec ,_ff ._bbb );_de :=make ([]int ,_fga .Width +5);_cfa :=make ([]int ,_fga .Width +5);_cfa [0]=_fga .Width ;_bfe :=1;var _dea int ;for _be :=0;_be < _fga .Height ;_be ++{_dea ,_cf =_ff .uncompress2d (_ff ._fd ,_cfa ,_bfe ,_de ,_fga .Width );if _cf !=nil {return nil ,_cf ;};if _dea ==EOF {break ;};if _dea > 0{_cf =_ff .fillBitmap (_fga ,_be ,_de ,_dea );if _cf !=nil {return nil ,_cf ;};};_cfa ,_de =_de ,_cfa ;_bfe =_dea ;};if _cf =_ff .detectAndSkipEOL ();_cf !=nil {return nil ,_cf ;};_ff ._fd .align ();return _fga ,nil ;};func (_cbc *Decoder )uncompress1d (_baa *runData ,_fab []int ,_ega int )(int ,error ){var (_cad =true ;_cff int ;_fce *code ;_egg int ;_fcd error ;);_afg :for _cff < _ega {_daa :for {if _cad {_fce ,_fcd =_baa .uncompressGetCode (_cbc ._bgf );if _fcd !=nil {return 0,_fcd ;};}else {_fce ,_fcd =_baa .uncompressGetCode (_cbc ._fbe );if _fcd !=nil {return 0,_fcd ;};};_baa ._dfe +=_fce ._g ;if _fce ._ae < 0{break _afg ;};_cff +=_fce ._ae ;if _fce ._ae < 64{_cad =!_cad ;_fab [_egg ]=_cff ;_egg ++;break _daa ;};};};if _fab [_egg ]!=_ega {_fab [_egg ]=_ega ;};_gfd :=EOL ;if _fce !=nil &&_fce ._ae !=EOL {_gfd =_egg ;};return _gfd ,nil ;};type mmrCode int ;const (_df mmrCode =iota ;_aa ;_bf ;_fe ;_bb ;_ea ;_gf ;_fg ;_dg ;_ed ;_fb ;);func _egd (_dcab [3]int )*code {return &code {_g :_dcab [0],_ca :_dcab [1],_ae :_dcab [2]}};const (EOF =-3;_gc =-2;EOL =-1;_aed =8;_af =(1<<_aed )-1;_eae =5;_ge =(1<<_eae )-1;);var (_cde =[][3]int {{4,0x1,int (_df )},{3,0x1,int (_aa )},{1,0x1,int (_bf )},{3,0x3,int (_fe )},{6,0x3,int (_bb )},{7,0x3,int (_ea )},{3,0x2,int (_gf )},{6,0x2,int (_fg )},{7,0x2,int (_dg )},{10,0xf,int (_ed )},{12,0xf,int (_fb )},{12,0x1,int (EOL )}};_geg =[][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,_gc },{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,_gc },{11,0x01,_gc },{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}};_cgc =[][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,_gc },{9,0x18,15},{10,0x01,_gc },{10,0x17,16},{10,0x18,17},{10,0x37,0},{10,0x08,18},{10,0x0F,64},{11,0x01,_gc },{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}};);type code struct{_g int ;_ca int ;_ae int ;_dca []*code ;_eg bool ;};func _feef (_gad *_cd .SubstreamReader )(*runData ,error ){_dcc :=&runData {_dfg :_gad ,_dfe :0,_dfd :1};_gdc :=_bg (_cg (_gg ,int (_gad .Length ())),_afe );_dcc ._dbf =make ([]byte ,_gdc );if _egfe :=_dcc .fillBuffer (0);_egfe !=nil {if _egfe ==_dc .EOF {_dcc ._dbf =make ([]byte ,10);_b .Log .Debug ("F\u0069\u006c\u006c\u0042uf\u0066e\u0072\u0020\u0066\u0061\u0069l\u0065\u0064\u003a\u0020\u0025\u0076",_egfe );}else {return nil ,_egfe ;};};return _dcc ,nil ;};func (_aace *runData )fillBuffer (_aaa int )error {_aace ._fcdd =_aaa ;_ ,_gge :=_aace ._dfg .Seek (int64 (_aaa ),_dc .SeekStart );if _gge !=nil {if _gge ==_dc .EOF {_b .Log .Debug ("\u0053\u0065\u0061\u006b\u0020\u0045\u004f\u0046");_aace ._bef =-1;}else {return _gge ;};};if _gge ==nil {_aace ._bef ,_gge =_aace ._dfg .Read (_aace ._dbf );if _gge !=nil {if _gge ==_dc .EOF {_b .Log .Trace ("\u0052\u0065\u0061\u0064\u0020\u0045\u004f\u0046");_aace ._bef =-1;}else {return _gge ;};};};if _aace ._bef > -1&&_aace ._bef < 3{for _aace ._bef < 3{_ggc ,_gcgc :=_aace ._dfg .ReadByte ();if _gcgc !=nil {if _gcgc ==_dc .EOF {_aace ._dbf [_aace ._bef ]=0;}else {return _gcgc ;};}else {_aace ._dbf [_aace ._bef ]=_ggc &0xFF;};_aace ._bef ++;};};_aace ._bef -=3;if _aace ._bef < 0{_aace ._dbf =make ([]byte ,len (_aace ._dbf ));_aace ._bef =len (_aace ._dbf )-3;};return nil ;};func _cg (_da ,_f int )int {if _da < _f {return _f ;};return _da ;};func (_gff *runData )align (){_gff ._dfe =((_gff ._dfe +7)>>3)<<3};func (_gbb *runData )uncompressGetCodeLittleEndian (_dd []*code )(*code ,error ){_edg ,_ggf :=_gbb .uncompressGetNextCodeLittleEndian ();if _ggf !=nil {_b .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",_ggf );return nil ,_ggf ;};_edg &=0xffffff;_cc :=_edg >>(_gaa -_aed );_gba :=_dd [_cc ];if _gba !=nil &&_gba ._eg {_cc =(_edg >>(_gaa -_aed -_eae ))&_ge ;_gba =_gba ._dca [_cc ];};return _gba ,nil ;};func _bg (_ee ,_gb int )int {if _ee > _gb {return _gb ;};return _ee ;};func (_ba *Decoder )detectAndSkipEOL ()error {for {_cfc ,_fgf :=_ba ._fd .uncompressGetCode (_ba ._ef );if _fgf !=nil {return _fgf ;};if _cfc !=nil &&_cfc ._ae ==EOL {_ba ._fd ._dfe +=_cfc ._g ;}else {return nil ;};};}; |