summaryrefslogtreecommitdiff
path: root/src/treebuilder
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2008-07-08 09:41:21 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2008-07-08 09:41:21 +0000
commit633a85721c4c5246935e713361ca2d28afb0a90e (patch)
tree503024218f2fa4cd4fae1ade5a6d3d7e4aadb9e7 /src/treebuilder
parent97ad6168bdf5679d0a3ee2bf9da0048c131c3eb6 (diff)
downloadlibhubbub-633a85721c4c5246935e713361ca2d28afb0a90e.tar.gz
libhubbub-633a85721c4c5246935e713361ca2d28afb0a90e.tar.bz2
Fix handling of non-whitespace characters in table.
Make process_tag_in_body handle character tokens, rather than asserting. svn path=/trunk/hubbub/; revision=4531
Diffstat (limited to 'src/treebuilder')
-rw-r--r--src/treebuilder/in_body.c10
-rw-r--r--src/treebuilder/in_table.c9
2 files changed, 14 insertions, 5 deletions
diff --git a/src/treebuilder/in_body.c b/src/treebuilder/in_body.c
index 64c6b5e..e61a581 100644
--- a/src/treebuilder/in_body.c
+++ b/src/treebuilder/in_body.c
@@ -214,15 +214,23 @@ bool process_tag_in_body(hubbub_treebuilder *treebuilder,
{
bool reprocess = false;
+ if (treebuilder->context.strip_leading_lr &&
+ token->type != HUBBUB_TOKEN_CHARACTER) {
+ /* Reset the LR stripping flag */
+ treebuilder->context.strip_leading_lr = false;
+ }
+
switch (token->type)
{
+ case HUBBUB_TOKEN_CHARACTER:
+ process_character(treebuilder, token);
+ break;
case HUBBUB_TOKEN_START_TAG:
reprocess = process_start_tag(treebuilder, token);
break;
case HUBBUB_TOKEN_END_TAG:
reprocess = process_end_tag(treebuilder, token);
break;
- case HUBBUB_TOKEN_CHARACTER:
case HUBBUB_TOKEN_COMMENT:
case HUBBUB_TOKEN_DOCTYPE:
case HUBBUB_TOKEN_EOF:
diff --git a/src/treebuilder/in_table.c b/src/treebuilder/in_table.c
index 2fb9528..6622ea6 100644
--- a/src/treebuilder/in_table.c
+++ b/src/treebuilder/in_table.c
@@ -89,11 +89,12 @@ bool handle_in_table(hubbub_treebuilder *treebuilder,
case HUBBUB_TOKEN_CHARACTER:
if (treebuilder->context.element_stack[
treebuilder->context.current_table
- ].tainted)
+ ].tainted) {
handled = false;
-
- reprocess = process_characters_expect_whitespace(treebuilder,
- token, true);
+ } else {
+ handled = !process_characters_expect_whitespace(
+ treebuilder, token, true);
+ }
break;
case HUBBUB_TOKEN_COMMENT:
process_comment_append(treebuilder, token,