a more complete test theme
[manmower/obtheme.git] / main.c
1 #include <assert.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <glib.h>
5 #include "obtheme.h"
6
7 double variable_lookup(struct variable *in)
8 {
9         return 0.0;
10 }
11
12 double expression_eval(struct expression *in)
13 {
14         switch (in->op) {
15                 case OB_THEME_MUL:
16                         return expression_eval(in->a) * expression_eval(in->b);
17                         break;
18                 case OB_THEME_DIV:
19                         return expression_eval(in->a) / expression_eval(in->b);
20                         break;
21                 case OB_THEME_ADD:
22                         return expression_eval(in->a) + expression_eval(in->b);
23                         break;
24                 case OB_THEME_SUB:
25                         return expression_eval(in->a) - expression_eval(in->b);
26                         break;
27                 case OB_THEME_EQL:
28                         if (in->v.base == NULL) {
29                                 return in->v.number;
30                         } else return variable_lookup(&in->v);
31                         break;
32                 default:
33                         assert(!!!"OH NOES!!!");
34         }
35         return 0;
36 }
37
38 static void decor_print(gpointer data, gpointer user_data)
39 {
40         double out;
41         struct decor *decor = data;
42         printf("    decor id %s\n", decor->name);
43 printf("   anchor.x = %f\n", expression_eval(&decor->space.anchor.x));
44         if (decor->texture.present) {
45                 if (decor->texture.internal)
46                         printf("    texture internal: %s\n", decor->texture.name);
47                 else
48                         printf("    texture file: %s\n", decor->texture.name);
49         }
50 //      printf("      anchor (%d %d %d)\n", decor->space.anchor.x, decor->space.anchor.y, decor->space.anchor.z);
51 //      printf("      up     (%d %d %d)\n", decor->space.up.x, decor->space.up.y, decor->space.up.z);
52         if (decor->children)
53                 g_slist_foreach(decor->children, decor_print, NULL);
54 }
55
56 static void style_print(gpointer key, gpointer value, gpointer user_data)
57 {
58         char *stylename = key;
59         struct style *style = value;
60
61         printf("  style %s\n", stylename);
62         g_slist_foreach(style->tree, decor_print, NULL);
63 }
64
65 static void theme_print(gpointer key, gpointer value, gpointer user_data)
66 {
67         char *name = key;
68         struct theme *thm = value;
69         printf("name = %s\n", name);
70         g_hash_table_foreach(thm->styles, style_print, NULL);
71 }
72
73 static void material_print(gpointer key, gpointer value, gpointer user_data)
74 {
75         char *name = key;
76         struct material *mat = value;
77         printf("name = %s\n", name);
78         printf(" opacity = %f\n", mat->opacity);
79 }
80
81 int main(int argc, char **argv)
82 {
83         int err;
84         struct obthemedata themedata;
85
86         themedata.themes = g_hash_table_new(g_str_hash, g_str_equal);
87         themedata.materials = g_hash_table_new(g_str_hash, g_str_equal);
88         err = obtheme_parse(&themedata, argv[1]);
89         printf("err = %d\n", err);
90
91         g_hash_table_foreach(themedata.materials, material_print, NULL);
92
93         g_hash_table_foreach(themedata.themes, theme_print, NULL);
94
95         return 0;
96 }