Interned string cleanup, phase 2: Create utils/corestrings and use it in css handler.

This commit is contained in:
Michael Drake 2012-07-22 15:48:55 +01:00
parent 1e65737c8c
commit 2ad24f39da
7 changed files with 556 additions and 465 deletions

View File

@ -13,12 +13,13 @@ S_CSS := css.c dump.c internal.c select.c utils.c
S_RENDER := box.c box_construct.c box_normalise.c \
font.c form.c \
html.c html_script.c html_interaction.c html_redraw.c html_forms.c \
imagemap.c layout.c list.c search.c table.c \
html.c html_script.c html_interaction.c html_redraw.c \
html_forms.c imagemap.c layout.c list.c search.c table.c \
textinput.c textplain.c
S_UTILS := base64.c filename.c hashtable.c locale.c messages.c nsurl.c \
talloc.c url.c utf8.c utils.c useragent.c filepath.c log.c
S_UTILS := base64.c corestrings.c filename.c hashtable.c locale.c \
messages.c nsurl.c talloc.c url.c utf8.c utils.c useragent.c \
filepath.c log.c
S_HTTP := challenge.c generics.c primitives.c parameter.c \
content-disposition.c content-type.c www-authenticate.c

246
css/css.c
View File

@ -83,71 +83,6 @@ static css_error nscss_register_import(struct content_css_data *c,
static lwc_string *css_charset;
static css_stylesheet *blank_import;
lwc_string *nscss_lwc_string_a;
lwc_string *nscss_lwc_string_abscenter;
lwc_string *nscss_lwc_string_absmiddle;
lwc_string *nscss_lwc_string_align;
lwc_string *nscss_lwc_string_applet;
lwc_string *nscss_lwc_string_baseline;
lwc_string *nscss_lwc_string_body;
lwc_string *nscss_lwc_string_bottom;
lwc_string *nscss_lwc_string_caption;
lwc_string *nscss_lwc_string_center;
lwc_string *nscss_lwc_string_col;
lwc_string *nscss_lwc_string_div;
lwc_string *nscss_lwc_string_embed;
lwc_string *nscss_lwc_string_font;
lwc_string *nscss_lwc_string_h1;
lwc_string *nscss_lwc_string_h2;
lwc_string *nscss_lwc_string_h3;
lwc_string *nscss_lwc_string_h4;
lwc_string *nscss_lwc_string_h5;
lwc_string *nscss_lwc_string_h6;
lwc_string *nscss_lwc_string_hr;
lwc_string *nscss_lwc_string_iframe;
lwc_string *nscss_lwc_string_img;
lwc_string *nscss_lwc_string_input;
lwc_string *nscss_lwc_string_justify;
lwc_string *nscss_lwc_string_left;
lwc_string *nscss_lwc_string_middle;
lwc_string *nscss_lwc_string_object;
lwc_string *nscss_lwc_string_p;
lwc_string *nscss_lwc_string_password;
lwc_string *nscss_lwc_string_right;
lwc_string *nscss_lwc_string_table;
lwc_string *nscss_lwc_string_tbody;
lwc_string *nscss_lwc_string_td;
lwc_string *nscss_lwc_string_text;
lwc_string *nscss_lwc_string_textarea;
lwc_string *nscss_lwc_string_texttop;
lwc_string *nscss_lwc_string_tfoot;
lwc_string *nscss_lwc_string_th;
lwc_string *nscss_lwc_string_thead;
lwc_string *nscss_lwc_string_top;
lwc_string *nscss_lwc_string_tr;
dom_string *nscss_dom_string_align;
dom_string *nscss_dom_string_background;
dom_string *nscss_dom_string_bgcolor;
dom_string *nscss_dom_string_border;
dom_string *nscss_dom_string_bordercolor;
dom_string *nscss_dom_string_cellpadding;
dom_string *nscss_dom_string_cellspacing;
dom_string *nscss_dom_string_color;
dom_string *nscss_dom_string_cols;
dom_string *nscss_dom_string_height;
dom_string *nscss_dom_string_href;
dom_string *nscss_dom_string_hspace;
dom_string *nscss_dom_string_link;
dom_string *nscss_dom_string_rows;
dom_string *nscss_dom_string_size;
dom_string *nscss_dom_string_text;
dom_string *nscss_dom_string_type;
dom_string *nscss_dom_string_valign;
dom_string *nscss_dom_string_vlink;
dom_string *nscss_dom_string_vspace;
dom_string *nscss_dom_string_width;
/**
* Initialise a CSS content
@ -834,91 +769,6 @@ css_error nscss_register_import(struct content_css_data *c,
*/
static void nscss_fini(void)
{
#define CSS_LWC_STRING_UNREF(NAME) \
do { \
if (nscss_lwc_string_##NAME != NULL) { \
lwc_string_unref(nscss_lwc_string_##NAME); \
nscss_lwc_string_##NAME = NULL; \
} \
} while (0)
CSS_LWC_STRING_UNREF(a);
CSS_LWC_STRING_UNREF(abscenter);
CSS_LWC_STRING_UNREF(absmiddle);
CSS_LWC_STRING_UNREF(align);
CSS_LWC_STRING_UNREF(applet);
CSS_LWC_STRING_UNREF(baseline);
CSS_LWC_STRING_UNREF(body);
CSS_LWC_STRING_UNREF(bottom);
CSS_LWC_STRING_UNREF(caption);
CSS_LWC_STRING_UNREF(center);
CSS_LWC_STRING_UNREF(col);
CSS_LWC_STRING_UNREF(div);
CSS_LWC_STRING_UNREF(embed);
CSS_LWC_STRING_UNREF(font);
CSS_LWC_STRING_UNREF(h1);
CSS_LWC_STRING_UNREF(h2);
CSS_LWC_STRING_UNREF(h3);
CSS_LWC_STRING_UNREF(h4);
CSS_LWC_STRING_UNREF(h5);
CSS_LWC_STRING_UNREF(h6);
CSS_LWC_STRING_UNREF(hr);
CSS_LWC_STRING_UNREF(iframe);
CSS_LWC_STRING_UNREF(img);
CSS_LWC_STRING_UNREF(input);
CSS_LWC_STRING_UNREF(justify);
CSS_LWC_STRING_UNREF(left);
CSS_LWC_STRING_UNREF(middle);
CSS_LWC_STRING_UNREF(object);
CSS_LWC_STRING_UNREF(p);
CSS_LWC_STRING_UNREF(password);
CSS_LWC_STRING_UNREF(right);
CSS_LWC_STRING_UNREF(table);
CSS_LWC_STRING_UNREF(tbody);
CSS_LWC_STRING_UNREF(td);
CSS_LWC_STRING_UNREF(text);
CSS_LWC_STRING_UNREF(textarea);
CSS_LWC_STRING_UNREF(texttop);
CSS_LWC_STRING_UNREF(tfoot);
CSS_LWC_STRING_UNREF(th);
CSS_LWC_STRING_UNREF(thead);
CSS_LWC_STRING_UNREF(top);
CSS_LWC_STRING_UNREF(tr);
#undef CSS_LWC_STRING_UNREF
#define CSS_DOM_STRING_UNREF(NAME) \
do { \
if (nscss_dom_string_##NAME != NULL) { \
dom_string_unref(nscss_dom_string_##NAME); \
nscss_dom_string_##NAME = NULL; \
} \
} while (0)
CSS_DOM_STRING_UNREF(align);
CSS_DOM_STRING_UNREF(background);
CSS_DOM_STRING_UNREF(bgcolor);
CSS_DOM_STRING_UNREF(border);
CSS_DOM_STRING_UNREF(bordercolor);
CSS_DOM_STRING_UNREF(cellpadding);
CSS_DOM_STRING_UNREF(cellspacing);
CSS_DOM_STRING_UNREF(color);
CSS_DOM_STRING_UNREF(cols);
CSS_DOM_STRING_UNREF(height);
CSS_DOM_STRING_UNREF(href);
CSS_DOM_STRING_UNREF(hspace);
CSS_DOM_STRING_UNREF(link);
CSS_DOM_STRING_UNREF(rows);
CSS_DOM_STRING_UNREF(size);
CSS_DOM_STRING_UNREF(text);
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
if (css_charset != NULL) {
lwc_string_unref(css_charset);
css_charset = NULL;
@ -949,7 +799,6 @@ nserror nscss_init(void)
{
lwc_error lerror;
nserror error;
dom_exception exc;
lerror = lwc_intern_string("charset", SLEN("charset"), &css_charset);
if (lerror != lwc_error_ok) {
@ -957,101 +806,6 @@ nserror nscss_init(void)
goto error;
}
#define CSS_LWC_STRING_INTERN(NAME) \
do { \
lerror = lwc_intern_string( \
(const char *)#NAME, \
sizeof(#NAME) - 1, \
&nscss_lwc_string_##NAME ); \
if ((lerror != lwc_error_ok) || \
(nscss_lwc_string_##NAME == NULL)) { \
error = NSERROR_NOMEM; \
goto error; \
} \
} while(0)
CSS_LWC_STRING_INTERN(a);
CSS_LWC_STRING_INTERN(abscenter);
CSS_LWC_STRING_INTERN(absmiddle);
CSS_LWC_STRING_INTERN(align);
CSS_LWC_STRING_INTERN(applet);
CSS_LWC_STRING_INTERN(baseline);
CSS_LWC_STRING_INTERN(body);
CSS_LWC_STRING_INTERN(bottom);
CSS_LWC_STRING_INTERN(caption);
CSS_LWC_STRING_INTERN(center);
CSS_LWC_STRING_INTERN(col);
CSS_LWC_STRING_INTERN(div);
CSS_LWC_STRING_INTERN(embed);
CSS_LWC_STRING_INTERN(font);
CSS_LWC_STRING_INTERN(h1);
CSS_LWC_STRING_INTERN(h2);
CSS_LWC_STRING_INTERN(h3);
CSS_LWC_STRING_INTERN(h4);
CSS_LWC_STRING_INTERN(h5);
CSS_LWC_STRING_INTERN(h6);
CSS_LWC_STRING_INTERN(hr);
CSS_LWC_STRING_INTERN(iframe);
CSS_LWC_STRING_INTERN(img);
CSS_LWC_STRING_INTERN(input);
CSS_LWC_STRING_INTERN(justify);
CSS_LWC_STRING_INTERN(left);
CSS_LWC_STRING_INTERN(middle);
CSS_LWC_STRING_INTERN(object);
CSS_LWC_STRING_INTERN(p);
CSS_LWC_STRING_INTERN(password);
CSS_LWC_STRING_INTERN(right);
CSS_LWC_STRING_INTERN(table);
CSS_LWC_STRING_INTERN(tbody);
CSS_LWC_STRING_INTERN(td);
CSS_LWC_STRING_INTERN(text);
CSS_LWC_STRING_INTERN(textarea);
CSS_LWC_STRING_INTERN(texttop);
CSS_LWC_STRING_INTERN(tfoot);
CSS_LWC_STRING_INTERN(th);
CSS_LWC_STRING_INTERN(thead);
CSS_LWC_STRING_INTERN(top);
CSS_LWC_STRING_INTERN(tr);
#undef CSS_LWC_STRING_INTERN
#define CSS_DOM_STRING_INTERN(NAME) \
do { \
exc = dom_string_create_interned( \
(const uint8_t *)#NAME, \
sizeof(#NAME) - 1, \
&nscss_dom_string_##NAME ); \
if ((exc != DOM_NO_ERR) || \
(nscss_dom_string_##NAME == NULL)) { \
error = NSERROR_NOMEM; \
goto error; \
} \
} while(0)
CSS_DOM_STRING_INTERN(align);
CSS_DOM_STRING_INTERN(background);
CSS_DOM_STRING_INTERN(bgcolor);
CSS_DOM_STRING_INTERN(border);
CSS_DOM_STRING_INTERN(bordercolor);
CSS_DOM_STRING_INTERN(cellpadding);
CSS_DOM_STRING_INTERN(cellspacing);
CSS_DOM_STRING_INTERN(color);
CSS_DOM_STRING_INTERN(cols);
CSS_DOM_STRING_INTERN(height);
CSS_DOM_STRING_INTERN(href);
CSS_DOM_STRING_INTERN(hspace);
CSS_DOM_STRING_INTERN(link);
CSS_DOM_STRING_INTERN(rows);
CSS_DOM_STRING_INTERN(size);
CSS_DOM_STRING_INTERN(text);
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
error = content_factory_register_handler("text/css",
&css_content_handler);
if (error != NSERROR_OK)

View File

@ -24,71 +24,4 @@
css_error nscss_resolve_url(void *pw, const char *base,
lwc_string *rel, lwc_string **abs);
/* lwc_string strings */
extern lwc_string *nscss_lwc_string_a;
extern lwc_string *nscss_lwc_string_abscenter;
extern lwc_string *nscss_lwc_string_absmiddle;
extern lwc_string *nscss_lwc_string_align;
extern lwc_string *nscss_lwc_string_applet;
extern lwc_string *nscss_lwc_string_baseline;
extern lwc_string *nscss_lwc_string_body;
extern lwc_string *nscss_lwc_string_bottom;
extern lwc_string *nscss_lwc_string_caption;
extern lwc_string *nscss_lwc_string_center;
extern lwc_string *nscss_lwc_string_col;
extern lwc_string *nscss_lwc_string_div;
extern lwc_string *nscss_lwc_string_embed;
extern lwc_string *nscss_lwc_string_font;
extern lwc_string *nscss_lwc_string_h1;
extern lwc_string *nscss_lwc_string_h2;
extern lwc_string *nscss_lwc_string_h3;
extern lwc_string *nscss_lwc_string_h4;
extern lwc_string *nscss_lwc_string_h5;
extern lwc_string *nscss_lwc_string_h6;
extern lwc_string *nscss_lwc_string_hr;
extern lwc_string *nscss_lwc_string_iframe;
extern lwc_string *nscss_lwc_string_img;
extern lwc_string *nscss_lwc_string_input;
extern lwc_string *nscss_lwc_string_justify;
extern lwc_string *nscss_lwc_string_left;
extern lwc_string *nscss_lwc_string_middle;
extern lwc_string *nscss_lwc_string_object;
extern lwc_string *nscss_lwc_string_p;
extern lwc_string *nscss_lwc_string_password;
extern lwc_string *nscss_lwc_string_right;
extern lwc_string *nscss_lwc_string_table;
extern lwc_string *nscss_lwc_string_tbody;
extern lwc_string *nscss_lwc_string_td;
extern lwc_string *nscss_lwc_string_text;
extern lwc_string *nscss_lwc_string_textarea;
extern lwc_string *nscss_lwc_string_texttop;
extern lwc_string *nscss_lwc_string_tfoot;
extern lwc_string *nscss_lwc_string_th;
extern lwc_string *nscss_lwc_string_thead;
extern lwc_string *nscss_lwc_string_top;
extern lwc_string *nscss_lwc_string_tr;
/* dom_string strings */
extern struct dom_string *nscss_dom_string_align;
extern struct dom_string *nscss_dom_string_background;
extern struct dom_string *nscss_dom_string_bgcolor;
extern struct dom_string *nscss_dom_string_border;
extern struct dom_string *nscss_dom_string_bordercolor;
extern struct dom_string *nscss_dom_string_cellpadding;
extern struct dom_string *nscss_dom_string_cellspacing;
extern struct dom_string *nscss_dom_string_color;
extern struct dom_string *nscss_dom_string_cols;
extern struct dom_string *nscss_dom_string_height;
extern struct dom_string *nscss_dom_string_href;
extern struct dom_string *nscss_dom_string_hspace;
extern struct dom_string *nscss_dom_string_link;
extern struct dom_string *nscss_dom_string_rows;
extern struct dom_string *nscss_dom_string_size;
extern struct dom_string *nscss_dom_string_text;
extern struct dom_string *nscss_dom_string_type;
extern struct dom_string *nscss_dom_string_valign;
extern struct dom_string *nscss_dom_string_vlink;
extern struct dom_string *nscss_dom_string_vspace;
extern struct dom_string *nscss_dom_string_width;
#endif

View File

@ -28,6 +28,7 @@
#include "css/utils.h"
#include "desktop/gui.h"
#include "desktop/options.h"
#include "utils/corestrings.h"
#include "utils/log.h"
#include "utils/url.h"
#include "utils/utils.h"
@ -1515,9 +1516,10 @@ css_error node_is_link(void *pw, void *n, bool *match)
return CSS_NOMEM;
}
if (dom_string_caseless_lwc_isequal(node_name, nscss_lwc_string_a)) {
if (dom_string_caseless_lwc_isequal(node_name, corestring_lwc_a)) {
bool has_href;
exc = dom_element_has_attribute(node, nscss_dom_string_href, &has_href);
exc = dom_element_has_attribute(node, corestring_dom_href,
&has_href);
if ((exc == DOM_NO_ERR) && (has_href)) {
*match = true;
} else {
@ -1751,31 +1753,31 @@ node_presentational_hint_vertical_align(nscss_select_ctx *ctx,
if (err != DOM_NO_ERR)
return CSS_PROPERTY_NOT_SET;
if (dom_string_caseless_lwc_isequal(name, nscss_lwc_string_col) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_thead) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_tbody) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_tfoot) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_tr) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_td) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_th)) {
if (dom_string_caseless_lwc_isequal(name, corestring_lwc_col) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_thead) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_tbody) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_tfoot) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_tr) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_th)) {
err = dom_element_get_attribute(node,
nscss_dom_string_valign, &valign);
corestring_dom_valign, &valign);
if (err != DOM_NO_ERR || valign == NULL) {
dom_string_unref(name);
return CSS_PROPERTY_NOT_SET;
}
if (dom_string_caseless_lwc_isequal(valign,
nscss_lwc_string_top)) {
corestring_lwc_top)) {
hint->status = CSS_VERTICAL_ALIGN_TOP;
} else if (dom_string_caseless_lwc_isequal(valign,
nscss_lwc_string_middle)) {
corestring_lwc_middle)) {
hint->status = CSS_VERTICAL_ALIGN_MIDDLE;
} else if (dom_string_caseless_lwc_isequal(valign,
nscss_lwc_string_bottom)) {
corestring_lwc_bottom)) {
hint->status = CSS_VERTICAL_ALIGN_BOTTOM;
} else if (dom_string_caseless_lwc_isequal(valign,
nscss_lwc_string_baseline)) {
corestring_lwc_baseline)) {
hint->status = CSS_VERTICAL_ALIGN_BASELINE;
} else {
dom_string_unref(valign);
@ -1788,38 +1790,38 @@ node_presentational_hint_vertical_align(nscss_select_ctx *ctx,
return CSS_OK;
} else if (dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_applet) ||
corestring_lwc_applet) ||
dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_embed) ||
corestring_lwc_embed) ||
dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_iframe) ||
corestring_lwc_iframe) ||
dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_img) ||
corestring_lwc_img) ||
dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_object)) {
corestring_lwc_object)) {
/** \todo input[type=image][align=*] - $11.3.3 */
err = dom_element_get_attribute(node,
nscss_dom_string_align, &valign);
corestring_dom_align, &valign);
if (err != DOM_NO_ERR || valign == NULL) {
dom_string_unref(name);
return CSS_PROPERTY_NOT_SET;
}
if (dom_string_caseless_lwc_isequal(valign,
nscss_lwc_string_top)) {
corestring_lwc_top)) {
hint->status = CSS_VERTICAL_ALIGN_TOP;
} else if (dom_string_caseless_lwc_isequal(valign,
nscss_lwc_string_bottom) ||
corestring_lwc_bottom) ||
dom_string_caseless_lwc_isequal(valign,
nscss_lwc_string_baseline)) {
corestring_lwc_baseline)) {
hint->status = CSS_VERTICAL_ALIGN_BASELINE;
} else if (dom_string_caseless_lwc_isequal(valign,
nscss_lwc_string_texttop)) {
corestring_lwc_texttop)) {
hint->status = CSS_VERTICAL_ALIGN_TEXT_TOP;
} else if (dom_string_caseless_lwc_isequal(valign,
nscss_lwc_string_absmiddle) ||
corestring_lwc_absmiddle) ||
dom_string_caseless_lwc_isequal(valign,
nscss_lwc_string_abscenter)) {
corestring_lwc_abscenter)) {
hint->status = CSS_VERTICAL_ALIGN_MIDDLE;
} else {
dom_string_unref(valign);
@ -1850,31 +1852,31 @@ node_presentational_hint_text_align(nscss_select_ctx *ctx,
if (err != DOM_NO_ERR)
return CSS_PROPERTY_NOT_SET;
if (dom_string_caseless_lwc_isequal(name, nscss_lwc_string_p) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_h1) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_h2) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_h3) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_h4) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_h5) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_h6)) {
if (dom_string_caseless_lwc_isequal(name, corestring_lwc_p) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_h1) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_h2) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_h3) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_h4) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_h5) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_h6)) {
err = dom_element_get_attribute(node,
nscss_dom_string_align, &align);
corestring_dom_align, &align);
if (err != DOM_NO_ERR || align == NULL) {
dom_string_unref(name);
return CSS_PROPERTY_NOT_SET;
}
if (dom_string_caseless_lwc_isequal(align,
nscss_lwc_string_left)) {
corestring_lwc_left)) {
hint->status = CSS_TEXT_ALIGN_LEFT;
} else if (dom_string_caseless_lwc_isequal(align,
nscss_lwc_string_center)) {
corestring_lwc_center)) {
hint->status = CSS_TEXT_ALIGN_CENTER;
} else if (dom_string_caseless_lwc_isequal(align,
nscss_lwc_string_right)) {
corestring_lwc_right)) {
hint->status = CSS_TEXT_ALIGN_RIGHT;
} else if (dom_string_caseless_lwc_isequal(align,
nscss_lwc_string_justify)) {
corestring_lwc_justify)) {
hint->status = CSS_TEXT_ALIGN_JUSTIFY;
} else {
dom_string_unref(align);
@ -1887,32 +1889,32 @@ node_presentational_hint_text_align(nscss_select_ctx *ctx,
return CSS_OK;
} else if (dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_center)) {
corestring_lwc_center)) {
hint->status = CSS_TEXT_ALIGN_LIBCSS_CENTER;
dom_string_unref(name);
return CSS_OK;
} else if (dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_caption)) {
corestring_lwc_caption)) {
err = dom_element_get_attribute(node,
nscss_dom_string_align, &align);
corestring_dom_align, &align);
if (err != DOM_NO_ERR) {
dom_string_unref(name);
return CSS_PROPERTY_NOT_SET;
}
if (align == NULL || dom_string_caseless_lwc_isequal(align,
nscss_lwc_string_center)) {
corestring_lwc_center)) {
hint->status = CSS_TEXT_ALIGN_LIBCSS_CENTER;
} else if (dom_string_caseless_lwc_isequal(align,
nscss_lwc_string_left)) {
corestring_lwc_left)) {
hint->status = CSS_TEXT_ALIGN_LIBCSS_LEFT;
} else if (dom_string_caseless_lwc_isequal(align,
nscss_lwc_string_right)) {
corestring_lwc_right)) {
hint->status = CSS_TEXT_ALIGN_LIBCSS_RIGHT;
} else if (dom_string_caseless_lwc_isequal(align,
nscss_lwc_string_justify)) {
corestring_lwc_justify)) {
hint->status = CSS_TEXT_ALIGN_JUSTIFY;
} else {
dom_string_unref(align);
@ -1926,37 +1928,37 @@ node_presentational_hint_text_align(nscss_select_ctx *ctx,
return CSS_OK;
} else if (dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_div) ||
corestring_lwc_div) ||
dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_thead) ||
corestring_lwc_thead) ||
dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_tbody) ||
corestring_lwc_tbody) ||
dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_tfoot) ||
corestring_lwc_tfoot) ||
dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_tr) ||
corestring_lwc_tr) ||
dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_td) ||
corestring_lwc_td) ||
dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_th)) {
corestring_lwc_th)) {
err = dom_element_get_attribute(node,
nscss_dom_string_align, &align);
corestring_dom_align, &align);
if (err != DOM_NO_ERR || align == NULL) {
dom_string_unref(name);
return CSS_PROPERTY_NOT_SET;
}
if (dom_string_caseless_lwc_isequal(align,
nscss_lwc_string_center)) {
corestring_lwc_center)) {
hint->status = CSS_TEXT_ALIGN_LIBCSS_CENTER;
} else if (dom_string_caseless_lwc_isequal(align,
nscss_lwc_string_left)) {
corestring_lwc_left)) {
hint->status = CSS_TEXT_ALIGN_LIBCSS_LEFT;
} else if (dom_string_caseless_lwc_isequal(align,
nscss_lwc_string_right)) {
corestring_lwc_right)) {
hint->status = CSS_TEXT_ALIGN_LIBCSS_RIGHT;
} else if (dom_string_caseless_lwc_isequal(align,
nscss_lwc_string_justify)) {
corestring_lwc_justify)) {
hint->status = CSS_TEXT_ALIGN_JUSTIFY;
} else {
dom_string_unref(align);
@ -1969,7 +1971,7 @@ node_presentational_hint_text_align(nscss_select_ctx *ctx,
return CSS_OK;
} else if (dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_table)) {
corestring_lwc_table)) {
/* Tables usually reset alignment */
hint->status = CSS_TEXT_ALIGN_INHERIT_IF_NON_MAGIC;
@ -1997,12 +1999,12 @@ node_presentational_hint_padding_trbl(nscss_select_ctx *ctx,
if (exc != DOM_NO_ERR)
return CSS_BADPARM;
if (dom_string_caseless_lwc_isequal(name, nscss_lwc_string_td) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_th)) {
if (dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_th)) {
css_qname qs;
dom_node *tablenode = NULL;
qs.ns = NULL;
qs.name = lwc_string_ref(nscss_lwc_string_table);
qs.name = lwc_string_ref(corestring_lwc_table);
if (named_ancestor_node(ctx, node, &qs,
(void *)&tablenode) != CSS_OK) {
/* Didn't find, or had error */
@ -2014,7 +2016,7 @@ node_presentational_hint_padding_trbl(nscss_select_ctx *ctx,
if (tablenode != NULL) {
exc = dom_element_get_attribute(tablenode,
nscss_dom_string_cellpadding,
corestring_dom_cellpadding,
&cellpadding);
if (exc != DOM_NO_ERR) {
dom_string_unref(name);
@ -2056,11 +2058,11 @@ node_presentational_hint_margin_rl(nscss_select_ctx *ctx,
if (exc != DOM_NO_ERR)
return CSS_BADPARM;
if (dom_string_caseless_lwc_isequal(n, nscss_lwc_string_img) ||
dom_string_caseless_lwc_isequal(n, nscss_lwc_string_applet)) {
if (dom_string_caseless_lwc_isequal(n, corestring_lwc_img) ||
dom_string_caseless_lwc_isequal(n, corestring_lwc_applet)) {
dom_string_unref(n);
exc = dom_element_get_attribute(node,
nscss_dom_string_hspace, &n);
corestring_dom_hspace, &n);
if (exc != DOM_NO_ERR) {
return CSS_BADPARM;
}
@ -2078,11 +2080,11 @@ node_presentational_hint_margin_rl(nscss_select_ctx *ctx,
}
dom_string_unref(n);
return CSS_OK;
} else if (dom_string_caseless_lwc_isequal(n, nscss_lwc_string_table) ||
dom_string_caseless_lwc_isequal(n, nscss_lwc_string_align)) {
} else if (dom_string_caseless_lwc_isequal(n, corestring_lwc_table) ||
dom_string_caseless_lwc_isequal(n, corestring_lwc_align)) {
dom_string_unref(n);
exc = dom_element_get_attribute(node,
nscss_dom_string_align, &n);
corestring_dom_align, &n);
if (exc != DOM_NO_ERR) {
return CSS_BADPARM;
}
@ -2091,13 +2093,13 @@ node_presentational_hint_margin_rl(nscss_select_ctx *ctx,
return CSS_PROPERTY_NOT_SET;
if (dom_string_caseless_lwc_isequal(n,
nscss_lwc_string_center) ||
corestring_lwc_center) ||
dom_string_caseless_lwc_isequal(n,
nscss_lwc_string_abscenter) ||
corestring_lwc_abscenter) ||
dom_string_caseless_lwc_isequal(n,
nscss_lwc_string_middle) ||
corestring_lwc_middle) ||
dom_string_caseless_lwc_isequal(n,
nscss_lwc_string_absmiddle)) {
corestring_lwc_absmiddle)) {
hint->status = CSS_MARGIN_AUTO;
} else {
dom_string_unref(n);
@ -2106,10 +2108,10 @@ node_presentational_hint_margin_rl(nscss_select_ctx *ctx,
dom_string_unref(n);
return CSS_OK;
} else if (dom_string_caseless_lwc_isequal(n, nscss_lwc_string_hr)) {
} else if (dom_string_caseless_lwc_isequal(n, corestring_lwc_hr)) {
dom_string_unref(n);
exc = dom_element_get_attribute(node,
nscss_dom_string_align, &n);
corestring_dom_align, &n);
if (exc != DOM_NO_ERR)
return CSS_BADPARM;
@ -2117,7 +2119,7 @@ node_presentational_hint_margin_rl(nscss_select_ctx *ctx,
return CSS_PROPERTY_NOT_SET;
if (dom_string_caseless_lwc_isequal(n,
nscss_lwc_string_left)) {
corestring_lwc_left)) {
if (property == CSS_PROP_MARGIN_LEFT) {
hint->data.length.value = 0;
hint->data.length.unit = CSS_UNIT_PX;
@ -2126,10 +2128,10 @@ node_presentational_hint_margin_rl(nscss_select_ctx *ctx,
hint->status = CSS_MARGIN_AUTO;
}
} else if (dom_string_caseless_lwc_isequal(n,
nscss_lwc_string_center)) {
corestring_lwc_center)) {
hint->status = CSS_MARGIN_AUTO;
} else if (dom_string_caseless_lwc_isequal(n,
nscss_lwc_string_right)) {
corestring_lwc_right)) {
if (property == CSS_PROP_MARGIN_RIGHT) {
hint->data.length.value = 0;
hint->data.length.unit = CSS_UNIT_PX;
@ -2163,9 +2165,9 @@ node_presentational_hint_margin_tb(nscss_select_ctx *ctx,
if (exc != DOM_NO_ERR)
return CSS_BADPARM;
if (dom_string_caseless_lwc_isequal(name, nscss_lwc_string_img) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_applet)) {
exc = dom_element_get_attribute(node, nscss_dom_string_vspace,
if (dom_string_caseless_lwc_isequal(name, corestring_lwc_img) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_applet)) {
exc = dom_element_get_attribute(node, corestring_dom_vspace,
&vspace);
if (exc != DOM_NO_ERR) {
dom_string_unref(name);
@ -2206,12 +2208,12 @@ node_presentational_hint_border_trbl_width(nscss_select_ctx *ctx,
if (exc != DOM_NO_ERR)
return CSS_BADPARM;
if (dom_string_caseless_lwc_isequal(name, nscss_lwc_string_td) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_th)) {
if (dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_th)) {
css_qname qs;
dom_node *tablenode = NULL;
qs.ns = NULL;
qs.name = lwc_string_ref(nscss_lwc_string_table);
qs.name = lwc_string_ref(corestring_lwc_table);
if (named_ancestor_node(ctx, node, &qs,
(void *)&tablenode) != CSS_OK) {
/* Didn't find, or had error */
@ -2223,7 +2225,7 @@ node_presentational_hint_border_trbl_width(nscss_select_ctx *ctx,
lwc_string_unref(qs.name);
if (tablenode != NULL) {
exc = dom_element_get_attribute(tablenode,
nscss_dom_string_border, &width);
corestring_dom_border, &width);
if (exc != DOM_NO_ERR) {
dom_string_unref(name);
return CSS_BADPARM;
@ -2234,8 +2236,8 @@ node_presentational_hint_border_trbl_width(nscss_select_ctx *ctx,
*/
is_table_cell = true;
} else if (dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_table)) {
exc = dom_element_get_attribute(node, nscss_dom_string_border,
corestring_lwc_table)) {
exc = dom_element_get_attribute(node, corestring_dom_border,
&width);
if (exc != DOM_NO_ERR) {
dom_string_unref(name);
@ -2280,12 +2282,12 @@ node_presentational_hint_border_trbl_style(nscss_select_ctx *ctx,
if (exc != DOM_NO_ERR)
return CSS_BADPARM;
if (dom_string_caseless_lwc_isequal(name, nscss_lwc_string_td) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_th)) {
if (dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_th)) {
css_qname qs;
dom_node *tablenode = NULL;
qs.ns = NULL;
qs.name = lwc_string_ref(nscss_lwc_string_table);
qs.name = lwc_string_ref(corestring_lwc_table);
if (named_ancestor_node(ctx, node, &qs,
(void *)&tablenode) != CSS_OK) {
@ -2301,7 +2303,7 @@ node_presentational_hint_border_trbl_style(nscss_select_ctx *ctx,
bool has_border = false;
exc = dom_element_has_attribute(tablenode,
nscss_dom_string_border,
corestring_dom_border,
&has_border);
if (exc != DOM_NO_ERR) {
dom_string_unref(name);
@ -2318,11 +2320,11 @@ node_presentational_hint_border_trbl_style(nscss_select_ctx *ctx,
* return a reffed node to the CSS
*/
} else if (dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_table)) {
corestring_lwc_table)) {
bool has_border = false;
exc = dom_element_has_attribute(node,
nscss_dom_string_border,
corestring_dom_border,
&has_border);
if (exc != DOM_NO_ERR) {
dom_string_unref(name);
@ -2354,12 +2356,12 @@ node_presentational_hint_border_trbl_color(nscss_select_ctx *ctx,
if (err != DOM_NO_ERR)
return CSS_PROPERTY_NOT_SET;
if (dom_string_caseless_lwc_isequal(name, nscss_lwc_string_td) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_th)) {
if (dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_th)) {
css_qname qs;
dom_node *tablenode = NULL;
qs.ns = NULL;
qs.name = lwc_string_ref(nscss_lwc_string_table);
qs.name = lwc_string_ref(corestring_lwc_table);
if (named_ancestor_node(ctx, node, &qs,
(void *)&tablenode) != CSS_OK) {
@ -2373,7 +2375,7 @@ node_presentational_hint_border_trbl_color(nscss_select_ctx *ctx,
if (tablenode != NULL) {
err = dom_element_get_attribute(node,
nscss_dom_string_bordercolor,
corestring_dom_bordercolor,
&bordercolor);
}
/* No need to unref tablenode, named_ancestor_node does not
@ -2381,9 +2383,9 @@ node_presentational_hint_border_trbl_color(nscss_select_ctx *ctx,
*/
} else if (dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_table)) {
corestring_lwc_table)) {
err = dom_element_get_attribute(node,
nscss_dom_string_bordercolor,
corestring_dom_bordercolor,
&bordercolor);
}
@ -2419,7 +2421,7 @@ node_presentational_hint_border_spacing(nscss_select_ctx *ctx,
}
if (!dom_string_caseless_lwc_isequal(node_name,
nscss_lwc_string_table)) {
corestring_lwc_table)) {
dom_string_unref(node_name);
return CSS_PROPERTY_NOT_SET;
}
@ -2427,7 +2429,7 @@ node_presentational_hint_border_spacing(nscss_select_ctx *ctx,
dom_string_unref(node_name);
err = dom_element_get_attribute(node,
nscss_dom_string_cellspacing, &cellspacing);
corestring_dom_cellspacing, &cellspacing);
if ((err != DOM_NO_ERR) || (cellspacing == NULL)) {
return CSS_PROPERTY_NOT_SET;
}
@ -2464,26 +2466,26 @@ node_presentational_hint_width(nscss_select_ctx *ctx,
if (err != DOM_NO_ERR)
return CSS_PROPERTY_NOT_SET;
if (dom_string_caseless_lwc_isequal(name, nscss_lwc_string_hr) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_iframe) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_img) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_object) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_table) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_td) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_th) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_applet)) {
if (dom_string_caseless_lwc_isequal(name, corestring_lwc_hr) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_iframe) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_img) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_object) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_table) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_th) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_applet)) {
err = dom_element_get_attribute(node,
nscss_dom_string_width, &width);
corestring_dom_width, &width);
} else if (dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_textarea)) {
corestring_lwc_textarea)) {
textarea = true;
err = dom_element_get_attribute(node,
nscss_dom_string_cols, &width);
corestring_dom_cols, &width);
} else if (dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_input)) {
corestring_lwc_input)) {
input = true;
err = dom_element_get_attribute(node,
nscss_dom_string_size, &width);
corestring_dom_size, &width);
}
dom_string_unref(name);
@ -2505,15 +2507,15 @@ node_presentational_hint_width(nscss_select_ctx *ctx,
if (input) {
err = dom_element_get_attribute(node,
nscss_dom_string_type, &width);
corestring_dom_type, &width);
if ((err != DOM_NO_ERR) || (width == NULL)) {
return CSS_PROPERTY_NOT_SET;
}
if (dom_string_lwc_isequal(width,
nscss_lwc_string_text) ||
corestring_lwc_text) ||
dom_string_lwc_isequal(width,
nscss_lwc_string_password)) {
corestring_lwc_password)) {
hint->data.length.unit = CSS_UNIT_EX;
}
@ -2544,20 +2546,20 @@ node_presentational_hint_height(nscss_select_ctx *ctx,
if (err != DOM_NO_ERR)
return CSS_PROPERTY_NOT_SET;
if (dom_string_caseless_lwc_isequal(name, nscss_lwc_string_iframe) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_td) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_th) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_tr) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_img) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_object) ||
dom_string_caseless_lwc_isequal(name, nscss_lwc_string_applet)) {
if (dom_string_caseless_lwc_isequal(name, corestring_lwc_iframe) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_td) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_th) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_tr) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_img) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_object) ||
dom_string_caseless_lwc_isequal(name, corestring_lwc_applet)) {
err = dom_element_get_attribute(node,
nscss_dom_string_height, &height);
corestring_dom_height, &height);
} else if (dom_string_caseless_lwc_isequal(name,
nscss_lwc_string_textarea)) {
corestring_lwc_textarea)) {
textarea = true;
err = dom_element_get_attribute(node,
nscss_dom_string_rows, &height);
corestring_dom_rows, &height);
}
dom_string_unref(name);
@ -2599,14 +2601,14 @@ node_presentational_hint_font_size(nscss_select_ctx *ctx,
}
if (!dom_string_caseless_lwc_isequal(node_name,
nscss_lwc_string_font)) {
corestring_lwc_font)) {
dom_string_unref(node_name);
return CSS_PROPERTY_NOT_SET;
}
dom_string_unref(node_name);
err = dom_element_get_attribute(node, nscss_dom_string_align, &size);
err = dom_element_get_attribute(node, corestring_dom_align, &size);
if ((err != DOM_NO_ERR) || (size == NULL)) {
return CSS_PROPERTY_NOT_SET;
}
@ -2639,31 +2641,31 @@ node_presentational_hint_float(nscss_select_ctx *ctx,
/** \todo input[type=image][align=*] - $11.3.3 */
if (!dom_string_caseless_lwc_isequal(node_name,
nscss_lwc_string_applet) &&
corestring_lwc_applet) &&
!dom_string_caseless_lwc_isequal(node_name,
nscss_lwc_string_embed) &&
corestring_lwc_embed) &&
!dom_string_caseless_lwc_isequal(node_name,
nscss_lwc_string_iframe) &&
corestring_lwc_iframe) &&
!dom_string_caseless_lwc_isequal(node_name,
nscss_lwc_string_img) &&
corestring_lwc_img) &&
!dom_string_caseless_lwc_isequal(node_name,
nscss_lwc_string_object)) {
corestring_lwc_object)) {
dom_string_unref(node_name);
return CSS_PROPERTY_NOT_SET;
}
dom_string_unref(node_name);
err = dom_element_get_attribute(node, nscss_dom_string_align, &align);
err = dom_element_get_attribute(node, corestring_dom_align, &align);
if ((err != DOM_NO_ERR) || (align == NULL)) {
return CSS_PROPERTY_NOT_SET;
}
if (dom_string_lwc_isequal(align, nscss_lwc_string_left)) {
if (dom_string_lwc_isequal(align, corestring_lwc_left)) {
hint->status = CSS_FLOAT_LEFT;
dom_string_unref(align);
return CSS_OK;
} else if (dom_string_lwc_isequal(align, nscss_lwc_string_right)) {
} else if (dom_string_lwc_isequal(align, corestring_lwc_right)) {
hint->status = CSS_FLOAT_RIGHT;
dom_string_unref(align);
return CSS_OK;
@ -2689,14 +2691,14 @@ node_presentational_hint_color(nscss_select_ctx *ctx,
return CSS_NOMEM;
}
if (dom_string_caseless_lwc_isequal(node_name, nscss_lwc_string_a)) {
if (dom_string_caseless_lwc_isequal(node_name, corestring_lwc_a)) {
/* find body node */
css_qname qs;
dom_node *bodynode = NULL;
bool is_visited;
qs.ns = NULL;
qs.name = lwc_string_ref(nscss_lwc_string_body);
qs.name = lwc_string_ref(corestring_lwc_body);
if (named_ancestor_node(ctx, node, &qs,
(void *)&bodynode) != CSS_OK) {
/* Didn't find, or had error */
@ -2719,30 +2721,30 @@ node_presentational_hint_color(nscss_select_ctx *ctx,
if (is_visited) {
err = dom_element_get_attribute(node,
nscss_dom_string_vlink, &color);
corestring_dom_vlink, &color);
if ((err != DOM_NO_ERR) || (color == NULL)) {
dom_string_unref(node_name);
return CSS_PROPERTY_NOT_SET;
}
} else {
err = dom_element_get_attribute(node,
nscss_dom_string_link, &color);
corestring_dom_link, &color);
if ((err != DOM_NO_ERR) || (color == NULL)) {
dom_string_unref(node_name);
return CSS_PROPERTY_NOT_SET;
}
}
} else if (dom_string_caseless_lwc_isequal(node_name,
nscss_lwc_string_body)) {
corestring_lwc_body)) {
err = dom_element_get_attribute(node,
nscss_dom_string_text, &color);
corestring_dom_text, &color);
if ((err != DOM_NO_ERR) || (color == NULL)) {
dom_string_unref(node_name);
return CSS_PROPERTY_NOT_SET;
}
} else {
err = dom_element_get_attribute(node,
nscss_dom_string_color, &color);
corestring_dom_color, &color);
if ((err != DOM_NO_ERR) || (color == NULL)) {
dom_string_unref(node_name);
return CSS_PROPERTY_NOT_SET;
@ -2777,19 +2779,19 @@ node_presentational_hint_caption_side(nscss_select_ctx *ctx,
}
if (!dom_string_caseless_lwc_isequal(node_name,
nscss_lwc_string_caption)) {
corestring_lwc_caption)) {
dom_string_unref(node_name);
return CSS_PROPERTY_NOT_SET;
}
dom_string_unref(node_name);
err = dom_element_get_attribute(node, nscss_dom_string_align, &align);
err = dom_element_get_attribute(node, corestring_dom_align, &align);
if ((err != DOM_NO_ERR) || (align == NULL)) {
return CSS_PROPERTY_NOT_SET;
}
if (dom_string_caseless_lwc_isequal(align, nscss_lwc_string_bottom)) {
if (dom_string_caseless_lwc_isequal(align, corestring_lwc_bottom)) {
hint->status = CSS_CAPTION_SIDE_BOTTOM;
dom_string_unref(align);
return CSS_OK;
@ -2809,7 +2811,7 @@ node_presentational_hint_background_color(nscss_select_ctx *ctx,
dom_string *bgcolor;
err = dom_element_get_attribute(node,
nscss_dom_string_bgcolor, &bgcolor);
corestring_dom_bgcolor, &bgcolor);
if ((err != DOM_NO_ERR) || (bgcolor == NULL)) {
return CSS_PROPERTY_NOT_SET;
}
@ -2839,7 +2841,7 @@ node_presentational_hint_background_image(nscss_select_ctx *ctx,
lwc_error lerror;
err = dom_element_get_attribute(node,
nscss_dom_string_background, &atr_val);
corestring_dom_background, &atr_val);
if ((err != DOM_NO_ERR) || (atr_val == NULL)) {
return CSS_PROPERTY_NOT_SET;
}

View File

@ -47,6 +47,7 @@
#include "render/html.h"
#include "render/textplain.h"
#include "utils/corestrings.h"
#include "utils/log.h"
#include "utils/url.h"
#include "utils/utf8.h"
@ -169,6 +170,11 @@ nserror netsurf_init(int *pargc,
messages_load(messages);
/* corestrings init */
error = corestrings_init();
if (error != NSERROR_OK)
return error;
/* set up cache limits based on the memory cache size option */
hlcache_parameters.limit = nsoption_int(memory_cache_size);
@ -287,6 +293,7 @@ void netsurf_exit(void)
LOG(("Destroying System colours"));
gui_system_colour_finalize();
corestrings_fini();
LOG(("Remaining lwc strings:"));
lwc_iterate_strings(netsurf_lwc_iterator, NULL);

293
utils/corestrings.c Normal file
View File

@ -0,0 +1,293 @@
/*
* Copyright 2012 Michael Drake <tlsa@netsurf-browser.org>
*
* This file is part of NetSurf, http://www.netsurf-browser.org/
*
* NetSurf is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* NetSurf is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/** \file
* Useful interned string pointers (implementation).
*/
#include <dom/dom.h>
#include "utils/corestrings.h"
/* lwc_string strings */
lwc_string *corestring_lwc_a;
lwc_string *corestring_lwc_abscenter;
lwc_string *corestring_lwc_absmiddle;
lwc_string *corestring_lwc_align;
lwc_string *corestring_lwc_applet;
lwc_string *corestring_lwc_baseline;
lwc_string *corestring_lwc_body;
lwc_string *corestring_lwc_bottom;
lwc_string *corestring_lwc_caption;
lwc_string *corestring_lwc_center;
lwc_string *corestring_lwc_col;
lwc_string *corestring_lwc_div;
lwc_string *corestring_lwc_embed;
lwc_string *corestring_lwc_font;
lwc_string *corestring_lwc_h1;
lwc_string *corestring_lwc_h2;
lwc_string *corestring_lwc_h3;
lwc_string *corestring_lwc_h4;
lwc_string *corestring_lwc_h5;
lwc_string *corestring_lwc_h6;
lwc_string *corestring_lwc_hr;
lwc_string *corestring_lwc_iframe;
lwc_string *corestring_lwc_img;
lwc_string *corestring_lwc_input;
lwc_string *corestring_lwc_justify;
lwc_string *corestring_lwc_left;
lwc_string *corestring_lwc_middle;
lwc_string *corestring_lwc_object;
lwc_string *corestring_lwc_p;
lwc_string *corestring_lwc_password;
lwc_string *corestring_lwc_right;
lwc_string *corestring_lwc_table;
lwc_string *corestring_lwc_tbody;
lwc_string *corestring_lwc_td;
lwc_string *corestring_lwc_text;
lwc_string *corestring_lwc_textarea;
lwc_string *corestring_lwc_texttop;
lwc_string *corestring_lwc_tfoot;
lwc_string *corestring_lwc_th;
lwc_string *corestring_lwc_thead;
lwc_string *corestring_lwc_top;
lwc_string *corestring_lwc_tr;
/* dom_string strings */
dom_string *corestring_dom_align;
dom_string *corestring_dom_background;
dom_string *corestring_dom_bgcolor;
dom_string *corestring_dom_border;
dom_string *corestring_dom_bordercolor;
dom_string *corestring_dom_cellpadding;
dom_string *corestring_dom_cellspacing;
dom_string *corestring_dom_color;
dom_string *corestring_dom_cols;
dom_string *corestring_dom_height;
dom_string *corestring_dom_href;
dom_string *corestring_dom_hspace;
dom_string *corestring_dom_link;
dom_string *corestring_dom_rows;
dom_string *corestring_dom_size;
dom_string *corestring_dom_text;
dom_string *corestring_dom_type;
dom_string *corestring_dom_valign;
dom_string *corestring_dom_vlink;
dom_string *corestring_dom_vspace;
dom_string *corestring_dom_width;
/*
* Free the core strings
*/
void corestrings_fini(void)
{
#define CSS_LWC_STRING_UNREF(NAME) \
do { \
if (corestring_lwc_##NAME != NULL) { \
lwc_string_unref(corestring_lwc_##NAME); \
corestring_lwc_##NAME = NULL; \
} \
} while (0)
CSS_LWC_STRING_UNREF(a);
CSS_LWC_STRING_UNREF(abscenter);
CSS_LWC_STRING_UNREF(absmiddle);
CSS_LWC_STRING_UNREF(align);
CSS_LWC_STRING_UNREF(applet);
CSS_LWC_STRING_UNREF(baseline);
CSS_LWC_STRING_UNREF(body);
CSS_LWC_STRING_UNREF(bottom);
CSS_LWC_STRING_UNREF(caption);
CSS_LWC_STRING_UNREF(center);
CSS_LWC_STRING_UNREF(col);
CSS_LWC_STRING_UNREF(div);
CSS_LWC_STRING_UNREF(embed);
CSS_LWC_STRING_UNREF(font);
CSS_LWC_STRING_UNREF(h1);
CSS_LWC_STRING_UNREF(h2);
CSS_LWC_STRING_UNREF(h3);
CSS_LWC_STRING_UNREF(h4);
CSS_LWC_STRING_UNREF(h5);
CSS_LWC_STRING_UNREF(h6);
CSS_LWC_STRING_UNREF(hr);
CSS_LWC_STRING_UNREF(iframe);
CSS_LWC_STRING_UNREF(img);
CSS_LWC_STRING_UNREF(input);
CSS_LWC_STRING_UNREF(justify);
CSS_LWC_STRING_UNREF(left);
CSS_LWC_STRING_UNREF(middle);
CSS_LWC_STRING_UNREF(object);
CSS_LWC_STRING_UNREF(p);
CSS_LWC_STRING_UNREF(password);
CSS_LWC_STRING_UNREF(right);
CSS_LWC_STRING_UNREF(table);
CSS_LWC_STRING_UNREF(tbody);
CSS_LWC_STRING_UNREF(td);
CSS_LWC_STRING_UNREF(text);
CSS_LWC_STRING_UNREF(textarea);
CSS_LWC_STRING_UNREF(texttop);
CSS_LWC_STRING_UNREF(tfoot);
CSS_LWC_STRING_UNREF(th);
CSS_LWC_STRING_UNREF(thead);
CSS_LWC_STRING_UNREF(top);
CSS_LWC_STRING_UNREF(tr);
#undef CSS_LWC_STRING_UNREF
#define CSS_DOM_STRING_UNREF(NAME) \
do { \
if (corestring_dom_##NAME != NULL) { \
dom_string_unref(corestring_dom_##NAME); \
corestring_dom_##NAME = NULL; \
} \
} while (0)
CSS_DOM_STRING_UNREF(align);
CSS_DOM_STRING_UNREF(background);
CSS_DOM_STRING_UNREF(bgcolor);
CSS_DOM_STRING_UNREF(border);
CSS_DOM_STRING_UNREF(bordercolor);
CSS_DOM_STRING_UNREF(cellpadding);
CSS_DOM_STRING_UNREF(cellspacing);
CSS_DOM_STRING_UNREF(color);
CSS_DOM_STRING_UNREF(cols);
CSS_DOM_STRING_UNREF(height);
CSS_DOM_STRING_UNREF(href);
CSS_DOM_STRING_UNREF(hspace);
CSS_DOM_STRING_UNREF(link);
CSS_DOM_STRING_UNREF(rows);
CSS_DOM_STRING_UNREF(size);
CSS_DOM_STRING_UNREF(text);
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
}
/*
* Create the core strings
*/
nserror corestrings_init(void)
{
lwc_error lerror;
nserror error;
dom_exception exc;
#define CSS_LWC_STRING_INTERN(NAME) \
do { \
lerror = lwc_intern_string( \
(const char *)#NAME, \
sizeof(#NAME) - 1, \
&corestring_lwc_##NAME ); \
if ((lerror != lwc_error_ok) || \
(corestring_lwc_##NAME == NULL)) { \
error = NSERROR_NOMEM; \
goto error; \
} \
} while(0)
CSS_LWC_STRING_INTERN(a);
CSS_LWC_STRING_INTERN(abscenter);
CSS_LWC_STRING_INTERN(absmiddle);
CSS_LWC_STRING_INTERN(align);
CSS_LWC_STRING_INTERN(applet);
CSS_LWC_STRING_INTERN(baseline);
CSS_LWC_STRING_INTERN(body);
CSS_LWC_STRING_INTERN(bottom);
CSS_LWC_STRING_INTERN(caption);
CSS_LWC_STRING_INTERN(center);
CSS_LWC_STRING_INTERN(col);
CSS_LWC_STRING_INTERN(div);
CSS_LWC_STRING_INTERN(embed);
CSS_LWC_STRING_INTERN(font);
CSS_LWC_STRING_INTERN(h1);
CSS_LWC_STRING_INTERN(h2);
CSS_LWC_STRING_INTERN(h3);
CSS_LWC_STRING_INTERN(h4);
CSS_LWC_STRING_INTERN(h5);
CSS_LWC_STRING_INTERN(h6);
CSS_LWC_STRING_INTERN(hr);
CSS_LWC_STRING_INTERN(iframe);
CSS_LWC_STRING_INTERN(img);
CSS_LWC_STRING_INTERN(input);
CSS_LWC_STRING_INTERN(justify);
CSS_LWC_STRING_INTERN(left);
CSS_LWC_STRING_INTERN(middle);
CSS_LWC_STRING_INTERN(object);
CSS_LWC_STRING_INTERN(p);
CSS_LWC_STRING_INTERN(password);
CSS_LWC_STRING_INTERN(right);
CSS_LWC_STRING_INTERN(table);
CSS_LWC_STRING_INTERN(tbody);
CSS_LWC_STRING_INTERN(td);
CSS_LWC_STRING_INTERN(text);
CSS_LWC_STRING_INTERN(textarea);
CSS_LWC_STRING_INTERN(texttop);
CSS_LWC_STRING_INTERN(tfoot);
CSS_LWC_STRING_INTERN(th);
CSS_LWC_STRING_INTERN(thead);
CSS_LWC_STRING_INTERN(top);
CSS_LWC_STRING_INTERN(tr);
#undef CSS_LWC_STRING_INTERN
#define CSS_DOM_STRING_INTERN(NAME) \
do { \
exc = dom_string_create_interned( \
(const uint8_t *)#NAME, \
sizeof(#NAME) - 1, \
&corestring_dom_##NAME ); \
if ((exc != DOM_NO_ERR) || \
(corestring_dom_##NAME == NULL)) { \
error = NSERROR_NOMEM; \
goto error; \
} \
} while(0)
CSS_DOM_STRING_INTERN(align);
CSS_DOM_STRING_INTERN(background);
CSS_DOM_STRING_INTERN(bgcolor);
CSS_DOM_STRING_INTERN(border);
CSS_DOM_STRING_INTERN(bordercolor);
CSS_DOM_STRING_INTERN(cellpadding);
CSS_DOM_STRING_INTERN(cellspacing);
CSS_DOM_STRING_INTERN(color);
CSS_DOM_STRING_INTERN(cols);
CSS_DOM_STRING_INTERN(height);
CSS_DOM_STRING_INTERN(href);
CSS_DOM_STRING_INTERN(hspace);
CSS_DOM_STRING_INTERN(link);
CSS_DOM_STRING_INTERN(rows);
CSS_DOM_STRING_INTERN(size);
CSS_DOM_STRING_INTERN(text);
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
return NSERROR_OK;
error:
corestrings_fini();
return error;
}

101
utils/corestrings.h Normal file
View File

@ -0,0 +1,101 @@
/*
* Copyright 2012 Michael Drake <tlsa@netsurf-browser.org>
*
* This file is part of NetSurf, http://www.netsurf-browser.org/
*
* NetSurf is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* NetSurf is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/** \file
* Useful interned string pointers (interface).
*/
#ifndef NETSURF_UTILS_CORESTRINGS_H_
#define NETSURF_UTILS_CORESTRINGS_H_
#include <libwapcaplet/libwapcaplet.h>
#include "utils/errors.h"
nserror corestrings_init(void);
void corestrings_fini(void);
/* lwc_string strings */
extern lwc_string *corestring_lwc_a;
extern lwc_string *corestring_lwc_abscenter;
extern lwc_string *corestring_lwc_absmiddle;
extern lwc_string *corestring_lwc_align;
extern lwc_string *corestring_lwc_applet;
extern lwc_string *corestring_lwc_baseline;
extern lwc_string *corestring_lwc_body;
extern lwc_string *corestring_lwc_bottom;
extern lwc_string *corestring_lwc_caption;
extern lwc_string *corestring_lwc_center;
extern lwc_string *corestring_lwc_col;
extern lwc_string *corestring_lwc_div;
extern lwc_string *corestring_lwc_embed;
extern lwc_string *corestring_lwc_font;
extern lwc_string *corestring_lwc_h1;
extern lwc_string *corestring_lwc_h2;
extern lwc_string *corestring_lwc_h3;
extern lwc_string *corestring_lwc_h4;
extern lwc_string *corestring_lwc_h5;
extern lwc_string *corestring_lwc_h6;
extern lwc_string *corestring_lwc_hr;
extern lwc_string *corestring_lwc_iframe;
extern lwc_string *corestring_lwc_img;
extern lwc_string *corestring_lwc_input;
extern lwc_string *corestring_lwc_justify;
extern lwc_string *corestring_lwc_left;
extern lwc_string *corestring_lwc_middle;
extern lwc_string *corestring_lwc_object;
extern lwc_string *corestring_lwc_p;
extern lwc_string *corestring_lwc_password;
extern lwc_string *corestring_lwc_right;
extern lwc_string *corestring_lwc_table;
extern lwc_string *corestring_lwc_tbody;
extern lwc_string *corestring_lwc_td;
extern lwc_string *corestring_lwc_text;
extern lwc_string *corestring_lwc_textarea;
extern lwc_string *corestring_lwc_texttop;
extern lwc_string *corestring_lwc_tfoot;
extern lwc_string *corestring_lwc_th;
extern lwc_string *corestring_lwc_thead;
extern lwc_string *corestring_lwc_top;
extern lwc_string *corestring_lwc_tr;
struct dom_string;
/* dom_string strings */
extern struct dom_string *corestring_dom_align;
extern struct dom_string *corestring_dom_background;
extern struct dom_string *corestring_dom_bgcolor;
extern struct dom_string *corestring_dom_border;
extern struct dom_string *corestring_dom_bordercolor;
extern struct dom_string *corestring_dom_cellpadding;
extern struct dom_string *corestring_dom_cellspacing;
extern struct dom_string *corestring_dom_color;
extern struct dom_string *corestring_dom_cols;
extern struct dom_string *corestring_dom_height;
extern struct dom_string *corestring_dom_href;
extern struct dom_string *corestring_dom_hspace;
extern struct dom_string *corestring_dom_link;
extern struct dom_string *corestring_dom_rows;
extern struct dom_string *corestring_dom_size;
extern struct dom_string *corestring_dom_text;
extern struct dom_string *corestring_dom_type;
extern struct dom_string *corestring_dom_valign;
extern struct dom_string *corestring_dom_vlink;
extern struct dom_string *corestring_dom_vspace;
extern struct dom_string *corestring_dom_width;
#endif