[monet/monet-xml] Allow for more complex expressions in width and height values
- From: Thomas Wood <thos src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [monet/monet-xml] Allow for more complex expressions in width and height values
- Date: Wed, 7 Jul 2010 22:58:29 +0000 (UTC)
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]