From 72510f550bf42cf660faf1a1929cb6df59bf86fd Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Fri, 24 Jan 2014 18:58:12 +0000 Subject: Use corestrings in box construction. --- render/box.h | 2 - render/box_construct.c | 204 ++++++++++--------------------------------------- render/html.c | 6 -- 3 files changed, 42 insertions(+), 170 deletions(-) (limited to 'render') diff --git a/render/box.h b/render/box.h index 878ebc8d3..e781a66ec 100644 --- a/render/box.h +++ b/render/box.h @@ -339,8 +339,6 @@ bool box_handle_scrollbars(struct content *c, struct box *box, bool box_vscrollbar_present(const struct box *box); bool box_hscrollbar_present(const struct box *box); -nserror box_construct_init(void); -void box_construct_fini(void); nserror dom_to_box(struct dom_node *n, struct html_content *c, box_construct_complete_cb cb); diff --git a/render/box_construct.c b/render/box_construct.c index 3d077e8cd..ce21b70f7 100644 --- a/render/box_construct.c +++ b/render/box_construct.c @@ -210,134 +210,13 @@ static const box_type box_map[] = { BOX_NONE /*CSS_DISPLAY_NONE*/ }; -/** Key for box userdata on DOM elements (== '__ns_box') */ -static dom_string *kstr_box_key; -static dom_string *kstr_title; -static dom_string *kstr_id; -static dom_string *kstr_colspan; -static dom_string *kstr_rowspan; -static dom_string *kstr_style; -static dom_string *kstr_href; -static dom_string *kstr_name; -static dom_string *kstr_target; -static dom_string *kstr_alt; -static dom_string *kstr_src; -static dom_string *kstr_codebase; -static dom_string *kstr_classid; -static dom_string *kstr_data; -static dom_string *kstr_rows; -static dom_string *kstr_cols; -static dom_string *kstr_border; -static dom_string *kstr_frameborder; -static dom_string *kstr_bordercolor; -static dom_string *kstr_noresize; -static dom_string *kstr_scrolling; -static dom_string *kstr_marginwidth; -static dom_string *kstr_marginheight; -static dom_string *kstr_type; -static dom_string *kstr_value; -static dom_string *kstr_selected; - -nserror box_construct_init(void) -{ - dom_exception err; - - err = dom_string_create_interned((const uint8_t *) "__ns_box", - SLEN("__ns_box"), &kstr_box_key); - if (err != DOM_NO_ERR || kstr_box_key == NULL) - goto error; - -#define BOX_CONSTRUCT_STRING_INTERN(NAME) \ - err = dom_string_create_interned((const uint8_t *)#NAME, \ - sizeof(#NAME) - 1, \ - &kstr_##NAME ); \ - if ((err != DOM_NO_ERR) || (kstr_##NAME == NULL)) \ - goto error - - BOX_CONSTRUCT_STRING_INTERN(title); - BOX_CONSTRUCT_STRING_INTERN(id); - BOX_CONSTRUCT_STRING_INTERN(colspan); - BOX_CONSTRUCT_STRING_INTERN(rowspan); - BOX_CONSTRUCT_STRING_INTERN(style); - BOX_CONSTRUCT_STRING_INTERN(href); - BOX_CONSTRUCT_STRING_INTERN(name); - BOX_CONSTRUCT_STRING_INTERN(target); - BOX_CONSTRUCT_STRING_INTERN(alt); - BOX_CONSTRUCT_STRING_INTERN(src); - BOX_CONSTRUCT_STRING_INTERN(codebase); - BOX_CONSTRUCT_STRING_INTERN(classid); - BOX_CONSTRUCT_STRING_INTERN(data); - BOX_CONSTRUCT_STRING_INTERN(rows); - BOX_CONSTRUCT_STRING_INTERN(cols); - BOX_CONSTRUCT_STRING_INTERN(border); - BOX_CONSTRUCT_STRING_INTERN(frameborder); - BOX_CONSTRUCT_STRING_INTERN(bordercolor); - BOX_CONSTRUCT_STRING_INTERN(noresize); - BOX_CONSTRUCT_STRING_INTERN(scrolling); - BOX_CONSTRUCT_STRING_INTERN(marginwidth); - BOX_CONSTRUCT_STRING_INTERN(marginheight); - BOX_CONSTRUCT_STRING_INTERN(type); - BOX_CONSTRUCT_STRING_INTERN(value); - BOX_CONSTRUCT_STRING_INTERN(selected); - -#undef BOX_CONSTRUCT_STRING_INTERN - - return NSERROR_OK; - -error: - return NSERROR_NOMEM; -} - -void box_construct_fini(void) -{ - if (kstr_box_key != NULL) { - dom_string_unref(kstr_box_key); - kstr_box_key = NULL; - } - -#define BOX_CONSTRUCT_STRING_UNREF(NAME) \ - do { \ - if (kstr_##NAME != NULL) { \ - dom_string_unref(kstr_##NAME); \ - kstr_##NAME = NULL; \ - } \ - } while (0) \ - - BOX_CONSTRUCT_STRING_UNREF(title); - BOX_CONSTRUCT_STRING_UNREF(id); - BOX_CONSTRUCT_STRING_UNREF(colspan); - BOX_CONSTRUCT_STRING_UNREF(rowspan); - BOX_CONSTRUCT_STRING_UNREF(style); - BOX_CONSTRUCT_STRING_UNREF(href); - BOX_CONSTRUCT_STRING_UNREF(name); - BOX_CONSTRUCT_STRING_UNREF(target); - BOX_CONSTRUCT_STRING_UNREF(alt); - BOX_CONSTRUCT_STRING_UNREF(src); - BOX_CONSTRUCT_STRING_UNREF(codebase); - BOX_CONSTRUCT_STRING_UNREF(classid); - BOX_CONSTRUCT_STRING_UNREF(data); - BOX_CONSTRUCT_STRING_UNREF(rows); - BOX_CONSTRUCT_STRING_UNREF(cols); - BOX_CONSTRUCT_STRING_UNREF(border); - BOX_CONSTRUCT_STRING_UNREF(frameborder); - BOX_CONSTRUCT_STRING_UNREF(bordercolor); - BOX_CONSTRUCT_STRING_UNREF(noresize); - BOX_CONSTRUCT_STRING_UNREF(scrolling); - BOX_CONSTRUCT_STRING_UNREF(marginwidth); - BOX_CONSTRUCT_STRING_UNREF(marginheight); - BOX_CONSTRUCT_STRING_UNREF(type); - BOX_CONSTRUCT_STRING_UNREF(value); - BOX_CONSTRUCT_STRING_UNREF(selected); - -#undef BOX_CONSTRUCT_DOM_STRING_UNREF -} - static inline struct box *box_for_node(dom_node *n) { struct box *box = NULL; dom_exception err; - err = dom_node_get_user_data(n, kstr_box_key, (void *) &box); + err = dom_node_get_user_data(n, corestring_dom___ns_key_box_node_data, + (void *) &box); if (err != DOM_NO_ERR) return NULL; @@ -859,7 +738,7 @@ bool box_construct_element(struct box_construct_ctx *ctx, return false; /* Extract title attribute, if present */ - err = dom_element_get_attribute(ctx->n, kstr_title, &title0); + err = dom_element_get_attribute(ctx->n, corestring_dom_title, &title0); if (err != DOM_NO_ERR) return false; @@ -880,7 +759,7 @@ bool box_construct_element(struct box_construct_ctx *ctx, } /* Extract id attribute, if present */ - err = dom_element_get_attribute(ctx->n, kstr_id, &s); + err = dom_element_get_attribute(ctx->n, corestring_dom_id, &s); if (err != DOM_NO_ERR) return false; @@ -903,7 +782,7 @@ bool box_construct_element(struct box_construct_ctx *ctx, ctx->root_box = box; /* Deal with colspan/rowspan */ - err = dom_element_get_attribute(ctx->n, kstr_colspan, &s); + err = dom_element_get_attribute(ctx->n, corestring_dom_colspan, &s); if (err != DOM_NO_ERR) return false; @@ -916,7 +795,7 @@ bool box_construct_element(struct box_construct_ctx *ctx, dom_string_unref(s); } - err = dom_element_get_attribute(ctx->n, kstr_rowspan, &s); + err = dom_element_get_attribute(ctx->n, corestring_dom_rowspan, &s); if (err != DOM_NO_ERR) return false; @@ -1000,7 +879,8 @@ bool box_construct_element(struct box_construct_ctx *ctx, } /* Attach DOM node to box */ - err = dom_node_set_user_data(ctx->n, kstr_box_key, box, NULL, + err = dom_node_set_user_data(ctx->n, + corestring_dom___ns_key_box_node_data, box, NULL, (void *) &old_box); if (err != DOM_NO_ERR) return false; @@ -1433,7 +1313,7 @@ css_select_results *box_get_style(html_content *c, nscss_select_ctx ctx; /* Firstly, construct inline stylesheet, if any */ - err = dom_element_get_attribute(n, kstr_style, &s); + err = dom_element_get_attribute(n, corestring_dom_style, &s); if (err != DOM_NO_ERR) return NULL; @@ -1575,7 +1455,7 @@ bool box_a(BOX_SPECIAL_PARAMS) dom_string *s; dom_exception err; - err = dom_element_get_attribute(n, kstr_href, &s); + err = dom_element_get_attribute(n, corestring_dom_href, &s); if (err == DOM_NO_ERR && s != NULL) { ok = box_extract_link(dom_string_data(s), content->base_url, &url); @@ -1590,7 +1470,7 @@ bool box_a(BOX_SPECIAL_PARAMS) } /* name and id share the same namespace */ - err = dom_element_get_attribute(n, kstr_name, &s); + err = dom_element_get_attribute(n, corestring_dom_name, &s); if (err == DOM_NO_ERR && s != NULL) { lwc_string *lwc_name; @@ -1609,7 +1489,7 @@ bool box_a(BOX_SPECIAL_PARAMS) } /* target frame [16.3] */ - err = dom_element_get_attribute(n, kstr_target, &s); + err = dom_element_get_attribute(n, corestring_dom_target, &s); if (err == DOM_NO_ERR && s != NULL) { if (dom_string_caseless_lwc_isequal(s, corestring_lwc__blank)) @@ -1663,7 +1543,7 @@ bool box_image(BOX_SPECIAL_PARAMS) return true; /* handle alt text */ - err = dom_element_get_attribute(n, kstr_alt, &s); + err = dom_element_get_attribute(n, corestring_dom_alt, &s); if (err == DOM_NO_ERR && s != NULL) { char *alt = squash_whitespace(dom_string_data(s)); dom_string_unref(s); @@ -1687,7 +1567,7 @@ bool box_image(BOX_SPECIAL_PARAMS) box->usemap++; /* get image URL */ - err = dom_element_get_attribute(n, kstr_src, &s); + err = dom_element_get_attribute(n, corestring_dom_src, &s); if (err != DOM_NO_ERR || s == NULL) return true; @@ -1790,7 +1670,7 @@ bool box_object(BOX_SPECIAL_PARAMS) /* codebase, classid, and data are URLs * (codebase is the base for the other two) */ - err = dom_element_get_attribute(n, kstr_codebase, &codebase); + err = dom_element_get_attribute(n, corestring_dom_codebase, &codebase); if (err == DOM_NO_ERR && codebase != NULL) { if (box_extract_link(dom_string_data(codebase), content->base_url, @@ -1803,7 +1683,7 @@ bool box_object(BOX_SPECIAL_PARAMS) if (params->codebase == NULL) params->codebase = nsurl_ref(content->base_url); - err = dom_element_get_attribute(n, kstr_classid, &classid); + err = dom_element_get_attribute(n, corestring_dom_classid, &classid); if (err == DOM_NO_ERR && classid != NULL) { if (box_extract_link(dom_string_data(classid), params->codebase, ¶ms->classid) == false) { @@ -1813,7 +1693,7 @@ bool box_object(BOX_SPECIAL_PARAMS) dom_string_unref(classid); } - err = dom_element_get_attribute(n, kstr_data, &data); + err = dom_element_get_attribute(n, corestring_dom_data, &data); if (err == DOM_NO_ERR && data != NULL) { if (box_extract_link(dom_string_data(data), params->codebase, ¶ms->data) == false) { @@ -2052,7 +1932,7 @@ bool box_create_frameset(struct content_html_frames *f, dom_node *n, colour default_border_colour = 0x000000; /* parse rows and columns */ - err = dom_element_get_attribute(n, kstr_rows, &s); + err = dom_element_get_attribute(n, corestring_dom_rows, &s); if (err == DOM_NO_ERR && s != NULL) { row_height = box_parse_multi_lengths(dom_string_data(s), &rows); dom_string_unref(s); @@ -2066,7 +1946,7 @@ bool box_create_frameset(struct content_html_frames *f, dom_node *n, row_height->unit = FRAME_DIMENSION_PERCENT; } - err = dom_element_get_attribute(n, kstr_cols, &s); + err = dom_element_get_attribute(n, corestring_dom_cols, &s); if (err == DOM_NO_ERR && s != NULL) { col_width = box_parse_multi_lengths(dom_string_data(s), &cols); dom_string_unref(s); @@ -2085,7 +1965,7 @@ bool box_create_frameset(struct content_html_frames *f, dom_node *n, } /* common extension: border="0|1" to control all children */ - err = dom_element_get_attribute(n, kstr_border, &s); + err = dom_element_get_attribute(n, corestring_dom_border, &s); if (err == DOM_NO_ERR && s != NULL) { if ((dom_string_data(s)[0] == '0') && (dom_string_data(s)[1] == '\0')) @@ -2094,7 +1974,7 @@ bool box_create_frameset(struct content_html_frames *f, dom_node *n, } /* common extension: frameborder="yes|no" to control all children */ - err = dom_element_get_attribute(n, kstr_frameborder, &s); + err = dom_element_get_attribute(n, corestring_dom_frameborder, &s); if (err == DOM_NO_ERR && s != NULL) { if (dom_string_caseless_lwc_isequal(s, corestring_lwc_no) == 0) @@ -2104,7 +1984,7 @@ bool box_create_frameset(struct content_html_frames *f, dom_node *n, /* common extension: bordercolor="#RRGGBB|" to control *all children */ - err = dom_element_get_attribute(n, kstr_bordercolor, &s); + err = dom_element_get_attribute(n, corestring_dom_bordercolor, &s); if (err == DOM_NO_ERR && s != NULL) { css_color color; @@ -2233,7 +2113,7 @@ bool box_create_frameset(struct content_html_frames *f, dom_node *n, /* get frame URL (not required) */ url = NULL; - err = dom_element_get_attribute(c, kstr_src, &s); + err = dom_element_get_attribute(c, corestring_dom_src, &s); if (err == DOM_NO_ERR && s != NULL) { box_extract_link(dom_string_data(s), content->base_url, &url); @@ -2250,17 +2130,17 @@ bool box_create_frameset(struct content_html_frames *f, dom_node *n, } /* fill in specified values */ - err = dom_element_get_attribute(c, kstr_name, &s); + err = dom_element_get_attribute(c, corestring_dom_name, &s); if (err == DOM_NO_ERR && s != NULL) { frame->name = talloc_strdup(content->bctx, dom_string_data(s)); dom_string_unref(s); } - dom_element_has_attribute(c, kstr_noresize, + dom_element_has_attribute(c, corestring_dom_noresize, &frame->no_resize); - err = dom_element_get_attribute(c, kstr_frameborder, + err = dom_element_get_attribute(c, corestring_dom_frameborder, &s); if (err == DOM_NO_ERR && s != NULL) { i = atoi(dom_string_data(s)); @@ -2268,7 +2148,7 @@ bool box_create_frameset(struct content_html_frames *f, dom_node *n, dom_string_unref(s); } - err = dom_element_get_attribute(c, kstr_scrolling, &s); + err = dom_element_get_attribute(c, corestring_dom_scrolling, &s); if (err == DOM_NO_ERR && s != NULL) { if (dom_string_caseless_lwc_isequal(s, corestring_lwc_yes)) @@ -2279,21 +2159,21 @@ bool box_create_frameset(struct content_html_frames *f, dom_node *n, dom_string_unref(s); } - err = dom_element_get_attribute(c, kstr_marginwidth, + err = dom_element_get_attribute(c, corestring_dom_marginwidth, &s); if (err == DOM_NO_ERR && s != NULL) { frame->margin_width = atoi(dom_string_data(s)); dom_string_unref(s); } - err = dom_element_get_attribute(c, kstr_marginheight, + err = dom_element_get_attribute(c, corestring_dom_marginheight, &s); if (err == DOM_NO_ERR && s != NULL) { frame->margin_height = atoi(dom_string_data(s)); dom_string_unref(s); } - err = dom_element_get_attribute(c, kstr_bordercolor, + err = dom_element_get_attribute(c, corestring_dom_bordercolor, &s); if (err == DOM_NO_ERR && s != NULL) { css_color color; @@ -2363,7 +2243,7 @@ bool box_iframe(BOX_SPECIAL_PARAMS) return true; /* get frame URL */ - err = dom_element_get_attribute(n, kstr_src, &s); + err = dom_element_get_attribute(n, corestring_dom_src, &s); if (err != DOM_NO_ERR || s == NULL) return true; if (box_extract_link(dom_string_data(s), content->base_url, @@ -2403,20 +2283,20 @@ bool box_iframe(BOX_SPECIAL_PARAMS) content->iframe = iframe; /* fill in specified values */ - err = dom_element_get_attribute(n, kstr_name, &s); + err = dom_element_get_attribute(n, corestring_dom_name, &s); if (err == DOM_NO_ERR && s != NULL) { iframe->name = talloc_strdup(content->bctx, dom_string_data(s)); dom_string_unref(s); } - err = dom_element_get_attribute(n, kstr_frameborder, &s); + err = dom_element_get_attribute(n, corestring_dom_frameborder, &s); if (err == DOM_NO_ERR && s != NULL) { i = atoi(dom_string_data(s)); iframe->border = (i != 0); dom_string_unref(s); } - err = dom_element_get_attribute(n, kstr_bordercolor, &s); + err = dom_element_get_attribute(n, corestring_dom_bordercolor, &s); if (err == DOM_NO_ERR && s != NULL) { css_color color; @@ -2426,7 +2306,7 @@ bool box_iframe(BOX_SPECIAL_PARAMS) dom_string_unref(s); } - err = dom_element_get_attribute(n, kstr_scrolling, &s); + err = dom_element_get_attribute(n, corestring_dom_scrolling, &s); if (err == DOM_NO_ERR && s != NULL) { if (dom_string_caseless_lwc_isequal(s, corestring_lwc_yes)) @@ -2437,13 +2317,13 @@ bool box_iframe(BOX_SPECIAL_PARAMS) dom_string_unref(s); } - err = dom_element_get_attribute(n, kstr_marginwidth, &s); + err = dom_element_get_attribute(n, corestring_dom_marginwidth, &s); if (err == DOM_NO_ERR && s != NULL) { iframe->margin_width = atoi(dom_string_data(s)); dom_string_unref(s); } - err = dom_element_get_attribute(n, kstr_marginheight, &s); + err = dom_element_get_attribute(n, corestring_dom_marginheight, &s); if (err == DOM_NO_ERR && s != NULL) { iframe->margin_height = atoi(dom_string_data(s)); dom_string_unref(s); @@ -2504,7 +2384,7 @@ bool box_input(BOX_SPECIAL_PARAMS) nsurl *url; nserror error; - dom_element_get_attribute(n, kstr_type, &type); + dom_element_get_attribute(n, corestring_dom_type, &type); gadget = html_forms_get_control_for_node(content->forms, n); if (gadget == NULL) @@ -2589,7 +2469,7 @@ bool box_input(BOX_SPECIAL_PARAMS) nsoption_bool(foreground_images) == true) { dom_string *s; - err = dom_element_get_attribute(n, kstr_src, &s); + err = dom_element_get_attribute(n, corestring_dom_src, &s); if (err == DOM_NO_ERR && s != NULL) { error = nsurl_join(content->base_url, dom_string_data(s), &url); @@ -2837,7 +2717,7 @@ bool box_select_add_option(struct form_control *control, dom_node *n) if (text == NULL) goto no_memory; - err = dom_element_get_attribute(n, kstr_value, &s); + err = dom_element_get_attribute(n, corestring_dom_value, &s); if (err == DOM_NO_ERR && s != NULL) { value = strdup(dom_string_data(s)); dom_string_unref(s); @@ -2848,7 +2728,7 @@ bool box_select_add_option(struct form_control *control, dom_node *n) if (value == NULL) goto no_memory; - dom_element_has_attribute(n, kstr_selected, &selected); + dom_element_has_attribute(n, corestring_dom_selected, &selected); /* replace spaces/TABs with hard spaces to prevent line wrapping */ text_nowrap = cnv_space2nbsp(text); @@ -2924,7 +2804,7 @@ bool box_embed(BOX_SPECIAL_PARAMS) params->params = NULL; /* src is a URL */ - err = dom_element_get_attribute(n, kstr_src, &src); + err = dom_element_get_attribute(n, corestring_dom_src, &src); if (err != DOM_NO_ERR || src == NULL) return true; if (box_extract_link(dom_string_data(src), content->base_url, diff --git a/render/html.c b/render/html.c index e10f1e930..0a7ab2453 100644 --- a/render/html.c +++ b/render/html.c @@ -2180,8 +2180,6 @@ static content_type html_content_type(void) static void html_fini(void) { - box_construct_fini(); - html_css_fini(); } @@ -2221,10 +2219,6 @@ nserror html_init(void) if (error != NSERROR_OK) goto error; - error = box_construct_init(); - if (error != NSERROR_OK) - goto error; - for (i = 0; i < NOF_ELEMENTS(html_types); i++) { error = content_factory_register_handler(html_types[i], &html_content_handler); -- cgit v1.2.3