mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-02 22:17:06 +08:00
112 lines
29 KiB
Go
112 lines
29 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 svg ;import (_gf "encoding/xml";_gc "fmt";_ag "github.com/unidoc/unipdf/v3/common";_gd "github.com/unidoc/unipdf/v3/contentstream";_gb "github.com/unidoc/unipdf/v3/contentstream/draw";_eb "github.com/unidoc/unipdf/v3/internal/graphic2d";_af "golang.org/x/net/html/charset";
|
|
_b "io";_e "math";_ac "os";_fg "strconv";_g "strings";_f "unicode";);type Subpath struct{Commands []*Command ;};func (_gfg *GraphicSVG )Decode (decoder *_gf .Decoder )error {for {_dacd ,_dcc :=decoder .Token ();if _dacd ==nil &&_dcc ==_b .EOF {break ;};
|
|
if _dcc !=nil {return _dcc ;};switch _bdeg :=_dacd .(type ){case _gf .StartElement :_daa :=_face (_bdeg );_gdc :=_daa .Decode (decoder );if _gdc !=nil {return _gdc ;};_gfg .Children =append (_gfg .Children ,_daa );case _gf .CharData :_ceb :=_g .TrimSpace (string (_bdeg ));
|
|
if _ceb !=""{_gfg .Content =string (_bdeg );};case _gf .EndElement :if _bdeg .Name .Local ==_gfg .Name {return nil ;};};};return nil ;};func _df ()*GraphicSVGStyle {return &GraphicSVGStyle {FillColor :"\u00230\u0030\u0030\u0030\u0030\u0030",StrokeColor :"",StrokeWidth :0};
|
|
};func _dccg (_agb []token ,_fgae string )([]token ,string ){if _fgae !=""{_agb =append (_agb ,token {_fgae ,false });_fgae ="";};return _agb ,_fgae ;};func _face (_bfg _gf .StartElement )*GraphicSVG {_cfd :=&GraphicSVG {};_gg :=make (map[string ]string );
|
|
for _ ,_beg :=range _bfg .Attr {_gg [_beg .Name .Local ]=_beg .Value ;};_cfd .Name =_bfg .Name .Local ;_cfd .Attributes =_gg ;_cfd ._fe =1;if _cfd .Name =="\u0073\u0076\u0067"{_gcdc ,_dge :=_dae (_gg ["\u0076i\u0065\u0077\u0042\u006f\u0078"]);if _dge !=nil {_ag .Log .Debug ("\u0055\u006ea\u0062\u006c\u0065\u0020t\u006f\u0020p\u0061\u0072\u0073\u0065\u0020\u0076\u0069\u0065w\u0042\u006f\u0078\u0020\u0061\u0074\u0074\u0072\u0069\u0062\u0075\u0074e\u003a\u0020\u0025\u0076",_dge );
|
|
return nil ;};_cfd .ViewBox .X =_gcdc [0];_cfd .ViewBox .Y =_gcdc [1];_cfd .ViewBox .W =_gcdc [2];_cfd .ViewBox .H =_gcdc [3];_cfd .Width =_cfd .ViewBox .W ;_cfd .Height =_cfd .ViewBox .H ;if _accd ,_ada :=_gg ["\u0077\u0069\u0064t\u0068"];_ada {_fce ,_efg :=_fbg (_accd ,64);
|
|
if _efg !=nil {_ag .Log .Debug ("U\u006e\u0061\u0062\u006c\u0065\u0020t\u006f\u0020\u0070\u0061\u0072\u0073e\u0020\u0077\u0069\u0064\u0074\u0068\u0020a\u0074\u0074\u0072\u0069\u0062\u0075\u0074\u0065\u003a\u0020%\u0076",_efg );return nil ;};_cfd .Width =_fce ;
|
|
};if _efgf ,_ggb :=_gg ["\u0068\u0065\u0069\u0067\u0068\u0074"];_ggb {_bec ,_eea :=_fbg (_efgf ,64);if _eea !=nil {_ag .Log .Debug ("\u0055\u006eab\u006c\u0065\u0020t\u006f\u0020\u0070\u0061rse\u0020he\u0069\u0067\u0068\u0074\u0020\u0061\u0074tr\u0069\u0062\u0075\u0074\u0065\u003a\u0020%\u0076",_eea );
|
|
return nil ;};_cfd .Height =_bec ;};if _cfd .Width > 0&&_cfd .Height > 0{_cfd ._fe =_cfd .Width /_cfd .ViewBox .W ;};};return _cfd ;};const (_fb =0.72;_bc =28.3464;_gcc =_bc /10;_eg =0.551784;);func ParseFromStream (source _b .Reader )(*GraphicSVG ,error ){_gbd :=_gf .NewDecoder (source );
|
|
_gbd .CharsetReader =_af .NewReaderLabel ;_dda ,_bdb :=_ggf (_gbd );if _bdb !=nil {return nil ,_bdb ;};if _cdc :=_dda .Decode (_gbd );_cdc !=nil &&_cdc !=_b .EOF {return nil ,_cdc ;};return _dda ,nil ;};func _efe (_fgg string )[]token {var (_gfgg []token ;
|
|
_fed string ;);for _ ,_eac :=range _fgg {_gbdff :=string (_eac );switch {case _bda .isCommand (_gbdff ):_gfgg ,_fed =_dccg (_gfgg ,_fed );_gfgg =append (_gfgg ,token {_gbdff ,true });case _gbdff =="\u002e":if _fed ==""{_fed ="\u0030";};if _g .Contains (_fed ,_gbdff ){_gfgg =append (_gfgg ,token {_fed ,false });
|
|
_fed ="\u0030";};fallthrough;case _gbdff >="\u0030"&&_gbdff <="\u0039"||_gbdff =="\u0065":_fed +=_gbdff ;case _gbdff =="\u002d":if _g .HasSuffix (_fed ,"\u0065"){_fed +=_gbdff ;}else {_gfgg ,_ =_dccg (_gfgg ,_fed );_fed =_gbdff ;};default:_gfgg ,_fed =_dccg (_gfgg ,_fed );
|
|
};};_gfgg ,_ =_dccg (_gfgg ,_fed );return _gfgg ;};var _bda commands ;type GraphicSVG struct{ViewBox struct{X ,Y ,W ,H float64 ;};Name string ;Attributes map[string ]string ;Children []*GraphicSVG ;Content string ;Style *GraphicSVGStyle ;Width float64 ;
|
|
Height float64 ;_fe float64 ;};func (_aee *Path )compare (_ffd *Path )bool {if len (_aee .Subpaths )!=len (_ffd .Subpaths ){return false ;};for _bbg ,_afcf :=range _aee .Subpaths {if !_afcf .compare (_ffd .Subpaths [_bbg ]){return false ;};};return true ;
|
|
};func ParseFromFile (path string )(*GraphicSVG ,error ){_beeg ,_gfaa :=_ac .Open (path );if _gfaa !=nil {return nil ,_gfaa ;};defer _beeg .Close ();return ParseFromStream (_beeg );};func ParseFromString (svgStr string )(*GraphicSVG ,error ){return ParseFromStream (_g .NewReader (svgStr ));
|
|
};func (_cee pathParserError )Error ()string {return _cee ._bgc };func _gecc (_cec string )(*Path ,error ){_bda =_dgbe ();_gaae ,_fddcc :=_feea (_efe (_cec ));if _fddcc !=nil {return nil ,_fddcc ;};return _dead (_gaae ),nil ;};func _dbde (_fca *GraphicSVG ,_bf *_gd .ContentCreator ){_bf .Add_q ();
|
|
_fca .Style .toContentStream (_bf );_beb ,_bea :=_dae (_fca .Attributes ["\u0070\u006f\u0069\u006e\u0074\u0073"]);if _bea !=nil {_ag .Log .Debug ("\u0045\u0052\u0052O\u0052\u0020\u0075\u006e\u0061\u0062\u006c\u0065\u0020\u0074\u006f\u0020\u0070\u0061\u0072\u0073\u0065\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u0061\u0074\u0074\u0072i\u0062\u0075\u0074\u0065\u003a\u0020\u0025\u0076",_bea );
|
|
return ;};if len (_beb )%2> 0{_ag .Log .Debug ("\u0045\u0052R\u004f\u0052\u0020\u0069n\u0076\u0061l\u0069\u0064\u0020\u0070\u006f\u0069\u006e\u0074s\u0020\u0061\u0074\u0074\u0072\u0069\u0062\u0075\u0074\u0065\u0020\u006ce\u006e\u0067\u0074\u0068");return ;
|
|
};for _def :=0;_def < len (_beb );{if _def ==0{_bf .Add_m (_beb [_def ]*_fca ._fe ,_beb [_def +1]*_fca ._fe );}else {_bf .Add_l (_beb [_def ]*_fca ._fe ,_beb [_def +1]*_fca ._fe );};_def +=2;};_bf .Add_l (_beb [0]*_fca ._fe ,_beb [1]*_fca ._fe );if _fca .Style .FillColor !=""&&_fca .Style .StrokeColor !=""{_bf .Add_B ();
|
|
}else if _fca .Style .FillColor !=""{_bf .Add_f ();}else if _fca .Style .StrokeColor !=""{_bf .Add_S ();};_bf .Add_h ();_bf .Add_Q ();};func (_bfgg *Command )isAbsolute ()bool {return _bfgg .Symbol ==_g .ToUpper (_bfgg .Symbol )};func (_ccfa *commands )isCommand (_cgde string )bool {for _ ,_afe :=range _ccfa ._cef {if _g .ToLower (_cgde )==_afe {return true ;
|
|
};};return false ;};func _feea (_dccb []token )([]*Command ,error ){var (_deae []*Command ;_afag []float64 ;);for _gfe :=len (_dccb )-1;_gfe >=0;_gfe --{_fdc :=_dccb [_gfe ];if _fdc ._ecd {_dgd :=_bda ._cbb [_g .ToLower (_fdc ._fddc )];_ddd :=len (_afag );
|
|
if _dgd ==0&&_ddd ==0{_ebe :=&Command {Symbol :_fdc ._fddc };_deae =append ([]*Command {_ebe },_deae ...);}else if _dgd !=0&&_ddd %_dgd ==0{_gfdf :=_ddd /_dgd ;for _fegg :=0;_fegg < _gfdf ;_fegg ++{_cba :=_fdc ._fddc ;if _cba =="\u006d"&&_fegg < _gfdf -1{_cba ="\u006c";
|
|
};if _cba =="\u004d"&&_fegg < _gfdf -1{_cba ="\u004c";};_dded :=&Command {_cba ,_bca (_afag [:_dgd ])};_deae =append ([]*Command {_dded },_deae ...);_afag =_afag [_dgd :];};}else {_bfa :=pathParserError {"I\u006e\u0063\u006f\u0072\u0072\u0065c\u0074\u0020\u006e\u0075\u006d\u0062e\u0072\u0020\u006f\u0066\u0020\u0070\u0061r\u0061\u006d\u0065\u0074\u0065\u0072\u0073\u0020\u0066\u006fr\u0020"+_fdc ._fddc };
|
|
return nil ,_bfa ;};}else {_bbbd ,_ebed :=_fbg (_fdc ._fddc ,64);if _ebed !=nil {return nil ,_ebed ;};_afag =append (_afag ,_bbbd );};};return _deae ,nil ;};type token struct{_fddc string ;_ecd bool ;};func (_eef *GraphicSVGStyle )toContentStream (_fee *_gd .ContentCreator ){if _eef ==nil {return ;
|
|
};if _eef .FillColor !=""{var _agf ,_ecfc ,_ebg float64 ;if _gaa ,_acb :=_eb .ColorMap [_eef .FillColor ];_acb {_ggc ,_bbd ,_dbfg ,_ :=_gaa .RGBA ();_agf ,_ecfc ,_ebg =float64 (_ggc ),float64 (_bbd ),float64 (_dbfg );}else {_agf ,_ecfc ,_ebg =_bgeg (_eef .FillColor );
|
|
};_fee .Add_rg (_agf ,_ecfc ,_ebg );};if _eef .StrokeColor !=""{var _edb ,_faf ,_aag float64 ;if _dba ,_cgg :=_eb .ColorMap [_eef .StrokeColor ];_cgg {_bbfc ,_eecf ,_fbbd ,_ :=_dba .RGBA ();_edb ,_faf ,_aag =float64 (_bbfc )/255.0,float64 (_eecf )/255.0,float64 (_fbbd )/255.0;
|
|
}else {_edb ,_faf ,_aag =_bgeg (_eef .StrokeColor );};_fee .Add_RG (_edb ,_faf ,_aag );};if _eef .StrokeWidth > 0{_fee .Add_w (_eef .StrokeWidth );};};func _ggf (_eda *_gf .Decoder )(*GraphicSVG ,error ){for {_aea ,_fadb :=_eda .Token ();if _aea ==nil &&_fadb ==_b .EOF {break ;
|
|
};if _fadb !=nil {return nil ,_fadb ;};switch _cbf :=_aea .(type ){case _gf .StartElement :return _face (_cbf ),nil ;};};return &GraphicSVG {},nil ;};func (_ddfb *GraphicSVG )ToContentCreator (cc *_gd .ContentCreator )*_gd .ContentCreator {if _ddfb .Name =="\u0073\u0076\u0067"{cc .Add_cm (1,0,0,1,0,0);
|
|
_ddfb .setDefaultScaling (_ddfb ._fe );for _ ,_afc :=range _ddfb .Children {_afc .ViewBox =_ddfb .ViewBox ;_afc .toContentStream (cc );};return cc ;};return nil ;};func _bbf (_ddf *GraphicSVG ,_gag *_gd .ContentCreator ){_gag .Add_q ();_ddf .Style .toContentStream (_gag );
|
|
_ece ,_fgf :=_fbg (_ddf .Attributes ["\u0078\u0031"],64);if _fgf !=nil {_ag .Log .Debug ("\u0045\u0072\u0072or\u0020\u0077\u0068\u0069\u006c\u0065\u0020\u0070\u0061r\u0073i\u006eg\u0020`\u0063\u0078\u0060\u0020\u0076\u0061\u006c\u0075\u0065\u003a\u0020\u0025\u0076",_fgf .Error ());
|
|
};_deg ,_fgf :=_fbg (_ddf .Attributes ["\u0079\u0031"],64);if _fgf !=nil {_ag .Log .Debug ("\u0045\u0072\u0072or\u0020\u0077\u0068\u0069\u006c\u0065\u0020\u0070\u0061r\u0073i\u006eg\u0020`\u0063\u0079\u0060\u0020\u0076\u0061\u006c\u0075\u0065\u003a\u0020\u0025\u0076",_fgf .Error ());
|
|
};_dea ,_fgf :=_fbg (_ddf .Attributes ["\u0078\u0032"],64);if _fgf !=nil {_ag .Log .Debug ("\u0045\u0072\u0072or\u0020\u0077\u0068\u0069\u006c\u0065\u0020\u0070\u0061r\u0073i\u006eg\u0020`\u0072\u0078\u0060\u0020\u0076\u0061\u006c\u0075\u0065\u003a\u0020\u0025\u0076",_fgf .Error ());
|
|
};_gabf ,_fgf :=_fbg (_ddf .Attributes ["\u0079\u0032"],64);if _fgf !=nil {_ag .Log .Debug ("\u0045\u0072\u0072or\u0020\u0077\u0068\u0069\u006c\u0065\u0020\u0070\u0061r\u0073i\u006eg\u0020`\u0072\u0079\u0060\u0020\u0076\u0061\u006c\u0075\u0065\u003a\u0020\u0025\u0076",_fgf .Error ());
|
|
};_gag .Add_m (_ece *_ddf ._fe ,_deg *_ddf ._fe );_gag .Add_l (_dea *_ddf ._fe ,_gabf *_ddf ._fe );if _ddf .Style .FillColor !=""&&_ddf .Style .StrokeColor !=""{_gag .Add_B ();}else if _ddf .Style .FillColor !=""{_gag .Add_f ();}else if _ddf .Style .StrokeColor !=""{_gag .Add_S ();
|
|
};_gag .Add_h ();_gag .Add_Q ();};func _ebgf (_ege float64 ,_degbb int )float64 {_gdg :=_e .Pow (10,float64 (_degbb ));return float64 (_ebdd (_ege *_gdg ))/_gdg ;};func _bbb (_bde *GraphicSVG ,_dgb *_gd .ContentCreator ){_dgb .Add_q ();_bde .Style .toContentStream (_dgb );
|
|
_dbf ,_ea :=_fbg (_bde .Attributes ["\u0078"],64);if _ea !=nil {_ag .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u0020w\u0068\u0069\u006c\u0065\u0020\u0070\u0061\u0072\u0073\u0069\u006e\u0067\u0020`\u0078\u0060\u0020\u0076\u0061\u006c\u0075e\u003a\u0020\u0025\u0076",_ea .Error ());
|
|
};_gccg ,_ea :=_fbg (_bde .Attributes ["\u0079"],64);if _ea !=nil {_ag .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u0020w\u0068\u0069\u006c\u0065\u0020\u0070\u0061\u0072\u0073\u0069\u006e\u0067\u0020`\u0079\u0060\u0020\u0076\u0061\u006c\u0075e\u003a\u0020\u0025\u0076",_ea .Error ());
|
|
};_egf ,_ea :=_fbg (_bde .Attributes ["\u0077\u0069\u0064t\u0068"],64);if _ea !=nil {_ag .Log .Debug ("\u0045\u0072\u0072o\u0072\u0020\u0077\u0068\u0069\u006c\u0065\u0020\u0070\u0061\u0072\u0073\u0069\u006e\u0067\u0020\u0073\u0074\u0072\u006f\u006b\u0065\u0020\u0077\u0069\u0064\u0074\u0068\u0020v\u0061\u006c\u0075\u0065\u003a\u0020\u0025\u0076",_ea .Error ());
|
|
};_fdg ,_ea :=_fbg (_bde .Attributes ["\u0068\u0065\u0069\u0067\u0068\u0074"],64);if _ea !=nil {_ag .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u0020\u0077h\u0069\u006c\u0065 \u0070\u0061\u0072\u0073i\u006e\u0067\u0020\u0073\u0074\u0072\u006f\u006b\u0065\u0020\u0068\u0065\u0069\u0067\u0068\u0074\u0020\u0076\u0061\u006c\u0075\u0065\u003a\u0020\u0025\u0076",_ea .Error ());
|
|
};_dgb .Add_re (_dbf *_bde ._fe ,_gccg *_bde ._fe ,_egf *_bde ._fe ,_fdg *_bde ._fe );if _bde .Style .FillColor !=""&&_bde .Style .StrokeColor !=""{_dgb .Add_B ();}else if _bde .Style .FillColor !=""{_dgb .Add_f ();}else if _bde .Style .StrokeColor !=""{_dgb .Add_S ();
|
|
};_dgb .Add_Q ();};func _dae (_bbde string )([]float64 ,error ){_gbad :=-1;var _ddea []float64 ;_baf :=' ';for _feef ,_aae :=range _bbde {if !_f .IsNumber (_aae )&&_aae !='.'&&!(_aae =='-'&&_baf =='e')&&_aae !='e'{if _gbad !=-1{_fafb ,_gbe :=_ddac (_bbde [_gbad :_feef ]);
|
|
if _gbe !=nil {return _ddea ,_gbe ;};_ddea =append (_ddea ,_fafb ...);};if _aae =='-'{_gbad =_feef ;}else {_gbad =-1;};}else if _gbad ==-1{_gbad =_feef ;};_baf =_aae ;};if _gbad !=-1&&_gbad !=len (_bbde ){_adf ,_gfef :=_ddac (_bbde [_gbad :]);if _gfef !=nil {return _ddea ,_gfef ;
|
|
};_ddea =append (_ddea ,_adf ...);};return _ddea ,nil ;};func (_dcgc *GraphicSVG )setDefaultScaling (_gde float64 ){_dcgc ._fe =_gde ;if _dcgc .Style !=nil &&_dcgc .Style .StrokeWidth > 0{_dcgc .Style .StrokeWidth =_dcgc .Style .StrokeWidth *_dcgc ._fe ;
|
|
};for _ ,_fdgb :=range _dcgc .Children {_fdgb .setDefaultScaling (_gde );};};func _bgeg (_dbfe string )(_cfb ,_bdba ,_dbbg float64 ){if (len (_dbfe )!=4&&len (_dbfe )!=7)||_dbfe [0]!='#'{_ag .Log .Debug ("I\u006ev\u0061\u006c\u0069\u0064\u0020\u0068\u0065\u0078 \u0063\u006f\u0064\u0065: \u0025\u0073",_dbfe );
|
|
return _cfb ,_bdba ,_dbbg ;};var _bcdg ,_faa ,_fbbb int ;if len (_dbfe )==4{var _dadf ,_acec ,_ggbe int ;_egef ,_fege :=_gc .Sscanf (_dbfe ,"\u0023\u0025\u0031\u0078\u0025\u0031\u0078\u0025\u0031\u0078",&_dadf ,&_acec ,&_ggbe );if _fege !=nil {_ag .Log .Debug ("\u0049\u006e\u0076a\u006c\u0069\u0064\u0020h\u0065\u0078\u0020\u0063\u006f\u0064\u0065:\u0020\u0025\u0073\u002c\u0020\u0065\u0072\u0072\u006f\u0072\u003a\u0020\u0025\u0076",_dbfe ,_fege );
|
|
return _cfb ,_bdba ,_dbbg ;};if _egef !=3{_ag .Log .Debug ("I\u006ev\u0061\u006c\u0069\u0064\u0020\u0068\u0065\u0078 \u0063\u006f\u0064\u0065: \u0025\u0073",_dbfe );return _cfb ,_bdba ,_dbbg ;};_bcdg =_dadf *16+_dadf ;_faa =_acec *16+_acec ;_fbbb =_ggbe *16+_ggbe ;
|
|
}else {_bfc ,_bfb :=_gc .Sscanf (_dbfe ,"\u0023\u0025\u0032\u0078\u0025\u0032\u0078\u0025\u0032\u0078",&_bcdg ,&_faa ,&_fbbb );if _bfb !=nil {_ag .Log .Debug ("I\u006ev\u0061\u006c\u0069\u0064\u0020\u0068\u0065\u0078 \u0063\u006f\u0064\u0065: \u0025\u0073",_dbfe );
|
|
return _cfb ,_bdba ,_dbbg ;};if _bfc !=3{_ag .Log .Debug ("\u0049\u006e\u0076\u0061\u006c\u0069d\u0020\u0068\u0065\u0078\u0020\u0063\u006f\u0064\u0065\u003a\u0020\u0025\u0073,\u0020\u006e\u0020\u0021\u003d\u0020\u0033 \u0028\u0025\u0064\u0029",_dbfe ,_bfc );
|
|
return _cfb ,_bdba ,_dbbg ;};};_gbc :=float64 (_bcdg )/255.0;_acd :=float64 (_faa )/255.0;_ccdfa :=float64 (_fbbb )/255.0;return _gbc ,_acd ,_ccdfa ;};func _dead (_efd []*Command )*Path {_dcgcf :=&Path {};var _fbe []*Command ;for _gedb ,_gad :=range _efd {switch _g .ToLower (_gad .Symbol ){case _bda ._beeb :if len (_fbe )> 0{_dcgcf .Subpaths =append (_dcgcf .Subpaths ,&Subpath {_fbe });
|
|
};_fbe =[]*Command {_gad };case _bda ._gbae :_fbe =append (_fbe ,_gad );_dcgcf .Subpaths =append (_dcgcf .Subpaths ,&Subpath {_fbe });_fbe =[]*Command {};default:_fbe =append (_fbe ,_gad );if len (_efd )==_gedb +1{_dcgcf .Subpaths =append (_dcgcf .Subpaths ,&Subpath {_fbe });
|
|
};};};return _dcgcf ;};func _ddac (_ccda string )(_feb []float64 ,_bcd error ){var _aefb float64 ;_gfaag :=0;_eefb :=true ;for _cfg ,_cdbe :=range _ccda {if _cdbe =='.'{if _eefb {_eefb =false ;continue ;};_aefb ,_bcd =_fbg (_ccda [_gfaag :_cfg ],64);if _bcd !=nil {return ;
|
|
};_feb =append (_feb ,_aefb );_gfaag =_cfg ;};};_aefb ,_bcd =_fbg (_ccda [_gfaag :],64);if _bcd !=nil {return ;};_feb =append (_feb ,_aefb );return ;};func _fbg (_ffda string ,_dbb int )(float64 ,error ){_adc ,_fgfd :=_dce (_ffda );_ede ,_dbg :=_fg .ParseFloat (_adc ,_dbb );
|
|
if _dbg !=nil {return 0,_dbg ;};if _gabe ,_febe :=_egg [_fgfd ];_febe {_ede =_ede *_gabe ;}else {_ede =_ede *_fb ;};return _ede ,nil ;};func _gba (_gbdf map[string ]string ,_bga float64 )(*GraphicSVGStyle ,error ){_ddfa :=_df ();_fff ,_bbae :=_gbdf ["\u0066\u0069\u006c\u006c"];
|
|
if _bbae {_ddfa .FillColor =_fff ;if _fff =="\u006e\u006f\u006e\u0065"{_ddfa .FillColor ="";};};_ccb ,_bgef :=_gbdf ["\u0073\u0074\u0072\u006f\u006b\u0065"];if _bgef {_ddfa .StrokeColor =_ccb ;if _ccb =="\u006e\u006f\u006e\u0065"{_ddfa .StrokeColor ="";
|
|
};};_egc ,_eceg :=_gbdf ["\u0073\u0074\u0072o\u006b\u0065\u002d\u0077\u0069\u0064\u0074\u0068"];if _eceg {_eaa ,_baec :=_fbg (_egc ,64);if _baec !=nil {return nil ,_baec ;};_ddfa .StrokeWidth =_eaa *_bga ;};return _ddfa ,nil ;};func _ec (_ff *GraphicSVG ,_gce *_gd .ContentCreator ){_gce .Add_q ();
|
|
_ff .Style .toContentStream (_gce );_fc ,_ga :=_gecc (_ff .Attributes ["\u0064"]);if _ga !=nil {_ag .Log .Error ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025s",_ga .Error ());};var (_d ,_de =0.0,0.0;_aff ,_dc =0.0,0.0;_ad *Command ;);for _ ,_gdd :=range _fc .Subpaths {for _ ,_bd :=range _gdd .Commands {switch _g .ToLower (_bd .Symbol ){case "\u006d":_aff ,_dc =_bd .Params [0]*_ff ._fe ,_bd .Params [1]*_ff ._fe ;
|
|
if !_bd .isAbsolute (){_aff ,_dc =_d +_aff -_ff .ViewBox .X ,_de +_dc -_ff .ViewBox .Y ;};_gce .Add_m (_ebgf (_aff ,3),_ebgf (_dc ,3));_d ,_de =_aff ,_dc ;case "\u0063":_ef ,_fbc ,_bg ,_dg ,_ebf ,_da :=_bd .Params [0]*_ff ._fe ,_bd .Params [1]*_ff ._fe ,_bd .Params [2]*_ff ._fe ,_bd .Params [3]*_ff ._fe ,_bd .Params [4]*_ff ._fe ,_bd .Params [5]*_ff ._fe ;
|
|
if !_bd .isAbsolute (){_ef ,_fbc ,_bg ,_dg ,_ebf ,_da =_d +_ef ,_de +_fbc ,_d +_bg ,_de +_dg ,_d +_ebf ,_de +_da ;};_gce .Add_c (_ebgf (_ef ,3),_ebgf (_fbc ,3),_ebgf (_bg ,3),_ebgf (_dg ,3),_ebgf (_ebf ,3),_ebgf (_da ,3));_d ,_de =_ebf ,_da ;case "\u0073":_bcc ,_gcf ,_ed ,_bb :=_bd .Params [0]*_ff ._fe ,_bd .Params [1]*_ff ._fe ,_bd .Params [2]*_ff ._fe ,_bd .Params [3]*_ff ._fe ;
|
|
if !_bd .isAbsolute (){_bcc ,_gcf ,_ed ,_bb =_d +_bcc ,_de +_gcf ,_d +_ed ,_de +_bb ;};_gce .Add_c (_ebgf (_d ,3),_ebgf (_de ,3),_ebgf (_bcc ,3),_ebgf (_gcf ,3),_ebgf (_ed ,3),_ebgf (_bb ,3));_d ,_de =_ed ,_bb ;case "\u006c":_be ,_c :=_bd .Params [0]*_ff ._fe ,_bd .Params [1]*_ff ._fe ;
|
|
if !_bd .isAbsolute (){_be ,_c =_d +_be ,_de +_c ;};_gce .Add_l (_ebgf (_be ,3),_ebgf (_c ,3));_d ,_de =_be ,_c ;case "\u0068":_cd :=_bd .Params [0]*_ff ._fe ;if !_bd .isAbsolute (){_cd =_d +_cd ;};_gce .Add_l (_ebgf (_cd ,3),_ebgf (_de ,3));_d =_cd ;case "\u0076":_dac :=_bd .Params [0]*_ff ._fe ;
|
|
if !_bd .isAbsolute (){_dac =_de +_dac ;};_gce .Add_l (_ebgf (_d ,3),_ebgf (_dac ,3));_de =_dac ;case "\u0071":_fa ,_ca ,_fac ,_dgf :=_bd .Params [0]*_ff ._fe ,_bd .Params [1]*_ff ._fe ,_bd .Params [2]*_ff ._fe ,_bd .Params [3]*_ff ._fe ;if !_bd .isAbsolute (){_fa ,_ca ,_fac ,_dgf =_d +_fa ,_de +_ca ,_d +_fac ,_de +_dgf ;
|
|
};_fad ,_fbb :=_eb .QuadraticToCubicBezier (_d ,_de ,_fa ,_ca ,_fac ,_dgf );_gce .Add_c (_ebgf (_fad .X ,3),_ebgf (_fad .Y ,3),_ebgf (_fbb .X ,3),_ebgf (_fbb .Y ,3),_ebgf (_fac ,3),_ebgf (_dgf ,3));_d ,_de =_fac ,_dgf ;case "\u0074":var _fbf ,_egd _eb .Point ;
|
|
_fde ,_ae :=_bd .Params [0]*_ff ._fe ,_bd .Params [1]*_ff ._fe ;if !_bd .isAbsolute (){_fde ,_ae =_d +_fde ,_de +_ae ;};if _ad !=nil &&_g .ToLower (_ad .Symbol )=="\u0071"{_gcfe :=_eb .Point {X :_ad .Params [0]*_ff ._fe ,Y :_ad .Params [1]*_ff ._fe };_gfd :=_eb .Point {X :_ad .Params [2]*_ff ._fe ,Y :_ad .Params [3]*_ff ._fe };
|
|
_fab :=_gfd .Mul (2.0).Sub (_gcfe );_fbf ,_egd =_eb .QuadraticToCubicBezier (_d ,_de ,_fab .X ,_fab .Y ,_fde ,_ae );};_gce .Add_c (_ebgf (_fbf .X ,3),_ebgf (_fbf .Y ,3),_ebgf (_egd .X ,3),_ebgf (_egd .Y ,3),_ebgf (_fde ,3),_ebgf (_ae ,3));_d ,_de =_fde ,_ae ;
|
|
case "\u0061":_dec ,_ebd :=_bd .Params [0]*_ff ._fe ,_bd .Params [1]*_ff ._fe ;_cg :=_bd .Params [2];_efc :=_bd .Params [3]> 0;_cc :=_bd .Params [4]> 0;_dgc ,_bef :=_bd .Params [5]*_ff ._fe ,_bd .Params [6]*_ff ._fe ;if !_bd .isAbsolute (){_dgc ,_bef =_d +_dgc ,_de +_bef ;
|
|
};_ba :=_eb .EllipseToCubicBeziers (_d ,_de ,_dec ,_ebd ,_cg ,_efc ,_cc ,_dgc ,_bef );for _ ,_dd :=range _ba {_gce .Add_c (_ebgf (_dd [1].X ,3),_ebgf ((_dd [1].Y ),3),_ebgf ((_dd [2].X ),3),_ebgf ((_dd [2].Y ),3),_ebgf ((_dd [3].X ),3),_ebgf ((_dd [3].Y ),3));
|
|
};_d ,_de =_dgc ,_bef ;case "\u007a":_gce .Add_h ();};_ad =_bd ;};};if _ff .Style .FillColor !=""&&_ff .Style .StrokeColor !=""{_gce .Add_B ();}else if _ff .Style .FillColor !=""{_gce .Add_f ();}else if _ff .Style .StrokeColor !=""{_gce .Add_S ();};_gce .Add_h ();
|
|
_gce .Add_Q ();};func _bca (_caae []float64 )[]float64 {for _begg ,_egga :=0,len (_caae )-1;_begg < _egga ;_begg ,_egga =_begg +1,_egga -1{_caae [_begg ],_caae [_egga ]=_caae [_egga ],_caae [_begg ];};return _caae ;};type Path struct{Subpaths []*Subpath ;
|
|
};func (_accdc *Command )compare (_dee *Command )bool {if _accdc .Symbol !=_dee .Symbol {return false ;};for _cdcf ,_gaf :=range _accdc .Params {if _gaf !=_dee .Params [_cdcf ]{return false ;};};return true ;};func _ebdd (_eae float64 )int {return int (_eae +_e .Copysign (0.5,_eae ))};
|
|
func _daf (_aef *GraphicSVG ,_aaa *_gd .ContentCreator ){_aaa .Add_q ();_aef .Style .toContentStream (_aaa );_ce ,_eec :=_fbg (_aef .Attributes ["\u0063\u0078"],64);if _eec !=nil {_ag .Log .Debug ("\u0045\u0072\u0072or\u0020\u0077\u0068\u0069\u006c\u0065\u0020\u0070\u0061r\u0073i\u006eg\u0020`\u0063\u0078\u0060\u0020\u0076\u0061\u006c\u0075\u0065\u003a\u0020\u0025\u0076",_eec .Error ());
|
|
};_ddc ,_eec :=_fbg (_aef .Attributes ["\u0063\u0079"],64);if _eec !=nil {_ag .Log .Debug ("\u0045\u0072\u0072or\u0020\u0077\u0068\u0069\u006c\u0065\u0020\u0070\u0061r\u0073i\u006eg\u0020`\u0063\u0079\u0060\u0020\u0076\u0061\u006c\u0075\u0065\u003a\u0020\u0025\u0076",_eec .Error ());
|
|
};_fae ,_eec :=_fbg (_aef .Attributes ["\u0072\u0078"],64);if _eec !=nil {_ag .Log .Debug ("\u0045\u0072\u0072or\u0020\u0077\u0068\u0069\u006c\u0065\u0020\u0070\u0061r\u0073i\u006eg\u0020`\u0072\u0078\u0060\u0020\u0076\u0061\u006c\u0075\u0065\u003a\u0020\u0025\u0076",_eec .Error ());
|
|
};_ab ,_eec :=_fbg (_aef .Attributes ["\u0072\u0079"],64);if _eec !=nil {_ag .Log .Debug ("\u0045\u0072\u0072or\u0020\u0077\u0068\u0069\u006c\u0065\u0020\u0070\u0061r\u0073i\u006eg\u0020`\u0072\u0079\u0060\u0020\u0076\u0061\u006c\u0075\u0065\u003a\u0020\u0025\u0076",_eec .Error ());
|
|
};_gae :=_fae *_aef ._fe ;_dde :=_ab *_aef ._fe ;_cgc :=_ce *_aef ._fe ;_gaea :=_ddc *_aef ._fe ;_gfb :=_gae *_eg ;_eeg :=_dde *_eg ;_agc :=_gb .NewCubicBezierPath ();_agc =_agc .AppendCurve (_gb .NewCubicBezierCurve (-_gae ,0,-_gae ,_eeg ,-_gfb ,_dde ,0,_dde ));
|
|
_agc =_agc .AppendCurve (_gb .NewCubicBezierCurve (0,_dde ,_gfb ,_dde ,_gae ,_eeg ,_gae ,0));_agc =_agc .AppendCurve (_gb .NewCubicBezierCurve (_gae ,0,_gae ,-_eeg ,_gfb ,-_dde ,0,-_dde ));_agc =_agc .AppendCurve (_gb .NewCubicBezierCurve (0,-_dde ,-_gfb ,-_dde ,-_gae ,-_eeg ,-_gae ,0));
|
|
_agc =_agc .Offset (_cgc ,_gaea );if _aef .Style .StrokeWidth > 0{_agc =_agc .Offset (_aef .Style .StrokeWidth /2,_aef .Style .StrokeWidth /2);};_gb .DrawBezierPathWithCreator (_agc ,_aaa );if _aef .Style .FillColor !=""&&_aef .Style .StrokeColor !=""{_aaa .Add_B ();
|
|
}else if _aef .Style .FillColor !=""{_aaa .Add_f ();}else if _aef .Style .StrokeColor !=""{_aaa .Add_S ();};_aaa .Add_h ();_aaa .Add_Q ();};type pathParserError struct{_bgc string };func (_caa *Subpath )compare (_bab *Subpath )bool {if len (_caa .Commands )!=len (_bab .Commands ){return false ;
|
|
};for _dcb ,_egfe :=range _caa .Commands {if !_egfe .compare (_bab .Commands [_dcb ]){return false ;};};return true ;};func _dce (_bgee string )(_eaf ,_ffe string ){if _bgee ==""||(_bgee [len (_bgee )-1]>='0'&&_bgee [len (_bgee )-1]<='9'){return _bgee ,"";
|
|
};_eaf =_bgee ;for _ ,_ccdf :=range _fd {if _g .Contains (_eaf ,_ccdf ){_ffe =_ccdf ;};_eaf =_g .TrimSuffix (_eaf ,_ccdf );};return ;};func _dgbe ()commands {var _fbbc =map[string ]int {"\u006d":2,"\u007a":0,"\u006c":2,"\u0068":1,"\u0076":1,"\u0063":6,"\u0073":4,"\u0071":4,"\u0074":2,"\u0061":7};
|
|
var _dfb []string ;for _fcafc :=range _fbbc {_dfb =append (_dfb ,_fcafc );};return commands {_dfb ,_fbbc ,"\u006d","\u007a"};};type GraphicSVGStyle struct{FillColor string ;StrokeColor string ;StrokeWidth float64 ;};func _gcca (_dcf *GraphicSVG ,_acg *_gd .ContentCreator ){_acg .Add_q ();
|
|
_dcf .Style .toContentStream (_acg );_acc ,_ega :=_fbg (_dcf .Attributes ["\u0063\u0078"],64);if _ega !=nil {_ag .Log .Debug ("\u0045\u0072\u0072or\u0020\u0077\u0068\u0069\u006c\u0065\u0020\u0070\u0061r\u0073i\u006eg\u0020`\u0063\u0078\u0060\u0020\u0076\u0061\u006c\u0075\u0065\u003a\u0020\u0025\u0076",_ega .Error ());
|
|
};_aa ,_ega :=_fbg (_dcf .Attributes ["\u0063\u0079"],64);if _ega !=nil {_ag .Log .Debug ("\u0045\u0072\u0072or\u0020\u0077\u0068\u0069\u006c\u0065\u0020\u0070\u0061r\u0073i\u006eg\u0020`\u0063\u0079\u0060\u0020\u0076\u0061\u006c\u0075\u0065\u003a\u0020\u0025\u0076",_ega .Error ());
|
|
};_dbd ,_ega :=_fbg (_dcf .Attributes ["\u0072"],64);if _ega !=nil {_ag .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u0020w\u0068\u0069\u006c\u0065\u0020\u0070\u0061\u0072\u0073\u0069\u006e\u0067\u0020`\u0072\u0060\u0020\u0076\u0061\u006c\u0075e\u003a\u0020\u0025\u0076",_ega .Error ());
|
|
};_gddf :=_dbd *_dcf ._fe ;_fdd :=_dbd *_dcf ._fe ;_bad :=_gddf *_eg ;_fcb :=_fdd *_eg ;_gab :=_gb .NewCubicBezierPath ();_gab =_gab .AppendCurve (_gb .NewCubicBezierCurve (-_gddf ,0,-_gddf ,_fcb ,-_bad ,_fdd ,0,_fdd ));_gab =_gab .AppendCurve (_gb .NewCubicBezierCurve (0,_fdd ,_bad ,_fdd ,_gddf ,_fcb ,_gddf ,0));
|
|
_gab =_gab .AppendCurve (_gb .NewCubicBezierCurve (_gddf ,0,_gddf ,-_fcb ,_bad ,-_fdd ,0,-_fdd ));_gab =_gab .AppendCurve (_gb .NewCubicBezierCurve (0,-_fdd ,-_bad ,-_fdd ,-_gddf ,-_fcb ,-_gddf ,0));_gab =_gab .Offset (_acc *_dcf ._fe ,_aa *_dcf ._fe );
|
|
if _dcf .Style .StrokeWidth > 0{_gab =_gab .Offset (_dcf .Style .StrokeWidth /2,_dcf .Style .StrokeWidth /2);};_gb .DrawBezierPathWithCreator (_gab ,_acg );if _dcf .Style .FillColor !=""&&_dcf .Style .StrokeColor !=""{_acg .Add_B ();}else if _dcf .Style .FillColor !=""{_acg .Add_f ();
|
|
}else if _dcf .Style .StrokeColor !=""{_acg .Add_S ();};_acg .Add_h ();_acg .Add_Q ();};func (_gfa *GraphicSVG )toContentStream (_fcaf *_gd .ContentCreator ){_eced ,_ge :=_gba (_gfa .Attributes ,_gfa ._fe );if _ge !=nil {_ag .Log .Debug ("U\u006e\u0061\u0062\u006c\u0065\u0020t\u006f\u0020\u0070\u0061\u0072\u0073e\u0020\u0073\u0074\u0079\u006c\u0065\u0020a\u0074\u0074\u0072\u0069\u0062\u0075\u0074\u0065\u003a\u0020%\u0076",_ge );
|
|
};_gfa .Style =_eced ;switch _gfa .Name {case "\u0070\u0061\u0074\u0068":_ec (_gfa ,_fcaf );for _ ,_gdf :=range _gfa .Children {_gdf .toContentStream (_fcaf );};case "\u0072\u0065\u0063\u0074":_bbb (_gfa ,_fcaf );for _ ,_cdb :=range _gfa .Children {_cdb .toContentStream (_fcaf );
|
|
};case "\u0063\u0069\u0072\u0063\u006c\u0065":_gcca (_gfa ,_fcaf );for _ ,_cgd :=range _gfa .Children {_cgd .toContentStream (_fcaf );};case "\u0065l\u006c\u0069\u0070\u0073\u0065":_daf (_gfa ,_fcaf );for _ ,_bba :=range _gfa .Children {_bba .toContentStream (_fcaf );
|
|
};case "\u0070\u006f\u006c\u0079\u006c\u0069\u006e\u0065":_adg (_gfa ,_fcaf );for _ ,_ecf :=range _gfa .Children {_ecf .toContentStream (_fcaf );};case "\u0070o\u006c\u0079\u0067\u006f\u006e":_dbde (_gfa ,_fcaf );for _ ,_daaa :=range _gfa .Children {_daaa .toContentStream (_fcaf );
|
|
};case "\u006c\u0069\u006e\u0065":_bbf (_gfa ,_fcaf );for _ ,_facb :=range _gfa .Children {_facb .toContentStream (_fcaf );};case "\u0067":_dad ,_feg :=_gfa .Attributes ["\u0066\u0069\u006c\u006c"];_bfd ,_dbc :=_gfa .Attributes ["\u0073\u0074\u0072\u006f\u006b\u0065"];
|
|
_agee ,_fga :=_gfa .Attributes ["\u0073\u0074\u0072o\u006b\u0065\u002d\u0077\u0069\u0064\u0074\u0068"];for _ ,_dcg :=range _gfa .Children {if _ ,_bbe :=_dcg .Attributes ["\u0066\u0069\u006c\u006c"];!_bbe &&_feg {_dcg .Attributes ["\u0066\u0069\u006c\u006c"]=_dad ;
|
|
};if _ ,_bee :=_dcg .Attributes ["\u0073\u0074\u0072\u006f\u006b\u0065"];!_bee &&_dbc {_dcg .Attributes ["\u0073\u0074\u0072\u006f\u006b\u0065"]=_bfd ;};if _ ,_geb :=_dcg .Attributes ["\u0073\u0074\u0072o\u006b\u0065\u002d\u0077\u0069\u0064\u0074\u0068"];
|
|
!_geb &&_fga {_dcg .Attributes ["\u0073\u0074\u0072o\u006b\u0065\u002d\u0077\u0069\u0064\u0074\u0068"]=_agee ;};_dcg .toContentStream (_fcaf );};};};func (_aceg *GraphicSVG )SetScaling (xFactor ,yFactor float64 ){_dacb :=_aceg .Width /_aceg .ViewBox .W ;
|
|
_degb :=_aceg .Height /_aceg .ViewBox .H ;_aceg .setDefaultScaling (_e .Max (_dacb ,_degb ));for _ ,_fcf :=range _aceg .Children {_fcf .SetScaling (xFactor ,yFactor );};};type Command struct{Symbol string ;Params []float64 ;};type commands struct{_cef []string ;
|
|
_cbb map[string ]int ;_beeb string ;_gbae string ;};func _adg (_egab *GraphicSVG ,_dgg *_gd .ContentCreator ){_dgg .Add_q ();_egab .Style .toContentStream (_dgg );_ccf ,_eegf :=_dae (_egab .Attributes ["\u0070\u006f\u0069\u006e\u0074\u0073"]);if _eegf !=nil {_ag .Log .Debug ("\u0045\u0052\u0052O\u0052\u0020\u0075\u006e\u0061\u0062\u006c\u0065\u0020\u0074\u006f\u0020\u0070\u0061\u0072\u0073\u0065\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u0061\u0074\u0074\u0072i\u0062\u0075\u0074\u0065\u003a\u0020\u0025\u0076",_eegf );
|
|
return ;};if len (_ccf )%2> 0{_ag .Log .Debug ("\u0045\u0052R\u004f\u0052\u0020\u0069n\u0076\u0061l\u0069\u0064\u0020\u0070\u006f\u0069\u006e\u0074s\u0020\u0061\u0074\u0074\u0072\u0069\u0062\u0075\u0074\u0065\u0020\u006ce\u006e\u0067\u0074\u0068");return ;
|
|
};for _cae :=0;_cae < len (_ccf );{if _cae ==0{_dgg .Add_m (_ccf [_cae ]*_egab ._fe ,_ccf [_cae +1]*_egab ._fe );}else {_dgg .Add_l (_ccf [_cae ]*_egab ._fe ,_ccf [_cae +1]*_egab ._fe );};_cae +=2;};if _egab .Style .FillColor !=""&&_egab .Style .StrokeColor !=""{_dgg .Add_B ();
|
|
}else if _egab .Style .FillColor !=""{_dgg .Add_f ();}else if _egab .Style .StrokeColor !=""{_dgg .Add_S ();};_dgg .Add_h ();_dgg .Add_Q ();};var (_fd =[]string {"\u0063\u006d","\u006d\u006d","\u0070\u0078","\u0070\u0074"};_egg =map[string ]float64 {"\u0063\u006d":_bc ,"\u006d\u006d":_gcc ,"\u0070\u0078":_fb ,"\u0070\u0074":1};
|
|
); |