From 2ad24f39da6a314a1e3839c355103a6af131bc09 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Sun, 22 Jul 2012 15:48:55 +0100 Subject: Interned string cleanup, phase 2: Create utils/corestrings and use it in css handler. --- utils/corestrings.c | 293 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 293 insertions(+) create mode 100644 utils/corestrings.c (limited to 'utils/corestrings.c') diff --git a/utils/corestrings.c b/utils/corestrings.c new file mode 100644 index 000000000..d266d17c6 --- /dev/null +++ b/utils/corestrings.c @@ -0,0 +1,293 @@ +/* + * Copyright 2012 Michael Drake + * + * 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 . + */ + +/** \file + * Useful interned string pointers (implementation). + */ + +#include + +#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; +} -- cgit v1.2.3