summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2012-07-22 15:48:55 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2012-07-22 15:48:55 +0100
commit2ad24f39da6a314a1e3839c355103a6af131bc09 (patch)
tree0663a043cb49e87bc7831b17074c1d41967ffcd6 /utils
parent1e65737c8cad643ed9591b306364a1844458fd13 (diff)
downloadnetsurf-2ad24f39da6a314a1e3839c355103a6af131bc09.tar.gz
netsurf-2ad24f39da6a314a1e3839c355103a6af131bc09.tar.bz2
Interned string cleanup, phase 2: Create utils/corestrings and use it in css handler.
Diffstat (limited to 'utils')
-rw-r--r--utils/corestrings.c293
-rw-r--r--utils/corestrings.h101
2 files changed, 394 insertions, 0 deletions
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 <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;
+}
diff --git a/utils/corestrings.h b/utils/corestrings.h
new file mode 100644
index 000000000..236c108bf
--- /dev/null
+++ b/utils/corestrings.h
@@ -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