@@ -36,8 +36,9 @@ void br_svg_start(duc_graph *g)
36
36
fprintf (f , "<?xml version='1.0' standalone='no'?>\n" );
37
37
fprintf (f , "<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' \n" );
38
38
fprintf (f , " 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>\n" );
39
- fprintf (f , "<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink= 'http://www.w3.org/1999/xlink'>\n" );
40
-
39
+ fprintf (f , "<svg width='%.0fpx' height='%.0fpx'\n" , g -> width , g -> height );
40
+ fprintf (f , " xmlns='http://www.w3.org/2000/svg'\n" );
41
+ fprintf (f , " xmlns:xlink='http://www.w3.org/1999/xlink'>\n" );
41
42
fprintf (f , " <style><![CDATA[\n" );
42
43
fprintf (f , " text {\n" );
43
44
fprintf (f , " font-family: 'Arial';\n" );
@@ -52,31 +53,46 @@ void br_svg_start(duc_graph *g)
52
53
53
54
}
54
55
55
- static void print_html ( const char * s , FILE * f )
56
+ static void draw_text_aux ( int x , const char * s , FILE * f )
56
57
{
57
- while (* s ) {
58
- switch (* s ) {
59
- case '<' : fprintf (f , "<" ); break ;
60
- case '>' : fprintf (f , ">" ); break ;
61
- case '&' : fprintf (f , "&" ); break ;
62
- case '"' : fprintf (f , """ ); break ;
63
- default : fputc (* s , f ); break ;
58
+ char * p = strdup (s );
59
+ assert (p );
60
+
61
+ double y = 0 ;
62
+ char * l = strtok (p , "\n" );
63
+
64
+ while (l != NULL ) {
65
+ fprintf (f , " <tspan x='%d' dy='%.1fem'>" , x , y );
66
+ while (* l ) {
67
+ switch (* l ) {
68
+ case '<' : fprintf (f , "<" ); break ;
69
+ case '>' : fprintf (f , ">" ); break ;
70
+ case '&' : fprintf (f , "&" ); break ;
71
+ case '"' : fprintf (f , """ ); break ;
72
+ default : fputc (* l , f ); break ;
73
+ }
74
+ l ++ ;
64
75
}
65
- s ++ ;
76
+ fprintf (f , "</tspan>\n" );
77
+
78
+ y += 1.2 ;
79
+ l = strtok (NULL , "\n" );
66
80
}
81
+
82
+ free (p );
67
83
}
68
84
69
85
static void br_svg_draw_text (duc_graph * g , double x , double y , double size , char * text )
70
86
{
71
87
struct svg_backend_data * bd = g -> backend_data ;
72
88
FILE * f = bd -> fout ;
73
89
74
- fprintf (f , "<text x='%.0f' y='%.0f' font-size='%.0fpt' stroke='white' stroke-width='2'>" , x , y , size );
75
- print_html ( text , f );
90
+ fprintf (f , "<text x='%.0f' y='%.0f' font-size='%.0fpt' stroke='white' stroke-width='2'>\n " , x , y , size );
91
+ draw_text_aux ( x , text , f );
76
92
fprintf (f , "</text>\n" );
77
-
78
- fprintf (f , "<text x='%.0f' y='%.0f' font-size='%.0fpt' fill='black' stroke-width='2'>" , x , y , size );
79
- print_html ( text , f );
93
+
94
+ fprintf (f , "<text x='%.0f' y='%.0f' font-size='%.0fpt' fill='black' stroke-width='2'>\n " , x , y , size );
95
+ draw_text_aux ( x , text , f );
80
96
fprintf (f , "</text>\n" );
81
97
}
82
98
0 commit comments