Hubbub
internal.h
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 #ifndef hubbub_treebuilder_internal_h_
9 #define hubbub_treebuilder_internal_h_
10 
12 
13 typedef enum
14 {
15 /* Special */
23  TR, UL, WBR,
24 /* Scoping */
26 /* Formatting */
27  A, B, BIG, CODE, EM, FONT, I, NOBR, S, SMALL, STRIKE, STRONG, TT, U,
28 /* Phrasing */
31 /* MathML */
33 /* SVG */
34  SVG, FOREIGNOBJECT, /* foreignobject is scoping, but only in SVG ns */
37 } element_type;
38 
42 typedef struct element_context
43 {
46  uint8_t *name;
48  bool tainted;
54  void *node;
56 
60 typedef struct formatting_list_entry
61 {
64  uint32_t stack_index;
69 
74 {
78 #define ELEMENT_STACK_CHUNK 128
80  uint32_t stack_alloc;
81  uint32_t current_node;
88  void *head_element;
90  void *form_element;
93  void *document;
97  struct {
100  } collect;
110  bool frameset_ok;
112 
117 {
125  void *error_pw;
126 };
127 
129  const hubbub_token *token, void *pw);
130 
132  hubbub_treebuilder *treebuilder, const hubbub_token *token,
133  bool insert_into_current_node);
135  const hubbub_token *token, void *parent);
137  const hubbub_token *token, bool rcdata);
138 
139 uint32_t element_in_scope(hubbub_treebuilder *treebuilder,
140  element_type type, bool in_table);
142  hubbub_treebuilder *treebuilder);
144  hubbub_treebuilder *treebuilder);
146  void *node);
148  const hubbub_tag *tag_name, bool push);
149 void close_implied_end_tags(hubbub_treebuilder *treebuilder,
150  element_type except);
151 void reset_insertion_mode(hubbub_treebuilder *treebuilder);
153  const hubbub_string *string);
155 
157  const hubbub_string *tag_name);
158 
163 
165  hubbub_ns ns, element_type type, void *node);
167  hubbub_ns *ns, element_type *type, void **node);
171  uint32_t index, hubbub_ns *ns, element_type *type,
172  void **removed);
173 uint32_t current_table(hubbub_treebuilder *treebuilder);
176 
178  hubbub_ns ns, element_type type, void *node,
179  uint32_t stack_index);
182  hubbub_ns ns, element_type type, void *node,
183  uint32_t stack_index);
185  formatting_list_entry *entry,
186  hubbub_ns *ns, element_type *type, void **node,
187  uint32_t *stack_index);
189  formatting_list_entry *entry,
190  hubbub_ns ns, element_type type, void *node,
191  uint32_t stack_index,
192  hubbub_ns *ons, element_type *otype, void **onode,
193  uint32_t *ostack_index);
194 
195 /* in_foreign_content.c */
197 void adjust_svg_attributes(hubbub_treebuilder *treebuilder,
198  hubbub_tag *tag);
199 void adjust_svg_tagname(hubbub_treebuilder *treebuilder,
200  hubbub_tag *tag);
202  hubbub_tag *tag);
203 
204 /* in_body.c */
206  void *node, void **inserted);
207 
208 #ifndef NDEBUG
209 #include <stdio.h>
210 
211 void element_stack_dump(hubbub_treebuilder *treebuilder, FILE *fp);
212 void formatting_list_dump(hubbub_treebuilder *treebuilder, FILE *fp);
213 
215 
216 #endif
217 
218 #endif
219 
hubbub_ns ns
Element namespace.
Definition: internal.h:44
Definition: internal.h:20
bool tainted
Only for tables.
Definition: internal.h:48
element_type current_node(hubbub_treebuilder *treebuilder)
Peek at the top element of the element stack.
Definition: treebuilder.c:1258
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
void formatting_list_dump(hubbub_treebuilder *treebuilder, FILE *fp)
Dump a formatting list to the given file pointer.
Definition: treebuilder.c:1474
Definition: internal.h:25
Definition: internal.h:18
Definition: internal.h:30
Definition: internal.h:32
Definition: internal.h:20
Definition: internal.h:20
Definition: internal.h:18
Definition: internal.h:27
uint32_t stack_index
Index into element stack.
Definition: internal.h:64
Data for a tag.
Definition: types.h:108
Token data.
Definition: types.h:119
uint8_t * name
Element name (interned)
Definition: internal.h:46
bool is_scoping_element(element_type type)
Determine if a node is a scoping element.
Definition: treebuilder.c:1026
Definition: internal.h:16
Entry in a formatting list.
Definition: internal.h:60
hubbub_tree_handler * tree_handler
Callback table.
Definition: internal.h:122
void close_implied_end_tags(hubbub_treebuilder *treebuilder, element_type except)
Close implied end tags.
Definition: treebuilder.c:828
bool is_phrasing_element(element_type type)
Determine if a node is a phrasing element.
Definition: treebuilder.c:1048
Definition: internal.h:21
element_type
Definition: internal.h:13
Definition: internal.h:30
insertion_mode
The various treebuilder insertion modes.
Definition: modes.h:14
Tokeniser string type.
Definition: types.h:76
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:17
Definition: internal.h:27
void element_stack_dump(hubbub_treebuilder *treebuilder, FILE *fp)
Dump an element stack to the given file pointer.
Definition: treebuilder.c:1455
struct hubbub_treebuilder_context hubbub_treebuilder_context
Context for a tree builder.
bool is_formatting_element(element_type type)
Determine if a node is a formatting element.
Definition: treebuilder.c:1037
struct formatting_list_entry * prev
Previous in list.
Definition: internal.h:66
#define mode(x)
Definition: internal.h:18
Definition: internal.h:17
Definition: internal.h:18
Definition: internal.h:25
bool is_special_element(element_type type)
Determine if a node is a special element.
Definition: treebuilder.c:1015
Definition: internal.h:25
hubbub_error formatting_list_remove(hubbub_treebuilder *treebuilder, formatting_list_entry *entry, hubbub_ns *ns, element_type *type, void **node, uint32_t *stack_index)
Remove an element from the list of active formatting elements.
Definition: treebuilder.c:1383
bool strip_leading_lr
Whether to strip a LR from the start of the next character sequence received.
Definition: internal.h:102
Definition: internal.h:22
bool in_table_foster
Whether nodes that would be inserted into the current node should be foster parented.
Definition: internal.h:106
Definition: internal.h:25
Tokeniser data structure.
Definition: tokeniser.c:165
uint32_t stack_alloc
Number of stack slots allocated.
Definition: internal.h:80
Definition: internal.h:30
Definition: internal.h:16
insertion_mode mode
The current insertion mode.
Definition: internal.h:75
Definition: internal.h:27
Definition: internal.h:23
void * form_element
Pointer to most recently opened FORM element.
Definition: internal.h:90
Definition: internal.h:22
Definition: internal.h:19
hubbub_error reconstruct_active_formatting_list(hubbub_treebuilder *treebuilder)
Reconstruct the list of active formatting elements.
Definition: treebuilder.c:542
Definition: internal.h:22
hubbub_tokeniser * tokeniser
Underlying tokeniser.
Definition: internal.h:118
Definition: internal.h:23
Definition: internal.h:22
Definition: internal.h:27
Definition: internal.h:19
Definition: internal.h:20
formatting_list_entry * formatting_list_end
End of active formatting list.
Definition: internal.h:85
Definition: internal.h:30
bool enable_scripting
Whether scripting is enabled.
Definition: internal.h:95
Context for a tree builder.
Definition: internal.h:73
Definition: internal.h:30
Definition: internal.h:20
Definition: internal.h:19
hubbub_error aa_insert_into_foster_parent(hubbub_treebuilder *treebuilder, void *node, void **inserted)
Adoption agency: locate foster parent and insert node into it.
Definition: in_body.c:2222
void * head_element
Pointer to HEAD element.
Definition: internal.h:88
Definition: internal.h:34
element_type type
Type of node.
Definition: internal.h:99
hubbub_error element_stack_push(hubbub_treebuilder *treebuilder, hubbub_ns ns, element_type type, void *node)
Push an element onto the stack of open elements.
Definition: treebuilder.c:1075
struct formatting_list_entry formatting_list_entry
Entry in a formatting list.
hubbub_treebuilder_context context
Our context.
Definition: internal.h:120
Definition: internal.h:21
Definition: internal.h:21
struct element_context element_context
Item on the element stack.
Definition: internal.h:19
hubbub_error remove_node_from_dom(hubbub_treebuilder *treebuilder, void *node)
Remove a node from the DOM.
Definition: treebuilder.c:680
Definition: internal.h:18
hubbub_error insert_element(hubbub_treebuilder *treebuilder, const hubbub_tag *tag_name, bool push)
Create element and insert it into the DOM, potentially pushing it on the stack.
Definition: treebuilder.c:751
hubbub_error formatting_list_replace(hubbub_treebuilder *treebuilder, formatting_list_entry *entry, hubbub_ns ns, element_type type, void *node, uint32_t stack_index, hubbub_ns *ons, element_type *otype, void **onode, uint32_t *ostack_index)
Remove an element from the list of active formatting elements.
Definition: treebuilder.c:1423
struct formatting_list_entry * next
Next in list.
Definition: internal.h:67
formatting_list_entry * formatting_list
List of active formatting elements.
Definition: internal.h:83
Definition: internal.h:27
hubbub_error hubbub_treebuilder_token_handler(const hubbub_token *token, void *pw)
Handle tokeniser emitting a token.
Definition: treebuilder.c:264
hubbub_error
Definition: errors.h:18
hubbub_error_handler error_handler
Error handler.
Definition: internal.h:124
hubbub_error element_stack_pop_until(hubbub_treebuilder *treebuilder, element_type type)
Pop elements until an element of type "element" has been popped.
Definition: treebuilder.c:1161
void * node
Node pointer.
Definition: internal.h:54
Definition: internal.h:19
uint32_t current_table(hubbub_treebuilder *treebuilder)
Find the stack index of the current table.
Definition: treebuilder.c:1238
hubbub_error append_text(hubbub_treebuilder *treebuilder, const hubbub_string *string)
Append text to the current node, inserting into the last child of the current node, iff it&#39;s a Text node.
Definition: treebuilder.c:943
void(* hubbub_error_handler)(uint32_t line, uint32_t col, const char *message, void *pw)
Type of parse error handling function.
Definition: functypes.h:40
hubbub_error complete_script(hubbub_treebuilder *treebuilder)
Script processing and execution.
Definition: treebuilder.c:925
Item on the element stack.
Definition: internal.h:42
Definition: internal.h:20
Definition: internal.h:22
Definition: internal.h:32
Definition: internal.h:16
Definition: internal.h:17
Definition: internal.h:27
void adjust_svg_attributes(hubbub_treebuilder *treebuilder, hubbub_tag *tag)
Adjust SVG attributes.
bool frameset_ok
Whether to process a frameset.
Definition: internal.h:110
Definition: internal.h:19
void * document
Pointer to the document node.
Definition: internal.h:93
Definition: internal.h:27
Definition: internal.h:19
Definition: internal.h:30
Definition: internal.h:19
Definition: internal.h:30
Definition: internal.h:19
hubbub_ns
Possible namespaces.
Definition: types.h:63
hubbub_error formatting_list_insert(hubbub_treebuilder *treebuilder, formatting_list_entry *prev, formatting_list_entry *next, hubbub_ns ns, element_type type, void *node, uint32_t stack_index)
Insert an element into the list of active formatting elements.
Definition: treebuilder.c:1331
Definition: internal.h:27
Definition: internal.h:27
hubbub_error formatting_list_append(hubbub_treebuilder *treebuilder, hubbub_ns ns, element_type type, void *node, uint32_t stack_index)
Append an element to the end of the list of active formatting elements.
Definition: treebuilder.c:1291
void adjust_svg_tagname(hubbub_treebuilder *treebuilder, hubbub_tag *tag)
Adjust SVG tagnmes.
Definition: internal.h:32
insertion_mode second_mode
The secondary insertion mode.
Definition: internal.h:76
void adjust_mathml_attributes(hubbub_treebuilder *treebuilder, hubbub_tag *tag)
Adjust MathML attributes.
Definition: internal.h:32
Definition: internal.h:18
Definition: internal.h:27
Definition: internal.h:21
void * error_pw
Error handler data.
Definition: internal.h:125
Definition: internal.h:27
element_type type
Element type.
Definition: internal.h:45
element_type prev_node(hubbub_treebuilder *treebuilder)
Peek at the element below the top of the element stack.
Definition: treebuilder.c:1270
Definition: internal.h:32
Definition: internal.h:17
Definition: internal.h:30
hubbub_error element_stack_remove(hubbub_treebuilder *treebuilder, uint32_t index, hubbub_ns *ns, element_type *type, void **removed)
Remove a node from the stack of open elements.
Definition: treebuilder.c:1190
uint32_t element_in_scope(hubbub_treebuilder *treebuilder, element_type type, bool in_table)
Determine if an element is in (table) scope.
Definition: treebuilder.c:499
Definition: internal.h:30
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
Hubbub tree handler.
Definition: tree.h:273
Definition: internal.h:23
element_context details
Entry details.
Definition: internal.h:62
Treebuilder object.
Definition: internal.h:116
Definition: internal.h:35
Definition: internal.h:27
void reset_insertion_mode(hubbub_treebuilder *treebuilder)
Reset the insertion mode.
Definition: treebuilder.c:862
element_context * element_stack
Stack of open elements.
Definition: internal.h:79
void clear_active_formatting_list_to_marker(hubbub_treebuilder *treebuilder)
Clear the list of active formatting elements up to the last marker.
Definition: treebuilder.c:716
const char * element_type_to_name(element_type type)
Convert an element type to a name.
Definition: treebuilder.c:1492
void adjust_foreign_attributes(hubbub_treebuilder *treebuilder, hubbub_tag *tag)
Adjust foreign attributes.
Definition: internal.h:18
uint32_t current_node
Index of current node in stack.
Definition: internal.h:81
Definition: internal.h:19
hubbub_error parse_generic_rcdata(hubbub_treebuilder *treebuilder, const hubbub_token *token, bool rcdata)
Trigger parsing of generic (R)CDATA.
Definition: treebuilder.c:463
Definition: internal.h:32