summaryrefslogtreecommitdiff
path: root/src/treebuilder/in_body.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/treebuilder/in_body.c')
-rw-r--r--src/treebuilder/in_body.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/treebuilder/in_body.c b/src/treebuilder/in_body.c
index 69ec3d6..bdf2c0b 100644
--- a/src/treebuilder/in_body.c
+++ b/src/treebuilder/in_body.c
@@ -1361,12 +1361,21 @@ hubbub_error process_select_in_body(hubbub_treebuilder *treebuilder,
hubbub_error process_opt_in_body(hubbub_treebuilder *treebuilder,
const hubbub_token *token)
{
- hubbub_error err;
+ hubbub_error err;
- if (element_in_scope(treebuilder, OPTION, NONE)) {
- err = process_0generic_in_body(treebuilder, OPTION);
- /* Cannot fail */
- assert(err == HUBBUB_OK);
+ element_context *stack = treebuilder->context.element_stack;
+ uint32_t node = treebuilder->context.current_node;
+ element_type ntype = stack[node].type;
+
+ if(ntype == OPTION) {
+ hubbub_ns ns;
+ void *node;
+ element_type otype;
+ element_stack_pop(treebuilder, &ns, &otype, &node);
+
+ treebuilder->tree_handler->unref_node(
+ treebuilder->tree_handler->ctx,
+ node);
}
err = reconstruct_active_formatting_list(treebuilder);
@@ -2452,8 +2461,7 @@ hubbub_error process_0generic_in_body(hubbub_treebuilder *treebuilder,
}
break;
- } else if (!is_formatting_element(stack[node].type) &&
- !is_phrasing_element(stack[node].type)) {
+ } else if (is_special_element(stack[node].type)) {
/** \todo parse error */
break;
}