@@ -59,7 +59,10 @@ static void svg_bzptarray(GVJ_t * job, pointf * A, int n)
5959 if (A [0 ].x <= A [n - 1 ].x ) {
6060#endif
6161 for (i = 0 ; i < n ; i ++ ) {
62- gvprintf (job , "%c%g,%g" , c , A [i ].x , - A [i ].y );
62+ gvprintf (job , "%c" , c );
63+ gvprintdouble (job , A [i ].x );
64+ gvputs (job , "," );
65+ gvprintdouble (job , - A [i ].y );
6366 if (i == 0 )
6467 c = 'C' ; /* second point */
6568 else
@@ -68,7 +71,10 @@ static void svg_bzptarray(GVJ_t * job, pointf * A, int n)
6871#if EDGEALIGN
6972 } else {
7073 for (i = n - 1 ; i >= 0 ; i -- ) {
71- gvprintf (job , "%c%g,%g" , c , A [i ].x , - A [i ].y );
74+ gvprintf (job , "%c" , c );
75+ gvprintdouble (job , A [i ].x );
76+ gvputs (job , "," );
77+ gvprintdouble (job , - A [i ].y );
7278 if (i == 0 )
7379 c = 'C' ; /* second point */
7480 else
@@ -133,8 +139,10 @@ static void svg_grstyle(GVJ_t * job, int filled, int gid)
133139 }
134140 gvputs (job , "\" stroke=\"" );
135141 svg_print_color (job , obj -> pencolor );
136- if (obj -> penwidth != PENWIDTH_NORMAL )
137- gvprintf (job , "\" stroke-width=\"%g" , obj -> penwidth );
142+ if (obj -> penwidth != PENWIDTH_NORMAL ) {
143+ gvputs (job , "\" stroke-width=\"" );
144+ gvprintdouble (job , obj -> penwidth );
145+ }
138146 if (obj -> pen == PEN_DASHED ) {
139147 gvprintf (job , "\" stroke-dasharray=\"%s" , sdasharray );
140148 } else if (obj -> pen == PEN_DOTTED ) {
@@ -244,10 +252,15 @@ static void svg_begin_page(GVJ_t * job)
244252 /* its really just a page of the graph, but its still a graph,
245253 * and it is the entire graph if we're not currently paging */
246254 svg_print_id_class (job , obj -> id , NULL , "graph" , obj -> u .g );
247- gvprintf (job ,
248- " transform=\"scale(%g %g) rotate(%d) translate(%g %g)\">\n" ,
249- job -> scale .x , job -> scale .y , - job -> rotation ,
250- job -> translation .x , - job -> translation .y );
255+ gvputs (job , " transform=\"scale(" );
256+ gvprintdouble (job , job -> scale .x );
257+ gvputs (job , " " );
258+ gvprintdouble (job , job -> scale .y );
259+ gvprintf (job , ") rotate(%d) translate(" , - job -> rotation );
260+ gvprintdouble (job , job -> translation .x );
261+ gvputs (job , " " );
262+ gvprintdouble (job , - job -> translation .y );
263+ gvputs (job , ")\">\n" );
251264 /* default style */
252265 if (agnameof (obj -> u .g )[0 ]) {
253266 gvputs (job , "<title>" );
@@ -391,8 +404,13 @@ static void svg_textspan(GVJ_t * job, pointf p, textspan_t * span)
391404 break ;
392405 }
393406 p .y += span -> yoffset_centerline ;
394- if (!obj -> labeledgealigned )
395- gvprintf (job , " x=\"%g\" y=\"%g\"" , p .x , - p .y );
407+ if (!obj -> labeledgealigned ) {
408+ gvputs (job , " x=\"" );
409+ gvprintdouble (job , p .x );
410+ gvputs (job , "\" y=\"" );
411+ gvprintdouble (job , p .y );
412+ gvputs (job , "\"" );
413+ }
396414 pA = span -> font -> postscript_alias ;
397415 if (pA ) {
398416 switch (GD_fontnames (job -> gvc -> g )) {
@@ -469,8 +487,10 @@ static void svg_textspan(GVJ_t * job, pointf p, textspan_t * span)
469487 }
470488 gvputs (job , ">" );
471489 if (obj -> labeledgealigned ) {
472- gvprintf (job , "<textPath xlink:href=\"#%s_p\" startOffset=\"50%%\">" , xml_string (obj -> id ));
473- gvprintf (job , "<tspan x=\"0\" dy=\"%g\">" , - p .y );
490+ gvprintf (job , "<textPath xlink:href=\"#%s_p\" startOffset=\"50%%\">" , xml_string (obj -> id ));
491+ gvputs (job , "<tspan x=\"0\" dy=\"" );
492+ gvprintdouble (job , - p .y );
493+ gvputs (job , "\">" );
474494 }
475495 gvputs (job , xml_string0 (span -> str , TRUE));
476496 if (obj -> labeledgealigned )
@@ -495,8 +515,15 @@ static int svg_gradstyle(GVJ_t * job, pointf * A, int n)
495515
496516 gvprintf (job ,
497517 "<defs>\n<linearGradient id=\"l_%d\" gradientUnits=\"userSpaceOnUse\" " , id );
498- gvprintf (job , "x1=\"%g\" y1=\"%g\" x2=\"%g\" y2=\"%g\" >\n" , G [0 ].x ,
499- G [0 ].y , G [1 ].x , G [1 ].y );
518+ gvputs (job , "x1=\"" );
519+ gvprintdouble (job , G [0 ].x );
520+ gvputs (job , "\" y1=\"" );
521+ gvprintdouble (job , G [0 ].y );
522+ gvputs (job , "\" x2=\"" );
523+ gvprintdouble (job , G [1 ].x );
524+ gvputs (job , "\" y2=\"" );
525+ gvprintdouble (job , G [1 ].y );
526+ gvputs (job , "\" >\n" );
500527 if (obj -> gradient_frac > 0 )
501528 gvprintf (job , "<stop offset=\"%.03f\" style=\"stop-color:" , obj -> gradient_frac - 0.001 );
502529 else
@@ -582,10 +609,15 @@ static void svg_ellipse(GVJ_t * job, pointf * A, int filled)
582609 }
583610 gvputs (job , "<ellipse" );
584611 svg_grstyle (job , filled , gid );
585- gvprintf (job , " cx=\"%g\" cy=\"%g\"" , A [0 ].x , - A [0 ].y );
586- gvprintf (job , " rx=\"%g\" ry=\"%g\"" ,
587- A [1 ].x - A [0 ].x , A [1 ].y - A [0 ].y );
588- gvputs (job , "/>\n" );
612+ gvputs (job , " cx=\"" );
613+ gvprintdouble (job , A [0 ].x );
614+ gvputs (job , "\" cy=\"" );
615+ gvprintdouble (job , - A [0 ].y );
616+ gvputs (job , "\" rx=\"" );
617+ gvprintdouble (job , A [1 ].x - A [0 ].x );
618+ gvputs (job , "\" ry=\"" );
619+ gvprintdouble (job , A [1 ].y - A [0 ].y );
620+ gvputs (job , "\"/>\n" );
589621}
590622
591623static void
@@ -623,9 +655,16 @@ static void svg_polygon(GVJ_t * job, pointf * A, int n, int filled)
623655 gvputs (job , "<polygon" );
624656 svg_grstyle (job , filled , gid );
625657 gvputs (job , " points=\"" );
626- for (i = 0 ; i < n ; i ++ )
627- gvprintf (job , "%g,%g " , A [i ].x , - A [i ].y );
628- gvprintf (job , "%g,%g" , A [0 ].x , - A [0 ].y ); /* because Adobe SVG is broken */
658+ for (i = 0 ; i < n ; i ++ ) {
659+ gvprintdouble (job , A [i ].x );
660+ gvputs (job , "," );
661+ gvprintdouble (job , - A [i ].y );
662+ gvputs (job , " " );
663+ }
664+ /* repeat the first point because Adobe SVG is broken */
665+ gvprintdouble (job , A [0 ].x );
666+ gvputs (job , "," );
667+ gvprintdouble (job , - A [0 ].y );
629668 gvputs (job , "\"/>\n" );
630669}
631670
@@ -636,8 +675,12 @@ static void svg_polyline(GVJ_t * job, pointf * A, int n)
636675 gvputs (job , "<polyline" );
637676 svg_grstyle (job , 0 , 0 );
638677 gvputs (job , " points=\"" );
639- for (i = 0 ; i < n ; i ++ )
640- gvprintf (job , "%g,%g " , A [i ].x , - A [i ].y );
678+ for (i = 0 ; i < n ; i ++ ) {
679+ gvprintdouble (job , A [i ].x );
680+ gvputs (job , "," );
681+ gvprintdouble (job , - A [i ].y );
682+ gvputs (job , " " );
683+ }
641684 gvputs (job , "\"/>\n" );
642685}
643686
0 commit comments