summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2012-02-05 21:01:43 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2012-02-05 21:01:43 +0000
commit1ab1ed7301d3885a00b3081b3bf7ccdeabd0466a (patch)
tree4179a08dad87ae02ef86d2bac69bba16901f7116
parent7b193ec6c254488870c0360a2a5bf004d1d848b4 (diff)
downloadlibdom-1ab1ed7301d3885a00b3081b3bf7ccdeabd0466a.tar.gz
libdom-1ab1ed7301d3885a00b3081b3bf7ccdeabd0466a.tar.bz2
Make HTMLDocument use dynamic dispatch like everything else.
Fix variable misuse in HTMLDocument constructor. Overload Document.createElement and Document.createElementNS for HTMLDocuments Re-enable decision to create HTMLDocument instead of Document in DOMImplementation.createDocument svn path=/trunk/libdom/; revision=13425
-rw-r--r--include/dom/html/html_document.h264
-rw-r--r--src/core/implementation.c14
-rw-r--r--src/html/html_document.c223
-rw-r--r--src/html/html_document.h98
4 files changed, 513 insertions, 86 deletions
diff --git a/include/dom/html/html_document.h b/include/dom/html/html_document.h
index d09cd36..6270f47 100644
--- a/include/dom/html/html_document.h
+++ b/include/dom/html/html_document.h
@@ -22,47 +22,233 @@ typedef struct dom_html_document dom_html_document;
typedef struct dom_html_document_vtable {
struct dom_document_vtable base;
+
+ dom_exception (*get_title)(dom_html_document *doc,
+ dom_string **title);
+ dom_exception (*set_title)(dom_html_document *doc,
+ dom_string *title);
+ dom_exception (*get_referer)(dom_html_document *doc,
+ dom_string **referer);
+ dom_exception (*get_domain)(dom_html_document *doc,
+ dom_string **domain);
+ dom_exception (*get_url)(dom_html_document *doc,
+ dom_string **url);
+ dom_exception (*get_body)(dom_html_document *doc,
+ struct dom_html_element **body);
+ dom_exception (*set_body)(dom_html_document *doc,
+ struct dom_html_element *body);
+ dom_exception (*get_images)(dom_html_document *doc,
+ struct dom_html_collection **col);
+ dom_exception (*get_applets)(dom_html_document *doc,
+ struct dom_html_collection **col);
+ dom_exception (*get_links)(dom_html_document *doc,
+ struct dom_html_collection **col);
+ dom_exception (*get_forms)(dom_html_document *doc,
+ struct dom_html_collection **col);
+ dom_exception (*get_anchors)(dom_html_document *doc,
+ struct dom_html_collection **col);
+ dom_exception (*get_cookie)(dom_html_document *doc,
+ dom_string **cookie);
+ dom_exception (*set_cookie)(dom_html_document *doc,
+ dom_string *cookie);
+
+ dom_exception (*open)(dom_html_document *doc);
+ dom_exception (*close)(dom_html_document *doc);
+ dom_exception (*write)(dom_html_document *doc,
+ dom_string *text);
+ dom_exception (*writeln)(dom_html_document *doc,
+ dom_string *text);
+ dom_exception (*get_elements_by_name)(dom_html_document *doc,
+ dom_string *name, struct dom_nodelist **list);
} dom_html_document_vtable;
-/* The DOM spec public API */
-
-dom_exception dom_html_document_get_title(dom_html_document *doc,
- dom_string **title);
-dom_exception dom_html_document_set_title(dom_html_document *doc,
- dom_string *title);
-dom_exception dom_html_document_get_referer(dom_html_document *doc,
- dom_string **referer);
-dom_exception dom_html_document_get_domain(dom_html_document *doc,
- dom_string **domain);
-dom_exception dom_html_document_get_url(dom_html_document *doc,
- dom_string **url);
-dom_exception dom_html_document_get_body(dom_html_document *doc,
- struct dom_html_element **body);
-dom_exception dom_html_document_set_body(dom_html_document *doc,
- struct dom_html_element *body);
-dom_exception dom_html_document_get_images(dom_html_document *doc,
- struct dom_html_collection **col);
-dom_exception dom_html_document_get_applets(dom_html_document *doc,
- struct dom_html_collection **col);
-dom_exception dom_html_document_get_links(dom_html_document *doc,
- struct dom_html_collection **col);
-dom_exception dom_html_document_get_forms(dom_html_document *doc,
- struct dom_html_collection **col);
-dom_exception dom_html_document_get_anchors(dom_html_document *doc,
- struct dom_html_collection **col);
-dom_exception dom_html_document_get_cookie(dom_html_document *doc,
- dom_string **cookie);
-dom_exception dom_html_document_set_cookie(dom_html_document *doc,
- dom_string *cookie);
-
-dom_exception dom_html_document_open(dom_html_document *doc);
-dom_exception dom_html_document_close(dom_html_document *doc);
-dom_exception dom_html_document_write(dom_html_document *doc,
- dom_string *text);
-dom_exception dom_html_document_writeln(dom_html_document *doc,
- dom_string *text);
-dom_exception dom_html_document_get_elements_by_name(dom_html_document *doc,
- dom_string *name, struct dom_nodelist **list);
+static inline dom_exception dom_html_document_get_title(
+ dom_html_document *doc, dom_string **title)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ get_title(doc, title);
+}
+#define dom_html_document_get_title(d, t) \
+ dom_html_document_get_title((dom_html_document *) (d), \
+ (dom_string **) (t))
+
+static inline dom_exception dom_html_document_set_title(dom_html_document *doc,
+ dom_string *title)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ set_title(doc, title);
+}
+#define dom_html_document_set_title(d, t) \
+ dom_html_document_set_title((dom_html_document *) (d), \
+ (dom_string **) (t))
+
+static inline dom_exception dom_html_document_get_referer(dom_html_document *doc,
+ dom_string **referer)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ get_referer(doc, referer);
+}
+#define dom_html_document_get_referer(d, r) \
+ dom_html_document_get_referer((dom_html_document *) (d), \
+ (dom_string **) (r))
+
+static inline dom_exception dom_html_document_get_domain(dom_html_document *doc,
+ dom_string **domain)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ get_domain(doc, domain);
+}
+#define dom_html_document_get_domain(d, t) \
+ dom_html_document_get_domain((dom_html_document *) (d), \
+ (dom_string **) (t))
+
+static inline dom_exception dom_html_document_get_url(dom_html_document *doc,
+ dom_string **url)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ get_url(doc, url);
+}
+#define dom_html_document_get_url(d, u) \
+ dom_html_document_get_url((dom_html_document *) (d), \
+ (dom_string **) (u))
+
+static inline dom_exception dom_html_document_get_body(dom_html_document *doc,
+ struct dom_html_element **body)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ get_body(doc, body);
+}
+#define dom_html_document_get_body(d, b) \
+ dom_html_document_get_title((dom_html_document *) (d), \
+ (struct dom_html_element **) (b))
+
+static inline dom_exception dom_html_document_set_body(dom_html_document *doc,
+ struct dom_html_element *body)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ set_body(doc, body);
+}
+#define dom_html_document_set_body(d, b) \
+ dom_html_document_set_body((dom_html_document *) (d), \
+ (struct dom_html_element **) (b))
+
+static inline dom_exception dom_html_document_get_images(dom_html_document *doc,
+ struct dom_html_collection **col)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ get_images(doc, col);
+}
+#define dom_html_document_get_images(d, c) \
+ dom_html_document_get_images((dom_html_document *) (d), \
+ (struct dom_html_collection **) (c))
+
+static inline dom_exception dom_html_document_get_applets(dom_html_document *doc,
+ struct dom_html_collection **col)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ get_applets(doc, col);
+}
+#define dom_html_document_get_applets(d, c) \
+ dom_html_document_get_applets((dom_html_document *) (d), \
+ (struct dom_html_collection **) (c))
+
+static inline dom_exception dom_html_document_get_links(dom_html_document *doc,
+ struct dom_html_collection **col)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ get_links(doc, col);
+}
+#define dom_html_document_get_links(d, c) \
+ dom_html_document_get_links((dom_html_document *) (d), \
+ (struct dom_html_collection **) (c))
+
+static inline dom_exception dom_html_document_get_forms(dom_html_document *doc,
+ struct dom_html_collection **col)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ get_forms(doc, col);
+}
+#define dom_html_document_get_forms(d, c) \
+ dom_html_document_get_forms((dom_html_document *) (d), \
+ (struct dom_html_collection **) (c))
+
+static inline dom_exception dom_html_document_get_anchors(dom_html_document *doc,
+ struct dom_html_collection **col)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ get_anchors(doc, col);
+}
+#define dom_html_document_get_anchors(d, c) \
+ dom_html_document_get_title((dom_html_document *) (d), \
+ (struct dom_html_collection **) (c))
+
+static inline dom_exception dom_html_document_get_cookie(dom_html_document *doc,
+ dom_string **cookie)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ get_cookie(doc, cookie);
+}
+#define dom_html_document_get_cookie(d, c) \
+ dom_html_document_get_title((dom_html_document *) (d), \
+ (dom_string **) (c))
+
+static inline dom_exception dom_html_document_set_cookie(dom_html_document *doc,
+ dom_string *cookie)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ set_cookie(doc, cookie);
+}
+#define dom_html_document_set_cookie(d, c) \
+ dom_html_document_set_cookie((dom_html_document *) (d), \
+ (dom_string **) (c))
+
+
+static inline dom_exception dom_html_document_open(dom_html_document *doc)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ open(doc);
+}
+#define dom_html_document_open(d) \
+ dom_html_document_open((dom_html_document *) (d))
+
+static inline dom_exception dom_html_document_close(dom_html_document *doc)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ close(doc);
+}
+#define dom_html_document_close(d) \
+ dom_html_document_close((dom_html_document *) (d))
+
+
+static inline dom_exception dom_html_document_write(dom_html_document *doc,
+ dom_string *text)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ write(doc, text);
+}
+#define dom_html_document_write(d, t) \
+ dom_html_document_write((dom_html_document *) (d), \
+ (dom_string *) (t))
+
+static inline dom_exception dom_html_document_writeln(dom_html_document *doc,
+ dom_string *text)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ writeln(doc, text);
+}
+#define dom_html_document_writeln(d, t) \
+ dom_html_document_writeln((dom_html_document *) (d), \
+ (dom_string *) (t))
+
+static inline dom_exception dom_html_document_get_elements_by_name(dom_html_document *doc,
+ dom_string *name, struct dom_nodelist **list)
+{
+ return ((dom_html_document_vtable *) ((dom_node *) doc)->vtable)->
+ get_elements_by_name(doc, name, list);
+}
+#define dom_html_document_get_elements_by_name(d, n, l) \
+ dom_html_document_get_element_by_name((dom_html_document *) (d), \
+ (dom_string *) (n), (struct dom_nodelist **) (l))
#endif
diff --git a/src/core/implementation.c b/src/core/implementation.c
index ab87e6d..08ce996 100644
--- a/src/core/implementation.c
+++ b/src/core/implementation.c
@@ -209,23 +209,13 @@ dom_exception dom_implementation_create_document(
}
/* Create document object that reflects the required APIs */
- /** \todo Why do these have different APIs?
- * Why is the html document constructor public? */
- /** \todo Of course, none of the HTML stuff actually works,
- * so enabling it results in total breakage of the testsuite */
-#ifdef WITH_NON_BROKEN_HTML_IMPLEMENTATION
if (impl_type == DOM_IMPLEMENTATION_HTML) {
dom_html_document *html_doc;
- err = dom_html_document_create(NULL, NULL,
- daf, NULL, DOM_HTML_PARSER, &html_doc);
+ err = _dom_html_document_create(daf, &html_doc);
d = (dom_document *) html_doc;
- } else
-#else
- UNUSED(impl_type);
-#endif
- {
+ } else {
err = _dom_document_create(daf, &d);
}
diff --git a/src/html/html_document.c b/src/html/html_document.c
index 673615e..52e0b9c 100644
--- a/src/html/html_document.c
+++ b/src/html/html_document.c
@@ -9,9 +9,12 @@
#include <stdlib.h>
#include "html/html_document.h"
+#include "html/html_element.h"
#include "core/string.h"
+#include "utils/namespace.h"
#include "utils/utils.h"
+#include "utils/validate.h"
static struct dom_html_document_vtable html_document_vtable = {
{
@@ -21,8 +24,9 @@ static struct dom_html_document_vtable html_document_vtable = {
},
DOM_NODE_VTABLE,
},
- DOM_DOCUMENT_VTABLE
- }
+ DOM_DOCUMENT_VTABLE_HTML
+ },
+ DOM_HTML_DOCUMENT_VTABLE
};
static struct dom_node_protect_vtable html_document_protect_vtable = {
@@ -44,7 +48,7 @@ dom_exception _dom_html_document_create(
result->base.base.base.vtable = &html_document_vtable;
result->base.base.vtable = &html_document_protect_vtable;
- error = _dom_html_document_initialise(*doc, daf);
+ error = _dom_html_document_initialise(result, daf);
if (error != DOM_NO_ERR) {
free(result);
return error;
@@ -104,6 +108,60 @@ dom_exception _dom_html_document_copy(dom_node_internal *old,
return DOM_NOT_SUPPORTED_ERR;
}
+/* Overloaded methods inherited from super class */
+/** \todo: dispatch on tag name to create correct HTMLElement subclass */
+
+dom_exception _dom_html_document_create_element(dom_document *doc,
+ dom_string *tag_name, dom_element **result)
+{
+ dom_html_document *html = (dom_html_document *) doc;
+
+ if (_dom_validate_name(tag_name) == false)
+ return DOM_INVALID_CHARACTER_ERR;
+
+ return _dom_html_element_create(html, tag_name, NULL, NULL,
+ (dom_html_element **) result);
+}
+
+dom_exception _dom_html_document_create_element_ns(dom_document *doc,
+ dom_string *namespace, dom_string *qname,
+ dom_element **result)
+{
+ dom_html_document *html = (dom_html_document *) doc;
+ dom_string *prefix, *localname;
+ dom_exception err;
+
+ if (_dom_validate_name(qname) == false)
+ return DOM_INVALID_CHARACTER_ERR;
+
+ /* Validate qname */
+ err = _dom_namespace_validate_qname(qname, namespace);
+ if (err != DOM_NO_ERR) {
+ return err;
+ }
+
+ /* Divide QName into prefix/localname pair */
+ err = _dom_namespace_split_qname(qname, &prefix, &localname);
+ if (err != DOM_NO_ERR) {
+ return err;
+ }
+
+ /* Attempt to create element */
+ err = _dom_html_element_create(html, localname, namespace, prefix,
+ (dom_html_element **) result);
+
+ /* Tidy up */
+ if (localname != NULL) {
+ dom_string_unref(localname);
+ }
+
+ if (prefix != NULL) {
+ dom_string_unref(prefix);
+ }
+
+ return err;
+}
+
/*-----------------------------------------------------------------------*/
/* The DOM spec public API */
@@ -119,7 +177,7 @@ dom_exception _dom_html_document_copy(dom_node_internal *old,
* 2. If there is no such one, find the <title> element and use its text
* as the returned title.
*/
-dom_exception dom_html_document_get_title(dom_html_document *doc,
+dom_exception _dom_html_document_get_title(dom_html_document *doc,
dom_string **title)
{
if (doc->title != NULL) {
@@ -131,7 +189,7 @@ dom_exception dom_html_document_get_title(dom_html_document *doc,
return DOM_NO_ERR;
}
-dom_exception dom_html_document_set_title(dom_html_document *doc,
+dom_exception _dom_html_document_set_title(dom_html_document *doc,
dom_string *title)
{
if (doc->title != NULL)
@@ -142,7 +200,7 @@ dom_exception dom_html_document_set_title(dom_html_document *doc,
return DOM_NO_ERR;
}
-dom_exception dom_html_document_get_referer(dom_html_document *doc,
+dom_exception _dom_html_document_get_referer(dom_html_document *doc,
dom_string **referer)
{
*referer = dom_string_ref(doc->referer);
@@ -150,7 +208,7 @@ dom_exception dom_html_document_get_referer(dom_html_document *doc,
return DOM_NO_ERR;
}
-dom_exception dom_html_document_get_domain(dom_html_document *doc,
+dom_exception _dom_html_document_get_domain(dom_html_document *doc,
dom_string **domain)
{
*domain = dom_string_ref(doc->domain);
@@ -158,7 +216,7 @@ dom_exception dom_html_document_get_domain(dom_html_document *doc,
return DOM_NO_ERR;
}
-dom_exception dom_html_document_get_url(dom_html_document *doc,
+dom_exception _dom_html_document_get_url(dom_html_document *doc,
dom_string **url)
{
*url = dom_string_ref(doc->url);
@@ -166,31 +224,126 @@ dom_exception dom_html_document_get_url(dom_html_document *doc,
return DOM_NO_ERR;
}
-dom_exception dom_html_document_get_body(dom_html_document *doc,
- struct dom_html_element **body);
-dom_exception dom_html_document_set_body(dom_html_document *doc,
- struct dom_html_element *body);
-dom_exception dom_html_document_get_images(dom_html_document *doc,
- struct dom_html_collection **col);
-dom_exception dom_html_document_get_applets(dom_html_document *doc,
- struct dom_html_collection **col);
-dom_exception dom_html_document_get_links(dom_html_document *doc,
- struct dom_html_collection **col);
-dom_exception dom_html_document_get_forms(dom_html_document *doc,
- struct dom_html_collection **col);
-dom_exception dom_html_document_get_anchors(dom_html_document *doc,
- struct dom_html_collection **col);
-dom_exception dom_html_document_get_cookie(dom_html_document *doc,
- dom_string **cookie);
-dom_exception dom_html_document_set_cookie(dom_html_document *doc,
- dom_string *cookie);
-
-dom_exception dom_html_document_open(dom_html_document *doc);
-dom_exception dom_html_document_close(dom_html_document *doc);
-dom_exception dom_html_document_write(dom_html_document *doc,
- dom_string *text);
-dom_exception dom_html_document_writeln(dom_html_document *doc,
- dom_string *text);
-dom_exception dom_html_document_get_elements_by_name(dom_html_document *doc,
- dom_string *name, struct dom_nodelist **list);
+dom_exception _dom_html_document_get_body(dom_html_document *doc,
+ struct dom_html_element **body)
+{
+ UNUSED(doc);
+ UNUSED(body);
+
+ return DOM_NOT_SUPPORTED_ERR;
+}
+
+dom_exception _dom_html_document_set_body(dom_html_document *doc,
+ struct dom_html_element *body)
+{
+ UNUSED(doc);
+ UNUSED(body);
+
+ return DOM_NOT_SUPPORTED_ERR;
+}
+
+dom_exception _dom_html_document_get_images(dom_html_document *doc,
+ struct dom_html_collection **col)
+{
+ UNUSED(doc);
+ UNUSED(col);
+
+ return DOM_NOT_SUPPORTED_ERR;
+}
+
+dom_exception _dom_html_document_get_applets(dom_html_document *doc,
+ struct dom_html_collection **col)
+{
+ UNUSED(doc);
+ UNUSED(col);
+
+ return DOM_NOT_SUPPORTED_ERR;
+}
+
+dom_exception _dom_html_document_get_links(dom_html_document *doc,
+ struct dom_html_collection **col)
+{
+ UNUSED(doc);
+ UNUSED(col);
+
+ return DOM_NOT_SUPPORTED_ERR;
+}
+
+dom_exception _dom_html_document_get_forms(dom_html_document *doc,
+ struct dom_html_collection **col)
+{
+ UNUSED(doc);
+ UNUSED(col);
+
+ return DOM_NOT_SUPPORTED_ERR;
+}
+
+dom_exception _dom_html_document_get_anchors(dom_html_document *doc,
+ struct dom_html_collection **col)
+{
+ UNUSED(doc);
+ UNUSED(col);
+
+ return DOM_NOT_SUPPORTED_ERR;
+}
+
+dom_exception _dom_html_document_get_cookie(dom_html_document *doc,
+ dom_string **cookie)
+{
+ UNUSED(doc);
+ UNUSED(cookie);
+
+ return DOM_NOT_SUPPORTED_ERR;
+}
+
+dom_exception _dom_html_document_set_cookie(dom_html_document *doc,
+ dom_string *cookie)
+{
+ UNUSED(doc);
+ UNUSED(cookie);
+
+ return DOM_NOT_SUPPORTED_ERR;
+}
+
+dom_exception _dom_html_document_open(dom_html_document *doc)
+{
+ UNUSED(doc);
+
+ return DOM_NOT_SUPPORTED_ERR;
+}
+
+dom_exception _dom_html_document_close(dom_html_document *doc)
+{
+ UNUSED(doc);
+
+ return DOM_NOT_SUPPORTED_ERR;
+}
+
+dom_exception _dom_html_document_write(dom_html_document *doc,
+ dom_string *text)
+{
+ UNUSED(doc);
+ UNUSED(text);
+
+ return DOM_NOT_SUPPORTED_ERR;
+}
+
+dom_exception _dom_html_document_writeln(dom_html_document *doc,
+ dom_string *text)
+{
+ UNUSED(doc);
+ UNUSED(text);
+
+ return DOM_NOT_SUPPORTED_ERR;
+}
+
+dom_exception _dom_html_document_get_elements_by_name(dom_html_document *doc,
+ dom_string *name, struct dom_nodelist **list)
+{
+ UNUSED(doc);
+ UNUSED(name);
+ UNUSED(list);
+
+ return DOM_NOT_SUPPORTED_ERR;
+}
diff --git a/src/html/html_document.h b/src/html/html_document.h
index 28041d6..f27de20 100644
--- a/src/html/html_document.h
+++ b/src/html/html_document.h
@@ -43,5 +43,103 @@ dom_exception _dom_html_document_copy(dom_node_internal *old,
_dom_html_document_destroy, \
_dom_html_document_copy
+dom_exception _dom_html_document_get_title(dom_html_document *doc,
+ dom_string **title);
+dom_exception _dom_html_document_set_title(dom_html_document *doc,
+ dom_string *title);
+dom_exception _dom_html_document_get_referer(dom_html_document *doc,
+ dom_string **referer);
+dom_exception _dom_html_document_get_domain(dom_html_document *doc,
+ dom_string **domain);
+dom_exception _dom_html_document_get_url(dom_html_document *doc,
+ dom_string **url);
+dom_exception _dom_html_document_get_body(dom_html_document *doc,
+ struct dom_html_element **body);
+dom_exception _dom_html_document_set_body(dom_html_document *doc,
+ struct dom_html_element *body);
+dom_exception _dom_html_document_get_images(dom_html_document *doc,
+ struct dom_html_collection **col);
+dom_exception _dom_html_document_get_applets(dom_html_document *doc,
+ struct dom_html_collection **col);
+dom_exception _dom_html_document_get_links(dom_html_document *doc,
+ struct dom_html_collection **col);
+dom_exception _dom_html_document_get_forms(dom_html_document *doc,
+ struct dom_html_collection **col);
+dom_exception _dom_html_document_get_anchors(dom_html_document *doc,
+ struct dom_html_collection **col);
+dom_exception _dom_html_document_get_cookie(dom_html_document *doc,
+ dom_string **cookie);
+dom_exception _dom_html_document_set_cookie(dom_html_document *doc,
+ dom_string *cookie);
+
+dom_exception _dom_html_document_open(dom_html_document *doc);
+dom_exception _dom_html_document_close(dom_html_document *doc);
+dom_exception _dom_html_document_write(dom_html_document *doc,
+ dom_string *text);
+dom_exception _dom_html_document_writeln(dom_html_document *doc,
+ dom_string *text);
+dom_exception _dom_html_document_get_elements_by_name(dom_html_document *doc,
+ dom_string *name, struct dom_nodelist **list);
+
+#define DOM_HTML_DOCUMENT_VTABLE \
+ _dom_html_document_get_title, \
+ _dom_html_document_set_title, \
+ _dom_html_document_get_referer, \
+ _dom_html_document_get_domain, \
+ _dom_html_document_get_url, \
+ _dom_html_document_get_body, \
+ _dom_html_document_set_body, \
+ _dom_html_document_get_images, \
+ _dom_html_document_get_applets, \
+ _dom_html_document_get_links, \
+ _dom_html_document_get_forms, \
+ _dom_html_document_get_anchors, \
+ _dom_html_document_get_cookie, \
+ _dom_html_document_set_cookie, \
+ _dom_html_document_open, \
+ _dom_html_document_close, \
+ _dom_html_document_write, \
+ _dom_html_document_writeln, \
+ _dom_html_document_get_elements_by_name
+
+dom_exception _dom_html_document_create_element(dom_document *doc,
+ dom_string *tag_name, dom_element **result);
+dom_exception _dom_html_document_create_element_ns(dom_document *doc,
+ dom_string *namespace, dom_string *qname,
+ dom_element **result);
+
+#define DOM_DOCUMENT_VTABLE_HTML \
+ _dom_document_get_doctype, \
+ _dom_document_get_implementation, \
+ _dom_document_get_document_element, \
+ _dom_html_document_create_element, \
+ _dom_document_create_document_fragment, \
+ _dom_document_create_text_node, \
+ _dom_document_create_comment, \
+ _dom_document_create_cdata_section, \
+ _dom_document_create_processing_instruction, \
+ _dom_document_create_attribute, \
+ _dom_document_create_entity_reference, \
+ _dom_document_get_elements_by_tag_name, \
+ _dom_document_import_node, \
+ _dom_html_document_create_element_ns, \
+ _dom_document_create_attribute_ns, \
+ _dom_document_get_elements_by_tag_name_ns, \
+ _dom_document_get_element_by_id, \
+ _dom_document_get_input_encoding, \
+ _dom_document_get_xml_encoding, \
+ _dom_document_get_xml_standalone, \
+ _dom_document_set_xml_standalone, \
+ _dom_document_get_xml_version, \
+ _dom_document_set_xml_version, \
+ _dom_document_get_strict_error_checking, \
+ _dom_document_set_strict_error_checking, \
+ _dom_document_get_uri, \
+ _dom_document_set_uri, \
+ _dom_document_adopt_node, \
+ _dom_document_get_dom_config, \
+ _dom_document_normalize, \
+ _dom_document_rename_node
+
#endif