]> mj.ucw.cz Git - leo.git/blob - css.h
Labelling: Bugfixes in get_closure
[leo.git] / css.h
1 /*
2  *      Hic Est Leo -- MapCSS Stylesheets
3  *
4  *      (c) 2014 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
19 struct css_rule {
20   cnode n;                      // In the list of rules
21   clist selectors;              // Alternative selectors
22   clist actions;
23 };
24
25 struct css_selector {
26   cnode n;
27   clist path;                   // Element path
28 };
29
30 enum css_object_type {
31   CSS_TYPE_ANY = OSM_TYPE_INVALID,
32   CSS_TYPE_NODE = OSM_TYPE_NODE,
33   CSS_TYPE_WAY = OSM_TYPE_WAY,
34   CSS_TYPE_RELATION = OSM_TYPE_RELATION,
35   CSS_TYPE_AREA,
36   CSS_TYPE_META,
37 };
38
39 struct css_path {
40   cnode n;
41   enum osm_object_type type;    // Object type or OSM_TYPE_ANY
42   clist conditions;             // Attribute conditions
43   layer_t layer;                // STYLE_LAYER_xxx or more
44   osm_val_t role;
45   uns modifiers;
46 };
47
48 enum css_path_modifier {
49   PATH_MOD_NEVER = 1,           // Unknown modifier, never match
50 };
51
52 enum css_cond_op {
53   COND_OP_EQ,
54   COND_OP_NE,
55   COND_OP_LT,
56   COND_OP_GT,
57   COND_OP_LE,
58   COND_OP_GE,
59   COND_OP_IS_SET,
60   COND_OP_IS_UNSET,
61   COND_OP_IS_TRUE,
62   COND_OP_IS_FALSE,
63 };
64
65 struct css_condition {
66   cnode n;
67   enum css_cond_op op;
68   osm_key_t key;
69   osm_val_t val;
70 };
71
72 struct css_action {
73   cnode n;
74   struct style_prop prop;
75 };
76
77 /* css-parse.y */
78
79 extern struct css_sheet *css_this;
80
81 struct css_sheet *css_load(char *filename);
82
83 /* css-lex.c */
84
85 void css_error(char *err, ...);
86 int css_lex(void);
87 void css_lex_open(void);
88 void css_lex_close(void);
89
90 color_t css_rgb_to_color(const char *rgb);
91
92 /* css.c */
93
94 void css_dump(struct css_sheet *ss);
95 void css_dump_rule(struct css_rule *r);
96 void css_dump_selector(struct css_selector *s);
97 void css_dump_action(struct css_action *a);
98
99 void css_apply(struct css_sheet *ss, struct style_results *r);
100
101 #endif