diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2012-03-24 15:03:10 +0000 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2012-03-24 15:03:10 +0000 |
commit | 79e4b4870b4cfa717ec88468ae5836cb92497201 (patch) | |
tree | 9720c568aeda932a1de5bdfcf0246eb64d0851bf /src/core | |
parent | 2eea8e30c3e5b2bdfc4abc19e2e94c0f795ceb6d (diff) | |
download | libdom-79e4b4870b4cfa717ec88468ae5836cb92497201.tar.gz libdom-79e4b4870b4cfa717ec88468ae5836cb92497201.tar.bz2 |
Implement the element class API for libcss, except for actually making the array of lwc_strings.
svn path=/trunk/libdom/; revision=13595
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/element.c | 48 | ||||
-rw-r--r-- | src/core/element.h | 3 |
2 files changed, 43 insertions, 8 deletions
diff --git a/src/core/element.c b/src/core/element.c index f0801c9..5f30cab 100644 --- a/src/core/element.c +++ b/src/core/element.c @@ -11,6 +11,8 @@ #include <stdlib.h> #include <string.h> +#include <libwapcaplet/libwapcaplet.h> + #include <dom/dom.h> #include <dom/core/attr.h> #include <dom/core/element.h> @@ -469,6 +471,9 @@ dom_exception _dom_element_initialise(struct dom_document *doc, el->id_name = NULL; el->schema_type_info = NULL; + el->n_classes = 0; + el->classes = NULL; + return DOM_NO_ERR; } @@ -489,6 +494,15 @@ void _dom_element_finalise(struct dom_element *ele) /** \todo destroy schema type info */ } + /* Destroy the pre-separated class names */ + if (ele->classes != NULL) { + unsigned int class; + for (class = 0; class < ele->n_classes; class++) { + lwc_string_unref(ele->classes[class]); + } + free(ele->classes); + } + /* Finalise base class */ _dom_node_finalise(&ele->base); } @@ -1025,11 +1039,10 @@ dom_exception _dom_element_set_id_attribute_node(struct dom_element *element, dom_exception _dom_element_get_classes(struct dom_element *element, lwc_string ***classes, uint32_t *n_classes) { - UNUSED(element); - UNUSED(classes); - UNUSED(n_classes); + *classes = element->classes; + *n_classes = element->n_classes; - return DOM_NOT_SUPPORTED_ERR; + return DOM_NO_ERR; } /** @@ -1043,11 +1056,30 @@ dom_exception _dom_element_get_classes(struct dom_element *element, dom_exception _dom_element_has_class(struct dom_element *element, lwc_string *name, bool *match) { - UNUSED(element); - UNUSED(name); - UNUSED(match); + unsigned int class; + struct dom_node_internal *node = (struct dom_node_internal *)element; + struct dom_document *doc = node->owner; - return DOM_NOT_SUPPORTED_ERR; + /* TODO: Get quirks mode setting out of document */ + UNUSED(doc); + + if (true) { + /* Quirks mode: case insensitively match */ + for (class = 0; class < element->n_classes; class++) { + if (true == lwc_string_caseless_isequal(name, + element->classes[class], match)) + return DOM_NO_ERR; + } + } else { + /* Quirks mode: case sensitively match */ + for (class = 0; class < element->n_classes; class++) { + if (true == lwc_string_isequal(name, + element->classes[class], match)) + return DOM_NO_ERR; + } + } + + return DOM_NO_ERR; } /*------------- The overload virtual functions ------------------------*/ diff --git a/src/core/element.h b/src/core/element.h index 34f4167..1cdad71 100644 --- a/src/core/element.h +++ b/src/core/element.h @@ -36,6 +36,9 @@ struct dom_element { dom_string *id_name; /**< The id attribute's name */ struct dom_type_info *schema_type_info; /**< Type information */ + + lwc_string **classes; + uint32_t n_classes; }; dom_exception _dom_element_create(struct dom_document *doc, |