Add:gui_internal:More html functionality
[navit-package] / navit / attr.h
1 /**
2  * Navit, a modular navigation system.
3  * Copyright (C) 2005-2008 Navit Team
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public License
7  * version 2 as published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this program; if not, write to the
16  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA  02110-1301, USA.
18  */
19
20 #ifndef NAVIT_ATTR_H
21 #define NAVIT_ATTR_H
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 #include "projection.h"
28
29 enum item_type;
30
31 enum attr_type {
32 #define ATTR2(x,y) attr_##y=x,
33 #define ATTR(x) attr_##x,
34 #include "attr_def.h"
35 #undef ATTR2
36 #undef ATTR
37 };
38
39 #define AF_ONEWAY               (1<<0)
40 #define AF_ONEWAYREV            (1<<1)
41 #define AF_NOPASS               (AF_ONEWAY|AF_ONEWAYREV)
42 #define AF_ONEWAYMASK           (AF_ONEWAY|AF_ONEWAYREV)
43 #define AF_SEGMENTED            (1<<2)
44 #define AF_ROUNDABOUT           (1<<3)
45 #define AF_ROUNDABOUT_VALID     (1<<4)
46 #define AF_ONEWAY_EXCEPTION     (1<<5)
47 #define AF_SPEED_LIMIT          (1<<6)
48 #define AF_TRUCK_SPEED_LIMIT    (1<<7)
49 #define AF_SIZE_OR_WEIGHT_LIMIT (1<<8)
50 #define AF_THROUGH_TRAFFIC      (1<<9)
51 #define AF_TOLL                 (1<<10)
52 #define AF_SEASONAL             (1<<11)
53 #define AF_UNPAVED              (1<<12)
54 #define AF_DANGEROUS_GOODS      (1<<19)
55 #define AF_EMERGENCY_VEHICLES   (1<<20)
56 #define AF_TRANSPORT_TRUCK      (1<<21)
57 #define AF_DELIVERY_TRUCK       (1<<22)
58 #define AF_PUBLIC_BUS           (1<<23)
59 #define AF_TAXI                 (1<<24) 
60 #define AF_HIGH_OCCUPANCY_CAR   (1<<25) 
61 #define AF_CAR                  (1<<26) 
62 #define AF_MOTORCYCLE           (1<<27) 
63 #define AF_MOPED                (1<<28) 
64 #define AF_HORSE                (1<<29) 
65 #define AF_BIKE                 (1<<30) 
66 #define AF_PEDESTRIAN           (1<<31) 
67
68 /* Values for attributes that could carry relative values */
69 #define ATTR_REL_MAXABS                 0x40000000
70 #define ATTR_REL_RELSHIFT               0x60000000
71
72 enum attr_position_valid {
73         attr_position_valid_invalid,
74         attr_position_valid_static,
75         attr_position_valid_extrapolated_time,
76         attr_position_valid_extrapolated_spatial,
77         attr_position_valid_valid,
78 };
79
80 #define ATTR_IS_INT(x) ((x) >= attr_type_int_begin && (x) <= attr_type_int_end)
81 #define ATTR_IS_DOUBLE(x) ((x) >= attr_type_double_begin && (x) <= attr_type_double_end)
82 #define ATTR_IS_STRING(x) ((x) >= attr_type_string_begin && (x) <= attr_type_string_end)
83 #define ATTR_IS_OBJECT(x) ((x) >= attr_type_object_begin && (x) <= attr_type_object_end)
84 #define ATTR_IS_COORD_GEO(x) ((x) >= attr_type_coord_geo_begin && (x) <= attr_type_coord_geo_end)
85 #define ATTR_IS_NUMERIC(x) (ATTR_IS_INT(x) || ATTR_IS_DOUBLE(x))
86
87 struct attr {
88         enum attr_type type;
89         union {
90                 char *str;
91                 void *data;
92                 int num;
93                 struct item *item;
94                 enum item_type item_type;
95                 enum projection projection;
96                 double * numd;
97                 struct color *color;
98                 struct coord_geo *coord_geo;
99                 struct navit *navit;
100                 struct callback *callback;
101                 struct callback_list *callback_list;
102                 struct vehicle *vehicle;
103                 struct layout *layout;
104                 struct layer *layer;
105                 struct map *map;
106                 struct mapset *mapset;
107                 struct log *log;
108                 struct route *route;
109                 struct navigation *navigation;
110                 struct coord *coord;
111                 struct pcoord *pcoord;
112                 struct gui *gui;
113                 struct graphics *graphics;
114                 struct tracking *tracking;
115                 struct itemgra *itemgra;
116                 struct plugin *plugin;
117                 struct plugins *plugins;
118                 struct polygon *polygon;
119                 struct polyline *polyline;
120                 struct circle *circle;
121                 struct text *text;
122                 struct icon *icon;
123                 struct image *image;
124                 struct arrows *arrows;
125                 struct element *element;
126                 struct speech *speech;
127                 struct cursor *cursor;
128                 struct displaylist *displaylist;
129                 struct transformation *transformation;
130                 struct vehicleprofile *vehicleprofile;
131                 struct roadprofile *roadprofile;
132                 struct range {
133                         short min, max;
134                 } range;
135                 int *dash;
136                 enum item_type *item_types;
137                 enum attr_type *attr_types;
138                 long long *num64;
139         } u;
140 };
141
142 struct attr_iter;
143 /* prototypes */
144 enum attr_type attr_from_name(const char *name);
145 char *attr_to_name(enum attr_type attr);
146 struct attr *attr_new_from_text(const char *name, const char *value);
147 char *attr_to_text(struct attr *attr, struct map *map, int pretty);
148 struct attr *attr_search(struct attr **attrs, struct attr *last, enum attr_type attr);
149 int attr_generic_get_attr(struct attr **attrs, struct attr **def_attrs, enum attr_type type, struct attr *attr, struct attr_iter *iter);
150 struct attr **attr_generic_set_attr(struct attr **attrs, struct attr *attr);
151 struct attr **attr_generic_add_attr(struct attr **attrs, struct attr *attr);
152 struct attr **attr_generic_remove_attr(struct attr **attrs, struct attr *attr);
153 enum attr_type attr_type_begin(enum attr_type type);
154 int attr_data_size(struct attr *attr);
155 void *attr_data_get(struct attr *attr);
156 void attr_data_set(struct attr *attr, void *data);
157 void attr_data_set_le(struct attr *attr, void *data);
158 void attr_free(struct attr *attr);
159 void attr_dup_content(struct attr *src, struct attr *dst);
160 struct attr *attr_dup(struct attr *attr);
161 void attr_list_free(struct attr **attrs);
162 struct attr **attr_list_dup(struct attr **attrs);
163 int attr_from_line(char *line, char *name, int *pos, char *val_ret, char *name_ret);
164 int attr_types_contains(enum attr_type *types, enum attr_type type);
165 int attr_types_contains_default(enum attr_type *types, enum attr_type type, int deflt);
166 /* end of prototypes */
167 #ifdef __cplusplus
168 }
169 #endif
170
171 #endif