summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bindings/hubbub/parser.c11
-rw-r--r--include/dom/html/html_elements.h94
-rw-r--r--src/html/html_anchor_element.c4
-rw-r--r--src/html/html_applet_element.c2
-rw-r--r--src/html/html_area_element.c4
-rw-r--r--src/html/html_base_element.c18
-rw-r--r--src/html/html_base_element.h2
-rw-r--r--src/html/html_basefont_element.c4
-rw-r--r--src/html/html_body_element.c7
-rw-r--r--src/html/html_br_element.c4
-rw-r--r--src/html/html_button_element.c4
-rw-r--r--src/html/html_directory_element.c4
-rw-r--r--src/html/html_div_element.c4
-rw-r--r--src/html/html_dlist_element.c4
-rw-r--r--src/html/html_document.c573
-rw-r--r--src/html/html_document.h2
-rw-r--r--src/html/html_document_strings.h64
-rw-r--r--src/html/html_element.h1
-rw-r--r--src/html/html_fieldset_element.c6
-rw-r--r--src/html/html_font_element.c4
-rw-r--r--src/html/html_form_element.c12
-rw-r--r--src/html/html_frame_element.c8
-rw-r--r--src/html/html_frameset_element.c4
-rw-r--r--src/html/html_head_element.c4
-rw-r--r--src/html/html_heading_element.c3
-rw-r--r--src/html/html_hr_element.c4
-rw-r--r--src/html/html_html_element.c7
-rw-r--r--src/html/html_iframe_element.c7
-rw-r--r--src/html/html_image_element.c4
-rw-r--r--src/html/html_input_element.c4
-rw-r--r--src/html/html_isindex_element.c4
-rw-r--r--src/html/html_label_element.c4
-rw-r--r--src/html/html_legend_element.c6
-rw-r--r--src/html/html_li_element.c4
-rw-r--r--src/html/html_link_element.c4
-rw-r--r--src/html/html_map_element.c8
-rw-r--r--src/html/html_menu_element.c4
-rw-r--r--src/html/html_meta_element.c4
-rw-r--r--src/html/html_mod_element.c3
-rw-r--r--src/html/html_object_element.c4
-rw-r--r--src/html/html_olist_element.c4
-rw-r--r--src/html/html_opt_group_element.c4
-rw-r--r--src/html/html_option_element.c8
-rw-r--r--src/html/html_options_collection.c2
-rw-r--r--src/html/html_paragraph_element.c4
-rw-r--r--src/html/html_param_element.c4
-rw-r--r--src/html/html_pre_element.c4
-rw-r--r--src/html/html_quote_element.c4
-rw-r--r--src/html/html_script_element.c4
-rw-r--r--src/html/html_select_element.c5
-rw-r--r--src/html/html_table_element.c48
-rw-r--r--src/html/html_tablecaption_element.c4
-rw-r--r--src/html/html_tablecell_element.c31
-rw-r--r--src/html/html_tablecol_element.c6
-rw-r--r--src/html/html_tablerow_element.c65
-rw-r--r--src/html/html_tablesection_element.c6
-rw-r--r--src/html/html_text_area_element.c4
-rw-r--r--src/html/html_title_element.c4
-rw-r--r--src/html/html_ulist_element.c4
59 files changed, 777 insertions, 356 deletions
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..5774657
--- /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 <michael.drake@codethink.co.uk>
+ */
+
+#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(DIR) \
+ 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_<TAG_NAME> 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_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, &section_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);
}
/**