2020-09-07 00:23:12 +00:00
|
|
|
package fonts ;import (_g "bytes";_c "encoding/binary";_ab "errors";_a "fmt";_be "github.com/unidoc/unipdf/v3/common";_d "github.com/unidoc/unipdf/v3/core";_fe "github.com/unidoc/unipdf/v3/internal/cmap";_efe "github.com/unidoc/unipdf/v3/internal/textencoding";_ef "io";_b "os";_af "regexp";_ag "sort";_e "strings";_ed "sync";);type CharMetrics struct{Wx float64 ;Wy float64 ;};func _cda ()StdFont {_dd .Do (_cgd );_gba :=Descriptor {Name :HelveticaBoldName ,Family :string (HelveticaName ),Weight :FontWeightBold ,Flags :0x0020,BBox :[4]float64 {-170,-228,1003,962},ItalicAngle :0,Ascent :718,Descent :-207,CapHeight :718,XHeight :532,StemV :140,StemH :118};return NewStdFont (_gba ,_dfbf );};type GID =_efe .GID ;var _cea map[rune ]CharMetrics ;func (_bde *ttfParser )ParseName ()error {if _gaa :=_bde .Seek ("\u006e\u0061\u006d\u0065");_gaa !=nil {return _gaa ;};_cdf ,_ :=_bde ._age .Seek (0,_b .SEEK_CUR );_bde ._acea .PostScriptName ="";_bde .Skip (2);_fgacd :=_bde .ReadUShort ();_dff :=_bde .ReadUShort ();for _geeb :=uint16 (0);_geeb < _fgacd &&_bde ._acea .PostScriptName =="";_geeb ++{_bde .Skip (3*2);_gaaa :=_bde .ReadUShort ();_eeg :=_bde .ReadUShort ();_ebc :=_bde .ReadUShort ();if _gaaa ==6{_bde ._age .Seek (int64 (_cdf )+int64 (_dff )+int64 (_ebc ),_b .SEEK_SET );_dbea ,_gffc :=_bde .ReadStr (int (_eeg ));if _gffc !=nil {return _gffc ;};_dbea =_e .Replace (_dbea ,"\u0000","",-1);_ede ,_gffc :=_af .Compile ("\u005b\u0028\u0029\u007b\u007d\u003c\u003e\u0020\u002f%\u005b\u005c\u005d\u005d");if _gffc !=nil {return _gffc ;};_bde ._acea .PostScriptName =_ede .ReplaceAllString (_dbea ,"");};};if _bde ._acea .PostScriptName ==""{_be .Log .Debug ("\u0050a\u0072\u0073e\u004e\u0061\u006de\u003a\u0020\u0054\u0068\u0065\u0020\u006ea\u006d\u0065\u0020\u0050\u006f\u0073t\u0053\u0063\u0072\u0069\u0070\u0074\u0020\u0077\u0061\u0073\u0020n\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u002e");};return nil ;};func _dcd ()StdFont {_dfa :=_efe .NewZapfDingbatsEncoder ();_ec :=Descriptor {Name :ZapfDingbatsName ,Family :string (ZapfDingbatsName ),Weight :FontWeightMedium ,Flags :0x0004,BBox :[4]float64 {-1,-143,981,820},ItalicAngle :0,Ascent :0,Descent :0,CapHeight :0,XHeight :0,StemV :90,StemH :28};return NewStdFontWithEncoding (_ec ,_gaf ,_dfa );};var _ggf map[rune ]CharMetrics ;type Font interface{Encoder ()_efe .TextEncoder ;GetRuneMetrics (_fb rune )(CharMetrics ,bool );};const (FontWeightMedium FontWeight =iota ;FontWeightBold ;FontWeightRoman ;);func (_dcb *ttfParser )ReadULong ()(_bccg uint32 ){_c .Read (_dcb ._age ,_c .BigEndian ,&_bccg );return _bccg ;};func (_fcfc *ttfParser )Read32Fixed ()float64 {_beg :=float64 (_fcfc .ReadShort ());_dbeb :=float64 (_fcfc .ReadUShort ())/65536.0;return _beg +_dbeb ;};func (_eg StdFont )ToPdfObject ()_d .PdfObject {_bff :=_d .MakeDict ();_bff .Set ("\u0054\u0079\u0070\u0065",_d .MakeName ("\u0046\u006f\u006e\u0074"));_bff .Set ("\u0053u\u0062\u0074\u0079\u0070\u0065",_d .MakeName ("\u0054\u0079\u0070e\u0031"));_bff .Set ("\u0042\u0061\u0073\u0065\u0046\u006f\u006e\u0074",_d .MakeName (_eg .Name ()));_bff .Set ("\u0045\u006e\u0063\u006f\u0064\u0069\u006e\u0067",_eg ._fcd .ToPdfObject ());return _d .MakeIndirectObject (_bff );};var _gc map[rune ]CharMetrics ;var _fcg map[rune ]CharMetrics ;func (_gab *ttfParser )ParsePost ()error {if _cgaa :=_gab .Seek ("\u0070\u006f\u0073\u0074");_cgaa !=nil {return _cgaa ;};_fcgb :=_gab .Read32Fixed ();_gab ._acea .ItalicAngle =_gab .Read32Fixed ();_gab ._acea .UnderlinePosition =_gab .ReadShort ();_gab ._acea .UnderlineThickness =_gab .ReadShort ();_gab ._acea .IsFixedPitch =_gab .ReadULong ()!=0;_gab .ReadULong ();_gab .ReadULong ();_gab .ReadULong ();_gab .ReadULong ();_be .Log .Trace ("\u0050a\u0072\u0073\u0065\u0050\u006f\u0073\u0074\u003a\u0020\u0066\u006fr\u006d\u0061\u0074\u0054\u0079\u0070\u0065\u003d\u0025\u0066",_fcgb );switch _fcgb {case 1.0:_gab ._acea .GlyphNames =_cbc ;case 2.0:_aea :=int (_gab .ReadUShort ());_gfc :=make ([]int ,_aea );_gab ._acea .GlyphNames =make ([]GlyphName ,_aea );_efa :=-1;for _bfd :=0;_bfd < _aea ;_bfd ++{_gbcg :=int (_gab
|