From a000310dd4fd0d6f8e4fd0f40529e5e8b2318f9e Mon Sep 17 00:00:00 2001 From: Andrew Sidwell Date: Fri, 15 Aug 2008 21:40:39 +0000 Subject: Refactor the generic rcdata mode so it's more like the script collection mode, and then remove an unused variable in the treebuilder state. svn path=/trunk/hubbub/; revision=5132 --- src/treebuilder/generic_rcdata.c | 66 +++++++++++++++++++--------------------- src/treebuilder/in_head.c | 2 -- src/treebuilder/internal.h | 1 - src/treebuilder/treebuilder.c | 2 -- 4 files changed, 32 insertions(+), 39 deletions(-) diff --git a/src/treebuilder/generic_rcdata.c b/src/treebuilder/generic_rcdata.c index d7f1f6e..44d29c8 100644 --- a/src/treebuilder/generic_rcdata.c +++ b/src/treebuilder/generic_rcdata.c @@ -35,53 +35,28 @@ hubbub_error handle_generic_rcdata(hubbub_treebuilder *treebuilder, switch (token->type) { case HUBBUB_TOKEN_CHARACTER: - treebuilder->context.collect.string = - token->data.character; + { + hubbub_string chars = token->data.character; if (treebuilder->context.strip_leading_lr) { - const uint8_t *str = - treebuilder->context.collect.string.ptr; - - if (*str == '\n') { - treebuilder->context.collect.string.ptr++; - treebuilder->context.collect.string.len--; + if (chars.ptr[0] == '\n') { + chars.ptr++; + chars.len--; } treebuilder->context.strip_leading_lr = false; } - break; - case HUBBUB_TOKEN_END_TAG: - { - element_type type = element_type_from_name(treebuilder, - &token->data.tag.name); - if (type != treebuilder->context.collect.type) { - /** \todo parse error */ - } + if (chars.len == 0) + break; - done = true; - } - break; - case HUBBUB_TOKEN_EOF: - /** \todo parse error */ - done = true; - err = HUBBUB_REPROCESS; - break; - case HUBBUB_TOKEN_COMMENT: - case HUBBUB_TOKEN_DOCTYPE: - case HUBBUB_TOKEN_START_TAG: - /* Should never happen */ - assert(0); - break; - } - if (treebuilder->context.collect.string.len) { int success; void *text, *appended; success = treebuilder->tree_handler->create_text( treebuilder->tree_handler->ctx, - &treebuilder->context.collect.string, + &chars, &text); if (success != 0) { /** \todo errors */ @@ -102,8 +77,31 @@ hubbub_error handle_generic_rcdata(hubbub_treebuilder *treebuilder, treebuilder->tree_handler->ctx, appended); treebuilder->tree_handler->unref_node( treebuilder->tree_handler->ctx, text); + } + break; + case HUBBUB_TOKEN_END_TAG: + { + element_type type = element_type_from_name(treebuilder, + &token->data.tag.name); - treebuilder->context.collect.string.len = 0; + if (type != treebuilder->context.collect.type) { + /** \todo parse error */ + } + + done = true; + } + break; + case HUBBUB_TOKEN_EOF: + /** \todo parse error */ + done = true; + err = HUBBUB_REPROCESS; + break; + case HUBBUB_TOKEN_COMMENT: + case HUBBUB_TOKEN_DOCTYPE: + case HUBBUB_TOKEN_START_TAG: + /* Should never happen */ + assert(0); + break; } if (done) { diff --git a/src/treebuilder/in_head.c b/src/treebuilder/in_head.c index 897610b..e6cba81 100644 --- a/src/treebuilder/in_head.c +++ b/src/treebuilder/in_head.c @@ -127,8 +127,6 @@ static void process_script_in_head(hubbub_treebuilder *treebuilder, treebuilder->context.collect.mode = treebuilder->context.mode; treebuilder->context.collect.node = script; treebuilder->context.collect.type = SCRIPT; - treebuilder->context.collect.string.ptr = NULL; - treebuilder->context.collect.string.len = 0; treebuilder->context.mode = SCRIPT_COLLECT_CHARACTERS; } diff --git a/src/treebuilder/internal.h b/src/treebuilder/internal.h index 8e0340f..6e5d80f 100644 --- a/src/treebuilder/internal.h +++ b/src/treebuilder/internal.h @@ -89,7 +89,6 @@ typedef struct hubbub_treebuilder_context insertion_mode mode; /**< Insertion mode to return to */ void *node; /**< Node to attach Text child to */ element_type type; /**< Type of node */ - hubbub_string string; /**< Text data */ } collect; /**< Context for character collecting */ bool strip_leading_lr; /**< Whether to strip a LR from the diff --git a/src/treebuilder/treebuilder.c b/src/treebuilder/treebuilder.c index 4624510..90c2fdd 100644 --- a/src/treebuilder/treebuilder.c +++ b/src/treebuilder/treebuilder.c @@ -515,8 +515,6 @@ void parse_generic_rcdata(hubbub_treebuilder *treebuilder, treebuilder->context.collect.mode = treebuilder->context.mode; treebuilder->context.collect.type = type; treebuilder->context.collect.node = appended; - treebuilder->context.collect.string.ptr = NULL; - treebuilder->context.collect.string.len = 0; treebuilder->tree_handler->unref_node( treebuilder->tree_handler->ctx, appended); -- cgit v1.2.3