diff options
author | Andrew Sidwell <andy@entai.co.uk> | 2008-08-15 21:40:39 +0000 |
---|---|---|
committer | Andrew Sidwell <andy@entai.co.uk> | 2008-08-15 21:40:39 +0000 |
commit | a000310dd4fd0d6f8e4fd0f40529e5e8b2318f9e (patch) | |
tree | 28f0df1c047e62390f3169fac2e16f7cda67077c /src/treebuilder/generic_rcdata.c | |
parent | 9d1adb34c81ec8ce44291cb00392c8625adb847a (diff) | |
download | libhubbub-a000310dd4fd0d6f8e4fd0f40529e5e8b2318f9e.tar.gz libhubbub-a000310dd4fd0d6f8e4fd0f40529e5e8b2318f9e.tar.bz2 |
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
Diffstat (limited to 'src/treebuilder/generic_rcdata.c')
-rw-r--r-- | src/treebuilder/generic_rcdata.c | 66 |
1 files changed, 32 insertions, 34 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) { |