TreeBuilder_Hubbub::TreeBuilder_Hubbub() : hubbubTreeBuilder(nullptr) { hubbub_error error; error = hubbub_treebuilder_create( &TreeBuilder_Hubbub::hubbubAllocator, NULL, &hubbubTreeBuilder ); if (error != HUBBUB_OK) { throw "Not ok"; } handler = new TreeBuilderHandler(this); hubbub_treebuilder_optparams params; params.tree_handler = handler->getHandler(); hubbub_treebuilder_setopt( hubbubTreeBuilder, HUBBUB_TREEBUILDER_TREE_HANDLER, ¶ms ); reset(); }
void TreeBuilder_Hubbub::reset() { document->reset(); hubbub_treebuilder_optparams params; params.document_node = static_cast<void*>(document->root()); hubbub_treebuilder_setopt(hubbubTreeBuilder, HUBBUB_TREEBUILDER_DOCUMENT_NODE, ¶ms); }
/** * Configure a hubbub parser * * \param parser Parser instance to configure * \param type Option to set * \param params Option-specific parameters * \return HUBBUB_OK on success, appropriate error otherwise */ hubbub_error hubbub_parser_setopt(hubbub_parser *parser, hubbub_parser_opttype type, hubbub_parser_optparams *params) { hubbub_error result = HUBBUB_OK; if (parser == NULL || params == NULL) return HUBBUB_BADPARM; switch (type) { case HUBBUB_PARSER_TOKEN_HANDLER: if (parser->tb != NULL) { /* Client is defining their own token handler, * so we must destroy the default treebuilder */ hubbub_treebuilder_destroy(parser->tb); parser->tb = NULL; } result = hubbub_tokeniser_setopt(parser->tok, HUBBUB_TOKENISER_TOKEN_HANDLER, (hubbub_tokeniser_optparams *) params); break; case HUBBUB_PARSER_ERROR_HANDLER: /* The error handler does not cascade, so tell both the * treebuilder (if extant) and the tokeniser. */ if (parser->tb != NULL) { result = hubbub_treebuilder_setopt(parser->tb, HUBBUB_TREEBUILDER_ERROR_HANDLER, (hubbub_treebuilder_optparams *) params); } if (result == HUBBUB_OK) { result = hubbub_tokeniser_setopt(parser->tok, HUBBUB_TOKENISER_ERROR_HANDLER, (hubbub_tokeniser_optparams *) params); } break; case HUBBUB_PARSER_CONTENT_MODEL: result = hubbub_tokeniser_setopt(parser->tok, HUBBUB_TOKENISER_CONTENT_MODEL, (hubbub_tokeniser_optparams *) params); break; case HUBBUB_PARSER_PAUSE: result = hubbub_tokeniser_setopt(parser->tok, HUBBUB_TOKENISER_PAUSE, (hubbub_tokeniser_optparams *) params); break; case HUBBUB_PARSER_TREE_HANDLER: if (parser->tb != NULL) { result = hubbub_treebuilder_setopt(parser->tb, HUBBUB_TREEBUILDER_TREE_HANDLER, (hubbub_treebuilder_optparams *) params); } break; case HUBBUB_PARSER_DOCUMENT_NODE: if (parser->tb != NULL) { result = hubbub_treebuilder_setopt(parser->tb, HUBBUB_TREEBUILDER_DOCUMENT_NODE, (hubbub_treebuilder_optparams *) params); } break; case HUBBUB_PARSER_ENABLE_SCRIPTING: if (parser->tb != NULL) { result = hubbub_treebuilder_setopt(parser->tb, HUBBUB_TREEBUILDER_ENABLE_SCRIPTING, (hubbub_treebuilder_optparams *) params); } break; default: result = HUBBUB_INVALID; } return result; }