From 4e99ad2213dba5244f2df0f73d8c32c16f995840 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 10:41:17 +0100 Subject: Ignore ~ files --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 670c484..a12a172 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,4 @@ build/docs examples/dom-structure-dump test/level*.c test/INDEX - +*~ -- cgit v1.2.3 From eec1716bbd8a692aa260c24db57c0465fcb9fb43 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 10:56:51 +0100 Subject: HTML: Make Document memoise more generically and port HTMLElement to that interface --- src/html/html_document.c | 59 +++++++++++++++++++++++----------------- src/html/html_document.h | 10 +++---- src/html/html_document_strings.h | 43 +++++++++++++++++++++++++++++ src/html/html_element.c | 4 +-- 4 files changed, 83 insertions(+), 33 deletions(-) create mode 100644 src/html/html_document_strings.h diff --git a/src/html/html_document.c b/src/html/html_document.c index a18218b..e618deb 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -64,6 +64,7 @@ dom_exception _dom_html_document_initialise(dom_html_document *doc, dom_events_default_action_fetcher daf) { dom_exception error; + int sidx; error = _dom_document_initialise(&doc->base, daf); if (error != DOM_NO_ERR) @@ -75,47 +76,55 @@ dom_exception _dom_html_document_initialise(dom_html_document *doc, doc->url = NULL; doc->cookie = NULL; - doc->_memo_id = doc->_memo_title = doc->_memo_lang = - doc->_memo_dir = doc->_memo_class = NULL; + doc->memoised = calloc(sizeof(dom_string *), hds_COUNT); + if (doc->memoised == NULL) { + error = DOM_NO_MEM_ERR; + goto out; + } -#define MEMOISE(attr) \ +#define HTML_DOCUMENT_STRINGS_ACTION(attr) \ error = dom_string_create_interned((const uint8_t *) #attr, \ - SLEN(#attr), &doc->_memo_##attr); \ + SLEN(#attr), &doc->memoised[hds_##attr]); \ if (error != DOM_NO_ERR) { \ - if (doc->_memo_id != NULL) \ - dom_string_unref(doc->_memo_id); \ - if (doc->_memo_title != NULL) \ - dom_string_unref(doc->_memo_title); \ - if (doc->_memo_lang != NULL) \ - dom_string_unref(doc->_memo_lang); \ - if (doc->_memo_dir != NULL) \ - dom_string_unref(doc->_memo_dir); \ - return error; \ + goto out; \ + } + +#include "html_document_strings.h" +#undef HTML_DOCUMENT_STRINGS_ACTION + +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]); + } + } + free(doc->memoised); + doc->memoised = NULL; } - - MEMOISE(id) - MEMOISE(title) - MEMOISE(lang) - MEMOISE(dir) - MEMOISE(class) - return error; } /* Finalise a HTMLDocument */ void _dom_html_document_finalise(dom_html_document *doc) { + int sidx; + dom_string_unref(doc->cookie); dom_string_unref(doc->url); dom_string_unref(doc->domain); dom_string_unref(doc->referrer); dom_string_unref(doc->title); - dom_string_unref(doc->_memo_id); - dom_string_unref(doc->_memo_title); - dom_string_unref(doc->_memo_lang); - dom_string_unref(doc->_memo_dir); - dom_string_unref(doc->_memo_class); + 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; + } _dom_document_finalise(&doc->base); } diff --git a/src/html/html_document.h b/src/html/html_document.h index 57ec1ec..7f9bdb8 100644 --- a/src/html/html_document.h +++ b/src/html/html_document.h @@ -24,14 +24,12 @@ struct dom_html_document { dom_string *url; /**< HTML document URL */ dom_string *cookie; /**< HTML document cookie */ - /* Cached strings for html objects to use */ - dom_string *_memo_id; /**< Memoised 'id' */ - dom_string *_memo_title;/**< Memoised 'title' */ - dom_string *_memo_lang; /**< Memoised 'lang' */ - dom_string *_memo_dir; /**< Memoised 'dir' */ - dom_string *_memo_class;/**< Memoised 'class' */ + /** Cached strings for html objects to use */ + dom_string **memoised; }; +#include "html_document_strings.h" + /* Create a HTMLDocument */ dom_exception _dom_html_document_create( dom_events_default_action_fetcher daf, diff --git a/src/html/html_document_strings.h b/src/html/html_document_strings.h new file mode 100644 index 0000000..a45ed0d --- /dev/null +++ b/src/html/html_document_strings.h @@ -0,0 +1,43 @@ +/* + * This file is part of libdom. + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2012 Daniel Silverstone + */ + +/* Note, this file deliberately lacks guards since it's included many times + * in many places in order to correctly handle the loading of the strings. + */ + +#ifndef HTML_DOCUMENT_STRINGS_ACTION +#define HTML_DOCUMENT_STRINGS_INTERNAL_ACTION 1 +#define HTML_DOCUMENT_STRINGS_PREFIX \ + typedef enum { +#define HTML_DOCUMENT_STRINGS_SUFFIX \ + hds_COUNT \ + } html_document_memo_string_e; +#define HTML_DOCUMENT_STRINGS_ACTION(tag) \ + hds_##tag, +#endif + +#ifdef HTML_DOCUMENT_STRINGS_PREFIX +HTML_DOCUMENT_STRINGS_PREFIX +#endif + +HTML_DOCUMENT_STRINGS_ACTION(id) +HTML_DOCUMENT_STRINGS_ACTION(title) +HTML_DOCUMENT_STRINGS_ACTION(lang) +HTML_DOCUMENT_STRINGS_ACTION(dir) +HTML_DOCUMENT_STRINGS_ACTION(class) + +#ifdef HTML_DOCUMENT_STRINGS_SUFFIX +HTML_DOCUMENT_STRINGS_SUFFIX +#endif + + +#ifdef HTML_DOCUMENT_STRINGS_INTERNAL_ACTION +#undef HTML_DOCUMENT_STRINGS_INTERNAL_ACTION +#undef HTML_DOCUMENT_STRINGS_PREFIX +#undef HTML_DOCUMENT_STRINGS_SUFFIX +#undef HTML_DOCUMENT_STRINGS_ACTION +#endif diff --git a/src/html/html_element.c b/src/html/html_element.c index 18607d7..be8066f 100644 --- a/src/html/html_element.c +++ b/src/html/html_element.c @@ -112,7 +112,7 @@ dom_exception _dom_html_element_get_##fattr(dom_html_element *element, \ \ _memo_##attr = \ ((struct dom_html_document *) \ - ((struct dom_node_internal *)element)->owner)->_memo_##attr; \ + ((struct dom_node_internal *)element)->owner)->memoised[hds_##attr]; \ \ ret = dom_element_get_attribute(element, _memo_##attr, fattr); \ \ @@ -127,7 +127,7 @@ dom_exception _dom_html_element_set_##fattr(dom_html_element *element, \ \ _memo_##attr = \ ((struct dom_html_document *) \ - ((struct dom_node_internal *)element)->owner)->_memo_##attr; \ + ((struct dom_node_internal *)element)->owner)->memoised[hds_##attr]; \ \ ret = dom_element_set_attribute(element, _memo_##attr, fattr); \ \ -- cgit v1.2.3 From e5f99e06010e626b91460afe70679c9e11bb01a1 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 11:37:08 +0100 Subject: HTMLHtmlElement: Support passing namespace and prefix to HTMLElement initialiser --- src/html/html_html_element.c | 7 +++++-- src/html/html_html_element.h | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/html/html_html_element.c b/src/html/html_html_element.c index 1bdf590..61966b2 100644 --- a/src/html/html_html_element.c +++ b/src/html/html_html_element.c @@ -27,6 +27,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, struct dom_html_html_element **ele) { struct dom_node_internal *node; @@ -40,7 +41,7 @@ dom_exception _dom_html_html_element_create(struct dom_html_document *doc, node->base.vtable = &_dom_element_vtable; node->vtable = &_protect_vtable; - return _dom_html_html_element_initialise(doc, *ele); + return _dom_html_html_element_initialise(doc, namespace, prefix, *ele); } /** @@ -51,6 +52,7 @@ 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, struct dom_html_html_element *ele) { dom_string *name = NULL; @@ -60,7 +62,8 @@ dom_exception _dom_html_html_element_initialise(struct dom_html_document *doc, if (err != DOM_NO_ERR) return err; - err = _dom_html_element_initialise(doc, &ele->base, name, NULL, NULL); + err = _dom_html_element_initialise(doc, &ele->base, + name, namespace, prefix); dom_string_unref(name); return err; diff --git a/src/html/html_html_element.h b/src/html/html_html_element.h index f943f7b..61eb626 100644 --- a/src/html/html_html_element.h +++ b/src/html/html_html_element.h @@ -19,10 +19,12 @@ struct dom_html_html_element { /* Create a dom_html_html_element object */ dom_exception _dom_html_html_element_create(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_html_element **ele); /* Initialise a dom_html_html_element object */ dom_exception _dom_html_html_element_initialise(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_html_element *ele); /* Finalise a dom_html_html_element object */ @@ -40,7 +42,7 @@ dom_exception _dom_html_html_element_copy(dom_node_internal *old, dom_node_internal **copy); #define DOM_HTML_HTML_ELEMENT_PROTECT_VTABLE \ - _dom_html_html_element_parse_attribute + _dom_element_parse_attribute #define DOM_NODE_PROTECT_VTABLE_HTML_HTML_ELEMENT \ _dom_virtual_html_html_element_destroy, \ -- cgit v1.2.3 From 5aa61aa2c5f6c5b917b473a4a402ba98e13d4f39 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 11:48:13 +0100 Subject: HTMLDocument: Add all specialisable tag names to intern array --- src/html/html_document_strings.h | 67 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/src/html/html_document_strings.h b/src/html/html_document_strings.h index a45ed0d..c5a869c 100644 --- a/src/html/html_document_strings.h +++ b/src/html/html_document_strings.h @@ -24,11 +24,78 @@ HTML_DOCUMENT_STRINGS_PREFIX #endif +/* Useful attributes for HTMLElement */ HTML_DOCUMENT_STRINGS_ACTION(id) HTML_DOCUMENT_STRINGS_ACTION(title) HTML_DOCUMENT_STRINGS_ACTION(lang) HTML_DOCUMENT_STRINGS_ACTION(dir) HTML_DOCUMENT_STRINGS_ACTION(class) +/* Names for elements which get specialised. Ones commented out are + * present above. + */ +HTML_DOCUMENT_STRINGS_ACTION(html) +HTML_DOCUMENT_STRINGS_ACTION(head) +HTML_DOCUMENT_STRINGS_ACTION(link) +/* HTML_DOCUMENT_STRINGS_ACTION(title) */ +HTML_DOCUMENT_STRINGS_ACTION(meta) +HTML_DOCUMENT_STRINGS_ACTION(base) +HTML_DOCUMENT_STRINGS_ACTION(isindex) +HTML_DOCUMENT_STRINGS_ACTION(style) +HTML_DOCUMENT_STRINGS_ACTION(body) +HTML_DOCUMENT_STRINGS_ACTION(form) +HTML_DOCUMENT_STRINGS_ACTION(select) +HTML_DOCUMENT_STRINGS_ACTION(optgroup) +HTML_DOCUMENT_STRINGS_ACTION(option) +HTML_DOCUMENT_STRINGS_ACTION(input) +HTML_DOCUMENT_STRINGS_ACTION(textarea) +HTML_DOCUMENT_STRINGS_ACTION(button) +HTML_DOCUMENT_STRINGS_ACTION(label) +HTML_DOCUMENT_STRINGS_ACTION(fieldset) +HTML_DOCUMENT_STRINGS_ACTION(legend) +HTML_DOCUMENT_STRINGS_ACTION(ul) +HTML_DOCUMENT_STRINGS_ACTION(ol) +HTML_DOCUMENT_STRINGS_ACTION(dl) +/* HTML_DOCUMENT_STRINGS_ACTION(dir) */ +HTML_DOCUMENT_STRINGS_ACTION(menu) +HTML_DOCUMENT_STRINGS_ACTION(li) +HTML_DOCUMENT_STRINGS_ACTION(blockquote) +HTML_DOCUMENT_STRINGS_ACTION(div) +HTML_DOCUMENT_STRINGS_ACTION(p) +HTML_DOCUMENT_STRINGS_ACTION(h1) +HTML_DOCUMENT_STRINGS_ACTION(h2) +HTML_DOCUMENT_STRINGS_ACTION(h3) +HTML_DOCUMENT_STRINGS_ACTION(h4) +HTML_DOCUMENT_STRINGS_ACTION(h5) +HTML_DOCUMENT_STRINGS_ACTION(h6) +HTML_DOCUMENT_STRINGS_ACTION(q) +HTML_DOCUMENT_STRINGS_ACTION(pre) +HTML_DOCUMENT_STRINGS_ACTION(br) +HTML_DOCUMENT_STRINGS_ACTION(basefont) +HTML_DOCUMENT_STRINGS_ACTION(font) +HTML_DOCUMENT_STRINGS_ACTION(hr) +HTML_DOCUMENT_STRINGS_ACTION(ins) +HTML_DOCUMENT_STRINGS_ACTION(del) +HTML_DOCUMENT_STRINGS_ACTION(a) +HTML_DOCUMENT_STRINGS_ACTION(img) +HTML_DOCUMENT_STRINGS_ACTION(object) +HTML_DOCUMENT_STRINGS_ACTION(param) +HTML_DOCUMENT_STRINGS_ACTION(applet) +HTML_DOCUMENT_STRINGS_ACTION(map) +HTML_DOCUMENT_STRINGS_ACTION(area) +HTML_DOCUMENT_STRINGS_ACTION(script) +HTML_DOCUMENT_STRINGS_ACTION(table) +HTML_DOCUMENT_STRINGS_ACTION(caption) +HTML_DOCUMENT_STRINGS_ACTION(col) +HTML_DOCUMENT_STRINGS_ACTION(colgroup) +HTML_DOCUMENT_STRINGS_ACTION(thead) +HTML_DOCUMENT_STRINGS_ACTION(tfoot) +HTML_DOCUMENT_STRINGS_ACTION(tbody) +HTML_DOCUMENT_STRINGS_ACTION(tr) +HTML_DOCUMENT_STRINGS_ACTION(th) +HTML_DOCUMENT_STRINGS_ACTION(td) +HTML_DOCUMENT_STRINGS_ACTION(frameset) +HTML_DOCUMENT_STRINGS_ACTION(frame) +HTML_DOCUMENT_STRINGS_ACTION(iframe) #ifdef HTML_DOCUMENT_STRINGS_SUFFIX HTML_DOCUMENT_STRINGS_SUFFIX -- cgit v1.2.3 From 1f995e05fde8026a6f94cd032db50cead6ed6fb6 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 11:49:41 +0100 Subject: HTMLDocument: Support creating the specialised HTMLHtmlElement --- src/html/html_document.c | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/html/html_document.c b/src/html/html_document.c index e618deb..37d19de 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -11,6 +11,7 @@ #include "html/html_document.h" #include "html/html_element.h" #include "html/html_collection.h" +#include "html/html_html_element.h" #include "core/string.h" #include "utils/namespace.h" @@ -149,7 +150,23 @@ dom_exception _dom_html_document_copy(dom_node_internal *old, } /* Overloaded methods inherited from super class */ -/** \todo: dispatch on tag name to create correct HTMLElement subclass */ + +/** Internal method to support both kinds of create method */ +static dom_exception +_dom_html_document_create_element_internal(dom_html_document *html, + dom_string *tag_name, + dom_string *namespace, + dom_string *prefix, + dom_html_element **result) +{ + if (dom_string_caseless_isequal(tag_name, html->memoised[hds_html])) { + return _dom_html_html_element_create(html, namespace, prefix, + (dom_html_html_element **) result); + } + + return _dom_html_element_create(html, tag_name, namespace, prefix, + result); +} dom_exception _dom_html_document_create_element(dom_document *doc, dom_string *tag_name, dom_element **result) @@ -159,8 +176,9 @@ dom_exception _dom_html_document_create_element(dom_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); + return _dom_html_document_create_element_internal(html, + tag_name, NULL, NULL, + (dom_html_element **)result); } dom_exception _dom_html_document_create_element_ns(dom_document *doc, @@ -187,8 +205,8 @@ dom_exception _dom_html_document_create_element_ns(dom_document *doc, } /* Attempt to create element */ - err = _dom_html_element_create(html, localname, namespace, prefix, - (dom_html_element **) result); + err = _dom_html_document_create_element_internal(html, localname, + namespace, prefix, (dom_html_element **)result); /* Tidy up */ if (localname != NULL) { -- cgit v1.2.3 From b2d47100032594f73c62b3e1a987c8286b3d0411 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 12:56:50 +0100 Subject: Add HTMLHtmlElement to the main dom.h includes --- include/dom/dom.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/dom/dom.h b/include/dom/dom.h index 94d97ff..0ce0a23 100644 --- a/include/dom/dom.h +++ b/include/dom/dom.h @@ -38,8 +38,9 @@ #include /* DOM HTML headers */ -#include #include +#include +#include #include /* DOM Events header */ -- cgit v1.2.3 From 5c1dafabbb8808554e0bcdafbb5ccf440904eff0 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 12:57:13 +0100 Subject: HTMLDocument: add 'version' to the memoisation table --- src/html/html_document_strings.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/html/html_document_strings.h b/src/html/html_document_strings.h index c5a869c..86275e8 100644 --- a/src/html/html_document_strings.h +++ b/src/html/html_document_strings.h @@ -30,6 +30,8 @@ HTML_DOCUMENT_STRINGS_ACTION(title) HTML_DOCUMENT_STRINGS_ACTION(lang) HTML_DOCUMENT_STRINGS_ACTION(dir) HTML_DOCUMENT_STRINGS_ACTION(class) +/* Useful attributes used by HTMLHtmlElement */ +HTML_DOCUMENT_STRINGS_ACTION(version) /* Names for elements which get specialised. Ones commented out are * present above. */ -- cgit v1.2.3 From 64ebb000750151aab7ee0738512da061cad2783e Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 13:17:10 +0100 Subject: Nodelist: Support caseless node lists --- src/core/nodelist.c | 83 ++++++++++++++++++++++++++++++++++++++++++++--------- src/core/nodelist.h | 4 ++- 2 files changed, 73 insertions(+), 14 deletions(-) diff --git a/src/core/nodelist.c b/src/core/nodelist.c index 1100329..8ce9475 100644 --- a/src/core/nodelist.c +++ b/src/core/nodelist.c @@ -84,7 +84,8 @@ dom_exception _dom_nodelist_create(dom_document *doc, nodelist_type type, l->type = type; - if (type == DOM_NODELIST_BY_NAME) { + if (type == DOM_NODELIST_BY_NAME || + type == DOM_NODELIST_BY_NAME_CASELESS) { assert(tagname != NULL); l->data.n.any_name = false; if (dom_string_byte_length(tagname) == 1) { @@ -95,7 +96,8 @@ dom_exception _dom_nodelist_create(dom_document *doc, nodelist_type type, } l->data.n.name = dom_string_ref(tagname); - } else if (type == DOM_NODELIST_BY_NAMESPACE) { + } else if (type == DOM_NODELIST_BY_NAMESPACE || + type == DOM_NODELIST_BY_NAMESPACE_CASELESS) { l->data.ns.any_localname = false; l->data.ns.any_namespace = false; if (localname != NULL) { @@ -159,12 +161,14 @@ void dom_nodelist_unref(dom_nodelist *list) /* Nothing to do */ break; case DOM_NODELIST_BY_NAMESPACE: + case DOM_NODELIST_BY_NAMESPACE_CASELESS: if (list->data.ns.namespace != NULL) dom_string_unref(list->data.ns.namespace); if (list->data.ns.localname != NULL) dom_string_unref(list->data.ns.localname); break; case DOM_NODELIST_BY_NAME: + case DOM_NODELIST_BY_NAME_CASELESS: assert(list->data.n.name != NULL); dom_string_unref(list->data.n.name); break; @@ -210,7 +214,15 @@ dom_exception dom_nodelist_get_length(dom_nodelist *list, unsigned long *length) if (cur->type == DOM_ELEMENT_NODE) len++; } - } else { + } else if (list->type == DOM_NODELIST_BY_NAME_CASELESS) { + if (list->data.n.any_name == true || ( + cur->name != NULL && + dom_string_caseless_isequal(cur->name, + list->data.n.name))) { + if (cur->type == DOM_ELEMENT_NODE) + len++; + } + } else if (list->type == DOM_NODELIST_BY_NAMESPACE) { if (list->data.ns.any_namespace == true || dom_string_isequal(cur->namespace, list->data.ns.namespace)) { @@ -222,6 +234,22 @@ dom_exception dom_nodelist_get_length(dom_nodelist *list, unsigned long *length) len++; } } + } else if (list->type == DOM_NODELIST_BY_NAMESPACE_CASELESS) { + if (list->data.ns.any_namespace == true || + dom_string_caseless_isequal( + cur->namespace, + list->data.ns.namespace)) { + if (list->data.ns.any_localname == true || + (cur->name != NULL && + dom_string_caseless_isequal( + cur->name, + list->data.ns.localname))) { + if (cur->type == DOM_ELEMENT_NODE) + len++; + } + } + } else { + assert("Unknown list type" == NULL); } /* Now, find next node */ @@ -290,7 +318,15 @@ dom_exception _dom_nodelist_item(dom_nodelist *list, if (cur->type == DOM_ELEMENT_NODE) count++; } - } else { + } else if (list->type == DOM_NODELIST_BY_NAME_CASELESS) { + if (list->data.n.any_name == true || ( + cur->name != NULL && + dom_string_caseless_isequal(cur->name, + list->data.n.name))) { + if (cur->type == DOM_ELEMENT_NODE) + count++; + } + } else if (list->type == DOM_NODELIST_BY_NAMESPACE) { if (list->data.ns.any_namespace == true || (cur->namespace != NULL && dom_string_isequal(cur->namespace, @@ -303,6 +339,23 @@ dom_exception _dom_nodelist_item(dom_nodelist *list, count++; } } + } else if (list->type == DOM_NODELIST_BY_NAMESPACE_CASELESS) { + if (list->data.ns.any_namespace == true || + (cur->namespace != NULL && + dom_string_caseless_isequal( + cur->namespace, + list->data.ns.namespace))) { + if (list->data.ns.any_localname == true || + (cur->name != NULL && + dom_string_caseless_isequal( + cur->name, + list->data.ns.localname))) { + if (cur->type == DOM_ELEMENT_NODE) + count++; + } + } + } else { + assert("Unknown list type" == NULL); } /* Stop if this is the requested index */ @@ -366,20 +419,24 @@ bool _dom_nodelist_match(dom_nodelist *list, nodelist_type type, if (list->type != type) return false; - - if (list->type == DOM_NODELIST_CHILDREN) { + + switch (list->type) { + case DOM_NODELIST_CHILDREN: return true; - } - - if (list->type == DOM_NODELIST_BY_NAME) { + case DOM_NODELIST_BY_NAME: return dom_string_isequal(list->data.n.name, tagname); - } - - if (list->type == DOM_NODELIST_BY_NAMESPACE) { + case DOM_NODELIST_BY_NAMESPACE: return dom_string_isequal(list->data.ns.namespace, namespace) && dom_string_isequal(list->data.ns.localname, localname); + case DOM_NODELIST_BY_NAME_CASELESS: + return dom_string_caseless_isequal(list->data.n.name, tagname); + case DOM_NODELIST_BY_NAMESPACE_CASELESS: + return dom_string_caseless_isequal(list->data.ns.namespace, + namespace) && + dom_string_caseless_isequal(list->data.ns.localname, + localname); } - + return false; } diff --git a/src/core/nodelist.h b/src/core/nodelist.h index 6bc36d7..4fe5b61 100644 --- a/src/core/nodelist.h +++ b/src/core/nodelist.h @@ -22,7 +22,9 @@ struct dom_nodelist; typedef enum { DOM_NODELIST_CHILDREN, DOM_NODELIST_BY_NAME, - DOM_NODELIST_BY_NAMESPACE + DOM_NODELIST_BY_NAMESPACE, + DOM_NODELIST_BY_NAME_CASELESS, + DOM_NODELIST_BY_NAMESPACE_CASELESS } nodelist_type; /* Create a nodelist */ -- cgit v1.2.3 From 0e51c3a8ca92d6b98339c5910de51ddc79da54bd Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 13:17:58 +0100 Subject: HTMLDocument: Make lists retrieved by tag name be caseless --- src/html/html_document.c | 42 ++++++++++++++++++++++++++++++++++++++++++ src/html/html_document.h | 9 +++++++-- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/src/html/html_document.c b/src/html/html_document.c index 37d19de..10f1cc7 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -220,6 +220,48 @@ dom_exception _dom_html_document_create_element_ns(dom_document *doc, return err; } +/** + * Retrieve a list of all elements with a given tag name + * + * \param doc The document to search in + * \param tagname The tag name to search for ("*" for all) + * \param result Pointer to location to receive result + * \return DOM_NO_ERR. + * + * The returned list will have its reference count increased. It is + * the responsibility of the caller to unref the list once it has + * finished with it. + */ +dom_exception _dom_html_document_get_elements_by_tag_name(dom_document *doc, + dom_string *tagname, dom_nodelist **result) +{ + return _dom_document_get_nodelist(doc, DOM_NODELIST_BY_NAME_CASELESS, + (dom_node_internal *) doc, tagname, NULL, NULL, + result); +} + +/** + * Retrieve a list of all elements with a given local name and namespace URI + * + * \param doc The document to search in + * \param namespace The namespace URI + * \param localname The local name + * \param result Pointer to location to receive result + * \return DOM_NO_ERR on success, appropriate dom_exception on failure. + * + * The returned list will have its reference count increased. It is + * the responsibility of the caller to unref the list once it has + * finished with it. + */ +dom_exception _dom_html_document_get_elements_by_tag_name_ns( + dom_document *doc, dom_string *namespace, + dom_string *localname, dom_nodelist **result) +{ + return _dom_document_get_nodelist(doc, DOM_NODELIST_BY_NAMESPACE_CASELESS, + (dom_node_internal *) doc, NULL, namespace, localname, + result); +} + /*-----------------------------------------------------------------------*/ /* The DOM spec public API */ diff --git a/src/html/html_document.h b/src/html/html_document.h index 7f9bdb8..fbe7155 100644 --- a/src/html/html_document.h +++ b/src/html/html_document.h @@ -113,6 +113,11 @@ dom_exception _dom_html_document_create_element(dom_document *doc, dom_exception _dom_html_document_create_element_ns(dom_document *doc, dom_string *namespace, dom_string *qname, dom_element **result); +dom_exception _dom_html_document_get_elements_by_tag_name(dom_document *doc, + dom_string *tagname, dom_nodelist **result); +dom_exception _dom_html_document_get_elements_by_tag_name_ns( + dom_document *doc, dom_string *namespace, + dom_string *localname, dom_nodelist **result); #define DOM_DOCUMENT_VTABLE_HTML \ _dom_document_get_doctype, \ @@ -126,11 +131,11 @@ dom_exception _dom_html_document_create_element_ns(dom_document *doc, _dom_document_create_processing_instruction, \ _dom_document_create_attribute, \ _dom_document_create_entity_reference, \ - _dom_document_get_elements_by_tag_name, \ + _dom_html_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_html_document_get_elements_by_tag_name_ns, \ _dom_document_get_element_by_id, \ _dom_document_get_input_encoding, \ _dom_document_get_xml_encoding, \ -- cgit v1.2.3 From 0e1e4d37536c26a20a95960d819d68f61acff8fc Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 13:19:13 +0100 Subject: HTMLHtmlElement: Add support for version attribute and enable test --- include/dom/html/html_html_element.h | 30 +++++++++++++ src/html/html_html_element.c | 51 +++++++++++++++++++++- src/html/html_html_element.h | 10 +++++ .../tests/level1/html/HTMLHtmlElement01.xml | 47 ++++++++++++++++++++ .../tests/level1/html/HTMLHtmlElement01.xml.kfail | 47 -------------------- 5 files changed, 137 insertions(+), 48 deletions(-) create mode 100644 test/testcases/tests/level1/html/HTMLHtmlElement01.xml delete mode 100644 test/testcases/tests/level1/html/HTMLHtmlElement01.xml.kfail diff --git a/include/dom/html/html_html_element.h b/include/dom/html/html_html_element.h index 80ef6af..b7b69b2 100644 --- a/include/dom/html/html_html_element.h +++ b/include/dom/html/html_html_element.h @@ -8,7 +8,37 @@ #ifndef dom_html_html_element_h_ #define dom_html_html_element_h_ +#include + typedef struct dom_html_html_element dom_html_html_element; +typedef struct dom_html_html_element_vtable { + struct dom_html_element_vtable base; + + dom_exception (*dom_html_html_element_get_version)(struct dom_html_html_element *element, + dom_string **version); + dom_exception (*dom_html_html_element_set_version)(struct dom_html_html_element *element, + dom_string *version); +} dom_html_html_element_vtable; + +static inline dom_exception dom_html_html_element_get_version( + struct dom_html_html_element *element, dom_string **version) +{ + return ((dom_html_html_element_vtable *) ((dom_node *) element)->vtable)-> + dom_html_html_element_get_version(element, version); +} +#define dom_html_html_element_get_version(e, version) \ + dom_html_html_element_get_version((dom_html_html_element *) (e), (version)) + +static inline dom_exception dom_html_html_element_set_version( + struct dom_html_html_element *element, dom_string *version) +{ + return ((dom_html_html_element_vtable *) ((dom_node *) element)->vtable)-> + dom_html_html_element_set_version(element, version); +} +#define dom_html_html_element_set_version(e, version) \ + dom_html_html_element_set_version((dom_html_html_element *) (e), (version)) + + #endif diff --git a/src/html/html_html_element.c b/src/html/html_html_element.c index 61966b2..427757a 100644 --- a/src/html/html_html_element.c +++ b/src/html/html_html_element.c @@ -7,6 +7,7 @@ #include +#include "html/html_document.h" #include "html/html_html_element.h" #include "core/node.h" @@ -19,6 +20,22 @@ static struct dom_element_protected_vtable _protect_vtable = { DOM_HTML_HTML_ELEMENT_PROTECT_VTABLE }; +static struct dom_html_html_element_vtable _vtable = { + { + { + { + { + DOM_NODE_EVENT_TARGET_VTABLE + }, + DOM_NODE_VTABLE_ELEMENT, + }, + DOM_ELEMENT_VTABLE + }, + DOM_HTML_ELEMENT_VTABLE + }, + DOM_HTML_HTML_ELEMENT_VTABLE +}; + /** * Create a dom_html_html_element object * @@ -38,7 +55,7 @@ dom_exception _dom_html_html_element_create(struct dom_html_document *doc, /* Set up vtables */ node = (struct dom_node_internal *) *ele; - node->base.vtable = &_dom_element_vtable; + node->base.vtable = &_vtable; node->vtable = &_protect_vtable; return _dom_html_html_element_initialise(doc, namespace, prefix, *ele); @@ -122,3 +139,35 @@ dom_exception _dom_html_html_element_copy(dom_node_internal *old, return _dom_html_element_copy(old, copy); } +/*-----------------------------------------------------------------------*/ +/* API functions */ + +dom_exception _dom_html_html_element_get_version(dom_html_html_element *element, + dom_string **version) +{ + dom_exception ret; + dom_string *_memo_version; + + _memo_version = + ((struct dom_html_document *) + ((struct dom_node_internal *)element)->owner)->memoised[hds_version]; + + ret = dom_element_get_attribute(element, _memo_version, version); + + return ret; +} + +dom_exception _dom_html_html_element_set_version(dom_html_html_element *element, + dom_string *version) +{ + dom_exception ret; + dom_string *_memo_version; + + _memo_version = + ((struct dom_html_document *) + ((struct dom_node_internal *)element)->owner)->memoised[hds_version]; + + ret = dom_element_set_attribute(element, _memo_version, version); + + return ret; +} diff --git a/src/html/html_html_element.h b/src/html/html_html_element.h index 61eb626..3952beb 100644 --- a/src/html/html_html_element.h +++ b/src/html/html_html_element.h @@ -48,5 +48,15 @@ dom_exception _dom_html_html_element_copy(dom_node_internal *old, _dom_virtual_html_html_element_destroy, \ _dom_html_html_element_copy +/* The API functions */ +dom_exception _dom_html_html_element_get_version(dom_html_html_element *element, + dom_string **version); +dom_exception _dom_html_html_element_set_version(dom_html_html_element *element, + dom_string *version); + +#define DOM_HTML_HTML_ELEMENT_VTABLE \ + _dom_html_html_element_get_version, \ + _dom_html_html_element_set_version + #endif diff --git a/test/testcases/tests/level1/html/HTMLHtmlElement01.xml b/test/testcases/tests/level1/html/HTMLHtmlElement01.xml new file mode 100644 index 0000000..1ad206a --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLHtmlElement01.xml @@ -0,0 +1,47 @@ + + + + + + + +HTMLHtmlElement01 +NIST + + The version attribute specifies version information about the document's + DTD. + + Retrieve the version attribute and examine its value. + + Test is only applicable to HTML, version attribute is not supported in XHTML. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLHtmlElement01.xml.kfail b/test/testcases/tests/level1/html/HTMLHtmlElement01.xml.kfail deleted file mode 100644 index 1ad206a..0000000 --- a/test/testcases/tests/level1/html/HTMLHtmlElement01.xml.kfail +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - -HTMLHtmlElement01 -NIST - - The version attribute specifies version information about the document's - DTD. - - Retrieve the version attribute and examine its value. - - Test is only applicable to HTML, version attribute is not supported in XHTML. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - - - -- cgit v1.2.3 From cd2010e145b2e436f76bb9961b307761e4ac86ee Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 13:23:21 +0100 Subject: Makefile: Install the html_html_element.h header --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e48f41c..15954de 100644 --- a/Makefile +++ b/Makefile @@ -79,8 +79,9 @@ INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/document_event.h Is := include/dom/html I := /include/dom/html -INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_document.h +INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_element.h +INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_html_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_form_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) /lib/pkgconfig:lib$(COMPONENT).pc.in -- cgit v1.2.3 From 9d15242d827ab7b8c9ff17735edbb62f58593d61 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 13:31:15 +0100 Subject: HTMLDocument: Convert memoised tag names to upper case --- src/html/html_document.c | 2 +- src/html/html_document_strings.h | 130 +++++++++++++++++++-------------------- 2 files changed, 65 insertions(+), 67 deletions(-) diff --git a/src/html/html_document.c b/src/html/html_document.c index 10f1cc7..b93b253 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -159,7 +159,7 @@ _dom_html_document_create_element_internal(dom_html_document *html, dom_string *prefix, dom_html_element **result) { - if (dom_string_caseless_isequal(tag_name, html->memoised[hds_html])) { + if (dom_string_caseless_isequal(tag_name, html->memoised[hds_HTML])) { return _dom_html_html_element_create(html, namespace, prefix, (dom_html_html_element **) result); } diff --git a/src/html/html_document_strings.h b/src/html/html_document_strings.h index 86275e8..ffa33b3 100644 --- a/src/html/html_document_strings.h +++ b/src/html/html_document_strings.h @@ -32,72 +32,70 @@ HTML_DOCUMENT_STRINGS_ACTION(dir) HTML_DOCUMENT_STRINGS_ACTION(class) /* Useful attributes used by HTMLHtmlElement */ HTML_DOCUMENT_STRINGS_ACTION(version) -/* Names for elements which get specialised. Ones commented out are - * present above. - */ -HTML_DOCUMENT_STRINGS_ACTION(html) -HTML_DOCUMENT_STRINGS_ACTION(head) -HTML_DOCUMENT_STRINGS_ACTION(link) -/* HTML_DOCUMENT_STRINGS_ACTION(title) */ -HTML_DOCUMENT_STRINGS_ACTION(meta) -HTML_DOCUMENT_STRINGS_ACTION(base) -HTML_DOCUMENT_STRINGS_ACTION(isindex) -HTML_DOCUMENT_STRINGS_ACTION(style) -HTML_DOCUMENT_STRINGS_ACTION(body) -HTML_DOCUMENT_STRINGS_ACTION(form) -HTML_DOCUMENT_STRINGS_ACTION(select) -HTML_DOCUMENT_STRINGS_ACTION(optgroup) -HTML_DOCUMENT_STRINGS_ACTION(option) -HTML_DOCUMENT_STRINGS_ACTION(input) -HTML_DOCUMENT_STRINGS_ACTION(textarea) -HTML_DOCUMENT_STRINGS_ACTION(button) -HTML_DOCUMENT_STRINGS_ACTION(label) -HTML_DOCUMENT_STRINGS_ACTION(fieldset) -HTML_DOCUMENT_STRINGS_ACTION(legend) -HTML_DOCUMENT_STRINGS_ACTION(ul) -HTML_DOCUMENT_STRINGS_ACTION(ol) -HTML_DOCUMENT_STRINGS_ACTION(dl) -/* HTML_DOCUMENT_STRINGS_ACTION(dir) */ -HTML_DOCUMENT_STRINGS_ACTION(menu) -HTML_DOCUMENT_STRINGS_ACTION(li) -HTML_DOCUMENT_STRINGS_ACTION(blockquote) -HTML_DOCUMENT_STRINGS_ACTION(div) -HTML_DOCUMENT_STRINGS_ACTION(p) -HTML_DOCUMENT_STRINGS_ACTION(h1) -HTML_DOCUMENT_STRINGS_ACTION(h2) -HTML_DOCUMENT_STRINGS_ACTION(h3) -HTML_DOCUMENT_STRINGS_ACTION(h4) -HTML_DOCUMENT_STRINGS_ACTION(h5) -HTML_DOCUMENT_STRINGS_ACTION(h6) -HTML_DOCUMENT_STRINGS_ACTION(q) -HTML_DOCUMENT_STRINGS_ACTION(pre) -HTML_DOCUMENT_STRINGS_ACTION(br) -HTML_DOCUMENT_STRINGS_ACTION(basefont) -HTML_DOCUMENT_STRINGS_ACTION(font) -HTML_DOCUMENT_STRINGS_ACTION(hr) -HTML_DOCUMENT_STRINGS_ACTION(ins) -HTML_DOCUMENT_STRINGS_ACTION(del) -HTML_DOCUMENT_STRINGS_ACTION(a) -HTML_DOCUMENT_STRINGS_ACTION(img) -HTML_DOCUMENT_STRINGS_ACTION(object) -HTML_DOCUMENT_STRINGS_ACTION(param) -HTML_DOCUMENT_STRINGS_ACTION(applet) -HTML_DOCUMENT_STRINGS_ACTION(map) -HTML_DOCUMENT_STRINGS_ACTION(area) -HTML_DOCUMENT_STRINGS_ACTION(script) -HTML_DOCUMENT_STRINGS_ACTION(table) -HTML_DOCUMENT_STRINGS_ACTION(caption) -HTML_DOCUMENT_STRINGS_ACTION(col) -HTML_DOCUMENT_STRINGS_ACTION(colgroup) -HTML_DOCUMENT_STRINGS_ACTION(thead) -HTML_DOCUMENT_STRINGS_ACTION(tfoot) -HTML_DOCUMENT_STRINGS_ACTION(tbody) -HTML_DOCUMENT_STRINGS_ACTION(tr) -HTML_DOCUMENT_STRINGS_ACTION(th) -HTML_DOCUMENT_STRINGS_ACTION(td) -HTML_DOCUMENT_STRINGS_ACTION(frameset) -HTML_DOCUMENT_STRINGS_ACTION(frame) -HTML_DOCUMENT_STRINGS_ACTION(iframe) +/* Names for elements which get specialised. */ +HTML_DOCUMENT_STRINGS_ACTION(HTML) +HTML_DOCUMENT_STRINGS_ACTION(HEAD) +HTML_DOCUMENT_STRINGS_ACTION(LINK) +HTML_DOCUMENT_STRINGS_ACTION(TITLE) +HTML_DOCUMENT_STRINGS_ACTION(META) +HTML_DOCUMENT_STRINGS_ACTION(BASE) +HTML_DOCUMENT_STRINGS_ACTION(ISINDEX) +HTML_DOCUMENT_STRINGS_ACTION(STYLE) +HTML_DOCUMENT_STRINGS_ACTION(BODY) +HTML_DOCUMENT_STRINGS_ACTION(FORM) +HTML_DOCUMENT_STRINGS_ACTION(SELECT) +HTML_DOCUMENT_STRINGS_ACTION(OPTGROUP) +HTML_DOCUMENT_STRINGS_ACTION(OPTION) +HTML_DOCUMENT_STRINGS_ACTION(INPUT) +HTML_DOCUMENT_STRINGS_ACTION(TEXTAREA) +HTML_DOCUMENT_STRINGS_ACTION(BUTTON) +HTML_DOCUMENT_STRINGS_ACTION(LABEL) +HTML_DOCUMENT_STRINGS_ACTION(FIELDSET) +HTML_DOCUMENT_STRINGS_ACTION(LEGEND) +HTML_DOCUMENT_STRINGS_ACTION(UL) +HTML_DOCUMENT_STRINGS_ACTION(OL) +HTML_DOCUMENT_STRINGS_ACTION(DL) +HTML_DOCUMENT_STRINGS_ACTION(DIR) +HTML_DOCUMENT_STRINGS_ACTION(MENU) +HTML_DOCUMENT_STRINGS_ACTION(LI) +HTML_DOCUMENT_STRINGS_ACTION(BLOCKQUOTE) +HTML_DOCUMENT_STRINGS_ACTION(DIV) +HTML_DOCUMENT_STRINGS_ACTION(P) +HTML_DOCUMENT_STRINGS_ACTION(H1) +HTML_DOCUMENT_STRINGS_ACTION(H2) +HTML_DOCUMENT_STRINGS_ACTION(H3) +HTML_DOCUMENT_STRINGS_ACTION(H4) +HTML_DOCUMENT_STRINGS_ACTION(H5) +HTML_DOCUMENT_STRINGS_ACTION(H6) +HTML_DOCUMENT_STRINGS_ACTION(Q) +HTML_DOCUMENT_STRINGS_ACTION(PRE) +HTML_DOCUMENT_STRINGS_ACTION(BR) +HTML_DOCUMENT_STRINGS_ACTION(BASEFONT) +HTML_DOCUMENT_STRINGS_ACTION(FONT) +HTML_DOCUMENT_STRINGS_ACTION(HR) +HTML_DOCUMENT_STRINGS_ACTION(INS) +HTML_DOCUMENT_STRINGS_ACTION(DEL) +HTML_DOCUMENT_STRINGS_ACTION(A) +HTML_DOCUMENT_STRINGS_ACTION(IMG) +HTML_DOCUMENT_STRINGS_ACTION(OBJECT) +HTML_DOCUMENT_STRINGS_ACTION(PARAM) +HTML_DOCUMENT_STRINGS_ACTION(APPLET) +HTML_DOCUMENT_STRINGS_ACTION(MAP) +HTML_DOCUMENT_STRINGS_ACTION(AREA) +HTML_DOCUMENT_STRINGS_ACTION(SCRIPT) +HTML_DOCUMENT_STRINGS_ACTION(TABLE) +HTML_DOCUMENT_STRINGS_ACTION(CAPTION) +HTML_DOCUMENT_STRINGS_ACTION(COL) +HTML_DOCUMENT_STRINGS_ACTION(COLGROUP) +HTML_DOCUMENT_STRINGS_ACTION(THEAD) +HTML_DOCUMENT_STRINGS_ACTION(TFOOT) +HTML_DOCUMENT_STRINGS_ACTION(TBODY) +HTML_DOCUMENT_STRINGS_ACTION(TR) +HTML_DOCUMENT_STRINGS_ACTION(TH) +HTML_DOCUMENT_STRINGS_ACTION(TD) +HTML_DOCUMENT_STRINGS_ACTION(FRAMESET) +HTML_DOCUMENT_STRINGS_ACTION(FRAME) +HTML_DOCUMENT_STRINGS_ACTION(IFRAME) #ifdef HTML_DOCUMENT_STRINGS_SUFFIX HTML_DOCUMENT_STRINGS_SUFFIX -- cgit v1.2.3 From 843a6391d3bc05bc5f035a5ece89da5ae58f66f8 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 13:31:37 +0100 Subject: HTMLHtmlElement: reused memoised HTML from document --- src/html/html_html_element.c | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/src/html/html_html_element.c b/src/html/html_html_element.c index 427757a..be40008 100644 --- a/src/html/html_html_element.c +++ b/src/html/html_html_element.c @@ -72,18 +72,8 @@ dom_exception _dom_html_html_element_initialise(struct dom_html_document *doc, dom_string *namespace, dom_string *prefix, struct dom_html_html_element *ele) { - dom_string *name = NULL; - dom_exception err; - - err = dom_string_create((const uint8_t *) "HTML", SLEN("HTML"), &name); - if (err != DOM_NO_ERR) - return err; - - err = _dom_html_element_initialise(doc, &ele->base, - name, namespace, prefix); - dom_string_unref(name); - - return err; + return _dom_html_element_initialise(doc, &ele->base, + doc->memoised[hds_HTML], namespace, prefix); } /** -- cgit v1.2.3 From 1d4e7737b413ba1736b7f1b929e4355c2d750a6e Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 13:38:11 +0100 Subject: HTMLElement and derived objects, TODO list --- src/html/TODO | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/html/TODO diff --git a/src/html/TODO b/src/html/TODO new file mode 100644 index 0000000..41ad83c --- /dev/null +++ b/src/html/TODO @@ -0,0 +1,56 @@ +The following is the status of the HTML Element and derived objects + +HTMLElement html_element UNFINISHED +HTMLHtmlElement html_html_element DONE +HTMLHeadElement html_head_element MISSING +HTMLLinkElement html_link_element MISSING +HTMLTitleElement html_title_element MISSING +HTMLMetaElement html_meta_element MISSING +HTMLBaseElement html_base_element MISSING +HTMLIsIndexElement html_isindex_element MISSING +HTMLStyleElement html_style_element MISSING +HTMLBodyElement html_body_element MISSING +HTMLFormElement html_form_element MISSING +HTMLSelectElement html_select_element MISSING +HTMLOptGroupElement html_optgroup_element MISSING +HTMLOptionElement html_option_element MISSING +HTMLInputElement html_input_element MISSING +HTMLTextAreaElement html_textarea_element MISSING +HTMLButtonElement html_button_element MISSING +HTMLLabelElement html_label_element MISSING +HTMLFieldSetElement html_fieldset_element MISSING +HTMLLegendElement html_legend_element MISSING +HTMLUListElement html_ulist_element MISSING +HTMLOListElement html_olist_element MISSING +HTMLDListElement html_dlist_element MISSING +HTMLDirectoryElement html_directory_element MISSING +HTMLMenuElement html_menu_element MISSING +HTMLLIElement html_li_element MISSING +HTMLBlockquoteElement html_blockquote_element MISSING +HTMLDivElement html_div_element MISSING +HTMLParagraphElement html_paragraph_element MISSING +HTMLHeadingElement html_heading_element MISSING +HTMLQuoteElement html_quote_element MISSING +HTMLPreElement html_pre_element MISSING +HTMLBRElement html_br_element MISSING +HTMLBaseFontElement html_basefont_element MISSING +HTMLFontElement html_font_element MISSING +HTMLHRElement html_hr_element MISSING +HTMLModElement html_mod_element MISSING +HTMLAnchorElement html_anchor_element MISSING +HTMLImageElement html_image_element MISSING +HTMLObjectElement html_object_element MISSING +HTMLParamElement html_param_element MISSING +HTMLAppletElement html_applet_element MISSING +HTMLMapElement html_map_element MISSING +HTMLAreaElement html_area_element MISSING +HTMLScriptElement html_script_element MISSING +HTMLTableElement html_table_element MISSING +HTMLTableCaptionElement html_tablecaption_element MISSING +HTMLTableColElement html_tablecol_element MISSING +HTMLTableSectionElement html_tablesection_element MISSING +HTMLTableRowElement html_tablerow_element MISSING +HTMLTableCellElement html_tablecell_element MISSING +HTMLFrameSetElement html_frameset_element MISSING +HTMLFrameElement html_frame_element MISSING +HTMLIFrameElement html_iframe_element MISSING -- cgit v1.2.3 From 4a4a68d432a41038397d44faaebf23c05f7d544a Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 15:13:39 +0100 Subject: DOMTS: Add proper support for assertURIEquals --- test/DOMTSHandler.pm | 7 +- test/testutils/domtsasserts.c | 152 ++++++++++++++++++++++++++++++++++++++---- test/testutils/domtsasserts.h | 7 +- test/testutils/utils.c | 9 ++- test/testutils/utils.h | 2 + 5 files changed, 159 insertions(+), 18 deletions(-) diff --git a/test/DOMTSHandler.pm b/test/DOMTSHandler.pm index e440f64..dd5a7a8 100644 --- a/test/DOMTSHandler.pm +++ b/test/DOMTSHandler.pm @@ -1116,7 +1116,7 @@ sub generate_assertion { case "assertURIEquals" { my $actual = $ats->{actual}; - my ($scheme, $path, $host, $file, $query, $fragment, $isAbsolute) = qw(NULL NULL NULL NULL NULL NULL NULL); + my ($scheme, $path, $host, $file, $name, $query, $fragment, $isAbsolute) = qw(NULL NULL NULL NULL NULL NULL NULL NULL); if (exists $ats->{scheme}) { $scheme = $ats->{scheme}; } @@ -1129,6 +1129,9 @@ sub generate_assertion { if (exists $ats->{file}) { $file = $ats->{file}; } + if (exists $ats->{name}) { + $name = $ats->{name}; + } if (exists $ats->{query}) { $query = $ats->{query}; } @@ -1139,7 +1142,7 @@ sub generate_assertion { $isAbsolute = $ats->{isAbsolute}; } - print "is_uri_equals($scheme, $path, $host, $file, $query, $fragment, $isAbsolute, $actual)" + print "is_uri_equals($scheme, $path, $host, $file, $name, $query, $fragment, $isAbsolute, $actual)" } } diff --git a/test/testutils/domtsasserts.c b/test/testutils/domtsasserts.c index 92e8222..e5220e0 100644 --- a/test/testutils/domtsasserts.c +++ b/test/testutils/domtsasserts.c @@ -190,20 +190,148 @@ bool is_size_list(unsigned long size, list *list) } -bool is_uri_equals(char *scheme, char *path, char *host, - char *file, char *query, char *fragment, - bool isAbsolute, dom_string *actual) +bool is_uri_equals(const char *scheme, const char *path, const char *host, + const char *file, const char *name, const char *query, + const char *fragment, const char *isAbsolute, + dom_string *actual) { - UNUSED(scheme); - UNUSED(path); - UNUSED(host); - UNUSED(file); - UNUSED(query); - UNUSED(fragment); - UNUSED(isAbsolute); - UNUSED(actual); + const char *_ptr = actual != NULL ? dom_string_data(actual) : NULL; + const size_t slen = actual != NULL ? dom_string_byte_length(actual) : 0; + char *_sptr = actual != NULL ? domts_strndup(_ptr, slen) : NULL; + char *sptr = _sptr; + bool result = false; + + /* Used farther down */ + const char *firstColon = NULL; + const char *firstSlash = NULL; + char *actualPath = NULL; + char *actualScheme = NULL; + char *actualHost = NULL; + char *actualFile = NULL; + char *actualName = NULL; + + assert(sptr != NULL); + + /* Note, from here on down, this is essentially a semi-direct + * reimplementation of assertURIEquals in the Java DOMTS. + */ + + /* Attempt to check fragment */ + { + char *fptr = strrchr(sptr, '#'); + const char *cfptr = fptr + 1; + if (fptr != NULL) { + *fptr = '\0'; /* Remove fragment from sptr */ + } else { + cfptr = ""; + } + if (fragment != NULL) { + if (strcmp(fragment, cfptr) != 0) + goto out; + } + } + /* Attempt to check query string */ + { + char *qptr = strrchr(sptr, '?'); + const char *cqptr = qptr + 1; + if (qptr != NULL) { + *qptr = '\0'; /* Remove query from sptr */ + } else { + cqptr = ""; + } + if (query != NULL) { + if (strcmp(query, cqptr) != 0) + goto out; + } + } + + /* Scheme and path */ + firstColon = strchr(sptr, ':'); + firstSlash = strchr(sptr, '/'); + actualPath = strdup(sptr); + actualScheme = strdup(""); + if (firstColon != NULL && firstColon < firstSlash) { + free(actualScheme); + free(actualPath); + actualScheme = domts_strndup(sptr, firstColon - sptr); + actualPath = strdup(firstColon + 1); + } + if (scheme != NULL) { + if (strcmp(scheme, actualScheme) != 0) + goto out; + } + if (path != NULL) { + if (strcmp(path, actualPath) != 0) + goto out; + } + + /* host */ + if (host != NULL) { + if (actualPath[0] == '/' && + actualPath[1] == '/') { + const char *termslash = strchr(actualPath + 2, '/'); + actualHost = domts_strndup(actualPath, + termslash - actualPath); + } else { + actualHost = strdup(""); + } + if (strcmp(actualHost, host) != 0) + goto out; + } + + + /* file */ + actualFile = strdup(actualPath); + if (file != NULL || name != NULL) { + const char *finalSlash = strrchr(actualPath, '/'); + if (finalSlash != NULL) { + free(actualFile); + actualFile = strdup(finalSlash + 1); + } + if (file != NULL) { + if (strcmp(actualFile, file) != 0) + goto out; + } + } + + /* name */ + if (name != NULL) { + const char *finalPeriod = strrchr(actualFile, '.'); + if (finalPeriod != NULL) { + actualName = domts_strndup(actualFile, + finalPeriod - actualFile); + } else { + actualName = strdup(actualFile); + } + if (strcmp(actualName, name) != 0) + goto out; + } + + /* isAbsolute */ + if (isAbsolute != NULL) { + bool startslash = *actualPath == '/'; + bool isabsolute = strcasecmp(isAbsolute, "true") == 0; + isabsolute |= (strcasecmp(isAbsolute, "yes") == 0); + isabsolute |= (strcmp(isAbsolute, "1") == 0); + startslash |= (strncmp(actualPath, "file:/", 6) == 0); + if (isabsolute != startslash) + goto out; + } - return false; + result = true; +out: + if (actualPath != NULL) + free(actualPath); + if (actualScheme != NULL) + free(actualScheme); + if (actualHost != NULL) + free(actualHost); + if (actualFile != NULL) + free(actualFile); + if (actualName != NULL) + free(actualName); + free(_sptr); + return result; } diff --git a/test/testutils/domtsasserts.h b/test/testutils/domtsasserts.h index c301d88..bc214e8 100644 --- a/test/testutils/domtsasserts.h +++ b/test/testutils/domtsasserts.h @@ -49,9 +49,10 @@ bool is_size_domnamednodemap(unsigned long size, dom_namednodemap *map); bool is_size_domnodelist(unsigned long size, dom_nodelist *list); bool is_size_list(unsigned long size, list *list); -bool is_uri_equals(char *scheme, char *path, char *host, - char *file, char *query, char *fragment, - bool isAbsolute, dom_string *actual); +bool is_uri_equals(const char *scheme, const char *path, const char *host, + const char *file, const char *name, const char *query, + const char *fragment, const char *isAbsolute, + dom_string *actual); bool is_contenttype(const char *type); diff --git a/test/testutils/utils.c b/test/testutils/utils.c index 739933f..c876613 100644 --- a/test/testutils/utils.c +++ b/test/testutils/utils.c @@ -8,6 +8,7 @@ #include #include #include +#include #include "utils.h" @@ -31,4 +32,10 @@ void mymsg(uint32_t severity, void *ctx, const char *msg, ...) fprintf(stderr, "\n"); } - +char *domts_strndup(const char *s, size_t len) +{ + size_t retlen = min(strlen(s), len); + char *ret = calloc(retlen + 1, 1); + memcpy(ret, s, retlen); + return ret; +} diff --git a/test/testutils/utils.h b/test/testutils/utils.h index b57db36..560e909 100644 --- a/test/testutils/utils.h +++ b/test/testutils/utils.h @@ -31,5 +31,7 @@ void *myrealloc(void *ptr, size_t len, void *pw); void mymsg(uint32_t severity, void *ctx, const char *msg, ...); +char *domts_strndup(const char *s, size_t len); + #endif -- cgit v1.2.3 From 96f36b38bdfb3008d5cd6e94da6ad13faf93fd97 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 15:14:26 +0100 Subject: HTMLHeadElement: Support for the element, enable the test --- Makefile | 1 + include/dom/dom.h | 1 + include/dom/html/html_head_element.h | 30 ++++++++++ src/html/TODO | 2 +- src/html/html_document.c | 6 ++ src/html/html_document_strings.h | 2 + src/html/html_head_element.c | 69 ++++++++++++++++++---- src/html/html_head_element.h | 12 ++++ .../tests/level1/html/HTMLHeadElement01.xml | 42 +++++++++++++ .../tests/level1/html/HTMLHeadElement01.xml.kfail | 42 ------------- 10 files changed, 151 insertions(+), 56 deletions(-) create mode 100644 test/testcases/tests/level1/html/HTMLHeadElement01.xml delete mode 100644 test/testcases/tests/level1/html/HTMLHeadElement01.xml.kfail diff --git a/Makefile b/Makefile index 15954de..eab868d 100644 --- a/Makefile +++ b/Makefile @@ -82,6 +82,7 @@ I := /include/dom/html INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_document.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_html_element.h +INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_head_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_form_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) /lib/pkgconfig:lib$(COMPONENT).pc.in diff --git a/include/dom/dom.h b/include/dom/dom.h index 0ce0a23..77a40b3 100644 --- a/include/dom/dom.h +++ b/include/dom/dom.h @@ -41,6 +41,7 @@ #include #include #include +#include #include /* DOM Events header */ diff --git a/include/dom/html/html_head_element.h b/include/dom/html/html_head_element.h index e00fc19..ce2a817 100644 --- a/include/dom/html/html_head_element.h +++ b/include/dom/html/html_head_element.h @@ -8,7 +8,37 @@ #ifndef dom_html_head_element_h_ #define dom_html_head_element_h_ +#include + typedef struct dom_html_head_element dom_html_head_element; +typedef struct dom_html_head_element_vtable { + struct dom_html_element_vtable base; + + dom_exception (*dom_html_head_element_get_profile)(struct dom_html_head_element *element, + dom_string **profile); + dom_exception (*dom_html_head_element_set_profile)(struct dom_html_head_element *element, + dom_string *profile); +} dom_html_head_element_vtable; + +static inline dom_exception dom_html_head_element_get_profile( + struct dom_html_head_element *element, dom_string **profile) +{ + return ((dom_html_head_element_vtable *) ((dom_node *) element)->vtable)-> + dom_html_head_element_get_profile(element, profile); +} +#define dom_html_head_element_get_profile(e, profile) \ + dom_html_head_element_get_profile((dom_html_head_element *) (e), (profile)) + +static inline dom_exception dom_html_head_element_set_profile( + struct dom_html_head_element *element, dom_string *profile) +{ + return ((dom_html_head_element_vtable *) ((dom_node *) element)->vtable)-> + dom_html_head_element_set_profile(element, profile); +} +#define dom_html_head_element_set_profile(e, profile) \ + dom_html_head_element_set_profile((dom_html_head_element *) (e), (profile)) + + #endif diff --git a/src/html/TODO b/src/html/TODO index 41ad83c..491e916 100644 --- a/src/html/TODO +++ b/src/html/TODO @@ -2,7 +2,7 @@ The following is the status of the HTML Element and derived objects HTMLElement html_element UNFINISHED HTMLHtmlElement html_html_element DONE -HTMLHeadElement html_head_element MISSING +HTMLHeadElement html_head_element DONE HTMLLinkElement html_link_element MISSING HTMLTitleElement html_title_element MISSING HTMLMetaElement html_meta_element MISSING diff --git a/src/html/html_document.c b/src/html/html_document.c index b93b253..6978e06 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -12,6 +12,7 @@ #include "html/html_element.h" #include "html/html_collection.h" #include "html/html_html_element.h" +#include "html/html_head_element.h" #include "core/string.h" #include "utils/namespace.h" @@ -164,6 +165,11 @@ _dom_html_document_create_element_internal(dom_html_document *html, (dom_html_html_element **) result); } + if (dom_string_caseless_isequal(tag_name, html->memoised[hds_HEAD])) { + return _dom_html_head_element_create(html, namespace, prefix, + (dom_html_head_element **) result); + } + return _dom_html_element_create(html, tag_name, namespace, prefix, result); } diff --git a/src/html/html_document_strings.h b/src/html/html_document_strings.h index ffa33b3..6be5846 100644 --- a/src/html/html_document_strings.h +++ b/src/html/html_document_strings.h @@ -32,6 +32,8 @@ HTML_DOCUMENT_STRINGS_ACTION(dir) HTML_DOCUMENT_STRINGS_ACTION(class) /* Useful attributes used by HTMLHtmlElement */ HTML_DOCUMENT_STRINGS_ACTION(version) +/* Useful attributes used by HTMLHeadElement */ +HTML_DOCUMENT_STRINGS_ACTION(profile) /* Names for elements which get specialised. */ HTML_DOCUMENT_STRINGS_ACTION(HTML) HTML_DOCUMENT_STRINGS_ACTION(HEAD) diff --git a/src/html/html_head_element.c b/src/html/html_head_element.c index d74b8d1..6c5b99b 100644 --- a/src/html/html_head_element.c +++ b/src/html/html_head_element.c @@ -7,6 +7,7 @@ #include +#include "html/html_document.h" #include "html/html_head_element.h" #include "core/node.h" @@ -19,6 +20,22 @@ static struct dom_element_protected_vtable _protect_vtable = { DOM_HTML_HEAD_ELEMENT_PROTECT_VTABLE }; +static struct dom_html_head_element_vtable _vtable = { + { + { + { + { + DOM_NODE_EVENT_TARGET_VTABLE + }, + DOM_NODE_VTABLE_ELEMENT, + }, + DOM_ELEMENT_VTABLE + }, + DOM_HTML_ELEMENT_VTABLE + }, + DOM_HTML_HEAD_ELEMENT_VTABLE +}; + /** * Create a dom_html_head_element object * @@ -27,6 +44,7 @@ static struct dom_element_protected_vtable _protect_vtable = { * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ dom_exception _dom_html_head_element_create(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_head_element **ele) { struct dom_node_internal *node; @@ -37,10 +55,10 @@ dom_exception _dom_html_head_element_create(struct dom_html_document *doc, /* Set up vtables */ node = (struct dom_node_internal *) *ele; - node->base.vtable = &_dom_element_vtable; + node->base.vtable = &_vtable; node->vtable = &_protect_vtable; - return _dom_html_head_element_initialise(doc, *ele); + return _dom_html_head_element_initialise(doc, namespace, prefix, *ele); } /** @@ -51,19 +69,12 @@ dom_exception _dom_html_head_element_create(struct dom_html_document *doc, * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ dom_exception _dom_html_head_element_initialise(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_head_element *ele) { - dom_string *name = NULL; - dom_exception err; - - err = dom_string_create((const uint8_t *) "HEAD", SLEN("HEAD"), &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->memoised[hds_HEAD], + namespace, prefix); } /** @@ -118,3 +129,35 @@ dom_exception _dom_html_head_element_copy(dom_node_internal *old, return _dom_html_element_copy(old, copy); } +/*-----------------------------------------------------------------------*/ +/* API functions */ + +dom_exception _dom_html_head_element_get_profile(dom_html_head_element *element, + dom_string **profile) +{ + dom_exception ret; + dom_string *_memo_profile; + + _memo_profile = + ((struct dom_html_document *) + ((struct dom_node_internal *)element)->owner)->memoised[hds_profile]; + + ret = dom_element_get_attribute(element, _memo_profile, profile); + + return ret; +} + +dom_exception _dom_html_head_element_set_profile(dom_html_head_element *element, + dom_string *profile) +{ + dom_exception ret; + dom_string *_memo_profile; + + _memo_profile = + ((struct dom_html_document *) + ((struct dom_node_internal *)element)->owner)->memoised[hds_profile]; + + ret = dom_element_set_attribute(element, _memo_profile, profile); + + return ret; +} diff --git a/src/html/html_head_element.h b/src/html/html_head_element.h index aa6e21a..65cc3c5 100644 --- a/src/html/html_head_element.h +++ b/src/html/html_head_element.h @@ -19,10 +19,12 @@ struct dom_html_head_element { /* Create a dom_html_head_element object */ dom_exception _dom_html_head_element_create(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_head_element **ele); /* Initialise a dom_html_head_element object */ dom_exception _dom_html_head_element_initialise(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_head_element *ele); /* Finalise a dom_html_head_element object */ @@ -46,5 +48,15 @@ dom_exception _dom_html_head_element_copy(dom_node_internal *old, _dom_virtual_html_head_element_destroy, \ _dom_html_head_element_copy +/* The API functions */ +dom_exception _dom_html_head_element_get_profile(dom_html_head_element *element, + dom_string **profile); +dom_exception _dom_html_head_element_set_profile(dom_html_head_element *element, + dom_string *profile); + +#define DOM_HTML_HEAD_ELEMENT_VTABLE \ + _dom_html_head_element_get_profile, \ + _dom_html_head_element_set_profile + #endif diff --git a/test/testcases/tests/level1/html/HTMLHeadElement01.xml b/test/testcases/tests/level1/html/HTMLHeadElement01.xml new file mode 100644 index 0000000..a0fd82b --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLHeadElement01.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLHeadElement01 +NIST + + The profile attribute specifies a URI designating a metadata profile. + + Retrieve the profile attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLHeadElement01.xml.kfail b/test/testcases/tests/level1/html/HTMLHeadElement01.xml.kfail deleted file mode 100644 index a0fd82b..0000000 --- a/test/testcases/tests/level1/html/HTMLHeadElement01.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLHeadElement01 -NIST - - The profile attribute specifies a URI designating a metadata profile. - - Retrieve the profile attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - -- cgit v1.2.3 From 73cbed2db0bb587f2c544cdf92dbf56eb7a79971 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 15:31:40 +0100 Subject: HTMLTitleElement: Implementation and enabling of test --- Makefile | 1 + include/dom/dom.h | 1 + src/html/TODO | 2 +- src/html/html_document.c | 16 ++++----- src/html/html_title_element.c | 20 ++++------- src/html/html_title_element.h | 2 ++ test/DOMTSHandler.pm | 13 +++++-- .../tests/level1/html/HTMLTitleElement01.xml | 42 ++++++++++++++++++++++ .../tests/level1/html/HTMLTitleElement01.xml.kfail | 42 ---------------------- 9 files changed, 71 insertions(+), 68 deletions(-) create mode 100644 test/testcases/tests/level1/html/HTMLTitleElement01.xml delete mode 100644 test/testcases/tests/level1/html/HTMLTitleElement01.xml.kfail diff --git a/Makefile b/Makefile index eab868d..96e2d4e 100644 --- a/Makefile +++ b/Makefile @@ -83,6 +83,7 @@ INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_document.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_html_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_head_element.h +INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_title_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_form_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) /lib/pkgconfig:lib$(COMPONENT).pc.in diff --git a/include/dom/dom.h b/include/dom/dom.h index 77a40b3..20cd164 100644 --- a/include/dom/dom.h +++ b/include/dom/dom.h @@ -42,6 +42,7 @@ #include #include #include +#include #include /* DOM Events header */ diff --git a/src/html/TODO b/src/html/TODO index 491e916..fa5f8f0 100644 --- a/src/html/TODO +++ b/src/html/TODO @@ -4,7 +4,7 @@ HTMLElement html_element UNFINISHED HTMLHtmlElement html_html_element DONE HTMLHeadElement html_head_element DONE HTMLLinkElement html_link_element MISSING -HTMLTitleElement html_title_element MISSING +HTMLTitleElement html_title_element DONE HTMLMetaElement html_meta_element MISSING HTMLBaseElement html_base_element MISSING HTMLIsIndexElement html_isindex_element MISSING diff --git a/src/html/html_document.c b/src/html/html_document.c index 6978e06..11ee899 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -13,6 +13,7 @@ #include "html/html_collection.h" #include "html/html_html_element.h" #include "html/html_head_element.h" +#include "html/html_title_element.h" #include "core/string.h" #include "utils/namespace.h" @@ -170,6 +171,11 @@ _dom_html_document_create_element_internal(dom_html_document *html, (dom_html_head_element **) result); } + if (dom_string_caseless_isequal(tag_name, html->memoised[hds_TITLE])) { + return _dom_html_title_element_create(html, namespace, prefix, + (dom_html_title_element **) result); + } + return _dom_html_element_create(html, tag_name, namespace, prefix, result); } @@ -293,20 +299,12 @@ dom_exception _dom_html_document_get_title(dom_html_document *doc, *title = dom_string_ref(doc->title); } else { dom_element *node; - dom_string *title_str; dom_nodelist *nodes; unsigned long len; - exc = dom_string_create_interned((uint8_t*)"title", - 5, &title_str); - if (exc != DOM_NO_ERR) { - return exc; - } - exc = dom_document_get_elements_by_tag_name(doc, - title_str, + doc->memoised[hds_TITLE], &nodes); - dom_string_unref(title_str); if (exc != DOM_NO_ERR) { return exc; } diff --git a/src/html/html_title_element.c b/src/html/html_title_element.c index ea4d24c..73870a6 100644 --- a/src/html/html_title_element.c +++ b/src/html/html_title_element.c @@ -11,6 +11,7 @@ #include #include +#include "html/html_document.h" #include "html/html_title_element.h" #include "core/node.h" @@ -31,6 +32,7 @@ static struct dom_element_protected_vtable _protect_vtable = { * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ dom_exception _dom_html_title_element_create(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_title_element **ele) { struct dom_node_internal *node; @@ -44,7 +46,7 @@ dom_exception _dom_html_title_element_create(struct dom_html_document *doc, node->base.vtable = &_dom_element_vtable; node->vtable = &_protect_vtable; - return _dom_html_title_element_initialise(doc, *ele); + return _dom_html_title_element_initialise(doc, namespace, prefix, *ele); } /** @@ -55,20 +57,12 @@ dom_exception _dom_html_title_element_create(struct dom_html_document *doc, * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ dom_exception _dom_html_title_element_initialise(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_title_element *ele) { - dom_string *name = NULL; - dom_exception err; - - err = dom_string_create((const uint8_t *) "TITLE", SLEN("TITLE"), - &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->memoised[hds_TITLE], + namespace, prefix); } /** diff --git a/src/html/html_title_element.h b/src/html/html_title_element.h index 958c3fe..51adaf9 100644 --- a/src/html/html_title_element.h +++ b/src/html/html_title_element.h @@ -19,10 +19,12 @@ struct dom_html_title_element { /* Create a dom_html_title_element object */ dom_exception _dom_html_title_element_create(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_title_element **ele); /* Initialise a dom_html_title_element object */ dom_exception _dom_html_title_element_initialise(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_title_element *ele); /* Finalise a dom_html_title_element object */ diff --git a/test/DOMTSHandler.pm b/test/DOMTSHandler.pm index dd5a7a8..37f6166 100644 --- a/test/DOMTSHandler.pm +++ b/test/DOMTSHandler.pm @@ -788,7 +788,7 @@ sub generate_attribute_fetcher { } my $fetcher = to_attribute_fetcher($ats{'interface'}, "$en"); - + my $cast = to_attribute_cast($ats{'interface'}); my $unref = 0; my $temp_node = 0; # Deal with the situation like @@ -807,14 +807,14 @@ sub generate_attribute_fetcher { my $t = type_to_ctype($self->{'var'}->{$ats{'var'}}); $tnode_index ++; print "\t$t tnode$tnode_index = NULL;\n"; - print "\texp = $fetcher($ats{'obj'}, \&tnode$tnode_index);\n"; + print "\texp = $fetcher(${cast}$ats{'obj'}, \&tnode$tnode_index);\n"; # The ats{'obj'} must have been added to cleanup stack $unref = 1; # Indicate that we have created a temp node $temp_node = 1; } else { $unref = $self->param_unref($ats{'var'}); - print "\texp = $fetcher($ats{'obj'}, \&$ats{'var'});\n"; + print "\texp = $fetcher(${cast}$ats{'obj'}, \&$ats{'var'});\n"; } @@ -1379,6 +1379,13 @@ sub to_attribute_accessor { return $ret; } +sub to_attribute_cast { + my $type = shift; + my $ret = get_prefix($type); + $ret =~ s/h_t_m_l/html/; + return "(${ret} *)"; +} + sub get_prefix { my $type = shift; diff --git a/test/testcases/tests/level1/html/HTMLTitleElement01.xml b/test/testcases/tests/level1/html/HTMLTitleElement01.xml new file mode 100644 index 0000000..9b95d95 --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLTitleElement01.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLTitleElement01 +NIST + + The text attribute is the specified title as a string. + + Retrieve the text attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLTitleElement01.xml.kfail b/test/testcases/tests/level1/html/HTMLTitleElement01.xml.kfail deleted file mode 100644 index 9b95d95..0000000 --- a/test/testcases/tests/level1/html/HTMLTitleElement01.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLTitleElement01 -NIST - - The text attribute is the specified title as a string. - - Retrieve the text attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - -- cgit v1.2.3 From 8762a081422017a30f482071ee2eafa7ce1bd86a Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 16:26:12 +0100 Subject: HTMLElement: Allow other elements to use the vtable --- src/html/html_element.c | 2 +- src/html/html_element.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/html/html_element.c b/src/html/html_element.c index be8066f..3642c6c 100644 --- a/src/html/html_element.c +++ b/src/html/html_element.c @@ -16,7 +16,7 @@ #include "core/document.h" #include "utils/utils.h" -static struct dom_html_element_vtable _dom_html_element_vtable = { +struct dom_html_element_vtable _dom_html_element_vtable = { { { { diff --git a/src/html/html_element.h b/src/html/html_element.h index 2766dab..4a81102 100644 --- a/src/html/html_element.h +++ b/src/html/html_element.h @@ -83,5 +83,7 @@ dom_exception dom_html_element_get_bool_property(dom_html_element *ele, dom_exception dom_html_element_set_bool_property(dom_html_element *ele, const char *name, unsigned long len, bool has); +extern struct dom_html_element_vtable _dom_html_element_vtable; + #endif -- cgit v1.2.3 From be6a4a5ca86d5b0c21b90fa758a5c3c7ce67ae19 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 16:26:54 +0100 Subject: HTMLTitleElement: use HTMLElement's vtable for now --- src/html/html_title_element.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/html/html_title_element.c b/src/html/html_title_element.c index 73870a6..80da5e1 100644 --- a/src/html/html_title_element.c +++ b/src/html/html_title_element.c @@ -43,7 +43,7 @@ dom_exception _dom_html_title_element_create(struct dom_html_document *doc, /* Set up vtables */ node = (struct dom_node_internal *) *ele; - node->base.vtable = &_dom_element_vtable; + node->base.vtable = &_dom_html_element_vtable; node->vtable = &_protect_vtable; return _dom_html_title_element_initialise(doc, namespace, prefix, *ele); -- cgit v1.2.3 From 7783b83d261de624ea7a74d4d8c12f085ea8cc91 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 16:28:04 +0100 Subject: HTMLFormElement: Initial support, 2 tests now pass --- src/html/html_document.c | 6 +++ src/html/html_form_element.c | 34 +++++++++++------ src/html/html_form_element.h | 2 + .../tests/level1/html/HTMLFormElement02.xml | 44 ++++++++++++++++++++++ .../tests/level1/html/HTMLFormElement02.xml.kfail | 44 ---------------------- .../tests/level1/html/HTMLFormElement03.xml | 42 +++++++++++++++++++++ .../tests/level1/html/HTMLFormElement03.xml.kfail | 42 --------------------- 7 files changed, 117 insertions(+), 97 deletions(-) create mode 100644 test/testcases/tests/level1/html/HTMLFormElement02.xml delete mode 100644 test/testcases/tests/level1/html/HTMLFormElement02.xml.kfail create mode 100644 test/testcases/tests/level1/html/HTMLFormElement03.xml delete mode 100644 test/testcases/tests/level1/html/HTMLFormElement03.xml.kfail diff --git a/src/html/html_document.c b/src/html/html_document.c index 11ee899..288de82 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -14,6 +14,7 @@ #include "html/html_html_element.h" #include "html/html_head_element.h" #include "html/html_title_element.h" +#include "html/html_form_element.h" #include "core/string.h" #include "utils/namespace.h" @@ -176,6 +177,11 @@ _dom_html_document_create_element_internal(dom_html_document *html, (dom_html_title_element **) result); } + if (dom_string_caseless_isequal(tag_name, html->memoised[hds_FORM])) { + return _dom_html_form_element_create(html, namespace, prefix, + (dom_html_form_element **) result); + } + return _dom_html_element_create(html, tag_name, namespace, prefix, result); } diff --git a/src/html/html_form_element.c b/src/html/html_form_element.c index b24a08e..83af37a 100644 --- a/src/html/html_form_element.c +++ b/src/html/html_form_element.c @@ -33,6 +33,7 @@ static bool _dom_is_form_control(struct dom_node_internal *node); * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ dom_exception _dom_html_form_element_create(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_form_element **ele) { struct dom_node_internal *node; @@ -43,10 +44,10 @@ dom_exception _dom_html_form_element_create(struct dom_html_document *doc, /* Set up vtables */ node = (struct dom_node_internal *) *ele; - node->base.vtable = &_dom_element_vtable; + node->base.vtable = &_dom_html_element_vtable; node->vtable = &_protect_vtable; - return _dom_html_form_element_initialise(doc, *ele); + return _dom_html_form_element_initialise(doc, namespace, prefix, *ele); } /** @@ -57,18 +58,15 @@ dom_exception _dom_html_form_element_create(struct dom_html_document *doc, * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ dom_exception _dom_html_form_element_initialise(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_form_element *ele) { - dom_string *name = NULL; dom_exception err; - err = dom_string_create((const uint8_t *) "FORM", SLEN("FORM"), &name); - if (err != DOM_NO_ERR) - return err; + err = _dom_html_element_initialise(doc, &ele->base, + doc->memoised[hds_FORM], + namespace, prefix); - err = _dom_html_element_initialise(doc, &ele->base, name, NULL, NULL); - dom_string_unref(name); - ele->col = NULL; return err; @@ -231,11 +229,25 @@ dom_exception dom_html_form_element_reset(dom_html_form_element *ele) * src/html/html_collection.h for detail. */ static bool _dom_is_form_control(struct dom_node_internal *node) { - UNUSED(node); + struct dom_html_document *doc = + (struct dom_html_document *)(node->owner); assert(node->type == DOM_ELEMENT_NODE); - /** \todo: implement */ + /* Form controls are INPUT TEXTAREA SELECT and BUTTON */ + if (dom_string_caseless_isequal(node->name, + doc->memoised[hds_INPUT])) + return true; + if (dom_string_caseless_isequal(node->name, + doc->memoised[hds_TEXTAREA])) + return true; + if (dom_string_caseless_isequal(node->name, + doc->memoised[hds_SELECT])) + return true; + if (dom_string_caseless_isequal(node->name, + doc->memoised[hds_BUTTON])) + return true; + return false; } diff --git a/src/html/html_form_element.h b/src/html/html_form_element.h index dbf6267..1ee9878 100644 --- a/src/html/html_form_element.h +++ b/src/html/html_form_element.h @@ -23,10 +23,12 @@ struct dom_html_form_element { /* Create a dom_html_form_element object */ dom_exception _dom_html_form_element_create(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_form_element **ele); /* Initialise a dom_html_form_element object */ dom_exception _dom_html_form_element_initialise(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_form_element *ele); /* Finalise a dom_html_form_element object */ diff --git a/test/testcases/tests/level1/html/HTMLFormElement02.xml b/test/testcases/tests/level1/html/HTMLFormElement02.xml new file mode 100644 index 0000000..06abf8d --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLFormElement02.xml @@ -0,0 +1,44 @@ + + + + + + + +HTMLFormElement02 +NIST + + The length attribute specifies the number of form controls + in the form. + + Retrieve the length attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLFormElement02.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement02.xml.kfail deleted file mode 100644 index 06abf8d..0000000 --- a/test/testcases/tests/level1/html/HTMLFormElement02.xml.kfail +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - -HTMLFormElement02 -NIST - - The length attribute specifies the number of form controls - in the form. - - Retrieve the length attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLFormElement03.xml b/test/testcases/tests/level1/html/HTMLFormElement03.xml new file mode 100644 index 0000000..50332f9 --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLFormElement03.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLFormElement03 +NIST + + The id(name) attribute specifies the name of the form. + + Retrieve the id attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLFormElement03.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement03.xml.kfail deleted file mode 100644 index 50332f9..0000000 --- a/test/testcases/tests/level1/html/HTMLFormElement03.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLFormElement03 -NIST - - The id(name) attribute specifies the name of the form. - - Retrieve the id attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - -- cgit v1.2.3 From 31e776d1bca37d2def4307537ae5508d9e9705f6 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 16:52:28 +0100 Subject: Makefile: Install the html_collection header and include it from dom.h --- Makefile | 1 + include/dom/dom.h | 1 + 2 files changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 96e2d4e..0c83160 100644 --- a/Makefile +++ b/Makefile @@ -80,6 +80,7 @@ INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/document_event.h Is := include/dom/html I := /include/dom/html INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_document.h +INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_collection.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_html_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_head_element.h diff --git a/include/dom/dom.h b/include/dom/dom.h index 20cd164..80b5bd0 100644 --- a/include/dom/dom.h +++ b/include/dom/dom.h @@ -38,6 +38,7 @@ #include /* DOM HTML headers */ +#include #include #include #include -- cgit v1.2.3 From 85ad24b2f105681e9e4dcb0e138668bda706b628 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 17:11:34 +0100 Subject: DOMTSHandler: Enable support for HTMLCollection and enable another form test --- test/DOMTSHandler.pm | 4 ++ .../tests/level1/html/HTMLFormElement01.xml | 45 ++++++++++++++++++++++ .../tests/level1/html/HTMLFormElement01.xml.kfail | 45 ---------------------- 3 files changed, 49 insertions(+), 45 deletions(-) create mode 100644 test/testcases/tests/level1/html/HTMLFormElement01.xml delete mode 100644 test/testcases/tests/level1/html/HTMLFormElement01.xml.kfail diff --git a/test/DOMTSHandler.pm b/test/DOMTSHandler.pm index 37f6166..6545332 100644 --- a/test/DOMTSHandler.pm +++ b/test/DOMTSHandler.pm @@ -38,6 +38,7 @@ our %special_type = ( DOMImplementation => "dom_implementation *", NamedNodeMap => "dom_namednodemap *", NodeList => "dom_nodelist *", + HTMLCollection => "dom_html_collection *", CharacterData => "dom_characterdata *", CDATASection => "dom_cdata_section *", ); @@ -46,6 +47,7 @@ our %special_prefix = ( DOMImplementation => "dom_implementation", NamedNodeMap => "dom_namednodemap", NodeList => "dom_nodelist", + HTMLCollection => "dom_html_collection", CharacterData => "dom_characterdata", CDATASection => "dom_cdata_section *", ); @@ -54,6 +56,7 @@ our %unref_prefix = ( DOMString => "dom_string", NamedNodeMap => "dom_namednodemap", NodeList => "dom_nodelist", + HTMLCollection => "dom_html_collection", ); our %special_method = ( @@ -79,6 +82,7 @@ our %override_suffix = ( DOMImplementation => "domimplementation", NamedNodeMap => "domnamednodemap", NodeList => "domnodelist", + HTMLCollection => "domhtmlcollection", Collection => "list", List => "list", ); diff --git a/test/testcases/tests/level1/html/HTMLFormElement01.xml b/test/testcases/tests/level1/html/HTMLFormElement01.xml new file mode 100644 index 0000000..057fac5 --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLFormElement01.xml @@ -0,0 +1,45 @@ + + + + + + + +HTMLFormElement01 +NIST + + The elements attribute specifies a collection of all control element + in the form. + + Retrieve the elements attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLFormElement01.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement01.xml.kfail deleted file mode 100644 index 057fac5..0000000 --- a/test/testcases/tests/level1/html/HTMLFormElement01.xml.kfail +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - -HTMLFormElement01 -NIST - - The elements attribute specifies a collection of all control element - in the form. - - Retrieve the elements attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - - - -- cgit v1.2.3 From 4bd9b5366d2eb5d6430f75a0ccd7ea4cb10ff838 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 17:12:02 +0100 Subject: HTMLDocument: Allow memoised strings to differ from their names --- src/html/html_document.c | 6 +- src/html/html_document_strings.h | 153 +++++++++++++++++++++------------------ 2 files changed, 84 insertions(+), 75 deletions(-) diff --git a/src/html/html_document.c b/src/html/html_document.c index 288de82..69b40eb 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -86,9 +86,9 @@ dom_exception _dom_html_document_initialise(dom_html_document *doc, goto out; } -#define HTML_DOCUMENT_STRINGS_ACTION(attr) \ - error = dom_string_create_interned((const uint8_t *) #attr, \ - SLEN(#attr), &doc->memoised[hds_##attr]); \ +#define HTML_DOCUMENT_STRINGS_ACTION(attr,str) \ + error = dom_string_create_interned((const uint8_t *) #str, \ + SLEN(#str), &doc->memoised[hds_##attr]); \ if (error != DOM_NO_ERR) { \ goto out; \ } diff --git a/src/html/html_document_strings.h b/src/html/html_document_strings.h index 6be5846..c179e0b 100644 --- a/src/html/html_document_strings.h +++ b/src/html/html_document_strings.h @@ -16,93 +16,102 @@ #define HTML_DOCUMENT_STRINGS_SUFFIX \ hds_COUNT \ } html_document_memo_string_e; -#define HTML_DOCUMENT_STRINGS_ACTION(tag) \ +#define HTML_DOCUMENT_STRINGS_ACTION(tag,str) \ hds_##tag, #endif +#define HTML_DOCUMENT_STRINGS_ACTION1(x) HTML_DOCUMENT_STRINGS_ACTION(x,x) + #ifdef HTML_DOCUMENT_STRINGS_PREFIX HTML_DOCUMENT_STRINGS_PREFIX #endif /* Useful attributes for HTMLElement */ -HTML_DOCUMENT_STRINGS_ACTION(id) -HTML_DOCUMENT_STRINGS_ACTION(title) -HTML_DOCUMENT_STRINGS_ACTION(lang) -HTML_DOCUMENT_STRINGS_ACTION(dir) -HTML_DOCUMENT_STRINGS_ACTION(class) +HTML_DOCUMENT_STRINGS_ACTION1(id) +HTML_DOCUMENT_STRINGS_ACTION1(title) +HTML_DOCUMENT_STRINGS_ACTION1(lang) +HTML_DOCUMENT_STRINGS_ACTION1(dir) +HTML_DOCUMENT_STRINGS_ACTION1(class) /* Useful attributes used by HTMLHtmlElement */ -HTML_DOCUMENT_STRINGS_ACTION(version) +HTML_DOCUMENT_STRINGS_ACTION1(version) /* Useful attributes used by HTMLHeadElement */ -HTML_DOCUMENT_STRINGS_ACTION(profile) +HTML_DOCUMENT_STRINGS_ACTION1(profile) +/* Useful attributes used by HTMLFormElement */ +HTML_DOCUMENT_STRINGS_ACTION(accept_charset,accept-charset) +HTML_DOCUMENT_STRINGS_ACTION1(action) +HTML_DOCUMENT_STRINGS_ACTION1(enctype) +HTML_DOCUMENT_STRINGS_ACTION1(method) +HTML_DOCUMENT_STRINGS_ACTION1(target) /* Names for elements which get specialised. */ -HTML_DOCUMENT_STRINGS_ACTION(HTML) -HTML_DOCUMENT_STRINGS_ACTION(HEAD) -HTML_DOCUMENT_STRINGS_ACTION(LINK) -HTML_DOCUMENT_STRINGS_ACTION(TITLE) -HTML_DOCUMENT_STRINGS_ACTION(META) -HTML_DOCUMENT_STRINGS_ACTION(BASE) -HTML_DOCUMENT_STRINGS_ACTION(ISINDEX) -HTML_DOCUMENT_STRINGS_ACTION(STYLE) -HTML_DOCUMENT_STRINGS_ACTION(BODY) -HTML_DOCUMENT_STRINGS_ACTION(FORM) -HTML_DOCUMENT_STRINGS_ACTION(SELECT) -HTML_DOCUMENT_STRINGS_ACTION(OPTGROUP) -HTML_DOCUMENT_STRINGS_ACTION(OPTION) -HTML_DOCUMENT_STRINGS_ACTION(INPUT) -HTML_DOCUMENT_STRINGS_ACTION(TEXTAREA) -HTML_DOCUMENT_STRINGS_ACTION(BUTTON) -HTML_DOCUMENT_STRINGS_ACTION(LABEL) -HTML_DOCUMENT_STRINGS_ACTION(FIELDSET) -HTML_DOCUMENT_STRINGS_ACTION(LEGEND) -HTML_DOCUMENT_STRINGS_ACTION(UL) -HTML_DOCUMENT_STRINGS_ACTION(OL) -HTML_DOCUMENT_STRINGS_ACTION(DL) -HTML_DOCUMENT_STRINGS_ACTION(DIR) -HTML_DOCUMENT_STRINGS_ACTION(MENU) -HTML_DOCUMENT_STRINGS_ACTION(LI) -HTML_DOCUMENT_STRINGS_ACTION(BLOCKQUOTE) -HTML_DOCUMENT_STRINGS_ACTION(DIV) -HTML_DOCUMENT_STRINGS_ACTION(P) -HTML_DOCUMENT_STRINGS_ACTION(H1) -HTML_DOCUMENT_STRINGS_ACTION(H2) -HTML_DOCUMENT_STRINGS_ACTION(H3) -HTML_DOCUMENT_STRINGS_ACTION(H4) -HTML_DOCUMENT_STRINGS_ACTION(H5) -HTML_DOCUMENT_STRINGS_ACTION(H6) -HTML_DOCUMENT_STRINGS_ACTION(Q) -HTML_DOCUMENT_STRINGS_ACTION(PRE) -HTML_DOCUMENT_STRINGS_ACTION(BR) -HTML_DOCUMENT_STRINGS_ACTION(BASEFONT) -HTML_DOCUMENT_STRINGS_ACTION(FONT) -HTML_DOCUMENT_STRINGS_ACTION(HR) -HTML_DOCUMENT_STRINGS_ACTION(INS) -HTML_DOCUMENT_STRINGS_ACTION(DEL) -HTML_DOCUMENT_STRINGS_ACTION(A) -HTML_DOCUMENT_STRINGS_ACTION(IMG) -HTML_DOCUMENT_STRINGS_ACTION(OBJECT) -HTML_DOCUMENT_STRINGS_ACTION(PARAM) -HTML_DOCUMENT_STRINGS_ACTION(APPLET) -HTML_DOCUMENT_STRINGS_ACTION(MAP) -HTML_DOCUMENT_STRINGS_ACTION(AREA) -HTML_DOCUMENT_STRINGS_ACTION(SCRIPT) -HTML_DOCUMENT_STRINGS_ACTION(TABLE) -HTML_DOCUMENT_STRINGS_ACTION(CAPTION) -HTML_DOCUMENT_STRINGS_ACTION(COL) -HTML_DOCUMENT_STRINGS_ACTION(COLGROUP) -HTML_DOCUMENT_STRINGS_ACTION(THEAD) -HTML_DOCUMENT_STRINGS_ACTION(TFOOT) -HTML_DOCUMENT_STRINGS_ACTION(TBODY) -HTML_DOCUMENT_STRINGS_ACTION(TR) -HTML_DOCUMENT_STRINGS_ACTION(TH) -HTML_DOCUMENT_STRINGS_ACTION(TD) -HTML_DOCUMENT_STRINGS_ACTION(FRAMESET) -HTML_DOCUMENT_STRINGS_ACTION(FRAME) -HTML_DOCUMENT_STRINGS_ACTION(IFRAME) +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(DIR) +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 #endif - + +#undef HTML_DOCUMENT_STRINGS_ACTION1 #ifdef HTML_DOCUMENT_STRINGS_INTERNAL_ACTION #undef HTML_DOCUMENT_STRINGS_INTERNAL_ACTION -- cgit v1.2.3 From f7930870c0027672685ebc6df415240c4afe9a0b Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 17:16:25 +0100 Subject: HTMLFormElement: Add basic attributes, enable 5 more tests --- include/dom/html/html_form_element.h | 32 ++++++++++++++++ src/html/html_form_element.c | 40 ++++++++++++++++++++ .../tests/level1/html/HTMLFormElement04.xml | 43 ++++++++++++++++++++++ .../tests/level1/html/HTMLFormElement04.xml.kfail | 43 ---------------------- .../tests/level1/html/HTMLFormElement05.xml | 42 +++++++++++++++++++++ .../tests/level1/html/HTMLFormElement05.xml.kfail | 42 --------------------- .../tests/level1/html/HTMLFormElement06.xml | 42 +++++++++++++++++++++ .../tests/level1/html/HTMLFormElement06.xml.kfail | 42 --------------------- .../tests/level1/html/HTMLFormElement07.xml | 42 +++++++++++++++++++++ .../tests/level1/html/HTMLFormElement07.xml.kfail | 42 --------------------- .../tests/level1/html/HTMLFormElement08.xml | 42 +++++++++++++++++++++ .../tests/level1/html/HTMLFormElement08.xml.kfail | 42 --------------------- 12 files changed, 283 insertions(+), 211 deletions(-) create mode 100644 test/testcases/tests/level1/html/HTMLFormElement04.xml delete mode 100644 test/testcases/tests/level1/html/HTMLFormElement04.xml.kfail create mode 100644 test/testcases/tests/level1/html/HTMLFormElement05.xml delete mode 100644 test/testcases/tests/level1/html/HTMLFormElement05.xml.kfail create mode 100644 test/testcases/tests/level1/html/HTMLFormElement06.xml delete mode 100644 test/testcases/tests/level1/html/HTMLFormElement06.xml.kfail create mode 100644 test/testcases/tests/level1/html/HTMLFormElement07.xml delete mode 100644 test/testcases/tests/level1/html/HTMLFormElement07.xml.kfail create mode 100644 test/testcases/tests/level1/html/HTMLFormElement08.xml delete mode 100644 test/testcases/tests/level1/html/HTMLFormElement08.xml.kfail diff --git a/include/dom/html/html_form_element.h b/include/dom/html/html_form_element.h index 230846c..c4ee1d8 100644 --- a/include/dom/html/html_form_element.h +++ b/include/dom/html/html_form_element.h @@ -9,6 +9,7 @@ #define dom_html_form_element_h_ #include +#include struct dom_html_collection; @@ -18,6 +19,37 @@ dom_exception dom_html_form_element_get_elements(dom_html_form_element *ele, struct dom_html_collection **col); dom_exception dom_html_form_element_get_length(dom_html_form_element *ele, unsigned long *len); + +dom_exception dom_html_form_element_get_accept_charset( + dom_html_form_element *ele, dom_string **accept_charset); + +dom_exception dom_html_form_element_set_accept_charset( + dom_html_form_element *ele, dom_string *accept_charset); + +dom_exception dom_html_form_element_get_action( + dom_html_form_element *ele, dom_string **action); + +dom_exception dom_html_form_element_set_action( + dom_html_form_element *ele, dom_string *action); + +dom_exception dom_html_form_element_get_enctype( + dom_html_form_element *ele, dom_string **enctype); + +dom_exception dom_html_form_element_set_enctype( + dom_html_form_element *ele, dom_string *enctype); + +dom_exception dom_html_form_element_get_method( + dom_html_form_element *ele, dom_string **method); + +dom_exception dom_html_form_element_set_method( + dom_html_form_element *ele, dom_string *method); + +dom_exception dom_html_form_element_get_target( + dom_html_form_element *ele, dom_string **target); + +dom_exception dom_html_form_element_set_target( + dom_html_form_element *ele, dom_string *target); + dom_exception dom_html_form_element_submit(dom_html_form_element *ele); dom_exception dom_html_form_element_reset(dom_html_form_element *ele); diff --git a/src/html/html_form_element.c b/src/html/html_form_element.c index 83af37a..0688cd6 100644 --- a/src/html/html_form_element.c +++ b/src/html/html_form_element.c @@ -8,6 +8,8 @@ #include #include +#include + #include "html/html_form_element.h" #include "html/html_collection.h" @@ -182,6 +184,44 @@ dom_exception dom_html_form_element_get_length(dom_html_form_element *ele, return dom_html_collection_get_length(ele->col, len); } +#define SIMPLE_GET_SET(fattr,attr) \ +dom_exception dom_html_form_element_get_##fattr(dom_html_form_element *element, \ + dom_string **fattr) \ +{ \ + dom_exception ret; \ + dom_string *_memo_##attr; \ + \ + _memo_##attr = \ + ((struct dom_html_document *) \ + ((struct dom_node_internal *)element)->owner)->memoised[hds_##attr]; \ + \ + ret = dom_element_get_attribute(element, _memo_##attr, fattr); \ + \ + return ret; \ +} \ + \ +dom_exception dom_html_form_element_set_##fattr(dom_html_form_element *element, \ + dom_string *fattr) \ +{ \ + dom_exception ret; \ + dom_string *_memo_##attr; \ + \ + _memo_##attr = \ + ((struct dom_html_document *) \ + ((struct dom_node_internal *)element)->owner)->memoised[hds_##attr]; \ + \ + ret = dom_element_set_attribute(element, _memo_##attr, fattr); \ + \ + return ret; \ +} + +SIMPLE_GET_SET(accept_charset,accept_charset) +SIMPLE_GET_SET(action,action) +SIMPLE_GET_SET(enctype,enctype) +SIMPLE_GET_SET(method,method) +SIMPLE_GET_SET(target,target) + + /** * Submit this form * diff --git a/test/testcases/tests/level1/html/HTMLFormElement04.xml b/test/testcases/tests/level1/html/HTMLFormElement04.xml new file mode 100644 index 0000000..4077e36 --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLFormElement04.xml @@ -0,0 +1,43 @@ + + + + + + + +HTMLFormElement04 +NIST + + The acceptCharset attribute specifies the list of character sets + supported by the server. + + Retrieve the acceptCharset attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLFormElement04.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement04.xml.kfail deleted file mode 100644 index 4077e36..0000000 --- a/test/testcases/tests/level1/html/HTMLFormElement04.xml.kfail +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - -HTMLFormElement04 -NIST - - The acceptCharset attribute specifies the list of character sets - supported by the server. - - Retrieve the acceptCharset attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLFormElement05.xml b/test/testcases/tests/level1/html/HTMLFormElement05.xml new file mode 100644 index 0000000..54a3436 --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLFormElement05.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLFormElement05 +NIST + + The action attribute specifies the server-side form handler. + + Retrieve the action attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLFormElement05.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement05.xml.kfail deleted file mode 100644 index 54a3436..0000000 --- a/test/testcases/tests/level1/html/HTMLFormElement05.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLFormElement05 -NIST - - The action attribute specifies the server-side form handler. - - Retrieve the action attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLFormElement06.xml b/test/testcases/tests/level1/html/HTMLFormElement06.xml new file mode 100644 index 0000000..fb1ca95 --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLFormElement06.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLFormElement06 +NIST + + The enctype attribute specifies the content of the submitted form. + + Retrieve the enctype attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLFormElement06.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement06.xml.kfail deleted file mode 100644 index fb1ca95..0000000 --- a/test/testcases/tests/level1/html/HTMLFormElement06.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLFormElement06 -NIST - - The enctype attribute specifies the content of the submitted form. - - Retrieve the enctype attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLFormElement07.xml b/test/testcases/tests/level1/html/HTMLFormElement07.xml new file mode 100644 index 0000000..897b63d --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLFormElement07.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLFormElement07 +NIST + + The method attribute specifies the HTTP method used to submit the form. + + Retrieve the method attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLFormElement07.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement07.xml.kfail deleted file mode 100644 index 897b63d..0000000 --- a/test/testcases/tests/level1/html/HTMLFormElement07.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLFormElement07 -NIST - - The method attribute specifies the HTTP method used to submit the form. - - Retrieve the method attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLFormElement08.xml b/test/testcases/tests/level1/html/HTMLFormElement08.xml new file mode 100644 index 0000000..1a691cb --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLFormElement08.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLFormElement08 +NIST + + The target attribute specifies the frame to render the resource in. + + Retrieve the target attribute and examine it's value. + +Rick Rivello +2002-05-09 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLFormElement08.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement08.xml.kfail deleted file mode 100644 index 1a691cb..0000000 --- a/test/testcases/tests/level1/html/HTMLFormElement08.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLFormElement08 -NIST - - The target attribute specifies the frame to render the resource in. - - Retrieve the target attribute and examine it's value. - -Rick Rivello -2002-05-09 - - - - - - - - - - - - - -- cgit v1.2.3 From d78531bc2333b77cf9257531328974a7a99bb489 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 17:22:44 +0100 Subject: HTMLCollection: Some of the tests are now kfail, one now passes --- .../tests/level1/html/HTMLCollection02.xml.kfail | 49 +++++++++++++++++++++ .../tests/level1/html/HTMLCollection02.xml.notimpl | 49 --------------------- .../tests/level1/html/HTMLCollection03.xml.kfail | 49 +++++++++++++++++++++ .../tests/level1/html/HTMLCollection03.xml.notimpl | 49 --------------------- .../tests/level1/html/HTMLCollection10.xml.kfail | 51 ++++++++++++++++++++++ .../tests/level1/html/HTMLCollection10.xml.notimpl | 51 ---------------------- .../tests/level1/html/HTMLCollection11.xml.kfail | 51 ++++++++++++++++++++++ .../tests/level1/html/HTMLCollection11.xml.notimpl | 51 ---------------------- .../tests/level1/html/HTMLCollection12.xml | 50 +++++++++++++++++++++ .../tests/level1/html/HTMLCollection12.xml.notimpl | 50 --------------------- 10 files changed, 250 insertions(+), 250 deletions(-) create mode 100644 test/testcases/tests/level1/html/HTMLCollection02.xml.kfail delete mode 100644 test/testcases/tests/level1/html/HTMLCollection02.xml.notimpl create mode 100644 test/testcases/tests/level1/html/HTMLCollection03.xml.kfail delete mode 100644 test/testcases/tests/level1/html/HTMLCollection03.xml.notimpl create mode 100644 test/testcases/tests/level1/html/HTMLCollection10.xml.kfail delete mode 100644 test/testcases/tests/level1/html/HTMLCollection10.xml.notimpl create mode 100644 test/testcases/tests/level1/html/HTMLCollection11.xml.kfail delete mode 100644 test/testcases/tests/level1/html/HTMLCollection11.xml.notimpl create mode 100644 test/testcases/tests/level1/html/HTMLCollection12.xml delete mode 100644 test/testcases/tests/level1/html/HTMLCollection12.xml.notimpl diff --git a/test/testcases/tests/level1/html/HTMLCollection02.xml.kfail b/test/testcases/tests/level1/html/HTMLCollection02.xml.kfail new file mode 100644 index 0000000..521d5ae --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLCollection02.xml.kfail @@ -0,0 +1,49 @@ + + + + + + + +HTMLCollection02 +NIST + + An individual node may be accessed by either ordinal index, the node's + name or id attributes. (Test node name). + + Retrieve the first FORM element and create a HTMLCollection by invoking + the elements attribute. The first SELECT element is further retrieved + using the elements name attribute. + +Rick Rivello +2002-05-01 + + + + + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLCollection02.xml.notimpl b/test/testcases/tests/level1/html/HTMLCollection02.xml.notimpl deleted file mode 100644 index 521d5ae..0000000 --- a/test/testcases/tests/level1/html/HTMLCollection02.xml.notimpl +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - -HTMLCollection02 -NIST - - An individual node may be accessed by either ordinal index, the node's - name or id attributes. (Test node name). - - Retrieve the first FORM element and create a HTMLCollection by invoking - the elements attribute. The first SELECT element is further retrieved - using the elements name attribute. - -Rick Rivello -2002-05-01 - - - - - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLCollection03.xml.kfail b/test/testcases/tests/level1/html/HTMLCollection03.xml.kfail new file mode 100644 index 0000000..36d489e --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLCollection03.xml.kfail @@ -0,0 +1,49 @@ + + + + + + + +HTMLCollection03 +NIST + + An individual node may be accessed by either ordinal index, the node's + name or id attributes. (Test id attribute). + + Retrieve the first FORM element and create a HTMLCollection by invoking + the "element" attribute. The first SELECT element is further retrieved + using the elements id. + +Rick Rivello +2002-05-01 + + + + + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLCollection03.xml.notimpl b/test/testcases/tests/level1/html/HTMLCollection03.xml.notimpl deleted file mode 100644 index 36d489e..0000000 --- a/test/testcases/tests/level1/html/HTMLCollection03.xml.notimpl +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - -HTMLCollection03 -NIST - - An individual node may be accessed by either ordinal index, the node's - name or id attributes. (Test id attribute). - - Retrieve the first FORM element and create a HTMLCollection by invoking - the "element" attribute. The first SELECT element is further retrieved - using the elements id. - -Rick Rivello -2002-05-01 - - - - - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLCollection10.xml.kfail b/test/testcases/tests/level1/html/HTMLCollection10.xml.kfail new file mode 100644 index 0000000..78f4c9a --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLCollection10.xml.kfail @@ -0,0 +1,51 @@ + + + + + + + +HTMLCollection10 +NIST + + The namedItem(name) method retrieves a node using a name. It first + searches for a node with a matching id attribute. If it doesn't find + one, it then searches for a Node with a matching name attribute, but only + on those elements that are allowed a name attribute. + + Retrieve the first FORM element and create a HTMLCollection by invoking + the elements attribute. The first SELECT element is further retrieved + using the elements name attribute since the id attribute doesn't match. + +Rick Rivello +2002-05-01 + + + + + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLCollection10.xml.notimpl b/test/testcases/tests/level1/html/HTMLCollection10.xml.notimpl deleted file mode 100644 index 78f4c9a..0000000 --- a/test/testcases/tests/level1/html/HTMLCollection10.xml.notimpl +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - -HTMLCollection10 -NIST - - The namedItem(name) method retrieves a node using a name. It first - searches for a node with a matching id attribute. If it doesn't find - one, it then searches for a Node with a matching name attribute, but only - on those elements that are allowed a name attribute. - - Retrieve the first FORM element and create a HTMLCollection by invoking - the elements attribute. The first SELECT element is further retrieved - using the elements name attribute since the id attribute doesn't match. - -Rick Rivello -2002-05-01 - - - - - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLCollection11.xml.kfail b/test/testcases/tests/level1/html/HTMLCollection11.xml.kfail new file mode 100644 index 0000000..ebf217f --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLCollection11.xml.kfail @@ -0,0 +1,51 @@ + + + + + + + +HTMLCollection11 +NIST + + The namedItem(name) method retrieves a node using a name. It first + searches for a node with a matching id attribute. If it doesn't find + one, it then searches for a Node with a matching name attribute, but only + on those elements that are allowed a name attribute. + + Retrieve the first FORM element and create a HTMLCollection by invoking + the elements attribute. The first SELECT element is further retrieved + using the elements id attribute. + +Rick Rivello +2002-05-01 + + + + + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLCollection11.xml.notimpl b/test/testcases/tests/level1/html/HTMLCollection11.xml.notimpl deleted file mode 100644 index ebf217f..0000000 --- a/test/testcases/tests/level1/html/HTMLCollection11.xml.notimpl +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - -HTMLCollection11 -NIST - - The namedItem(name) method retrieves a node using a name. It first - searches for a node with a matching id attribute. If it doesn't find - one, it then searches for a Node with a matching name attribute, but only - on those elements that are allowed a name attribute. - - Retrieve the first FORM element and create a HTMLCollection by invoking - the elements attribute. The first SELECT element is further retrieved - using the elements id attribute. - -Rick Rivello -2002-05-01 - - - - - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLCollection12.xml b/test/testcases/tests/level1/html/HTMLCollection12.xml new file mode 100644 index 0000000..d7feb3d --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLCollection12.xml @@ -0,0 +1,50 @@ + + + + + + + +HTMLCollection12 +NIST + + The namedItem(name) method retrieves a node using a name. It first + searches for a node with a matching id attribute. If it doesn't find + one, it then searches for a Node with a matching name attribute, but only + on those elements that are allowed a name attribute. If there isn't + a matching node the method returns null. + + Retrieve the first FORM element and create a HTMLCollection by invoking + the elements attribute. The method returns null since there is not a + match of the name or id attribute. + +Rick Rivello +2002-05-01 + + + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLCollection12.xml.notimpl b/test/testcases/tests/level1/html/HTMLCollection12.xml.notimpl deleted file mode 100644 index d7feb3d..0000000 --- a/test/testcases/tests/level1/html/HTMLCollection12.xml.notimpl +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - -HTMLCollection12 -NIST - - The namedItem(name) method retrieves a node using a name. It first - searches for a node with a matching id attribute. If it doesn't find - one, it then searches for a Node with a matching name attribute, but only - on those elements that are allowed a name attribute. If there isn't - a matching node the method returns null. - - Retrieve the first FORM element and create a HTMLCollection by invoking - the elements attribute. The method returns null since there is not a - match of the name or id attribute. - -Rick Rivello -2002-05-01 - - - - - - - - - - - - - - - -- cgit v1.2.3 From 3cca6f95867759cd3610aef0157daa09b506b17d Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 17:30:25 +0100 Subject: DOMTSHandler.pm: Add casts for method calls, enable two more tests --- test/DOMTSHandler.pm | 4 +-- .../tests/level1/html/HTMLFormElement09.xml | 37 ++++++++++++++++++++++ .../tests/level1/html/HTMLFormElement09.xml.kfail | 37 ---------------------- .../tests/level1/html/HTMLFormElement10.xml | 37 ++++++++++++++++++++++ .../tests/level1/html/HTMLFormElement10.xml.kfail | 37 ---------------------- 5 files changed, 76 insertions(+), 76 deletions(-) create mode 100644 test/testcases/tests/level1/html/HTMLFormElement09.xml delete mode 100644 test/testcases/tests/level1/html/HTMLFormElement09.xml.kfail create mode 100644 test/testcases/tests/level1/html/HTMLFormElement10.xml delete mode 100644 test/testcases/tests/level1/html/HTMLFormElement10.xml.kfail diff --git a/test/DOMTSHandler.pm b/test/DOMTSHandler.pm index 6545332..65efff3 100644 --- a/test/DOMTSHandler.pm +++ b/test/DOMTSHandler.pm @@ -665,9 +665,9 @@ sub generate_method { } $method = to_cmethod($ats{'interface'}, $en); - + my $cast = to_attribute_cast($ats{'interface'}); my $ns = $dd->find("parameters/param", $node); - my $params = "$ats{'obj'}"; + my $params = "${cast}$ats{'obj'}"; for ($count = 1; $count <= $ns->size; $count++) { my $n = $ns->get_node($count); my $p = $n->getAttribute("name"); diff --git a/test/testcases/tests/level1/html/HTMLFormElement09.xml b/test/testcases/tests/level1/html/HTMLFormElement09.xml new file mode 100644 index 0000000..4f552d6 --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLFormElement09.xml @@ -0,0 +1,37 @@ + + + + + + + +HTMLFormElement09 +Curt Arnold + +HTMLFormElement.reset restores the forms default values. + +2004-03-18 + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLFormElement09.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement09.xml.kfail deleted file mode 100644 index 4f552d6..0000000 --- a/test/testcases/tests/level1/html/HTMLFormElement09.xml.kfail +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - -HTMLFormElement09 -Curt Arnold - -HTMLFormElement.reset restores the forms default values. - -2004-03-18 - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLFormElement10.xml b/test/testcases/tests/level1/html/HTMLFormElement10.xml new file mode 100644 index 0000000..8d1f3b4 --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLFormElement10.xml @@ -0,0 +1,37 @@ + + + + + + + +HTMLFormElement10 +Curt Arnold + +HTMLFormElement.submit submits the form. + +2004-03-18 + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLFormElement10.xml.kfail b/test/testcases/tests/level1/html/HTMLFormElement10.xml.kfail deleted file mode 100644 index 8d1f3b4..0000000 --- a/test/testcases/tests/level1/html/HTMLFormElement10.xml.kfail +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - -HTMLFormElement10 -Curt Arnold - -HTMLFormElement.submit submits the form. - -2004-03-18 - - - - - - - - - - - -- cgit v1.2.3 From 02096736454faa7c850ab34daffd3ba206c71f52 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 17:38:52 +0100 Subject: HTML{Html,Head}Element: Unvirtualise accessors --- include/dom/html/html_head_element.h | 31 ++++--------------------------- include/dom/html/html_html_element.h | 30 ++++-------------------------- src/html/html_head_element.c | 22 +++------------------- src/html/html_head_element.h | 10 ---------- src/html/html_html_element.c | 22 +++------------------- src/html/html_html_element.h | 10 ---------- 6 files changed, 14 insertions(+), 111 deletions(-) diff --git a/include/dom/html/html_head_element.h b/include/dom/html/html_head_element.h index ce2a817..cb10358 100644 --- a/include/dom/html/html_head_element.h +++ b/include/dom/html/html_head_element.h @@ -12,33 +12,10 @@ typedef struct dom_html_head_element dom_html_head_element; -typedef struct dom_html_head_element_vtable { - struct dom_html_element_vtable base; - - dom_exception (*dom_html_head_element_get_profile)(struct dom_html_head_element *element, - dom_string **profile); - dom_exception (*dom_html_head_element_set_profile)(struct dom_html_head_element *element, - dom_string *profile); -} dom_html_head_element_vtable; - -static inline dom_exception dom_html_head_element_get_profile( - struct dom_html_head_element *element, dom_string **profile) -{ - return ((dom_html_head_element_vtable *) ((dom_node *) element)->vtable)-> - dom_html_head_element_get_profile(element, profile); -} -#define dom_html_head_element_get_profile(e, profile) \ - dom_html_head_element_get_profile((dom_html_head_element *) (e), (profile)) - -static inline dom_exception dom_html_head_element_set_profile( - struct dom_html_head_element *element, dom_string *profile) -{ - return ((dom_html_head_element_vtable *) ((dom_node *) element)->vtable)-> - dom_html_head_element_set_profile(element, profile); -} -#define dom_html_head_element_set_profile(e, profile) \ - dom_html_head_element_set_profile((dom_html_head_element *) (e), (profile)) - +dom_exception dom_html_head_element_get_profile( + struct dom_html_head_element *element, dom_string **profile); +dom_exception dom_html_head_element_set_profile( + struct dom_html_head_element *element, dom_string *profile); #endif diff --git a/include/dom/html/html_html_element.h b/include/dom/html/html_html_element.h index b7b69b2..5593daa 100644 --- a/include/dom/html/html_html_element.h +++ b/include/dom/html/html_html_element.h @@ -12,32 +12,10 @@ typedef struct dom_html_html_element dom_html_html_element; -typedef struct dom_html_html_element_vtable { - struct dom_html_element_vtable base; - - dom_exception (*dom_html_html_element_get_version)(struct dom_html_html_element *element, - dom_string **version); - dom_exception (*dom_html_html_element_set_version)(struct dom_html_html_element *element, - dom_string *version); -} dom_html_html_element_vtable; - -static inline dom_exception dom_html_html_element_get_version( - struct dom_html_html_element *element, dom_string **version) -{ - return ((dom_html_html_element_vtable *) ((dom_node *) element)->vtable)-> - dom_html_html_element_get_version(element, version); -} -#define dom_html_html_element_get_version(e, version) \ - dom_html_html_element_get_version((dom_html_html_element *) (e), (version)) - -static inline dom_exception dom_html_html_element_set_version( - struct dom_html_html_element *element, dom_string *version) -{ - return ((dom_html_html_element_vtable *) ((dom_node *) element)->vtable)-> - dom_html_html_element_set_version(element, version); -} -#define dom_html_html_element_set_version(e, version) \ - dom_html_html_element_set_version((dom_html_html_element *) (e), (version)) +dom_exception dom_html_html_element_get_version( + struct dom_html_html_element *element, dom_string **version); +dom_exception dom_html_html_element_set_version( + struct dom_html_html_element *element, dom_string *version); #endif diff --git a/src/html/html_head_element.c b/src/html/html_head_element.c index 6c5b99b..00d4476 100644 --- a/src/html/html_head_element.c +++ b/src/html/html_head_element.c @@ -20,22 +20,6 @@ static struct dom_element_protected_vtable _protect_vtable = { DOM_HTML_HEAD_ELEMENT_PROTECT_VTABLE }; -static struct dom_html_head_element_vtable _vtable = { - { - { - { - { - DOM_NODE_EVENT_TARGET_VTABLE - }, - DOM_NODE_VTABLE_ELEMENT, - }, - DOM_ELEMENT_VTABLE - }, - DOM_HTML_ELEMENT_VTABLE - }, - DOM_HTML_HEAD_ELEMENT_VTABLE -}; - /** * Create a dom_html_head_element object * @@ -55,7 +39,7 @@ dom_exception _dom_html_head_element_create(struct dom_html_document *doc, /* Set up vtables */ node = (struct dom_node_internal *) *ele; - node->base.vtable = &_vtable; + node->base.vtable = &_dom_html_element_vtable; node->vtable = &_protect_vtable; return _dom_html_head_element_initialise(doc, namespace, prefix, *ele); @@ -132,7 +116,7 @@ dom_exception _dom_html_head_element_copy(dom_node_internal *old, /*-----------------------------------------------------------------------*/ /* API functions */ -dom_exception _dom_html_head_element_get_profile(dom_html_head_element *element, +dom_exception dom_html_head_element_get_profile(dom_html_head_element *element, dom_string **profile) { dom_exception ret; @@ -147,7 +131,7 @@ dom_exception _dom_html_head_element_get_profile(dom_html_head_element *element, return ret; } -dom_exception _dom_html_head_element_set_profile(dom_html_head_element *element, +dom_exception dom_html_head_element_set_profile(dom_html_head_element *element, dom_string *profile) { dom_exception ret; diff --git a/src/html/html_head_element.h b/src/html/html_head_element.h index 65cc3c5..deb2d6a 100644 --- a/src/html/html_head_element.h +++ b/src/html/html_head_element.h @@ -48,15 +48,5 @@ dom_exception _dom_html_head_element_copy(dom_node_internal *old, _dom_virtual_html_head_element_destroy, \ _dom_html_head_element_copy -/* The API functions */ -dom_exception _dom_html_head_element_get_profile(dom_html_head_element *element, - dom_string **profile); -dom_exception _dom_html_head_element_set_profile(dom_html_head_element *element, - dom_string *profile); - -#define DOM_HTML_HEAD_ELEMENT_VTABLE \ - _dom_html_head_element_get_profile, \ - _dom_html_head_element_set_profile - #endif diff --git a/src/html/html_html_element.c b/src/html/html_html_element.c index be40008..ee26019 100644 --- a/src/html/html_html_element.c +++ b/src/html/html_html_element.c @@ -20,22 +20,6 @@ static struct dom_element_protected_vtable _protect_vtable = { DOM_HTML_HTML_ELEMENT_PROTECT_VTABLE }; -static struct dom_html_html_element_vtable _vtable = { - { - { - { - { - DOM_NODE_EVENT_TARGET_VTABLE - }, - DOM_NODE_VTABLE_ELEMENT, - }, - DOM_ELEMENT_VTABLE - }, - DOM_HTML_ELEMENT_VTABLE - }, - DOM_HTML_HTML_ELEMENT_VTABLE -}; - /** * Create a dom_html_html_element object * @@ -55,7 +39,7 @@ dom_exception _dom_html_html_element_create(struct dom_html_document *doc, /* Set up vtables */ node = (struct dom_node_internal *) *ele; - node->base.vtable = &_vtable; + node->base.vtable = &_dom_html_element_vtable; node->vtable = &_protect_vtable; return _dom_html_html_element_initialise(doc, namespace, prefix, *ele); @@ -132,7 +116,7 @@ dom_exception _dom_html_html_element_copy(dom_node_internal *old, /*-----------------------------------------------------------------------*/ /* API functions */ -dom_exception _dom_html_html_element_get_version(dom_html_html_element *element, +dom_exception dom_html_html_element_get_version(dom_html_html_element *element, dom_string **version) { dom_exception ret; @@ -147,7 +131,7 @@ dom_exception _dom_html_html_element_get_version(dom_html_html_element *element, return ret; } -dom_exception _dom_html_html_element_set_version(dom_html_html_element *element, +dom_exception dom_html_html_element_set_version(dom_html_html_element *element, dom_string *version) { dom_exception ret; diff --git a/src/html/html_html_element.h b/src/html/html_html_element.h index 3952beb..61eb626 100644 --- a/src/html/html_html_element.h +++ b/src/html/html_html_element.h @@ -48,15 +48,5 @@ dom_exception _dom_html_html_element_copy(dom_node_internal *old, _dom_virtual_html_html_element_destroy, \ _dom_html_html_element_copy -/* The API functions */ -dom_exception _dom_html_html_element_get_version(dom_html_html_element *element, - dom_string **version); -dom_exception _dom_html_html_element_set_version(dom_html_html_element *element, - dom_string *version); - -#define DOM_HTML_HTML_ELEMENT_VTABLE \ - _dom_html_html_element_get_version, \ - _dom_html_html_element_set_version - #endif -- cgit v1.2.3 From e53520a36fd0a38e2297b8bec3ec8b5626f8fed4 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 17:40:02 +0100 Subject: HTML*Element: Update TODO --- src/html/TODO | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/html/TODO b/src/html/TODO index fa5f8f0..8ff489d 100644 --- a/src/html/TODO +++ b/src/html/TODO @@ -1,6 +1,7 @@ -The following is the status of the HTML Element and derived objects +The following is the status of the HTML Element and derived objects, at least +as far as the test suite is concerned. -HTMLElement html_element UNFINISHED +HTMLElement html_element DONE HTMLHtmlElement html_html_element DONE HTMLHeadElement html_head_element DONE HTMLLinkElement html_link_element MISSING @@ -10,7 +11,7 @@ HTMLBaseElement html_base_element MISSING HTMLIsIndexElement html_isindex_element MISSING HTMLStyleElement html_style_element MISSING HTMLBodyElement html_body_element MISSING -HTMLFormElement html_form_element MISSING +HTMLFormElement html_form_element DONE HTMLSelectElement html_select_element MISSING HTMLOptGroupElement html_optgroup_element MISSING HTMLOptionElement html_option_element MISSING -- cgit v1.2.3 From 9c7a1bb6872159035fd6b4640cf9ec62b8630b54 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 17:59:30 +0100 Subject: HTMLLinkElement: Implement and enable tests --- Makefile | 1 + include/dom/dom.h | 1 + include/dom/html/html_link_element.h | 49 +++++++++++++++++ src/html/html_document.c | 6 +++ src/html/html_document_strings.h | 11 +++- src/html/html_link_element.c | 61 +++++++++++++++++----- src/html/html_link_element.h | 2 + .../tests/level1/html/HTMLLinkElement01.xml | 42 +++++++++++++++ .../tests/level1/html/HTMLLinkElement01.xml.kfail | 42 --------------- .../tests/level1/html/HTMLLinkElement02.xml | 43 +++++++++++++++ .../tests/level1/html/HTMLLinkElement02.xml.kfail | 43 --------------- .../tests/level1/html/HTMLLinkElement03.xml | 42 +++++++++++++++ .../tests/level1/html/HTMLLinkElement03.xml.kfail | 42 --------------- .../tests/level1/html/HTMLLinkElement04.xml | 42 +++++++++++++++ .../tests/level1/html/HTMLLinkElement04.xml.kfail | 42 --------------- .../tests/level1/html/HTMLLinkElement05.xml | 42 +++++++++++++++ .../tests/level1/html/HTMLLinkElement05.xml.kfail | 42 --------------- .../tests/level1/html/HTMLLinkElement06.xml | 42 +++++++++++++++ .../tests/level1/html/HTMLLinkElement06.xml.kfail | 42 --------------- .../tests/level1/html/HTMLLinkElement07.xml | 42 +++++++++++++++ .../tests/level1/html/HTMLLinkElement07.xml.kfail | 42 --------------- .../tests/level1/html/HTMLLinkElement08.xml | 42 +++++++++++++++ .../tests/level1/html/HTMLLinkElement08.xml.kfail | 42 --------------- .../tests/level1/html/HTMLLinkElement09.xml | 42 +++++++++++++++ .../tests/level1/html/HTMLLinkElement09.xml.kfail | 42 --------------- 25 files changed, 497 insertions(+), 392 deletions(-) create mode 100644 test/testcases/tests/level1/html/HTMLLinkElement01.xml delete mode 100644 test/testcases/tests/level1/html/HTMLLinkElement01.xml.kfail create mode 100644 test/testcases/tests/level1/html/HTMLLinkElement02.xml delete mode 100644 test/testcases/tests/level1/html/HTMLLinkElement02.xml.kfail create mode 100644 test/testcases/tests/level1/html/HTMLLinkElement03.xml delete mode 100644 test/testcases/tests/level1/html/HTMLLinkElement03.xml.kfail create mode 100644 test/testcases/tests/level1/html/HTMLLinkElement04.xml delete mode 100644 test/testcases/tests/level1/html/HTMLLinkElement04.xml.kfail create mode 100644 test/testcases/tests/level1/html/HTMLLinkElement05.xml delete mode 100644 test/testcases/tests/level1/html/HTMLLinkElement05.xml.kfail create mode 100644 test/testcases/tests/level1/html/HTMLLinkElement06.xml delete mode 100644 test/testcases/tests/level1/html/HTMLLinkElement06.xml.kfail create mode 100644 test/testcases/tests/level1/html/HTMLLinkElement07.xml delete mode 100644 test/testcases/tests/level1/html/HTMLLinkElement07.xml.kfail create mode 100644 test/testcases/tests/level1/html/HTMLLinkElement08.xml delete mode 100644 test/testcases/tests/level1/html/HTMLLinkElement08.xml.kfail create mode 100644 test/testcases/tests/level1/html/HTMLLinkElement09.xml delete mode 100644 test/testcases/tests/level1/html/HTMLLinkElement09.xml.kfail diff --git a/Makefile b/Makefile index 0c83160..ff328e6 100644 --- a/Makefile +++ b/Makefile @@ -84,6 +84,7 @@ INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_collection.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_html_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_head_element.h +INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_link_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_title_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_form_element.h diff --git a/include/dom/dom.h b/include/dom/dom.h index 80b5bd0..1c0e908 100644 --- a/include/dom/dom.h +++ b/include/dom/dom.h @@ -43,6 +43,7 @@ #include #include #include +#include #include #include diff --git a/include/dom/html/html_link_element.h b/include/dom/html/html_link_element.h index c96d020..f0b1f3c 100644 --- a/include/dom/html/html_link_element.h +++ b/include/dom/html/html_link_element.h @@ -10,6 +10,7 @@ #include #include +#include typedef struct dom_html_link_element dom_html_link_element; @@ -19,5 +20,53 @@ dom_exception dom_html_link_element_get_disabled(dom_html_link_element *ele, dom_exception dom_html_link_element_set_disabled(dom_html_link_element *ele, bool disabled); +dom_exception dom_html_link_element_get_charset(dom_html_link_element *ele, + dom_string **charset); + +dom_exception dom_html_link_element_set_charset(dom_html_link_element *ele, + dom_string *charset); + +dom_exception dom_html_link_element_get_href(dom_html_link_element *ele, + dom_string **href); + +dom_exception dom_html_link_element_set_href(dom_html_link_element *ele, + dom_string *href); + +dom_exception dom_html_link_element_get_hreflang(dom_html_link_element *ele, + dom_string **hreflang); + +dom_exception dom_html_link_element_set_hreflang(dom_html_link_element *ele, + dom_string *hreflang); + +dom_exception dom_html_link_element_get_media(dom_html_link_element *ele, + dom_string **media); + +dom_exception dom_html_link_element_set_media(dom_html_link_element *ele, + dom_string *media); + +dom_exception dom_html_link_element_get_rel(dom_html_link_element *ele, + dom_string **rel); + +dom_exception dom_html_link_element_set_rel(dom_html_link_element *ele, + dom_string *rel); + +dom_exception dom_html_link_element_get_rev(dom_html_link_element *ele, + dom_string **rev); + +dom_exception dom_html_link_element_set_rev(dom_html_link_element *ele, + dom_string *rev); + +dom_exception dom_html_link_element_get_target(dom_html_link_element *ele, + dom_string **target); + +dom_exception dom_html_link_element_set_target(dom_html_link_element *ele, + dom_string *target); + +dom_exception dom_html_link_element_get_type(dom_html_link_element *ele, + dom_string **type); + +dom_exception dom_html_link_element_set_type(dom_html_link_element *ele, + dom_string *type); + #endif diff --git a/src/html/html_document.c b/src/html/html_document.c index 69b40eb..ae36454 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -13,6 +13,7 @@ #include "html/html_collection.h" #include "html/html_html_element.h" #include "html/html_head_element.h" +#include "html/html_link_element.h" #include "html/html_title_element.h" #include "html/html_form_element.h" @@ -182,6 +183,11 @@ _dom_html_document_create_element_internal(dom_html_document *html, (dom_html_form_element **) result); } + if (dom_string_caseless_isequal(tag_name, html->memoised[hds_LINK])) { + return _dom_html_link_element_create(html, namespace, prefix, + (dom_html_link_element **) result); + } + return _dom_html_element_create(html, tag_name, namespace, prefix, result); } diff --git a/src/html/html_document_strings.h b/src/html/html_document_strings.h index c179e0b..b092c9e 100644 --- a/src/html/html_document_strings.h +++ b/src/html/html_document_strings.h @@ -36,12 +36,21 @@ HTML_DOCUMENT_STRINGS_ACTION1(class) HTML_DOCUMENT_STRINGS_ACTION1(version) /* Useful attributes used by HTMLHeadElement */ HTML_DOCUMENT_STRINGS_ACTION1(profile) +/* Useful attributes used by HTMLLinkElement */ +HTML_DOCUMENT_STRINGS_ACTION1(charset) +HTML_DOCUMENT_STRINGS_ACTION1(href) +HTML_DOCUMENT_STRINGS_ACTION1(hreflang) +HTML_DOCUMENT_STRINGS_ACTION1(media) +HTML_DOCUMENT_STRINGS_ACTION1(rel) +HTML_DOCUMENT_STRINGS_ACTION1(rev) +HTML_DOCUMENT_STRINGS_ACTION1(target) +HTML_DOCUMENT_STRINGS_ACTION1(type) /* Useful attributes used by HTMLFormElement */ HTML_DOCUMENT_STRINGS_ACTION(accept_charset,accept-charset) HTML_DOCUMENT_STRINGS_ACTION1(action) HTML_DOCUMENT_STRINGS_ACTION1(enctype) HTML_DOCUMENT_STRINGS_ACTION1(method) -HTML_DOCUMENT_STRINGS_ACTION1(target) +/* HTML_DOCUMENT_STRINGS_ACTION1(target) */ /* Names for elements which get specialised. */ HTML_DOCUMENT_STRINGS_ACTION1(HTML) HTML_DOCUMENT_STRINGS_ACTION1(HEAD) diff --git a/src/html/html_link_element.c b/src/html/html_link_element.c index 92ca4f5..cf3d0e9 100644 --- a/src/html/html_link_element.c +++ b/src/html/html_link_element.c @@ -8,6 +8,7 @@ #include #include +#include "html/html_document.h" #include "html/html_link_element.h" #include "core/node.h" @@ -29,6 +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_link_element_create(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_link_element **ele) { struct dom_node_internal *node; @@ -42,7 +44,7 @@ dom_exception _dom_html_link_element_create(struct dom_html_document *doc, node->base.vtable = &_dom_element_vtable; node->vtable = &_protect_vtable; - return _dom_html_link_element_initialise(doc, *ele); + return _dom_html_link_element_initialise(doc, namespace, prefix, *ele); } /** @@ -53,19 +55,12 @@ dom_exception _dom_html_link_element_create(struct dom_html_document *doc, * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ dom_exception _dom_html_link_element_initialise(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_link_element *ele) { - dom_string *name = NULL; - dom_exception err; - - err = dom_string_create((const uint8_t *) "HEAD", SLEN("HEAD"), &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->memoised[hds_LINK], + namespace, prefix); } /** @@ -151,3 +146,45 @@ dom_exception _dom_html_link_element_copy(dom_node_internal *old, return _dom_html_element_copy(old, copy); } +/*-----------------------------------------------------------------------*/ +/* API functions */ + +#define SIMPLE_GET_SET(fattr,attr) \ +dom_exception dom_html_link_element_get_##fattr(dom_html_link_element *element, \ + dom_string **fattr) \ +{ \ + dom_exception ret; \ + dom_string *_memo_##attr; \ + \ + _memo_##attr = \ + ((struct dom_html_document *) \ + ((struct dom_node_internal *)element)->owner)->memoised[hds_##attr]; \ + \ + ret = dom_element_get_attribute(element, _memo_##attr, fattr); \ + \ + return ret; \ +} \ + \ +dom_exception dom_html_link_element_set_##fattr(dom_html_link_element *element, \ + dom_string *fattr) \ +{ \ + dom_exception ret; \ + dom_string *_memo_##attr; \ + \ + _memo_##attr = \ + ((struct dom_html_document *) \ + ((struct dom_node_internal *)element)->owner)->memoised[hds_##attr]; \ + \ + ret = dom_element_set_attribute(element, _memo_##attr, fattr); \ + \ + return ret; \ +} + +SIMPLE_GET_SET(charset,charset) +SIMPLE_GET_SET(href,href) +SIMPLE_GET_SET(hreflang,hreflang) +SIMPLE_GET_SET(media,media) +SIMPLE_GET_SET(rel,rel) +SIMPLE_GET_SET(rev,rev) +SIMPLE_GET_SET(target,target) +SIMPLE_GET_SET(type,type) diff --git a/src/html/html_link_element.h b/src/html/html_link_element.h index b281cfb..960dcdc 100644 --- a/src/html/html_link_element.h +++ b/src/html/html_link_element.h @@ -19,10 +19,12 @@ struct dom_html_link_element { /* Create a dom_html_link_element object */ dom_exception _dom_html_link_element_create(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_link_element **ele); /* Initialise a dom_html_link_element object */ dom_exception _dom_html_link_element_initialise(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_link_element *ele); /* Finalise a dom_html_link_element object */ diff --git a/test/testcases/tests/level1/html/HTMLLinkElement01.xml b/test/testcases/tests/level1/html/HTMLLinkElement01.xml new file mode 100644 index 0000000..c9e2d16 --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLLinkElement01.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLLinkElement01 +NIST + + The disabled attribute enables/disables the link. + + Retrieve the disabled attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLLinkElement01.xml.kfail b/test/testcases/tests/level1/html/HTMLLinkElement01.xml.kfail deleted file mode 100644 index c9e2d16..0000000 --- a/test/testcases/tests/level1/html/HTMLLinkElement01.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLLinkElement01 -NIST - - The disabled attribute enables/disables the link. - - Retrieve the disabled attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLLinkElement02.xml b/test/testcases/tests/level1/html/HTMLLinkElement02.xml new file mode 100644 index 0000000..ab0105a --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLLinkElement02.xml @@ -0,0 +1,43 @@ + + + + + + + +HTMLLinkElement02 +NIST + + The charset attribute indicates the character encoding of the linked + resource. + + Retrieve the charset attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLLinkElement02.xml.kfail b/test/testcases/tests/level1/html/HTMLLinkElement02.xml.kfail deleted file mode 100644 index ab0105a..0000000 --- a/test/testcases/tests/level1/html/HTMLLinkElement02.xml.kfail +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - -HTMLLinkElement02 -NIST - - The charset attribute indicates the character encoding of the linked - resource. - - Retrieve the charset attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLLinkElement03.xml b/test/testcases/tests/level1/html/HTMLLinkElement03.xml new file mode 100644 index 0000000..fff36db --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLLinkElement03.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLLinkElement03 +NIST + + The href attribute specifies the URI of the linked resource. + + Retrieve the href attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLLinkElement03.xml.kfail b/test/testcases/tests/level1/html/HTMLLinkElement03.xml.kfail deleted file mode 100644 index fff36db..0000000 --- a/test/testcases/tests/level1/html/HTMLLinkElement03.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLLinkElement03 -NIST - - The href attribute specifies the URI of the linked resource. - - Retrieve the href attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLLinkElement04.xml b/test/testcases/tests/level1/html/HTMLLinkElement04.xml new file mode 100644 index 0000000..924d945 --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLLinkElement04.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLLinkElement04 +NIST + + The hreflang attribute specifies the language code of the linked resource. + + Retrieve the hreflang attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLLinkElement04.xml.kfail b/test/testcases/tests/level1/html/HTMLLinkElement04.xml.kfail deleted file mode 100644 index 924d945..0000000 --- a/test/testcases/tests/level1/html/HTMLLinkElement04.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLLinkElement04 -NIST - - The hreflang attribute specifies the language code of the linked resource. - - Retrieve the hreflang attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLLinkElement05.xml b/test/testcases/tests/level1/html/HTMLLinkElement05.xml new file mode 100644 index 0000000..cec4f35 --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLLinkElement05.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLLinkElement05 +NIST + + The media attribute specifies the targeted media. + + Retrieve the media attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLLinkElement05.xml.kfail b/test/testcases/tests/level1/html/HTMLLinkElement05.xml.kfail deleted file mode 100644 index cec4f35..0000000 --- a/test/testcases/tests/level1/html/HTMLLinkElement05.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLLinkElement05 -NIST - - The media attribute specifies the targeted media. - - Retrieve the media attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLLinkElement06.xml b/test/testcases/tests/level1/html/HTMLLinkElement06.xml new file mode 100644 index 0000000..400e8ed --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLLinkElement06.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLLinkElement06 +NIST + + The rel attribute specifies the forward link type. + + Retrieve the rel attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLLinkElement06.xml.kfail b/test/testcases/tests/level1/html/HTMLLinkElement06.xml.kfail deleted file mode 100644 index 400e8ed..0000000 --- a/test/testcases/tests/level1/html/HTMLLinkElement06.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLLinkElement06 -NIST - - The rel attribute specifies the forward link type. - - Retrieve the rel attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLLinkElement07.xml b/test/testcases/tests/level1/html/HTMLLinkElement07.xml new file mode 100644 index 0000000..71bbd8d --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLLinkElement07.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLLinkElement07 +NIST + + The rev attribute specifies the reverse link type. + + Retrieve the rev attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLLinkElement07.xml.kfail b/test/testcases/tests/level1/html/HTMLLinkElement07.xml.kfail deleted file mode 100644 index 71bbd8d..0000000 --- a/test/testcases/tests/level1/html/HTMLLinkElement07.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLLinkElement07 -NIST - - The rev attribute specifies the reverse link type. - - Retrieve the rev attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLLinkElement08.xml b/test/testcases/tests/level1/html/HTMLLinkElement08.xml new file mode 100644 index 0000000..657237d --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLLinkElement08.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLLinkElement08 +NIST + + The type attribute specifies the advisory content type. + + Retrieve the type attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLLinkElement08.xml.kfail b/test/testcases/tests/level1/html/HTMLLinkElement08.xml.kfail deleted file mode 100644 index 657237d..0000000 --- a/test/testcases/tests/level1/html/HTMLLinkElement08.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLLinkElement08 -NIST - - The type attribute specifies the advisory content type. - - Retrieve the type attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLLinkElement09.xml b/test/testcases/tests/level1/html/HTMLLinkElement09.xml new file mode 100644 index 0000000..6fb55a8 --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLLinkElement09.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLLinkElement09 +NIST + + The target attribute specifies the frame to render the resource in. + + Retrieve the target attribute and examine it's value. + +Rick Rivello +2002-05-09 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLLinkElement09.xml.kfail b/test/testcases/tests/level1/html/HTMLLinkElement09.xml.kfail deleted file mode 100644 index 6fb55a8..0000000 --- a/test/testcases/tests/level1/html/HTMLLinkElement09.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLLinkElement09 -NIST - - The target attribute specifies the frame to render the resource in. - - Retrieve the target attribute and examine it's value. - -Rick Rivello -2002-05-09 - - - - - - - - - - - - - -- cgit v1.2.3 From 890da96b1b601f622a12a7832c3cb654b146e693 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 18:12:12 +0100 Subject: HTMLMetaElement: Implement, install, enable tests --- Makefile | 1 + include/dom/dom.h | 1 + include/dom/html/html_meta_element.h | 26 ++++++++++ src/html/html_document.c | 1 + src/html/html_document_strings.h | 5 ++ src/html/html_meta_element.c | 57 +++++++++++++++++----- src/html/html_meta_element.h | 2 + .../tests/level1/html/HTMLMetaElement01.xml | 42 ++++++++++++++++ .../tests/level1/html/HTMLMetaElement01.xml.kfail | 42 ---------------- .../tests/level1/html/HTMLMetaElement02.xml | 42 ++++++++++++++++ .../tests/level1/html/HTMLMetaElement02.xml.kfail | 42 ---------------- .../tests/level1/html/HTMLMetaElement03.xml | 42 ++++++++++++++++ .../tests/level1/html/HTMLMetaElement03.xml.kfail | 42 ---------------- .../tests/level1/html/HTMLMetaElement04.xml | 42 ++++++++++++++++ .../tests/level1/html/HTMLMetaElement04.xml.kfail | 42 ---------------- 15 files changed, 249 insertions(+), 180 deletions(-) create mode 100644 test/testcases/tests/level1/html/HTMLMetaElement01.xml delete mode 100644 test/testcases/tests/level1/html/HTMLMetaElement01.xml.kfail create mode 100644 test/testcases/tests/level1/html/HTMLMetaElement02.xml delete mode 100644 test/testcases/tests/level1/html/HTMLMetaElement02.xml.kfail create mode 100644 test/testcases/tests/level1/html/HTMLMetaElement03.xml delete mode 100644 test/testcases/tests/level1/html/HTMLMetaElement03.xml.kfail create mode 100644 test/testcases/tests/level1/html/HTMLMetaElement04.xml delete mode 100644 test/testcases/tests/level1/html/HTMLMetaElement04.xml.kfail diff --git a/Makefile b/Makefile index ff328e6..a66bee0 100644 --- a/Makefile +++ b/Makefile @@ -86,6 +86,7 @@ INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_html_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_head_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_link_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_title_element.h +INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_meta_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) $(I):$(Is)/html_form_element.h INSTALL_ITEMS := $(INSTALL_ITEMS) /lib/pkgconfig:lib$(COMPONENT).pc.in diff --git a/include/dom/dom.h b/include/dom/dom.h index 1c0e908..05ce3e6 100644 --- a/include/dom/dom.h +++ b/include/dom/dom.h @@ -45,6 +45,7 @@ #include #include #include +#include #include /* DOM Events header */ diff --git a/include/dom/html/html_meta_element.h b/include/dom/html/html_meta_element.h index 8ceb459..b9898f1 100644 --- a/include/dom/html/html_meta_element.h +++ b/include/dom/html/html_meta_element.h @@ -8,7 +8,33 @@ #ifndef dom_html_meta_element_h_ #define dom_html_meta_element_h_ +#include + typedef struct dom_html_meta_element dom_html_meta_element; +dom_exception dom_html_meta_element_get_content(dom_html_meta_element *ele, + dom_string **content); + +dom_exception dom_html_meta_element_set_content(dom_html_meta_element *ele, + dom_string *content); + +dom_exception dom_html_meta_element_get_http_equiv(dom_html_meta_element *ele, + dom_string **http_equiv); + +dom_exception dom_html_meta_element_set_http_equiv(dom_html_meta_element *ele, + dom_string *http_equiv); + +dom_exception dom_html_meta_element_get_name(dom_html_meta_element *ele, + dom_string **name); + +dom_exception dom_html_meta_element_set_name(dom_html_meta_element *ele, + dom_string *name); + +dom_exception dom_html_meta_element_get_scheme(dom_html_meta_element *ele, + dom_string **scheme); + +dom_exception dom_html_meta_element_set_scheme(dom_html_meta_element *ele, + dom_string *scheme); + #endif diff --git a/src/html/html_document.c b/src/html/html_document.c index ae36454..b266844 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -15,6 +15,7 @@ #include "html/html_head_element.h" #include "html/html_link_element.h" #include "html/html_title_element.h" +#include "html/html_meta_element.h" #include "html/html_form_element.h" #include "core/string.h" diff --git a/src/html/html_document_strings.h b/src/html/html_document_strings.h index b092c9e..632b686 100644 --- a/src/html/html_document_strings.h +++ b/src/html/html_document_strings.h @@ -45,6 +45,11 @@ HTML_DOCUMENT_STRINGS_ACTION1(rel) HTML_DOCUMENT_STRINGS_ACTION1(rev) HTML_DOCUMENT_STRINGS_ACTION1(target) HTML_DOCUMENT_STRINGS_ACTION1(type) +/* Useful attributes used by HTMLMetaElement */ +HTML_DOCUMENT_STRINGS_ACTION1(content) +HTML_DOCUMENT_STRINGS_ACTION(http_equiv,http-equiv) +HTML_DOCUMENT_STRINGS_ACTION1(name) +HTML_DOCUMENT_STRINGS_ACTION1(scheme) /* Useful attributes used by HTMLFormElement */ HTML_DOCUMENT_STRINGS_ACTION(accept_charset,accept-charset) HTML_DOCUMENT_STRINGS_ACTION1(action) diff --git a/src/html/html_meta_element.c b/src/html/html_meta_element.c index f1b6c3f..9cc8067 100644 --- a/src/html/html_meta_element.c +++ b/src/html/html_meta_element.c @@ -7,6 +7,7 @@ #include +#include "html/html_document.h" #include "html/html_meta_element.h" #include "core/node.h" @@ -27,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_meta_element_create(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_meta_element **ele) { struct dom_node_internal *node; @@ -40,7 +42,7 @@ dom_exception _dom_html_meta_element_create(struct dom_html_document *doc, node->base.vtable = &_dom_element_vtable; node->vtable = &_protect_vtable; - return _dom_html_meta_element_initialise(doc, *ele); + return _dom_html_meta_element_initialise(doc, namespace, prefix, *ele); } /** @@ -51,19 +53,12 @@ dom_exception _dom_html_meta_element_create(struct dom_html_document *doc, * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ dom_exception _dom_html_meta_element_initialise(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_meta_element *ele) { - dom_string *name = NULL; - dom_exception err; - - err = dom_string_create((const uint8_t *) "META", SLEN("META"), &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->memoised[hds_META], + namespace, prefix); } /** @@ -118,3 +113,41 @@ dom_exception _dom_html_meta_element_copy(dom_node_internal *old, return _dom_html_element_copy(old, copy); } +/*-----------------------------------------------------------------------*/ +/* API functions */ + +#define SIMPLE_GET_SET(fattr,attr) \ +dom_exception dom_html_meta_element_get_##fattr(dom_html_meta_element *element, \ + dom_string **fattr) \ +{ \ + dom_exception ret; \ + dom_string *_memo_##attr; \ + \ + _memo_##attr = \ + ((struct dom_html_document *) \ + ((struct dom_node_internal *)element)->owner)->memoised[hds_##attr]; \ + \ + ret = dom_element_get_attribute(element, _memo_##attr, fattr); \ + \ + return ret; \ +} \ + \ +dom_exception dom_html_meta_element_set_##fattr(dom_html_meta_element *element, \ + dom_string *fattr) \ +{ \ + dom_exception ret; \ + dom_string *_memo_##attr; \ + \ + _memo_##attr = \ + ((struct dom_html_document *) \ + ((struct dom_node_internal *)element)->owner)->memoised[hds_##attr]; \ + \ + ret = dom_element_set_attribute(element, _memo_##attr, fattr); \ + \ + return ret; \ +} + +SIMPLE_GET_SET(content,content) +SIMPLE_GET_SET(http_equiv,http_equiv) +SIMPLE_GET_SET(name,name) +SIMPLE_GET_SET(scheme,scheme) diff --git a/src/html/html_meta_element.h b/src/html/html_meta_element.h index d302d24..d4a1076 100644 --- a/src/html/html_meta_element.h +++ b/src/html/html_meta_element.h @@ -19,10 +19,12 @@ struct dom_html_meta_element { /* Create a dom_html_meta_element object */ dom_exception _dom_html_meta_element_create(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_meta_element **ele); /* Initialise a dom_html_meta_element object */ dom_exception _dom_html_meta_element_initialise(struct dom_html_document *doc, + dom_string *namespace, dom_string *prefix, struct dom_html_meta_element *ele); /* Finalise a dom_html_meta_element object */ diff --git a/test/testcases/tests/level1/html/HTMLMetaElement01.xml b/test/testcases/tests/level1/html/HTMLMetaElement01.xml new file mode 100644 index 0000000..5ee3bcc --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLMetaElement01.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLMetaElement01 +NIST + + The content attribute specifies associated information. + + Retrieve the content attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLMetaElement01.xml.kfail b/test/testcases/tests/level1/html/HTMLMetaElement01.xml.kfail deleted file mode 100644 index 5ee3bcc..0000000 --- a/test/testcases/tests/level1/html/HTMLMetaElement01.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLMetaElement01 -NIST - - The content attribute specifies associated information. - - Retrieve the content attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLMetaElement02.xml b/test/testcases/tests/level1/html/HTMLMetaElement02.xml new file mode 100644 index 0000000..11e7a09 --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLMetaElement02.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLMetaElement02 +NIST + + The httpEquiv attribute specifies an HTTP respnse header name. + + Retrieve the httpEquiv attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLMetaElement02.xml.kfail b/test/testcases/tests/level1/html/HTMLMetaElement02.xml.kfail deleted file mode 100644 index 11e7a09..0000000 --- a/test/testcases/tests/level1/html/HTMLMetaElement02.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLMetaElement02 -NIST - - The httpEquiv attribute specifies an HTTP respnse header name. - - Retrieve the httpEquiv attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLMetaElement03.xml b/test/testcases/tests/level1/html/HTMLMetaElement03.xml new file mode 100644 index 0000000..ab3afc7 --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLMetaElement03.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLMetaElement03 +NIST + + The name attribute specifies the meta information name. + + Retrieve the name attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLMetaElement03.xml.kfail b/test/testcases/tests/level1/html/HTMLMetaElement03.xml.kfail deleted file mode 100644 index ab3afc7..0000000 --- a/test/testcases/tests/level1/html/HTMLMetaElement03.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLMetaElement03 -NIST - - The name attribute specifies the meta information name. - - Retrieve the name attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - diff --git a/test/testcases/tests/level1/html/HTMLMetaElement04.xml b/test/testcases/tests/level1/html/HTMLMetaElement04.xml new file mode 100644 index 0000000..14ce0eb --- /dev/null +++ b/test/testcases/tests/level1/html/HTMLMetaElement04.xml @@ -0,0 +1,42 @@ + + + + + + + +HTMLMetaElement04 +NIST + + The scheme attribute specifies a select form of content. + + Retrieve the scheme attribute and examine its value. + +Mary Brady +2002-02-22 + + + + + + + + + + + + + diff --git a/test/testcases/tests/level1/html/HTMLMetaElement04.xml.kfail b/test/testcases/tests/level1/html/HTMLMetaElement04.xml.kfail deleted file mode 100644 index 14ce0eb..0000000 --- a/test/testcases/tests/level1/html/HTMLMetaElement04.xml.kfail +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - -HTMLMetaElement04 -NIST - - The scheme attribute specifies a select form of content. - - Retrieve the scheme attribute and examine its value. - -Mary Brady -2002-02-22 - - - - - - - - - - - - - -- cgit v1.2.3 From e03978c667b83627073498ca34c61cf267934c41 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 7 Jul 2012 18:18:48 +0100 Subject: HTML{Form,Link,Meta}Element: Tidy up SIMPLE_GET_SET --- src/html/html_form_element.c | 60 ++++++++++++++++++++------------------ src/html/html_link_element.c | 68 +++++++++++++++++++++++--------------------- src/html/html_meta_element.c | 58 +++++++++++++++++++------------------ 3 files changed, 99 insertions(+), 87 deletions(-) diff --git a/src/html/html_form_element.c b/src/html/html_form_element.c index 0688cd6..d0a453d 100644 --- a/src/html/html_form_element.c +++ b/src/html/html_form_element.c @@ -184,42 +184,46 @@ dom_exception dom_html_form_element_get_length(dom_html_form_element *ele, return dom_html_collection_get_length(ele->col, len); } -#define SIMPLE_GET_SET(fattr,attr) \ -dom_exception dom_html_form_element_get_##fattr(dom_html_form_element *element, \ - dom_string **fattr) \ -{ \ - dom_exception ret; \ - dom_string *_memo_##attr; \ +#define SIMPLE_GET_SET(attr) \ + dom_exception dom_html_form_element_get_##attr( \ + dom_html_form_element *element, \ + dom_string **attr) \ + { \ + dom_exception ret; \ + dom_string *_memo_##attr; \ \ - _memo_##attr = \ - ((struct dom_html_document *) \ - ((struct dom_node_internal *)element)->owner)->memoised[hds_##attr]; \ + _memo_##attr = \ + ((struct dom_html_document *) \ + ((struct dom_node_internal *)element)->owner)->\ + memoised[hds_##attr]; \ \ - ret = dom_element_get_attribute(element, _memo_##attr, fattr); \ + ret = dom_element_get_attribute(element, _memo_##attr, attr); \ \ - return ret; \ -} \ + return ret; \ + } \ \ -dom_exception dom_html_form_element_set_##fattr(dom_html_form_element *element, \ - dom_string *fattr) \ -{ \ - dom_exception ret; \ - dom_string *_memo_##attr; \ + dom_exception dom_html_form_element_set_##attr( \ + dom_html_form_element *element, \ + dom_string *attr) \ + { \ + dom_exception ret; \ + dom_string *_memo_##attr; \ \ - _memo_##attr = \ - ((struct dom_html_document *) \ - ((struct dom_node_internal *)element)->owner)->memoised[hds_##attr]; \ + _memo_##attr = \ + ((struct dom_html_document *) \ + ((struct dom_node_internal *)element)->owner)->\ + memoised[hds_##attr]; \ \ - ret = dom_element_set_attribute(element, _memo_##attr, fattr); \ + ret = dom_element_set_attribute(element, _memo_##attr, attr); \ \ - return ret; \ -} + return ret; \ + } -SIMPLE_GET_SET(accept_charset,accept_charset) -SIMPLE_GET_SET(action,action) -SIMPLE_GET_SET(enctype,enctype) -SIMPLE_GET_SET(method,method) -SIMPLE_GET_SET(target,target) +SIMPLE_GET_SET(accept_charset) +SIMPLE_GET_SET(action) +SIMPLE_GET_SET(enctype) +SIMPLE_GET_SET(method) +SIMPLE_GET_SET(target) /** diff --git a/src/html/html_link_element.c b/src/html/html_link_element.c index cf3d0e9..8e9a302 100644 --- a/src/html/html_link_element.c +++ b/src/html/html_link_element.c @@ -149,42 +149,46 @@ dom_exception _dom_html_link_element_copy(dom_node_internal *old, /*-----------------------------------------------------------------------*/ /* API functions */ -#define SIMPLE_GET_SET(fattr,attr) \ -dom_exception dom_html_link_element_get_##fattr(dom_html_link_element *element, \ - dom_string **fattr) \ -{ \ - dom_exception ret; \ - dom_string *_memo_##attr; \ +#define SIMPLE_GET_SET(attr) \ + dom_exception dom_html_link_element_get_##attr( \ + dom_html_link_element *element, \ + dom_string **attr) \ + { \ + dom_exception ret; \ + dom_string *_memo_##attr; \ \ - _memo_##attr = \ - ((struct dom_html_document *) \ - ((struct dom_node_internal *)element)->owner)->memoised[hds_##attr]; \ + _memo_##attr = \ + ((struct dom_html_document *) \ + ((struct dom_node_internal *)element)->owner)->\ + memoised[hds_##attr]; \ \ - ret = dom_element_get_attribute(element, _memo_##attr, fattr); \ + ret = dom_element_get_attribute(element, _memo_##attr, attr); \ \ - return ret; \ -} \ + return ret; \ + } \ \ -dom_exception dom_html_link_element_set_##fattr(dom_html_link_element *element, \ - dom_string *fattr) \ -{ \ - dom_exception ret; \ - dom_string *_memo_##attr; \ + dom_exception dom_html_link_element_set_##attr( \ + dom_html_link_element *element, \ + dom_string *attr) \ + { \ + dom_exception ret; \ + dom_string *_memo_##attr; \ \ - _memo_##attr = \ - ((struct dom_html_document *) \ - ((struct dom_node_internal *)element)->owner)->memoised[hds_##attr]; \ + _memo_##attr = \ + ((struct dom_html_document *) \ + ((struct dom_node_internal *)element)->owner)->\ + memoised[hds_##attr]; \ \ - ret = dom_element_set_attribute(element, _memo_##attr, fattr); \ + ret = dom_element_set_attribute(element, _memo_##attr, attr); \ \ - return ret; \ -} - -SIMPLE_GET_SET(charset,charset) -SIMPLE_GET_SET(href,href) -SIMPLE_GET_SET(hreflang,hreflang) -SIMPLE_GET_SET(media,media) -SIMPLE_GET_SET(rel,rel) -SIMPLE_GET_SET(rev,rev) -SIMPLE_GET_SET(target,target) -SIMPLE_GET_SET(type,type) + return ret; \ + } + +SIMPLE_GET_SET(charset) +SIMPLE_GET_SET(href) +SIMPLE_GET_SET(hreflang) +SIMPLE_GET_SET(media) +SIMPLE_GET_SET(rel) +SIMPLE_GET_SET(rev) +SIMPLE_GET_SET(target) +SIMPLE_GET_SET(type) diff --git a/src/html/html_meta_element.c b/src/html/html_meta_element.c index 9cc8067..7a254e6 100644 --- a/src/html/html_meta_element.c +++ b/src/html/html_meta_element.c @@ -116,38 +116,42 @@ dom_exception _dom_html_meta_element_copy(dom_node_internal *old, /*-----------------------------------------------------------------------*/ /* API functions */ -#define SIMPLE_GET_SET(fattr,attr) \ -dom_exception dom_html_meta_element_get_##fattr(dom_html_meta_element *element, \ - dom_string **fattr) \ -{ \ - dom_exception ret; \ - dom_string *_memo_##attr; \ +#define SIMPLE_GET_SET(attr) \ + dom_exception dom_html_meta_element_get_##attr( \ + dom_html_meta_element *element, \ + dom_string **attr) \ + { \ + dom_exception ret; \ + dom_string *_memo_##attr; \ \ - _memo_##attr = \ - ((struct dom_html_document *) \ - ((struct dom_node_internal *)element)->owner)->memoised[hds_##attr]; \ + _memo_##attr = \ + ((struct dom_html_document *) \ + ((struct dom_node_internal *)element)->owner)->\ + memoised[hds_##attr]; \ \ - ret = dom_element_get_attribute(element, _memo_##attr, fattr); \ + ret = dom_element_get_attribute(element, _memo_##attr, attr); \ \ - return ret; \ -} \ + return ret; \ + } \ \ -dom_exception dom_html_meta_element_set_##fattr(dom_html_meta_element *element, \ - dom_string *fattr) \ -{ \ - dom_exception ret; \ - dom_string *_memo_##attr; \ + dom_exception dom_html_meta_element_set_##attr( \ + dom_html_meta_element *element, \ + dom_string *attr) \ + { \ + dom_exception ret; \ + dom_string *_memo_##attr; \ \ - _memo_##attr = \ - ((struct dom_html_document *) \ - ((struct dom_node_internal *)element)->owner)->memoised[hds_##attr]; \ + _memo_##attr = \ + ((struct dom_html_document *) \ + ((struct dom_node_internal *)element)->owner)->\ + memoised[hds_##attr]; \ \ - ret = dom_element_set_attribute(element, _memo_##attr, fattr); \ + ret = dom_element_set_attribute(element, _memo_##attr, attr); \ \ - return ret; \ -} + return ret; \ + } -SIMPLE_GET_SET(content,content) -SIMPLE_GET_SET(http_equiv,http_equiv) -SIMPLE_GET_SET(name,name) -SIMPLE_GET_SET(scheme,scheme) +SIMPLE_GET_SET(content) +SIMPLE_GET_SET(http_equiv) +SIMPLE_GET_SET(name) +SIMPLE_GET_SET(scheme) -- cgit v1.2.3