Generated from configure.in
[swftools.git] / lib / drawer.c
index a7c336e..801ff38 100644 (file)
@@ -25,6 +25,7 @@
 #include <string.h>
 #include <memory.h>
 #include <math.h>
+#include <ctype.h>
 #include "drawer.h"
 
 static char* getToken(const char**p)
@@ -35,7 +36,18 @@ static char* getToken(const char**p)
        (*p)++;
     } 
     start = *p;
-    while(**p && !strchr(" ,()\t\n\r", **p)) {
+
+     /*
+        SVF pathdata can exclude whitespace after L and M commands.
+        Ref:  http://www.w3.org/TR/SVG11/paths.html#PathDataGeneralInformation
+        This allows us to use svg files output from gnuplot.
+        Also checks for relative MoveTo and LineTo (m and l).
+        051106 Magnus Lundin, lundin@mlu.mine.nu
+     */
+    if (strchr("LMlm", **p) && (isdigit(*(*p+1))||strchr("+-", *(*p+1)))) {
+       (*p)++;
+    }
+    else while(**p && !strchr(" ,()\t\n\r", **p)) {
        (*p)++;
     }
     result = malloc((*p)-start+1);
@@ -124,10 +136,11 @@ void draw_string(drawer_t*draw, const char*string)
        }
        else if(!strncmp(token, "circle", 6)) {
            int mx,my,r;
-           double r2 = 0.70710678118654757*r;
+           double r2;
            mx = atof(getToken(&p));
            my = atof(getToken(&p));
            r = atof(getToken(&p));
+           r2 = 0.70710678118654757*r;
            draw_moveTo2(draw, mx, my-r);
            draw_conicTo2(draw, mx+r2, my-r2, mx+r, my);
            draw_conicTo2(draw, mx+r2, my+r2, mx, my+r);