From 6d600214268e64e6bc83df61d8abfdf8963acdad Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Wed, 27 Jan 2016 12:14:12 +0000 Subject: Split out tag names from general string table and enum. Previously these were mixed in the the document's general memoised strings. This also gives us an enum by which HTML elements can be identified. --- bindings/hubbub/parser.c | 11 +- include/dom/html/html_elements.h | 94 ++++++++++++ src/html/html_anchor_element.c | 4 +- src/html/html_applet_element.c | 2 +- src/html/html_area_element.c | 4 +- src/html/html_basefont_element.c | 4 +- src/html/html_body_element.c | 7 +- src/html/html_br_element.c | 4 +- src/html/html_button_element.c | 4 +- src/html/html_directory_element.c | 4 +- src/html/html_div_element.c | 4 +- src/html/html_dlist_element.c | 4 +- src/html/html_document.c | 286 ++++++++++++++++++++++++----------- src/html/html_document.h | 2 + src/html/html_document_strings.h | 64 -------- src/html/html_element.h | 1 + src/html/html_fieldset_element.c | 6 +- src/html/html_font_element.c | 4 +- src/html/html_form_element.c | 12 +- src/html/html_frame_element.c | 8 +- src/html/html_frameset_element.c | 4 +- src/html/html_head_element.c | 4 +- src/html/html_heading_element.c | 3 +- src/html/html_hr_element.c | 4 +- src/html/html_html_element.c | 7 +- src/html/html_iframe_element.c | 7 +- src/html/html_image_element.c | 4 +- src/html/html_input_element.c | 4 +- src/html/html_isindex_element.c | 4 +- src/html/html_label_element.c | 4 +- src/html/html_legend_element.c | 6 +- src/html/html_li_element.c | 4 +- src/html/html_link_element.c | 4 +- src/html/html_map_element.c | 8 +- src/html/html_menu_element.c | 4 +- src/html/html_meta_element.c | 4 +- src/html/html_mod_element.c | 3 +- src/html/html_object_element.c | 4 +- src/html/html_olist_element.c | 4 +- src/html/html_opt_group_element.c | 4 +- src/html/html_option_element.c | 8 +- src/html/html_options_collection.c | 2 +- src/html/html_paragraph_element.c | 4 +- src/html/html_param_element.c | 4 +- src/html/html_pre_element.c | 4 +- src/html/html_quote_element.c | 4 +- src/html/html_script_element.c | 4 +- src/html/html_select_element.c | 5 +- src/html/html_table_element.c | 48 ++++-- src/html/html_tablecaption_element.c | 4 +- src/html/html_tablecell_element.c | 31 ++-- src/html/html_tablecol_element.c | 6 +- src/html/html_tablerow_element.c | 65 ++++---- src/html/html_tablesection_element.c | 6 +- src/html/html_text_area_element.c | 4 +- src/html/html_title_element.c | 4 +- src/html/html_ulist_element.c | 4 +- 57 files changed, 502 insertions(+), 324 deletions(-) create mode 100644 include/dom/html/html_elements.h diff --git a/bindings/hubbub/parser.c b/bindings/hubbub/parser.c index a2a33ed..9dfe738 100644 --- a/bindings/hubbub/parser.c +++ b/bindings/hubbub/parser.c @@ -55,7 +55,8 @@ struct dom_hubbub_parser { }; /* Forward declaration to break reference loop */ -static hubbub_error add_attributes(void *parser, void *node, const hubbub_attribute *attributes, uint32_t n_attributes); +static hubbub_error add_attributes(void *parser, void *node, + const hubbub_attribute *attributes, uint32_t n_attributes); @@ -479,7 +480,7 @@ static hubbub_error form_associate(void *parser, void *form, void *node) /* Determine the kind of the node we have here. */ if (dom_string_caseless_isequal(ele->name, - doc->memoised[hds_BUTTON])) { + doc->elements[DOM_HTML_ELEMENT_TYPE_BUTTON])) { err = _dom_html_button_element_set_form( (dom_html_button_element *)node, form_ele); if (err != DOM_NO_ERR) { @@ -488,7 +489,7 @@ static hubbub_error form_associate(void *parser, void *form, void *node) return HUBBUB_UNKNOWN; } } else if (dom_string_caseless_isequal(ele->name, - doc->memoised[hds_INPUT])) { + doc->elements[DOM_HTML_ELEMENT_TYPE_INPUT])) { err = _dom_html_input_element_set_form( (dom_html_input_element *)node, form_ele); if (err != DOM_NO_ERR) { @@ -497,7 +498,7 @@ static hubbub_error form_associate(void *parser, void *form, void *node) return HUBBUB_UNKNOWN; } } else if (dom_string_caseless_isequal(ele->name, - doc->memoised[hds_SELECT])) { + doc->elements[DOM_HTML_ELEMENT_TYPE_SELECT])) { err = _dom_html_select_element_set_form( (dom_html_select_element *)node, form_ele); if (err != DOM_NO_ERR) { @@ -506,7 +507,7 @@ static hubbub_error form_associate(void *parser, void *form, void *node) return HUBBUB_UNKNOWN; } } else if (dom_string_caseless_isequal(ele->name, - doc->memoised[hds_TEXTAREA])) { + doc->elements[DOM_HTML_ELEMENT_TYPE_TEXTAREA])) { err = _dom_html_text_area_element_set_form( (dom_html_text_area_element *)node, form_ele); if (err != DOM_NO_ERR) { diff --git a/include/dom/html/html_elements.h b/include/dom/html/html_elements.h new file mode 100644 index 0000000..d4aec10 --- /dev/null +++ b/include/dom/html/html_elements.h @@ -0,0 +1,94 @@ +/* + * This file is part of libdom. + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2016 Michael Drake + */ + +#if !defined(dom_html_elements_h_) || defined(DOM_HTML_ELEMENT_STRINGS_ENTRY) +#define dom_html_elements_h_ + +#define DOM_HTML_ELEMENT_LIST \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(_UNKNOWN) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(HTML) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(HEAD) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(LINK) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(TITLE) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(META) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(BASE) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(ISINDEX) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(STYLE) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(BODY) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(FORM) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(SELECT) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(OPTGROUP) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(OPTION) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(INPUT) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(TEXTAREA) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(BUTTON) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(LABEL) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(FIELDSET) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(LEGEND) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(UL) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(OL) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(DL) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(DIRECTORY) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(MENU) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(LI) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(BLOCKQUOTE) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(DIV) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(P) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(H1) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(H2) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(H3) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(H4) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(H5) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(H6) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(Q) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(PRE) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(BR) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(BASEFONT) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(FONT) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(HR) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(INS) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(DEL) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(A) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(IMG) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(OBJECT) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(PARAM) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(APPLET) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(MAP) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(AREA) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(SCRIPT) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(TABLE) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(CAPTION) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(COL) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(COLGROUP) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(THEAD) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(TFOOT) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(TBODY) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(TR) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(TH) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(TD) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(FRAMESET) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(FRAME) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(IFRAME) + +/* Generate enum containing DOM_HTML_ELEMENT_ entries, + * unless the includer defined DOM_HTML_ELEMENT_STRINGS_ENTRY + * to do something else. + */ +#ifndef DOM_HTML_ELEMENT_STRINGS_ENTRY +#define DOM_HTML_ELEMENT_STRINGS_ENTRY(tag) \ + DOM_HTML_ELEMENT_TYPE_##tag, +typedef enum { +DOM_HTML_ELEMENT_LIST + DOM_HTML_ELEMENT_TYPE__COUNT +} dom_html_element_type; +#undef DOM_HTML_ELEMENT_STRINGS_ENTRY +#else +DOM_HTML_ELEMENT_LIST +#endif + +#undef DOM_HTML_ELEMENT_LIST +#endif \ No newline at end of file diff --git a/src/html/html_anchor_element.c b/src/html/html_anchor_element.c index 77f8cef..5ad473b 100644 --- a/src/html/html_anchor_element.c +++ b/src/html/html_anchor_element.c @@ -62,8 +62,8 @@ dom_exception _dom_html_anchor_element_initialise(struct dom_html_document *doc, struct dom_html_anchor_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_A], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_A], + namespace, prefix); } /** diff --git a/src/html/html_applet_element.c b/src/html/html_applet_element.c index 9f6c16f..dedcbc5 100644 --- a/src/html/html_applet_element.c +++ b/src/html/html_applet_element.c @@ -62,7 +62,7 @@ dom_exception _dom_html_applet_element_initialise(struct dom_html_document *doc, struct dom_html_applet_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_APPLET], + doc->elements[DOM_HTML_ELEMENT_TYPE_APPLET], namespace, prefix); } diff --git a/src/html/html_area_element.c b/src/html/html_area_element.c index 85a2a3e..b3ca8dd 100644 --- a/src/html/html_area_element.c +++ b/src/html/html_area_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_area_element_initialise(struct dom_html_document *doc, struct dom_html_area_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_AREA], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_AREA], + namespace, prefix); } /** diff --git a/src/html/html_basefont_element.c b/src/html/html_basefont_element.c index 7aa20a0..f8e9249 100644 --- a/src/html/html_basefont_element.c +++ b/src/html/html_basefont_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_base_font_element_initialise(struct dom_html_document *d struct dom_html_base_font_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_BASEFONT], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_BASEFONT], + namespace, prefix); } /** diff --git a/src/html/html_body_element.c b/src/html/html_body_element.c index f2c10fe..f63583e 100644 --- a/src/html/html_body_element.c +++ b/src/html/html_body_element.c @@ -30,7 +30,7 @@ static struct dom_element_protected_vtable _protect_vtable = { * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ dom_exception _dom_html_body_element_create(struct dom_html_document *doc, - dom_string *namespace, dom_string *prefix, + dom_string *namespace, dom_string *prefix, struct dom_html_body_element **ele) { struct dom_node_internal *node; @@ -55,11 +55,12 @@ dom_exception _dom_html_body_element_create(struct dom_html_document *doc, * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ dom_exception _dom_html_body_element_initialise(struct dom_html_document *doc, - dom_string *namespace, dom_string *prefix, + dom_string *namespace, dom_string *prefix, struct dom_html_body_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_BODY], namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_BODY], + namespace, prefix); } /** diff --git a/src/html/html_br_element.c b/src/html/html_br_element.c index fbc133e..ec5acf6 100644 --- a/src/html/html_br_element.c +++ b/src/html/html_br_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_br_element_initialise(struct dom_html_document *doc, struct dom_html_br_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_BR], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_BR], + namespace, prefix); } /** diff --git a/src/html/html_button_element.c b/src/html/html_button_element.c index 95b5d31..28b694b 100644 --- a/src/html/html_button_element.c +++ b/src/html/html_button_element.c @@ -63,8 +63,8 @@ dom_exception _dom_html_button_element_initialise(struct dom_html_document *doc, ele->form = NULL; return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_BUTTON], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_BUTTON], + namespace, prefix); } /** diff --git a/src/html/html_directory_element.c b/src/html/html_directory_element.c index 4e0d9e0..0ad88ae 100644 --- a/src/html/html_directory_element.c +++ b/src/html/html_directory_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_directory_element_initialise(struct dom_html_document *d struct dom_html_directory_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_DIRECTORY], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_DIRECTORY], + namespace, prefix); } /** diff --git a/src/html/html_div_element.c b/src/html/html_div_element.c index 0c689d6..f5ef051 100644 --- a/src/html/html_div_element.c +++ b/src/html/html_div_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_div_element_initialise(struct dom_html_document *doc, struct dom_html_div_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_DIV], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_DIV], + namespace, prefix); } /** diff --git a/src/html/html_dlist_element.c b/src/html/html_dlist_element.c index 5b25037..38e3276 100644 --- a/src/html/html_dlist_element.c +++ b/src/html/html_dlist_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_dlist_element_initialise(struct dom_html_document *doc, struct dom_html_dlist_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_DL], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_DL], + namespace, prefix); } /** diff --git a/src/html/html_document.c b/src/html/html_document.c index 096c84e..c33753e 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -8,6 +8,8 @@ #include #include +#include + #include "html/html_document.h" #include "html/html_element.h" #include "html/html_collection.h" @@ -134,10 +136,16 @@ dom_exception _dom_html_document_initialise(dom_html_document *doc, error = DOM_NO_MEM_ERR; goto out; } + doc->elements = calloc(sizeof(dom_string *), + DOM_HTML_ELEMENT_TYPE__COUNT); + if (doc->elements == NULL) { + error = DOM_NO_MEM_ERR; + goto out; + } -#define HTML_DOCUMENT_STRINGS_ACTION(attr,str) \ +#define HTML_DOCUMENT_STRINGS_ACTION(attr,str) \ error = dom_string_create_interned((const uint8_t *) #str, \ - SLEN(#str), &doc->memoised[hds_##attr]); \ + SLEN(#str), &doc->memoised[hds_##attr]); \ if (error != DOM_NO_ERR) { \ goto out; \ } @@ -145,15 +153,38 @@ dom_exception _dom_html_document_initialise(dom_html_document *doc, #include "html_document_strings.h" #undef HTML_DOCUMENT_STRINGS_ACTION +#define DOM_HTML_ELEMENT_STRINGS_ENTRY(tag) \ + error = dom_string_create_interned((const uint8_t *) #tag, \ + SLEN(#tag), \ + &doc->elements[DOM_HTML_ELEMENT_TYPE_##tag]); \ + if (error != DOM_NO_ERR) { \ + goto out; \ + } + +#include +#undef DOM_HTML_ELEMENT_STRINGS_ENTRY + out: - if (doc->memoised != NULL && error != DOM_NO_ERR) { - for(sidx = 0; sidx < hds_COUNT; ++sidx) { - if (doc->memoised[sidx] != NULL) { - dom_string_unref(doc->memoised[sidx]); + if (error != DOM_NO_ERR) { + if (doc->memoised != NULL) { + for(sidx = 0; sidx < hds_COUNT; ++sidx) { + if (doc->memoised[sidx] != NULL) { + dom_string_unref(doc->memoised[sidx]); + } } + free(doc->memoised); + doc->memoised = NULL; + } + if (doc->elements != NULL) { + for(sidx = 0; sidx < DOM_HTML_ELEMENT_TYPE__COUNT; + ++sidx) { + if (doc->elements[sidx] != NULL) { + dom_string_unref(doc->elements[sidx]); + } + } + free(doc->elements); + doc->elements = NULL; } - free(doc->memoised); - doc->memoised = NULL; } return error; } @@ -184,6 +215,16 @@ bool _dom_html_document_finalise(dom_html_document *doc) doc->memoised = NULL; } + if (doc->elements != NULL) { + for(sidx = 0; sidx < DOM_HTML_ELEMENT_TYPE__COUNT; ++sidx) { + if (doc->elements[sidx] != NULL) { + dom_string_unref(doc->elements[sidx]); + } + } + free(doc->elements); + doc->elements = NULL; + } + return _dom_document_finalise(&doc->base); } @@ -222,164 +263,226 @@ _dom_html_document_create_element_internal(dom_html_document *html, if (exc != DOM_NO_ERR) return exc; - if (dom_string_caseless_isequal(tag_name, html->memoised[hds_HTML])) { + if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_HTML])) { exc = _dom_html_html_element_create(html, namespace, prefix, (dom_html_html_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_HEAD])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_HEAD])) { exc = _dom_html_head_element_create(html, namespace, prefix, (dom_html_head_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_TITLE])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_TITLE])) { exc = _dom_html_title_element_create(html, namespace, prefix, (dom_html_title_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_BODY])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_BODY])) { exc = _dom_html_body_element_create(html, namespace, prefix, (dom_html_body_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_FORM])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_FORM])) { exc = _dom_html_form_element_create(html, namespace, prefix, (dom_html_form_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_LINK])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_LINK])) { exc = _dom_html_link_element_create(html, namespace, prefix, (dom_html_link_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_BUTTON])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_BUTTON])) { exc = _dom_html_button_element_create(html, namespace, prefix, (dom_html_button_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_INPUT])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_INPUT])) { exc = _dom_html_input_element_create(html, namespace, prefix, (dom_html_input_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_TEXTAREA])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_TEXTAREA])) { exc = _dom_html_text_area_element_create(html, namespace, prefix, (dom_html_text_area_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_OPTGROUP])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_OPTGROUP])) { exc = _dom_html_opt_group_element_create(html, namespace, prefix, (dom_html_opt_group_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_OPTION])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_OPTION])) { exc = _dom_html_option_element_create(html, namespace, prefix, (dom_html_option_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_SELECT])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_SELECT])) { exc = _dom_html_select_element_create(html, namespace, prefix, (dom_html_select_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_HR])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_HR])) { exc = _dom_html_hr_element_create(html, namespace, prefix, (dom_html_hr_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_DL])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_DL])) { exc = _dom_html_dlist_element_create(html, namespace, prefix, (dom_html_dlist_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_DIRECTORY])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_DIRECTORY])) { exc = _dom_html_directory_element_create(html, namespace, prefix, (dom_html_directory_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_MENU])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_MENU])) { exc = _dom_html_menu_element_create(html, namespace, prefix, (dom_html_menu_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_FIELDSET])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_FIELDSET])) { exc = _dom_html_field_set_element_create(html, namespace, prefix, (dom_html_field_set_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_LEGEND])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_LEGEND])) { exc = _dom_html_legend_element_create(html, namespace, prefix, (dom_html_legend_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_P])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_P])) { exc = _dom_html_paragraph_element_create(html, namespace, prefix, (dom_html_paragraph_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_H1]) || - dom_string_caseless_isequal(tag_name, html->memoised[hds_H2]) || - dom_string_caseless_isequal(tag_name, html->memoised[hds_H3]) || - dom_string_caseless_isequal(tag_name, html->memoised[hds_H4]) || - dom_string_caseless_isequal(tag_name, html->memoised[hds_H5]) || - dom_string_caseless_isequal(tag_name, html->memoised[hds_H6]) - ) { - exc = _dom_html_heading_element_create(html, tag_name, namespace, prefix, + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_H1]) || + dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_H2]) || + dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_H3]) || + dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_H4]) || + dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_H5]) || + dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_H6])) { + exc = _dom_html_heading_element_create(html, tag_name, + namespace, prefix, (dom_html_heading_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_Q])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_Q])) { exc = _dom_html_quote_element_create(html, namespace, prefix, (dom_html_quote_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_PRE])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_PRE])) { exc = _dom_html_pre_element_create(html, namespace, prefix, (dom_html_pre_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_BR])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_BR])) { exc = _dom_html_br_element_create(html, namespace, prefix, (dom_html_br_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_LABEL])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_LABEL])) { exc = _dom_html_label_element_create(html, namespace, prefix, (dom_html_label_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_UL])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_UL])) { exc = _dom_html_u_list_element_create(html, namespace, prefix, (dom_html_u_list_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_OL])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_OL])) { exc = _dom_html_olist_element_create(html, namespace, prefix, (dom_html_olist_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_LI])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_LI])) { exc = _dom_html_li_element_create(html, namespace, prefix, (dom_html_li_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_FONT])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_FONT])) { exc = _dom_html_font_element_create(html, namespace, prefix, (dom_html_font_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_DEL]) || - dom_string_caseless_isequal(tag_name, html->memoised[hds_INS])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_DEL]) || + dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_INS])) { exc = _dom_html_mod_element_create(html, tag_name, namespace, prefix, (dom_html_mod_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_A])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_A])) { exc = _dom_html_anchor_element_create(html, namespace, prefix, (dom_html_anchor_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_BASEFONT])) { - exc = _dom_html_base_font_element_create(html, namespace, prefix, + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_BASEFONT])) { + exc = _dom_html_base_font_element_create(html, + namespace, prefix, (dom_html_base_font_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_IMG])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_IMG])) { exc = _dom_html_image_element_create(html, namespace, prefix, (dom_html_image_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_OBJECT])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_OBJECT])) { exc = _dom_html_object_element_create(html, namespace, prefix, (dom_html_object_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_PARAM])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_PARAM])) { exc = _dom_html_param_element_create(html, namespace, prefix, (dom_html_param_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_APPLET])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_APPLET])) { exc = _dom_html_applet_element_create(html, namespace, prefix, (dom_html_applet_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_MAP])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_MAP])) { exc = _dom_html_map_element_create(html, namespace, prefix, (dom_html_map_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_AREA])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_AREA])) { exc = _dom_html_area_element_create(html, namespace, prefix, (dom_html_area_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_SCRIPT])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_SCRIPT])) { exc = _dom_html_script_element_create(html, namespace, prefix, (dom_html_script_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_CAPTION])) { - exc = _dom_html_table_caption_element_create(html, namespace, prefix, + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_CAPTION])) { + exc = _dom_html_table_caption_element_create(html, + namespace, prefix, (dom_html_table_caption_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_TD]) || - dom_string_caseless_isequal(tag_name, html->memoised[hds_TH]) - ) { - exc = _dom_html_table_cell_element_create(html, tag_name, namespace, prefix, + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_TD]) || + dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_TH])) { + exc = _dom_html_table_cell_element_create(html, tag_name, + namespace, prefix, (dom_html_table_cell_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_COL])|| - dom_string_caseless_isequal(tag_name, html->memoised[hds_COLGROUP]) - ) { - exc = _dom_html_table_col_element_create(html, tag_name, namespace, prefix, + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_COL])|| + dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_COLGROUP])) { + exc = _dom_html_table_col_element_create(html, tag_name, + namespace, prefix, (dom_html_table_col_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_THEAD])|| - dom_string_caseless_isequal(tag_name, html->memoised[hds_TBODY])|| - dom_string_caseless_isequal(tag_name, html->memoised[hds_TFOOT])) { - exc = _dom_html_table_section_element_create(html, tag_name, namespace, prefix, + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_THEAD])|| + dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_TBODY])|| + dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_TFOOT])) { + exc = _dom_html_table_section_element_create(html, tag_name, + namespace, prefix, (dom_html_table_section_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_TABLE])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_TABLE])) { exc = _dom_html_table_element_create(html, namespace, prefix, (dom_html_table_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_TD])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_TD])) { exc = _dom_html_table_row_element_create(html, namespace, prefix, (dom_html_table_row_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_STYLE])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_STYLE])) { exc = _dom_html_style_element_create(html, (dom_html_style_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_FRAMESET])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_FRAMESET])) { exc = _dom_html_frame_set_element_create(html, namespace, prefix, (dom_html_frame_set_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_FRAME])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_FRAME])) { exc = _dom_html_frame_element_create(html, namespace, prefix, (dom_html_frame_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_IFRAME])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_IFRAME])) { exc = _dom_html_iframe_element_create(html, namespace, prefix, (dom_html_iframe_element **) result); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_ISINDEX])) { + } else if (dom_string_caseless_isequal(tag_name, + html->elements[DOM_HTML_ELEMENT_TYPE_ISINDEX])) { exc = _dom_html_isindex_element_create(html, namespace, prefix, (dom_html_isindex_element **) result); } else { @@ -576,8 +679,8 @@ dom_exception _dom_html_document_get_title(dom_html_document *doc, uint32_t len; exc = dom_document_get_elements_by_tag_name(doc, - doc->memoised[hds_TITLE], - &nodes); + doc->elements[DOM_HTML_ELEMENT_TYPE_TITLE], + &nodes); if (exc != DOM_NO_ERR) { return exc; } @@ -654,7 +757,7 @@ dom_exception _dom_html_document_get_body(dom_html_document *doc, uint32_t len; exc = dom_document_get_elements_by_tag_name(doc, - doc->memoised[hds_BODY], + doc->elements[DOM_HTML_ELEMENT_TYPE_BODY], &nodes); if (exc != DOM_NO_ERR) { return exc; @@ -668,7 +771,7 @@ dom_exception _dom_html_document_get_body(dom_html_document *doc, if (len == 0) { exc = dom_document_get_elements_by_tag_name(doc, - doc->memoised[hds_FRAMESET], + doc->elements[DOM_HTML_ELEMENT_TYPE_FRAMESET], &nodes); if (exc != DOM_NO_ERR) { return exc; @@ -713,9 +816,10 @@ dom_exception _dom_html_document_set_body(dom_html_document *doc, */ bool images_callback(struct dom_node_internal *node, void *ctx) { + dom_html_document *doc = ctx; if(node->type == DOM_ELEMENT_NODE && dom_string_caseless_isequal(node->name, - ((dom_html_document *)ctx)->memoised[hds_IMG])) { + doc->elements[DOM_HTML_ELEMENT_TYPE_IMG])) { return true; } return false; @@ -736,9 +840,10 @@ dom_exception _dom_html_document_get_images(dom_html_document *doc, bool applet_callback(struct dom_node_internal * node, void *ctx) { + dom_html_document *doc = ctx; if(node->type == DOM_ELEMENT_NODE && dom_string_caseless_isequal(node->name, - ((dom_html_document *)ctx)->memoised[hds_APPLET])) { + doc->elements[DOM_HTML_ELEMENT_TYPE_APPLET])) { return true; } return false; @@ -752,9 +857,10 @@ bool applet_callback(struct dom_node_internal * node, void *ctx) */ bool applets_callback(struct dom_node_internal *node, void *ctx) { + dom_html_document *doc = ctx; if(node->type == DOM_ELEMENT_NODE && dom_string_caseless_isequal(node->name, - ((dom_html_document *)ctx)->memoised[hds_OBJECT])) { + doc->elements[DOM_HTML_ELEMENT_TYPE_OBJECT])) { uint32_t len = 0; dom_html_collection *applets; if (_dom_html_collection_create(ctx, node, @@ -790,17 +896,18 @@ dom_exception _dom_html_document_get_applets(dom_html_document *doc, */ bool links_callback(struct dom_node_internal *node, void *ctx) { + dom_html_document *doc = ctx; if(node->type == DOM_ELEMENT_NODE && (dom_string_caseless_isequal(node->name, - ((dom_html_document *)ctx)->memoised[hds_A]) || + doc->elements[DOM_HTML_ELEMENT_TYPE_A]) || dom_string_caseless_isequal(node->name, - ((dom_html_document *)ctx)->memoised[hds_AREA])) + doc->elements[DOM_HTML_ELEMENT_TYPE_AREA])) ) { bool has_value = false; dom_exception err; err = dom_element_has_attribute(node, - ((dom_html_document *)ctx)->memoised[hds_href], &has_value); + doc->memoised[hds_href], &has_value); if(err !=DOM_NO_ERR) return err; @@ -831,7 +938,7 @@ static bool __dom_html_document_node_is_form(dom_node_internal *node, UNUSED(ctx); return dom_string_caseless_isequal(node->name, - doc->memoised[hds_FORM]); + doc->elements[DOM_HTML_ELEMENT_TYPE_FORM]); } dom_exception _dom_html_document_get_forms(dom_html_document *doc, @@ -868,14 +975,15 @@ dom_exception _dom_html_document_get_forms(dom_html_document *doc, */ bool anchors_callback(struct dom_node_internal *node, void *ctx) { + dom_html_document *doc = ctx; if(node->type == DOM_ELEMENT_NODE && dom_string_caseless_isequal(node->name, - ((dom_html_document *)ctx)->memoised[hds_A])) { + doc->elements[DOM_HTML_ELEMENT_TYPE_A])) { bool has_value = false; dom_exception err; err = dom_element_has_attribute(node, - ((dom_html_document *)ctx)->memoised[hds_name], &has_value); + doc->memoised[hds_name], &has_value); if(err !=DOM_NO_ERR) return err; diff --git a/src/html/html_document.h b/src/html/html_document.h index c00529b..dab4dc6 100644 --- a/src/html/html_document.h +++ b/src/html/html_document.h @@ -28,6 +28,8 @@ struct dom_html_document { /** Cached strings for html objects to use */ dom_string **memoised; + /** Cached strings for HTML element names */ + dom_string **elements; }; #include "html_document_strings.h" diff --git a/src/html/html_document_strings.h b/src/html/html_document_strings.h index 35fca73..8b5fea7 100644 --- a/src/html/html_document_strings.h +++ b/src/html/html_document_strings.h @@ -145,70 +145,6 @@ HTML_DOCUMENT_STRINGS_ACTION1(select) HTML_DOCUMENT_STRINGS_ACTION1(click) HTML_DOCUMENT_STRINGS_ACTION1(submit) HTML_DOCUMENT_STRINGS_ACTION1(reset) -/* Names for elements which get specialised. */ -HTML_DOCUMENT_STRINGS_ACTION1(HTML) -HTML_DOCUMENT_STRINGS_ACTION1(HEAD) -HTML_DOCUMENT_STRINGS_ACTION1(LINK) -HTML_DOCUMENT_STRINGS_ACTION1(TITLE) -HTML_DOCUMENT_STRINGS_ACTION1(META) -HTML_DOCUMENT_STRINGS_ACTION1(BASE) -HTML_DOCUMENT_STRINGS_ACTION1(ISINDEX) -HTML_DOCUMENT_STRINGS_ACTION1(STYLE) -HTML_DOCUMENT_STRINGS_ACTION1(BODY) -HTML_DOCUMENT_STRINGS_ACTION1(FORM) -HTML_DOCUMENT_STRINGS_ACTION1(SELECT) -HTML_DOCUMENT_STRINGS_ACTION1(OPTGROUP) -HTML_DOCUMENT_STRINGS_ACTION1(OPTION) -HTML_DOCUMENT_STRINGS_ACTION1(INPUT) -HTML_DOCUMENT_STRINGS_ACTION1(TEXTAREA) -HTML_DOCUMENT_STRINGS_ACTION1(BUTTON) -HTML_DOCUMENT_STRINGS_ACTION1(LABEL) -HTML_DOCUMENT_STRINGS_ACTION1(FIELDSET) -HTML_DOCUMENT_STRINGS_ACTION1(LEGEND) -HTML_DOCUMENT_STRINGS_ACTION1(UL) -HTML_DOCUMENT_STRINGS_ACTION1(OL) -HTML_DOCUMENT_STRINGS_ACTION1(DL) -HTML_DOCUMENT_STRINGS_ACTION1(DIRECTORY) -HTML_DOCUMENT_STRINGS_ACTION1(MENU) -HTML_DOCUMENT_STRINGS_ACTION1(LI) -HTML_DOCUMENT_STRINGS_ACTION1(BLOCKQUOTE) -HTML_DOCUMENT_STRINGS_ACTION1(DIV) -HTML_DOCUMENT_STRINGS_ACTION1(P) -HTML_DOCUMENT_STRINGS_ACTION1(H1) -HTML_DOCUMENT_STRINGS_ACTION1(H2) -HTML_DOCUMENT_STRINGS_ACTION1(H3) -HTML_DOCUMENT_STRINGS_ACTION1(H4) -HTML_DOCUMENT_STRINGS_ACTION1(H5) -HTML_DOCUMENT_STRINGS_ACTION1(H6) -HTML_DOCUMENT_STRINGS_ACTION1(Q) -HTML_DOCUMENT_STRINGS_ACTION1(PRE) -HTML_DOCUMENT_STRINGS_ACTION1(BR) -HTML_DOCUMENT_STRINGS_ACTION1(BASEFONT) -HTML_DOCUMENT_STRINGS_ACTION1(FONT) -HTML_DOCUMENT_STRINGS_ACTION1(HR) -HTML_DOCUMENT_STRINGS_ACTION1(INS) -HTML_DOCUMENT_STRINGS_ACTION1(DEL) -HTML_DOCUMENT_STRINGS_ACTION1(A) -HTML_DOCUMENT_STRINGS_ACTION1(IMG) -HTML_DOCUMENT_STRINGS_ACTION1(OBJECT) -HTML_DOCUMENT_STRINGS_ACTION1(PARAM) -HTML_DOCUMENT_STRINGS_ACTION1(APPLET) -HTML_DOCUMENT_STRINGS_ACTION1(MAP) -HTML_DOCUMENT_STRINGS_ACTION1(AREA) -HTML_DOCUMENT_STRINGS_ACTION1(SCRIPT) -HTML_DOCUMENT_STRINGS_ACTION1(TABLE) -HTML_DOCUMENT_STRINGS_ACTION1(CAPTION) -HTML_DOCUMENT_STRINGS_ACTION1(COL) -HTML_DOCUMENT_STRINGS_ACTION1(COLGROUP) -HTML_DOCUMENT_STRINGS_ACTION1(THEAD) -HTML_DOCUMENT_STRINGS_ACTION1(TFOOT) -HTML_DOCUMENT_STRINGS_ACTION1(TBODY) -HTML_DOCUMENT_STRINGS_ACTION1(TR) -HTML_DOCUMENT_STRINGS_ACTION1(TH) -HTML_DOCUMENT_STRINGS_ACTION1(TD) -HTML_DOCUMENT_STRINGS_ACTION1(FRAMESET) -HTML_DOCUMENT_STRINGS_ACTION1(FRAME) -HTML_DOCUMENT_STRINGS_ACTION1(IFRAME) #ifdef HTML_DOCUMENT_STRINGS_SUFFIX HTML_DOCUMENT_STRINGS_SUFFIX diff --git a/src/html/html_element.h b/src/html/html_element.h index e742a1a..e32b09e 100644 --- a/src/html/html_element.h +++ b/src/html/html_element.h @@ -9,6 +9,7 @@ #define dom_internal_html_element_h_ #include +#include #include "core/element.h" diff --git a/src/html/html_fieldset_element.c b/src/html/html_fieldset_element.c index 2ab873e..15ea812 100644 --- a/src/html/html_fieldset_element.c +++ b/src/html/html_fieldset_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_field_set_element_initialise(struct dom_html_document *d struct dom_html_field_set_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_FIELDSET], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_FIELDSET], + namespace, prefix); } /** @@ -136,7 +136,7 @@ dom_exception dom_html_field_set_element_get_form( while (form_tmp != NULL) { if (form_tmp->type == DOM_ELEMENT_NODE && dom_string_caseless_isequal(form_tmp->name, - doc->memoised[hds_FORM])) + doc->elements[DOM_HTML_ELEMENT_TYPE_FORM])) break; form_tmp = form_tmp->parent; diff --git a/src/html/html_font_element.c b/src/html/html_font_element.c index aadcb22..0be7ee5 100644 --- a/src/html/html_font_element.c +++ b/src/html/html_font_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_font_element_initialise(struct dom_html_document *doc, struct dom_html_font_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_FONT], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_FONT], + namespace, prefix); } /** diff --git a/src/html/html_form_element.c b/src/html/html_form_element.c index 0606ba6..ee62c02 100644 --- a/src/html/html_form_element.c +++ b/src/html/html_form_element.c @@ -70,8 +70,8 @@ dom_exception _dom_html_form_element_initialise(struct dom_html_document *doc, dom_exception err; err = _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_FORM], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_FORM], + namespace, prefix); return err; } @@ -283,16 +283,16 @@ static bool _dom_is_form_control(struct dom_node_internal *node, void *ctx) /* Form controls are INPUT TEXTAREA SELECT and BUTTON*/ if (dom_string_caseless_isequal(node->name, - doc->memoised[hds_INPUT])) + doc->elements[DOM_HTML_ELEMENT_TYPE_INPUT])) return ((dom_html_input_element *)node)->form == form; if (dom_string_caseless_isequal(node->name, - doc->memoised[hds_TEXTAREA])) + doc->elements[DOM_HTML_ELEMENT_TYPE_TEXTAREA])) return ((dom_html_text_area_element *)node)->form == form; if (dom_string_caseless_isequal(node->name, - doc->memoised[hds_SELECT])) + doc->elements[DOM_HTML_ELEMENT_TYPE_SELECT])) return ((dom_html_select_element *)node)->form == form; if (dom_string_caseless_isequal(node->name, - doc->memoised[hds_BUTTON])) { + doc->elements[DOM_HTML_ELEMENT_TYPE_BUTTON])) { return ((dom_html_button_element *)node)->form == form; } diff --git a/src/html/html_frame_element.c b/src/html/html_frame_element.c index 9e1ea1e..b8b0a74 100644 --- a/src/html/html_frame_element.c +++ b/src/html/html_frame_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_frame_element_initialise(struct dom_html_document *doc, struct dom_html_frame_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_FRAME], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_FRAME], + namespace, prefix); } /** @@ -97,7 +97,7 @@ dom_exception dom_html_frame_element_get_no_resize(dom_html_frame_element *ele, bool *no_resize) { return dom_html_element_get_bool_property(&ele->base, "noresize", - SLEN("noresize"), no_resize); + SLEN("noresize"), no_resize); } /** @@ -111,7 +111,7 @@ dom_exception dom_html_frame_element_set_no_resize(dom_html_frame_element *ele, bool no_resize) { return dom_html_element_set_bool_property(&ele->base, "noresize", - SLEN("noresize"), no_resize); + SLEN("noresize"), no_resize); } /*------------------------------------------------------------------------*/ diff --git a/src/html/html_frameset_element.c b/src/html/html_frameset_element.c index 871906b..9d9680b 100644 --- a/src/html/html_frameset_element.c +++ b/src/html/html_frameset_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_frame_set_element_initialise(struct dom_html_document *d struct dom_html_frame_set_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_FRAMESET], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_FRAMESET], + namespace, prefix); } /** diff --git a/src/html/html_head_element.c b/src/html/html_head_element.c index 00d4476..7082cef 100644 --- a/src/html/html_head_element.c +++ b/src/html/html_head_element.c @@ -57,8 +57,8 @@ dom_exception _dom_html_head_element_initialise(struct dom_html_document *doc, struct dom_html_head_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_HEAD], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_HEAD], + namespace, prefix); } /** diff --git a/src/html/html_heading_element.c b/src/html/html_heading_element.c index ba2842f..ce298fb 100644 --- a/src/html/html_heading_element.c +++ b/src/html/html_heading_element.c @@ -63,8 +63,7 @@ dom_exception _dom_html_heading_element_initialise(struct dom_html_document *doc dom_string *prefix, struct dom_html_heading_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - tag_name, namespace, - prefix); + tag_name, namespace, prefix); } /** diff --git a/src/html/html_hr_element.c b/src/html/html_hr_element.c index eb8aa68..7ecab7a 100644 --- a/src/html/html_hr_element.c +++ b/src/html/html_hr_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_hr_element_initialise(struct dom_html_document *doc, struct dom_html_hr_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_HR], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_HR], + namespace, prefix); } /** diff --git a/src/html/html_html_element.c b/src/html/html_html_element.c index ee26019..0a91efe 100644 --- a/src/html/html_html_element.c +++ b/src/html/html_html_element.c @@ -28,7 +28,7 @@ static struct dom_element_protected_vtable _protect_vtable = { * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ dom_exception _dom_html_html_element_create(struct dom_html_document *doc, - dom_string *namespace, dom_string *prefix, + dom_string *namespace, dom_string *prefix, struct dom_html_html_element **ele) { struct dom_node_internal *node; @@ -53,11 +53,12 @@ dom_exception _dom_html_html_element_create(struct dom_html_document *doc, * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ dom_exception _dom_html_html_element_initialise(struct dom_html_document *doc, - dom_string *namespace, dom_string *prefix, + dom_string *namespace, dom_string *prefix, struct dom_html_html_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_HTML], namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_HTML], + namespace, prefix); } /** diff --git a/src/html/html_iframe_element.c b/src/html/html_iframe_element.c index 41a30d9..80b39a7 100644 --- a/src/html/html_iframe_element.c +++ b/src/html/html_iframe_element.c @@ -46,7 +46,8 @@ dom_exception _dom_html_iframe_element_create(struct dom_html_document *doc, node->base.vtable = &_dom_html_element_vtable; node->vtable = &_protect_vtable; - return _dom_html_iframe_element_initialise(doc, namespace, prefix, *ele); + return _dom_html_iframe_element_initialise(doc, + namespace, prefix, *ele); } /** @@ -61,8 +62,8 @@ dom_exception _dom_html_iframe_element_initialise(struct dom_html_document *doc, struct dom_html_iframe_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_IFRAME], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_IFRAME], + namespace, prefix); } /** diff --git a/src/html/html_image_element.c b/src/html/html_image_element.c index fe20cfa..4c5a5f3 100644 --- a/src/html/html_image_element.c +++ b/src/html/html_image_element.c @@ -62,8 +62,8 @@ dom_exception _dom_html_image_element_initialise(struct dom_html_document *doc, struct dom_html_image_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_IMG], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_IMG], + namespace, prefix); } /** diff --git a/src/html/html_input_element.c b/src/html/html_input_element.c index bbea087..a90ec40 100644 --- a/src/html/html_input_element.c +++ b/src/html/html_input_element.c @@ -69,8 +69,8 @@ dom_exception _dom_html_input_element_initialise(struct dom_html_document *doc, ele->checked_set = false; return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_INPUT], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_INPUT], + namespace, prefix); } /** diff --git a/src/html/html_isindex_element.c b/src/html/html_isindex_element.c index e79e011..51611b3 100644 --- a/src/html/html_isindex_element.c +++ b/src/html/html_isindex_element.c @@ -59,8 +59,8 @@ dom_exception _dom_html_isindex_element_initialise(struct dom_html_document *doc struct dom_html_isindex_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_ISINDEX], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_ISINDEX], + namespace, prefix); } /** diff --git a/src/html/html_label_element.c b/src/html/html_label_element.c index c3a522f..2303892 100644 --- a/src/html/html_label_element.c +++ b/src/html/html_label_element.c @@ -59,7 +59,7 @@ dom_exception _dom_html_label_element_initialise(struct dom_html_document *doc, struct dom_html_label_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_LABEL], + doc->elements[DOM_HTML_ELEMENT_TYPE_LABEL], namespace, prefix); } @@ -133,7 +133,7 @@ dom_exception dom_html_label_element_get_form( while (form_tmp != NULL) { if (form_tmp->type == DOM_ELEMENT_NODE && dom_string_caseless_isequal(form_tmp->name, - doc->memoised[hds_FORM])) + doc->elements[DOM_HTML_ELEMENT_TYPE_FORM])) break; form_tmp = form_tmp->parent; diff --git a/src/html/html_legend_element.c b/src/html/html_legend_element.c index 2d0e939..1f297e2 100644 --- a/src/html/html_legend_element.c +++ b/src/html/html_legend_element.c @@ -63,8 +63,8 @@ dom_exception _dom_html_legend_element_initialise(struct dom_html_document *doc, struct dom_html_legend_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_LEGEND], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_LEGEND], + namespace, prefix); } /** @@ -106,7 +106,7 @@ dom_exception dom_html_legend_element_get_form( while (field_set != NULL) { if (field_set->type == DOM_ELEMENT_NODE && dom_string_caseless_isequal(field_set->name, - doc->memoised[hds_FIELDSET])) + doc->elements[DOM_HTML_ELEMENT_TYPE_FIELDSET])) break; field_set = field_set->parent; diff --git a/src/html/html_li_element.c b/src/html/html_li_element.c index 7dd1d5b..f2c560e 100644 --- a/src/html/html_li_element.c +++ b/src/html/html_li_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_li_element_initialise(struct dom_html_document *doc, struct dom_html_li_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_LI], - namespace, lifix); + doc->elements[DOM_HTML_ELEMENT_TYPE_LI], + namespace, lifix); } /** diff --git a/src/html/html_link_element.c b/src/html/html_link_element.c index 7ed026d..8022a7b 100644 --- a/src/html/html_link_element.c +++ b/src/html/html_link_element.c @@ -59,8 +59,8 @@ dom_exception _dom_html_link_element_initialise(struct dom_html_document *doc, struct dom_html_link_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_LINK], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_LINK], + namespace, prefix); } /** diff --git a/src/html/html_map_element.c b/src/html/html_map_element.c index cf0fe5e..d20c3ce 100644 --- a/src/html/html_map_element.c +++ b/src/html/html_map_element.c @@ -63,8 +63,8 @@ dom_exception _dom_html_map_element_initialise(struct dom_html_document *doc, struct dom_html_map_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_MAP], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_MAP], + namespace, prefix); } /** @@ -163,11 +163,11 @@ dom_exception dom_html_map_element_set_##attr( \ SIMPLE_GET_SET(name); /* The callback function for _dom_html_collection_create*/ -bool callback(struct dom_node_internal *node, void *ctx) +bool callback(struct dom_node_internal *node, void *ctx) { if(node->type == DOM_ELEMENT_NODE && dom_string_caseless_isequal(node->name, - ((dom_html_document *)ctx)->memoised[hds_AREA])) + ((dom_html_document *)ctx)->elements[DOM_HTML_ELEMENT_TYPE_AREA])) { return true; } diff --git a/src/html/html_menu_element.c b/src/html/html_menu_element.c index af0f34c..aadd823 100644 --- a/src/html/html_menu_element.c +++ b/src/html/html_menu_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_menu_element_initialise(struct dom_html_document *doc, struct dom_html_menu_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_MENU], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_MENU], + namespace, prefix); } /** diff --git a/src/html/html_meta_element.c b/src/html/html_meta_element.c index 924a64d..05e6a4f 100644 --- a/src/html/html_meta_element.c +++ b/src/html/html_meta_element.c @@ -57,8 +57,8 @@ dom_exception _dom_html_meta_element_initialise(struct dom_html_document *doc, struct dom_html_meta_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_META], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_META], + namespace, prefix); } /** diff --git a/src/html/html_mod_element.c b/src/html/html_mod_element.c index f20a994..20f80d1 100644 --- a/src/html/html_mod_element.c +++ b/src/html/html_mod_element.c @@ -61,8 +61,7 @@ dom_exception _dom_html_mod_element_initialise(struct dom_html_document *doc, dom_string *prefix, struct dom_html_mod_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - tag_name, - namespace, prefix); + tag_name, namespace, prefix); } /** diff --git a/src/html/html_object_element.c b/src/html/html_object_element.c index 1568630..27d3f5a 100644 --- a/src/html/html_object_element.c +++ b/src/html/html_object_element.c @@ -64,7 +64,7 @@ dom_exception _dom_html_object_element_initialise(struct dom_html_document *doc, struct dom_html_object_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_OBJECT], + doc->elements[DOM_HTML_ELEMENT_TYPE_OBJECT], namespace, prefix); } @@ -240,7 +240,7 @@ dom_exception dom_html_object_element_get_form( while (form_tmp != NULL) { if (form_tmp->type == DOM_ELEMENT_NODE && dom_string_caseless_isequal(form_tmp->name, - doc->memoised[hds_FORM])) + doc->elements[DOM_HTML_ELEMENT_TYPE_FORM])) break; form_tmp = form_tmp->parent; diff --git a/src/html/html_olist_element.c b/src/html/html_olist_element.c index 3046553..6595ea5 100644 --- a/src/html/html_olist_element.c +++ b/src/html/html_olist_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_olist_element_initialise(struct dom_html_document *doc, struct dom_html_olist_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_OL], - namespace, o_listfix); + doc->elements[DOM_HTML_ELEMENT_TYPE_OL], + namespace, o_listfix); } /** diff --git a/src/html/html_opt_group_element.c b/src/html/html_opt_group_element.c index cb0c207..cdee6e7 100644 --- a/src/html/html_opt_group_element.c +++ b/src/html/html_opt_group_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_opt_group_element_initialise(struct dom_html_document *d struct dom_html_opt_group_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_OPTGROUP], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_OPTGROUP], + namespace, prefix); } /** diff --git a/src/html/html_option_element.c b/src/html/html_option_element.c index b777c5f..e352562 100644 --- a/src/html/html_option_element.c +++ b/src/html/html_option_element.c @@ -66,8 +66,8 @@ dom_exception _dom_html_option_element_initialise(struct dom_html_document *doc, ele->default_selected_set = false; return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_OPTION], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_OPTION], + namespace, prefix); } /** @@ -106,7 +106,7 @@ dom_exception dom_html_option_element_get_form( while (select != NULL) { if (select->type == DOM_ELEMENT_NODE && dom_string_caseless_isequal(select->name, - doc->memoised[hds_SELECT])) + doc->elements[DOM_HTML_ELEMENT_TYPE_SELECT])) break; select = select->parent; @@ -265,7 +265,7 @@ dom_exception dom_html_option_element_get_index( if((dom_node_internal *)option == n) { *index = idx; break; - } else if(dom_string_caseless_isequal(n->name,doc->memoised[hds_OPTION])) { + } else if(dom_string_caseless_isequal(n->name,doc->elements[DOM_HTML_ELEMENT_TYPE_OPTION])) { idx += 1; } } diff --git a/src/html/html_options_collection.c b/src/html/html_options_collection.c index 3e06915..8f6f4c4 100644 --- a/src/html/html_options_collection.c +++ b/src/html/html_options_collection.c @@ -41,7 +41,7 @@ dom_exception _dom_html_options_collection_create(struct dom_html_document *doc, return DOM_NO_MEM_ERR; return _dom_html_options_collection_initialise(doc, *col, root, - ic, ctx); + ic, ctx); } /** diff --git a/src/html/html_paragraph_element.c b/src/html/html_paragraph_element.c index 20a6c28..63c50b2 100644 --- a/src/html/html_paragraph_element.c +++ b/src/html/html_paragraph_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_paragraph_element_initialise(struct dom_html_document *d struct dom_html_paragraph_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_P], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_P], + namespace, prefix); } /** diff --git a/src/html/html_param_element.c b/src/html/html_param_element.c index 6bda015..a858717 100644 --- a/src/html/html_param_element.c +++ b/src/html/html_param_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_param_element_initialise(struct dom_html_document *doc, struct dom_html_param_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_PARAM], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_PARAM], + namespace, prefix); } /** diff --git a/src/html/html_pre_element.c b/src/html/html_pre_element.c index 8f564c2..c5f7ced 100644 --- a/src/html/html_pre_element.c +++ b/src/html/html_pre_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_pre_element_initialise(struct dom_html_document *doc, struct dom_html_pre_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_PRE], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_PRE], + namespace, prefix); } /** diff --git a/src/html/html_quote_element.c b/src/html/html_quote_element.c index d16bad8..988ef5b 100644 --- a/src/html/html_quote_element.c +++ b/src/html/html_quote_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_quote_element_initialise(struct dom_html_document *doc, struct dom_html_quote_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_Q], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_Q], + namespace, prefix); } /** diff --git a/src/html/html_script_element.c b/src/html/html_script_element.c index e0038f5..3bdf8cd 100644 --- a/src/html/html_script_element.c +++ b/src/html/html_script_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_script_element_initialise(struct dom_html_document *doc, struct dom_html_script_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_SCRIPT], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_SCRIPT], + namespace, prefix); } /** diff --git a/src/html/html_select_element.c b/src/html/html_select_element.c index 3d199bb..438a365 100644 --- a/src/html/html_select_element.c +++ b/src/html/html_select_element.c @@ -65,7 +65,7 @@ dom_exception _dom_html_select_element_initialise(struct dom_html_document *doc, ele->form = NULL; return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_SELECT], + doc->elements[DOM_HTML_ELEMENT_TYPE_SELECT], namespace, prefix); } @@ -695,7 +695,8 @@ bool is_option(struct dom_node_internal *node, void *ctx) dom_html_select_element *ele = ctx; dom_html_document *doc = (dom_html_document *) dom_node_get_owner(ele); - if (dom_string_isequal(node->name, doc->memoised[hds_OPTION])) + if (dom_string_isequal(node->name, + doc->elements[DOM_HTML_ELEMENT_TYPE_OPTION])) return true; return false; diff --git a/src/html/html_table_element.c b/src/html/html_table_element.c index d387e8d..cdf1714 100644 --- a/src/html/html_table_element.c +++ b/src/html/html_table_element.c @@ -65,7 +65,7 @@ dom_exception _dom_html_table_element_initialise(struct dom_html_document *doc, struct dom_html_table_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_TABLE], + doc->elements[DOM_HTML_ELEMENT_TYPE_TABLE], namespace, prefix); } @@ -183,7 +183,9 @@ dom_exception dom_html_table_element_get_caption( for (node_tmp = node_tmp->first_child; node_tmp != NULL; node_tmp = node_tmp->next) { if((node_tmp->type == DOM_ELEMENT_NODE) && - dom_string_caseless_isequal(doc->memoised[hds_CAPTION],node_tmp->name)) { + dom_string_caseless_isequal( + doc->elements[DOM_HTML_ELEMENT_TYPE_CAPTION], + node_tmp->name)) { break; } } @@ -212,8 +214,9 @@ dom_exception dom_html_table_element_set_caption( if (check_node == NULL) { return DOM_HIERARCHY_REQUEST_ERR; } - if (!dom_string_caseless_isequal(doc->memoised[hds_CAPTION], - check_node->name)) { + if (!dom_string_caseless_isequal( + doc->elements[DOM_HTML_ELEMENT_TYPE_CAPTION], + check_node->name)) { return DOM_HIERARCHY_REQUEST_ERR; } @@ -239,7 +242,9 @@ dom_exception dom_html_table_element_get_t_head( for (node_tmp = node_tmp->first_child; node_tmp != NULL; node_tmp = node_tmp->next) { if((node_tmp->type == DOM_ELEMENT_NODE) && - dom_string_caseless_isequal(doc->memoised[hds_THEAD],node_tmp->name)) { + dom_string_caseless_isequal( + doc->elements[DOM_HTML_ELEMENT_TYPE_THEAD], + node_tmp->name)) { break; } } @@ -267,7 +272,9 @@ dom_exception dom_html_table_element_set_t_head( if (check_node == NULL) { return DOM_HIERARCHY_REQUEST_ERR; } - if (!dom_string_caseless_isequal(doc->memoised[hds_CAPTION],check_node->name)) { + if (!dom_string_caseless_isequal( + doc->elements[DOM_HTML_ELEMENT_TYPE_CAPTION], + check_node->name)) { return DOM_HIERARCHY_REQUEST_ERR; } @@ -293,8 +300,9 @@ dom_exception dom_html_table_element_get_t_foot( for (node_tmp = node_tmp->first_child; node_tmp != NULL; node_tmp = node_tmp->next) { if ((node_tmp->type == DOM_ELEMENT_NODE) && - dom_string_caseless_isequal(doc->memoised[hds_TFOOT], - node_tmp->name)) { + dom_string_caseless_isequal( + doc->elements[DOM_HTML_ELEMENT_TYPE_TFOOT], + node_tmp->name)) { break; } } @@ -323,7 +331,9 @@ dom_exception dom_html_table_element_set_t_foot( return DOM_HIERARCHY_REQUEST_ERR; } - if(!dom_string_caseless_isequal(doc->memoised[hds_TFOOT],check_node->name)) { + if(!dom_string_caseless_isequal( + doc->elements[DOM_HTML_ELEMENT_TYPE_TFOOT], + check_node->name)) { return DOM_HIERARCHY_REQUEST_ERR; } @@ -345,9 +355,10 @@ dom_exception dom_html_table_element_set_t_foot( */ bool table_rows_callback(struct dom_node_internal *node, void *ctx) { + dom_html_document *doc = ctx; if(node->type == DOM_ELEMENT_NODE && dom_string_caseless_isequal(node->name, - ((dom_html_document *)ctx)->memoised[hds_TR])) { + doc->elements[DOM_HTML_ELEMENT_TYPE_TR])) { return true; } return false; @@ -378,9 +389,10 @@ dom_exception dom_html_table_element_get_rows( */ bool table_t_bodies_callback(struct dom_node_internal *node, void *ctx) { + dom_html_document *doc = ctx; if(node->type == DOM_ELEMENT_NODE && dom_string_caseless_isequal(node->name, - ((dom_html_document *)ctx)->memoised[hds_TBODY])) { + doc->elements[DOM_HTML_ELEMENT_TYPE_TBODY])) { return true; } return false; @@ -492,7 +504,7 @@ dom_exception dom_html_table_element_create_t_foot( dom_node *new_t_foot; exp = _dom_html_table_section_element_create(doc, - doc->memoised[hds_TFOOT], + doc->elements[DOM_HTML_ELEMENT_TYPE_TFOOT], ((dom_node_internal *)element)->namespace, ((dom_node_internal *)element)->prefix, (dom_html_table_section_element **)t_foot); @@ -565,7 +577,7 @@ dom_exception dom_html_table_element_create_t_head( dom_node *new_t_head; exp = _dom_html_table_section_element_create(doc, - doc->memoised[hds_THEAD], + doc->elements[DOM_HTML_ELEMENT_TYPE_THEAD], ((dom_node_internal *)element)->namespace, ((dom_node_internal *)element)->prefix, (dom_html_table_section_element **)t_head); @@ -643,7 +655,7 @@ dom_exception dom_html_table_element_create_t_body( dom_node *new_t_body; exp = _dom_html_table_section_element_create(doc, - doc->memoised[hds_TBODY], + doc->elements[DOM_HTML_ELEMENT_TYPE_TBODY], ((dom_node_internal *)element)->namespace, ((dom_node_internal *)element)->prefix, t_body); @@ -768,7 +780,9 @@ dom_exception dom_html_table_element_insert_row( for (n = n->first_child; n != NULL; n = n->next) { if((n->type == DOM_ELEMENT_NODE) && - dom_string_caseless_isequal(doc->memoised[hds_TBODY],n->name)) { + dom_string_caseless_isequal( + doc->elements[DOM_HTML_ELEMENT_TYPE_TBODY], + n->name)) { exp = dom_html_table_section_element_get_rows((dom_html_table_section_element *)n, &rows); exp = dom_html_collection_get_length(rows, §ion_len); @@ -881,7 +895,9 @@ dom_exception dom_html_table_element_delete_row( for (n = n->first_child; n != NULL; n = n->next) { if((n->type == DOM_ELEMENT_NODE) && - dom_string_caseless_isequal(doc->memoised[hds_TBODY],n->name)) { + dom_string_caseless_isequal( + doc->elements[DOM_HTML_ELEMENT_TYPE_TBODY], + n->name)) { exp = dom_html_table_section_element_get_rows ((dom_html_table_section_element *)n, &rows); if(exp != DOM_NO_ERR) { diff --git a/src/html/html_tablecaption_element.c b/src/html/html_tablecaption_element.c index d2c3fc6..ddb2d5c 100644 --- a/src/html/html_tablecaption_element.c +++ b/src/html/html_tablecaption_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_table_caption_element_initialise(struct dom_html_documen struct dom_html_table_caption_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_CAPTION], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_CAPTION], + namespace, prefix); } /** diff --git a/src/html/html_tablecell_element.c b/src/html/html_tablecell_element.c index 796bbc9..c881440 100644 --- a/src/html/html_tablecell_element.c +++ b/src/html/html_tablecell_element.c @@ -47,7 +47,8 @@ dom_exception _dom_html_table_cell_element_create(struct dom_html_document *doc, node->base.vtable = &_dom_html_element_vtable; node->vtable = &_protect_vtable; - return _dom_html_table_cell_element_initialise(doc, tag_name, namespace, prefix, *ele); + return _dom_html_table_cell_element_initialise(doc, tag_name, + namespace, prefix, *ele); } /** @@ -185,7 +186,9 @@ dom_exception dom_html_table_cell_element_get_cell_index( int32_t cnt = 0; dom_node_internal *root; while(n != NULL) { - if(dom_string_caseless_isequal(doc->memoised[hds_TR],n->name)) { + if(dom_string_caseless_isequal( + doc->elements[DOM_HTML_ELEMENT_TYPE_TR], + n->name)) { break; } n = n->parent; @@ -195,8 +198,12 @@ dom_exception dom_html_table_cell_element_get_cell_index( if(n == (dom_node_internal *)table_cell) { break; } else if((n->type == DOM_ELEMENT_NODE) && - (dom_string_caseless_isequal(doc->memoised[hds_TD],n->name) || - dom_string_caseless_isequal(doc->memoised[hds_TH],n->name))) { + (dom_string_caseless_isequal( + doc->elements[DOM_HTML_ELEMENT_TYPE_TD], + n->name) || + dom_string_caseless_isequal( + doc->elements[DOM_HTML_ELEMENT_TYPE_TH], + n->name))) { cnt += 1; } if(n->first_child != NULL) { @@ -233,8 +240,8 @@ dom_exception dom_html_table_cell_element_get_cell_index( dom_exception dom_html_table_cell_element_get_col_span( dom_html_table_cell_element *table_cell, dom_ulong *col_span) { - return dom_html_element_get_dom_ulong_property(&table_cell->base, "colspan", - SLEN("colspan"), col_span); + return dom_html_element_get_dom_ulong_property(&table_cell->base, + "colspan", SLEN("colspan"), col_span); } /** @@ -247,8 +254,8 @@ dom_exception dom_html_table_cell_element_get_col_span( dom_exception dom_html_table_cell_element_set_col_span( dom_html_table_cell_element *table_cell, dom_ulong col_span) { - return dom_html_element_set_dom_ulong_property(&table_cell->base, "colspan", - SLEN("colspan"), col_span); + return dom_html_element_set_dom_ulong_property(&table_cell->base, + "colspan", SLEN("colspan"), col_span); } /** @@ -261,8 +268,8 @@ dom_exception dom_html_table_cell_element_set_col_span( dom_exception dom_html_table_cell_element_get_row_span( dom_html_table_cell_element *table_cell, dom_ulong *row_span) { - return dom_html_element_get_dom_ulong_property(&table_cell->base, "rowspan", - SLEN("rowspan"), row_span); + return dom_html_element_get_dom_ulong_property(&table_cell->base, + "rowspan", SLEN("rowspan"), row_span); } /** @@ -275,8 +282,8 @@ dom_exception dom_html_table_cell_element_get_row_span( dom_exception dom_html_table_cell_element_set_row_span( dom_html_table_cell_element *table_cell, dom_ulong row_span) { - return dom_html_element_set_dom_ulong_property(&table_cell->base, "rowspan", - SLEN("rowspan"), row_span); + return dom_html_element_set_dom_ulong_property(&table_cell->base, + "rowspan", SLEN("rowspan"), row_span); } /** diff --git a/src/html/html_tablecol_element.c b/src/html/html_tablecol_element.c index cf21a24..d3d985b 100644 --- a/src/html/html_tablecol_element.c +++ b/src/html/html_tablecol_element.c @@ -46,7 +46,8 @@ dom_exception _dom_html_table_col_element_create(struct dom_html_document *doc, node->base.vtable = &_dom_html_element_vtable; node->vtable = &_protect_vtable; - return _dom_html_table_col_element_initialise(doc, tag_name, namespace, prefix, *ele); + return _dom_html_table_col_element_initialise(doc, tag_name, + namespace, prefix, *ele); } /** @@ -61,8 +62,7 @@ dom_exception _dom_html_table_col_element_initialise(struct dom_html_document *d struct dom_html_table_col_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - tag_name, - namespace, prefix); + tag_name, namespace, prefix); } /** diff --git a/src/html/html_tablerow_element.c b/src/html/html_tablerow_element.c index e4d3514..0a0fb1e 100644 --- a/src/html/html_tablerow_element.c +++ b/src/html/html_tablerow_element.c @@ -49,7 +49,8 @@ dom_exception _dom_html_table_row_element_create(struct dom_html_document *doc, node->base.vtable = &_dom_html_element_vtable; node->vtable = &_protect_vtable; - return _dom_html_table_row_element_initialise(doc, namespace, prefix, *ele); + return _dom_html_table_row_element_initialise(doc, + namespace, prefix, *ele); } /** @@ -64,7 +65,7 @@ dom_exception _dom_html_table_row_element_initialise(struct dom_html_document *d struct dom_html_table_row_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_TR], + doc->elements[DOM_HTML_ELEMENT_TYPE_TR], namespace, prefix); } @@ -185,21 +186,26 @@ dom_exception dom_html_table_row_element_get_row_index( uint32_t count = 0; - for(n = n->first_child; n != (dom_node_internal *)table_row; + for (n = n->first_child; n != (dom_node_internal *)table_row; n = n->next) { - if(n->type == DOM_ELEMENT_NODE && - dom_string_caseless_isequal(n->name,doc->memoised[hds_TR])) { + if(n->type == DOM_ELEMENT_NODE && + dom_string_caseless_isequal(n->name, + doc->elements[DOM_HTML_ELEMENT_TYPE_TR])) { count += 1; - } + } } - if(dom_string_caseless_isequal((parent->parent)->name, doc->memoised[hds_TABLE]) && - dom_string_caseless_isequal(parent->name, doc->memoised[hds_THEAD]) - ) { + if (dom_string_caseless_isequal((parent->parent)->name, + doc->elements[DOM_HTML_ELEMENT_TYPE_TABLE]) && + dom_string_caseless_isequal(parent->name, + doc->elements[DOM_HTML_ELEMENT_TYPE_THEAD])) { *row_index = count; - }else if(dom_string_caseless_isequal((parent->parent)->name, doc->memoised[hds_TABLE]) && - (dom_string_caseless_isequal(parent->name, doc->memoised[hds_TBODY]) || - dom_string_caseless_isequal(parent->name, doc->memoised[hds_TFOOT]))) { + } else if (dom_string_caseless_isequal((parent->parent)->name, + doc->elements[DOM_HTML_ELEMENT_TYPE_TABLE]) && + (dom_string_caseless_isequal(parent->name, + doc->elements[DOM_HTML_ELEMENT_TYPE_TBODY]) || + dom_string_caseless_isequal(parent->name, + doc->elements[DOM_HTML_ELEMENT_TYPE_TFOOT]))) { uint32_t len; dom_html_table_section_element *t_head; dom_html_collection *rows; @@ -227,7 +233,8 @@ dom_exception dom_html_table_row_element_get_row_index( for (n = n->first_child;n != parent && n != NULL; n = n->next) { - if (dom_string_caseless_isequal(n->name, doc->memoised[hds_TBODY])) { + if (dom_string_caseless_isequal(n->name, + doc->elements[DOM_HTML_ELEMENT_TYPE_TBODY])) { exp = dom_html_table_section_element_get_rows( (dom_html_table_section_element *)n, &rows); @@ -265,12 +272,13 @@ dom_exception dom_html_table_row_element_get_section_row_index( dom_node_internal *n = ((dom_node_internal *)table_row)->parent; dom_html_document *doc = (dom_html_document *) ((dom_node_internal *) table_row)->owner; int32_t count = 0; - for(n = n->first_child; n != (dom_node_internal *)table_row; + for (n = n->first_child; n != (dom_node_internal *)table_row; n = n->next) { - if(n->type == DOM_ELEMENT_NODE && - dom_string_caseless_isequal(n->name, doc->memoised[hds_TR])) { + if (n->type == DOM_ELEMENT_NODE && + dom_string_caseless_isequal(n->name, + doc->elements[DOM_HTML_ELEMENT_TYPE_TR])) { count += 1; - } + } } *section_row_index = count; return DOM_NO_ERR; @@ -285,9 +293,10 @@ dom_exception dom_html_table_row_element_get_section_row_index( */ bool table_cells_callback(struct dom_node_internal *node, void *ctx) { - if(node->type == DOM_ELEMENT_NODE && + dom_html_document *doc = ctx; + if (node->type == DOM_ELEMENT_NODE && dom_string_caseless_isequal(node->name, - ((dom_html_document *)ctx)->memoised[hds_TD])) { + doc->elements[DOM_HTML_ELEMENT_TYPE_TD])) { return true; } return false; @@ -323,33 +332,34 @@ dom_exception dom_html_table_row_element_insert_cell( dom_node *node; /*< The node at the (index)th position*/ - dom_html_collection *cells; /*< The collection of cells in input table_row_element*/ + dom_html_collection *cells; /*< The collection of cells in input table_row_element*/ uint32_t len; /*< The size of the cell collection */ dom_exception exp; /*< Variable for getting the exceptions*/ - exp = _dom_html_element_create(doc, doc->memoised[hds_TD], + exp = _dom_html_element_create(doc, + doc->elements[DOM_HTML_ELEMENT_TYPE_TD], ((dom_node_internal *)element)->namespace, ((dom_node_internal *)element)->prefix, cell); - if(exp != DOM_NO_ERR) + if (exp != DOM_NO_ERR) return exp; exp = dom_html_table_row_element_get_cells(element, &cells); - if(exp != DOM_NO_ERR) { + if (exp != DOM_NO_ERR) { dom_node_unref(*cell); return exp; } exp = dom_html_collection_get_length(cells, &len); - if(exp != DOM_NO_ERR) { + if (exp != DOM_NO_ERR) { dom_node_unref(*cell); return exp; } - if(index < -1 || index > (int32_t)len) { + if (index < -1 || index > (int32_t)len) { /* Check for index validity */ dom_html_collection_unref (cells); return DOM_INDEX_SIZE_ERR; - } else if(index == -1 || index == (int32_t)len) { + } else if (index == -1 || index == (int32_t)len) { dom_node *new_cell; dom_html_collection_unref(cells); @@ -363,8 +373,7 @@ dom_exception dom_html_table_row_element_insert_cell( dom_html_collection_unref(cells); return dom_node_insert_before(element, - *cell, node, - &new_cell); + *cell, node, &new_cell); } } diff --git a/src/html/html_tablesection_element.c b/src/html/html_tablesection_element.c index dbc0902..9718612 100644 --- a/src/html/html_tablesection_element.c +++ b/src/html/html_tablesection_element.c @@ -50,7 +50,8 @@ dom_exception _dom_html_table_section_element_create(struct dom_html_document *d node->base.vtable = &_dom_html_element_vtable; node->vtable = &_protect_vtable; - return _dom_html_table_section_element_initialise(doc, tag_name, namespace, prefix, *ele); + return _dom_html_table_section_element_initialise(doc, tag_name, + namespace, prefix, *ele); } /** @@ -168,9 +169,10 @@ SIMPLE_GET_SET(v_align); /* The callback function for _dom_html_collection_create*/ bool table_section_callback(struct dom_node_internal *node, void *ctx) { + dom_html_document *doc = ctx; if(node->type == DOM_ELEMENT_NODE && dom_string_caseless_isequal(node->name, - ((dom_html_document *)ctx)->memoised[hds_TR])) { + doc->elements[DOM_HTML_ELEMENT_TYPE_TR])) { return true; } return false; diff --git a/src/html/html_text_area_element.c b/src/html/html_text_area_element.c index ac90a76..cfc3bed 100644 --- a/src/html/html_text_area_element.c +++ b/src/html/html_text_area_element.c @@ -67,8 +67,8 @@ dom_exception _dom_html_text_area_element_initialise(struct dom_html_document *d ele->value_set = false; return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_TEXTAREA], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_TEXTAREA], + namespace, prefix); } /** diff --git a/src/html/html_title_element.c b/src/html/html_title_element.c index 80da5e1..e2107c8 100644 --- a/src/html/html_title_element.c +++ b/src/html/html_title_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_title_element_initialise(struct dom_html_document *doc, struct dom_html_title_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_TITLE], - namespace, prefix); + doc->elements[DOM_HTML_ELEMENT_TYPE_TITLE], + namespace, prefix); } /** diff --git a/src/html/html_ulist_element.c b/src/html/html_ulist_element.c index e7f8bb3..17d31a9 100644 --- a/src/html/html_ulist_element.c +++ b/src/html/html_ulist_element.c @@ -61,8 +61,8 @@ dom_exception _dom_html_u_list_element_initialise(struct dom_html_document *doc, struct dom_html_u_list_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->memoised[hds_UL], - namespace, u_listfix); + doc->elements[DOM_HTML_ELEMENT_TYPE_UL], + namespace, u_listfix); } /** -- cgit v1.2.3 From 3894e33506789b6edc4ef36239fc45d03e5db4e9 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Wed, 27 Jan 2016 14:19:55 +0000 Subject: Split detection of HTML TAG type out into helper. This moves the massive dom_string comparison ladder out into a separate function, and switches on the result. Using a switch here has highlighted multiple issues: - Various html element specialisations were missed out. - Both TD elements were in the ladder twice. --- src/html/html_document.c | 463 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 325 insertions(+), 138 deletions(-) diff --git a/src/html/html_document.c b/src/html/html_document.c index c33753e..46a2609 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -246,248 +246,435 @@ dom_exception _dom_html_document_copy(dom_node_internal *old, return DOM_NOT_SUPPORTED_ERR; } +/** + * Get html element type from an uppercased tag name string + * + * \param html The html document that the html element belongs to + * \param tag_name_upper Upper cased string containing tag name + */ +static inline dom_html_element_type _dom_html_document_get_element_type( + dom_html_document *html, dom_string *tag_name_upper) +{ + if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_HTML])) { + return DOM_HTML_ELEMENT_TYPE_HTML; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_HEAD])) { + return DOM_HTML_ELEMENT_TYPE_HEAD; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_TITLE])) { + return DOM_HTML_ELEMENT_TYPE_TITLE; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_BODY])) { + return DOM_HTML_ELEMENT_TYPE_BODY; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_FORM])) { + return DOM_HTML_ELEMENT_TYPE_FORM; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_LINK])) { + return DOM_HTML_ELEMENT_TYPE_LINK; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_BUTTON])) { + return DOM_HTML_ELEMENT_TYPE_BUTTON; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_INPUT])) { + return DOM_HTML_ELEMENT_TYPE_INPUT; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_TEXTAREA])) { + return DOM_HTML_ELEMENT_TYPE_TEXTAREA; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_OPTGROUP])) { + return DOM_HTML_ELEMENT_TYPE_OPTGROUP; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_OPTION])) { + return DOM_HTML_ELEMENT_TYPE_OPTION; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_SELECT])) { + return DOM_HTML_ELEMENT_TYPE_SELECT; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_HR])) { + return DOM_HTML_ELEMENT_TYPE_HR; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_DL])) { + return DOM_HTML_ELEMENT_TYPE_DL; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_DIRECTORY])) { + return DOM_HTML_ELEMENT_TYPE_DIRECTORY; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_MENU])) { + return DOM_HTML_ELEMENT_TYPE_MENU; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_FIELDSET])) { + return DOM_HTML_ELEMENT_TYPE_FIELDSET; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_LEGEND])) { + return DOM_HTML_ELEMENT_TYPE_LEGEND; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_P])) { + return DOM_HTML_ELEMENT_TYPE_P; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_H1])) { + return DOM_HTML_ELEMENT_TYPE_H1; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_H2])) { + return DOM_HTML_ELEMENT_TYPE_H2; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_H3])) { + return DOM_HTML_ELEMENT_TYPE_H3; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_H4])) { + return DOM_HTML_ELEMENT_TYPE_H4; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_H5])) { + return DOM_HTML_ELEMENT_TYPE_H5; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_H6])) { + return DOM_HTML_ELEMENT_TYPE_H6; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_Q])) { + return DOM_HTML_ELEMENT_TYPE_Q; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_PRE])) { + return DOM_HTML_ELEMENT_TYPE_PRE; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_BR])) { + return DOM_HTML_ELEMENT_TYPE_BR; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_LABEL])) { + return DOM_HTML_ELEMENT_TYPE_LABEL; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_UL])) { + return DOM_HTML_ELEMENT_TYPE_UL; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_OL])) { + return DOM_HTML_ELEMENT_TYPE_OL; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_LI])) { + return DOM_HTML_ELEMENT_TYPE_LI; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_FONT])) { + return DOM_HTML_ELEMENT_TYPE_FONT; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_DEL])) { + return DOM_HTML_ELEMENT_TYPE_DEL; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_INS])) { + return DOM_HTML_ELEMENT_TYPE_INS; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_A])) { + return DOM_HTML_ELEMENT_TYPE_A; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_BASEFONT])) { + return DOM_HTML_ELEMENT_TYPE_BASEFONT; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_IMG])) { + return DOM_HTML_ELEMENT_TYPE_IMG; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_OBJECT])) { + return DOM_HTML_ELEMENT_TYPE_OBJECT; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_PARAM])) { + return DOM_HTML_ELEMENT_TYPE_PARAM; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_APPLET])) { + return DOM_HTML_ELEMENT_TYPE_APPLET; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_MAP])) { + return DOM_HTML_ELEMENT_TYPE_MAP; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_AREA])) { + return DOM_HTML_ELEMENT_TYPE_AREA; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_SCRIPT])) { + return DOM_HTML_ELEMENT_TYPE_SCRIPT; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_CAPTION])) { + return DOM_HTML_ELEMENT_TYPE_CAPTION; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_TD])) { + return DOM_HTML_ELEMENT_TYPE_TD; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_TH])) { + return DOM_HTML_ELEMENT_TYPE_TH; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_COL])) { + return DOM_HTML_ELEMENT_TYPE_COL; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_COLGROUP])) { + return DOM_HTML_ELEMENT_TYPE_COLGROUP; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_THEAD])) { + return DOM_HTML_ELEMENT_TYPE_THEAD; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_TBODY])) { + return DOM_HTML_ELEMENT_TYPE_TBODY; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_TFOOT])) { + return DOM_HTML_ELEMENT_TYPE_TFOOT; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_TABLE])) { + return DOM_HTML_ELEMENT_TYPE_TABLE; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_TR])) { + return DOM_HTML_ELEMENT_TYPE_TR; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_STYLE])) { + return DOM_HTML_ELEMENT_TYPE_STYLE; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_FRAMESET])) { + return DOM_HTML_ELEMENT_TYPE_FRAMESET; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_FRAME])) { + return DOM_HTML_ELEMENT_TYPE_FRAME; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_IFRAME])) { + return DOM_HTML_ELEMENT_TYPE_IFRAME; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_ISINDEX])) { + return DOM_HTML_ELEMENT_TYPE_ISINDEX; + } + + return DOM_HTML_ELEMENT_TYPE__UNKNOWN; +} + /* Overloaded methods inherited from super class */ /** Internal method to support both kinds of create method */ static dom_exception -_dom_html_document_create_element_internal(dom_html_document *html, - dom_string *in_tag_name, - dom_string *namespace, - dom_string *prefix, - dom_html_element **result) +_dom_html_document_create_element_internal( + dom_html_document *html, + dom_string *in_tag_name, + dom_string *namespace, + dom_string *prefix, + dom_html_element **result) { dom_exception exc; dom_string *tag_name; + dom_html_element_type type; exc = dom_string_toupper(in_tag_name, true, &tag_name); if (exc != DOM_NO_ERR) return exc; - if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_HTML])) { + type = _dom_html_document_get_element_type(html, tag_name); + + switch(type) { + case DOM_HTML_ELEMENT_TYPE__COUNT: + assert(type != DOM_HTML_ELEMENT_TYPE__COUNT); + break; + case DOM_HTML_ELEMENT_TYPE_HTML: exc = _dom_html_html_element_create(html, namespace, prefix, (dom_html_html_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_HEAD])) { + break; + case DOM_HTML_ELEMENT_TYPE_HEAD: exc = _dom_html_head_element_create(html, namespace, prefix, (dom_html_head_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_TITLE])) { + break; + case DOM_HTML_ELEMENT_TYPE_TITLE: exc = _dom_html_title_element_create(html, namespace, prefix, (dom_html_title_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_BODY])) { + break; + case DOM_HTML_ELEMENT_TYPE_BODY: exc = _dom_html_body_element_create(html, namespace, prefix, (dom_html_body_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_FORM])) { + break; + case DOM_HTML_ELEMENT_TYPE_FORM: exc = _dom_html_form_element_create(html, namespace, prefix, (dom_html_form_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_LINK])) { + break; + case DOM_HTML_ELEMENT_TYPE_LINK: exc = _dom_html_link_element_create(html, namespace, prefix, (dom_html_link_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_BUTTON])) { + break; + case DOM_HTML_ELEMENT_TYPE_BUTTON: exc = _dom_html_button_element_create(html, namespace, prefix, (dom_html_button_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_INPUT])) { + break; + case DOM_HTML_ELEMENT_TYPE_INPUT: exc = _dom_html_input_element_create(html, namespace, prefix, (dom_html_input_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_TEXTAREA])) { - exc = _dom_html_text_area_element_create(html, namespace, prefix, - (dom_html_text_area_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_OPTGROUP])) { - exc = _dom_html_opt_group_element_create(html, namespace, prefix, - (dom_html_opt_group_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_OPTION])) { + break; + case DOM_HTML_ELEMENT_TYPE_TEXTAREA: + exc = _dom_html_text_area_element_create(html, namespace, + prefix, (dom_html_text_area_element **) result); + break; + case DOM_HTML_ELEMENT_TYPE_OPTGROUP: + exc = _dom_html_opt_group_element_create(html, namespace, + prefix, (dom_html_opt_group_element **) result); + break; + case DOM_HTML_ELEMENT_TYPE_OPTION: exc = _dom_html_option_element_create(html, namespace, prefix, (dom_html_option_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_SELECT])) { + break; + case DOM_HTML_ELEMENT_TYPE_SELECT: exc = _dom_html_select_element_create(html, namespace, prefix, (dom_html_select_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_HR])) { + break; + case DOM_HTML_ELEMENT_TYPE_HR: exc = _dom_html_hr_element_create(html, namespace, prefix, (dom_html_hr_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_DL])) { + break; + case DOM_HTML_ELEMENT_TYPE_DL: exc = _dom_html_dlist_element_create(html, namespace, prefix, (dom_html_dlist_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_DIRECTORY])) { - exc = _dom_html_directory_element_create(html, namespace, prefix, - (dom_html_directory_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_MENU])) { + break; + case DOM_HTML_ELEMENT_TYPE_DIRECTORY: + exc = _dom_html_directory_element_create(html, namespace, + prefix, (dom_html_directory_element **) result); + break; + case DOM_HTML_ELEMENT_TYPE_MENU: exc = _dom_html_menu_element_create(html, namespace, prefix, (dom_html_menu_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_FIELDSET])) { - exc = _dom_html_field_set_element_create(html, namespace, prefix, - (dom_html_field_set_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_LEGEND])) { + break; + case DOM_HTML_ELEMENT_TYPE_FIELDSET: + exc = _dom_html_field_set_element_create(html, namespace, + prefix, (dom_html_field_set_element **) result); + break; + case DOM_HTML_ELEMENT_TYPE_LEGEND: exc = _dom_html_legend_element_create(html, namespace, prefix, (dom_html_legend_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_P])) { - exc = _dom_html_paragraph_element_create(html, namespace, prefix, - (dom_html_paragraph_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_H1]) || - dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_H2]) || - dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_H3]) || - dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_H4]) || - dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_H5]) || - dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_H6])) { + break; + case DOM_HTML_ELEMENT_TYPE_P: + exc = _dom_html_paragraph_element_create(html, namespace, + prefix, (dom_html_paragraph_element **) result); + break; + case DOM_HTML_ELEMENT_TYPE_H1: + case DOM_HTML_ELEMENT_TYPE_H2: + case DOM_HTML_ELEMENT_TYPE_H3: + case DOM_HTML_ELEMENT_TYPE_H4: + case DOM_HTML_ELEMENT_TYPE_H5: + case DOM_HTML_ELEMENT_TYPE_H6: exc = _dom_html_heading_element_create(html, tag_name, namespace, prefix, (dom_html_heading_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_Q])) { + break; + case DOM_HTML_ELEMENT_TYPE_Q: exc = _dom_html_quote_element_create(html, namespace, prefix, (dom_html_quote_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_PRE])) { + break; + case DOM_HTML_ELEMENT_TYPE_PRE: exc = _dom_html_pre_element_create(html, namespace, prefix, (dom_html_pre_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_BR])) { + break; + case DOM_HTML_ELEMENT_TYPE_BR: exc = _dom_html_br_element_create(html, namespace, prefix, (dom_html_br_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_LABEL])) { + break; + case DOM_HTML_ELEMENT_TYPE_LABEL: exc = _dom_html_label_element_create(html, namespace, prefix, (dom_html_label_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_UL])) { + break; + case DOM_HTML_ELEMENT_TYPE_UL: exc = _dom_html_u_list_element_create(html, namespace, prefix, (dom_html_u_list_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_OL])) { + break; + case DOM_HTML_ELEMENT_TYPE_OL: exc = _dom_html_olist_element_create(html, namespace, prefix, (dom_html_olist_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_LI])) { + break; + case DOM_HTML_ELEMENT_TYPE_LI: exc = _dom_html_li_element_create(html, namespace, prefix, (dom_html_li_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_FONT])) { + break; + case DOM_HTML_ELEMENT_TYPE_FONT: exc = _dom_html_font_element_create(html, namespace, prefix, (dom_html_font_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_DEL]) || - dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_INS])) { + break; + case DOM_HTML_ELEMENT_TYPE_DEL: + case DOM_HTML_ELEMENT_TYPE_INS: exc = _dom_html_mod_element_create(html, tag_name, namespace, prefix, (dom_html_mod_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_A])) { + break; + case DOM_HTML_ELEMENT_TYPE_A: exc = _dom_html_anchor_element_create(html, namespace, prefix, (dom_html_anchor_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_BASEFONT])) { + break; + case DOM_HTML_ELEMENT_TYPE_BASEFONT: exc = _dom_html_base_font_element_create(html, namespace, prefix, (dom_html_base_font_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_IMG])) { + break; + case DOM_HTML_ELEMENT_TYPE_IMG: exc = _dom_html_image_element_create(html, namespace, prefix, (dom_html_image_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_OBJECT])) { + break; + case DOM_HTML_ELEMENT_TYPE_OBJECT: exc = _dom_html_object_element_create(html, namespace, prefix, (dom_html_object_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_PARAM])) { + break; + case DOM_HTML_ELEMENT_TYPE_PARAM: exc = _dom_html_param_element_create(html, namespace, prefix, (dom_html_param_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_APPLET])) { + break; + case DOM_HTML_ELEMENT_TYPE_APPLET: exc = _dom_html_applet_element_create(html, namespace, prefix, (dom_html_applet_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_MAP])) { + break; + case DOM_HTML_ELEMENT_TYPE_MAP: exc = _dom_html_map_element_create(html, namespace, prefix, (dom_html_map_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_AREA])) { + break; + case DOM_HTML_ELEMENT_TYPE_AREA: exc = _dom_html_area_element_create(html, namespace, prefix, (dom_html_area_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_SCRIPT])) { + break; + case DOM_HTML_ELEMENT_TYPE_SCRIPT: exc = _dom_html_script_element_create(html, namespace, prefix, (dom_html_script_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_CAPTION])) { + break; + case DOM_HTML_ELEMENT_TYPE_CAPTION: exc = _dom_html_table_caption_element_create(html, namespace, prefix, (dom_html_table_caption_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_TD]) || - dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_TH])) { + break; + case DOM_HTML_ELEMENT_TYPE_TD: + case DOM_HTML_ELEMENT_TYPE_TH: exc = _dom_html_table_cell_element_create(html, tag_name, namespace, prefix, (dom_html_table_cell_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_COL])|| - dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_COLGROUP])) { + break; + case DOM_HTML_ELEMENT_TYPE_COL: + case DOM_HTML_ELEMENT_TYPE_COLGROUP: exc = _dom_html_table_col_element_create(html, tag_name, namespace, prefix, (dom_html_table_col_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_THEAD])|| - dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_TBODY])|| - dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_TFOOT])) { + break; + case DOM_HTML_ELEMENT_TYPE_THEAD: + case DOM_HTML_ELEMENT_TYPE_TBODY: + case DOM_HTML_ELEMENT_TYPE_TFOOT: exc = _dom_html_table_section_element_create(html, tag_name, namespace, prefix, (dom_html_table_section_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_TABLE])) { + break; + case DOM_HTML_ELEMENT_TYPE_TABLE: exc = _dom_html_table_element_create(html, namespace, prefix, (dom_html_table_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_TD])) { - exc = _dom_html_table_row_element_create(html, namespace, prefix, - (dom_html_table_row_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_STYLE])) { + break; + case DOM_HTML_ELEMENT_TYPE_STYLE: exc = _dom_html_style_element_create(html, (dom_html_style_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_FRAMESET])) { - exc = _dom_html_frame_set_element_create(html, namespace, prefix, - (dom_html_frame_set_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_FRAME])) { + break; + case DOM_HTML_ELEMENT_TYPE_FRAMESET: + exc = _dom_html_frame_set_element_create(html, namespace, + prefix, (dom_html_frame_set_element **) result); + break; + case DOM_HTML_ELEMENT_TYPE_FRAME: exc = _dom_html_frame_element_create(html, namespace, prefix, (dom_html_frame_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_IFRAME])) { + break; + case DOM_HTML_ELEMENT_TYPE_IFRAME: exc = _dom_html_iframe_element_create(html, namespace, prefix, (dom_html_iframe_element **) result); - } else if (dom_string_caseless_isequal(tag_name, - html->elements[DOM_HTML_ELEMENT_TYPE_ISINDEX])) { + break; + case DOM_HTML_ELEMENT_TYPE_ISINDEX: exc = _dom_html_isindex_element_create(html, namespace, prefix, (dom_html_isindex_element **) result); - } else { + break; + default: + case DOM_HTML_ELEMENT_TYPE__UNKNOWN: exc = _dom_html_element_create(html, tag_name, namespace, prefix, result); + break; } dom_string_unref(tag_name); -- cgit v1.2.3 From 1f07c352dec8aeb1454da11f0a39ae0b24d5251b Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Wed, 27 Jan 2016 14:26:50 +0000 Subject: Enable table row HTML element specialisation. The code for it was always there, but it was never reached. --- src/html/html_document.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/html/html_document.c b/src/html/html_document.c index 46a2609..9c56799 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -650,6 +650,10 @@ _dom_html_document_create_element_internal( exc = _dom_html_table_element_create(html, namespace, prefix, (dom_html_table_element **) result); break; + case DOM_HTML_ELEMENT_TYPE_TR: + exc = _dom_html_table_row_element_create(html, namespace, + prefix, (dom_html_table_row_element **) result); + break; case DOM_HTML_ELEMENT_TYPE_STYLE: exc = _dom_html_style_element_create(html, (dom_html_style_element **) result); -- cgit v1.2.3 From dd2e075fe7be7620acac88e73dd73c336171bedd Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Wed, 27 Jan 2016 14:36:22 +0000 Subject: Add missing specialisation of BLOCKQUOTE. Both Q and BLOCKQUOTE share the HTMLQuoteElement specialisation. --- src/html/html_document.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/html/html_document.c b/src/html/html_document.c index 9c56799..2dc63d9 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -330,6 +330,9 @@ static inline dom_html_element_type _dom_html_document_get_element_type( } else if (dom_string_caseless_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_H6])) { return DOM_HTML_ELEMENT_TYPE_H6; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_BLOCKQUOTE])) { + return DOM_HTML_ELEMENT_TYPE_BLOCKQUOTE; } else if (dom_string_caseless_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_Q])) { return DOM_HTML_ELEMENT_TYPE_Q; @@ -548,6 +551,7 @@ _dom_html_document_create_element_internal( namespace, prefix, (dom_html_heading_element **) result); break; + case DOM_HTML_ELEMENT_TYPE_BLOCKQUOTE: case DOM_HTML_ELEMENT_TYPE_Q: exc = _dom_html_quote_element_create(html, namespace, prefix, (dom_html_quote_element **) result); -- cgit v1.2.3 From 8d09ec06b447d6383718edc5f0f50b354628469d Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Wed, 27 Jan 2016 14:43:38 +0000 Subject: Add missing detection of HTMLDivElement specialisation. --- src/html/html_document.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/html/html_document.c b/src/html/html_document.c index 2dc63d9..5965e47 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -16,6 +16,7 @@ #include "html/html_html_element.h" #include "html/html_head_element.h" #include "html/html_body_element.h" +#include "html/html_div_element.h" #include "html/html_link_element.h" #include "html/html_title_element.h" #include "html/html_meta_element.h" @@ -267,6 +268,9 @@ static inline dom_html_element_type _dom_html_document_get_element_type( } else if (dom_string_caseless_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_BODY])) { return DOM_HTML_ELEMENT_TYPE_BODY; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_DIV])) { + return DOM_HTML_ELEMENT_TYPE_DIV; } else if (dom_string_caseless_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_FORM])) { return DOM_HTML_ELEMENT_TYPE_FORM; @@ -481,6 +485,10 @@ _dom_html_document_create_element_internal( exc = _dom_html_body_element_create(html, namespace, prefix, (dom_html_body_element **) result); break; + case DOM_HTML_ELEMENT_TYPE_DIV: + exc = _dom_html_div_element_create(html, namespace, prefix, + (dom_html_div_element **) result); + break; case DOM_HTML_ELEMENT_TYPE_FORM: exc = _dom_html_form_element_create(html, namespace, prefix, (dom_html_form_element **) result); -- cgit v1.2.3 From 81c012f5709d09eee22f337ac2ee33ea80fbe299 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Wed, 27 Jan 2016 15:02:50 +0000 Subject: Add missing detection of HTMLMetaElement specialisation. --- src/html/html_document.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/html/html_document.c b/src/html/html_document.c index 5965e47..2e44a81 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -262,6 +262,9 @@ static inline dom_html_element_type _dom_html_document_get_element_type( } else if (dom_string_caseless_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_HEAD])) { return DOM_HTML_ELEMENT_TYPE_HEAD; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_META])) { + return DOM_HTML_ELEMENT_TYPE_META; } else if (dom_string_caseless_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_TITLE])) { return DOM_HTML_ELEMENT_TYPE_TITLE; @@ -477,6 +480,10 @@ _dom_html_document_create_element_internal( exc = _dom_html_head_element_create(html, namespace, prefix, (dom_html_head_element **) result); break; + case DOM_HTML_ELEMENT_TYPE_META: + exc = _dom_html_meta_element_create(html, namespace, prefix, + (dom_html_meta_element **) result); + break; case DOM_HTML_ELEMENT_TYPE_TITLE: exc = _dom_html_title_element_create(html, namespace, prefix, (dom_html_title_element **) result); -- cgit v1.2.3 From e346fef45738fc17d5cd1f9bca571b8df5e2fc0d Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Wed, 27 Jan 2016 15:12:10 +0000 Subject: Fix up HTMLBaseElement specialisation. --- src/html/html_base_element.c | 18 ++++++------------ src/html/html_base_element.h | 2 ++ 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/html/html_base_element.c b/src/html/html_base_element.c index 6be8e3a..55bbd94 100644 --- a/src/html/html_base_element.c +++ b/src/html/html_base_element.c @@ -28,6 +28,7 @@ static struct dom_element_protected_vtable _protect_vtable = { * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ dom_exception _dom_html_base_element_create(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_base_element **ele) { struct dom_node_internal *node; @@ -41,7 +42,7 @@ dom_exception _dom_html_base_element_create(struct dom_html_document *doc, node->base.vtable = &_dom_html_element_vtable; node->vtable = &_protect_vtable; - return _dom_html_base_element_initialise(doc, *ele); + return _dom_html_base_element_initialise(doc, namespace, prefix, *ele); } /** @@ -52,19 +53,12 @@ dom_exception _dom_html_base_element_create(struct dom_html_document *doc, * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ dom_exception _dom_html_base_element_initialise(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_base_element *ele) { - dom_string *name = NULL; - dom_exception err; - - err = dom_string_create((const uint8_t *) "BASE", SLEN("BASE"), &name); - if (err != DOM_NO_ERR) - return err; - - err = _dom_html_element_initialise(doc, &ele->base, name, NULL, NULL); - dom_string_unref(name); - - return err; + return _dom_html_element_initialise(doc, &ele->base, + doc->elements[DOM_HTML_ELEMENT_TYPE_BASE], + namespace, prefix); } /** diff --git a/src/html/html_base_element.h b/src/html/html_base_element.h index 7a04b29..3113635 100644 --- a/src/html/html_base_element.h +++ b/src/html/html_base_element.h @@ -19,10 +19,12 @@ struct dom_html_base_element { /* Create a dom_html_base_element object */ dom_exception _dom_html_base_element_create(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_base_element **ele); /* Initialise a dom_html_base_element object */ dom_exception _dom_html_base_element_initialise(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_base_element *ele); /* Finalise a dom_html_base_element object */ -- cgit v1.2.3 From 13df5afe36ff3921cfa928bb33fbecee5734c1ed Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Wed, 27 Jan 2016 15:13:11 +0000 Subject: Add missing detection of HTMLBaseElement specialisation. --- src/html/html_document.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/html/html_document.c b/src/html/html_document.c index 2e44a81..ba8ee1b 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -16,6 +16,7 @@ #include "html/html_html_element.h" #include "html/html_head_element.h" #include "html/html_body_element.h" +#include "html/html_base_element.h" #include "html/html_div_element.h" #include "html/html_link_element.h" #include "html/html_title_element.h" @@ -265,6 +266,9 @@ static inline dom_html_element_type _dom_html_document_get_element_type( } else if (dom_string_caseless_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_META])) { return DOM_HTML_ELEMENT_TYPE_META; + } else if (dom_string_caseless_isequal(tag_name_upper, + html->elements[DOM_HTML_ELEMENT_TYPE_BASE])) { + return DOM_HTML_ELEMENT_TYPE_BASE; } else if (dom_string_caseless_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_TITLE])) { return DOM_HTML_ELEMENT_TYPE_TITLE; @@ -484,6 +488,10 @@ _dom_html_document_create_element_internal( exc = _dom_html_meta_element_create(html, namespace, prefix, (dom_html_meta_element **) result); break; + case DOM_HTML_ELEMENT_TYPE_BASE: + exc = _dom_html_base_element_create(html, namespace, prefix, + (dom_html_base_element **) result); + break; case DOM_HTML_ELEMENT_TYPE_TITLE: exc = _dom_html_title_element_create(html, namespace, prefix, (dom_html_title_element **) result); -- cgit v1.2.3 From 0174d8bc39cb8bb6d9422f2a65c7dacb94a9c0da Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Wed, 27 Jan 2016 15:23:43 +0000 Subject: Remove default from HTML element specialisation switch. Now that everything is handled we can remove the default, and it should be obvious in future if something is added to the list of elements but not properly handled. --- src/html/html_document.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/html/html_document.c b/src/html/html_document.c index ba8ee1b..d4d7c37 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -701,7 +701,6 @@ _dom_html_document_create_element_internal( exc = _dom_html_isindex_element_create(html, namespace, prefix, (dom_html_isindex_element **) result); break; - default: case DOM_HTML_ELEMENT_TYPE__UNKNOWN: exc = _dom_html_element_create(html, tag_name, namespace, prefix, result); -- cgit v1.2.3 From 12385d1747d1f84a75ac397fb1dcf8da5c3955c3 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Wed, 27 Jan 2016 15:34:45 +0000 Subject: Optimise element specialisation: use non-caseless comparison in ladder. We know for sure both things are upper case, so using the caseless version is needlessly slow, since it will need to lowercase both (if lowercase version's don't already exist) and compare the lower case versions. --- src/html/html_document.c | 126 +++++++++++++++++++++++------------------------ 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/src/html/html_document.c b/src/html/html_document.c index d4d7c37..89ef439 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -257,193 +257,193 @@ dom_exception _dom_html_document_copy(dom_node_internal *old, static inline dom_html_element_type _dom_html_document_get_element_type( dom_html_document *html, dom_string *tag_name_upper) { - if (dom_string_caseless_isequal(tag_name_upper, + if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_HTML])) { return DOM_HTML_ELEMENT_TYPE_HTML; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_HEAD])) { return DOM_HTML_ELEMENT_TYPE_HEAD; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_META])) { return DOM_HTML_ELEMENT_TYPE_META; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_BASE])) { return DOM_HTML_ELEMENT_TYPE_BASE; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_TITLE])) { return DOM_HTML_ELEMENT_TYPE_TITLE; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_BODY])) { return DOM_HTML_ELEMENT_TYPE_BODY; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_DIV])) { return DOM_HTML_ELEMENT_TYPE_DIV; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_FORM])) { return DOM_HTML_ELEMENT_TYPE_FORM; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_LINK])) { return DOM_HTML_ELEMENT_TYPE_LINK; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_BUTTON])) { return DOM_HTML_ELEMENT_TYPE_BUTTON; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_INPUT])) { return DOM_HTML_ELEMENT_TYPE_INPUT; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_TEXTAREA])) { return DOM_HTML_ELEMENT_TYPE_TEXTAREA; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_OPTGROUP])) { return DOM_HTML_ELEMENT_TYPE_OPTGROUP; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_OPTION])) { return DOM_HTML_ELEMENT_TYPE_OPTION; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_SELECT])) { return DOM_HTML_ELEMENT_TYPE_SELECT; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_HR])) { return DOM_HTML_ELEMENT_TYPE_HR; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_DL])) { return DOM_HTML_ELEMENT_TYPE_DL; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_DIRECTORY])) { return DOM_HTML_ELEMENT_TYPE_DIRECTORY; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_MENU])) { return DOM_HTML_ELEMENT_TYPE_MENU; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_FIELDSET])) { return DOM_HTML_ELEMENT_TYPE_FIELDSET; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_LEGEND])) { return DOM_HTML_ELEMENT_TYPE_LEGEND; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_P])) { return DOM_HTML_ELEMENT_TYPE_P; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_H1])) { return DOM_HTML_ELEMENT_TYPE_H1; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_H2])) { return DOM_HTML_ELEMENT_TYPE_H2; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_H3])) { return DOM_HTML_ELEMENT_TYPE_H3; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_H4])) { return DOM_HTML_ELEMENT_TYPE_H4; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_H5])) { return DOM_HTML_ELEMENT_TYPE_H5; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_H6])) { return DOM_HTML_ELEMENT_TYPE_H6; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_BLOCKQUOTE])) { return DOM_HTML_ELEMENT_TYPE_BLOCKQUOTE; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_Q])) { return DOM_HTML_ELEMENT_TYPE_Q; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_PRE])) { return DOM_HTML_ELEMENT_TYPE_PRE; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_BR])) { return DOM_HTML_ELEMENT_TYPE_BR; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_LABEL])) { return DOM_HTML_ELEMENT_TYPE_LABEL; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_UL])) { return DOM_HTML_ELEMENT_TYPE_UL; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_OL])) { return DOM_HTML_ELEMENT_TYPE_OL; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_LI])) { return DOM_HTML_ELEMENT_TYPE_LI; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_FONT])) { return DOM_HTML_ELEMENT_TYPE_FONT; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_DEL])) { return DOM_HTML_ELEMENT_TYPE_DEL; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_INS])) { return DOM_HTML_ELEMENT_TYPE_INS; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_A])) { return DOM_HTML_ELEMENT_TYPE_A; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_BASEFONT])) { return DOM_HTML_ELEMENT_TYPE_BASEFONT; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_IMG])) { return DOM_HTML_ELEMENT_TYPE_IMG; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_OBJECT])) { return DOM_HTML_ELEMENT_TYPE_OBJECT; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_PARAM])) { return DOM_HTML_ELEMENT_TYPE_PARAM; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_APPLET])) { return DOM_HTML_ELEMENT_TYPE_APPLET; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_MAP])) { return DOM_HTML_ELEMENT_TYPE_MAP; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_AREA])) { return DOM_HTML_ELEMENT_TYPE_AREA; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_SCRIPT])) { return DOM_HTML_ELEMENT_TYPE_SCRIPT; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_CAPTION])) { return DOM_HTML_ELEMENT_TYPE_CAPTION; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_TD])) { return DOM_HTML_ELEMENT_TYPE_TD; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_TH])) { return DOM_HTML_ELEMENT_TYPE_TH; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_COL])) { return DOM_HTML_ELEMENT_TYPE_COL; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_COLGROUP])) { return DOM_HTML_ELEMENT_TYPE_COLGROUP; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_THEAD])) { return DOM_HTML_ELEMENT_TYPE_THEAD; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_TBODY])) { return DOM_HTML_ELEMENT_TYPE_TBODY; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_TFOOT])) { return DOM_HTML_ELEMENT_TYPE_TFOOT; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_TABLE])) { return DOM_HTML_ELEMENT_TYPE_TABLE; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_TR])) { return DOM_HTML_ELEMENT_TYPE_TR; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_STYLE])) { return DOM_HTML_ELEMENT_TYPE_STYLE; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_FRAMESET])) { return DOM_HTML_ELEMENT_TYPE_FRAMESET; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_FRAME])) { return DOM_HTML_ELEMENT_TYPE_FRAME; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_IFRAME])) { return DOM_HTML_ELEMENT_TYPE_IFRAME; - } else if (dom_string_caseless_isequal(tag_name_upper, + } else if (dom_string_isequal(tag_name_upper, html->elements[DOM_HTML_ELEMENT_TYPE_ISINDEX])) { return DOM_HTML_ELEMENT_TYPE_ISINDEX; } -- cgit v1.2.3 From 13f06360888ecb87e498012cf8c937e4041f5c4a Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Wed, 27 Jan 2016 16:20:10 +0000 Subject: Optimise HTMLElement specialisation slightly. Gets the byte length of the tag names string, and splits the comparison ladder into ladders for different string lengths. This reduces the amount of dom_string_isequal() calls we need to do. --- src/html/html_document.c | 411 +++++++++++++++++++++++++---------------------- 1 file changed, 222 insertions(+), 189 deletions(-) diff --git a/src/html/html_document.c b/src/html/html_document.c index 89ef439..d50fb52 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -257,195 +257,228 @@ dom_exception _dom_html_document_copy(dom_node_internal *old, static inline dom_html_element_type _dom_html_document_get_element_type( dom_html_document *html, dom_string *tag_name_upper) { - if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_HTML])) { - return DOM_HTML_ELEMENT_TYPE_HTML; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_HEAD])) { - return DOM_HTML_ELEMENT_TYPE_HEAD; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_META])) { - return DOM_HTML_ELEMENT_TYPE_META; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_BASE])) { - return DOM_HTML_ELEMENT_TYPE_BASE; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_TITLE])) { - return DOM_HTML_ELEMENT_TYPE_TITLE; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_BODY])) { - return DOM_HTML_ELEMENT_TYPE_BODY; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_DIV])) { - return DOM_HTML_ELEMENT_TYPE_DIV; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_FORM])) { - return DOM_HTML_ELEMENT_TYPE_FORM; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_LINK])) { - return DOM_HTML_ELEMENT_TYPE_LINK; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_BUTTON])) { - return DOM_HTML_ELEMENT_TYPE_BUTTON; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_INPUT])) { - return DOM_HTML_ELEMENT_TYPE_INPUT; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_TEXTAREA])) { - return DOM_HTML_ELEMENT_TYPE_TEXTAREA; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_OPTGROUP])) { - return DOM_HTML_ELEMENT_TYPE_OPTGROUP; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_OPTION])) { - return DOM_HTML_ELEMENT_TYPE_OPTION; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_SELECT])) { - return DOM_HTML_ELEMENT_TYPE_SELECT; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_HR])) { - return DOM_HTML_ELEMENT_TYPE_HR; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_DL])) { - return DOM_HTML_ELEMENT_TYPE_DL; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_DIRECTORY])) { - return DOM_HTML_ELEMENT_TYPE_DIRECTORY; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_MENU])) { - return DOM_HTML_ELEMENT_TYPE_MENU; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_FIELDSET])) { - return DOM_HTML_ELEMENT_TYPE_FIELDSET; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_LEGEND])) { - return DOM_HTML_ELEMENT_TYPE_LEGEND; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_P])) { - return DOM_HTML_ELEMENT_TYPE_P; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_H1])) { - return DOM_HTML_ELEMENT_TYPE_H1; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_H2])) { - return DOM_HTML_ELEMENT_TYPE_H2; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_H3])) { - return DOM_HTML_ELEMENT_TYPE_H3; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_H4])) { - return DOM_HTML_ELEMENT_TYPE_H4; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_H5])) { - return DOM_HTML_ELEMENT_TYPE_H5; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_H6])) { - return DOM_HTML_ELEMENT_TYPE_H6; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_BLOCKQUOTE])) { - return DOM_HTML_ELEMENT_TYPE_BLOCKQUOTE; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_Q])) { - return DOM_HTML_ELEMENT_TYPE_Q; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_PRE])) { - return DOM_HTML_ELEMENT_TYPE_PRE; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_BR])) { - return DOM_HTML_ELEMENT_TYPE_BR; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_LABEL])) { - return DOM_HTML_ELEMENT_TYPE_LABEL; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_UL])) { - return DOM_HTML_ELEMENT_TYPE_UL; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_OL])) { - return DOM_HTML_ELEMENT_TYPE_OL; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_LI])) { - return DOM_HTML_ELEMENT_TYPE_LI; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_FONT])) { - return DOM_HTML_ELEMENT_TYPE_FONT; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_DEL])) { - return DOM_HTML_ELEMENT_TYPE_DEL; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_INS])) { - return DOM_HTML_ELEMENT_TYPE_INS; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_A])) { - return DOM_HTML_ELEMENT_TYPE_A; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_BASEFONT])) { - return DOM_HTML_ELEMENT_TYPE_BASEFONT; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_IMG])) { - return DOM_HTML_ELEMENT_TYPE_IMG; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_OBJECT])) { - return DOM_HTML_ELEMENT_TYPE_OBJECT; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_PARAM])) { - return DOM_HTML_ELEMENT_TYPE_PARAM; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_APPLET])) { - return DOM_HTML_ELEMENT_TYPE_APPLET; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_MAP])) { - return DOM_HTML_ELEMENT_TYPE_MAP; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_AREA])) { - return DOM_HTML_ELEMENT_TYPE_AREA; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_SCRIPT])) { - return DOM_HTML_ELEMENT_TYPE_SCRIPT; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_CAPTION])) { - return DOM_HTML_ELEMENT_TYPE_CAPTION; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_TD])) { - return DOM_HTML_ELEMENT_TYPE_TD; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_TH])) { - return DOM_HTML_ELEMENT_TYPE_TH; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_COL])) { - return DOM_HTML_ELEMENT_TYPE_COL; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_COLGROUP])) { - return DOM_HTML_ELEMENT_TYPE_COLGROUP; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_THEAD])) { - return DOM_HTML_ELEMENT_TYPE_THEAD; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_TBODY])) { - return DOM_HTML_ELEMENT_TYPE_TBODY; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_TFOOT])) { - return DOM_HTML_ELEMENT_TYPE_TFOOT; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_TABLE])) { - return DOM_HTML_ELEMENT_TYPE_TABLE; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_TR])) { - return DOM_HTML_ELEMENT_TYPE_TR; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_STYLE])) { - return DOM_HTML_ELEMENT_TYPE_STYLE; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_FRAMESET])) { - return DOM_HTML_ELEMENT_TYPE_FRAMESET; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_FRAME])) { - return DOM_HTML_ELEMENT_TYPE_FRAME; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_IFRAME])) { - return DOM_HTML_ELEMENT_TYPE_IFRAME; - } else if (dom_string_isequal(tag_name_upper, - html->elements[DOM_HTML_ELEMENT_TYPE_ISINDEX])) { - return DOM_HTML_ELEMENT_TYPE_ISINDEX; + size_t len = dom_string_byte_length(tag_name_upper); + + switch (len) { + case 1: + if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_P])) { + return DOM_HTML_ELEMENT_TYPE_P; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_A])) { + return DOM_HTML_ELEMENT_TYPE_A; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_Q])) { + return DOM_HTML_ELEMENT_TYPE_Q; + } + break; + case 2: + if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_H1])) { + return DOM_HTML_ELEMENT_TYPE_H1; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_H2])) { + return DOM_HTML_ELEMENT_TYPE_H2; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_H3])) { + return DOM_HTML_ELEMENT_TYPE_H3; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_H4])) { + return DOM_HTML_ELEMENT_TYPE_H4; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_H5])) { + return DOM_HTML_ELEMENT_TYPE_H5; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_H6])) { + return DOM_HTML_ELEMENT_TYPE_H6; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_HR])) { + return DOM_HTML_ELEMENT_TYPE_HR; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_DL])) { + return DOM_HTML_ELEMENT_TYPE_DL; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_UL])) { + return DOM_HTML_ELEMENT_TYPE_UL; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_OL])) { + return DOM_HTML_ELEMENT_TYPE_OL; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_LI])) { + return DOM_HTML_ELEMENT_TYPE_LI; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_TD])) { + return DOM_HTML_ELEMENT_TYPE_TD; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_TH])) { + return DOM_HTML_ELEMENT_TYPE_TH; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_TR])) { + return DOM_HTML_ELEMENT_TYPE_TR; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_BR])) { + return DOM_HTML_ELEMENT_TYPE_BR; + } + break; + case 3: + if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_DIV])) { + return DOM_HTML_ELEMENT_TYPE_DIV; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_PRE])) { + return DOM_HTML_ELEMENT_TYPE_PRE; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_DEL])) { + return DOM_HTML_ELEMENT_TYPE_DEL; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_INS])) { + return DOM_HTML_ELEMENT_TYPE_INS; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_IMG])) { + return DOM_HTML_ELEMENT_TYPE_IMG; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_COL])) { + return DOM_HTML_ELEMENT_TYPE_COL; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_MAP])) { + return DOM_HTML_ELEMENT_TYPE_MAP; + } + break; + case 4: + if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_HTML])) { + return DOM_HTML_ELEMENT_TYPE_HTML; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_HEAD])) { + return DOM_HTML_ELEMENT_TYPE_HEAD; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_META])) { + return DOM_HTML_ELEMENT_TYPE_META; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_BASE])) { + return DOM_HTML_ELEMENT_TYPE_BASE; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_BODY])) { + return DOM_HTML_ELEMENT_TYPE_BODY; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_FORM])) { + return DOM_HTML_ELEMENT_TYPE_FORM; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_LINK])) { + return DOM_HTML_ELEMENT_TYPE_LINK; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_MENU])) { + return DOM_HTML_ELEMENT_TYPE_MENU; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_FONT])) { + return DOM_HTML_ELEMENT_TYPE_FONT; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_AREA])) { + return DOM_HTML_ELEMENT_TYPE_AREA; + } + break; + case 5: + if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_TITLE])) { + return DOM_HTML_ELEMENT_TYPE_TITLE; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_INPUT])) { + return DOM_HTML_ELEMENT_TYPE_INPUT; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_FRAME])) { + return DOM_HTML_ELEMENT_TYPE_FRAME; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_THEAD])) { + return DOM_HTML_ELEMENT_TYPE_THEAD; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_TBODY])) { + return DOM_HTML_ELEMENT_TYPE_TBODY; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_TFOOT])) { + return DOM_HTML_ELEMENT_TYPE_TFOOT; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_TABLE])) { + return DOM_HTML_ELEMENT_TYPE_TABLE; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_STYLE])) { + return DOM_HTML_ELEMENT_TYPE_STYLE; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_LABEL])) { + return DOM_HTML_ELEMENT_TYPE_LABEL; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_PARAM])) { + return DOM_HTML_ELEMENT_TYPE_PARAM; + } + break; + case 6: + if (dom_string_isequal(tag_name_upper,html->elements[ + DOM_HTML_ELEMENT_TYPE_BUTTON])) { + return DOM_HTML_ELEMENT_TYPE_BUTTON; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_OPTION])) { + return DOM_HTML_ELEMENT_TYPE_OPTION; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_SCRIPT])) { + return DOM_HTML_ELEMENT_TYPE_SCRIPT; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_IFRAME])) { + return DOM_HTML_ELEMENT_TYPE_IFRAME; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_LEGEND])) { + return DOM_HTML_ELEMENT_TYPE_LEGEND; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_SELECT])) { + return DOM_HTML_ELEMENT_TYPE_SELECT; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_OBJECT])) { + return DOM_HTML_ELEMENT_TYPE_OBJECT; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_APPLET])) { + return DOM_HTML_ELEMENT_TYPE_APPLET; + } + break; + case 7: + if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_CAPTION])) { + return DOM_HTML_ELEMENT_TYPE_CAPTION; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_ISINDEX])) { + return DOM_HTML_ELEMENT_TYPE_ISINDEX; + } + break; + case 8: + if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_TEXTAREA])) { + return DOM_HTML_ELEMENT_TYPE_TEXTAREA; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_OPTGROUP])) { + return DOM_HTML_ELEMENT_TYPE_OPTGROUP; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_BASEFONT])) { + return DOM_HTML_ELEMENT_TYPE_BASEFONT; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_FIELDSET])) { + return DOM_HTML_ELEMENT_TYPE_FIELDSET; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_COLGROUP])) { + return DOM_HTML_ELEMENT_TYPE_COLGROUP; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_FRAMESET])) { + return DOM_HTML_ELEMENT_TYPE_FRAMESET; + } + break; + case 9: + if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_DIRECTORY])) { + return DOM_HTML_ELEMENT_TYPE_DIRECTORY; + } + break; + case 10: + if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_BLOCKQUOTE])) { + return DOM_HTML_ELEMENT_TYPE_BLOCKQUOTE; + } + break; } return DOM_HTML_ELEMENT_TYPE__UNKNOWN; -- cgit v1.2.3 From 5b6c1914915e4c6c1b69e4c56cd60705e40daff3 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Wed, 27 Jan 2016 16:27:50 +0000 Subject: Fix longstanding failure to handle HTMLDirectoryElement specialisation. We were looking for DIRECTORY tags, but we should have been looking for DIR elements. --- include/dom/html/html_elements.h | 2 +- src/html/html_directory_element.c | 2 +- src/html/html_document.c | 11 ++++------- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/include/dom/html/html_elements.h b/include/dom/html/html_elements.h index d4aec10..5774657 100644 --- a/include/dom/html/html_elements.h +++ b/include/dom/html/html_elements.h @@ -32,7 +32,7 @@ DOM_HTML_ELEMENT_STRINGS_ENTRY(UL) \ DOM_HTML_ELEMENT_STRINGS_ENTRY(OL) \ DOM_HTML_ELEMENT_STRINGS_ENTRY(DL) \ - DOM_HTML_ELEMENT_STRINGS_ENTRY(DIRECTORY) \ + DOM_HTML_ELEMENT_STRINGS_ENTRY(DIR) \ DOM_HTML_ELEMENT_STRINGS_ENTRY(MENU) \ DOM_HTML_ELEMENT_STRINGS_ENTRY(LI) \ DOM_HTML_ELEMENT_STRINGS_ENTRY(BLOCKQUOTE) \ diff --git a/src/html/html_directory_element.c b/src/html/html_directory_element.c index 0ad88ae..1e06074 100644 --- a/src/html/html_directory_element.c +++ b/src/html/html_directory_element.c @@ -61,7 +61,7 @@ dom_exception _dom_html_directory_element_initialise(struct dom_html_document *d struct dom_html_directory_element *ele) { return _dom_html_element_initialise(doc, &ele->base, - doc->elements[DOM_HTML_ELEMENT_TYPE_DIRECTORY], + doc->elements[DOM_HTML_ELEMENT_TYPE_DIR], namespace, prefix); } diff --git a/src/html/html_document.c b/src/html/html_document.c index d50fb52..3d2a7f3 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -342,6 +342,9 @@ static inline dom_html_element_type _dom_html_document_get_element_type( } else if (dom_string_isequal(tag_name_upper, html->elements[ DOM_HTML_ELEMENT_TYPE_MAP])) { return DOM_HTML_ELEMENT_TYPE_MAP; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_DIR])) { + return DOM_HTML_ELEMENT_TYPE_DIR; } break; case 4: @@ -467,12 +470,6 @@ static inline dom_html_element_type _dom_html_document_get_element_type( return DOM_HTML_ELEMENT_TYPE_FRAMESET; } break; - case 9: - if (dom_string_isequal(tag_name_upper, html->elements[ - DOM_HTML_ELEMENT_TYPE_DIRECTORY])) { - return DOM_HTML_ELEMENT_TYPE_DIRECTORY; - } - break; case 10: if (dom_string_isequal(tag_name_upper, html->elements[ DOM_HTML_ELEMENT_TYPE_BLOCKQUOTE])) { @@ -577,7 +574,7 @@ _dom_html_document_create_element_internal( exc = _dom_html_dlist_element_create(html, namespace, prefix, (dom_html_dlist_element **) result); break; - case DOM_HTML_ELEMENT_TYPE_DIRECTORY: + case DOM_HTML_ELEMENT_TYPE_DIR: exc = _dom_html_directory_element_create(html, namespace, prefix, (dom_html_directory_element **) result); break; -- cgit v1.2.3