113 lines
30 KiB
Go
Raw Normal View History

2022-12-15 21:59:56 +00:00
//
// 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/
2024-05-29 17:04:37 +00:00
package svg ;import (_f "encoding/xml";_d "fmt";_df "github.com/unidoc/unipdf/v3/common";_ea "github.com/unidoc/unipdf/v3/contentstream";_gg "github.com/unidoc/unipdf/v3/contentstream/draw";_g "github.com/unidoc/unipdf/v3/internal/graphic2d";_fa "golang.org/x/net/html/charset";
_ef "io";_ac "math";_ae "os";_ca "strconv";_a "strings";_c "unicode";);func _adc (_abf *GraphicSVG ,_dbe *_ea .ContentCreator ){_dbe .Add_q ();_abf .Style .toContentStream (_dbe );_fdg ,_gee :=_dgd (_abf .Attributes ["\u0070\u006f\u0069\u006e\u0074\u0073"]);
if _gee !=nil {_df .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",_gee );
return ;};if len (_fdg )%2> 0{_df .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 _aa :=0;_aa < len (_fdg );{if _aa ==0{_dbe .Add_m (_fdg [_aa ]*_abf ._efd ,_fdg [_aa +1]*_abf ._efd );}else {_dbe .Add_l (_fdg [_aa ]*_abf ._efd ,_fdg [_aa +1]*_abf ._efd );};_aa +=2;};if _abf .Style .FillColor !=""&&_abf .Style .StrokeColor !=""{_dbe .Add_B ();
}else if _abf .Style .FillColor !=""{_dbe .Add_f ();}else if _abf .Style .StrokeColor !=""{_dbe .Add_S ();};_dbe .Add_h ();_dbe .Add_Q ();};func _cgg (_cda *GraphicSVG ,_bca *_ea .ContentCreator ){_bca .Add_q ();_cda .Style .toContentStream (_bca );_cbg ,_bcf :=_bfbg (_cda .Attributes ["\u0078\u0031"],64);
if _bcf !=nil {_df .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",_bcf .Error ());};_gbe ,_bcf :=_bfbg (_cda .Attributes ["\u0079\u0031"],64);
if _bcf !=nil {_df .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",_bcf .Error ());};_gbfe ,_bcf :=_bfbg (_cda .Attributes ["\u0078\u0032"],64);
if _bcf !=nil {_df .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",_bcf .Error ());};_gdf ,_bcf :=_bfbg (_cda .Attributes ["\u0079\u0032"],64);
if _bcf !=nil {_df .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",_bcf .Error ());};_bca .Add_m (_cbg *_cda ._efd ,_gbe *_cda ._efd );
_bca .Add_l (_gbfe *_cda ._efd ,_gdf *_cda ._efd );if _cda .Style .FillColor !=""&&_cda .Style .StrokeColor !=""{_bca .Add_B ();}else if _cda .Style .FillColor !=""{_bca .Add_f ();}else if _cda .Style .StrokeColor !=""{_bca .Add_S ();};_bca .Add_h ();_bca .Add_Q ();
};func (_ebg *GraphicSVG )SetScaling (xFactor ,yFactor float64 ){_dcg :=_ebg .Width /_ebg .ViewBox .W ;_feg :=_ebg .Height /_ebg .ViewBox .H ;_ebg .setDefaultScaling (_ac .Max (_dcg ,_feg ));for _ ,_gbb :=range _ebg .Children {_gbb .SetScaling (xFactor ,yFactor );
};};type Command struct{Symbol string ;Params []float64 ;};func _badd (_dbd _f .StartElement )*GraphicSVG {_caf :=&GraphicSVG {};_geab :=make (map[string ]string );for _ ,_ccg :=range _dbd .Attr {_geab [_ccg .Name .Local ]=_ccg .Value ;};_caf .Name =_dbd .Name .Local ;
_caf .Attributes =_geab ;_caf ._efd =1;if _caf .Name =="\u0073\u0076\u0067"{_bebd ,_fea :=_dgd (_geab ["\u0076i\u0065\u0077\u0042\u006f\u0078"]);if _fea !=nil {_df .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",_fea );
return nil ;};_caf .ViewBox .X =_bebd [0];_caf .ViewBox .Y =_bebd [1];_caf .ViewBox .W =_bebd [2];_caf .ViewBox .H =_bebd [3];_caf .Width =_caf .ViewBox .W ;_caf .Height =_caf .ViewBox .H ;if _cae ,_dbf :=_geab ["\u0077\u0069\u0064t\u0068"];_dbf {_abff ,_abe :=_bfbg (_cae ,64);
if _abe !=nil {_df .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",_abe );return nil ;};_caf .Width =_abff ;
};if _cfc ,_acg :=_geab ["\u0068\u0065\u0069\u0067\u0068\u0074"];_acg {_dcgg ,_fba :=_bfbg (_cfc ,64);if _fba !=nil {_df .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",_fba );
return nil ;};_caf .Height =_dcgg ;};if _caf .Width > 0&&_caf .Height > 0{_caf ._efd =_caf .Width /_caf .ViewBox .W ;};};return _caf ;};func _caaf (_deb []float64 )[]float64 {for _cef ,_bedb :=0,len (_deb )-1;_cef < _bedb ;_cef ,_bedb =_cef +1,_bedb -1{_deb [_cef ],_deb [_bedb ]=_deb [_bedb ],_deb [_cef ];
};return _deb ;};func (_aga *Subpath )compare (_bgd *Subpath )bool {if len (_aga .Commands )!=len (_bgd .Commands ){return false ;};for _gcb ,_egc :=range _aga .Commands {if !_egc .compare (_bgd .Commands [_gcb ]){return false ;};};return true ;};const (_fg =0.72;
_aeg =28.3464;_cc =_aeg /10;_gf =0.551784;);type commands struct{_eegb []string ;_bbd map[string ]int ;_aeec string ;_daff string ;};func (_fdea *GraphicSVGStyle )toContentStream (_fee *_ea .ContentCreator ){if _fdea ==nil {return ;};if _fdea .FillColor !=""{var _egag ,_cggf ,_ed float64 ;
if _cee ,_bce :=_g .ColorMap [_fdea .FillColor ];_bce {_acf ,_gfb ,_bfc ,_ :=_cee .RGBA ();_egag ,_cggf ,_ed =float64 (_acf ),float64 (_gfb ),float64 (_bfc );}else {_egag ,_cggf ,_ed =_abafb (_fdea .FillColor );};_fee .Add_rg (_egag ,_cggf ,_ed );};if _fdea .StrokeColor !=""{var _gbed ,_caa ,_febf float64 ;
if _febc ,_abag :=_g .ColorMap [_fdea .StrokeColor ];_abag {_fda ,_agf ,_bdb ,_ :=_febc .RGBA ();_gbed ,_caa ,_febf =float64 (_fda )/255.0,float64 (_agf )/255.0,float64 (_bdb )/255.0;}else {_gbed ,_caa ,_febf =_abafb (_fdea .StrokeColor );};_fee .Add_RG (_gbed ,_caa ,_febf );
};if _fdea .StrokeWidth > 0{_fee .Add_w (_fdea .StrokeWidth );};};func _aeea (_aca *_f .Decoder )(*GraphicSVG ,error ){for {_dgcg ,_fgdd :=_aca .Token ();if _dgcg ==nil &&_fgdd ==_ef .EOF {break ;};if _fgdd !=nil {return nil ,_fgdd ;};switch _cfa :=_dgcg .(type ){case _f .StartElement :return _badd (_cfa ),nil ;
};};return &GraphicSVG {},nil ;};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 ;_efd float64 ;};func (_ebd *GraphicSVG )ToContentCreator (cc *_ea .ContentCreator ,scaleX ,scaleY ,translateX ,translateY float64 )*_ea .ContentCreator {if _ebd .Name =="\u0073\u0076\u0067"{_ebd .SetScaling (scaleX ,scaleY );
cc .Add_cm (1,0,0,1,translateX ,translateY );_ebd .setDefaultScaling (_ebd ._efd );cc .Add_q ();_ecf :=_ac .Max (scaleX ,scaleY );cc .Add_re (_ebd .ViewBox .X *_ecf ,_ebd .ViewBox .Y *_ecf ,_ebd .ViewBox .W *_ecf ,_ebd .ViewBox .H *_ecf );cc .Add_W ();
cc .Add_n ();for _ ,_bfa :=range _ebd .Children {_bfa .ViewBox =_ebd .ViewBox ;_bfa .toContentStream (cc );};cc .Add_Q ();return cc ;};return nil ;};func _daed (_gbdc []token ,_fdcd string )([]token ,string ){if _fdcd !=""{_gbdc =append (_gbdc ,token {_fdcd ,false });
_fdcd ="";};return _gbdc ,_fdcd ;};func (_acd *Command )compare (_ffa *Command )bool {if _acd .Symbol !=_ffa .Symbol {return false ;};for _fgdc ,_afgb :=range _acd .Params {if _afgb !=_ffa .Params [_fgdc ]{return false ;};};return true ;};func _dcgb (_fada map[string ]string ,_bcee float64 )(*GraphicSVGStyle ,error ){_cfcb :=_dfg ();
_aedc ,_dbfe :=_fada ["\u0066\u0069\u006c\u006c"];if _dbfe {_cfcb .FillColor =_aedc ;if _aedc =="\u006e\u006f\u006e\u0065"{_cfcb .FillColor ="";};};_agdg ,_gbbe :=_fada ["\u0073\u0074\u0072\u006f\u006b\u0065"];if _gbbe {_cfcb .StrokeColor =_agdg ;if _agdg =="\u006e\u006f\u006e\u0065"{_cfcb .StrokeColor ="";
};};_edc ,_ceg :=_fada ["\u0073\u0074\u0072o\u006b\u0065\u002d\u0077\u0069\u0064\u0074\u0068"];if _ceg {_gdg ,_geg :=_bfbg (_edc ,64);if _geg !=nil {return nil ,_geg ;};_cfcb .StrokeWidth =_gdg *_bcee ;};return _cfcb ,nil ;};func (_fde *GraphicSVG )setDefaultScaling (_bde float64 ){_fde ._efd =_bde ;
if _fde .Style !=nil &&_fde .Style .StrokeWidth > 0{_fde .Style .StrokeWidth =_fde .Style .StrokeWidth *_fde ._efd ;};for _ ,_eeb :=range _fde .Children {_eeb .setDefaultScaling (_bde );};};func _abafb (_gfc string )(_fdfa ,_gfba ,_caea float64 ){if (len (_gfc )!=4&&len (_gfc )!=7)||_gfc [0]!='#'{_df .Log .Debug ("I\u006ev\u0061\u006c\u0069\u0064\u0020\u0068\u0065\u0078 \u0063\u006f\u0064\u0065: \u0025\u0073",_gfc );
return _fdfa ,_gfba ,_caea ;};var _deggb ,_abgd ,_gbda int ;if len (_gfc )==4{var _abcc ,_cfb ,_dfa int ;_dda ,_baga :=_d .Sscanf (_gfc ,"\u0023\u0025\u0031\u0078\u0025\u0031\u0078\u0025\u0031\u0078",&_abcc ,&_cfb ,&_dfa );if _baga !=nil {_df .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",_gfc ,_baga );
return _fdfa ,_gfba ,_caea ;};if _dda !=3{_df .Log .Debug ("I\u006ev\u0061\u006c\u0069\u0064\u0020\u0068\u0065\u0078 \u0063\u006f\u0064\u0065: \u0025\u0073",_gfc );return _fdfa ,_gfba ,_caea ;};_deggb =_abcc *16+_abcc ;_abgd =_cfb *16+_cfb ;_gbda =_dfa *16+_dfa ;
}else {_dffc ,_acdf :=_d .Sscanf (_gfc ,"\u0023\u0025\u0032\u0078\u0025\u0032\u0078\u0025\u0032\u0078",&_deggb ,&_abgd ,&_gbda );if _acdf !=nil {_df .Log .Debug ("I\u006ev\u0061\u006c\u0069\u0064\u0020\u0068\u0065\u0078 \u0063\u006f\u0064\u0065: \u0025\u0073",_gfc );
return _fdfa ,_gfba ,_caea ;};if _dffc !=3{_df .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",_gfc ,_dffc );
return _fdfa ,_gfba ,_caea ;};};_dcad :=float64 (_deggb )/255.0;_cec :=float64 (_abgd )/255.0;_ebe :=float64 (_gbda )/255.0;return _dcad ,_cec ,_ebe ;};var _bga commands ;var (_gfa =[]string {"\u0063\u006d","\u006d\u006d","\u0070\u0078","\u0070\u0074"};
_eb =map[string ]float64 {"\u0063\u006d":_aeg ,"\u006d\u006d":_cc ,"\u0070\u0078":_fg ,"\u0070\u0074":1};);func (_fbc *Path )compare (_dggb *Path )bool {if len (_fbc .Subpaths )!=len (_dggb .Subpaths ){return false ;};for _bgb ,_fed :=range _fbc .Subpaths {if !_fed .compare (_dggb .Subpaths [_bgb ]){return false ;
};};return true ;};func ParseFromStream (source _ef .Reader )(*GraphicSVG ,error ){_cde :=_f .NewDecoder (source );_cde .CharsetReader =_fa .NewReaderLabel ;_gafc ,_daa :=_aeea (_cde );if _daa !=nil {return nil ,_daa ;};if _adgg :=_gafc .Decode (_cde );
_adgg !=nil &&_adgg !=_ef .EOF {return nil ,_adgg ;};return _gafc ,nil ;};func _dgd (_fdf string )([]float64 ,error ){_cddf :=-1;var _cag []float64 ;_afb :=' ';for _fdeaf ,_ebgf :=range _fdf {if !_c .IsNumber (_ebgf )&&_ebgf !='.'&&!(_ebgf =='-'&&_afb =='e')&&_ebgf !='e'{if _cddf !=-1{_cbf ,_abdg :=_gdgf (_fdf [_cddf :_fdeaf ]);
if _abdg !=nil {return _cag ,_abdg ;};_cag =append (_cag ,_cbf ...);};if _ebgf =='-'{_cddf =_fdeaf ;}else {_cddf =-1;};}else if _cddf ==-1{_cddf =_fdeaf ;};_afb =_ebgf ;};if _cddf !=-1&&_cddf !=len (_fdf ){_eca ,_ceb :=_gdgf (_fdf [_cddf :]);if _ceb !=nil {return _cag ,_ceb ;
};_cag =append (_cag ,_eca ...);};return _cag ,nil ;};type token struct{_fgc string ;_gag bool ;};func ParseFromString (svgStr string )(*GraphicSVG ,error ){return ParseFromStream (_a .NewReader (svgStr ));};func _gceb ()commands {var _geb =map[string ]int {"\u006d":2,"\u007a":0,"\u006c":2,"\u0068":1,"\u0076":1,"\u0063":6,"\u0073":4,"\u0071":4,"\u0074":2,"\u0061":7};
var _fcb []string ;for _ecfa :=range _geb {_fcb =append (_fcb ,_ecfa );};return commands {_fcb ,_geb ,"\u006d","\u007a"};};func _eac (_ebgb float64 )int {return int (_ebgb +_ac .Copysign (0.5,_ebgb ))};type Path struct{Subpaths []*Subpath ;};func _dfg ()*GraphicSVGStyle {return &GraphicSVGStyle {FillColor :"\u00230\u0030\u0030\u0030\u0030\u0030",StrokeColor :"",StrokeWidth :0};
};func (_dcc *commands )isCommand (_cgb string )bool {for _ ,_fec :=range _dcc ._eegb {if _a .ToLower (_cgb )==_fec {return true ;};};return false ;};func (_bfaa *Command )isAbsolute ()bool {return _bfaa .Symbol ==_a .ToUpper (_bfaa .Symbol )};func (_cege pathParserError )Error ()string {return _cege ._cced };
func _bfbg (_gcfb string ,_ded int )(float64 ,error ){_gdcg ,_fab :=_beg (_gcfb );_dfb ,_cdaf :=_ca .ParseFloat (_gdcg ,_ded );if _cdaf !=nil {return 0,_cdaf ;};if _dafb ,_dad :=_eb [_fab ];_dad {_dfb =_dfb *_dafb ;}else {_dfb =_dfb *_fg ;};return _dfb ,nil ;
};func _gef (_abd *GraphicSVG ,_bd *_ea .ContentCreator ){_bd .Add_q ();_abd .Style .toContentStream (_bd );_fef ,_ade :=_bfbg (_abd .Attributes ["\u0078"],64);if _ade !=nil {_df .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",_ade .Error ());
};_eegg ,_ade :=_bfbg (_abd .Attributes ["\u0079"],64);if _ade !=nil {_df .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",_ade .Error ());
};_agb ,_ade :=_bfbg (_abd .Attributes ["\u0077\u0069\u0064t\u0068"],64);if _ade !=nil {_df .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",_ade .Error ());
};_dca ,_ade :=_bfbg (_abd .Attributes ["\u0068\u0065\u0069\u0067\u0068\u0074"],64);if _ade !=nil {_df .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",_ade .Error ());
};_bd .Add_re (_fef *_abd ._efd ,_eegg *_abd ._efd ,_agb *_abd ._efd ,_dca *_abd ._efd );if _abd .Style .FillColor !=""&&_abd .Style .StrokeColor !=""{_bd .Add_B ();}else if _abd .Style .FillColor !=""{_bd .Add_f ();}else if _abd .Style .StrokeColor !=""{_bd .Add_S ();
};_bd .Add_Q ();};func _bdd (_fac string )[]token {var (_eae []token ;_gbedb string ;);for _ ,_baa :=range _fac {_eaf :=string (_baa );switch {case _bga .isCommand (_eaf ):_eae ,_gbedb =_daed (_eae ,_gbedb );_eae =append (_eae ,token {_eaf ,true });case _eaf =="\u002e":if _gbedb ==""{_gbedb ="\u0030";
};if _a .Contains (_gbedb ,_eaf ){_eae =append (_eae ,token {_gbedb ,false });_gbedb ="\u0030";};fallthrough;case _eaf >="\u0030"&&_eaf <="\u0039"||_eaf =="\u0065":_gbedb +=_eaf ;case _eaf =="\u002d":if _a .HasSuffix (_gbedb ,"\u0065"){_gbedb +=_eaf ;}else {_eae ,_ =_daed (_eae ,_gbedb );
_gbedb =_eaf ;};default:_eae ,_gbedb =_daed (_eae ,_gbedb );};};_eae ,_ =_daed (_eae ,_gbedb );return _eae ;};func _egd (_ffdd []token )([]*Command ,error ){var (_edg []*Command ;_dgbf []float64 ;);for _cegb :=len (_ffdd )-1;_cegb >=0;_cegb --{_edgb :=_ffdd [_cegb ];
if _edgb ._gag {_ebf :=_bga ._bbd [_a .ToLower (_edgb ._fgc )];_eda :=len (_dgbf );if _ebf ==0&&_eda ==0{_gaca :=&Command {Symbol :_edgb ._fgc };_edg =append ([]*Command {_gaca },_edg ...);}else if _ebf !=0&&_eda %_ebf ==0{_degg :=_eda /_ebf ;for _abaf :=0;
_abaf < _degg ;_abaf ++{_ecb :=_edgb ._fgc ;if _ecb =="\u006d"&&_abaf < _degg -1{_ecb ="\u006c";};if _ecb =="\u004d"&&_abaf < _degg -1{_ecb ="\u004c";};_bff :=&Command {_ecb ,_caaf (_dgbf [:_ebf ])};_edg =append ([]*Command {_bff },_edg ...);_dgbf =_dgbf [_ebf :];
};}else {_eaee :=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"+_edgb ._fgc };return nil ,_eaee ;
};}else {_egg ,_agfb :=_bfbg (_edgb ._fgc ,64);if _agfb !=nil {return nil ,_agfb ;};_dgbf =append (_dgbf ,_egg );};};return _edg ,nil ;};func _beg (_fcg string )(_ecfab ,_cac string ){if _fcg ==""||(_fcg [len (_fcg )-1]>='0'&&_fcg [len (_fcg )-1]<='9'){return _fcg ,"";
};_ecfab =_fcg ;for _ ,_dcff :=range _gfa {if _a .Contains (_ecfab ,_dcff ){_cac =_dcff ;};_ecfab =_a .TrimSuffix (_ecfab ,_dcff );};return ;};func _fdc (_efe *GraphicSVG ,_feb *_ea .ContentCreator ){_feb .Add_q ();_efe .Style .toContentStream (_feb );
_dd ,_dcf :=_bfbg (_efe .Attributes ["\u0063\u0078"],64);if _dcf !=nil {_df .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",_dcf .Error ());
};_cab ,_dcf :=_bfbg (_efe .Attributes ["\u0063\u0079"],64);if _dcf !=nil {_df .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",_dcf .Error ());
};_gad ,_dcf :=_bfbg (_efe .Attributes ["\u0072"],64);if _dcf !=nil {_df .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",_dcf .Error ());
};_dgg :=_gad *_efe ._efd ;_gac :=_gad *_efe ._efd ;_dae :=_dgg *_gf ;_bb :=_gac *_gf ;_cgf :=_gg .NewCubicBezierPath ();_cgf =_cgf .AppendCurve (_gg .NewCubicBezierCurve (-_dgg ,0,-_dgg ,_bb ,-_dae ,_gac ,0,_gac ));_cgf =_cgf .AppendCurve (_gg .NewCubicBezierCurve (0,_gac ,_dae ,_gac ,_dgg ,_bb ,_dgg ,0));
_cgf =_cgf .AppendCurve (_gg .NewCubicBezierCurve (_dgg ,0,_dgg ,-_bb ,_dae ,-_gac ,0,-_gac ));_cgf =_cgf .AppendCurve (_gg .NewCubicBezierCurve (0,-_gac ,-_dae ,-_gac ,-_dgg ,-_bb ,-_dgg ,0));_cgf =_cgf .Offset (_dd *_efe ._efd ,_cab *_efe ._efd );if _efe .Style .StrokeWidth > 0{_cgf =_cgf .Offset (_efe .Style .StrokeWidth /2,_efe .Style .StrokeWidth /2);
};_gg .DrawBezierPathWithCreator (_cgf ,_feb );if _efe .Style .FillColor !=""&&_efe .Style .StrokeColor !=""{_feb .Add_B ();}else if _efe .Style .FillColor !=""{_feb .Add_f ();}else if _efe .Style .StrokeColor !=""{_feb .Add_S ();};_feb .Add_h ();_feb .Add_Q ();
};func _aea (_dcfb *GraphicSVG ,_gaf *_ea .ContentCreator ){_gaf .Add_q ();_dcfb .Style .toContentStream (_gaf );_dgb ,_dbec :=_dgd (_dcfb .Attributes ["\u0070\u006f\u0069\u006e\u0074\u0073"]);if _dbec !=nil {_df .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",_dbec );
return ;};if len (_dgb )%2> 0{_df .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 _bdg :=0;_bdg < len (_dgb );{if _bdg ==0{_gaf .Add_m (_dgb [_bdg ]*_dcfb ._efd ,_dgb [_bdg +1]*_dcfb ._efd );}else {_gaf .Add_l (_dgb [_bdg ]*_dcfb ._efd ,_dgb [_bdg +1]*_dcfb ._efd );};_bdg +=2;};_gaf .Add_l (_dgb [0]*_dcfb ._efd ,_dgb [1]*_dcfb ._efd );
if _dcfb .Style .FillColor !=""&&_dcfb .Style .StrokeColor !=""{_gaf .Add_B ();}else if _dcfb .Style .FillColor !=""{_gaf .Add_f ();}else if _dcfb .Style .StrokeColor !=""{_gaf .Add_S ();};_gaf .Add_h ();_gaf .Add_Q ();};type GraphicSVGStyle struct{FillColor string ;
StrokeColor string ;StrokeWidth float64 ;};func _fd (_ee *GraphicSVG ,_cad *_ea .ContentCreator ){_cad .Add_q ();_ee .Style .toContentStream (_cad );_fc ,_cg :=_ggge (_ee .Attributes ["\u0064"]);if _cg !=nil {_df .Log .Error ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025s",_cg .Error ());
};var (_b ,_eba =0.0,0.0;_bf ,_ccd =0.0,0.0;_eff *Command ;);for _ ,_ba :=range _fc .Subpaths {for _ ,_gcf :=range _ba .Commands {switch _a .ToLower (_gcf .Symbol ){case "\u006d":_bf ,_ccd =_gcf .Params [0]*_ee ._efd ,_gcf .Params [1]*_ee ._efd ;if !_gcf .isAbsolute (){_bf ,_ccd =_b +_bf -_ee .ViewBox .X ,_eba +_ccd -_ee .ViewBox .Y ;
};_cad .Add_m (_efdd (_bf ,3),_efdd (_ccd ,3));_b ,_eba =_bf ,_ccd ;case "\u0063":_ab ,_fe ,_db ,_be ,_aef ,_ad :=_gcf .Params [0]*_ee ._efd ,_gcf .Params [1]*_ee ._efd ,_gcf .Params [2]*_ee ._efd ,_gcf .Params [3]*_ee ._efd ,_gcf .Params [4]*_ee ._efd ,_gcf .Params [5]*_ee ._efd ;
if !_gcf .isAbsolute (){_ab ,_fe ,_db ,_be ,_aef ,_ad =_b +_ab ,_eba +_fe ,_b +_db ,_eba +_be ,_b +_aef ,_eba +_ad ;};_cad .Add_c (_efdd (_ab ,3),_efdd (_fe ,3),_efdd (_db ,3),_efdd (_be ,3),_efdd (_aef ,3),_efdd (_ad ,3));_b ,_eba =_aef ,_ad ;case "\u0073":_beb ,_bc ,_ga ,_gce :=_gcf .Params [0]*_ee ._efd ,_gcf .Params [1]*_ee ._efd ,_gcf .Params [2]*_ee ._efd ,_gcf .Params [3]*_ee ._efd ;
if !_gcf .isAbsolute (){_beb ,_bc ,_ga ,_gce =_b +_beb ,_eba +_bc ,_b +_ga ,_eba +_gce ;};_cad .Add_c (_efdd (_b ,3),_efdd (_eba ,3),_efdd (_beb ,3),_efdd (_bc ,3),_efdd (_ga ,3),_efdd (_gce ,3));_b ,_eba =_ga ,_gce ;case "\u006c":_aba ,_dg :=_gcf .Params [0]*_ee ._efd ,_gcf .Params [1]*_ee ._efd ;
if !_gcf .isAbsolute (){_aba ,_dg =_b +_aba ,_eba +_dg ;};_cad .Add_l (_efdd (_aba ,3),_efdd (_dg ,3));_b ,_eba =_aba ,_dg ;case "\u0068":_gcfd :=_gcf .Params [0]*_ee ._efd ;if !_gcf .isAbsolute (){_gcfd =_b +_gcfd ;};_cad .Add_l (_efdd (_gcfd ,3),_efdd (_eba ,3));
_b =_gcfd ;case "\u0076":_ggg :=_gcf .Params [0]*_ee ._efd ;if !_gcf .isAbsolute (){_ggg =_eba +_ggg ;};_cad .Add_l (_efdd (_b ,3),_efdd (_ggg ,3));_eba =_ggg ;case "\u0071":_gd ,_abc ,_aed ,_ccf :=_gcf .Params [0]*_ee ._efd ,_gcf .Params [1]*_ee ._efd ,_gcf .Params [2]*_ee ._efd ,_gcf .Params [3]*_ee ._efd ;
if !_gcf .isAbsolute (){_gd ,_abc ,_aed ,_ccf =_b +_gd ,_eba +_abc ,_b +_aed ,_eba +_ccf ;};_fad ,_ge :=_g .QuadraticToCubicBezier (_b ,_eba ,_gd ,_abc ,_aed ,_ccf );_cad .Add_c (_efdd (_fad .X ,3),_efdd (_fad .Y ,3),_efdd (_ge .X ,3),_efdd (_ge .Y ,3),_efdd (_aed ,3),_efdd (_ccf ,3));
_b ,_eba =_aed ,_ccf ;case "\u0074":var _bed ,_acb _g .Point ;_abb ,_eeg :=_gcf .Params [0]*_ee ._efd ,_gcf .Params [1]*_ee ._efd ;if !_gcf .isAbsolute (){_abb ,_eeg =_b +_abb ,_eba +_eeg ;};if _eff !=nil &&_a .ToLower (_eff .Symbol )=="\u0071"{_add :=_g .Point {X :_eff .Params [0]*_ee ._efd ,Y :_eff .Params [1]*_ee ._efd };
_eg :=_g .Point {X :_eff .Params [2]*_ee ._efd ,Y :_eff .Params [3]*_ee ._efd };_cd :=_eg .Mul (2.0).Sub (_add );_bed ,_acb =_g .QuadraticToCubicBezier (_b ,_eba ,_cd .X ,_cd .Y ,_abb ,_eeg );};_cad .Add_c (_efdd (_bed .X ,3),_efdd (_bed .Y ,3),_efdd (_acb .X ,3),_efdd (_acb .Y ,3),_efdd (_abb ,3),_efdd (_eeg ,3));
_b ,_eba =_abb ,_eeg ;case "\u0061":_bad ,_fcf :=_gcf .Params [0]*_ee ._efd ,_gcf .Params [1]*_ee ._efd ;_ag :=_gcf .Params [2];_bg :=_gcf .Params [3]> 0;_dff :=_gcf .Params [4]> 0;_fgd ,_eec :=_gcf .Params [5]*_ee ._efd ,_gcf .Params [6]*_ee ._efd ;if !_gcf .isAbsolute (){_fgd ,_eec =_b +_fgd ,_eba +_eec ;
};_dc :=_g .EllipseToCubicBeziers (_b ,_eba ,_bad ,_fcf ,_ag ,_bg ,_dff ,_fgd ,_eec );for _ ,_af :=range _dc {_cad .Add_c (_efdd (_af [1].X ,3),_efdd ((_af [1].Y ),3),_efdd ((_af [2].X ),3),_efdd ((_af [2].Y ),3),_efdd ((_af [3].X ),3),_efdd ((_af [3].Y ),3));
};_b ,_eba =_fgd ,_eec ;case "\u007a":_cad .Add_h ();};_eff =_gcf ;};};if _ee .Style .FillColor !=""&&_ee .Style .StrokeColor !=""{_cad .Add_B ();}else if _ee .Style .FillColor !=""{_cad .Add_f ();}else if _ee .Style .StrokeColor !=""{_cad .Add_S ();};
_cad .Add_h ();_cad .Add_Q ();};func (_aedd *GraphicSVG )Decode (decoder *_f .Decoder )error {for {_fb ,_daea :=decoder .Token ();if _fb ==nil &&_daea ==_ef .EOF {break ;};if _daea !=nil {return _daea ;};switch _ega :=_fb .(type ){case _f .StartElement :_eea :=_badd (_ega );
_agd :=_eea .Decode (decoder );if _agd !=nil {return _agd ;};_aedd .Children =append (_aedd .Children ,_eea );case _f .CharData :_ec :=_a .TrimSpace (string (_ega ));if _ec !=""{_aedd .Content =string (_ega );};case _f .EndElement :if _ega .Name .Local ==_aedd .Name {return nil ;
};};};return nil ;};func _de (_efc *GraphicSVG ,_cb *_ea .ContentCreator ){_cb .Add_q ();_efc .Style .toContentStream (_cb );_cf ,_ff :=_bfbg (_efc .Attributes ["\u0063\u0078"],64);if _ff !=nil {_df .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",_ff .Error ());
};_gb ,_ff :=_bfbg (_efc .Attributes ["\u0063\u0079"],64);if _ff !=nil {_df .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",_ff .Error ());
};_gcfc ,_ff :=_bfbg (_efc .Attributes ["\u0072\u0078"],64);if _ff !=nil {_df .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",_ff .Error ());
};_cbe ,_ff :=_bfbg (_efc .Attributes ["\u0072\u0079"],64);if _ff !=nil {_df .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",_ff .Error ());
};_gbf :=_gcfc *_efc ._efd ;_ffg :=_cbe *_efc ._efd ;_dee :=_cf *_efc ._efd ;_gea :=_gb *_efc ._efd ;_cdd :=_gbf *_gf ;_ffd :=_ffg *_gf ;_daf :=_gg .NewCubicBezierPath ();_daf =_daf .AppendCurve (_gg .NewCubicBezierCurve (-_gbf ,0,-_gbf ,_ffd ,-_cdd ,_ffg ,0,_ffg ));
_daf =_daf .AppendCurve (_gg .NewCubicBezierCurve (0,_ffg ,_cdd ,_ffg ,_gbf ,_ffd ,_gbf ,0));_daf =_daf .AppendCurve (_gg .NewCubicBezierCurve (_gbf ,0,_gbf ,-_ffd ,_cdd ,-_ffg ,0,-_ffg ));_daf =_daf .AppendCurve (_gg .NewCubicBezierCurve (0,-_ffg ,-_cdd ,-_ffg ,-_gbf ,-_ffd ,-_gbf ,0));
_daf =_daf .Offset (_dee ,_gea );if _efc .Style .StrokeWidth > 0{_daf =_daf .Offset (_efc .Style .StrokeWidth /2,_efc .Style .StrokeWidth /2);};_gg .DrawBezierPathWithCreator (_daf ,_cb );if _efc .Style .FillColor !=""&&_efc .Style .StrokeColor !=""{_cb .Add_B ();
}else if _efc .Style .FillColor !=""{_cb .Add_f ();}else if _efc .Style .StrokeColor !=""{_cb .Add_S ();};_cb .Add_h ();_cb .Add_Q ();};func _efdd (_facb float64 ,_faa int )float64 {_geca :=_ac .Pow (10,float64 (_faa ));return float64 (_eac (_facb *_geca ))/_geca ;
};func _gdgf (_bea string )(_ffe []float64 ,_cgaa error ){var _ccc float64 ;_bcb :=0;_gff :=true ;for _fdgc ,_ccgf :=range _bea {if _ccgf =='.'{if _gff {_gff =false ;continue ;};_ccc ,_cgaa =_bfbg (_bea [_bcb :_fdgc ],64);if _cgaa !=nil {return ;};_ffe =append (_ffe ,_ccc );
_bcb =_fdgc ;};};_ccc ,_cgaa =_bfbg (_bea [_bcb :],64);if _cgaa !=nil {return ;};_ffe =append (_ffe ,_ccc );return ;};type pathParserError struct{_cced string };type Subpath struct{Commands []*Command ;};func _dbc (_cge []*Command )*Path {_abg :=&Path {};
var _cbgf []*Command ;for _daad ,_ece :=range _cge {switch _a .ToLower (_ece .Symbol ){case _bga ._aeec :if len (_cbgf )> 0{_abg .Subpaths =append (_abg .Subpaths ,&Subpath {_cbgf });};_cbgf =[]*Command {_ece };case _bga ._daff :_cbgf =append (_cbgf ,_ece );
_abg .Subpaths =append (_abg .Subpaths ,&Subpath {_cbgf });_cbgf =[]*Command {};default:_cbgf =append (_cbgf ,_ece );if len (_cge )==_daad +1{_abg .Subpaths =append (_abg .Subpaths ,&Subpath {_cbgf });};};};return _abg ;};func _ggge (_fbcg string )(*Path ,error ){_bga =_gceb ();
_aeb ,_adcg :=_egd (_bdd (_fbcg ));if _adcg !=nil {return nil ,_adcg ;};return _dbc (_aeb ),nil ;};func ParseFromFile (path string )(*GraphicSVG ,error ){_ddc ,_bbc :=_ae .Open (path );if _bbc !=nil {return nil ,_bbc ;};defer _ddc .Close ();return ParseFromStream (_ddc );
};func (_agg *GraphicSVG )toContentStream (_cga *_ea .ContentCreator ){_cfd ,_daead :=_dcgb (_agg .Attributes ,_agg ._efd );if _daead !=nil {_df .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",_daead );
};_agg .Style =_cfd ;switch _agg .Name {case "\u0070\u0061\u0074\u0068":_fd (_agg ,_cga );for _ ,_aff :=range _agg .Children {_aff .toContentStream (_cga );};case "\u0072\u0065\u0063\u0074":_gef (_agg ,_cga );for _ ,_cgfc :=range _agg .Children {_cgfc .toContentStream (_cga );
};case "\u0063\u0069\u0072\u0063\u006c\u0065":_fdc (_agg ,_cga );for _ ,_gead :=range _agg .Children {_gead .toContentStream (_cga );};case "\u0065l\u006c\u0069\u0070\u0073\u0065":_de (_agg ,_cga );for _ ,_adg :=range _agg .Children {_adg .toContentStream (_cga );
};case "\u0070\u006f\u006c\u0079\u006c\u0069\u006e\u0065":_adc (_agg ,_cga );for _ ,_aeab :=range _agg .Children {_aeab .toContentStream (_cga );};case "\u0070o\u006c\u0079\u0067\u006f\u006e":_aea (_agg ,_cga );for _ ,_gdb :=range _agg .Children {_gdb .toContentStream (_cga );
};case "\u006c\u0069\u006e\u0065":_cgg (_agg ,_cga );for _ ,_afg :=range _agg .Children {_afg .toContentStream (_cga );};case "\u0067":_egaa ,_gfg :=_agg .Attributes ["\u0066\u0069\u006c\u006c"];_gde ,_gbd :=_agg .Attributes ["\u0073\u0074\u0072\u006f\u006b\u0065"];
_dgbd ,_bae :=_agg .Attributes ["\u0073\u0074\u0072o\u006b\u0065\u002d\u0077\u0069\u0064\u0074\u0068"];for _ ,_cce :=range _agg .Children {if _ ,_aac :=_cce .Attributes ["\u0066\u0069\u006c\u006c"];!_aac &&_gfg {_cce .Attributes ["\u0066\u0069\u006c\u006c"]=_egaa ;
};if _ ,_gec :=_cce .Attributes ["\u0073\u0074\u0072\u006f\u006b\u0065"];!_gec &&_gbd {_cce .Attributes ["\u0073\u0074\u0072\u006f\u006b\u0065"]=_gde ;};if _ ,_gbc :=_cce .Attributes ["\u0073\u0074\u0072o\u006b\u0065\u002d\u0077\u0069\u0064\u0074\u0068"];
!_gbc &&_bae {_cce .Attributes ["\u0073\u0074\u0072o\u006b\u0065\u002d\u0077\u0069\u0064\u0074\u0068"]=_dgbd ;};_cce .toContentStream (_cga );};};};