From ab88f11bb45322003b5882a98f35e9e4e9061e5b Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Fri, 2 Nov 2012 11:01:01 +0000 Subject: alter when the id name is set to before the hubbub parse completion so id based searches work during dom creation --- bindings/hubbub/parser.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'bindings') diff --git a/bindings/hubbub/parser.c b/bindings/hubbub/parser.c index 8296fe8..95c2043 100644 --- a/bindings/hubbub/parser.c +++ b/bindings/hubbub/parser.c @@ -742,6 +742,7 @@ dom_hubbub_parser_create(const char *enc, hubbub_parser_optparams params; hubbub_error error; dom_exception err; + dom_string *idname = NULL; /* check result parameter */ if (document == NULL) { @@ -813,6 +814,21 @@ dom_hubbub_parser_create(const char *enc, HUBBUB_PARSER_ENABLE_SCRIPTING, ¶ms); + /* set the document id parameter before the parse so searches + * based on id succeed. + */ + err = dom_string_create_interned((const uint8_t *) "id", + SLEN("id"), + &idname); + if (err != DOM_NO_ERR) { + hubbub_parser_destroy(parser->parser); + free(parser); + msg(DOM_MSG_ERROR, mctx, "Can't set DOM document id name"); + return NULL; + } + _dom_document_set_id_name(parser->doc, idname); + dom_string_unref(idname); + /* set return parameter */ *document = (dom_document *)dom_node_ref(parser->doc); @@ -880,9 +896,7 @@ dom_hubbub_error dom_hubbub_parser_parse_chunk(dom_hubbub_parser *parser, */ dom_hubbub_error dom_hubbub_parser_completed(dom_hubbub_parser *parser) { - dom_exception derr; hubbub_error err; - dom_string *name = NULL; err = hubbub_parser_completed(parser->parser); if (err != HUBBUB_OK) { @@ -893,14 +907,6 @@ dom_hubbub_error dom_hubbub_parser_completed(dom_hubbub_parser *parser) parser->complete = true; - derr = dom_string_create_interned((const uint8_t *) "id", SLEN("id"), - &name); - if (derr != DOM_NO_ERR) - return DOM_HUBBUB_HUBBUB_ERR | HUBBUB_UNKNOWN; - - _dom_document_set_id_name(parser->doc, name); - dom_string_unref(name); - return DOM_HUBBUB_OK; } -- cgit v1.2.3