From 0a0b5ee3f834a6dda7ef287380977feea3e42982 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Sat, 31 Oct 2015 13:02:21 +0000 Subject: HTML element attributes get lowercased. --- src/html/html_element.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++ src/html/html_element.h | 24 +++++++++++++--- 2 files changed, 93 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/html/html_element.c b/src/html/html_element.c index ce0ba8f..d436898 100644 --- a/src/html/html_element.c +++ b/src/html/html_element.c @@ -142,6 +142,79 @@ SIMPLE_GET_SET(lang,lang) SIMPLE_GET_SET(dir,dir) SIMPLE_GET_SET(class_name,class) +dom_exception _dom_html_element_get_attribute( + struct dom_element *element, + dom_string *name, dom_string **value) +{ + dom_exception exc; + dom_string *lower_case_name; + + exc = dom_string_tolower(name, true, &lower_case_name); + if (exc != DOM_NO_ERR) { + return exc; + } + + exc = _dom_element_get_attribute(element, lower_case_name, value); + dom_string_unref(lower_case_name); + + return exc; +} + +dom_exception _dom_html_element_set_attribute( + struct dom_element *element, + dom_string *name, dom_string *value) +{ + dom_exception exc; + dom_string *lower_case_name; + + exc = dom_string_tolower(name, true, &lower_case_name); + if (exc != DOM_NO_ERR) { + return exc; + } + + exc = _dom_element_set_attribute(element, lower_case_name, value); + dom_string_unref(lower_case_name); + + return exc; +} + +dom_exception _dom_html_element_remove_attribute( + struct dom_element *element, + dom_string *name) +{ + dom_exception exc; + dom_string *lower_case_name; + + exc = dom_string_tolower(name, true, &lower_case_name); + if (exc != DOM_NO_ERR) { + return exc; + } + + exc = _dom_element_remove_attribute(element, lower_case_name); + dom_string_unref(lower_case_name); + + return exc; +} + +dom_exception _dom_html_element_has_attribute( + struct dom_element *element, + dom_string *name, bool *result) +{ + dom_exception exc; + dom_string *lower_case_name; + + exc = dom_string_tolower(name, true, &lower_case_name); + if (exc != DOM_NO_ERR) { + return exc; + } + + exc = _dom_element_has_attribute(element, lower_case_name, result); + dom_string_unref(lower_case_name); + + return exc; +} + + /** * Retrieve a list of descendant elements of an element which match a given * tag name (caselessly) diff --git a/src/html/html_element.h b/src/html/html_element.h index 86c696b..e742a1a 100644 --- a/src/html/html_element.h +++ b/src/html/html_element.h @@ -34,6 +34,22 @@ dom_exception _dom_html_element_initialise(struct dom_html_document *doc, void _dom_html_element_finalise(struct dom_html_element *ele); /* Virtual functions */ +dom_exception _dom_html_element_get_attribute( + struct dom_element *element, + dom_string *name, dom_string **value); + +dom_exception _dom_html_element_set_attribute( + struct dom_element *element, + dom_string *name, dom_string *value); + +dom_exception _dom_html_element_remove_attribute( + struct dom_element *element, + dom_string *name); + +dom_exception _dom_html_element_has_attribute( + struct dom_element *element, + dom_string *name, bool *result); + dom_exception _dom_html_element_get_elements_by_tag_name( struct dom_element *element, dom_string *name, struct dom_nodelist **result); @@ -50,9 +66,9 @@ dom_exception _dom_html_element_copy(dom_node_internal *old, #define DOM_ELEMENT_VTABLE_HTML_ELEMENT \ _dom_element_get_tag_name, \ - _dom_element_get_attribute, \ - _dom_element_set_attribute, \ - _dom_element_remove_attribute, \ + _dom_html_element_get_attribute, \ + _dom_html_element_set_attribute, \ + _dom_html_element_remove_attribute, \ _dom_element_get_attribute_node, \ _dom_element_set_attribute_node, \ _dom_element_remove_attribute_node, \ @@ -63,7 +79,7 @@ dom_exception _dom_html_element_copy(dom_node_internal *old, _dom_element_get_attribute_node_ns, \ _dom_element_set_attribute_node_ns, \ _dom_html_element_get_elements_by_tag_name_ns, \ - _dom_element_has_attribute, \ + _dom_html_element_has_attribute, \ _dom_element_has_attribute_ns, \ _dom_element_get_schema_type_info, \ _dom_element_set_id_attribute, \ -- cgit v1.2.3