summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Sidwell <andy@entai.co.uk>2008-08-15 21:40:39 +0000
committerAndrew Sidwell <andy@entai.co.uk>2008-08-15 21:40:39 +0000
commita000310dd4fd0d6f8e4fd0f40529e5e8b2318f9e (patch)
tree28f0df1c047e62390f3169fac2e16f7cda67077c
parent9d1adb34c81ec8ce44291cb00392c8625adb847a (diff)
downloadlibhubbub-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
-rw-r--r--src/treebuilder/generic_rcdata.c66
-rw-r--r--src/treebuilder/in_head.c2
-rw-r--r--src/treebuilder/internal.h1
-rw-r--r--src/treebuilder/treebuilder.c2
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);