Hubbub
in_head_noscript.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 John-Mark Bell <jmb@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 
25  const hubbub_token *token)
26 {
27  hubbub_error err = HUBBUB_OK;
28  bool handled = false;
29 
30  switch (token->type) {
32  err = process_characters_expect_whitespace(treebuilder,
33  token, true);
34  break;
36  err = handle_in_head(treebuilder, token);
37  break;
40  break;
42  {
44  &token->data.tag.name);
45 
46  if (type == HTML) {
47  /* Process as "in body" */
48  err = handle_in_body(treebuilder, token);
49  } else if (type == NOSCRIPT) {
50  handled = true;
51  } else if (type == LINK || type == META || type == NOFRAMES ||
52  type == STYLE) {
53  /* Process as "in head" */
54  err = handle_in_head(treebuilder, token);
55  } else if (type == HEAD || type == NOSCRIPT) {
57  } else {
59  err = HUBBUB_REPROCESS;
60  }
61  }
62  break;
64  {
66  &token->data.tag.name);
67 
68  if (type == NOSCRIPT) {
69  handled = true;
70  } else if (type == BR) {
72  err = HUBBUB_REPROCESS;
73  } else {
75  }
76  }
77  break;
78  case HUBBUB_TOKEN_EOF:
80  err = HUBBUB_REPROCESS;
81  break;
82  }
83 
84  if (handled || err == HUBBUB_REPROCESS) {
85  hubbub_ns ns;
86  element_type otype;
87  void *node;
88 
89  element_stack_pop(treebuilder, &ns, &otype, &node);
90 
91  treebuilder->tree_handler->unref_node(
92  treebuilder->tree_handler->ctx,
93  node);
94 
95  treebuilder->context.mode = IN_HEAD;
96  }
97 
98  return err;
99 }
100 
Definition: internal.h:20
hubbub_token_type type
The token type.
Definition: types.h:120
Definition: internal.h:20
void * ctx
Context pointer.
Definition: tree.h:292
Token data.
Definition: types.h:119
hubbub_string name
Tag name.
Definition: types.h:110
hubbub_tree_handler * tree_handler
Callback table.
Definition: internal.h:122
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
Definition: internal.h:22
hubbub_error handle_in_body(hubbub_treebuilder *treebuilder, const hubbub_token *token)
Handle tokens in "in body" insertion mode.
Definition: in_body.c:123
hubbub_treebuilder_context context
Our context.
Definition: internal.h:120
hubbub_error handle_in_head(hubbub_treebuilder *treebuilder, const hubbub_token *token)
Handle token in "in head" insertion mode.
Definition: in_head.c:109
hubbub_error
Definition: errors.h:18
hubbub_error handle_in_head_noscript(hubbub_treebuilder *treebuilder, const hubbub_token *token)
Handle tokens in "in head noscript" insertion mode.
Definition: modes.h:19
hubbub_tree_unref_node unref_node
Unreference node.
Definition: tree.h:279
element_type type
Definition: treebuilder.c:25
No error.
Definition: errors.h:19
hubbub_tag tag
Definition: types.h:125
hubbub_ns
Possible namespaces.
Definition: types.h:63
union hubbub_token::@3 data
Type-specific data.
Definition: internal.h:17
hubbub_error element_stack_pop(hubbub_treebuilder *treebuilder, hubbub_ns *ns, element_type *type, void **node)
Pop an element off the stack of open elements.
Definition: treebuilder.c:1112
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
Definition: internal.h:19