expression parsing has begun
[manmower/obtheme.git] / main.c
diff --git a/main.c b/main.c
index b93ef08..9f19e52 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,25 +1,59 @@
+#include <assert.h>
 #include <stdio.h>
 #include <string.h>
 #include <glib.h>
 #include "obtheme.h"
 
+double variable_lookup(struct variable *in)
+{
+       return 0.0;
+}
+
+double expression_eval(struct expression *in)
+{
+       switch (in->op) {
+               case OB_THEME_MUL:
+                       return expression_eval(in->a) * expression_eval(in->b);
+                       break;
+               case OB_THEME_DIV:
+                       return expression_eval(in->a) / expression_eval(in->b);
+                       break;
+               case OB_THEME_ADD:
+                       return expression_eval(in->a) + expression_eval(in->b);
+                       break;
+               case OB_THEME_SUB:
+                       return expression_eval(in->a) - expression_eval(in->b);
+                       break;
+               case OB_THEME_EQL:
+                       if (in->v.base == NULL) {
+                               return in->v.number;
+                       } else return variable_lookup(&in->v);
+                       break;
+               default:
+                       assert(!!!"OH NOES!!!");
+       }
+       return 0;
+}
+
 static void decor_print(gpointer data, gpointer user_data)
 {
+       double out;
        struct decor *decor = data;
        printf("    decor id %s\n", decor->name);
-       printf("      anchor (%d %d %d)\n", decor->space.anchor.x, decor->space.anchor.y, decor->space.anchor.z);
-       printf("      up     (%d %d %d)\n", decor->space.up.x, decor->space.up.y, decor->space.up.z);
+printf("   anchor.x = %f\n", expression_eval(&decor->space.anchor.x));
+//     printf("      anchor (%d %d %d)\n", decor->space.anchor.x, decor->space.anchor.y, decor->space.anchor.z);
+//     printf("      up     (%d %d %d)\n", decor->space.up.x, decor->space.up.y, decor->space.up.z);
        if (decor->children)
                g_slist_foreach(decor->children, decor_print, NULL);
 }
 
-static void class_print(gpointer key, gpointer value, gpointer user_data)
+static void style_print(gpointer key, gpointer value, gpointer user_data)
 {
-       char *classname = key;
-       struct class *class = value;
+       char *stylename = key;
+       struct style *style = value;
 
-       printf("  Class %s\n", classname);
-       g_slist_foreach(class->tree, decor_print, NULL);
+       printf("  style %s\n", stylename);
+       g_slist_foreach(style->tree, decor_print, NULL);
 }
 
 static void theme_print(gpointer key, gpointer value, gpointer user_data)
@@ -27,7 +61,7 @@ static void theme_print(gpointer key, gpointer value, gpointer user_data)
        char *name = key;
        struct theme *thm = value;
        printf("name = %s\n", name);
-       g_hash_table_foreach(thm->classes, class_print, NULL);
+       g_hash_table_foreach(thm->styles, style_print, NULL);
 }
 
 static void material_print(gpointer key, gpointer value, gpointer user_data)