diff options
Diffstat (limited to 'src/core/element.h')
-rw-r--r-- | src/core/element.h | 108 |
1 files changed, 88 insertions, 20 deletions
diff --git a/src/core/element.h b/src/core/element.h index a05b8c0..f987fcd 100644 --- a/src/core/element.h +++ b/src/core/element.h @@ -19,6 +19,7 @@ struct dom_node; struct dom_string; struct dom_attr; struct dom_type_info; +struct dom_hash_table; /** * DOM element node @@ -26,33 +27,31 @@ struct dom_type_info; struct dom_element { struct dom_node_internal base; /**< Base node */ - struct dom_attr *attributes; /**< Element attributes */ + struct dom_hash_table *attributes; /**< Element attributes */ - struct dom_type_info *schema_type_info; /**< Type information */ -}; - -dom_exception dom_element_create(struct dom_document *doc, - struct dom_string *name, struct dom_string *namespace, - struct dom_string *prefix, struct dom_element **result); + struct dom_hash_table *ns_attributes; + /**< Attributes with prefix */ -dom_exception dom_element_initialise(struct dom_element *el, - struct dom_string *name, struct dom_string *namespace, - struct dom_string *prefix, struct dom_element **result); + struct lwc_string_s *id_ns; /**< The id attribute's namespace */ -void dom_element_destroy(struct dom_document *doc, - struct dom_element *element); + struct lwc_string_s *id_name; /**< The id attribute's name */ -void _dom_element_destroy(struct dom_node_internal *node); + struct dom_type_info *schema_type_info; /**< Type information */ +}; -dom_exception dom_element_get_attributes(struct dom_element *element, - struct dom_namednodemap **result); +dom_exception _dom_element_create(struct dom_document *doc, + struct lwc_string_s *name, struct lwc_string_s *namespace, + struct lwc_string_s *prefix, struct dom_element **result); -dom_exception dom_element_has_attributes(struct dom_element *element, - bool *result); +dom_exception _dom_element_initialise(struct dom_element *el, + struct dom_document *doc, struct lwc_string_s *name, + struct lwc_string_s *namespace, struct lwc_string_s *prefix, + struct dom_element **result); -struct dom_node_internal *dom_element_get_first_attribute( +void _dom_element_destroy(struct dom_document *doc, struct dom_element *element); + /* The virtual functions of dom_element */ dom_exception _dom_element_get_tag_name(struct dom_element *element, struct dom_string **name); @@ -68,8 +67,9 @@ 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_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); @@ -123,4 +123,72 @@ dom_exception _dom_element_set_id_attribute_node(struct dom_element *element, _dom_element_set_id_attribute_ns, \ _dom_element_set_id_attribute_node +/* Overloading dom_node functions */ +dom_exception _dom_element_get_attributes(dom_node_internal *node, + struct dom_namednodemap **result); +dom_exception _dom_element_has_attributes(dom_node_internal *node, + bool *result); +dom_exception _dom_element_normalize(dom_node_internal *node); +dom_exception _dom_element_lookup_prefix(dom_node_internal *node, + struct dom_string *namespace, struct dom_string **result); +dom_exception _dom_element_is_default_namespace(dom_node_internal *node, + struct dom_string *namespace, bool *result); +dom_exception _dom_element_lookup_namespace(dom_node_internal *node, + struct dom_string *prefix, struct dom_string **result); +#define DOM_NODE_VTABLE_ELEMENT \ + _dom_node_get_node_name, \ + _dom_node_get_node_value, \ + _dom_node_set_node_value, \ + _dom_node_get_node_type, \ + _dom_node_get_parent_node, \ + _dom_node_get_child_nodes, \ + _dom_node_get_first_child, \ + _dom_node_get_last_child, \ + _dom_node_get_previous_sibling, \ + _dom_node_get_next_sibling, \ + _dom_element_get_attributes, /*overload*/\ + _dom_node_get_owner_document, \ + _dom_node_insert_before, \ + _dom_node_replace_child, \ + _dom_node_remove_child, \ + _dom_node_append_child, \ + _dom_node_has_child_nodes, \ + _dom_node_clone_node, \ + _dom_node_normalize, \ + _dom_node_is_supported, \ + _dom_node_get_namespace, \ + _dom_node_get_prefix, \ + _dom_node_set_prefix, \ + _dom_node_get_local_name, \ + _dom_element_has_attributes, /*overload*/\ + _dom_node_get_base, \ + _dom_node_compare_document_position, \ + _dom_node_get_text_content, \ + _dom_node_set_text_content, \ + _dom_node_is_same, \ + _dom_element_lookup_prefix, /*overload*/\ + _dom_element_is_default_namespace, /*overload*/\ + _dom_element_lookup_namespace, /*overload*/\ + _dom_node_is_equal, \ + _dom_node_get_feature, \ + _dom_node_set_user_data, \ + _dom_node_get_user_data + + +/* The protected virtual function */ +void __dom_element_destroy(dom_node_internal *node); +dom_exception _dom_element_alloc(struct dom_document *doc, + struct dom_node_internal *n, struct dom_node_internal **ret); +dom_exception _dom_element_copy(struct dom_node_internal *new, + struct dom_node_internal *old); + +#define DOM_ELEMENT_PROTECT_VTABLE \ + __dom_element_destroy, \ + _dom_element_alloc, \ + _dom_element_copy + +/* Helper functions*/ +dom_exception _dom_element_get_id(struct dom_element *ele, + struct lwc_string_s **id); + #endif |