2020-09-21 01:20:10 +00:00
|
|
|
package cmap ;import (_e "bufio";_dec "bytes";_f "encoding/hex";_bd "errors";_c "fmt";_dc "github.com/unidoc/unipdf/v3/common";_bf "github.com/unidoc/unipdf/v3/core";_db "github.com/unidoc/unipdf/v3/internal/cmap/bcmaps";_bg "io";_ca "sort";_b "strconv";_g "strings";_de "unicode/utf16";);func (cmap *CMap )Type ()int {return cmap ._ff };type charRange struct{_ef CharCode ;_gb CharCode ;};func (cmap *CMap )parseType ()error {_gdb :=0;_daea :=false ;for _fba :=0;_fba < 3&&!_daea ;_fba ++{_dba ,_decd :=cmap .parseObject ();if _decd !=nil {return _decd ;};switch _ffc :=_dba .(type ){case cmapOperand :switch _ffc .Operand {case "\u0064\u0065\u0066":_daea =true ;default:_dc .Log .Error ("\u0070\u0061r\u0073\u0065\u0054\u0079\u0070\u0065\u003a\u0020\u0073\u0074\u0061\u0074\u0065\u0020\u0065\u0072\u0072\u006f\u0072\u002e\u0020\u006f=%\u0023\u0076",_dba );return ErrBadCMap ;};case cmapInt :_gdb =int (_ffc ._dfd );};};cmap ._ff =_gdb ;return nil ;};type cmapDict struct{Dict map[string ]cmapObject ;};func (_bdgd *cMapParser )parseDict ()(cmapDict ,error ){_dc .Log .Trace ("\u0052\u0065\u0061\u0064\u0069\u006e\u0067\u0020\u0050\u0044\u0046\u0020D\u0069\u0063\u0074\u0021");_accc :=_eccd ();_ddf ,_ :=_bdgd ._bdede .ReadByte ();if _ddf !='<'{return _accc ,ErrBadCMapDict ;};_ddf ,_ =_bdgd ._bdede .ReadByte ();if _ddf !='<'{return _accc ,ErrBadCMapDict ;};for {_bdgd .skipSpaces ();_ddbe ,_eecf :=_bdgd ._bdede .Peek (2);if _eecf !=nil {return _accc ,_eecf ;};if (_ddbe [0]=='>')&&(_ddbe [1]=='>'){_bdgd ._bdede .ReadByte ();_bdgd ._bdede .ReadByte ();break ;};_cdd ,_eecf :=_bdgd .parseName ();_dc .Log .Trace ("\u004be\u0079\u003a\u0020\u0025\u0073",_cdd .Name );if _eecf !=nil {_dc .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a\u0020\u0052\u0065\u0074\u0075\u0072\u006e\u0069\u006e\u0067\u0020\u006e\u0061\u006d\u0065\u002e\u0020\u0065\u0072r=\u0025\u0076",_eecf );return _accc ,_eecf ;};_bdgd .skipSpaces ();_afcg ,_eecf :=_bdgd .parseObject ();if _eecf !=nil {return _accc ,_eecf ;};_accc .Dict [_cdd .Name ]=_afcg ;_bdgd .skipSpaces ();_ddbe ,_eecf =_bdgd ._bdede .Peek (3);if _eecf !=nil {return _accc ,_eecf ;};if string (_ddbe )=="\u0064\u0065\u0066"{_bdgd ._bdede .Discard (3);};};return _accc ,nil ;};func (_bdec *cMapParser )parseObject ()(cmapObject ,error ){_bdec .skipSpaces ();for {_efd ,_afd :=_bdec ._bdede .Peek (2);if _afd !=nil {return nil ,_afd ;};if _efd [0]=='%'{_bdec .parseComment ();_bdec .skipSpaces ();continue ;}else if _efd [0]=='/'{_gdc ,_gde :=_bdec .parseName ();return _gdc ,_gde ;}else if _efd [0]=='('{_decf ,_abd :=_bdec .parseString ();return _decf ,_abd ;}else if _efd [0]=='['{_eegc ,_bbg :=_bdec .parseArray ();return _eegc ,_bbg ;}else if (_efd [0]=='<')&&(_efd [1]=='<'){_gfdd ,_dbg :=_bdec .parseDict ();return _gfdd ,_dbg ;}else if _efd [0]=='<'{_eece ,_ged :=_bdec .parseHexString ();return _eece ,_ged ;}else if _bf .IsDecimalDigit (_efd [0])||(_efd [0]=='-'&&_bf .IsDecimalDigit (_efd [1])){_dee ,_afb :=_bdec .parseNumber ();if _afb !=nil {return nil ,_afb ;};return _dee ,nil ;}else {_bdgb ,_gae :=_bdec .parseOperand ();if _gae !=nil {return nil ,_gae ;};return _bdgb ,nil ;};};};type cmapArray struct{Array []cmapObject ;};func (cmap *CMap )BytesToCharcodes (data []byte )([]CharCode ,bool ){var _aab []CharCode ;if cmap ._dae ==8{for _ ,_ccf :=range data {_aab =append (_aab ,CharCode (_ccf ));};return _aab ,true ;};for _deb :=0;_deb < len (data );{_bca ,_eccf ,_acf :=cmap .matchCode (data [_deb :]);if !_acf {_dc .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a\u0020\u004e\u006f\u0020\u0063\u006f\u0064\u0065\u0020\u006d\u0061\u0074\u0063\u0068\u0020\u0061\u0074\u0020\u0069\u003d\u0025\u0064\u0020\u0062\u0079\u0074\u0065\u0073\u003d\u005b\u0025\u0020\u0030\u0032\u0078\u005d\u003d\u0025\u0023\u0071",_deb ,data ,string (data ));return _aab ,false ;};_aab =append (_aab ,_bca );_deb +=_eccf ;};return _aab ,true ;};type CMap struct{*cMapParser ;_bc string ;_dae int ;_ff int ;_ffg string ;_cae string ;_ee CIDSystemInfo ;_bdg []Codespace ;_fe map[CharCode ]CharCode ;_cg map[CharCode ]CharCode ;_cbc map[CharCode ]string ;_gf map[strin
|