From: kramm <kramm>
Date: Tue, 29 Apr 2003 19:08:42 +0000 (+0000)
Subject: fix for negative coordinates.
X-Git-Tag: release-0-5-0~261
X-Git-Url: http://git.asbjorn.it/?a=commitdiff_plain;h=821ddd9551a9138b14f2ca1252e43c1521581071;p=swftools.git

fix for negative coordinates.
---

diff --git a/src/parser.lex b/src/parser.lex
index beca943..4ccf2c0 100644
--- a/src/parser.lex
+++ b/src/parser.lex
@@ -163,8 +163,8 @@ void handleInclude(char*text, int len)
 %x BINARY
 
 NAME	 [a-zA-Z_./](-*[a-zA-Z0-9_./])*
-TWIP	 ([0-9]+(\.([0-9]([05])?)?)?)
-NUMBER	 [0-9]+(\.[0-9]*)?
+TWIP	 (-?[0-9]+(\.([0-9]([05])?)?)?)
+NUMBER	 -?[0-9]+(\.[0-9]*)?
 PERCENT	 {NUMBER}%
 STRING   (\\.|[^\\"\n])*
 S	 [ \n\r\t]
diff --git a/src/swfc.c b/src/swfc.c
index db12bd7..aa8fe6b 100644
--- a/src/swfc.c
+++ b/src/swfc.c
@@ -1051,11 +1051,18 @@ int parseInt(char*str)
 }
 int parseTwip(char*str)
 {
-    char*dot = strchr(str, '.');
+    char*dot;
+    int sign=1;
+    if(str[0]=='+' || str[0]=='-') {
+	if(str[0]=='-')
+	    sign = -1;
+	str++;
+    }
+    dot = strchr(str, '.');
     if(!dot) {
 	int l=strlen(str);
 	int t;
-	return parseInt(str)*20;
+	return sign*parseInt(str)*20;
     } else {
 	int l=strlen(++dot);
 	char*s;
@@ -1072,11 +1079,11 @@ int parseTwip(char*str)
 	    l=2;
 	}
 	if(l==0)
-	    return atoi(str)*20;
+	    return sign*atoi(str)*20;
 	if(l==1)
-	    return atoi(str)*20+atoi(dot)*2;
+	    return sign*atoi(str)*20+atoi(dot)*2;
 	if(l==2)
-	    return atoi(str)*20+atoi(dot)/5;
+	    return sign*atoi(str)*20+atoi(dot)/5;
     }
     return 0;
 }