From fb21c6b3fb5aad4aa0af8221f39613e510c764d6 Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Sun, 25 Mar 2012 19:17:51 +0000 Subject: Make vertical align hint less braindead svn path=/trunk/netsurf/; revision=13707 --- css/css.c | 238 ++++++++++++++++++++++++++++++--------------------------- css/internal.h | 4 + css/select.c | 60 +++++++-------- 3 files changed, 159 insertions(+), 143 deletions(-) (limited to 'css') 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); -- cgit v1.2.3