c9aaa518cf7a924c97fc77e277ddafb64dcddc52
[manmower/obtheme.git] / obtheme.h
1 #ifndef __THEME_PARSE_H__
2 #define __THEME_PARSE_H__
3
4 #include <glib.h>
5 #include "frame.h"
6 #include "misc.h"
7
8 #undef YY_DECL
9 #define YY_DECL int obthemelex(YYSTYPE *yylval, struct parser_control *pc)
10
11 #define YYDEBUG 1
12 #define YYLEX_PARAM pc
13
14 #define MAX_INCLUDE_DEPTH 32
15 #define LINE pc->currline[pc->include_stack_ptr]
16
17 extern int themedebug;
18
19 typedef enum {
20         OB_THEME_INV,
21         OB_THEME_ADD,
22         OB_THEME_SUB,
23         OB_THEME_MUL,
24         OB_THEME_DIV,
25         OB_THEME_EQL
26 } ObThemeOp;
27
28 struct variable {
29         char *base;
30         char *member;
31         double number;
32 };
33
34 struct expression {
35         ObThemeOp op;
36         struct expression *a;
37         struct expression *b;
38         struct variable v;
39 };
40
41 struct material {
42         float opacity;
43 };
44
45 struct style {
46         char *name;
47         GSList *tree;
48 };
49
50 struct obthemedata {
51         GHashTable *themes;
52         GHashTable *materials;
53 };
54
55 struct theme {
56         char *name;
57         GHashTable *styles;
58 };
59
60 struct vector {
61         struct expression x;
62         struct expression y;
63         struct expression z;
64 };
65
66 struct space {
67         struct vector anchor;
68         struct vector up;
69 };
70
71 struct texture {
72         gboolean present;
73         gboolean internal;
74         char *name;
75 };
76
77 struct box {
78         struct vector start;
79         struct vector end;
80 };
81
82 struct geometry {
83         struct box box;
84 };
85
86 struct decor {
87         char *name;
88         GSList *children;
89         struct space space;
90         ObDirection cursor;
91         ObFrameContext context;
92         struct texture texture;
93         struct material *material;
94         struct geometry geometry;
95 };
96
97 struct parser_control {
98         struct yy_buffer_state *include_stack[MAX_INCLUDE_DEPTH];
99         int currline[MAX_INCLUDE_DEPTH];
100         char currfile[MAX_INCLUDE_DEPTH][501];
101         int include_stack_ptr;
102         char error_buf[4096];
103         struct obthemedata *target;
104 };
105
106 void obthemeerror(struct parser_control *pc, char *s);
107 int obtheme_parse(struct obthemedata *td, const char *filename);
108 struct parser_control *parser_init(struct obthemedata *td);
109 int obthemeparse(struct parser_control *);
110 void parser_finish(struct parser_control *);
111
112 #endif /* __THEME_PARSE_H__ */