mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-05 19:30:30 +08:00
114 lines
29 KiB
Go
114 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 (_efb "encoding/xml";_f "fmt";_ee "github.com/unidoc/unipdf/v3/common";_gc "github.com/unidoc/unipdf/v3/contentstream";_ca "github.com/unidoc/unipdf/v3/contentstream/draw";_ba "github.com/unidoc/unipdf/v3/internal/graphic2d";_eb "golang.org/x/net/html/charset";
|
|
_gb "io";_a "math";_c "os";_ef "strconv";_g "strings";_e "unicode";);func _efd (_ggd []float64 )[]float64 {for _ccca ,_dfa :=0,len (_ggd )-1;_ccca < _dfa ;_ccca ,_dfa =_ccca +1,_dfa -1{_ggd [_ccca ],_ggd [_dfa ]=_ggd [_dfa ],_ggd [_ccca ];};return _ggd ;
|
|
};func (_egb *GraphicSVG )SetScaling (xFactor ,yFactor float64 ){_edgb :=_egb .Width /_egb .ViewBox .W ;_gcg :=_egb .Height /_egb .ViewBox .H ;_egb .setDefaultScaling (_a .Max (_edgb ,_gcg ));for _ ,_cfbf :=range _egb .Children {_cfbf .SetScaling (xFactor ,yFactor );
|
|
};};func _cfd (_beef string )([]float64 ,error ){_fbaa :=-1;var _ace []float64 ;_ebff :=' ';for _gage ,_fcc :=range _beef {if !_e .IsNumber (_fcc )&&_fcc !='.'&&!(_fcc =='-'&&_ebff =='e')&&_fcc !='e'{if _fbaa !=-1{_bge ,_bbcc :=_edb (_beef [_fbaa :_gage ]);
|
|
if _bbcc !=nil {return _ace ,_bbcc ;};_ace =append (_ace ,_bge ...);};if _fcc =='-'{_fbaa =_gage ;}else {_fbaa =-1;};}else if _fbaa ==-1{_fbaa =_gage ;};_ebff =_fcc ;};if _fbaa !=-1&&_fbaa !=len (_beef ){_ccac ,_afac :=_edb (_beef [_fbaa :]);if _afac !=nil {return _ace ,_afac ;
|
|
};_ace =append (_ace ,_ccac ...);};return _ace ,nil ;};func _cad ()commands {var _fbb =map[string ]int {"\u006d":2,"\u007a":0,"\u006c":2,"\u0068":1,"\u0076":1,"\u0063":6,"\u0073":4,"\u0071":4,"\u0074":2,"\u0061":7};var _aeb []string ;for _eefg :=range _fbb {_aeb =append (_aeb ,_eefg );
|
|
};return commands {_aeb ,_fbb ,"\u006d","\u007a"};};type Subpath struct{Commands []*Command ;};func _bfa (_baf *GraphicSVG ,_cab *_gc .ContentCreator ){_cab .Add_q ();_baf .Style .toContentStream (_cab );_cae ,_egc :=_cfd (_baf .Attributes ["\u0070\u006f\u0069\u006e\u0074\u0073"]);
|
|
if _egc !=nil {_ee .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",_egc );
|
|
return ;};if len (_cae )%2> 0{_ee .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 _adgg :=0;_adgg < len (_cae );{if _adgg ==0{_cab .Add_m (_cae [_adgg ]*_baf ._bgf ,_cae [_adgg +1]*_baf ._bgf );}else {_cab .Add_l (_cae [_adgg ]*_baf ._bgf ,_cae [_adgg +1]*_baf ._bgf );};_adgg +=2;};if _baf .Style .FillColor !=""&&_baf .Style .StrokeColor !=""{_cab .Add_B ();
|
|
}else if _baf .Style .FillColor !=""{_cab .Add_f ();}else if _baf .Style .StrokeColor !=""{_cab .Add_S ();};_cab .Add_h ();_cab .Add_Q ();};func _ebc (_fc *GraphicSVG ,_d *_gc .ContentCreator ){_d .Add_q ();_fc .Style .toContentStream (_d );_cd ,_ed :=_agc (_fc .Attributes ["\u0064"]);
|
|
if _ed !=nil {_ee .Log .Error ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025s",_ed .Error ());};var (_bb ,_ge =0.0,0.0;_fd ,_bd =0.0,0.0;_bdg *Command ;);for _ ,_ega :=range _cd .Subpaths {for _ ,_ebf :=range _ega .Commands {switch _g .ToLower (_ebf .Symbol ){case "\u006d":_fd ,_bd =_ebf .Params [0]*_fc ._bgf ,_ebf .Params [1]*_fc ._bgf ;
|
|
if !_ebf .isAbsolute (){_fd ,_bd =_bb +_fd -_fc .ViewBox .X ,_ge +_bd -_fc .ViewBox .Y ;};_d .Add_m (_bda (_fd ,3),_bda (_bd ,3));_bb ,_ge =_fd ,_bd ;case "\u0063":_aa ,_eef ,_fcg ,_ab ,_bee ,_da :=_ebf .Params [0]*_fc ._bgf ,_ebf .Params [1]*_fc ._bgf ,_ebf .Params [2]*_fc ._bgf ,_ebf .Params [3]*_fc ._bgf ,_ebf .Params [4]*_fc ._bgf ,_ebf .Params [5]*_fc ._bgf ;
|
|
if !_ebf .isAbsolute (){_aa ,_eef ,_fcg ,_ab ,_bee ,_da =_bb +_aa ,_ge +_eef ,_bb +_fcg ,_ge +_ab ,_bb +_bee ,_ge +_da ;};_d .Add_c (_bda (_aa ,3),_bda (_eef ,3),_bda (_fcg ,3),_bda (_ab ,3),_bda (_bee ,3),_bda (_da ,3));_bb ,_ge =_bee ,_da ;case "\u0073":_caf ,_ga ,_dac ,_bdd :=_ebf .Params [0]*_fc ._bgf ,_ebf .Params [1]*_fc ._bgf ,_ebf .Params [2]*_fc ._bgf ,_ebf .Params [3]*_fc ._bgf ;
|
|
if !_ebf .isAbsolute (){_caf ,_ga ,_dac ,_bdd =_bb +_caf ,_ge +_ga ,_bb +_dac ,_ge +_bdd ;};_d .Add_c (_bda (_bb ,3),_bda (_ge ,3),_bda (_caf ,3),_bda (_ga ,3),_bda (_dac ,3),_bda (_bdd ,3));_bb ,_ge =_dac ,_bdd ;case "\u006c":_bf ,_dc :=_ebf .Params [0]*_fc ._bgf ,_ebf .Params [1]*_fc ._bgf ;
|
|
if !_ebf .isAbsolute (){_bf ,_dc =_bb +_bf ,_ge +_dc ;};_d .Add_l (_bda (_bf ,3),_bda (_dc ,3));_bb ,_ge =_bf ,_dc ;case "\u0068":_gd :=_ebf .Params [0]*_fc ._bgf ;if !_ebf .isAbsolute (){_gd =_bb +_gd ;};_d .Add_l (_bda (_gd ,3),_bda (_ge ,3));_bb =_gd ;
|
|
case "\u0076":_fa :=_ebf .Params [0]*_fc ._bgf ;if !_ebf .isAbsolute (){_fa =_ge +_fa ;};_d .Add_l (_bda (_bb ,3),_bda (_fa ,3));_ge =_fa ;case "\u0071":_fe ,_ag ,_ffa ,_bfb :=_ebf .Params [0]*_fc ._bgf ,_ebf .Params [1]*_fc ._bgf ,_ebf .Params [2]*_fc ._bgf ,_ebf .Params [3]*_fc ._bgf ;
|
|
if !_ebf .isAbsolute (){_fe ,_ag ,_ffa ,_bfb =_bb +_fe ,_ge +_ag ,_bb +_ffa ,_ge +_bfb ;};_geg ,_bba :=_ba .QuadraticToCubicBezier (_bb ,_ge ,_fe ,_ag ,_ffa ,_bfb );_d .Add_c (_bda (_geg .X ,3),_bda (_geg .Y ,3),_bda (_bba .X ,3),_bda (_bba .Y ,3),_bda (_ffa ,3),_bda (_bfb ,3));
|
|
_bb ,_ge =_ffa ,_bfb ;case "\u0074":var _ad ,_fb _ba .Point ;_ea ,_fcd :=_ebf .Params [0]*_fc ._bgf ,_ebf .Params [1]*_fc ._bgf ;if !_ebf .isAbsolute (){_ea ,_fcd =_bb +_ea ,_ge +_fcd ;};if _bdg !=nil &&_g .ToLower (_bdg .Symbol )=="\u0071"{_cafa :=_ba .Point {X :_bdg .Params [0]*_fc ._bgf ,Y :_bdg .Params [1]*_fc ._bgf };
|
|
_ffd :=_ba .Point {X :_bdg .Params [2]*_fc ._bgf ,Y :_bdg .Params [3]*_fc ._bgf };_ebg :=_ffd .Mul (2.0).Sub (_cafa );_ad ,_fb =_ba .QuadraticToCubicBezier (_bb ,_ge ,_ebg .X ,_ebg .Y ,_ea ,_fcd );};_d .Add_c (_bda (_ad .X ,3),_bda (_ad .Y ,3),_bda (_fb .X ,3),_bda (_fb .Y ,3),_bda (_ea ,3),_bda (_fcd ,3));
|
|
_bb ,_ge =_ea ,_fcd ;case "\u0061":_dd ,_fbg :=_ebf .Params [0]*_fc ._bgf ,_ebf .Params [1]*_fc ._bgf ;_bde :=_ebf .Params [2];_fcdd :=_ebf .Params [3]> 0;_ae :=_ebf .Params [4]> 0;_ffb ,_bgb :=_ebf .Params [5]*_fc ._bgf ,_ebf .Params [6]*_fc ._bgf ;if !_ebf .isAbsolute (){_ffb ,_bgb =_bb +_ffb ,_ge +_bgb ;
|
|
};_egg :=_ba .EllipseToCubicBeziers (_bb ,_ge ,_dd ,_fbg ,_bde ,_fcdd ,_ae ,_ffb ,_bgb );for _ ,_gf :=range _egg {_d .Add_c (_bda (_gf [1].X ,3),_bda ((_gf [1].Y ),3),_bda ((_gf [2].X ),3),_bda ((_gf [2].Y ),3),_bda ((_gf [3].X ),3),_bda ((_gf [3].Y ),3));
|
|
};_bb ,_ge =_ffb ,_bgb ;case "\u007a":_d .Add_h ();};_bdg =_ebf ;};};if _fc .Style .FillColor !=""&&_fc .Style .StrokeColor !=""{_d .Add_B ();}else if _fc .Style .FillColor !=""{_d .Add_f ();}else if _fc .Style .StrokeColor !=""{_d .Add_S ();};_d .Add_h ();
|
|
_d .Add_Q ();};func ParseFromStream (source _gb .Reader )(*GraphicSVG ,error ){_fce :=_efb .NewDecoder (source );_fce .CharsetReader =_eb .NewReaderLabel ;_gba ,_ffbdc :=_gdd (_fce );if _ffbdc !=nil {return nil ,_ffbdc ;};if _aea :=_gba .Decode (_fce );
|
|
_aea !=nil &&_aea !=_gb .EOF {return nil ,_aea ;};return _gba ,nil ;};func _cec (_dace map[string ]string ,_gea float64 )(*GraphicSVGStyle ,error ){_bfcf :=_gbb ();_abbc ,_bdda :=_dace ["\u0066\u0069\u006c\u006c"];if _bdda {_bfcf .FillColor =_abbc ;if _abbc =="\u006e\u006f\u006e\u0065"{_bfcf .FillColor ="";
|
|
};};_cff ,_gda :=_dace ["\u0073\u0074\u0072\u006f\u006b\u0065"];if _gda {_bfcf .StrokeColor =_cff ;if _cff =="\u006e\u006f\u006e\u0065"{_bfcf .StrokeColor ="";};};_gbe ,_aece :=_dace ["\u0073\u0074\u0072o\u006b\u0065\u002d\u0077\u0069\u0064\u0074\u0068"];
|
|
if _aece {_eabe ,_cgb :=_babf (_gbe ,64);if _cgb !=nil {return nil ,_cgb ;};_bfcf .StrokeWidth =_eabe *_gea ;};return _bfcf ,nil ;};func _cef (_gcd float64 )int {return int (_gcd +_a .Copysign (0.5,_gcd ))};func ParseFromString (svgStr string )(*GraphicSVG ,error ){return ParseFromStream (_g .NewReader (svgStr ));
|
|
};func _efbb (_ffg *GraphicSVG ,_eae *_gc .ContentCreator ){_eae .Add_q ();_ffg .Style .toContentStream (_eae );_fgb ,_bfba :=_babf (_ffg .Attributes ["\u0063\u0078"],64);if _bfba !=nil {_ee .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",_bfba .Error ());
|
|
};_aga ,_bfba :=_babf (_ffg .Attributes ["\u0063\u0079"],64);if _bfba !=nil {_ee .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",_bfba .Error ());
|
|
};_fdg ,_bfba :=_babf (_ffg .Attributes ["\u0072\u0078"],64);if _bfba !=nil {_ee .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",_bfba .Error ());
|
|
};_aec ,_bfba :=_babf (_ffg .Attributes ["\u0072\u0079"],64);if _bfba !=nil {_ee .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",_bfba .Error ());
|
|
};_agf :=_fdg *_ffg ._bgf ;_de :=_aec *_ffg ._bgf ;_cg :=_fgb *_ffg ._bgf ;_cbf :=_aga *_ffg ._bgf ;_cde :=_agf *_be ;_adg :=_de *_be ;_fba :=_ca .NewCubicBezierPath ();_fba =_fba .AppendCurve (_ca .NewCubicBezierCurve (-_agf ,0,-_agf ,_adg ,-_cde ,_de ,0,_de ));
|
|
_fba =_fba .AppendCurve (_ca .NewCubicBezierCurve (0,_de ,_cde ,_de ,_agf ,_adg ,_agf ,0));_fba =_fba .AppendCurve (_ca .NewCubicBezierCurve (_agf ,0,_agf ,-_adg ,_cde ,-_de ,0,-_de ));_fba =_fba .AppendCurve (_ca .NewCubicBezierCurve (0,-_de ,-_cde ,-_de ,-_agf ,-_adg ,-_agf ,0));
|
|
_fba =_fba .Offset (_cg ,_cbf );if _ffg .Style .StrokeWidth > 0{_fba =_fba .Offset (_ffg .Style .StrokeWidth /2,_ffg .Style .StrokeWidth /2);};_ca .DrawBezierPathWithCreator (_fba ,_eae );if _ffg .Style .FillColor !=""&&_ffg .Style .StrokeColor !=""{_eae .Add_B ();
|
|
}else if _ffg .Style .FillColor !=""{_eae .Add_f ();}else if _ffg .Style .StrokeColor !=""{_eae .Add_S ();};_eae .Add_h ();_eae .Add_Q ();};func (_bbd *commands )isCommand (_gad string )bool {for _ ,_bbc :=range _bbd ._ffdc {if _g .ToLower (_gad )==_bbc {return true ;
|
|
};};return false ;};func (_afb *GraphicSVG )setDefaultScaling (_fdc float64 ){_afb ._bgf =_fdc ;if _afb .Style !=nil &&_afb .Style .StrokeWidth > 0{_afb .Style .StrokeWidth =_afb .Style .StrokeWidth *_afb ._bgf ;};for _ ,_fac :=range _afb .Children {_fac .setDefaultScaling (_fdc );
|
|
};};const (_eg =0.72;_bg =28.3464;_ac =_bg /10;_be =0.551784;);func (_cdec *Subpath )compare (_dfba *Subpath )bool {if len (_cdec .Commands )!=len (_dfba .Commands ){return false ;};for _gfef ,_bef :=range _cdec .Commands {if !_bef .compare (_dfba .Commands [_gfef ]){return false ;
|
|
};};return true ;};func (_gag *GraphicSVG )toContentStream (_ec *_gc .ContentCreator ){_bgg ,_edg :=_cec (_gag .Attributes ,_gag ._bgf );if _edg !=nil {_ee .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",_edg );
|
|
};_gag .Style =_bgg ;switch _gag .Name {case "\u0070\u0061\u0074\u0068":_ebc (_gag ,_ec );for _ ,_df :=range _gag .Children {_df .toContentStream (_ec );};case "\u0072\u0065\u0063\u0074":_acd (_gag ,_ec );for _ ,_ceb :=range _gag .Children {_ceb .toContentStream (_ec );
|
|
};case "\u0063\u0069\u0072\u0063\u006c\u0065":_af (_gag ,_ec );for _ ,_eff :=range _gag .Children {_eff .toContentStream (_ec );};case "\u0065l\u006c\u0069\u0070\u0073\u0065":_efbb (_gag ,_ec );for _ ,_cfb :=range _gag .Children {_cfb .toContentStream (_ec );
|
|
};case "\u0070\u006f\u006c\u0079\u006c\u0069\u006e\u0065":_bfa (_gag ,_ec );for _ ,_ggb :=range _gag .Children {_ggb .toContentStream (_ec );};case "\u0070o\u006c\u0079\u0067\u006f\u006e":_gec (_gag ,_ec );for _ ,_fgg :=range _gag .Children {_fgg .toContentStream (_ec );
|
|
};case "\u006c\u0069\u006e\u0065":_eeb (_gag ,_ec );for _ ,_dfd :=range _gag .Children {_dfd .toContentStream (_ec );};case "\u0067":_fgd ,_eeg :=_gag .Attributes ["\u0066\u0069\u006c\u006c"];_ffbd ,_aad :=_gag .Attributes ["\u0073\u0074\u0072\u006f\u006b\u0065"];
|
|
_bbg ,_fcb :=_gag .Attributes ["\u0073\u0074\u0072o\u006b\u0065\u002d\u0077\u0069\u0064\u0074\u0068"];for _ ,_fdf :=range _gag .Children {if _ ,_fdac :=_fdf .Attributes ["\u0066\u0069\u006c\u006c"];!_fdac &&_eeg {_fdf .Attributes ["\u0066\u0069\u006c\u006c"]=_fgd ;
|
|
};if _ ,_gce :=_fdf .Attributes ["\u0073\u0074\u0072\u006f\u006b\u0065"];!_gce &&_aad {_fdf .Attributes ["\u0073\u0074\u0072\u006f\u006b\u0065"]=_ffbd ;};if _ ,_egd :=_fdf .Attributes ["\u0073\u0074\u0072o\u006b\u0065\u002d\u0077\u0069\u0064\u0074\u0068"];
|
|
!_egd &&_fcb {_fdf .Attributes ["\u0073\u0074\u0072o\u006b\u0065\u002d\u0077\u0069\u0064\u0074\u0068"]=_bbg ;};_fdf .toContentStream (_ec );};};};func (_gdgd *GraphicSVGStyle )toContentStream (_dgd *_gc .ContentCreator ){if _gdgd ==nil {return ;};if _gdgd .FillColor !=""{var _cgg ,_add ,_daa float64 ;
|
|
if _ddgd ,_fab :=_ba .ColorMap [_gdgd .FillColor ];_fab {_fgge ,_gbgb ,_abb ,_ :=_ddgd .RGBA ();_cgg ,_add ,_daa =float64 (_fgge ),float64 (_gbgb ),float64 (_abb );}else {_cgg ,_add ,_daa =_bgfa (_gdgd .FillColor );};_dgd .Add_rg (_cgg ,_add ,_daa );};
|
|
if _gdgd .StrokeColor !=""{var _gfgd ,_ceg ,_cdb float64 ;if _ffga ,_gab :=_ba .ColorMap [_gdgd .StrokeColor ];_gab {_bdf ,_faa ,_dcb ,_ :=_ffga .RGBA ();_gfgd ,_ceg ,_cdb =float64 (_bdf )/255.0,float64 (_faa )/255.0,float64 (_dcb )/255.0;}else {_gfgd ,_ceg ,_cdb =_bgfa (_gdgd .StrokeColor );
|
|
};_dgd .Add_RG (_gfgd ,_ceg ,_cdb );};if _gdgd .StrokeWidth > 0{_dgd .Add_w (_gdgd .StrokeWidth );};};func _ebfc (_effc string )[]token {var (_gbed []token ;_gcf string ;);for _ ,_gae :=range _effc {_faaf :=string (_gae );switch {case _bdc .isCommand (_faaf ):_gbed ,_gcf =_bdce (_gbed ,_gcf );
|
|
_gbed =append (_gbed ,token {_faaf ,true });case _faaf =="\u002e":if _gcf ==""{_gcf ="\u0030";};if _g .Contains (_gcf ,_faaf ){_gbed =append (_gbed ,token {_gcf ,false });_gcf ="\u0030";};fallthrough;case _faaf >="\u0030"&&_faaf <="\u0039"||_faaf =="\u0065":_gcf +=_faaf ;
|
|
case _faaf =="\u002d":if _g .HasSuffix (_gcf ,"\u0065"){_gcf +=_faaf ;}else {_gbed ,_ =_bdce (_gbed ,_gcf );_gcf =_faaf ;};default:_gbed ,_gcf =_bdce (_gbed ,_gcf );};};_gbed ,_ =_bdce (_gbed ,_gcf );return _gbed ;};var _bdc commands ;func _gec (_acf *GraphicSVG ,_ede *_gc .ContentCreator ){_ede .Add_q ();
|
|
_acf .Style .toContentStream (_ede );_aee ,_cfg :=_cfd (_acf .Attributes ["\u0070\u006f\u0069\u006e\u0074\u0073"]);if _cfg !=nil {_ee .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",_cfg );
|
|
return ;};if len (_aee )%2> 0{_ee .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 _agb :=0;_agb < len (_aee );{if _agb ==0{_ede .Add_m (_aee [_agb ]*_acf ._bgf ,_aee [_agb +1]*_acf ._bgf );}else {_ede .Add_l (_aee [_agb ]*_acf ._bgf ,_aee [_agb +1]*_acf ._bgf );};_agb +=2;};_ede .Add_l (_aee [0]*_acf ._bgf ,_aee [1]*_acf ._bgf );
|
|
if _acf .Style .FillColor !=""&&_acf .Style .StrokeColor !=""{_ede .Add_B ();}else if _acf .Style .FillColor !=""{_ede .Add_f ();}else if _acf .Style .StrokeColor !=""{_ede .Add_S ();};_ede .Add_h ();_ede .Add_Q ();};func _af (_ccc *GraphicSVG ,_afe *_gc .ContentCreator ){_afe .Add_q ();
|
|
_ccc .Style .toContentStream (_afe );_daf ,_cf :=_babf (_ccc .Attributes ["\u0063\u0078"],64);if _cf !=nil {_ee .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",_cf .Error ());
|
|
};_fed ,_cf :=_babf (_ccc .Attributes ["\u0063\u0079"],64);if _cf !=nil {_ee .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",_cf .Error ());
|
|
};_cb ,_cf :=_babf (_ccc .Attributes ["\u0072"],64);if _cf !=nil {_ee .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",_cf .Error ());
|
|
};_ddg :=_cb *_ccc ._bgf ;_fee :=_cb *_ccc ._bgf ;_edd :=_ddg *_be ;_fg :=_fee *_be ;_gbg :=_ca .NewCubicBezierPath ();_gbg =_gbg .AppendCurve (_ca .NewCubicBezierCurve (-_ddg ,0,-_ddg ,_fg ,-_edd ,_fee ,0,_fee ));_gbg =_gbg .AppendCurve (_ca .NewCubicBezierCurve (0,_fee ,_edd ,_fee ,_ddg ,_fg ,_ddg ,0));
|
|
_gbg =_gbg .AppendCurve (_ca .NewCubicBezierCurve (_ddg ,0,_ddg ,-_fg ,_edd ,-_fee ,0,-_fee ));_gbg =_gbg .AppendCurve (_ca .NewCubicBezierCurve (0,-_fee ,-_edd ,-_fee ,-_ddg ,-_fg ,-_ddg ,0));_gbg =_gbg .Offset (_daf *_ccc ._bgf ,_fed *_ccc ._bgf );if _ccc .Style .StrokeWidth > 0{_gbg =_gbg .Offset (_ccc .Style .StrokeWidth /2,_ccc .Style .StrokeWidth /2);
|
|
};_ca .DrawBezierPathWithCreator (_gbg ,_afe );if _ccc .Style .FillColor !=""&&_ccc .Style .StrokeColor !=""{_afe .Add_B ();}else if _ccc .Style .FillColor !=""{_afe .Add_f ();}else if _ccc .Style .StrokeColor !=""{_afe .Add_S ();};_afe .Add_h ();_afe .Add_Q ();
|
|
};type Path struct{Subpaths []*Subpath ;};func _agc (_ffge string )(*Path ,error ){_bdc =_cad ();_dca ,_dba :=_bgdg (_ebfc (_ffge ));if _dba !=nil {return nil ,_dba ;};return _ebfce (_dca ),nil ;};type pathParserError struct{_eddg string };type GraphicSVGStyle struct{FillColor string ;
|
|
StrokeColor string ;StrokeWidth float64 ;};func ParseFromFile (path string )(*GraphicSVG ,error ){_abba ,_agbf :=_c .Open (path );if _agbf !=nil {return nil ,_agbf ;};defer _abba .Close ();return ParseFromStream (_abba );};func _bda (_ggf float64 ,_cgbb int )float64 {_dgde :=_a .Pow (10,float64 (_cgbb ));
|
|
return float64 (_cef (_ggf *_dgde ))/_dgde ;};var (_ff =[]string {"\u0063\u006d","\u006d\u006d","\u0070\u0078","\u0070\u0074"};_cc =map[string ]float64 {"\u0063\u006d":_bg ,"\u006d\u006d":_ac ,"\u0070\u0078":_eg ,"\u0070\u0074":1};);func _bgfa (_feec string )(_gcc ,_fcbf ,_beb float64 ){if (len (_feec )!=4&&len (_feec )!=7)||_feec [0]!='#'{_ee .Log .Debug ("I\u006ev\u0061\u006c\u0069\u0064\u0020\u0068\u0065\u0078 \u0063\u006f\u0064\u0065: \u0025\u0073",_feec );
|
|
return _gcc ,_fcbf ,_beb ;};var _ffad ,_aaa ,_bafg int ;if len (_feec )==4{var _cedb ,_bfce ,_dcg int ;_efce ,_bea :=_f .Sscanf (_feec ,"\u0023\u0025\u0031\u0078\u0025\u0031\u0078\u0025\u0031\u0078",&_cedb ,&_bfce ,&_dcg );if _bea !=nil {_ee .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",_feec ,_bea );
|
|
return _gcc ,_fcbf ,_beb ;};if _efce !=3{_ee .Log .Debug ("I\u006ev\u0061\u006c\u0069\u0064\u0020\u0068\u0065\u0078 \u0063\u006f\u0064\u0065: \u0025\u0073",_feec );return _gcc ,_fcbf ,_beb ;};_ffad =_cedb *16+_cedb ;_aaa =_bfce *16+_bfce ;_bafg =_dcg *16+_dcg ;
|
|
}else {_cea ,_bac :=_f .Sscanf (_feec ,"\u0023\u0025\u0032\u0078\u0025\u0032\u0078\u0025\u0032\u0078",&_ffad ,&_aaa ,&_bafg );if _bac !=nil {_ee .Log .Debug ("I\u006ev\u0061\u006c\u0069\u0064\u0020\u0068\u0065\u0078 \u0063\u006f\u0064\u0065: \u0025\u0073",_feec );
|
|
return _gcc ,_fcbf ,_beb ;};if _cea !=3{_ee .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",_feec ,_cea );
|
|
return _gcc ,_fcbf ,_beb ;};};_gega :=float64 (_ffad )/255.0;_bbb :=float64 (_aaa )/255.0;_eac :=float64 (_bafg )/255.0;return _gega ,_bbb ,_eac ;};func _bgdg (_efdg []token )([]*Command ,error ){var (_eecg []*Command ;_fage []float64 ;);for _cfbg :=len (_efdg )-1;
|
|
_cfbg >=0;_cfbg --{_eccb :=_efdg [_cfbg ];if _eccb ._daaf {_afa :=_bdc ._def [_g .ToLower (_eccb ._dgc )];_ade :=len (_fage );if _afa ==0&&_ade ==0{_adc :=&Command {Symbol :_eccb ._dgc };_eecg =append ([]*Command {_adc },_eecg ...);}else if _afa !=0&&_ade %_afa ==0{_efc :=_ade /_afa ;
|
|
for _gegb :=0;_gegb < _efc ;_gegb ++{_fgea :=_eccb ._dgc ;if _fgea =="\u006d"&&_gegb < _efc -1{_fgea ="\u006c";};if _fgea =="\u004d"&&_gegb < _efc -1{_fgea ="\u004c";};_edgf :=&Command {_fgea ,_efd (_fage [:_afa ])};_eecg =append ([]*Command {_edgf },_eecg ...);
|
|
_fage =_fage [_afa :];};}else {_dbbg :=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"+_eccb ._dgc };
|
|
return nil ,_dbbg ;};}else {_afcc ,_gfde :=_babf (_eccb ._dgc ,64);if _gfde !=nil {return nil ,_gfde ;};_fage =append (_fage ,_afcc );};};return _eecg ,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 ;_bgf float64 ;};func _eeb (_gfa *GraphicSVG ,_dbc *_gc .ContentCreator ){_dbc .Add_q ();_gfa .Style .toContentStream (_dbc );_fbf ,_fda :=_babf (_gfa .Attributes ["\u0078\u0031"],64);
|
|
if _fda !=nil {_ee .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",_fda .Error ());};_cbb ,_fda :=_babf (_gfa .Attributes ["\u0079\u0031"],64);
|
|
if _fda !=nil {_ee .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",_fda .Error ());};_gfad ,_fda :=_babf (_gfa .Attributes ["\u0078\u0032"],64);
|
|
if _fda !=nil {_ee .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",_fda .Error ());};_bbe ,_fda :=_babf (_gfa .Attributes ["\u0079\u0032"],64);
|
|
if _fda !=nil {_ee .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",_fda .Error ());};_dbc .Add_m (_fbf *_gfa ._bgf ,_cbb *_gfa ._bgf );
|
|
_dbc .Add_l (_gfad *_gfa ._bgf ,_bbe *_gfa ._bgf );if _gfa .Style .FillColor !=""&&_gfa .Style .StrokeColor !=""{_dbc .Add_B ();}else if _gfa .Style .FillColor !=""{_dbc .Add_f ();}else if _gfa .Style .StrokeColor !=""{_dbc .Add_S ();};_dbc .Add_h ();_dbc .Add_Q ();
|
|
};func _gbb ()*GraphicSVGStyle {return &GraphicSVGStyle {FillColor :"\u00230\u0030\u0030\u0030\u0030\u0030",StrokeColor :"",StrokeWidth :0};};func _acd (_agd *GraphicSVG ,_cdf *_gc .ContentCreator ){_cdf .Add_q ();_agd .Style .toContentStream (_cdf );_bec ,_dbb :=_babf (_agd .Attributes ["\u0078"],64);
|
|
if _dbb !=nil {_ee .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",_dbb .Error ());};_fbd ,_dbb :=_babf (_agd .Attributes ["\u0079"],64);
|
|
if _dbb !=nil {_ee .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",_dbb .Error ());};_gde ,_dbb :=_babf (_agd .Attributes ["\u0077\u0069\u0064t\u0068"],64);
|
|
if _dbb !=nil {_ee .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",_dbb .Error ());
|
|
};_gfd ,_dbb :=_babf (_agd .Attributes ["\u0068\u0065\u0069\u0067\u0068\u0074"],64);if _dbb !=nil {_ee .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",_dbb .Error ());
|
|
};_cdf .Add_re (_bec *_agd ._bgf ,_fbd *_agd ._bgf ,_gde *_agd ._bgf ,_gfd *_agd ._bgf );if _agd .Style .FillColor !=""&&_agd .Style .StrokeColor !=""{_cdf .Add_B ();}else if _agd .Style .FillColor !=""{_cdf .Add_f ();}else if _agd .Style .StrokeColor !=""{_cdf .Add_S ();
|
|
};_cdf .Add_Q ();};func _edb (_acfg string )(_dad []float64 ,_dcd error ){var _ggg float64 ;_cfe :=0;_bab :=true ;for _gge ,_cgcb :=range _acfg {if _cgcb =='.'{if _bab {_bab =false ;continue ;};_ggg ,_dcd =_babf (_acfg [_cfe :_gge ],64);if _dcd !=nil {return ;
|
|
};_dad =append (_dad ,_ggg );_cfe =_gge ;};};_ggg ,_dcd =_babf (_acfg [_cfe :],64);if _dcd !=nil {return ;};_dad =append (_dad ,_ggg );return ;};func _dfbaf (_bbcf string )(_cebb ,_gegc string ){if _bbcf ==""||(_bbcf [len (_bbcf )-1]>='0'&&_bbcf [len (_bbcf )-1]<='9'){return _bbcf ,"";
|
|
};_cebb =_bbcf ;for _ ,_ecd :=range _ff {if _g .Contains (_cebb ,_ecd ){_gegc =_ecd ;};_cebb =_g .TrimSuffix (_cebb ,_ecd );};return ;};func _gdd (_ced *_efb .Decoder )(*GraphicSVG ,error ){for {_cfba ,_gdc :=_ced .Token ();if _cfba ==nil &&_gdc ==_gb .EOF {break ;
|
|
};if _gdc !=nil {return nil ,_gdc ;};switch _gdee :=_cfba .(type ){case _efb .StartElement :return _agbb (_gdee ),nil ;};};return &GraphicSVG {},nil ;};func (_eab *GraphicSVG )Decode (decoder *_efb .Decoder )error {for {_aae ,_afc :=decoder .Token ();if _aae ==nil &&_afc ==_gb .EOF {break ;
|
|
};if _afc !=nil {return _afc ;};switch _cfa :=_aae .(type ){case _efb .StartElement :_dee :=_agbb (_cfa );_bdgg :=_dee .Decode (decoder );if _bdgg !=nil {return _bdgg ;};_eab .Children =append (_eab .Children ,_dee );case _efb .CharData :_dg :=_g .TrimSpace (string (_cfa ));
|
|
if _dg !=""{_eab .Content =string (_cfa );};case _efb .EndElement :if _cfa .Name .Local ==_eab .Name {return nil ;};};};return nil ;};type commands struct{_ffdc []string ;_def map[string ]int ;_dbe string ;_fec string ;};type token struct{_dgc string ;
|
|
_daaf bool ;};func _babf (_aef string ,_fbca int )(float64 ,error ){_cfbb ,_fgga :=_dfbaf (_aef );_abd ,_edgc :=_ef .ParseFloat (_cfbb ,_fbca );if _edgc !=nil {return 0,_edgc ;};if _baa ,_ebe :=_cc [_fgga ];_ebe {_abd =_abd *_baa ;}else {_abd =_abd *_eg ;
|
|
};return _abd ,nil ;};func (_fad *Path )compare (_bbef *Path )bool {if len (_fad .Subpaths )!=len (_bbef .Subpaths ){return false ;};for _cdee ,_cgc :=range _fad .Subpaths {if !_cgc .compare (_bbef .Subpaths [_cdee ]){return false ;};};return true ;};func (_dfb pathParserError )Error ()string {return _dfb ._eddg };
|
|
func _ebfce (_bbf []*Command )*Path {_faf :=&Path {};var _bcf []*Command ;for _afd ,_egge :=range _bbf {switch _g .ToLower (_egge .Symbol ){case _bdc ._dbe :if len (_bcf )> 0{_faf .Subpaths =append (_faf .Subpaths ,&Subpath {_bcf });};_bcf =[]*Command {_egge };
|
|
case _bdc ._fec :_bcf =append (_bcf ,_egge );_faf .Subpaths =append (_faf .Subpaths ,&Subpath {_bcf });_bcf =[]*Command {};default:_bcf =append (_bcf ,_egge );if len (_bbf )==_afd +1{_faf .Subpaths =append (_faf .Subpaths ,&Subpath {_bcf });};};};return _faf ;
|
|
};func _bdce (_bcc []token ,_cca string )([]token ,string ){if _cca !=""{_bcc =append (_bcc ,token {_cca ,false });_cca ="";};return _bcc ,_cca ;};func (_fgdc *Command )isAbsolute ()bool {return _fgdc .Symbol ==_g .ToUpper (_fgdc .Symbol )};func _agbb (_edf _efb .StartElement )*GraphicSVG {_fag :=&GraphicSVG {};
|
|
_aecd :=make (map[string ]string );for _ ,_ecc :=range _edf .Attr {_aecd [_ecc .Name .Local ]=_ecc .Value ;};_fag .Name =_edf .Name .Local ;_fag .Attributes =_aecd ;_fag ._bgf =1;if _fag .Name =="\u0073\u0076\u0067"{_aab ,_acfe :=_cfd (_aecd ["\u0076i\u0065\u0077\u0042\u006f\u0078"]);
|
|
if _acfe !=nil {_ee .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",_acfe );return nil ;
|
|
};_fag .ViewBox .X =_aab [0];_fag .ViewBox .Y =_aab [1];_fag .ViewBox .W =_aab [2];_fag .ViewBox .H =_aab [3];_fag .Width =_fag .ViewBox .W ;_fag .Height =_fag .ViewBox .H ;if _dag ,_gcef :=_aecd ["\u0077\u0069\u0064t\u0068"];_gcef {_ccce ,_caeg :=_babf (_dag ,64);
|
|
if _caeg !=nil {_ee .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",_caeg );return nil ;};_fag .Width =_ccce ;
|
|
};if _cge ,_dfg :=_aecd ["\u0068\u0065\u0069\u0067\u0068\u0074"];_dfg {_eaa ,_aba :=_babf (_cge ,64);if _aba !=nil {_ee .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",_aba );
|
|
return nil ;};_fag .Height =_eaa ;};if _fag .Width > 0&&_fag .Height > 0{_fag ._bgf =_fag .Width /_fag .ViewBox .W ;};};return _fag ;};func (_gdb *Command )compare (_cabf *Command )bool {if _gdb .Symbol !=_cabf .Symbol {return false ;};for _fgf ,_ada :=range _gdb .Params {if _ada !=_cabf .Params [_fgf ]{return false ;
|
|
};};return true ;};type Command struct{Symbol string ;Params []float64 ;};func (_gg *GraphicSVG )ToContentCreator (cc *_gc .ContentCreator )*_gc .ContentCreator {if _gg .Name =="\u0073\u0076\u0067"{cc .Add_cm (1,0,0,1,0,0);_gg .setDefaultScaling (_gg ._bgf );
|
|
for _ ,_bc :=range _gg .Children {_bc .ViewBox =_gg .ViewBox ;_bc .toContentStream (cc );};return cc ;};return nil ;}; |