summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/dom/core/element.h352
1 files changed, 300 insertions, 52 deletions
diff --git a/include/dom/core/element.h b/include/dom/core/element.h
index 6ae8b4d..c56e32c 100644
--- a/include/dom/core/element.h
+++ b/include/dom/core/element.h
@@ -11,68 +11,316 @@
#include <stdbool.h>
#include <dom/core/exceptions.h>
+#include <dom/core/node.h>
struct dom_attr;
-struct dom_element;
struct dom_nodelist;
struct dom_string;
struct dom_type_info;
-dom_exception dom_element_get_tag_name(struct dom_element *element,
- struct dom_string **name);
+typedef struct dom_element dom_element;
-dom_exception dom_element_get_attribute(struct dom_element *element,
- struct dom_string *name, struct dom_string **value);
-dom_exception dom_element_set_attribute(struct dom_element *element,
- struct dom_string *name, struct dom_string *value);
-dom_exception dom_element_remove_attribute(struct dom_element *element,
- struct dom_string *name);
+/* The DOMElement vtable */
+typedef struct dom_element_vtable {
+ struct dom_node_vtable base;
-dom_exception dom_element_get_attribute_node(struct dom_element *element,
- struct dom_string *name, struct dom_attr **result);
-dom_exception dom_element_set_attribute_node(struct dom_element *element,
- struct dom_attr *attr, struct dom_attr **result);
-dom_exception dom_element_remove_attribute_node(struct dom_element *element,
- struct dom_attr *attr, struct dom_attr **result);
+ dom_exception (*dom_element_get_tag_name)(struct dom_element *element,
+ struct dom_string **name);
+ dom_exception (*dom_element_get_attribute)(struct dom_element *element,
+ struct dom_string *name, struct dom_string **value);
+ dom_exception (*dom_element_set_attribute)(struct dom_element *element,
+ struct dom_string *name, struct dom_string *value);
+ dom_exception (*dom_element_remove_attribute)(
+ struct dom_element *element, struct dom_string *name);
+ dom_exception (*dom_element_get_attribute_node)(
+ struct dom_element *element, struct dom_string *name,
+ struct dom_attr **result);
+ dom_exception (*dom_element_set_attribute_node)(
+ struct dom_element *element, struct dom_attr *attr,
+ struct dom_attr **result);
+ dom_exception (*dom_element_remove_attribute_node)(
+ struct dom_element *element, struct dom_attr *attr,
+ struct dom_attr **result);
+ dom_exception (*dom_element_get_elements_by_tag_name)(
+ struct dom_element *element, struct dom_string *name,
+ struct dom_nodelist **result);
+ dom_exception (*dom_element_get_attribute_ns)(
+ struct dom_element *element,
+ struct dom_string *namespace,
+ struct dom_string *localname, struct dom_string **value);
+ dom_exception (*dom_element_set_attribute_ns)(
+ struct dom_element *element,
+ struct dom_string *namespace, struct dom_string *qname,
+ struct dom_string *value);
+ dom_exception (*dom_element_remove_attribute_ns)(
+ struct dom_element *element,
+ struct dom_string *namespace,
+ struct dom_string *localname);
+ dom_exception (*dom_element_get_attribute_node_ns)(
+ struct dom_element *element,
+ struct dom_string *namespace,
+ struct dom_string *localname, struct dom_attr **result);
+ dom_exception (*dom_element_set_attribute_node_ns)(
+ struct dom_element *element, struct dom_attr *attr,
+ struct dom_attr **result);
+ dom_exception (*dom_element_get_elements_by_tag_name_ns)(
+ struct dom_element *element,
+ struct dom_string *namespace,
+ struct dom_string *localname,
+ struct dom_nodelist **result);
+ dom_exception (*dom_element_has_attribute)(struct dom_element *element,
+ struct dom_string *name, bool *result);
+ dom_exception (*dom_element_has_attribute_ns)(
+ struct dom_element *element,
+ struct dom_string *namespace,
+ struct dom_string *localname, bool *result);
+ dom_exception (*dom_element_get_schema_type_info)(
+ struct dom_element *element,
+ struct dom_type_info **result);
+ dom_exception (*dom_element_set_id_attribute)(
+ struct dom_element *element, struct dom_string *name,
+ bool is_id);
+ dom_exception (*dom_element_set_id_attribute_ns)(
+ struct dom_element *element,
+ struct dom_string *namespace,
+ struct dom_string *localname, bool is_id);
+ dom_exception (*dom_element_set_id_attribute_node)(
+ struct dom_element *element,
+ struct dom_attr *id_attr, bool is_id);
+} dom_element_vtable;
-dom_exception dom_element_get_elements_by_tag_name(
+static inline dom_exception dom_element_get_tag_name(
+ struct dom_element *element, struct dom_string **name)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_get_tag_name(element, name);
+}
+#define dom_element_get_tag_name(e, n) dom_element_get_tag_name( \
+ (dom_element *) (e), (struct dom_string **) (n))
+
+static inline dom_exception dom_element_get_attribute(
+ struct dom_element *element, struct dom_string *name,
+ struct dom_string **value)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_get_attribute(element, name, value);
+}
+#define dom_element_get_attribute(e, n, v) dom_element_get_attribute( \
+ (dom_element *) (e), (struct dom_string *) (n), \
+ (struct dom_string **) (v))
+
+static inline dom_exception dom_element_set_attribute(
+ struct dom_element *element, struct dom_string *name,
+ struct dom_string *value)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_set_attribute(element, name, value);
+}
+#define dom_element_set_attribute(e, n, v) dom_element_set_attribute( \
+ (dom_element *) (e), (struct dom_string *) (n), \
+ (struct dom_string *) (v))
+
+static inline dom_exception dom_element_remove_attribute(
+ struct dom_element *element, struct dom_string *name)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_remove_attribute(element, name);
+}
+#define dom_element_remove_attribute(e, n) dom_element_remove_attribute( \
+ (dom_element *) (e), (struct dom_string *) (n))
+
+static inline dom_exception dom_element_get_attribute_node(
+ struct dom_element *element, struct dom_string *name,
+ struct dom_attr **result)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_get_attribute_node(element, name, result);
+}
+#define dom_element_get_attribute_node(e, n, r) \
+ dom_element_get_attribute_node((dom_element *) (e), \
+ (struct dom_string *) (n), (struct dom_attr **) (r))
+
+static inline dom_exception dom_element_set_attribute_node(
+ struct dom_element *element, struct dom_attr *attr,
+ struct dom_attr **result)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_set_attribute_node(element, attr, result);
+}
+#define dom_element_set_attribute_node(e, a, r) \
+ dom_element_set_attribute_node((dom_element *) (e), \
+ (struct dom_attr *) (a), (struct dom_attr **) (r))
+
+static inline dom_exception dom_element_remove_attribute_node(
+ struct dom_element *element, struct dom_attr *attr,
+ struct dom_attr **result)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_remove_attribute_node(element, attr,
+ result);
+}
+#define dom_element_remove_attribute_node(e, a, r) \
+ dom_element_remove_attribute_node((dom_element *) (e), \
+ (struct dom_attr *) (a), (struct dom_attr **) (r))
+
+
+static inline dom_exception dom_element_get_elements_by_tag_name(
struct dom_element *element, struct dom_string *name,
- struct dom_nodelist **result);
-
-dom_exception dom_element_get_attribute_ns(struct dom_element *element,
- struct dom_string *namespace, struct dom_string *localname,
- struct dom_string **value);
-dom_exception dom_element_set_attribute_ns(struct dom_element *element,
- struct dom_string *namespace, struct dom_string *qname,
- struct dom_string *value);
-dom_exception dom_element_remove_attribute_ns(struct dom_element *element,
- struct dom_string *namespace, struct dom_string *localname);
-
-dom_exception dom_element_get_attribute_node_ns(struct dom_element *element,
- struct dom_string *namespace, struct dom_string *localname,
- struct dom_attr **result);
-dom_exception dom_element_set_attribute_node_ns(struct dom_element *element,
- struct dom_attr *attr, struct dom_attr **result);
-
-dom_exception dom_element_get_elements_by_tag_name_ns(
+ struct dom_nodelist **result)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_get_elements_by_tag_name(element, name,
+ result);
+}
+#define dom_element_get_elements_by_tag_name(e, n, r) \
+ dom_element_get_elements_by_tag_name((dom_element *) (e), \
+ (struct dom_string *) (n), (struct dom_nodelist **) (r))
+
+static inline dom_exception dom_element_get_attribute_ns(
+ struct dom_element *element, struct dom_string *namespace,
+ struct dom_string *localname, struct dom_string **value)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_get_attribute_ns(element, namespace,
+ localname, value);
+}
+#define dom_element_get_attribute_ns(e, n, l, v) \
+ dom_element_get_attribute_ns((dom_element *) (e), \
+ (struct dom_string *) (n), (struct dom_string *) (l), \
+ (struct dom_string **) (v))
+
+static inline dom_exception dom_element_set_attribute_ns(
+ struct dom_element *element, struct dom_string *namespace,
+ struct dom_string *qname, struct dom_string *value)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_set_attribute_ns(element, namespace,
+ qname, value);
+}
+#define dom_element_set_attribute_ns(e, n, l, v) \
+ dom_element_set_attribute_ns((dom_element *) (e), \
+ (struct dom_string *) (n), (struct dom_string *) (l), \
+ (struct dom_string *) (v))
+
+
+static inline dom_exception dom_element_remove_attribute_ns(
+ struct dom_element *element, struct dom_string *namespace,
+ struct dom_string *localname)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_remove_attribute_ns(element, namespace,
+ localname);
+}
+#define dom_element_remove_attribute_ns(e, n, l, v) \
+ dom_element_remove_attribute_ns((dom_element *) (e), \
+ (struct dom_string *) (n), (struct dom_string *) (l))
+
+
+static inline dom_exception dom_element_get_attribute_node_ns(
+ struct dom_element *element, struct dom_string *namespace,
+ struct dom_string *localname, struct dom_attr **result)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_get_attribute_node_ns(element, namespace,
+ localname, result);
+}
+#define dom_element_get_attribute_node_ns(e, n, l, r) \
+ dom_element_get_attribute_node_ns((dom_element *) (e), \
+ (struct dom_string *) (n), (struct dom_string *) (l), \
+ (struct dom_attr **) (r))
+
+static inline dom_exception dom_element_set_attribute_node_ns(
+ struct dom_element *element, struct dom_attr *attr,
+ struct dom_attr **result)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_set_attribute_node_ns(element, attr,
+ result);
+}
+#define dom_element_set_attribute_node_ns(e, a, r) \
+ dom_element_set_attribute_node_ns((dom_element *) (e), \
+ (struct dom_attr *) (a), (struct dom_attr **) (r))
+
+static inline dom_exception dom_element_get_elements_by_tag_name_ns(
struct dom_element *element, struct dom_string *namespace,
- struct dom_string *localname, struct dom_nodelist **result);
-
-dom_exception dom_element_has_attribute(struct dom_element *element,
- struct dom_string *name, bool *result);
-dom_exception dom_element_has_attribute_ns(struct dom_element *element,
- struct dom_string *namespace, struct dom_string *localname,
- bool *result);
-
-dom_exception dom_element_get_schema_type_info(struct dom_element *element,
- struct dom_type_info **result);
-
-dom_exception dom_element_set_id_attribute(struct dom_element *element,
- struct dom_string *name, bool is_id);
-dom_exception dom_element_set_id_attribute_ns(struct dom_element *element,
- struct dom_string *namespace, struct dom_string *localname,
- bool is_id);
-dom_exception dom_element_set_id_attribute_node(struct dom_element *element,
- struct dom_attr *id_attr, bool is_id);
+ struct dom_string *localname, struct dom_nodelist **result)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_get_elements_by_tag_name_ns(element,
+ namespace, localname, result);
+}
+#define dom_element_get_elements_by_tag_name_ns(e, n, l, r) \
+ dom_element_get_elements_by_tag_name_ns((dom_element *) (e), \
+ (struct dom_string *) (n), (struct dom_string *) (l), \
+ (struct dom_nodelist **) (r))
+
+static inline dom_exception dom_element_has_attribute(
+ struct dom_element *element, struct dom_string *name,
+ bool *result)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_has_attribute(element, name, result);
+}
+#define dom_element_has_attribute(e, n, r) dom_element_has_attribute( \
+ (dom_element *) (e), (struct dom_string *) (n), \
+ (bool *) (r))
+
+static inline dom_exception dom_element_has_attribute_ns(
+ struct dom_element *element, struct dom_string *namespace,
+ struct dom_string *localname, bool *result)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_has_attribute_ns(element, namespace,
+ localname, result);
+}
+#define dom_element_has_attribute_ns(e, n, l, r) dom_element_has_attribute_ns(\
+ (dom_element *) (e), (struct dom_string *) (n), \
+ (struct dom_string *) (l), (bool *) (r))
+
+static inline dom_exception dom_element_get_schema_type_info(
+ struct dom_element *element, struct dom_type_info **result)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_get_schema_type_info(element, result);
+}
+#define dom_element_get_schema_type_info(e, r) \
+ dom_element_get_schema_type_info((dom_element *) (e), \
+ (struct dom_type_info **) (r))
+
+static inline dom_exception dom_element_set_id_attribute(
+ struct dom_element *element, struct dom_string *name,
+ bool is_id)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_set_id_attribute(element, name, is_id);
+}
+#define dom_element_set_id_attribute(e, n, i) \
+ dom_element_set_id_attribute((dom_element *) (e), \
+ (struct dom_string *) (n), (bool) (i))
+
+static inline dom_exception dom_element_set_id_attribute_ns(
+ struct dom_element *element, struct dom_string *namespace,
+ struct dom_string *localname, bool is_id)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_set_id_attribute_ns(element, namespace,
+ localname, is_id);
+}
+#define dom_element_set_id_attribute_ns(e, n, l, i) \
+ dom_element_set_id_attribute_ns((dom_element *) (e), \
+ (struct dom_string *) (n), (struct dom_string *) (l), \
+ (bool) (i))
+
+static inline dom_exception dom_element_set_id_attribute_node(
+ struct dom_element *element, struct dom_attr *id_attr,
+ bool is_id)
+{
+ return ((dom_element_vtable *) ((dom_node *) element)->vtable)->
+ dom_element_set_id_attribute_node(element, id_attr,
+ is_id);
+}
+#define dom_element_set_id_attribute_node(e, a, i) \
+ dom_element_set_id_attribute_node((dom_element *) (e), \
+ (struct dom_attr *) (a), (bool) (i))
#endif