Hubbub
after_after_body.c
Go to the documentation of this file.
1 /*
2  * This file is part of Hubbub.
3  * Licensed under the MIT License,
4  * http://www.opensource.org/licenses/mit-license.php
5  * Copyright 2008 Andrew Sidwell <takkaria@netsurf-browser.org>
6  */
7 
8 #include <assert.h>
9 #include <string.h>
10 
11 #include "treebuilder/modes.h"
12 #include "treebuilder/internal.h"
14 #include "utils/utils.h"
15 
16 
27  const hubbub_token *token)
28 {
29  hubbub_error err = HUBBUB_OK;
30 
31  switch (token->type) {
33  err = process_characters_expect_whitespace(treebuilder,
34  token, true);
35  if (err == HUBBUB_REPROCESS)
36  treebuilder->context.mode = IN_BODY;
37  break;
39  err = process_comment_append(treebuilder, token,
40  treebuilder->context.document);
41  break;
43  err = handle_in_body(treebuilder, token);
44  break;
46  {
48  &token->data.tag.name);
49 
50  if (type == HTML) {
51  /* Process as if "in body" */
52  err = handle_in_body(treebuilder, token);
53  } else {
55  treebuilder->context.mode = IN_BODY;
56  err = HUBBUB_REPROCESS;
57  }
58  }
59  break;
62  treebuilder->context.mode = IN_BODY;
63  err = HUBBUB_REPROCESS;
64  break;
65  case HUBBUB_TOKEN_EOF:
66  break;
67  }
68 
69  return err;
70 }
71 
hubbub_error process_comment_append(hubbub_treebuilder *treebuilder, const hubbub_token *token, void *parent)
Process a comment token, appending it to the given parent.
Definition: treebuilder.c:420
hubbub_error handle_after_after_body(hubbub_treebuilder *treebuilder, const hubbub_token *token)
Handle token in "after after body" insertion mode.
hubbub_token_type type
The token type.
Definition: types.h:120
Token data.
Definition: types.h:119
hubbub_string name
Tag name.
Definition: types.h:110
element_type
Definition: internal.h:13
hubbub_error process_characters_expect_whitespace(hubbub_treebuilder *treebuilder, const hubbub_token *token, bool insert_into_current_node)
Process a character token in cases where we expect only whitespace.
Definition: treebuilder.c:374
Definition: internal.h:25
insertion_mode mode
The current insertion mode.
Definition: internal.h:75
hubbub_error handle_in_body(hubbub_treebuilder *treebuilder, const hubbub_token *token)
Handle tokens in "in body" insertion mode.
Definition: in_body.c:123
Definition: modes.h:22
hubbub_treebuilder_context context
Our context.
Definition: internal.h:120
hubbub_error
Definition: errors.h:18
element_type type
Definition: treebuilder.c:25
No error.
Definition: errors.h:19
hubbub_tag tag
Definition: types.h:125
void * document
Pointer to the document node.
Definition: internal.h:93
union hubbub_token::@3 data
Type-specific data.
element_type element_type_from_name(hubbub_treebuilder *treebuilder, const hubbub_string *tag_name)
Convert an element name into an element type.
Definition: treebuilder.c:986
Treebuilder object.
Definition: internal.h:116