summaryrefslogtreecommitdiff
path: root/css
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2012-03-25 14:51:37 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2012-03-25 14:51:37 +0000
commit729b34fa3b6b08e3386b60f9f2e2d681533c9b99 (patch)
tree855c47e84a27eec5d1028728ee4a0f25cf3efbc4 /css
parent7aa414794058216d2117564600f3ea75a8b90a49 (diff)
downloadnetsurf-729b34fa3b6b08e3386b60f9f2e2d681533c9b99.tar.gz
netsurf-729b34fa3b6b08e3386b60f9f2e2d681533c9b99.tar.bz2
Fix up node_presentational_hint_vertical_align
svn path=/trunk/netsurf/; revision=13690
Diffstat (limited to 'css')
-rw-r--r--css/css.c7
-rw-r--r--css/internal.h3
-rw-r--r--css/select.c80
3 files changed, 57 insertions, 33 deletions
diff --git a/css/css.c b/css/css.c
index 99c752a8d..a9c401df5 100644
--- a/css/css.c
+++ b/css/css.c
@@ -85,6 +85,8 @@ static css_stylesheet *blank_import;
dom_string *nscss_dom_string_a;
dom_string *nscss_dom_string_href;
+dom_string *nscss_dom_string_align;
+dom_string *nscss_dom_string_valign;
/**
* Initialise a CSS content
@@ -779,6 +781,8 @@ static void nscss_fini(void)
} \
} while (0) \
+ CSS_DOM_STRING_UNREF(valign);
+ CSS_DOM_STRING_UNREF(align);
CSS_DOM_STRING_UNREF(href);
CSS_DOM_STRING_UNREF(a);
@@ -833,7 +837,8 @@ nserror nscss_init(void)
CSS_DOM_STRING_INTERN(a);
CSS_DOM_STRING_INTERN(href);
-
+ CSS_DOM_STRING_INTERN(align);
+ CSS_DOM_STRING_INTERN(valign);
#undef CSS_DOM_STRING_INTERN
diff --git a/css/internal.h b/css/internal.h
index c1777fe58..ab26fdd00 100644
--- a/css/internal.h
+++ b/css/internal.h
@@ -26,5 +26,8 @@ css_error nscss_resolve_url(void *pw, const char *base,
extern struct dom_string *nscss_dom_string_a;
extern struct dom_string *nscss_dom_string_href;
+extern struct dom_string *nscss_dom_string_align;
+extern struct dom_string *nscss_dom_string_valign;
+
#endif
diff --git a/css/select.c b/css/select.c
index a98d4a07a..0c548049d 100644
--- a/css/select.c
+++ b/css/select.c
@@ -1872,75 +1872,91 @@ node_presentational_hint_vertical_align(nscss_select_ctx *ctx,
dom_node *node,
css_hint *hint)
{
- xmlChar *valign = NULL;
+ dom_string *name;
+ dom_string *valign = NULL;
+ dom_exception err;
- if (strcmp((const char *) n->name, "col") == 0 ||
- strcmp((const char *) n->name, "thead") == 0 ||
- strcmp((const char *) n->name, "tbody") == 0 ||
- strcmp((const char *) n->name, "tfoot") == 0 ||
- strcmp((const char *) n->name, "tr") == 0 ||
- strcmp((const char *) n->name, "td") == 0 ||
- strcmp((const char *) n->name, "th") == 0) {
- valign = xmlGetProp(n, (const xmlChar *) "valign");
+ err = dom_node_get_node_name(node, &name);
+ if (err != DOM_NO_ERR)
+ return CSS_PROPERTY_NOT_SET;
- if (valign == NULL)
+ if (strcmp(dom_string_data(name), "col") == 0 ||
+ strcmp(dom_string_data(name), "thead") == 0 ||
+ strcmp(dom_string_data(name), "tbody") == 0 ||
+ strcmp(dom_string_data(name), "tfoot") == 0 ||
+ strcmp(dom_string_data(name), "tr") == 0 ||
+ strcmp(dom_string_data(name), "td") == 0 ||
+ strcmp(dom_string_data(name), "th") == 0) {
+ err = dom_element_get_attribute(node,
+ nscss_dom_string_valign, &valign);
+ if (err != DOM_NO_ERR || valign == NULL) {
+ dom_string_unref(name);
return CSS_PROPERTY_NOT_SET;
+ }
- if (strcasecmp((const char *) valign, "top") == 0) {
+ if (strcasecmp(dom_string_data(valign), "top") == 0) {
hint->status = CSS_VERTICAL_ALIGN_TOP;
- } else if (strcasecmp((const char *) valign,
+ } else if (strcasecmp(dom_string_data(valign),
"middle") == 0) {
hint->status = CSS_VERTICAL_ALIGN_MIDDLE;
- } else if (strcasecmp((const char *) valign,
+ } else if (strcasecmp(dom_string_data(valign),
"bottom") == 0) {
hint->status = CSS_VERTICAL_ALIGN_BOTTOM;
- } else if (strcasecmp((const char *) valign,
+ } else if (strcasecmp(dom_string_data(valign),
"baseline") == 0) {
hint->status = CSS_VERTICAL_ALIGN_BASELINE;
} else {
- xmlFree(valign);
+ dom_string_unref(valign);
+ dom_string_unref(name);
return CSS_PROPERTY_NOT_SET;
}
- xmlFree(valign);
+ dom_string_unref(valign);
+ dom_string_unref(name);
return CSS_OK;
- } else if (strcmp((const char *) n->name, "applet") == 0 ||
- strcmp((const char *) n->name, "embed") == 0 ||
- strcmp((const char *) n->name, "iframe") == 0 ||
- strcmp((const char *) n->name, "img") == 0 ||
- strcmp((const char *) n->name, "object") == 0) {
+ } else if (strcmp(dom_string_data(name), "applet") == 0 ||
+ strcmp(dom_string_data(name), "embed") == 0 ||
+ strcmp(dom_string_data(name), "iframe") == 0 ||
+ strcmp(dom_string_data(name), "img") == 0 ||
+ strcmp(dom_string_data(name), "object") == 0) {
/** \todo input[type=image][align=*] - $11.3.3 */
- valign = xmlGetProp(n, (const xmlChar *) "align");
-
- if (valign == NULL)
+ err = dom_element_get_attribute(node,
+ nscss_dom_string_align, &valign);
+ if (err != DOM_NO_ERR || valign == NULL) {
+ dom_string_unref(name);
return CSS_PROPERTY_NOT_SET;
+ }
- if (strcasecmp((const char *) valign, "top") == 0) {
+ if (strcasecmp(dom_string_data(valign), "top") == 0) {
hint->status = CSS_VERTICAL_ALIGN_TOP;
- } else if (strcasecmp((const char *) valign,
+ } else if (strcasecmp(dom_string_data(valign),
"bottom") == 0 ||
- strcasecmp((const char *) valign,
+ strcasecmp(dom_string_data(valign),
"baseline") == 0) {
hint->status = CSS_VERTICAL_ALIGN_BASELINE;
- } else if (strcasecmp((const char *) valign,
+ } else if (strcasecmp(dom_string_data(valign),
"texttop") == 0) {
hint->status = CSS_VERTICAL_ALIGN_TEXT_TOP;
- } else if (strcasecmp((const char *) valign,
+ } else if (strcasecmp(dom_string_data(valign),
"absmiddle") == 0 ||
- strcasecmp((const char *) valign,
+ strcasecmp(dom_string_data(valign),
"abscenter") == 0) {
hint->status = CSS_VERTICAL_ALIGN_MIDDLE;
} else {
- xmlFree(valign);
+ dom_string_unref(valign);
+ dom_string_unref(name);
return CSS_PROPERTY_NOT_SET;
}
- xmlFree(valign);
+ dom_string_unref(valign);
+ dom_string_unref(name);
return CSS_OK;
}
+ dom_string_unref(name);
+ return CSS_PROPERTY_NOT_SET;
}
static css_error