libdom
Loading...
Searching...
No Matches
element.h
Go to the documentation of this file.
1/*
2 * This file is part of libdom.
3 * Licensed under the MIT License,
4 * http://www.opensource.org/licenses/mit-license.php
5 * Copyright 2007 John-Mark Bell <jmb@netsurf-browser.org>
6 */
7
8#ifndef dom_core_element_h_
9#define dom_core_element_h_
10
11#include <stdbool.h>
12
13#include <dom/inttypes.h>
14#include <dom/core/exceptions.h>
15#include <dom/core/node.h>
16
17struct dom_attr;
18struct dom_nodelist;
19struct dom_type_info;
20
21typedef struct dom_element dom_element;
22
23/* The DOMElement vtable */
24typedef struct dom_element_vtable {
26
28 dom_string **name);
30 dom_string *name, dom_string **value);
32 dom_string *name, dom_string *value);
34 struct dom_element *element, dom_string *name);
36 struct dom_element *element, dom_string *name,
37 struct dom_attr **result);
39 struct dom_element *element, struct dom_attr *attr,
40 struct dom_attr **result);
42 struct dom_element *element, struct dom_attr *attr,
43 struct dom_attr **result);
45 struct dom_element *element, dom_string *name,
46 struct dom_nodelist **result);
48 struct dom_element *element,
49 dom_string *namespace,
50 dom_string *localname,
51 dom_string **value);
53 struct dom_element *element,
54 dom_string *namespace, dom_string *qname,
55 dom_string *value);
57 struct dom_element *element,
58 dom_string *namespace,
59 dom_string *localname);
61 struct dom_element *element,
62 dom_string *namespace,
63 dom_string *localname, struct dom_attr **result);
65 struct dom_element *element, struct dom_attr *attr,
66 struct dom_attr **result);
68 struct dom_element *element,
69 dom_string *namespace,
70 dom_string *localname,
71 struct dom_nodelist **result);
73 dom_string *name, bool *result);
75 struct dom_element *element,
76 dom_string *namespace,
77 dom_string *localname, bool *result);
79 struct dom_element *element,
80 struct dom_type_info **result);
82 struct dom_element *element, dom_string *name,
83 bool is_id);
85 struct dom_element *element,
86 dom_string *namespace,
87 dom_string *localname, bool is_id);
89 struct dom_element *element,
90 struct dom_attr *id_attr, bool is_id);
91
92 /* These two are for the benefit of bindings to libcss */
94 struct dom_element *element,
95 lwc_string ***classes, uint32_t *n_classes);
97 struct dom_element *element,
98 lwc_string *name, bool *match);
100
102 struct dom_element *element, dom_string **name)
103{
104 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
105 dom_element_get_tag_name(element, name);
106}
107#define dom_element_get_tag_name(e, n) dom_element_get_tag_name( \
108 (dom_element *) (e), (n))
109
111 struct dom_element *element, dom_string *name,
112 dom_string **value)
113{
114 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
115 dom_element_get_attribute(element, name, value);
116}
117#define dom_element_get_attribute(e, n, v) dom_element_get_attribute( \
118 (dom_element *) (e), (n), (v))
119
121 struct dom_element *element, dom_string *name,
122 dom_string *value)
123{
124 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
125 dom_element_set_attribute(element, name, value);
126}
127#define dom_element_set_attribute(e, n, v) dom_element_set_attribute( \
128 (dom_element *) (e), (n), (v))
129
131 struct dom_element *element, dom_string *name)
132{
133 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
134 dom_element_remove_attribute(element, name);
135}
136#define dom_element_remove_attribute(e, n) dom_element_remove_attribute( \
137 (dom_element *) (e), (n))
138
140 struct dom_element *element, dom_string *name,
141 struct dom_attr **result)
142{
143 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
144 dom_element_get_attribute_node(element, name, result);
145}
146#define dom_element_get_attribute_node(e, n, r) \
147 dom_element_get_attribute_node((dom_element *) (e), \
148 (n), (struct dom_attr **) (r))
149
151 struct dom_element *element, struct dom_attr *attr,
152 struct dom_attr **result)
153{
154 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
155 dom_element_set_attribute_node(element, attr, result);
156}
157#define dom_element_set_attribute_node(e, a, r) \
158 dom_element_set_attribute_node((dom_element *) (e), \
159 (struct dom_attr *) (a), (struct dom_attr **) (r))
160
162 struct dom_element *element, struct dom_attr *attr,
163 struct dom_attr **result)
164{
165 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
167 result);
168}
169#define dom_element_remove_attribute_node(e, a, r) \
170 dom_element_remove_attribute_node((dom_element *) (e), \
171 (struct dom_attr *) (a), (struct dom_attr **) (r))
172
173
175 struct dom_element *element, dom_string *name,
176 struct dom_nodelist **result)
177{
178 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
180 result);
181}
182#define dom_element_get_elements_by_tag_name(e, n, r) \
183 dom_element_get_elements_by_tag_name((dom_element *) (e), \
184 (n), (struct dom_nodelist **) (r))
185
187 struct dom_element *element, dom_string *namespace,
188 dom_string *localname, dom_string **value)
189{
190 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
191 dom_element_get_attribute_ns(element, namespace,
192 localname, value);
193}
194#define dom_element_get_attribute_ns(e, n, l, v) \
195 dom_element_get_attribute_ns((dom_element *) (e), \
196 (n), (l), (v))
197
199 struct dom_element *element, dom_string *namespace,
200 dom_string *qname, dom_string *value)
201{
202 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
203 dom_element_set_attribute_ns(element, namespace,
204 qname, value);
205}
206#define dom_element_set_attribute_ns(e, n, l, v) \
207 dom_element_set_attribute_ns((dom_element *) (e), \
208 (n), (l), (v))
209
210
212 struct dom_element *element, dom_string *namespace,
213 dom_string *localname)
214{
215 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
216 dom_element_remove_attribute_ns(element, namespace,
217 localname);
218}
219#define dom_element_remove_attribute_ns(e, n, l) \
220 dom_element_remove_attribute_ns((dom_element *) (e), \
221 (n), (l))
222
223
225 struct dom_element *element, dom_string *namespace,
226 dom_string *localname, struct dom_attr **result)
227{
228 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
229 dom_element_get_attribute_node_ns(element, namespace,
230 localname, result);
231}
232#define dom_element_get_attribute_node_ns(e, n, l, r) \
233 dom_element_get_attribute_node_ns((dom_element *) (e), \
234 (n), (l), \
235 (struct dom_attr **) (r))
236
238 struct dom_element *element, struct dom_attr *attr,
239 struct dom_attr **result)
240{
241 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
243 result);
244}
245#define dom_element_set_attribute_node_ns(e, a, r) \
246 dom_element_set_attribute_node_ns((dom_element *) (e), \
247 (struct dom_attr *) (a), (struct dom_attr **) (r))
248
250 struct dom_element *element, dom_string *namespace,
251 dom_string *localname, struct dom_nodelist **result)
252{
253 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
255 namespace, localname, result);
256}
257#define dom_element_get_elements_by_tag_name_ns(e, n, l, r) \
258 dom_element_get_elements_by_tag_name_ns((dom_element *) (e), \
259 (n), (l), (struct dom_nodelist **) (r))
260
262 struct dom_element *element, dom_string *name,
263 bool *result)
264{
265 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
266 dom_element_has_attribute(element, name, result);
267}
268#define dom_element_has_attribute(e, n, r) dom_element_has_attribute( \
269 (dom_element *) (e), (n), (bool *) (r))
270
272 struct dom_element *element, dom_string *namespace,
273 dom_string *localname, bool *result)
274{
275 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
276 dom_element_has_attribute_ns(element, namespace,
277 localname, result);
278}
279#define dom_element_has_attribute_ns(e, n, l, r) dom_element_has_attribute_ns(\
280 (dom_element *) (e), (n), (l), (bool *) (r))
281
283 struct dom_element *element, struct dom_type_info **result)
284{
285 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
286 dom_element_get_schema_type_info(element, result);
287}
288#define dom_element_get_schema_type_info(e, r) \
289 dom_element_get_schema_type_info((dom_element *) (e), \
290 (struct dom_type_info **) (r))
291
293 struct dom_element *element, dom_string *name,
294 bool is_id)
295{
296 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
297 dom_element_set_id_attribute(element, name, is_id);
298}
299#define dom_element_set_id_attribute(e, n, i) \
300 dom_element_set_id_attribute((dom_element *) (e), \
301 (n), (bool) (i))
302
304 struct dom_element *element, dom_string *namespace,
305 dom_string *localname, bool is_id)
306{
307 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
308 dom_element_set_id_attribute_ns(element, namespace,
309 localname, is_id);
310}
311#define dom_element_set_id_attribute_ns(e, n, l, i) \
312 dom_element_set_id_attribute_ns((dom_element *) (e), \
313 (n), (l), (bool) (i))
314
316 struct dom_element *element, struct dom_attr *id_attr,
317 bool is_id)
318{
319 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
320 dom_element_set_id_attribute_node(element, id_attr,
321 is_id);
322}
323#define dom_element_set_id_attribute_node(e, a, i) \
324 dom_element_set_id_attribute_node((dom_element *) (e), \
325 (struct dom_attr *) (a), (bool) (i))
326
328 struct dom_element *element,
329 lwc_string ***classes, uint32_t *n_classes)
330{
331 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
333}
334#define dom_element_get_classes(e, c, n) \
335 dom_element_get_classes((dom_element *) (e), \
336 (lwc_string ***) (c), (uint32_t *) (n))
337
339 struct dom_element *element, lwc_string *name, bool *match)
340{
341 return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
342 dom_element_has_class(element, name, match);
343}
344#define dom_element_has_class(e, n, m) \
345 dom_element_has_class((dom_element *) (e), \
346 (lwc_string *) (n), (bool *) (m))
347
348
349/* Functions for implementing some libcss selection callbacks.
350 * Note that they don't take a reference to the returned element, as such they
351 * are UNSAFE if you require the returned element to live beyond the next time
352 * the DOM gets a chance to change. */
354 lwc_string *name, dom_element **ancestor);
356 lwc_string *name, dom_element **parent);
358 dom_element **parent);
359
360#endif
dom_exception
Definition exceptions.h:24
#define dom_element_get_elements_by_tag_name(e, n, r)
Definition element.h:182
#define dom_element_has_class(e, n, m)
Definition element.h:344
#define dom_element_set_id_attribute(e, n, i)
Definition element.h:299
#define dom_element_has_attribute(e, n, r)
Definition element.h:268
#define dom_element_set_attribute_ns(e, n, l, v)
Definition element.h:206
#define dom_element_get_attribute(e, n, v)
Definition element.h:117
#define dom_element_get_attribute_node_ns(e, n, l, r)
Definition element.h:232
#define dom_element_set_id_attribute_ns(e, n, l, i)
Definition element.h:311
struct dom_element_vtable dom_element_vtable
#define dom_element_get_attribute_node(e, n, r)
Definition element.h:146
dom_exception dom_element_named_parent_node(dom_element *element, lwc_string *name, dom_element **parent)
Definition element.c:1274
#define dom_element_set_attribute_node_ns(e, a, r)
Definition element.h:245
#define dom_element_get_attribute_ns(e, n, l, v)
Definition element.h:194
dom_exception dom_element_named_ancestor_node(dom_element *element, lwc_string *name, dom_element **ancestor)
Definition element.c:1242
#define dom_element_get_classes(e, c, n)
Definition element.h:334
#define dom_element_get_elements_by_tag_name_ns(e, n, l, r)
Definition element.h:257
#define dom_element_has_attribute_ns(e, n, l, r)
Definition element.h:279
#define dom_element_set_id_attribute_node(e, a, i)
Definition element.h:323
#define dom_element_set_attribute_node(e, a, r)
Definition element.h:157
#define dom_element_set_attribute(e, n, v)
Definition element.h:127
#define dom_element_remove_attribute_node(e, a, r)
Definition element.h:169
#define dom_element_remove_attribute_ns(e, n, l)
Definition element.h:219
#define dom_element_get_schema_type_info(e, r)
Definition element.h:288
dom_exception dom_element_parent_node(dom_element *element, dom_element **parent)
Definition element.c:1306
#define dom_element_remove_attribute(e, n)
Definition element.h:136
#define dom_element_get_tag_name(e, n)
Definition element.h:107
Definition attr.c:31
Definition element.h:24
struct dom_node_vtable base
Definition element.h:25
dom_exception(* dom_element_get_attribute_ns)(struct dom_element *element, dom_string *namespace, dom_string *localname, dom_string **value)
Definition element.h:47
dom_exception(* dom_element_get_classes)(struct dom_element *element, lwc_string ***classes, uint32_t *n_classes)
Definition element.h:93
dom_exception(* dom_element_get_attribute)(struct dom_element *element, dom_string *name, dom_string **value)
Definition element.h:29
dom_exception(* dom_element_set_attribute_node_ns)(struct dom_element *element, struct dom_attr *attr, struct dom_attr **result)
Definition element.h:64
dom_exception(* dom_element_remove_attribute_node)(struct dom_element *element, struct dom_attr *attr, struct dom_attr **result)
Definition element.h:41
dom_exception(* dom_element_get_elements_by_tag_name_ns)(struct dom_element *element, dom_string *namespace, dom_string *localname, struct dom_nodelist **result)
Definition element.h:67
dom_exception(* dom_element_get_attribute_node_ns)(struct dom_element *element, dom_string *namespace, dom_string *localname, struct dom_attr **result)
Definition element.h:60
dom_exception(* dom_element_set_id_attribute_node)(struct dom_element *element, struct dom_attr *id_attr, bool is_id)
Definition element.h:88
dom_exception(* dom_element_get_schema_type_info)(struct dom_element *element, struct dom_type_info **result)
Definition element.h:78
dom_exception(* dom_element_set_attribute)(struct dom_element *element, dom_string *name, dom_string *value)
Definition element.h:31
dom_exception(* dom_element_has_class)(struct dom_element *element, lwc_string *name, bool *match)
Definition element.h:96
dom_exception(* dom_element_get_attribute_node)(struct dom_element *element, dom_string *name, struct dom_attr **result)
Definition element.h:35
dom_exception(* dom_element_remove_attribute_ns)(struct dom_element *element, dom_string *namespace, dom_string *localname)
Definition element.h:56
dom_exception(* dom_element_set_attribute_node)(struct dom_element *element, struct dom_attr *attr, struct dom_attr **result)
Definition element.h:38
dom_exception(* dom_element_remove_attribute)(struct dom_element *element, dom_string *name)
Definition element.h:33
dom_exception(* dom_element_has_attribute)(struct dom_element *element, dom_string *name, bool *result)
Definition element.h:72
dom_exception(* dom_element_set_attribute_ns)(struct dom_element *element, dom_string *namespace, dom_string *qname, dom_string *value)
Definition element.h:52
dom_exception(* dom_element_get_tag_name)(struct dom_element *element, dom_string **name)
Definition element.h:27
dom_exception(* dom_element_set_id_attribute_ns)(struct dom_element *element, dom_string *namespace, dom_string *localname, bool is_id)
Definition element.h:84
dom_exception(* dom_element_set_id_attribute)(struct dom_element *element, dom_string *name, bool is_id)
Definition element.h:81
dom_exception(* dom_element_has_attribute_ns)(struct dom_element *element, dom_string *namespace, dom_string *localname, bool *result)
Definition element.h:74
dom_exception(* dom_element_get_elements_by_tag_name)(struct dom_element *element, dom_string *name, struct dom_nodelist **result)
Definition element.h:44
Definition element.h:29
uint32_t n_classes
Definition element.h:41
lwc_string ** classes
Definition element.h:40
Definition node.h:85
Definition node.h:79
Definition nodelist.c:26
Definition string.h:19
Definition typeinfo.c:14