diff options
author | Michael Drake <michael.drake@codethink.co.uk> | 2016-01-27 17:58:27 +0000 |
---|---|---|
committer | Michael Drake <michael.drake@codethink.co.uk> | 2016-01-27 17:58:27 +0000 |
commit | 9def0a44e12c1469e0e4af2881242f5f1df9b3a0 (patch) | |
tree | 1cc1a2e934354e75e609357d7627e16371a0e50c /src | |
parent | 410274173d434e34a5eb085d13228d68cd44d509 (diff) | |
parent | 5b6c1914915e4c6c1b69e4c56cd60705e40daff3 (diff) | |
download | libdom-9def0a44e12c1469e0e4af2881242f5f1df9b3a0.tar.gz libdom-9def0a44e12c1469e0e4af2881242f5f1df9b3a0.tar.bz2 |
Merge branch 'tlsa/html-element-type'
Diffstat (limited to 'src')
57 files changed, 677 insertions, 351 deletions
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_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 */ 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..1e06074 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_DIR], + 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..3d2a7f3 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -8,12 +8,16 @@ #include <assert.h> #include <stdlib.h> +#include <dom/html/html_elements.h> + #include "html/html_document.h" #include "html/html_element.h" #include "html/html_collection.h" #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" #include "html/html_meta_element.h" @@ -134,10 +138,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 +155,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 <dom/html/html_elements.h> +#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 +217,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); } @@ -205,186 +248,493 @@ 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) +{ + 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; + } else if (dom_string_isequal(tag_name_upper, html->elements[ + DOM_HTML_ELEMENT_TYPE_DIR])) { + return DOM_HTML_ELEMENT_TYPE_DIR; + } + 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 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; +} + /* 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->memoised[hds_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->memoised[hds_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->memoised[hds_TITLE])) { + 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_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); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_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->memoised[hds_FORM])) { + 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); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_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->memoised[hds_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->memoised[hds_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->memoised[hds_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])) { - 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])) { + 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->memoised[hds_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->memoised[hds_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->memoised[hds_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->memoised[hds_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])) { + break; + case DOM_HTML_ELEMENT_TYPE_DIR: + 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->memoised[hds_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])) { + 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->memoised[hds_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, + 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->memoised[hds_Q])) { + 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); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_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->memoised[hds_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->memoised[hds_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->memoised[hds_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->memoised[hds_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->memoised[hds_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->memoised[hds_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->memoised[hds_DEL]) || - dom_string_caseless_isequal(tag_name, html->memoised[hds_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->memoised[hds_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->memoised[hds_BASEFONT])) { - exc = _dom_html_base_font_element_create(html, namespace, prefix, + 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->memoised[hds_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->memoised[hds_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->memoised[hds_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->memoised[hds_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->memoised[hds_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->memoised[hds_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->memoised[hds_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->memoised[hds_CAPTION])) { - exc = _dom_html_table_caption_element_create(html, namespace, prefix, + 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->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, + 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->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, + 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->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, + 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->memoised[hds_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->memoised[hds_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])) { + 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); - } else if (dom_string_caseless_isequal(tag_name, html->memoised[hds_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])) { + 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->memoised[hds_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->memoised[hds_ISINDEX])) { + break; + case DOM_HTML_ELEMENT_TYPE_ISINDEX: exc = _dom_html_isindex_element_create(html, namespace, prefix, (dom_html_isindex_element **) result); - } else { + break; + case DOM_HTML_ELEMENT_TYPE__UNKNOWN: exc = _dom_html_element_create(html, tag_name, namespace, prefix, result); + break; } dom_string_unref(tag_name); @@ -576,8 +926,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 +1004,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 +1018,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 +1063,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 +1087,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 +1104,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 +1143,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 +1185,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 +1222,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 <dom/html/html_element.h> +#include <dom/html/html_elements.h> #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); } /** |