summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2012-03-24 15:03:10 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2012-03-24 15:03:10 +0000
commit79e4b4870b4cfa717ec88468ae5836cb92497201 (patch)
tree9720c568aeda932a1de5bdfcf0246eb64d0851bf /src/core
parent2eea8e30c3e5b2bdfc4abc19e2e94c0f795ceb6d (diff)
downloadlibdom-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.c48
-rw-r--r--src/core/element.h3
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,