+static void write_mvg(FILE *fh, float scale, struct svgtiny_diagram *diagram)
+{
+ unsigned int i;
+
+ fprintf(fh, "viewbox 0 0 %g %g\n",
+ scale * diagram->width, scale * diagram->height);
+
+ for (i = 0; i != diagram->shape_count; i++) {
+ if (diagram->shape[i].fill == svgtiny_TRANSPARENT) {
+ fprintf(fh, "fill none ");
+ } else {
+ fprintf(fh, "fill #%.6x ", diagram->shape[i].fill);
+ }
+
+ if (diagram->shape[i].stroke == svgtiny_TRANSPARENT) {
+ fprintf(fh, "stroke none ");
+ } else {
+ fprintf(fh, "stroke #%.6x ", diagram->shape[i].stroke);
+ }
+ fprintf(fh, "stroke-width %g ",
+ scale * diagram->shape[i].stroke_width);
+
+ if (diagram->shape[i].path) {
+ unsigned int j;
+ fprintf(fh, "path '");
+ for (j = 0; j != diagram->shape[i].path_length; ) {
+ switch ((int) diagram->shape[i].path[j]) {
+ case svgtiny_PATH_MOVE:
+ fprintf(fh, "M %g %g ",
+ scale * diagram->shape[i].path[j + 1],
+ scale * diagram->shape[i].path[j + 2]);
+ j += 3;
+ break;
+
+ case svgtiny_PATH_CLOSE:
+ fprintf(fh, "Z ");
+ j += 1;
+ break;
+
+ case svgtiny_PATH_LINE:
+ fprintf(fh, "L %g %g ",
+ scale * diagram->shape[i].path[j + 1],
+ scale * diagram->shape[i].path[j + 2]);
+ j += 3;
+ break;
+
+ case svgtiny_PATH_BEZIER:
+ fprintf(fh, "C %g %g %g %g %g %g ",
+ scale * diagram->shape[i].path[j + 1],
+ scale * diagram->shape[i].path[j + 2],
+ scale * diagram->shape[i].path[j + 3],
+ scale * diagram->shape[i].path[j + 4],
+ scale * diagram->shape[i].path[j + 5],
+ scale * diagram->shape[i].path[j + 6]);
+ j += 7;
+ break;
+
+ default:
+ fprintf(fh, "error ");
+ j += 1;
+ }
+ }
+ fprintf(fh, "' ");
+ } else if (diagram->shape[i].text) {
+ fprintf(fh, "text %g %g '%s' ",
+ scale * diagram->shape[i].text_x,
+ scale * diagram->shape[i].text_y,
+ diagram->shape[i].text);
+ }
+ fprintf(fh, "\n");
+ }
+}
+