From ea324e5503e4a076d6aef68ce281e28a7ab06a32 Mon Sep 17 00:00:00 2001 From: Rupinder Singh Khokhar Date: Fri, 4 Jul 2014 08:57:10 +0530 Subject: Fixing some steps in table insertion mode, handling input tags --- src/treebuilder/in_body.c | 22 +++++++++++++++++++++- src/treebuilder/in_table.c | 15 +++++++++++---- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/treebuilder/in_body.c b/src/treebuilder/in_body.c index c9d1780..69ec3d6 100644 --- a/src/treebuilder/in_body.c +++ b/src/treebuilder/in_body.c @@ -12,6 +12,7 @@ #include "treebuilder/internal.h" #include "treebuilder/treebuilder.h" #include "utils/utils.h" +#include "utils/string.h" #undef DEBUG_IN_BODY @@ -337,8 +338,27 @@ hubbub_error process_start_tag(hubbub_treebuilder *treebuilder, return err; err = insert_element(treebuilder, &token->data.tag, false); - if (err == HUBBUB_OK) + if (err != HUBBUB_OK) + return err; + + size_t i; + bool found = 0; + + for (i = 0; i < token->data.tag.n_attributes; i++) { + hubbub_attribute *attr = &token->data.tag.attributes[i]; + + if (hubbub_string_match_ci(attr->name.ptr, attr->name.len, + (uint8_t *) "type", SLEN("type")) && + hubbub_string_match_ci(attr->value.ptr, attr->value.len, + (uint8_t *) "hidden", SLEN("hidden"))) { + found = 1; + break; + } + } + + if(!found) { treebuilder->context.frameset_ok = false; + } } else if (type == HR) { err = process_hr_in_body(treebuilder, token); } else if (type == IMAGE) { diff --git a/src/treebuilder/in_table.c b/src/treebuilder/in_table.c index d86a908..908d5ad 100644 --- a/src/treebuilder/in_table.c +++ b/src/treebuilder/in_table.c @@ -51,13 +51,17 @@ static inline hubbub_error process_input_in_table( for (i = 0; i < token->data.tag.n_attributes; i++) { hubbub_attribute *attr = &token->data.tag.attributes[i]; - if (!hubbub_string_match_ci(attr->value.ptr, attr->value.len, - (uint8_t *) "hidden", SLEN("hidden"))) { + if (!(hubbub_string_match_ci(attr->name.ptr, attr->name.len, + (uint8_t *) "type", SLEN("type")) && + hubbub_string_match_ci(attr->value.ptr, attr->value.len, + (uint8_t *) "hidden", SLEN("hidden")))) { continue; } /** \todo parse error */ - err = insert_element(treebuilder, &token->data.tag, true); + err = insert_element(treebuilder, &token->data.tag, false); + break; + /** \todo ack sc */ } return err; @@ -192,7 +196,10 @@ hubbub_error handle_in_table(hubbub_treebuilder *treebuilder, treebuilder->context.mode = IN_TABLE_BODY; } else if (type == TABLE) { /** \todo parse error */ - + if(!element_in_scope(treebuilder, TABLE, TABLE_SCOPE)) { + /** \todo parse error */ + break; + } /* This should match "" handling */ element_stack_pop_until(treebuilder, TABLE); -- cgit v1.2.3