[monet/monet-xml] Allow for more complex expressions in width and height values



commit d3d087e3967de188f9c0197561cd75ed985a5934
Author: Thomas Wood <thos gnome org>
Date:   Wed Jul 7 23:58:21 2010 +0100

    Allow for more complex expressions in width and height values
    
    Parse more operators and ignore white space in width and height
    expressions.

 monet/mn-style.c |   52 +++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 45 insertions(+), 7 deletions(-)
---
diff --git a/monet/mn-style.c b/monet/mn-style.c
index ee53143..c344bf3 100644
--- a/monet/mn-style.c
+++ b/monet/mn-style.c
@@ -140,16 +140,54 @@ parse_expression (gchar  *expression,
   gchar *e;
   double result = 0;
   double num;
+  gchar op = '+'; /* always add the first number to the result */
 
   for (e = expression; *e; e = e + 1)
     {
-      if (e[0] == 'w')
-        num = w1;
-      else if (e[0] == 'h')
-        num = h1;
-      else
-        num = g_ascii_strtod (e, &e);
-      result = result + num;
+      switch (e[0])
+        {
+        case 'w':
+          num = w1;
+          break;
+
+        case 'h':
+          num = h1;
+          break;
+
+        case '+':
+        case '-':
+        case '/':
+        case '*':
+          op = e[0];
+          continue;
+
+        case ' ':
+        case '\t':
+          /* ignore whitespace */
+          continue;
+
+        default:
+          /* try and parse a number */
+          num = g_ascii_strtod (e, &e);
+          e--; /* move back one char to allow for loop to increment */
+        }
+
+      switch (op)
+        {
+        case '+':
+          result = result + num;
+          break;
+        case '-':
+          result = result - num;
+          break;
+        case '/':
+          if (num != 0.0)
+            result = result / num;
+          break;
+        case '*':
+          result = result * num;
+          break;
+        }
     }
 
   return result;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]