summaryrefslogtreecommitdiff
path: root/css
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2012-03-25 19:17:51 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2012-03-25 19:17:51 +0000
commitfb21c6b3fb5aad4aa0af8221f39613e510c764d6 (patch)
tree715b0a99020ef8ae7451c22ccb8b752eb1727c6b /css
parent3434883de7bdb35798118bd68b65835497184fda (diff)
downloadnetsurf-fb21c6b3fb5aad4aa0af8221f39613e510c764d6.tar.gz
netsurf-fb21c6b3fb5aad4aa0af8221f39613e510c764d6.tar.bz2
Make vertical align hint less braindead
svn path=/trunk/netsurf/; revision=13707
Diffstat (limited to 'css')
-rw-r--r--css/css.c238
-rw-r--r--css/internal.h4
-rw-r--r--css/select.c60
3 files changed, 159 insertions, 143 deletions
diff --git a/css/css.c b/css/css.c
index 33a0397eb..fadcf15e4 100644
--- a/css/css.c
+++ b/css/css.c
@@ -89,6 +89,7 @@ dom_string *nscss_dom_string_absmiddle;
dom_string *nscss_dom_string_align;
dom_string *nscss_dom_string_applet;
dom_string *nscss_dom_string_background;
+dom_string *nscss_dom_string_baseline;
dom_string *nscss_dom_string_bgcolor;
dom_string *nscss_dom_string_body;
dom_string *nscss_dom_string_bordercolor;
@@ -97,6 +98,7 @@ dom_string *nscss_dom_string_caption;
dom_string *nscss_dom_string_cellpadding;
dom_string *nscss_dom_string_cellspacing;
dom_string *nscss_dom_string_center;
+dom_string *nscss_dom_string_col;
dom_string *nscss_dom_string_color;
dom_string *nscss_dom_string_cols;
dom_string *nscss_dom_string_div;
@@ -130,9 +132,11 @@ dom_string *nscss_dom_string_tbody;
dom_string *nscss_dom_string_td;
dom_string *nscss_dom_string_text;
dom_string *nscss_dom_string_textarea;
+dom_string *nscss_dom_string_texttop;
dom_string *nscss_dom_string_tfoot;
dom_string *nscss_dom_string_th;
dom_string *nscss_dom_string_thead;
+dom_string *nscss_dom_string_top;
dom_string *nscss_dom_string_tr;
dom_string *nscss_dom_string_type;
dom_string *nscss_dom_string_valign;
@@ -316,7 +320,7 @@ bool nscss_convert(struct content *c)
/**
* Convert CSS data ready for use
*
- * \param c CSS data to convert
+ * \param c CSS data to convert
* \return CSS error
*/
css_error nscss_convert_css_data(struct content_css_data *c)
@@ -833,62 +837,66 @@ static void nscss_fini(void)
} \
} while (0) \
- CSS_DOM_STRING_UNREF(a);
- CSS_DOM_STRING_UNREF(abscenter);
- CSS_DOM_STRING_UNREF(absmiddle);
- CSS_DOM_STRING_UNREF(align);
- CSS_DOM_STRING_UNREF(applet);
- CSS_DOM_STRING_UNREF(background);
- CSS_DOM_STRING_UNREF(bgcolor);
- CSS_DOM_STRING_UNREF(body);
- CSS_DOM_STRING_UNREF(bordercolor);
- CSS_DOM_STRING_UNREF(bottom);
- CSS_DOM_STRING_UNREF(caption);
- CSS_DOM_STRING_UNREF(cellpadding);
- CSS_DOM_STRING_UNREF(cellspacing);
- CSS_DOM_STRING_UNREF(center);
- CSS_DOM_STRING_UNREF(color);
- CSS_DOM_STRING_UNREF(cols);
- CSS_DOM_STRING_UNREF(div);
- CSS_DOM_STRING_UNREF(embed);
- CSS_DOM_STRING_UNREF(font);
- CSS_DOM_STRING_UNREF(h1);
- CSS_DOM_STRING_UNREF(h2);
- CSS_DOM_STRING_UNREF(h3);
- CSS_DOM_STRING_UNREF(h4);
- CSS_DOM_STRING_UNREF(h5);
- CSS_DOM_STRING_UNREF(h6);
- CSS_DOM_STRING_UNREF(height);
- CSS_DOM_STRING_UNREF(hr);
- CSS_DOM_STRING_UNREF(href);
- CSS_DOM_STRING_UNREF(hspace);
- CSS_DOM_STRING_UNREF(iframe);
- CSS_DOM_STRING_UNREF(img);
- CSS_DOM_STRING_UNREF(input);
- CSS_DOM_STRING_UNREF(justify);
- CSS_DOM_STRING_UNREF(left);
- CSS_DOM_STRING_UNREF(link);
- CSS_DOM_STRING_UNREF(middle);
- CSS_DOM_STRING_UNREF(object);
- CSS_DOM_STRING_UNREF(p);
- CSS_DOM_STRING_UNREF(password);
- CSS_DOM_STRING_UNREF(right);
- CSS_DOM_STRING_UNREF(rows);
- CSS_DOM_STRING_UNREF(size);
- CSS_DOM_STRING_UNREF(table);
- CSS_DOM_STRING_UNREF(tbody);
- CSS_DOM_STRING_UNREF(td);
- CSS_DOM_STRING_UNREF(text);
- CSS_DOM_STRING_UNREF(textarea);
- CSS_DOM_STRING_UNREF(tfoot);
- CSS_DOM_STRING_UNREF(th);
- CSS_DOM_STRING_UNREF(thead);
- CSS_DOM_STRING_UNREF(tr);
- CSS_DOM_STRING_UNREF(type);
- CSS_DOM_STRING_UNREF(valign);
- CSS_DOM_STRING_UNREF(vlink);
- CSS_DOM_STRING_UNREF(vspace);
- CSS_DOM_STRING_UNREF(width);
+ CSS_DOM_STRING_UNREF(a);
+ CSS_DOM_STRING_UNREF(abscenter);
+ CSS_DOM_STRING_UNREF(absmiddle);
+ CSS_DOM_STRING_UNREF(align);
+ CSS_DOM_STRING_UNREF(applet);
+ CSS_DOM_STRING_UNREF(background);
+ CSS_DOM_STRING_UNREF(baseline);
+ CSS_DOM_STRING_UNREF(bgcolor);
+ CSS_DOM_STRING_UNREF(body);
+ CSS_DOM_STRING_UNREF(bordercolor);
+ CSS_DOM_STRING_UNREF(bottom);
+ CSS_DOM_STRING_UNREF(caption);
+ CSS_DOM_STRING_UNREF(cellpadding);
+ CSS_DOM_STRING_UNREF(cellspacing);
+ CSS_DOM_STRING_UNREF(center);
+ CSS_DOM_STRING_UNREF(col);
+ CSS_DOM_STRING_UNREF(color);
+ CSS_DOM_STRING_UNREF(cols);
+ CSS_DOM_STRING_UNREF(div);
+ CSS_DOM_STRING_UNREF(embed);
+ CSS_DOM_STRING_UNREF(font);
+ CSS_DOM_STRING_UNREF(h1);
+ CSS_DOM_STRING_UNREF(h2);
+ CSS_DOM_STRING_UNREF(h3);
+ CSS_DOM_STRING_UNREF(h4);
+ CSS_DOM_STRING_UNREF(h5);
+ CSS_DOM_STRING_UNREF(h6);
+ CSS_DOM_STRING_UNREF(height);
+ CSS_DOM_STRING_UNREF(hr);
+ CSS_DOM_STRING_UNREF(href);
+ CSS_DOM_STRING_UNREF(hspace);
+ CSS_DOM_STRING_UNREF(iframe);
+ CSS_DOM_STRING_UNREF(img);
+ CSS_DOM_STRING_UNREF(input);
+ CSS_DOM_STRING_UNREF(justify);
+ CSS_DOM_STRING_UNREF(left);
+ CSS_DOM_STRING_UNREF(link);
+ CSS_DOM_STRING_UNREF(middle);
+ CSS_DOM_STRING_UNREF(object);
+ CSS_DOM_STRING_UNREF(p);
+ CSS_DOM_STRING_UNREF(password);
+ CSS_DOM_STRING_UNREF(right);
+ CSS_DOM_STRING_UNREF(rows);
+ CSS_DOM_STRING_UNREF(size);
+ CSS_DOM_STRING_UNREF(table);
+ CSS_DOM_STRING_UNREF(tbody);
+ CSS_DOM_STRING_UNREF(td);
+ CSS_DOM_STRING_UNREF(text);
+ CSS_DOM_STRING_UNREF(textarea);
+ CSS_DOM_STRING_UNREF(texttop);
+ CSS_DOM_STRING_UNREF(tfoot);
+ CSS_DOM_STRING_UNREF(th);
+ CSS_DOM_STRING_UNREF(thead);
+ CSS_DOM_STRING_UNREF(top);
+ CSS_DOM_STRING_UNREF(tr);
+ CSS_DOM_STRING_UNREF(type);
+ CSS_DOM_STRING_UNREF(valign);
+ CSS_DOM_STRING_UNREF(vlink);
+ CSS_DOM_STRING_UNREF(vspace);
+ CSS_DOM_STRING_UNREF(width);
#undef CSS_DOM_STRING_UNREF
@@ -939,62 +947,66 @@ nserror nscss_init(void)
if ((exc != DOM_NO_ERR) || (nscss_dom_string_##NAME == NULL)) \
goto error
- CSS_DOM_STRING_INTERN(a);
- CSS_DOM_STRING_INTERN(abscenter);
- CSS_DOM_STRING_INTERN(absmiddle);
- CSS_DOM_STRING_INTERN(align);
- CSS_DOM_STRING_INTERN(applet);
- CSS_DOM_STRING_INTERN(background);
- CSS_DOM_STRING_INTERN(bgcolor);
- CSS_DOM_STRING_INTERN(body);
- CSS_DOM_STRING_INTERN(bordercolor);
- CSS_DOM_STRING_INTERN(bottom);
- CSS_DOM_STRING_INTERN(caption);
- CSS_DOM_STRING_INTERN(cellpadding);
- CSS_DOM_STRING_INTERN(cellspacing);
- CSS_DOM_STRING_INTERN(center);
- CSS_DOM_STRING_INTERN(color);
- CSS_DOM_STRING_INTERN(cols);
- CSS_DOM_STRING_INTERN(div);
- CSS_DOM_STRING_INTERN(embed);
- CSS_DOM_STRING_INTERN(font);
- CSS_DOM_STRING_INTERN(h1);
- CSS_DOM_STRING_INTERN(h2);
- CSS_DOM_STRING_INTERN(h3);
- CSS_DOM_STRING_INTERN(h4);
- CSS_DOM_STRING_INTERN(h5);
- CSS_DOM_STRING_INTERN(h6);
- CSS_DOM_STRING_INTERN(height);
- CSS_DOM_STRING_INTERN(hr);
- CSS_DOM_STRING_INTERN(href);
- CSS_DOM_STRING_INTERN(hspace);
- CSS_DOM_STRING_INTERN(iframe);
- CSS_DOM_STRING_INTERN(img);
- CSS_DOM_STRING_INTERN(input);
- CSS_DOM_STRING_INTERN(justify);
- CSS_DOM_STRING_INTERN(left);
- CSS_DOM_STRING_INTERN(link);
- CSS_DOM_STRING_INTERN(middle);
- CSS_DOM_STRING_INTERN(object);
- CSS_DOM_STRING_INTERN(p);
- CSS_DOM_STRING_INTERN(password);
- CSS_DOM_STRING_INTERN(right);
- CSS_DOM_STRING_INTERN(rows);
- CSS_DOM_STRING_INTERN(size);
- CSS_DOM_STRING_INTERN(table);
- CSS_DOM_STRING_INTERN(tbody);
- CSS_DOM_STRING_INTERN(td);
- CSS_DOM_STRING_INTERN(text);
- CSS_DOM_STRING_INTERN(textarea);
- CSS_DOM_STRING_INTERN(tfoot);
- CSS_DOM_STRING_INTERN(th);
- CSS_DOM_STRING_INTERN(thead);
- CSS_DOM_STRING_INTERN(tr);
- CSS_DOM_STRING_INTERN(type);
- CSS_DOM_STRING_INTERN(valign);
- CSS_DOM_STRING_INTERN(vlink);
- CSS_DOM_STRING_INTERN(vspace);
- CSS_DOM_STRING_INTERN(width);
+ CSS_DOM_STRING_INTERN(a);
+ CSS_DOM_STRING_INTERN(abscenter);
+ CSS_DOM_STRING_INTERN(absmiddle);
+ CSS_DOM_STRING_INTERN(align);
+ CSS_DOM_STRING_INTERN(applet);
+ CSS_DOM_STRING_INTERN(background);
+ CSS_DOM_STRING_INTERN(baseline);
+ CSS_DOM_STRING_INTERN(bgcolor);
+ CSS_DOM_STRING_INTERN(body);
+ CSS_DOM_STRING_INTERN(bordercolor);
+ CSS_DOM_STRING_INTERN(bottom);
+ CSS_DOM_STRING_INTERN(caption);
+ CSS_DOM_STRING_INTERN(cellpadding);
+ CSS_DOM_STRING_INTERN(cellspacing);
+ CSS_DOM_STRING_INTERN(center);
+ CSS_DOM_STRING_INTERN(col);
+ CSS_DOM_STRING_INTERN(color);
+ CSS_DOM_STRING_INTERN(cols);
+ CSS_DOM_STRING_INTERN(div);
+ CSS_DOM_STRING_INTERN(embed);
+ CSS_DOM_STRING_INTERN(font);
+ CSS_DOM_STRING_INTERN(h1);
+ CSS_DOM_STRING_INTERN(h2);
+ CSS_DOM_STRING_INTERN(h3);
+ CSS_DOM_STRING_INTERN(h4);
+ CSS_DOM_STRING_INTERN(h5);
+ CSS_DOM_STRING_INTERN(h6);
+ CSS_DOM_STRING_INTERN(height);
+ CSS_DOM_STRING_INTERN(hr);
+ CSS_DOM_STRING_INTERN(href);
+ CSS_DOM_STRING_INTERN(hspace);
+ CSS_DOM_STRING_INTERN(iframe);
+ CSS_DOM_STRING_INTERN(img);
+ CSS_DOM_STRING_INTERN(input);
+ CSS_DOM_STRING_INTERN(justify);
+ CSS_DOM_STRING_INTERN(left);
+ CSS_DOM_STRING_INTERN(link);
+ CSS_DOM_STRING_INTERN(middle);
+ CSS_DOM_STRING_INTERN(object);
+ CSS_DOM_STRING_INTERN(p);
+ CSS_DOM_STRING_INTERN(password);
+ CSS_DOM_STRING_INTERN(right);
+ CSS_DOM_STRING_INTERN(rows);
+ CSS_DOM_STRING_INTERN(size);
+ CSS_DOM_STRING_INTERN(table);
+ CSS_DOM_STRING_INTERN(tbody);
+ CSS_DOM_STRING_INTERN(td);
+ CSS_DOM_STRING_INTERN(text);
+ CSS_DOM_STRING_INTERN(textarea);
+ CSS_DOM_STRING_INTERN(texttop);
+ CSS_DOM_STRING_INTERN(tfoot);
+ CSS_DOM_STRING_INTERN(th);
+ CSS_DOM_STRING_INTERN(thead);
+ CSS_DOM_STRING_INTERN(top);
+ CSS_DOM_STRING_INTERN(tr);
+ CSS_DOM_STRING_INTERN(type);
+ CSS_DOM_STRING_INTERN(valign);
+ CSS_DOM_STRING_INTERN(vlink);
+ CSS_DOM_STRING_INTERN(vspace);
+ CSS_DOM_STRING_INTERN(width);
#undef CSS_DOM_STRING_INTERN
diff --git a/css/internal.h b/css/internal.h
index b4785e4ec..1926ee341 100644
--- a/css/internal.h
+++ b/css/internal.h
@@ -30,6 +30,7 @@ extern struct dom_string *nscss_dom_string_absmiddle;
extern struct dom_string *nscss_dom_string_align;
extern struct dom_string *nscss_dom_string_applet;
extern struct dom_string *nscss_dom_string_background;
+extern struct dom_string *nscss_dom_string_baseline;
extern struct dom_string *nscss_dom_string_bgcolor;
extern struct dom_string *nscss_dom_string_body;
extern struct dom_string *nscss_dom_string_bordercolor;
@@ -38,6 +39,7 @@ extern struct dom_string *nscss_dom_string_caption;
extern struct dom_string *nscss_dom_string_cellpadding;
extern struct dom_string *nscss_dom_string_cellspacing;
extern struct dom_string *nscss_dom_string_center;
+extern struct dom_string *nscss_dom_string_col;
extern struct dom_string *nscss_dom_string_color;
extern struct dom_string *nscss_dom_string_cols;
extern struct dom_string *nscss_dom_string_div;
@@ -71,9 +73,11 @@ extern struct dom_string *nscss_dom_string_tbody;
extern struct dom_string *nscss_dom_string_td;
extern struct dom_string *nscss_dom_string_text;
extern struct dom_string *nscss_dom_string_textarea;
+extern struct dom_string *nscss_dom_string_texttop;
extern struct dom_string *nscss_dom_string_tfoot;
extern struct dom_string *nscss_dom_string_th;
extern struct dom_string *nscss_dom_string_thead;
+extern struct dom_string *nscss_dom_string_top;
extern struct dom_string *nscss_dom_string_tr;
extern struct dom_string *nscss_dom_string_type;
extern struct dom_string *nscss_dom_string_valign;
diff --git a/css/select.c b/css/select.c
index c3e909f43..2b18ac649 100644
--- a/css/select.c
+++ b/css/select.c
@@ -1880,13 +1880,13 @@ node_presentational_hint_vertical_align(nscss_select_ctx *ctx,
if (err != DOM_NO_ERR)
return CSS_PROPERTY_NOT_SET;
- 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) {
+ if (dom_string_isequal(name, nscss_dom_string_col) ||
+ dom_string_isequal(name, nscss_dom_string_thead) ||
+ dom_string_isequal(name, nscss_dom_string_tbody) ||
+ dom_string_isequal(name, nscss_dom_string_tfoot) ||
+ dom_string_isequal(name, nscss_dom_string_tr) ||
+ dom_string_isequal(name, nscss_dom_string_td) ||
+ dom_string_isequal(name, nscss_dom_string_th)) {
err = dom_element_get_attribute(node,
nscss_dom_string_valign, &valign);
if (err != DOM_NO_ERR || valign == NULL) {
@@ -1894,16 +1894,16 @@ node_presentational_hint_vertical_align(nscss_select_ctx *ctx,
return CSS_PROPERTY_NOT_SET;
}
- if (strcasecmp(dom_string_data(valign), "top") == 0) {
+ if (dom_string_caseless_isequal(valign, nscss_dom_string_top)) {
hint->status = CSS_VERTICAL_ALIGN_TOP;
- } else if (strcasecmp(dom_string_data(valign),
- "middle") == 0) {
+ } else if (dom_string_caseless_isequal(valign,
+ nscss_dom_string_middle)) {
hint->status = CSS_VERTICAL_ALIGN_MIDDLE;
- } else if (strcasecmp(dom_string_data(valign),
- "bottom") == 0) {
+ } else if (dom_string_caseless_isequal(valign,
+ nscss_dom_string_bottom)) {
hint->status = CSS_VERTICAL_ALIGN_BOTTOM;
- } else if (strcasecmp(dom_string_data(valign),
- "baseline") == 0) {
+ } else if (dom_string_caseless_isequal(valign,
+ nscss_dom_string_baseline)) {
hint->status = CSS_VERTICAL_ALIGN_BASELINE;
} else {
dom_string_unref(valign);
@@ -1915,11 +1915,11 @@ node_presentational_hint_vertical_align(nscss_select_ctx *ctx,
dom_string_unref(name);
return CSS_OK;
- } 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) {
+ } else if (dom_string_isequal(name, nscss_dom_string_applet) ||
+ dom_string_isequal(name, nscss_dom_string_embed) ||
+ dom_string_isequal(name, nscss_dom_string_iframe) ||
+ dom_string_isequal(name, nscss_dom_string_img) ||
+ dom_string_isequal(name, nscss_dom_string_object)) {
/** \todo input[type=image][align=*] - $11.3.3 */
err = dom_element_get_attribute(node,
nscss_dom_string_align, &valign);
@@ -1928,20 +1928,20 @@ node_presentational_hint_vertical_align(nscss_select_ctx *ctx,
return CSS_PROPERTY_NOT_SET;
}
- if (strcasecmp(dom_string_data(valign), "top") == 0) {
+ if (dom_string_caseless_isequal(valign, nscss_dom_string_top)) {
hint->status = CSS_VERTICAL_ALIGN_TOP;
- } else if (strcasecmp(dom_string_data(valign),
- "bottom") == 0 ||
- strcasecmp(dom_string_data(valign),
- "baseline") == 0) {
+ } else if (dom_string_caseless_isequal(valign,
+ nscss_dom_string_bottom) ||
+ dom_string_caseless_isequal(valign,
+ nscss_dom_string_baseline)) {
hint->status = CSS_VERTICAL_ALIGN_BASELINE;
- } else if (strcasecmp(dom_string_data(valign),
- "texttop") == 0) {
+ } else if (dom_string_caseless_isequal(valign,
+ nscss_dom_string_texttop)) {
hint->status = CSS_VERTICAL_ALIGN_TEXT_TOP;
- } else if (strcasecmp(dom_string_data(valign),
- "absmiddle") == 0 ||
- strcasecmp(dom_string_data(valign),
- "abscenter") == 0) {
+ } else if (dom_string_caseless_isequal(valign,
+ nscss_dom_string_absmiddle) ||
+ dom_string_caseless_isequal(valign,
+ nscss_dom_string_abscenter)) {
hint->status = CSS_VERTICAL_ALIGN_MIDDLE;
} else {
dom_string_unref(valign);