]> mj.ucw.cz Git - leo.git/blob - css.h
TODO
[leo.git] / css.h
1 /*
2  *      Hic Est Leo -- MapCSS Stylesheets
3  *
4  *      (c) 2014--2015 Martin Mares <mj@ucw.cz>
5  */
6
7 #ifndef _LEO_CSS_H
8 #define _LEO_CSS_H
9
10 #include "osm.h"
11 #include "style.h"
12
13 struct css_sheet {
14   struct mempool *pool;
15   clist rules;
16   char *filename;
17
18   /* For parsing for single properties by css_parse_prop */
19   int pushed_token;
20   struct style_prop *parsed_prop;
21 };
22
23 struct css_rule {
24   cnode n;                      // In the list of rules
25   clist selectors;              // Alternative selectors
26   clist actions;
27 };
28
29 struct css_selector {
30   cnode n;
31   clist path;                   // Element path
32 };
33
34 enum css_object_type {
35   CSS_TYPE_ANY = OSM_TYPE_INVALID,
36   CSS_TYPE_NODE = OSM_TYPE_NODE,
37   CSS_TYPE_WAY = OSM_TYPE_WAY,
38   CSS_TYPE_RELATION = OSM_TYPE_RELATION,
39   CSS_TYPE_AREA,
40   CSS_TYPE_META,
41 };
42
43 struct css_path {
44   cnode n;
45   enum osm_object_type type;    // Object type or OSM_TYPE_ANY
46   clist conditions;             // Attribute conditions
47   layer_t layer;                // STYLE_LAYER_xxx or more
48   osm_val_t role;
49   uns modifiers;
50 };
51
52 enum css_path_modifier {
53   PATH_MOD_NEVER = 1,           // Unknown modifier, never match
54 };
55
56 enum css_cond_op {
57   COND_OP_EQ,
58   COND_OP_NE,
59   COND_OP_LT,
60   COND_OP_GT,
61   COND_OP_LE,
62   COND_OP_GE,
63   COND_OP_IS_SET,
64   COND_OP_IS_UNSET,
65   COND_OP_IS_TRUE,
66   COND_OP_IS_FALSE,
67 };
68
69 struct css_condition {
70   cnode n;
71   enum css_cond_op op;
72   osm_key_t key;
73   osm_val_t val;
74 };
75
76 enum css_action_type {
77   CSS_ACTION_SET,
78   CSS_ACTION_EXPR,
79 };
80
81 struct css_action {
82   cnode n;
83   enum css_action_type type;
84   struct style_prop prop;       // for CSS_ACTION_SET
85 };
86
87 /* css-parse.y */
88
89 extern struct css_sheet *css_this;
90
91 struct css_sheet *css_load(char *filename);
92 struct style_prop *css_parse_prop(struct mempool *mp, char *objname, const char *key_str, const char *value_str);
93
94 /* css-lex.c */
95
96 void css_error(const char *err, ...);
97 int css_lex(void);
98 void css_lex_open(void);
99 void css_lex_close(void);
100 void css_lex_string(const char *str);
101
102 color_t css_rgb_to_color(const char *rgb);
103
104 /* css.c */
105
106 void css_dump(struct css_sheet *ss);
107 void css_dump_rule(struct css_rule *r);
108 void css_dump_selector(struct css_selector *s);
109 void css_dump_action(struct css_action *a);
110
111 void css_apply(struct css_sheet *ss, struct style_results *r);
112
113 #endif