summaryrefslogtreecommitdiff
path: root/src/treebuilder/treebuilder.c
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2008-03-21 13:20:22 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2008-03-21 13:20:22 +0000
commit4da6a038c15a5fa3d1c754b7278ae47627a44718 (patch)
treebd3f06540ff87963913848c6fea5cb1b7eec62e3 /src/treebuilder/treebuilder.c
parenteebff1268e029fa6a31d391c175a66e159a45ecf (diff)
downloadlibhubbub-4da6a038c15a5fa3d1c754b7278ae47627a44718.tar.gz
libhubbub-4da6a038c15a5fa3d1c754b7278ae47627a44718.tar.bz2
hubbub_strings may now be either an offset into the data buffer or a pointer to constant data.
Fix up tokeniser and treebuilder to deal with this. Fix up testcases, too. The tokeniser will only ever emit strings of type HUBBUB_STRING_OFF. Anything else is a bug which should be fixed. The treebuilder may emit strings of either type. svn path=/trunk/hubbub/; revision=4014
Diffstat (limited to 'src/treebuilder/treebuilder.c')
-rw-r--r--src/treebuilder/treebuilder.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/src/treebuilder/treebuilder.c b/src/treebuilder/treebuilder.c
index 3d2b295..01e31e4 100644
--- a/src/treebuilder/treebuilder.c
+++ b/src/treebuilder/treebuilder.c
@@ -241,6 +241,8 @@ hubbub_treebuilder *hubbub_treebuilder_create(hubbub_tokeniser *tokeniser,
assert(HTML != 0);
tb->context.element_stack[0].type = 0;
+ tb->context.collect.string.type = HUBBUB_STRING_OFF;
+
tb->buffer_handler = NULL;
tb->buffer_pw = NULL;
@@ -1070,8 +1072,8 @@ bool handle_generic_rcdata(hubbub_treebuilder *treebuilder,
switch (token->type) {
case HUBBUB_TOKEN_CHARACTER:
if (treebuilder->context.collect.string.len == 0) {
- treebuilder->context.collect.string.data_off =
- token->data.character.data_off;
+ treebuilder->context.collect.string.data.off =
+ token->data.character.data.off;
}
treebuilder->context.collect.string.len +=
token->data.character.len;
@@ -1158,8 +1160,8 @@ bool handle_script_collect_characters(hubbub_treebuilder *treebuilder,
switch (token->type) {
case HUBBUB_TOKEN_CHARACTER:
if (treebuilder->context.collect.string.len == 0) {
- treebuilder->context.collect.string.data_off =
- token->data.character.data_off;
+ treebuilder->context.collect.string.data.off =
+ token->data.character.data.off;
}
treebuilder->context.collect.string.len +=
token->data.character.len;
@@ -1265,7 +1267,7 @@ bool process_characters_expect_whitespace(hubbub_treebuilder *treebuilder,
const hubbub_token *token, bool insert_into_current_node)
{
const uint8_t *data = treebuilder->input_buffer +
- token->data.character.data_off;
+ token->data.character.data.off;
size_t len = token->data.character.len;
size_t c;
@@ -1284,7 +1286,7 @@ bool process_characters_expect_whitespace(hubbub_treebuilder *treebuilder,
int success;
void *text, *appended;
- temp.data_off = token->data.character.data_off;
+ temp.data.off = token->data.character.data.off;
temp.len = len - c;
/** \todo Append to pre-existing text child, iff
@@ -1318,7 +1320,7 @@ bool process_characters_expect_whitespace(hubbub_treebuilder *treebuilder,
}
/* Update token data to strip leading whitespace */
- ((hubbub_token *) token)->data.character.data_off +=
+ ((hubbub_token *) token)->data.character.data.off +=
len - c;
((hubbub_token *) token)->data.character.len -= c;
@@ -1409,7 +1411,7 @@ void parse_generic_rcdata(hubbub_treebuilder *treebuilder,
treebuilder->context.collect.mode = treebuilder->context.mode;
treebuilder->context.collect.type = type;
treebuilder->context.collect.node = node;
- treebuilder->context.collect.string.data_off = 0;
+ treebuilder->context.collect.string.data.off = 0;
treebuilder->context.collect.string.len = 0;
treebuilder->tree_handler->unref_node(
@@ -1472,7 +1474,7 @@ 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.data_off = 0;
+ treebuilder->context.collect.string.data.off = 0;
treebuilder->context.collect.string.len = 0;
treebuilder->context.mode = SCRIPT_COLLECT_CHARACTERS;
@@ -1846,7 +1848,7 @@ void reset_insertion_mode(hubbub_treebuilder *treebuilder)
element_type element_type_from_name(hubbub_treebuilder *treebuilder,
const hubbub_string *tag_name)
{
- const uint8_t *name = treebuilder->input_buffer + tag_name->data_off;
+ const uint8_t *name = treebuilder->input_buffer + tag_name->data.off;
return element_type_from_verbatim_name(name, tag_name->len);
}