mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-04 22:17:22 +08:00
114 lines
30 KiB
Go
114 lines
30 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 (_d "encoding/xml";_b "fmt";_dd "github.com/unidoc/unipdf/v3/common";_bd "github.com/unidoc/unipdf/v3/contentstream";_bg "github.com/unidoc/unipdf/v3/contentstream/draw";_da "github.com/unidoc/unipdf/v3/internal/graphic2d";_ec "golang.org/x/net/html/charset";
|
|
_ff "io";_eg "math";_a "os";_e "strconv";_c "strings";_g "unicode";);type token struct{_fef string ;_bgafb bool ;};func (_geeb *Path )compare (_aegb *Path )bool {if len (_geeb .Subpaths )!=len (_aegb .Subpaths ){return false ;};for _afe ,_aga :=range _geeb .Subpaths {if !_aga .compare (_aegb .Subpaths [_afe ]){return false ;
|
|
};};return true ;};func ParseFromString (svgStr string )(*GraphicSVG ,error ){return ParseFromStream (_c .NewReader (svgStr ));};func (_aed *GraphicSVG )Decode (decoder *_d .Decoder )error {for {_egab ,_aa :=decoder .Token ();if _egab ==nil &&_aa ==_ff .EOF {break ;
|
|
};if _aa !=nil {return _aa ;};switch _baa :=_egab .(type ){case _d .StartElement :_bbd :=_bda (_baa );_ebe :=_bbd .Decode (decoder );if _ebe !=nil {return _ebe ;};_aed .Children =append (_aed .Children ,_bbd );case _d .CharData :_fd :=_c .TrimSpace (string (_baa ));
|
|
if _fd !=""{_aed .Content =string (_baa );};case _d .EndElement :if _baa .Name .Local ==_aed .Name {return nil ;};};};return nil ;};func _aab (_efb string )([]float64 ,error ){_afgf :=-1;var _efgf []float64 ;_bdff :=' ';for _dece ,_cgad :=range _efb {if !_g .IsNumber (_cgad )&&_cgad !='.'&&!(_cgad =='-'&&_bdff =='e')&&_cgad !='e'{if _afgf !=-1{_ede ,_adac :=_ccaa (_efb [_afgf :_dece ]);
|
|
if _adac !=nil {return _efgf ,_adac ;};_efgf =append (_efgf ,_ede ...);};if _cgad =='-'{_afgf =_dece ;}else {_afgf =-1;};}else if _afgf ==-1{_afgf =_dece ;};_bdff =_cgad ;};if _afgf !=-1&&_afgf !=len (_efb ){_fbf ,_fcbf :=_ccaa (_efb [_afgf :]);if _fcbf !=nil {return _efgf ,_fcbf ;
|
|
};_efgf =append (_efgf ,_fbf ...);};return _efgf ,nil ;};func _abe (_cec *GraphicSVG ,_ddce *_bd .ContentCreator ){_ddce .Add_q ();_cec .Style .toContentStream (_ddce );_ga ,_dgad :=_aab (_cec .Attributes ["\u0070\u006f\u0069\u006e\u0074\u0073"]);if _dgad !=nil {_dd .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",_dgad );
|
|
return ;};if len (_ga )%2> 0{_dd .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 _fg :=0;_fg < len (_ga );{if _fg ==0{_ddce .Add_m (_ga [_fg ]*_cec ._dabc ,_ga [_fg +1]*_cec ._dabc );}else {_ddce .Add_l (_ga [_fg ]*_cec ._dabc ,_ga [_fg +1]*_cec ._dabc );};_fg +=2;};_ddce .Add_l (_ga [0]*_cec ._dabc ,_ga [1]*_cec ._dabc );if _cec .Style .FillColor !=""&&_cec .Style .StrokeColor !=""{_ddce .Add_B ();
|
|
}else if _cec .Style .FillColor !=""{_ddce .Add_f ();}else if _cec .Style .StrokeColor !=""{_ddce .Add_S ();};_ddce .Add_h ();_ddce .Add_Q ();};type Path struct{Subpaths []*Subpath ;};type Command struct{Symbol string ;Params []float64 ;};func (_bbdg *GraphicSVG )setDefaultScaling (_gfdc float64 ){_bbdg ._dabc =_gfdc ;
|
|
if _bbdg .Style !=nil &&_bbdg .Style .StrokeWidth > 0{_bbdg .Style .StrokeWidth =_bbdg .Style .StrokeWidth *_bbdg ._dabc ;};for _ ,_fbb :=range _bbdg .Children {_fbb .setDefaultScaling (_gfdc );};};type pathParserError struct{_dfbf string };func (_bae *Command )compare (_cbf *Command )bool {if _bae .Symbol !=_cbf .Symbol {return false ;
|
|
};for _eggb ,_dfa :=range _bae .Params {if _dfa !=_cbf .Params [_eggb ]{return false ;};};return true ;};type commands struct{_cga []string ;_dace map[string ]int ;_ffa string ;_dcgb string ;};func _aedg (_afeg []token )([]*Command ,error ){var (_fcba []*Command ;
|
|
_cfde []float64 ;);for _bca :=len (_afeg )-1;_bca >=0;_bca --{_gaa :=_afeg [_bca ];if _gaa ._bgafb {_dda :=_fec ._dace [_c .ToLower (_gaa ._fef )];_dfg :=len (_cfde );if _dda ==0&&_dfg ==0{_aae :=&Command {Symbol :_gaa ._fef };_fcba =append ([]*Command {_aae },_fcba ...);
|
|
}else if _dda !=0&&_dfg %_dda ==0{_gggc :=_dfg /_dda ;for _bade :=0;_bade < _gggc ;_bade ++{_cgf :=_gaa ._fef ;if _cgf =="\u006d"&&_bade < _gggc -1{_cgf ="\u006c";};if _cgf =="\u004d"&&_bade < _gggc -1{_cgf ="\u004c";};_ada :=&Command {_cgf ,_gff (_cfde [:_dda ])};
|
|
_fcba =append ([]*Command {_ada },_fcba ...);_cfde =_cfde [_dda :];};}else {_aefd :=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"+_gaa ._fef };
|
|
return nil ,_aefd ;};}else {_bgb ,_dabgg :=_dee (_gaa ._fef ,64);if _dabgg !=nil {return nil ,_dabgg ;};_cfde =append (_cfde ,_bgb );};};return _fcba ,nil ;};func _ccaa (_bgc string )(_fedg []float64 ,_gfb error ){var _fcbfe float64 ;_fbfe :=0;_geba :=true ;
|
|
for _dgc ,_gbae :=range _bgc {if _gbae =='.'{if _geba {_geba =false ;continue ;};_fcbfe ,_gfb =_dee (_bgc [_fbfe :_dgc ],64);if _gfb !=nil {return ;};_fedg =append (_fedg ,_fcbfe );_fbfe =_dgc ;};};_fcbfe ,_gfb =_dee (_bgc [_fbfe :],64);if _gfb !=nil {return ;
|
|
};_fedg =append (_fedg ,_fcbfe );return ;};func ParseFromFile (path string )(*GraphicSVG ,error ){_afg ,_eca :=_a .Open (path );if _eca !=nil {return nil ,_eca ;};defer _afg .Close ();return ParseFromStream (_afg );};func (_bfd *Command )isAbsolute ()bool {return _bfd .Symbol ==_c .ToUpper (_bfd .Symbol )};
|
|
func (_bdfa *commands )isCommand (_dea string )bool {for _ ,_caf :=range _bdfa ._cga {if _c .ToLower (_dea )==_caf {return true ;};};return false ;};func _gge (_gebf string )[]token {var (_bcc []token ;_adba string ;);for _ ,_cgd :=range _gebf {_eba :=string (_cgd );
|
|
switch {case _fec .isCommand (_eba ):_bcc ,_adba =_adbf (_bcc ,_adba );_bcc =append (_bcc ,token {_eba ,true });case _eba =="\u002e":if _adba ==""{_adba ="\u0030";};if _c .Contains (_adba ,_eba ){_bcc =append (_bcc ,token {_adba ,false });_adba ="\u0030";
|
|
};fallthrough;case _eba >="\u0030"&&_eba <="\u0039"||_eba =="\u0065":_adba +=_eba ;case _eba =="\u002d":if _c .HasSuffix (_adba ,"\u0065"){_adba +=_eba ;}else {_bcc ,_ =_adbf (_bcc ,_adba );_adba =_eba ;};default:_bcc ,_adba =_adbf (_bcc ,_adba );};};_bcc ,_ =_adbf (_bcc ,_adba );
|
|
return _bcc ;};func _bda (_ggde _d .StartElement )*GraphicSVG {_fc :=&GraphicSVG {};_cfa :=make (map[string ]string );for _ ,_fcb :=range _ggde .Attr {_cfa [_fcb .Name .Local ]=_fcb .Value ;};_fc .Name =_ggde .Name .Local ;_fc .Attributes =_cfa ;_fc ._dabc =1;
|
|
if _fc .Name =="\u0073\u0076\u0067"{_fad ,_gcgf :=_aab (_cfa ["\u0076i\u0065\u0077\u0042\u006f\u0078"]);if _gcgf !=nil {_dd .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",_gcgf );
|
|
return nil ;};_fc .ViewBox .X =_fad [0];_fc .ViewBox .Y =_fad [1];_fc .ViewBox .W =_fad [2];_fc .ViewBox .H =_fad [3];_fc .Width =_fc .ViewBox .W ;_fc .Height =_fc .ViewBox .H ;if _bdc ,_gcb :=_cfa ["\u0077\u0069\u0064t\u0068"];_gcb {_gaf ,_cebd :=_dee (_bdc ,64);
|
|
if _cebd !=nil {_dd .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",_cebd );return nil ;};_fc .Width =_gaf ;
|
|
};if _dbe ,_ebec :=_cfa ["\u0068\u0065\u0069\u0067\u0068\u0074"];_ebec {_dabgc ,_fgec :=_dee (_dbe ,64);if _fgec !=nil {_dd .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",_fgec );
|
|
return nil ;};_fc .Height =_dabgc ;};if _fc .Width > 0&&_fc .Height > 0{_fc ._dabc =_fc .Width /_fc .ViewBox .W ;};};return _fc ;};func _fgf (_dbg string )(_afegg ,_adc string ){if _dbg ==""||(_dbg [len (_dbg )-1]>='0'&&_dbg [len (_dbg )-1]<='9'){return _dbg ,"";
|
|
};_afegg =_dbg ;for _ ,_ebeg :=range _gc {if _c .Contains (_afegg ,_ebeg ){_adc =_ebeg ;};_afegg =_c .TrimSuffix (_afegg ,_ebeg );};return ;};func _eaae (_bgg string )(_fdeb ,_gdcb ,_cac float64 ){if (len (_bgg )!=4&&len (_bgg )!=7)||_bgg [0]!='#'{_dd .Log .Debug ("I\u006ev\u0061\u006c\u0069\u0064\u0020\u0068\u0065\u0078 \u0063\u006f\u0064\u0065: \u0025\u0073",_bgg );
|
|
return _fdeb ,_gdcb ,_cac ;};var _dgadb ,_bcad ,_bdgb int ;if len (_bgg )==4{var _cadf ,_cgab ,_eegbb int ;_aebd ,_aac :=_b .Sscanf (_bgg ,"\u0023\u0025\u0031\u0078\u0025\u0031\u0078\u0025\u0031\u0078",&_cadf ,&_cgab ,&_eegbb );if _aac !=nil {_dd .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",_bgg ,_aac );
|
|
return _fdeb ,_gdcb ,_cac ;};if _aebd !=3{_dd .Log .Debug ("I\u006ev\u0061\u006c\u0069\u0064\u0020\u0068\u0065\u0078 \u0063\u006f\u0064\u0065: \u0025\u0073",_bgg );return _fdeb ,_gdcb ,_cac ;};_dgadb =_cadf *16+_cadf ;_bcad =_cgab *16+_cgab ;_bdgb =_eegbb *16+_eegbb ;
|
|
}else {_eeca ,_bce :=_b .Sscanf (_bgg ,"\u0023\u0025\u0032\u0078\u0025\u0032\u0078\u0025\u0032\u0078",&_dgadb ,&_bcad ,&_bdgb );if _bce !=nil {_dd .Log .Debug ("I\u006ev\u0061\u006c\u0069\u0064\u0020\u0068\u0065\u0078 \u0063\u006f\u0064\u0065: \u0025\u0073",_bgg );
|
|
return _fdeb ,_gdcb ,_cac ;};if _eeca !=3{_dd .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",_bgg ,_eeca );
|
|
return _fdeb ,_gdcb ,_cac ;};};_afa :=float64 (_dgadb )/255.0;_ddae :=float64 (_bcad )/255.0;_caab :=float64 (_bdgb )/255.0;return _afa ,_ddae ,_caab ;};var _fec commands ;func _dbf (_gee map[string ]string ,_badf float64 )(*GraphicSVGStyle ,error ){_gda :=_eec ();
|
|
_caa ,_daf :=_gee ["\u0066\u0069\u006c\u006c"];if _daf {_gda .FillColor =_caa ;if _caa =="\u006e\u006f\u006e\u0065"{_gda .FillColor ="";};};_cadb ,_gad :=_gee ["\u0073\u0074\u0072\u006f\u006b\u0065"];if _gad {_gda .StrokeColor =_cadb ;if _cadb =="\u006e\u006f\u006e\u0065"{_gda .StrokeColor ="";
|
|
};};_cef ,_fed :=_gee ["\u0073\u0074\u0072o\u006b\u0065\u002d\u0077\u0069\u0064\u0074\u0068"];if _fed {_abbcc ,_dbb :=_dee (_cef ,64);if _dbb !=nil {return nil ,_dbb ;};_gda .StrokeWidth =_abbcc *_badf ;};return _gda ,nil ;};func _ecc (_dabg *GraphicSVG ,_fa *_bd .ContentCreator ){_fa .Add_q ();
|
|
_dabg .Style .toContentStream (_fa );_egcc ,_bbg :=_dee (_dabg .Attributes ["\u0078"],64);if _bbg !=nil {_dd .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",_bbg .Error ());
|
|
};_bea ,_bbg :=_dee (_dabg .Attributes ["\u0079"],64);if _bbg !=nil {_dd .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",_bbg .Error ());
|
|
};_egg ,_bbg :=_dee (_dabg .Attributes ["\u0077\u0069\u0064t\u0068"],64);if _bbg !=nil {_dd .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",_bbg .Error ());
|
|
};_cbg ,_bbg :=_dee (_dabg .Attributes ["\u0068\u0065\u0069\u0067\u0068\u0074"],64);if _bbg !=nil {_dd .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",_bbg .Error ());
|
|
};_fa .Add_re (_egcc *_dabg ._dabc ,_bea *_dabg ._dabc ,_egg *_dabg ._dabc ,_cbg *_dabg ._dabc );if _dabg .Style .FillColor !=""&&_dabg .Style .StrokeColor !=""{_fa .Add_B ();}else if _dabg .Style .FillColor !=""{_fa .Add_f ();}else if _dabg .Style .StrokeColor !=""{_fa .Add_S ();
|
|
};_fa .Add_Q ();};func _eec ()*GraphicSVGStyle {return &GraphicSVGStyle {FillColor :"\u00230\u0030\u0030\u0030\u0030\u0030",StrokeColor :"",StrokeWidth :0};};func (_fge *GraphicSVG )ToContentCreator (cc *_bd .ContentCreator ,scaleX ,scaleY ,translateX ,translateY float64 )*_bd .ContentCreator {if _fge .Name =="\u0073\u0076\u0067"{_fge .SetScaling (scaleX ,scaleY );
|
|
cc .Add_cm (1,0,0,1,translateX ,translateY );_fge .setDefaultScaling (_fge ._dabc );cc .Add_q ();_fbd :=_eg .Max (scaleX ,scaleY );cc .Add_re (_fge .ViewBox .X *_fbd ,_fge .ViewBox .Y *_fbd ,_fge .ViewBox .W *_fbd ,_fge .ViewBox .H *_fbd );cc .Add_W ();
|
|
cc .Add_n ();for _ ,_afb :=range _fge .Children {_afb .ViewBox =_fge .ViewBox ;_afb .toContentStream (cc );};cc .Add_Q ();return cc ;};return nil ;};func (_ggad pathParserError )Error ()string {return _ggad ._dfbf };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 ;_dabc float64 ;};type Subpath struct{Commands []*Command ;};var (_gc =[]string {"\u0063\u006d","\u006d\u006d","\u0070\u0078","\u0070\u0074"};
|
|
_bb =map[string ]float64 {"\u0063\u006d":_bga ,"\u006d\u006d":_ag ,"\u0070\u0078":_ce ,"\u0070\u0074":1};);func _cdb (_eaaa float64 ,_eegc int )float64 {_dff :=_eg .Pow (10,float64 (_eegc ));return float64 (_cefa (_eaaa *_dff ))/_dff ;};func (_bcg *GraphicSVGStyle )toContentStream (_dgg *_bd .ContentCreator ){if _bcg ==nil {return ;
|
|
};if _bcg .FillColor !=""{var _adg ,_dfd ,_fdd float64 ;if _def ,_eee :=_da .ColorMap [_bcg .FillColor ];_eee {_abeg ,_eaeb ,_bcb ,_ :=_def .RGBA ();_adg ,_dfd ,_fdd =float64 (_abeg ),float64 (_eaeb ),float64 (_bcb );}else {_adg ,_dfd ,_fdd =_eaae (_bcg .FillColor );
|
|
};_dgg .Add_rg (_adg ,_dfd ,_fdd );};if _bcg .StrokeColor !=""{var _dad ,_dbc ,_addb float64 ;if _cbc ,_ebc :=_da .ColorMap [_bcg .StrokeColor ];_ebc {_geb ,_edbb ,_ege ,_ :=_cbc .RGBA ();_dad ,_dbc ,_addb =float64 (_geb )/255.0,float64 (_edbb )/255.0,float64 (_ege )/255.0;
|
|
}else {_dad ,_dbc ,_addb =_eaae (_bcg .StrokeColor );};_dgg .Add_RG (_dad ,_dbc ,_addb );};if _bcg .StrokeWidth > 0{_dgg .Add_w (_bcg .StrokeWidth );};};func _abbc (_gd *GraphicSVG ,_gdd *_bd .ContentCreator ){_gdd .Add_q ();_gd .Style .toContentStream (_gdd );
|
|
_bbc ,_dga :=_aab (_gd .Attributes ["\u0070\u006f\u0069\u006e\u0074\u0073"]);if _dga !=nil {_dd .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",_dga );
|
|
return ;};if len (_bbc )%2> 0{_dd .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 _egb :=0;_egb < len (_bbc );{if _egb ==0{_gdd .Add_m (_bbc [_egb ]*_gd ._dabc ,_bbc [_egb +1]*_gd ._dabc );}else {_gdd .Add_l (_bbc [_egb ]*_gd ._dabc ,_bbc [_egb +1]*_gd ._dabc );};_egb +=2;};if _gd .Style .FillColor !=""&&_gd .Style .StrokeColor !=""{_gdd .Add_B ();
|
|
}else if _gd .Style .FillColor !=""{_gdd .Add_f ();}else if _gd .Style .StrokeColor !=""{_gdd .Add_S ();};_gdd .Add_h ();_gdd .Add_Q ();};type GraphicSVGStyle struct{FillColor string ;StrokeColor string ;StrokeWidth float64 ;};func _fdbe (_gfa string )(*Path ,error ){_fec =_dage ();
|
|
_eeed ,_caeg :=_aedg (_gge (_gfa ));if _caeg !=nil {return nil ,_caeg ;};return _ddgg (_eeed ),nil ;};func _gff (_faf []float64 )[]float64 {for _eegf ,_adb :=0,len (_faf )-1;_eegf < _adb ;_eegf ,_adb =_eegf +1,_adb -1{_faf [_eegf ],_faf [_adb ]=_faf [_adb ],_faf [_eegf ];
|
|
};return _faf ;};func ParseFromStream (source _ff .Reader )(*GraphicSVG ,error ){_bgaf :=_d .NewDecoder (source );_bgaf .CharsetReader =_ec .NewReaderLabel ;_ecf ,_fbg :=_bba (_bgaf );if _fbg !=nil {return nil ,_fbg ;};if _fdbf :=_ecf .Decode (_bgaf );
|
|
_fdbf !=nil &&_fdbf !=_ff .EOF {return nil ,_fdbf ;};return _ecf ,nil ;};func _ddgg (_dfbg []*Command )*Path {_eegb :=&Path {};var _gba []*Command ;for _ffg ,_ceba :=range _dfbg {switch _c .ToLower (_ceba .Symbol ){case _fec ._ffa :if len (_gba )> 0{_eegb .Subpaths =append (_eegb .Subpaths ,&Subpath {_gba });
|
|
};_gba =[]*Command {_ceba };case _fec ._dcgb :_gba =append (_gba ,_ceba );_eegb .Subpaths =append (_eegb .Subpaths ,&Subpath {_gba });_gba =[]*Command {};default:_gba =append (_gba ,_ceba );if len (_dfbg )==_ffg +1{_eegb .Subpaths =append (_eegb .Subpaths ,&Subpath {_gba });
|
|
};};};return _eegb ;};func (_gcg *GraphicSVG )SetScaling (xFactor ,yFactor float64 ){_ffc :=_gcg .Width /_gcg .ViewBox .W ;_fag :=_gcg .Height /_gcg .ViewBox .H ;_gcg .setDefaultScaling (_eg .Max (_ffc ,_fag ));for _ ,_fdb :=range _gcg .Children {_fdb .SetScaling (xFactor ,yFactor );
|
|
};};func (_egd *GraphicSVG )toContentStream (_beg *_bd .ContentCreator ){_gb ,_gfd :=_dbf (_egd .Attributes ,_egd ._dabc );if _gfd !=nil {_dd .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",_gfd );
|
|
};_egd .Style =_gb ;switch _egd .Name {case "\u0070\u0061\u0074\u0068":_cg (_egd ,_beg );for _ ,_eeb :=range _egd .Children {_eeb .toContentStream (_beg );};case "\u0072\u0065\u0063\u0074":_ecc (_egd ,_beg );for _ ,_dae :=range _egd .Children {_dae .toContentStream (_beg );
|
|
};case "\u0063\u0069\u0072\u0063\u006c\u0065":_dg (_egd ,_beg );for _ ,_daeg :=range _egd .Children {_daeg .toContentStream (_beg );};case "\u0065l\u006c\u0069\u0070\u0073\u0065":_cd (_egd ,_beg );for _ ,_aee :=range _egd .Children {_aee .toContentStream (_beg );
|
|
};case "\u0070\u006f\u006c\u0079\u006c\u0069\u006e\u0065":_abbc (_egd ,_beg );for _ ,_bcd :=range _egd .Children {_bcd .toContentStream (_beg );};case "\u0070o\u006c\u0079\u0067\u006f\u006e":_abe (_egd ,_beg );for _ ,_bdg :=range _egd .Children {_bdg .toContentStream (_beg );
|
|
};case "\u006c\u0069\u006e\u0065":_cge (_egd ,_beg );for _ ,_ecg :=range _egd .Children {_ecg .toContentStream (_beg );};case "\u0067":_egbb ,_agc :=_egd .Attributes ["\u0066\u0069\u006c\u006c"];_eaaf ,_cfb :=_egd .Attributes ["\u0073\u0074\u0072\u006f\u006b\u0065"];
|
|
_ddfg ,_ecd :=_egd .Attributes ["\u0073\u0074\u0072o\u006b\u0065\u002d\u0077\u0069\u0064\u0074\u0068"];for _ ,_gag :=range _egd .Children {if _ ,_dag :=_gag .Attributes ["\u0066\u0069\u006c\u006c"];!_dag &&_agc {_gag .Attributes ["\u0066\u0069\u006c\u006c"]=_egbb ;
|
|
};if _ ,_aag :=_gag .Attributes ["\u0073\u0074\u0072\u006f\u006b\u0065"];!_aag &&_cfb {_gag .Attributes ["\u0073\u0074\u0072\u006f\u006b\u0065"]=_eaaf ;};if _ ,_beaa :=_gag .Attributes ["\u0073\u0074\u0072o\u006b\u0065\u002d\u0077\u0069\u0064\u0074\u0068"];
|
|
!_beaa &&_ecd {_gag .Attributes ["\u0073\u0074\u0072o\u006b\u0065\u002d\u0077\u0069\u0064\u0074\u0068"]=_ddfg ;};_gag .toContentStream (_beg );};};};func _dage ()commands {var _ggag =map[string ]int {"\u006d":2,"\u007a":0,"\u006c":2,"\u0068":1,"\u0076":1,"\u0063":6,"\u0073":4,"\u0071":4,"\u0074":2,"\u0061":7};
|
|
var _cfcd []string ;for _cfd :=range _ggag {_cfcd =append (_cfcd ,_cfd );};return commands {_cfcd ,_ggag ,"\u006d","\u007a"};};func _dg (_gg *GraphicSVG ,_cfc *_bd .ContentCreator ){_cfc .Add_q ();_gg .Style .toContentStream (_cfc );_eaa ,_cae :=_dee (_gg .Attributes ["\u0063\u0078"],64);
|
|
if _cae !=nil {_dd .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",_cae .Error ());};_bbgf ,_cae :=_dee (_gg .Attributes ["\u0063\u0079"],64);
|
|
if _cae !=nil {_dd .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",_cae .Error ());};_add ,_cae :=_dee (_gg .Attributes ["\u0072"],64);
|
|
if _cae !=nil {_dd .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",_cae .Error ());};_ggd :=_add *_gg ._dabc ;
|
|
_ddc :=_add *_gg ._dabc ;_gcc :=_ggd *_gf ;_deg :=_ddc *_gf ;_aeg :=_bg .NewCubicBezierPath ();_aeg =_aeg .AppendCurve (_bg .NewCubicBezierCurve (-_ggd ,0,-_ggd ,_deg ,-_gcc ,_ddc ,0,_ddc ));_aeg =_aeg .AppendCurve (_bg .NewCubicBezierCurve (0,_ddc ,_gcc ,_ddc ,_ggd ,_deg ,_ggd ,0));
|
|
_aeg =_aeg .AppendCurve (_bg .NewCubicBezierCurve (_ggd ,0,_ggd ,-_deg ,_gcc ,-_ddc ,0,-_ddc ));_aeg =_aeg .AppendCurve (_bg .NewCubicBezierCurve (0,-_ddc ,-_gcc ,-_ddc ,-_ggd ,-_deg ,-_ggd ,0));_aeg =_aeg .Offset (_eaa *_gg ._dabc ,_bbgf *_gg ._dabc );
|
|
if _gg .Style .StrokeWidth > 0{_aeg =_aeg .Offset (_gg .Style .StrokeWidth /2,_gg .Style .StrokeWidth /2);};_bg .DrawBezierPathWithCreator (_aeg ,_cfc );if _gg .Style .FillColor !=""&&_gg .Style .StrokeColor !=""{_cfc .Add_B ();}else if _gg .Style .FillColor !=""{_cfc .Add_f ();
|
|
}else if _gg .Style .StrokeColor !=""{_cfc .Add_S ();};_cfc .Add_h ();_cfc .Add_Q ();};func _bba (_gdda *_d .Decoder )(*GraphicSVG ,error ){for {_dcg ,_dge :=_gdda .Token ();if _dcg ==nil &&_dge ==_ff .EOF {break ;};if _dge !=nil {return nil ,_dge ;};switch _abd :=_dcg .(type ){case _d .StartElement :return _bda (_abd ),nil ;
|
|
};};return &GraphicSVG {},nil ;};func _dee (_fdc string ,_bfdc int )(float64 ,error ){_fecf ,_bcfa :=_fgf (_fdc );_dgcd ,_ebee :=_e .ParseFloat (_fecf ,_bfdc );if _ebee !=nil {return 0,_ebee ;};if _egeb ,_eafg :=_bb [_bcfa ];_eafg {_dgcd =_dgcd *_egeb ;
|
|
}else {_dgcd =_dgcd *_ce ;};return _dgcd ,nil ;};const (_ce =0.72;_bga =28.3464;_ag =_bga /10;_gf =0.551784;);func _cge (_ddd *GraphicSVG ,_fab *_bd .ContentCreator ){_fab .Add_q ();_ddd .Style .toContentStream (_fab );_aeb ,_gggg :=_dee (_ddd .Attributes ["\u0078\u0031"],64);
|
|
if _gggg !=nil {_dd .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",_gggg .Error ());};_bc ,_gggg :=_dee (_ddd .Attributes ["\u0079\u0031"],64);
|
|
if _gggg !=nil {_dd .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",_gggg .Error ());};_eag ,_gggg :=_dee (_ddd .Attributes ["\u0078\u0032"],64);
|
|
if _gggg !=nil {_dd .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",_gggg .Error ());};_cde ,_gggg :=_dee (_ddd .Attributes ["\u0079\u0032"],64);
|
|
if _gggg !=nil {_dd .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",_gggg .Error ());};_fab .Add_m (_aeb *_ddd ._dabc ,_bc *_ddd ._dabc );
|
|
_fab .Add_l (_eag *_ddd ._dabc ,_cde *_ddd ._dabc );if _ddd .Style .FillColor !=""&&_ddd .Style .StrokeColor !=""{_fab .Add_B ();}else if _ddd .Style .FillColor !=""{_fab .Add_f ();}else if _ddd .Style .StrokeColor !=""{_fab .Add_S ();};_fab .Add_h ();
|
|
_fab .Add_Q ();};func (_cecg *Subpath )compare (_cbd *Subpath )bool {if len (_cecg .Commands )!=len (_cbd .Commands ){return false ;};for _cdgg ,_aea :=range _cecg .Commands {if !_aea .compare (_cbd .Commands [_cdgg ]){return false ;};};return true ;};
|
|
func _cg (_df *GraphicSVG ,_ea *_bd .ContentCreator ){_ea .Add_q ();_df .Style .toContentStream (_ea );_bgd ,_ba :=_fdbe (_df .Attributes ["\u0064"]);if _ba !=nil {_dd .Log .Error ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025s",_ba .Error ());};var (_dab ,_ef =0.0,0.0;
|
|
_gce ,_dac =0.0,0.0;_de *Command ;);for _ ,_ded :=range _bgd .Subpaths {for _ ,_cc :=range _ded .Commands {switch _c .ToLower (_cc .Symbol ){case "\u006d":_gce ,_dac =_cc .Params [0]*_df ._dabc ,_cc .Params [1]*_df ._dabc ;if !_cc .isAbsolute (){_gce ,_dac =_dab +_gce -_df .ViewBox .X ,_ef +_dac -_df .ViewBox .Y ;
|
|
};_ea .Add_m (_cdb (_gce ,3),_cdb (_dac ,3));_dab ,_ef =_gce ,_dac ;case "\u0063":_ecb ,_egc ,_ffd ,_cb ,_fb ,_ead :=_cc .Params [0]*_df ._dabc ,_cc .Params [1]*_df ._dabc ,_cc .Params [2]*_df ._dabc ,_cc .Params [3]*_df ._dabc ,_cc .Params [4]*_df ._dabc ,_cc .Params [5]*_df ._dabc ;
|
|
if !_cc .isAbsolute (){_ecb ,_egc ,_ffd ,_cb ,_fb ,_ead =_dab +_ecb ,_ef +_egc ,_dab +_ffd ,_ef +_cb ,_dab +_fb ,_ef +_ead ;};_ea .Add_c (_cdb (_ecb ,3),_cdb (_egc ,3),_cdb (_ffd ,3),_cdb (_cb ,3),_cdb (_fb ,3),_cdb (_ead ,3));_dab ,_ef =_fb ,_ead ;case "\u0073":_dfb ,_ed ,_ddf ,_dabb :=_cc .Params [0]*_df ._dabc ,_cc .Params [1]*_df ._dabc ,_cc .Params [2]*_df ._dabc ,_cc .Params [3]*_df ._dabc ;
|
|
if !_cc .isAbsolute (){_dfb ,_ed ,_ddf ,_dabb =_dab +_dfb ,_ef +_ed ,_dab +_ddf ,_ef +_dabb ;};_ea .Add_c (_cdb (_dab ,3),_cdb (_ef ,3),_cdb (_dfb ,3),_cdb (_ed ,3),_cdb (_ddf ,3),_cdb (_dabb ,3));_dab ,_ef =_ddf ,_dabb ;case "\u006c":_af ,_ac :=_cc .Params [0]*_df ._dabc ,_cc .Params [1]*_df ._dabc ;
|
|
if !_cc .isAbsolute (){_af ,_ac =_dab +_af ,_ef +_ac ;};_ea .Add_l (_cdb (_af ,3),_cdb (_ac ,3));_dab ,_ef =_af ,_ac ;case "\u0068":_ge :=_cc .Params [0]*_df ._dabc ;if !_cc .isAbsolute (){_ge =_dab +_ge ;};_ea .Add_l (_cdb (_ge ,3),_cdb (_ef ,3));_dab =_ge ;
|
|
case "\u0076":_ab :=_cc .Params [0]*_df ._dabc ;if !_cc .isAbsolute (){_ab =_ef +_ab ;};_ea .Add_l (_cdb (_dab ,3),_cdb (_ab ,3));_ef =_ab ;case "\u0071":_bad ,_eae ,_ceb ,_dc :=_cc .Params [0]*_df ._dabc ,_cc .Params [1]*_df ._dabc ,_cc .Params [2]*_df ._dabc ,_cc .Params [3]*_df ._dabc ;
|
|
if !_cc .isAbsolute (){_bad ,_eae ,_ceb ,_dc =_dab +_bad ,_ef +_eae ,_dab +_ceb ,_ef +_dc ;};_gfe ,_be :=_da .QuadraticToCubicBezier (_dab ,_ef ,_bad ,_eae ,_ceb ,_dc );_ea .Add_c (_cdb (_gfe .X ,3),_cdb (_gfe .Y ,3),_cdb (_be .X ,3),_cdb (_be .Y ,3),_cdb (_ceb ,3),_cdb (_dc ,3));
|
|
_dab ,_ef =_ceb ,_dc ;case "\u0074":var _dec ,_efd _da .Point ;_ddg ,_cba :=_cc .Params [0]*_df ._dabc ,_cc .Params [1]*_df ._dabc ;if !_cc .isAbsolute (){_ddg ,_cba =_dab +_ddg ,_ef +_cba ;};if _de !=nil &&_c .ToLower (_de .Symbol )=="\u0071"{_eb :=_da .Point {X :_de .Params [0]*_df ._dabc ,Y :_de .Params [1]*_df ._dabc };
|
|
_ad :=_da .Point {X :_de .Params [2]*_df ._dabc ,Y :_de .Params [3]*_df ._dabc };_abb :=_ad .Mul (2.0).Sub (_eb );_dec ,_efd =_da .QuadraticToCubicBezier (_dab ,_ef ,_abb .X ,_abb .Y ,_ddg ,_cba );};_ea .Add_c (_cdb (_dec .X ,3),_cdb (_dec .Y ,3),_cdb (_efd .X ,3),_cdb (_efd .Y ,3),_cdb (_ddg ,3),_cdb (_cba ,3));
|
|
_dab ,_ef =_ddg ,_cba ;case "\u0061":_ae ,_bgdg :=_cc .Params [0]*_df ._dabc ,_cc .Params [1]*_df ._dabc ;_edb :=_cc .Params [2];_fe :=_cc .Params [3]> 0;_efe :=_cc .Params [4]> 0;_cf ,_ffdd :=_cc .Params [5]*_df ._dabc ,_cc .Params [6]*_df ._dabc ;if !_cc .isAbsolute (){_cf ,_ffdd =_dab +_cf ,_ef +_ffdd ;
|
|
};_cbe :=_da .EllipseToCubicBeziers (_dab ,_ef ,_ae ,_bgdg ,_edb ,_fe ,_efe ,_cf ,_ffdd );for _ ,_ega :=range _cbe {_ea .Add_c (_cdb (_ega [1].X ,3),_cdb ((_ega [1].Y ),3),_cdb ((_ega [2].X ),3),_cdb ((_ega [2].Y ),3),_cdb ((_ega [3].X ),3),_cdb ((_ega [3].Y ),3));
|
|
};_dab ,_ef =_cf ,_ffdd ;case "\u007a":_ea .Add_h ();};_de =_cc ;};};if _df .Style .FillColor !=""&&_df .Style .StrokeColor !=""{_ea .Add_B ();}else if _df .Style .FillColor !=""{_ea .Add_f ();}else if _df .Style .StrokeColor !=""{_ea .Add_S ();};_ea .Add_h ();
|
|
_ea .Add_Q ();};func _adbf (_eac []token ,_abg string )([]token ,string ){if _abg !=""{_eac =append (_eac ,token {_abg ,false });_abg ="";};return _eac ,_abg ;};func _cefa (_dba float64 )int {return int (_dba +_eg .Copysign (0.5,_dba ))};func _cd (_gccc *GraphicSVG ,_eeg *_bd .ContentCreator ){_eeg .Add_q ();
|
|
_gccc .Style .toContentStream (_eeg );_db ,_acg :=_dee (_gccc .Attributes ["\u0063\u0078"],64);if _acg !=nil {_dd .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",_acg .Error ());
|
|
};_gga ,_acg :=_dee (_gccc .Attributes ["\u0063\u0079"],64);if _acg !=nil {_dd .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",_acg .Error ());
|
|
};_cff ,_acg :=_dee (_gccc .Attributes ["\u0072\u0078"],64);if _acg !=nil {_dd .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",_acg .Error ());
|
|
};_cda ,_acg :=_dee (_gccc .Attributes ["\u0072\u0079"],64);if _acg !=nil {_dd .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",_acg .Error ());
|
|
};_ggg :=_cff *_gccc ._dabc ;_daca :=_cda *_gccc ._dabc ;_bdf :=_db *_gccc ._dabc ;_cdg :=_gga *_gccc ._dabc ;_bgde :=_ggg *_gf ;_dca :=_daca *_gf ;_efg :=_bg .NewCubicBezierPath ();_efg =_efg .AppendCurve (_bg .NewCubicBezierCurve (-_ggg ,0,-_ggg ,_dca ,-_bgde ,_daca ,0,_daca ));
|
|
_efg =_efg .AppendCurve (_bg .NewCubicBezierCurve (0,_daca ,_bgde ,_daca ,_ggg ,_dca ,_ggg ,0));_efg =_efg .AppendCurve (_bg .NewCubicBezierCurve (_ggg ,0,_ggg ,-_dca ,_bgde ,-_daca ,0,-_daca ));_efg =_efg .AppendCurve (_bg .NewCubicBezierCurve (0,-_daca ,-_bgde ,-_daca ,-_ggg ,-_dca ,-_ggg ,0));
|
|
_efg =_efg .Offset (_bdf ,_cdg );if _gccc .Style .StrokeWidth > 0{_efg =_efg .Offset (_gccc .Style .StrokeWidth /2,_gccc .Style .StrokeWidth /2);};_bg .DrawBezierPathWithCreator (_efg ,_eeg );if _gccc .Style .FillColor !=""&&_gccc .Style .StrokeColor !=""{_eeg .Add_B ();
|
|
}else if _gccc .Style .FillColor !=""{_eeg .Add_f ();}else if _gccc .Style .StrokeColor !=""{_eeg .Add_S ();};_eeg .Add_h ();_eeg .Add_Q ();}; |