Hubbub
|
#include <assert.h>
#include <string.h>
#include <strings.h>
#include <stdio.h>
#include "treebuilder/modes.h"
#include "treebuilder/internal.h"
#include "treebuilder/treebuilder.h"
#include "utils/utils.h"
Go to the source code of this file.
Macros | |
#define | S(x) x, SLEN(x) |
#define | mode(x) |
Functions | |
static bool | is_form_associated (element_type type) |
Determine if a node is form associated. More... | |
hubbub_error | hubbub_treebuilder_create (hubbub_tokeniser *tokeniser, hubbub_treebuilder **treebuilder) |
Create a hubbub treebuilder. More... | |
hubbub_error | hubbub_treebuilder_destroy (hubbub_treebuilder *treebuilder) |
Destroy a hubbub treebuilder. More... | |
hubbub_error | hubbub_treebuilder_setopt (hubbub_treebuilder *treebuilder, hubbub_treebuilder_opttype type, hubbub_treebuilder_optparams *params) |
Configure a hubbub treebuilder. More... | |
hubbub_error | hubbub_treebuilder_token_handler (const hubbub_token *token, void *pw) |
Handle tokeniser emitting a token. More... | |
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. More... | |
hubbub_error | process_comment_append (hubbub_treebuilder *treebuilder, const hubbub_token *token, void *parent) |
Process a comment token, appending it to the given parent. More... | |
hubbub_error | parse_generic_rcdata (hubbub_treebuilder *treebuilder, const hubbub_token *token, bool rcdata) |
Trigger parsing of generic (R)CDATA. More... | |
uint32_t | element_in_scope (hubbub_treebuilder *treebuilder, element_type type, bool in_table) |
Determine if an element is in (table) scope. More... | |
hubbub_error | reconstruct_active_formatting_list (hubbub_treebuilder *treebuilder) |
Reconstruct the list of active formatting elements. More... | |
hubbub_error | remove_node_from_dom (hubbub_treebuilder *treebuilder, void *node) |
Remove a node from the DOM. More... | |
void | clear_active_formatting_list_to_marker (hubbub_treebuilder *treebuilder) |
Clear the list of active formatting elements up to the last marker. More... | |
hubbub_error | insert_element (hubbub_treebuilder *treebuilder, const hubbub_tag *tag, bool push) |
Create element and insert it into the DOM, potentially pushing it on the stack. More... | |
void | close_implied_end_tags (hubbub_treebuilder *treebuilder, element_type except) |
Close implied end tags. More... | |
void | reset_insertion_mode (hubbub_treebuilder *treebuilder) |
Reset the insertion mode. More... | |
hubbub_error | complete_script (hubbub_treebuilder *treebuilder) |
Script processing and execution. More... | |
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's a Text node. More... | |
element_type | element_type_from_name (hubbub_treebuilder *treebuilder, const hubbub_string *tag_name) |
Convert an element name into an element type. More... | |
bool | is_special_element (element_type type) |
Determine if a node is a special element. More... | |
bool | is_scoping_element (element_type type) |
Determine if a node is a scoping element. More... | |
bool | is_formatting_element (element_type type) |
Determine if a node is a formatting element. More... | |
bool | is_phrasing_element (element_type type) |
Determine if a node is a phrasing element. More... | |
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. More... | |
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. More... | |
hubbub_error | element_stack_pop_until (hubbub_treebuilder *treebuilder, element_type type) |
Pop elements until an element of type "element" has been popped. More... | |
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. More... | |
uint32_t | current_table (hubbub_treebuilder *treebuilder) |
Find the stack index of the current table. More... | |
element_type | current_node (hubbub_treebuilder *treebuilder) |
Peek at the top element of the element stack. More... | |
element_type | prev_node (hubbub_treebuilder *treebuilder) |
Peek at the element below the top of the element stack. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
void | element_stack_dump (hubbub_treebuilder *treebuilder, FILE *fp) |
Dump an element stack to the given file pointer. More... | |
void | formatting_list_dump (hubbub_treebuilder *treebuilder, FILE *fp) |
Dump a formatting list to the given file pointer. More... | |
const char * | element_type_to_name (element_type type) |
Convert an element type to a name. More... | |
Variables | |
struct { | |
const char * name | |
size_t len | |
element_type type | |
} | name_type_map [] |
#define mode | ( | x | ) |
Referenced by hubbub_treebuilder_token_handler().
#define S | ( | x | ) | x, SLEN(x) |
Definition at line 21 of file treebuilder.c.
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's a Text node.
treebuilder | The treebuilder instance |
string | The string to append |
Definition at line 944 of file treebuilder.c.
References aa_insert_into_foster_parent(), hubbub_tree_handler::append_child, hubbub_treebuilder::context, hubbub_tree_handler::create_text, hubbub_tree_handler::ctx, hubbub_treebuilder_context::current_node, current_node(), hubbub_treebuilder_context::element_stack, HUBBUB_OK, hubbub_treebuilder_context::in_table_foster, element_context::node, TABLE, TBODY, TFOOT, THEAD, TR, hubbub_treebuilder::tree_handler, type, and hubbub_tree_handler::unref_node.
Referenced by handle_generic_rcdata(), handle_in_foreign_content(), handle_in_select(), process_character(), and process_characters_expect_whitespace().
void clear_active_formatting_list_to_marker | ( | hubbub_treebuilder * | treebuilder | ) |
Clear the list of active formatting elements up to the last marker.
treebuilder | The treebuilder instance containing the list |
Definition at line 717 of file treebuilder.c.
References hubbub_treebuilder::context, hubbub_tree_handler::ctx, formatting_list_entry::details, hubbub_treebuilder_context::formatting_list_end, formatting_list_remove(), is_scoping_element(), hubbub_treebuilder::tree_handler, type, element_context::type, and hubbub_tree_handler::unref_node.
Referenced by close_cell(), handle_in_caption(), handle_in_cell(), and process_0applet_button_marquee_object_in_body().
void close_implied_end_tags | ( | hubbub_treebuilder * | treebuilder, |
element_type | except | ||
) |
Close implied end tags.
treebuilder | The treebuilder instance |
except | Tag type to exclude from processing [DD,DT,LI,OPTION, OPTGROUP,P,RP,RT], UNKNOWN to exclude nothing |
Definition at line 829 of file treebuilder.c.
References hubbub_treebuilder::context, hubbub_tree_handler::ctx, hubbub_treebuilder_context::current_node, DD, DT, hubbub_treebuilder_context::element_stack, element_stack_pop(), LI, OPTGROUP, OPTION, P, RP, RT, hubbub_treebuilder::tree_handler, type, element_context::type, UNKNOWN, and hubbub_tree_handler::unref_node.
Referenced by close_cell(), handle_in_caption(), handle_in_cell(), process_0applet_button_marquee_object_in_body(), process_0container_in_body(), process_0dd_dt_li_in_body(), process_0form_in_body(), process_0generic_in_body(), and process_0h_in_body().
hubbub_error complete_script | ( | hubbub_treebuilder * | treebuilder | ) |
Script processing and execution.
treebuilder | The treebuilder instance |
Definition at line 926 of file treebuilder.c.
References hubbub_tree_handler::complete_script, hubbub_treebuilder::context, hubbub_tree_handler::ctx, hubbub_treebuilder_context::current_node, hubbub_treebuilder_context::element_stack, HUBBUB_OK, element_context::node, and hubbub_treebuilder::tree_handler.
Referenced by handle_generic_rcdata().
element_type current_node | ( | hubbub_treebuilder * | treebuilder | ) |
Peek at the top element of the element stack.
treebuilder | Treebuilder instance |
Definition at line 1259 of file treebuilder.c.
References hubbub_treebuilder::context, hubbub_treebuilder_context::current_node, hubbub_treebuilder_context::element_stack, and element_context::type.
Referenced by append_text(), clear_stack_table_context(), handle_in_foreign_content(), handle_in_frameset(), handle_in_select(), insert_element(), process_comment_append(), reconstruct_active_formatting_list(), and table_clear_stack().
uint32_t current_table | ( | hubbub_treebuilder * | treebuilder | ) |
Find the stack index of the current table.
Definition at line 1239 of file treebuilder.c.
References hubbub_treebuilder::context, hubbub_treebuilder_context::current_node, hubbub_treebuilder_context::element_stack, TABLE, and type.
Referenced by aa_insert_into_foster_parent(), handle_in_table(), and process_start_tag().
uint32_t element_in_scope | ( | hubbub_treebuilder * | treebuilder, |
element_type | type, | ||
bool | in_table | ||
) |
Determine if an element is in (table) scope.
treebuilder | Treebuilder to look in |
type | Element type to find |
in_table | Whether we're looking in table scope |
Definition at line 500 of file treebuilder.c.
References hubbub_treebuilder::context, hubbub_treebuilder_context::current_node, hubbub_treebuilder_context::element_stack, FOREIGNOBJECT, HUBBUB_NS_SVG, is_scoping_element(), element_context::ns, TABLE, and element_context::type.
Referenced by aa_find_and_validate_formatting_element(), close_cell(), handle_in_cell(), handle_in_select(), handle_in_select_in_table(), handle_in_table_body(), process_0applet_button_marquee_object_in_body(), process_0body_in_body(), process_0container_in_body(), process_0dd_dt_li_in_body(), process_0form_in_body(), process_0h_in_body(), process_0p_in_body(), process_button_in_body(), process_container_in_body(), process_dd_dt_li_in_body(), process_form_in_body(), process_hN_in_body(), process_hr_in_body(), process_nobr_in_body(), process_opt_in_body(), process_plaintext_in_body(), and table_sub_start_or_table_end().
void element_stack_dump | ( | hubbub_treebuilder * | treebuilder, |
FILE * | fp | ||
) |
Dump an element stack to the given file pointer.
treebuilder | The treebuilder instance |
fp | The file to dump to |
Definition at line 1456 of file treebuilder.c.
References hubbub_treebuilder::context, hubbub_treebuilder_context::current_node, hubbub_treebuilder_context::element_stack, element_type_to_name(), and type.
Referenced by handle_in_body().
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.
treebuilder | The treebuilder instance containing the stack |
ns | Pointer to location to receive element namespace |
type | Pointer to location to receive element type |
node | Pointer to location to receive node |
Definition at line 1113 of file treebuilder.c.
References hubbub_treebuilder::context, hubbub_treebuilder_context::current_node, hubbub_treebuilder_context::element_stack, hubbub_treebuilder_context::formatting_list_end, HTML, HUBBUB_OK, is_formatting_element(), is_scoping_element(), element_context::node, element_context::ns, formatting_list_entry::prev, formatting_list_entry::stack_index, TABLE, and element_context::type.
Referenced by aa_find_furthest_block(), act_as_if_end_tag_tr(), clear_stack_table_context(), close_cell(), close_implied_end_tags(), element_stack_pop_until(), foreign_break_out(), handle_generic_rcdata(), handle_in_caption(), handle_in_cell(), handle_in_column_group(), handle_in_frameset(), handle_in_head(), handle_in_head_noscript(), handle_in_row(), handle_in_select(), handle_in_table_body(), process_0applet_button_marquee_object_in_body(), process_0container_in_body(), process_0dd_dt_li_in_body(), process_0generic_in_body(), process_0h_in_body(), process_0p_in_body(), process_a_in_body(), process_applet_marquee_object_in_body(), process_button_in_body(), process_dd_dt_li_in_body(), process_hN_in_body(), process_nobr_in_body(), process_presentational_in_body(), reconstruct_active_formatting_list(), table_clear_stack(), and table_sub_start_or_table_end().
hubbub_error element_stack_pop_until | ( | hubbub_treebuilder * | treebuilder, |
element_type | type | ||
) |
Pop elements until an element of type "element" has been popped.
Definition at line 1162 of file treebuilder.c.
References hubbub_treebuilder::context, hubbub_tree_handler::ctx, hubbub_treebuilder_context::current_node, element_stack_pop(), HUBBUB_OK, hubbub_treebuilder::tree_handler, UNKNOWN, and hubbub_tree_handler::unref_node.
Referenced by handle_in_select(), handle_in_select_in_table(), handle_in_table(), and process_frameset_in_body().
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.
treebuilder | The treebuilder instance containing the stack |
ns | The namespace of element being pushed |
type | The type of element being pushed |
node | The node to push |
Definition at line 1076 of file treebuilder.c.
References hubbub_treebuilder::context, hubbub_treebuilder_context::current_node, hubbub_treebuilder_context::element_stack, ELEMENT_STACK_CHUNK, HUBBUB_NOMEM, HUBBUB_OK, element_context::node, element_context::ns, hubbub_treebuilder_context::stack_alloc, type, and element_context::type.
Referenced by handle_after_head(), insert_element(), and reconstruct_active_formatting_list().
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.
treebuilder | The treebuilder instance |
index | The index of the node to remove |
ns | Pointer to location to receive namespace |
type | Pointer to location to receive type |
removed | Pointer to location to receive removed node |
Definition at line 1191 of file treebuilder.c.
References hubbub_treebuilder::context, hubbub_treebuilder_context::current_node, hubbub_treebuilder_context::element_stack, hubbub_treebuilder_context::formatting_list_end, HTML, HUBBUB_OK, is_formatting_element(), is_scoping_element(), element_context::node, element_context::ns, formatting_list_entry::prev, formatting_list_entry::stack_index, TABLE, and element_context::type.
Referenced by handle_after_head(), process_0form_in_body(), and process_a_in_body().
element_type element_type_from_name | ( | hubbub_treebuilder * | treebuilder, |
const hubbub_string * | tag_name | ||
) |
Convert an element name into an element type.
treebuilder | The treebuilder instance |
tag_name | The tag name to consider |
Definition at line 987 of file treebuilder.c.
References len, hubbub_string::len, N_ELEMENTS, name, name_type_map, hubbub_string::ptr, type, UNKNOWN, and UNUSED.
Referenced by handle_after_after_body(), handle_after_after_frameset(), handle_after_body(), handle_after_frameset(), handle_after_head(), handle_before_head(), handle_before_html(), handle_generic_rcdata(), handle_in_caption(), handle_in_cell(), handle_in_column_group(), handle_in_foreign_content(), handle_in_frameset(), handle_in_head(), handle_in_head_noscript(), handle_in_row(), handle_in_select(), handle_in_select_in_table(), handle_in_table(), handle_in_table_body(), insert_element(), parse_generic_rcdata(), process_end_tag(), and process_start_tag().
const char* element_type_to_name | ( | element_type | type | ) |
Convert an element type to a name.
type | The element type |
Definition at line 1493 of file treebuilder.c.
References name_type_map.
Referenced by element_stack_dump(), and formatting_list_dump().
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.
treebuilder | Treebuilder instance containing list |
ns | Namespace of node being inserted |
type | Type of node being inserted |
node | Node being inserted |
stack_index | Index into stack of open elements |
Definition at line 1292 of file treebuilder.c.
References hubbub_treebuilder::context, formatting_list_entry::details, hubbub_treebuilder_context::formatting_list, hubbub_treebuilder_context::formatting_list_end, HUBBUB_NOMEM, HUBBUB_OK, formatting_list_entry::next, element_context::node, element_context::ns, formatting_list_entry::prev, formatting_list_entry::stack_index, type, and element_context::type.
Referenced by handle_in_row(), handle_in_table(), process_a_in_body(), process_applet_marquee_object_in_body(), process_button_in_body(), process_nobr_in_body(), and process_presentational_in_body().
void formatting_list_dump | ( | hubbub_treebuilder * | treebuilder, |
FILE * | fp | ||
) |
Dump a formatting list to the given file pointer.
treebuilder | The treebuilder instance |
fp | The file to dump to |
Definition at line 1475 of file treebuilder.c.
References hubbub_treebuilder::context, formatting_list_entry::details, element_type_to_name(), hubbub_treebuilder_context::formatting_list, formatting_list_entry::next, element_context::node, formatting_list_entry::stack_index, and element_context::type.
Referenced by handle_in_body().
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.
treebuilder | Treebuilder instance containing list |
prev | Previous entry |
next | Next entry |
ns | Namespace of node being inserted |
type | Type of node being inserted |
node | Node being inserted |
stack_index | Index into stack of open elements |
Definition at line 1332 of file treebuilder.c.
References hubbub_treebuilder::context, formatting_list_entry::details, hubbub_treebuilder_context::formatting_list, hubbub_treebuilder_context::formatting_list_end, HUBBUB_NOMEM, HUBBUB_OK, formatting_list_entry::next, element_context::node, element_context::ns, formatting_list_entry::prev, formatting_list_entry::stack_index, type, and element_context::type.
Referenced by process_0presentational_in_body().
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.
treebuilder | Treebuilder instance containing list |
entry | The item to remove |
ns | Pointer to location to receive namespace of node |
type | Pointer to location to receive type of node |
node | Pointer to location to receive node |
stack_index | Pointer to location to receive stack index |
Definition at line 1384 of file treebuilder.c.
References hubbub_treebuilder::context, formatting_list_entry::details, hubbub_treebuilder_context::formatting_list, hubbub_treebuilder_context::formatting_list_end, HUBBUB_OK, formatting_list_entry::next, element_context::node, element_context::ns, formatting_list_entry::prev, formatting_list_entry::stack_index, and element_context::type.
Referenced by aa_find_and_validate_formatting_element(), aa_find_furthest_block(), clear_active_formatting_list_to_marker(), handle_in_table(), process_0presentational_in_body(), and process_a_in_body().
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.
treebuilder | Treebuilder instance containing list |
entry | The item to replace |
ns | Replacement node namespace |
type | Replacement node type |
node | Replacement node |
stack_index | Replacement stack index |
ons | Pointer to location to receive old namespace |
otype | Pointer to location to receive old type |
onode | Pointer to location to receive old node |
ostack_index | Pointer to location to receive old stack index |
Definition at line 1424 of file treebuilder.c.
References formatting_list_entry::details, HUBBUB_OK, element_context::node, element_context::ns, formatting_list_entry::stack_index, type, element_context::type, and UNUSED.
Referenced by aa_clone_and_replace_entries(), and reconstruct_active_formatting_list().
hubbub_error hubbub_treebuilder_create | ( | hubbub_tokeniser * | tokeniser, |
hubbub_treebuilder ** | treebuilder | ||
) |
Create a hubbub treebuilder.
tokeniser | Underlying tokeniser instance |
treebuilder | Pointer to location to receive treebuilder instance |
Definition at line 94 of file treebuilder.c.
References hubbub_treebuilder::context, hubbub_treebuilder_context::element_stack, ELEMENT_STACK_CHUNK, hubbub_treebuilder::error_handler, hubbub_treebuilder::error_pw, hubbub_treebuilder_context::frameset_ok, hubbub_tokeniser_optparams::handler, HTML, HUBBUB_BADPARM, HUBBUB_NOMEM, HUBBUB_OK, hubbub_tokeniser_setopt(), HUBBUB_TOKENISER_TOKEN_HANDLER, hubbub_treebuilder_token_handler(), INITIAL, hubbub_treebuilder_context::mode, hubbub_tokeniser_optparams::pw, hubbub_treebuilder_context::stack_alloc, hubbub_treebuilder_context::strip_leading_lr, hubbub_tokeniser_optparams::token_handler, hubbub_treebuilder::tokeniser, hubbub_treebuilder::tree_handler, and element_context::type.
Referenced by hubbub_parser_create().
hubbub_error hubbub_treebuilder_destroy | ( | hubbub_treebuilder * | treebuilder | ) |
Destroy a hubbub treebuilder.
treebuilder | The treebuilder instance to destroy |
Definition at line 155 of file treebuilder.c.
References hubbub_treebuilder::context, hubbub_tree_handler::ctx, hubbub_treebuilder_context::current_node, formatting_list_entry::details, hubbub_treebuilder_context::document, hubbub_treebuilder_context::element_stack, hubbub_treebuilder_context::form_element, hubbub_treebuilder_context::formatting_list, hubbub_tokeniser_optparams::handler, hubbub_treebuilder_context::head_element, HTML, HUBBUB_BADPARM, HUBBUB_OK, hubbub_tokeniser_setopt(), HUBBUB_TOKENISER_TOKEN_HANDLER, formatting_list_entry::next, element_context::node, hubbub_tokeniser_optparams::pw, hubbub_tokeniser_optparams::token_handler, hubbub_treebuilder::tokeniser, hubbub_treebuilder::tree_handler, element_context::type, and hubbub_tree_handler::unref_node.
Referenced by hubbub_parser_destroy(), and hubbub_parser_setopt().
hubbub_error hubbub_treebuilder_setopt | ( | hubbub_treebuilder * | treebuilder, |
hubbub_treebuilder_opttype | type, | ||
hubbub_treebuilder_optparams * | params | ||
) |
Configure a hubbub treebuilder.
treebuilder | The treebuilder instance to configure |
type | The option type to configure |
params | Pointer to option-specific parameters |
Definition at line 232 of file treebuilder.c.
References hubbub_treebuilder::context, hubbub_treebuilder_context::document, hubbub_treebuilder_optparams::document_node, hubbub_treebuilder_optparams::enable_scripting, hubbub_treebuilder_context::enable_scripting, hubbub_treebuilder_optparams::error_handler, hubbub_treebuilder::error_handler, hubbub_treebuilder::error_pw, hubbub_treebuilder_optparams::handler, HUBBUB_BADPARM, HUBBUB_OK, HUBBUB_TREEBUILDER_DOCUMENT_NODE, HUBBUB_TREEBUILDER_ENABLE_SCRIPTING, HUBBUB_TREEBUILDER_ERROR_HANDLER, HUBBUB_TREEBUILDER_TREE_HANDLER, hubbub_treebuilder_optparams::pw, hubbub_treebuilder_optparams::tree_handler, and hubbub_treebuilder::tree_handler.
Referenced by hubbub_parser_setopt().
hubbub_error hubbub_treebuilder_token_handler | ( | const hubbub_token * | token, |
void * | pw | ||
) |
Handle tokeniser emitting a token.
token | The emitted token |
pw | Pointer to treebuilder instance |
Definition at line 265 of file treebuilder.c.
References AFTER_AFTER_BODY, AFTER_AFTER_FRAMESET, AFTER_BODY, AFTER_FRAMESET, AFTER_HEAD, BEFORE_HEAD, BEFORE_HTML, hubbub_treebuilder::context, hubbub_treebuilder_context::current_node, hubbub_treebuilder_context::document, GENERIC_RCDATA, handle_after_after_body(), handle_after_after_frameset(), handle_after_body(), handle_after_frameset(), handle_after_head(), handle_before_head(), handle_before_html(), handle_generic_rcdata(), handle_in_body(), handle_in_caption(), handle_in_cell(), handle_in_column_group(), handle_in_foreign_content(), handle_in_frameset(), handle_in_head(), handle_in_head_noscript(), handle_in_row(), handle_in_select(), handle_in_select_in_table(), handle_in_table(), handle_in_table_body(), handle_initial(), HUBBUB_OK, HUBBUB_REPROCESS, IN_BODY, IN_CAPTION, IN_CELL, IN_COLUMN_GROUP, IN_FOREIGN_CONTENT, IN_FRAMESET, IN_HEAD, IN_HEAD_NOSCRIPT, IN_ROW, IN_SELECT, IN_SELECT_IN_TABLE, IN_TABLE, IN_TABLE_BODY, INITIAL, hubbub_treebuilder_context::mode, mode, and hubbub_treebuilder::tree_handler.
Referenced by hubbub_treebuilder_create(), and process_as_in_secondary().
hubbub_error insert_element | ( | hubbub_treebuilder * | treebuilder, |
const hubbub_tag * | tag, | ||
bool | push | ||
) |
Create element and insert it into the DOM, potentially pushing it on the stack.
treebuilder | The treebuilder instance |
tag | The element to insert |
push | Whether to push the element onto the stack |
Definition at line 752 of file treebuilder.c.
References aa_insert_into_foster_parent(), hubbub_tree_handler::append_child, hubbub_treebuilder::context, hubbub_tree_handler::create_element, hubbub_tree_handler::ctx, hubbub_treebuilder_context::current_node, current_node(), hubbub_treebuilder_context::element_stack, element_stack_push(), element_type_from_name(), hubbub_tree_handler::form_associate, hubbub_treebuilder_context::form_element, HUBBUB_OK, hubbub_treebuilder_context::in_table_foster, is_form_associated(), hubbub_tag::name, element_context::node, hubbub_tag::ns, remove_node_from_dom(), TABLE, TBODY, TFOOT, THEAD, TR, hubbub_treebuilder::tree_handler, type, and hubbub_tree_handler::unref_node.
Referenced by handle_after_head(), handle_before_head(), handle_in_column_group(), handle_in_foreign_content(), handle_in_frameset(), handle_in_head(), handle_in_row(), handle_in_select(), handle_in_table(), handle_in_table_body(), parse_generic_rcdata(), process_0br_in_body(), process_a_in_body(), process_applet_marquee_object_in_body(), process_button_in_body(), process_container_in_body(), process_dd_dt_li_in_body(), process_form_in_body(), process_frameset_in_body(), process_hN_in_body(), process_hr_in_body(), process_image_in_body(), process_input_in_table(), process_isindex_in_body(), process_meta_in_head(), process_nobr_in_body(), process_opt_in_body(), process_phrasing_in_body(), process_plaintext_in_body(), process_presentational_in_body(), process_select_in_body(), and process_start_tag().
|
static |
Determine if a node is form associated.
type | Node type to consider |
Definition at line 1060 of file treebuilder.c.
References BUTTON, FIELDSET, INPUT, LABEL, OUTPUT, SELECT, and TEXTAREA.
Referenced by insert_element().
bool is_formatting_element | ( | element_type | type | ) |
Determine if a node is a formatting element.
type | Node type to consider |
Definition at line 1038 of file treebuilder.c.
Referenced by aa_find_furthest_block(), aa_remove_element_stack_item(), element_stack_pop(), element_stack_remove(), process_0generic_in_body(), and process_dd_dt_li_in_body().
bool is_phrasing_element | ( | element_type | type | ) |
Determine if a node is a phrasing element.
type | Node type to consider |
Definition at line 1049 of file treebuilder.c.
References U.
Referenced by aa_find_furthest_block(), process_0generic_in_body(), and process_dd_dt_li_in_body().
bool is_scoping_element | ( | element_type | type | ) |
Determine if a node is a scoping element.
type | Node type to consider |
Definition at line 1027 of file treebuilder.c.
Referenced by aa_find_formatting_element(), aa_remove_element_stack_item(), clear_active_formatting_list_to_marker(), element_in_scope(), element_in_scope_in_non_html_ns(), element_stack_pop(), element_stack_remove(), and reconstruct_active_formatting_list().
bool is_special_element | ( | element_type | type | ) |
Determine if a node is a special element.
type | Node type to consider |
Definition at line 1016 of file treebuilder.c.
References WBR.
hubbub_error parse_generic_rcdata | ( | hubbub_treebuilder * | treebuilder, |
const hubbub_token * | token, | ||
bool | rcdata | ||
) |
Trigger parsing of generic (R)CDATA.
treebuilder | The treebuilder instance |
token | The current token |
rcdata | True for RCDATA, false for CDATA |
Definition at line 464 of file treebuilder.c.
References hubbub_treebuilder_context::collect, hubbub_tokeniser_optparams::content_model, hubbub_treebuilder::context, hubbub_token::data, element_type_from_name(), GENERIC_RCDATA, HUBBUB_CONTENT_MODEL_CDATA, HUBBUB_CONTENT_MODEL_RCDATA, HUBBUB_OK, HUBBUB_TOKENISER_CONTENT_MODEL, hubbub_tokeniser_setopt(), insert_element(), hubbub_treebuilder_context::mode, hubbub_tokeniser_optparams::model, hubbub_tag::name, hubbub_token::tag, hubbub_treebuilder::tokeniser, type, and hubbub_treebuilder_context::type.
Referenced by handle_in_head(), process_start_tag(), and process_textarea_in_body().
element_type prev_node | ( | hubbub_treebuilder * | treebuilder | ) |
Peek at the element below the top of the element stack.
treebuilder | Treebuilder instance |
Definition at line 1271 of file treebuilder.c.
References hubbub_treebuilder::context, hubbub_treebuilder_context::current_node, hubbub_treebuilder_context::element_stack, element_context::type, and UNKNOWN.
Referenced by handle_in_select(), and reconstruct_active_formatting_list().
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.
treebuilder | The treebuilder instance |
token | The character token |
insert_into_current_node | Whether to insert whitespace into current node |
Definition at line 375 of file treebuilder.c.
References append_text(), hubbub_token::character, hubbub_token::data, HUBBUB_OK, HUBBUB_REPROCESS, len, hubbub_string::len, and hubbub_string::ptr.
Referenced by handle_after_after_body(), handle_after_after_frameset(), handle_after_frameset(), handle_after_head(), handle_before_head(), handle_before_html(), handle_in_column_group(), handle_in_frameset(), handle_in_head(), handle_in_head_noscript(), handle_in_table(), and handle_initial().
hubbub_error process_comment_append | ( | hubbub_treebuilder * | treebuilder, |
const hubbub_token * | token, | ||
void * | parent | ||
) |
Process a comment token, appending it to the given parent.
treebuilder | The treebuilder instance |
token | The comment token |
parent | The node to append to |
Definition at line 421 of file treebuilder.c.
References aa_insert_into_foster_parent(), hubbub_tree_handler::append_child, hubbub_token::comment, hubbub_treebuilder::context, hubbub_tree_handler::create_comment, hubbub_tree_handler::ctx, current_node(), hubbub_token::data, HUBBUB_OK, hubbub_treebuilder_context::in_table_foster, TABLE, TBODY, TFOOT, THEAD, TR, hubbub_treebuilder::tree_handler, type, and hubbub_tree_handler::unref_node.
Referenced by handle_after_after_body(), handle_after_after_frameset(), handle_after_body(), handle_after_frameset(), handle_after_head(), handle_before_head(), handle_before_html(), handle_in_body(), handle_in_column_group(), handle_in_foreign_content(), handle_in_frameset(), handle_in_head(), handle_in_select(), handle_in_table(), and handle_initial().
hubbub_error reconstruct_active_formatting_list | ( | hubbub_treebuilder * | treebuilder | ) |
Reconstruct the list of active formatting elements.
treebuilder | Treebuilder instance containing list |
Definition at line 543 of file treebuilder.c.
References aa_insert_into_foster_parent(), hubbub_tree_handler::append_child, hubbub_tree_handler::clone_node, hubbub_treebuilder::context, hubbub_tree_handler::ctx, hubbub_treebuilder_context::current_node, current_node(), formatting_list_entry::details, hubbub_treebuilder_context::element_stack, element_stack_pop(), element_stack_push(), hubbub_treebuilder_context::formatting_list, hubbub_treebuilder_context::formatting_list_end, formatting_list_replace(), HUBBUB_OK, hubbub_treebuilder_context::in_table_foster, is_scoping_element(), formatting_list_entry::next, element_context::node, element_context::ns, formatting_list_entry::prev, prev_node(), hubbub_tree_handler::ref_node, remove_node_from_dom(), formatting_list_entry::stack_index, TABLE, TBODY, TFOOT, THEAD, TR, hubbub_treebuilder::tree_handler, type, element_context::type, and hubbub_tree_handler::unref_node.
Referenced by process_0br_in_body(), process_a_in_body(), process_applet_marquee_object_in_body(), process_button_in_body(), process_character(), process_image_in_body(), process_isindex_in_body(), process_nobr_in_body(), process_opt_in_body(), process_phrasing_in_body(), process_presentational_in_body(), process_select_in_body(), and process_start_tag().
hubbub_error remove_node_from_dom | ( | hubbub_treebuilder * | treebuilder, |
void * | node | ||
) |
Remove a node from the DOM.
treebuilder | Treebuilder instance |
node | Node to remove |
Definition at line 681 of file treebuilder.c.
References hubbub_tree_handler::ctx, hubbub_tree_handler::get_parent, HUBBUB_OK, hubbub_tree_handler::remove_child, hubbub_treebuilder::tree_handler, and hubbub_tree_handler::unref_node.
Referenced by aa_insert_into_foster_parent(), aa_reparent_node(), handle_in_row(), insert_element(), process_a_in_body(), process_applet_marquee_object_in_body(), process_button_in_body(), process_frameset_in_body(), process_nobr_in_body(), process_presentational_in_body(), and reconstruct_active_formatting_list().
void reset_insertion_mode | ( | hubbub_treebuilder * | treebuilder | ) |
Reset the insertion mode.
treebuilder | The treebuilder to reset |
Definition at line 863 of file treebuilder.c.
References BODY, CAPTION, COLGROUP, hubbub_treebuilder::context, hubbub_treebuilder_context::current_node, hubbub_treebuilder_context::element_stack, FRAMESET, HEAD, HTML, HUBBUB_NS_HTML, IN_BODY, IN_CAPTION, IN_CELL, IN_FOREIGN_CONTENT, IN_ROW, IN_TABLE, IN_TABLE_BODY, hubbub_treebuilder_context::mode, hubbub_treebuilder_context::second_mode, SELECT, TABLE, TBODY, TD, TFOOT, TH, THEAD, TR, and type.
Referenced by handle_in_select(), handle_in_select_in_table(), and handle_in_table().
size_t len |
Definition at line 25 of file treebuilder.c.
Referenced by element_type_from_name(), and process_characters_expect_whitespace().
const char* name |
Definition at line 24 of file treebuilder.c.
Referenced by element_type_from_name().
const { ... } name_type_map[] |
Referenced by element_type_from_name(), and element_type_to_name().
element_type type |
Definition at line 26 of file treebuilder.c.
Referenced by aa_find_and_validate_formatting_element(), aa_find_furthest_block(), aa_remove_element_stack_item(), append_text(), clear_active_formatting_list_to_marker(), clear_stack_table_context(), close_cell(), close_implied_end_tags(), current_table(), element_stack_dump(), element_stack_push(), element_type_from_name(), foreign_break_out(), formatting_list_append(), formatting_list_insert(), formatting_list_replace(), handle_after_after_body(), handle_after_after_frameset(), handle_after_body(), handle_after_frameset(), handle_after_head(), handle_before_head(), handle_before_html(), handle_generic_rcdata(), handle_in_body(), handle_in_caption(), handle_in_cell(), handle_in_column_group(), handle_in_foreign_content(), handle_in_frameset(), handle_in_head(), handle_in_head_noscript(), handle_in_row(), handle_in_select(), handle_in_select_in_table(), handle_in_table(), handle_in_table_body(), insert_element(), parse_generic_rcdata(), process_0p_in_body(), process_a_in_body(), process_applet_marquee_object_in_body(), process_button_in_body(), process_comment_append(), process_end_tag(), process_hN_in_body(), process_nobr_in_body(), process_presentational_in_body(), process_start_tag(), reconstruct_active_formatting_list(), reset_insertion_mode(), and table_clear_stack().