diff options
author | Ole Loots <ole@monochrom.net> | 2012-12-18 01:28:22 +0100 |
---|---|---|
committer | Ole Loots <ole@monochrom.net> | 2012-12-18 01:28:22 +0100 |
commit | 3019368c93600a335445c09178c9554074c7f656 (patch) | |
tree | 872c3bcbba0b74584cda24bee36ffe784806108f /utils/libdom.c | |
parent | c6a5109a95c1206ccf63d99316fa12b8c43bb7cf (diff) | |
parent | 0d803b6c0d252c3a1a9fa07e37d9a0b08ce567b8 (diff) | |
download | netsurf-3019368c93600a335445c09178c9554074c7f656.tar.gz netsurf-3019368c93600a335445c09178c9554074c7f656.tar.bz2 |
Merge branch 'master' into mono/removing-windom-dependency
Diffstat (limited to 'utils/libdom.c')
-rw-r--r-- | utils/libdom.c | 83 |
1 files changed, 77 insertions, 6 deletions
diff --git a/utils/libdom.c b/utils/libdom.c index 3b6cd15b1..9e7e7761a 100644 --- a/utils/libdom.c +++ b/utils/libdom.c @@ -22,7 +22,6 @@ #include <assert.h> #include <dom/dom.h> -#include <dom/bindings/hubbub/parser.h> #include "utils/config.h" #include "utils/log.h" @@ -254,6 +253,70 @@ void libdom_iterate_child_elements(dom_node *parent, dom_nodelist_unref(children); } +/* exported interface documented in libdom.h */ +nserror libdom_hubbub_error_to_nserror(dom_hubbub_error error) +{ + switch (error) { + + /* HUBBUB_REPROCESS is not handled here because it can + * never occur outside the hubbub treebuilder + */ + + case DOM_HUBBUB_OK: + /* parsed ok */ + return NSERROR_OK; + + case (DOM_HUBBUB_HUBBUB_ERR | HUBBUB_PAUSED): + /* hubbub input paused */ + return NSERROR_OK; + + case DOM_HUBBUB_NOMEM: + /* out of memory error from DOM */ + return NSERROR_NOMEM; + + case DOM_HUBBUB_BADPARM: + /* Bad parameter passed to creation */ + return NSERROR_BAD_PARAMETER; + + case DOM_HUBBUB_DOM: + /* DOM call returned error */ + return NSERROR_DOM; + + case (DOM_HUBBUB_HUBBUB_ERR | HUBBUB_ENCODINGCHANGE): + /* encoding changed */ + return NSERROR_ENCODING_CHANGE; + + case (DOM_HUBBUB_HUBBUB_ERR | HUBBUB_NOMEM): + /* out of memory error from parser */ + return NSERROR_NOMEM; + + case (DOM_HUBBUB_HUBBUB_ERR | HUBBUB_BADPARM): + return NSERROR_BAD_PARAMETER; + + case (DOM_HUBBUB_HUBBUB_ERR | HUBBUB_INVALID): + return NSERROR_INVALID; + + case (DOM_HUBBUB_HUBBUB_ERR | HUBBUB_FILENOTFOUND): + return NSERROR_NOT_FOUND; + + case (DOM_HUBBUB_HUBBUB_ERR | HUBBUB_NEEDDATA): + return NSERROR_NEED_DATA; + + case (DOM_HUBBUB_HUBBUB_ERR | HUBBUB_BADENCODING): + return NSERROR_BAD_ENCODING; + + case (DOM_HUBBUB_HUBBUB_ERR | HUBBUB_UNKNOWN): + /* currently only generated by the libdom hubbub binding */ + return NSERROR_DOM; + default: + /* unknown error */ + /** @todo better error handling and reporting */ + return NSERROR_UNKNOWN; + } + return NSERROR_UNKNOWN; +} + + static void ignore_dom_msg(uint32_t severity, void *ctx, const char *msg, ...) { } @@ -261,6 +324,7 @@ static void ignore_dom_msg(uint32_t severity, void *ctx, const char *msg, ...) /* exported interface documented in libdom.h */ nserror libdom_parse_file(const char *filename, const char *encoding, dom_document **doc) { + dom_hubbub_parser_params parse_params; dom_hubbub_error error; dom_hubbub_parser *parser; dom_document *document; @@ -273,11 +337,18 @@ nserror libdom_parse_file(const char *filename, const char *encoding, dom_docume return NSERROR_NOT_FOUND; } - parser = dom_hubbub_parser_create(encoding, false, false, - ignore_dom_msg, NULL, NULL, &document); - if (parser == NULL) { + parse_params.enc = encoding; + parse_params.fix_enc = false; + parse_params.enable_script = false; + parse_params.msg = ignore_dom_msg; + parse_params.script = NULL; + parse_params.ctx = NULL; + parse_params.daf = NULL; + + error = dom_hubbub_parser_create(&parse_params, &parser, &document); + if (error != DOM_HUBBUB_OK) { fclose(fp); - return NSERROR_DOM; + return libdom_hubbub_error_to_nserror(error); } while (feof(fp) == 0) { @@ -297,7 +368,7 @@ nserror libdom_parse_file(const char *filename, const char *encoding, dom_docume dom_node_unref(document); dom_hubbub_parser_destroy(parser); fclose(fp); - return NSERROR_DOM; + return libdom_hubbub_error_to_nserror(error); } dom_hubbub_parser_destroy(parser); |