summaryrefslogtreecommitdiff
path: root/src/html/html_document.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/html/html_document.c')
-rw-r--r--src/html/html_document.c41
1 files changed, 38 insertions, 3 deletions
diff --git a/src/html/html_document.c b/src/html/html_document.c
index 50a15a7..cf3c25d 100644
--- a/src/html/html_document.c
+++ b/src/html/html_document.c
@@ -17,6 +17,7 @@
#include "html/html_head_element.h"
#include "html/html_body_element.h"
#include "html/html_base_element.h"
+#include "html/html_canvas_element.h"
#include "html/html_div_element.h"
#include "html/html_link_element.h"
#include "html/html_title_element.h"
@@ -71,7 +72,7 @@
#include "utils/namespace.h"
#include "utils/utils.h"
-static struct dom_html_document_vtable html_document_vtable = {
+static const struct dom_html_document_vtable html_document_vtable = {
{
{
{
@@ -84,7 +85,7 @@ static struct dom_html_document_vtable html_document_vtable = {
DOM_HTML_DOCUMENT_VTABLE
};
-static struct dom_node_protect_vtable html_document_protect_vtable = {
+static const struct dom_node_protect_vtable html_document_protect_vtable = {
DOM_HTML_DOCUMENT_PROTECT_VTABLE
};
@@ -318,6 +319,8 @@ static inline dom_html_element_type _dom_html_document_get_element_type(
RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_RP)
else
RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_RT)
+ else
+ RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_TT)
break;
case 3:
RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_DIV)
@@ -353,6 +356,8 @@ static inline dom_html_element_type _dom_html_document_get_element_type(
RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_BDO)
else
RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_WBR)
+ else
+ RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_BIG)
break;
case 4:
RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_META)
@@ -394,6 +399,8 @@ static inline dom_html_element_type _dom_html_document_get_element_type(
RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_BASE)
else
RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_TIME)
+ else
+ RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_NOBR)
break;
case 5:
RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_INPUT)
@@ -468,6 +475,10 @@ static inline dom_html_element_type _dom_html_document_get_element_type(
RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_SOURCE)
else
RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_STRONG)
+ else
+ RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_SPACER)
+ else
+ RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_STRIKE)
break;
case 7:
RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_CAPTION)
@@ -485,6 +496,12 @@ static inline dom_html_element_type _dom_html_document_get_element_type(
RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_SECTION)
else
RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_SUMMARY)
+ else
+ RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_ACRONYM)
+ else
+ RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_BGSOUND)
+ else
+ RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_MARQUEE)
break;
case 8:
RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_TEXTAREA)
@@ -508,6 +525,8 @@ static inline dom_html_element_type _dom_html_document_get_element_type(
RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_PROGRESS)
else
RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_TEMPLATE)
+ else
+ RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_NOFRAMES)
break;
case 10:
RETURN_IF_MATCH(upper, DOM_HTML_ELEMENT_TYPE_BLOCKQUOTE)
@@ -535,6 +554,10 @@ _dom_html_document_create_element_internal(
dom_exception exc;
struct dom_html_element_create_params params;
+ /* If the input tag name is empty, this is an 'invalid character' error */
+ if (dom_string_length(in_tag_name) == 0)
+ return DOM_INVALID_CHARACTER_ERR;
+
exc = dom_string_toupper(in_tag_name, true, &params.name);
if (exc != DOM_NO_ERR)
return exc;
@@ -771,6 +794,10 @@ _dom_html_document_create_element_internal(
exc = _dom_html_isindex_element_create(&params,
(dom_html_isindex_element **) result);
break;
+ case DOM_HTML_ELEMENT_TYPE_CANVAS:
+ exc = _dom_html_canvas_element_create(&params,
+ (dom_html_canvas_element **) result);
+ break;
case DOM_HTML_ELEMENT_TYPE_DATA:
case DOM_HTML_ELEMENT_TYPE_SPAN:
case DOM_HTML_ELEMENT_TYPE_TIME:
@@ -779,7 +806,6 @@ _dom_html_document_create_element_internal(
case DOM_HTML_ELEMENT_TYPE_METER:
case DOM_HTML_ELEMENT_TYPE_TRACK:
case DOM_HTML_ELEMENT_TYPE_VIDEO:
- case DOM_HTML_ELEMENT_TYPE_CANVAS:
case DOM_HTML_ELEMENT_TYPE_DIALOG:
case DOM_HTML_ELEMENT_TYPE_KEYGEN:
case DOM_HTML_ELEMENT_TYPE_OUTPUT:
@@ -801,8 +827,10 @@ _dom_html_document_create_element_internal(
case DOM_HTML_ELEMENT_TYPE_EM:
case DOM_HTML_ELEMENT_TYPE_RP:
case DOM_HTML_ELEMENT_TYPE_RT:
+ case DOM_HTML_ELEMENT_TYPE_TT:
case DOM_HTML_ELEMENT_TYPE_BDI:
case DOM_HTML_ELEMENT_TYPE_BDO:
+ case DOM_HTML_ELEMENT_TYPE_BIG:
case DOM_HTML_ELEMENT_TYPE_DFN:
case DOM_HTML_ELEMENT_TYPE_KBD:
case DOM_HTML_ELEMENT_TYPE_NAV:
@@ -815,6 +843,7 @@ _dom_html_document_create_element_internal(
case DOM_HTML_ELEMENT_TYPE_CODE:
case DOM_HTML_ELEMENT_TYPE_MAIN:
case DOM_HTML_ELEMENT_TYPE_MARK:
+ case DOM_HTML_ELEMENT_TYPE_NOBR:
case DOM_HTML_ELEMENT_TYPE_RUBY:
case DOM_HTML_ELEMENT_TYPE_SAMP:
case DOM_HTML_ELEMENT_TYPE_ASIDE:
@@ -825,10 +854,16 @@ _dom_html_document_create_element_internal(
case DOM_HTML_ELEMENT_TYPE_HEADER:
case DOM_HTML_ELEMENT_TYPE_HGROUP:
case DOM_HTML_ELEMENT_TYPE_STRONG:
+ case DOM_HTML_ELEMENT_TYPE_SPACER:
+ case DOM_HTML_ELEMENT_TYPE_STRIKE:
+ case DOM_HTML_ELEMENT_TYPE_ACRONYM:
case DOM_HTML_ELEMENT_TYPE_ADDRESS:
case DOM_HTML_ELEMENT_TYPE_ARTICLE:
+ case DOM_HTML_ELEMENT_TYPE_BGSOUND:
+ case DOM_HTML_ELEMENT_TYPE_MARQUEE:
case DOM_HTML_ELEMENT_TYPE_SECTION:
case DOM_HTML_ELEMENT_TYPE_SUMMARY:
+ case DOM_HTML_ELEMENT_TYPE_NOFRAMES:
case DOM_HTML_ELEMENT_TYPE_NOSCRIPT:
case DOM_HTML_ELEMENT_TYPE_FIGCAPTION:
/* These have no specialisation: use HTMLElement */