diff options
author | Daniel Silverstone <dsilvers@netsurf-browser.org> | 2012-03-25 09:22:22 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@netsurf-browser.org> | 2012-03-25 09:22:22 +0000 |
commit | d757eb6c31ee35bc1fdd98ecdc621b4a6f789138 (patch) | |
tree | 67a2b7f8be0ec11c63baab4728d30e79f4e8ef45 /src/html | |
parent | 09dafaa2cece23d5e3725479e944293be4c165ca (diff) | |
download | libdom-d757eb6c31ee35bc1fdd98ecdc621b4a6f789138.tar.gz libdom-d757eb6c31ee35bc1fdd98ecdc621b4a6f789138.tar.bz2 |
Implement HTMLDocument.getTitle for non-explicit titles
svn path=/trunk/libdom/; revision=13656
Diffstat (limited to 'src/html')
-rw-r--r-- | src/html/html_document.c | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/src/html/html_document.c b/src/html/html_document.c index 52e0b9c..2ae6488 100644 --- a/src/html/html_document.c +++ b/src/html/html_document.c @@ -180,13 +180,54 @@ dom_exception _dom_html_document_create_element_ns(dom_document *doc, dom_exception _dom_html_document_get_title(dom_html_document *doc, dom_string **title) { + dom_exception exc = DOM_NO_ERR; + *title = NULL; + if (doc->title != NULL) { *title = dom_string_ref(doc->title); } else { - /** \todo Search for title element */ + 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) { + dom_node_unref(node); + return exc; + } + + exc = dom_document_get_elements_by_tag_name(doc, + title_str, + &nodes); + dom_string_unref(title_str); + if (exc != DOM_NO_ERR) { + return exc; + } + + exc = dom_nodelist_get_length(nodes, &len); + if (exc != DOM_NO_ERR) { + dom_nodelist_unref(nodes); + return exc; + } + + if (len == 0) { + dom_nodelist_unref(nodes); + return DOM_NO_ERR; + } + + exc = dom_nodelist_item(nodes, 0, &node); + dom_nodelist_unref(nodes); + if (exc != DOM_NO_ERR) { + return exc; + } + + exc = dom_node_get_text_content(node, title); + dom_node_unref(node); } - return DOM_NO_ERR; + return exc; } dom_exception _dom_html_document_set_title(dom_html_document *doc, |