121 lxb_html_tree_token_callback,
205 status = lxb_html_tree_insertion_mode(ctx, token);
252 return tree->
mode(tree, token);
261 return tree->
mode(tree, token);
265 return tree->
mode(tree, token);
274 return tree->
mode(tree, token);
281 return tree->
mode(tree, token);
286 return tree->
mode(tree, token);
312 if (override_target !=
NULL) {
313 target = override_target;
327 size_t last_temp_idx, last_table_idx;
339 if(last_temp !=
NULL && (last_table ==
NULL
340 || last_temp_idx > last_table_idx))
348 else if (last_table ==
NULL) {
355 adjusted_location = last_table;
367 adjusted_location = target;
370 if (adjusted_location ==
NULL) {
388 return adjusted_location;
406 if (element ==
NULL) {
463 while (token_attr !=
NULL) {
467 token_attr = token_attr->
next;
497 token_attr = token_attr->
next;
515 if (new_attr ==
NULL) {
549 attrs =
attr->node.owner_document->attrs;
552 if (
data->entry.length == 13
562 attr->qualified_name =
data->attr_id;
576 size_t len =
sizeof(lxb_html_tree_res_attr_adjust_svg_map)
579 attrs =
attr->node.owner_document->attrs;
583 for (
size_t i = 0; i <
len; i++) {
584 adjust = &lxb_html_tree_res_attr_adjust_svg_map[i];
586 if (
data->entry.length == adjust->
len
596 attr->qualified_name =
data->attr_id;
616 size_t len =
sizeof(lxb_html_tree_res_attr_adjust_foreign_map)
619 attrs =
attr->node.owner_document->attrs;
624 for (
size_t i = 0; i <
len; i++) {
625 adjust = &lxb_html_tree_res_attr_adjust_foreign_map[i];
638 attr->qualified_name =
data->attr_id;
644 if (attr_data ==
NULL) {
652 if (prefix_data ==
NULL) {
659 attr->node.ns = adjust->
ns;
706 if (ret_node !=
NULL) {
724 if (ret_node !=
NULL) {
725 *ret_node =
pos->prev;
736 if (ret_node !=
NULL) {
737 *ret_node =
pos->last_child;
774 if (ret_node !=
NULL) {
809 if (comment ==
NULL) {
837 if (doctype_node ==
NULL) {
869 if (element ==
NULL) {
895 if (element ==
NULL) {
1045 size_t ancestor = idx;
1049 if (ancestor == 0) {
1077 if (
last ==
false) {
1114 if (
last ==
false) {
1190 if (node == by_node) {
1406 while (outer_loop < 8) {
1411 size_t formatting_index = 0;
1418 if (afe_list[idx] == marker) {
1421 else if (afe_list[idx]->local_name == subject) {
1422 formatting_index = idx;
1423 formatting_element = afe_list[idx];
1429 if (formatting_element ==
NULL) {
1434 size_t oel_formatting_idx;
1437 &oel_formatting_idx);
1443 formatting_element);
1460 if (formatting_element != node) {
1467 size_t furthest_block_idx = 0;
1470 for (furthest_block_idx = oel_formatting_idx;
1471 furthest_block_idx < oel_idx;
1472 furthest_block_idx++)
1475 oel_list[furthest_block_idx]->ns,
1478 furthest_block = oel_list[furthest_block_idx];
1485 if (furthest_block ==
NULL) {
1490 formatting_element);
1498 lxb_dom_node_t *common_ancestor = oel_list[oel_formatting_idx - 1];
1501 size_t bookmark = formatting_index;
1506 size_t node_idx = furthest_block_idx;
1509 size_t inner_loop_counter = 0;
1513 inner_loop_counter++;
1518 if (node_idx == 0) {
1523 node = oel_list[node_idx];
1526 if (node == formatting_element) {
1531 size_t afe_node_idx;
1536 if (inner_loop_counter > 3 && is) {
1557 if (element ==
NULL) {
1565 afe_list[afe_node_idx] = node;
1566 oel_list[node_idx] = node;
1569 if (
last == furthest_block) {
1570 bookmark = afe_node_idx + 1;
1611 if (element ==
NULL) {
1621 while (node !=
NULL) {
1651 &furthest_block_idx);
1654 furthest_block_idx);
1677 if (
attr->value->length == 9
1684 if (
attr->value->length == 21
1686 (
const lxb_char_t *)
"application/xhtml+xml"))
lxb_inline size_t lexbor_array_length(lexbor_array_t *array)
void lexbor_array_obj_clean(lexbor_array_obj_t *array)
lexbor_array_obj_t * lexbor_array_obj_create(void)
lxb_status_t lexbor_array_obj_init(lexbor_array_obj_t *array, size_t size, size_t struct_size)
lexbor_array_obj_t * lexbor_array_obj_destroy(lexbor_array_obj_t *array, bool self_destroy)
@ LXB_STATUS_ERROR_MEMORY_ALLOCATION
@ LXB_STATUS_ERROR_OBJECT_IS_NULL
@ LXB_STATUS_ERROR_WRONG_ARGS
#define lexbor_assert(val)
lxb_dom_document_type_t * lxb_dom_document_type_interface_destroy(lxb_dom_document_type_t *document_type)
struct lxb_dom_document_fragment lxb_dom_document_fragment_t
struct lxb_dom_document_type lxb_dom_document_type_t
#define lxb_dom_interface_element(obj)
#define lxb_dom_interface_node(obj)
struct lxb_dom_comment lxb_dom_comment_t
#define lxb_dom_interface_document(obj)
struct lxb_dom_node lxb_dom_node_t
struct lxb_dom_character_data lxb_dom_character_data_t
#define lxb_dom_interface_comment(obj)
#define lxb_dom_interface_document_type(obj)
struct lxb_dom_attr lxb_dom_attr_t
#define lxb_dom_interface_character_data(obj)
struct lxb_dom_element lxb_dom_element_t
#define lxb_dom_interface_text(obj)
lexbor_array_t * lexbor_array_create(void)
lexbor_array_t * lexbor_array_destroy(lexbor_array_t *array, bool self_destroy)
void lexbor_array_clean(lexbor_array_t *array)
lxb_status_t lexbor_array_init(lexbor_array_t *array, size_t size)
lxb_dom_interface_t * lxb_html_interface_destroy(lxb_dom_interface_t *intrfc)
lxb_html_tokenizer_t * lxb_html_tokenizer_ref(lxb_html_tokenizer_t *tkz)
lxb_html_tokenizer_t * lxb_html_tokenizer_unref(lxb_html_tokenizer_t *tkz)
lxb_inline lxb_char_t * lexbor_hash_entry_str(const lexbor_hash_entry_t *entry)
struct lexbor_hash lexbor_hash_t
hash(string $algo, string $data, bool $binary=false, array $options=[])
struct lxb_html_tokenizer lxb_html_tokenizer_t
struct lxb_html_tree lxb_html_tree_t
#define lxb_html_interface_element(obj)
#define lxb_html_interface_document(obj)
struct lxb_html_element lxb_html_element_t
#define lxb_html_interface_template(obj)
struct lxb_html_document lxb_html_document_t
@ LXB_HTML_DOCUMENT_READY_STATE_COMPLETE
@ LXB_HTML_TAG_CATEGORY_SCOPE_TABLE
@ LXB_HTML_TAG_CATEGORY_SPECIAL
@ LXB_HTML_TAG_CATEGORY_SCOPE
lxb_inline bool lxb_html_tag_is_category(lxb_tag_id_t tag_id, lxb_ns_id_t ns, lxb_html_tag_category_t cat)
int lxb_html_tag_category_t
lxb_status_t lxb_html_token_make_text(lxb_html_token_t *token, lexbor_str_t *str, lexbor_mraw_t *mraw)
lxb_status_t lxb_html_token_doctype_parse(lxb_html_token_t *token, lxb_dom_document_type_t *doc_type)
@ LXB_HTML_TOKEN_TYPE_CLOSE
lxb_inline void lxb_html_tokenizer_state_set(lxb_html_tokenizer_t *tkz, lxb_html_tokenizer_state_f state)
lxb_inline void lxb_html_tokenizer_tmp_tag_id_set(lxb_html_tokenizer_t *tkz, lxb_tag_id_t tag_id)
lxb_inline void lxb_html_tokenizer_callback_token_done_set(lxb_html_tokenizer_t *tkz, lxb_html_tokenizer_token_f call_func, void *ctx)
lxb_html_tree_error_t * lxb_html_tree_error_add(lexbor_array_obj_t *parse_errors, lxb_html_token_t *token, lxb_html_tree_error_id_t id)
@ LXB_HTML_RULES_ERROR_UNELINOPELST
@ LXB_HTML_RULES_ERROR_MIELINOPELST
@ LXB_HTML_RULES_ERROR_MIELINSC
LXB_API bool lxb_html_tree_insertion_mode_initial(lxb_html_tree_t *tree, lxb_html_token_t *token)
LXB_API bool lxb_html_tree_insertion_mode_in_head(lxb_html_tree_t *tree, lxb_html_token_t *token)
LXB_API bool lxb_html_tree_insertion_mode_in_caption(lxb_html_tree_t *tree, lxb_html_token_t *token)
LXB_API bool lxb_html_tree_insertion_mode_in_table_body(lxb_html_tree_t *tree, lxb_html_token_t *token)
LXB_API bool lxb_html_tree_insertion_mode_in_select(lxb_html_tree_t *tree, lxb_html_token_t *token)
LXB_API bool lxb_html_tree_insertion_mode_after_head(lxb_html_tree_t *tree, lxb_html_token_t *token)
LXB_API bool lxb_html_tree_insertion_mode_in_cell(lxb_html_tree_t *tree, lxb_html_token_t *token)
LXB_API bool lxb_html_tree_insertion_mode_text(lxb_html_tree_t *tree, lxb_html_token_t *token)
LXB_API bool lxb_html_tree_insertion_mode_before_head(lxb_html_tree_t *tree, lxb_html_token_t *token)
LXB_API bool lxb_html_tree_insertion_mode_in_table(lxb_html_tree_t *tree, lxb_html_token_t *token)
LXB_API bool lxb_html_tree_insertion_mode_foreign_content(lxb_html_tree_t *tree, lxb_html_token_t *token)
LXB_API bool lxb_html_tree_insertion_mode_in_select_in_table(lxb_html_tree_t *tree, lxb_html_token_t *token)
LXB_API bool lxb_html_tree_insertion_mode_in_row(lxb_html_tree_t *tree, lxb_html_token_t *token)
LXB_API bool lxb_html_tree_insertion_mode_in_column_group(lxb_html_tree_t *tree, lxb_html_token_t *token)
LXB_API bool lxb_html_tree_insertion_mode_in_body(lxb_html_tree_t *tree, lxb_html_token_t *token)
LXB_API bool lxb_html_tree_insertion_mode_in_frameset(lxb_html_tree_t *tree, lxb_html_token_t *token)
lxb_dom_attr_t * lxb_dom_attr_interface_create(lxb_dom_document_t *document)
lxb_status_t lxb_dom_attr_set_value_wo_copy(lxb_dom_attr_t *attr, lxb_char_t *value, size_t value_len)
const lxb_dom_attr_data_t * lxb_dom_attr_data_by_id(lexbor_hash_t *hash, lxb_dom_attr_id_t attr_id)
lxb_status_t lxb_dom_attr_clone_name_value(lxb_dom_attr_t *attr_from, lxb_dom_attr_t *attr_to)
lxb_status_t lxb_dom_element_attr_append(lxb_dom_element_t *element, lxb_dom_attr_t *attr)
lxb_dom_attr_t * lxb_dom_element_attr_is_exist(lxb_dom_element_t *element, const lxb_char_t *qualified_name, size_t length)
lxb_dom_attr_t * lxb_dom_element_attr_by_local_name_data(lxb_dom_element_t *element, const lxb_dom_attr_data_t *data)
void lxb_dom_node_remove_wo_events(lxb_dom_node_t *node)
void lxb_dom_node_remove(lxb_dom_node_t *node)
void lxb_dom_node_insert_child_wo_events(lxb_dom_node_t *to, lxb_dom_node_t *node)
lxb_dom_node_t * lxb_html_tree_element_in_scope_by_node(lxb_html_tree_t *tree, lxb_dom_node_t *by_node, lxb_html_tag_category_t ct)
lxb_status_t lxb_html_tree_adjust_mathml_attributes(lxb_html_tree_t *tree, lxb_dom_attr_t *attr, void *ctx)
lxb_status_t lxb_html_tree_adjust_attributes_mathml(lxb_html_tree_t *tree, lxb_dom_attr_t *attr, void *ctx)
lxb_html_element_t * lxb_html_tree_insert_foreign_element(lxb_html_tree_t *tree, lxb_html_token_t *token, lxb_ns_id_t ns)
void lxb_html_tree_node_delete_deep(lxb_html_tree_t *tree, lxb_dom_node_t *node)
bool lxb_html_tree_process_abort(lxb_html_tree_t *tree)
void lxb_html_tree_close_p_element(lxb_html_tree_t *tree, lxb_html_token_t *token)
void lxb_html_tree_generate_all_implied_end_tags_thoroughly(lxb_html_tree_t *tree, lxb_tag_id_t ex_tag, lxb_ns_id_t ex_ns)
lxb_dom_node_t * lxb_html_tree_element_in_scope_td_th(lxb_html_tree_t *tree)
bool lxb_html_tree_html_integration_point(lxb_dom_node_t *node)
void lxb_html_tree_clean(lxb_html_tree_t *tree)
lxb_status_t lxb_html_tree_append_attributes_from_element(lxb_html_tree_t *tree, lxb_dom_element_t *element, lxb_dom_element_t *from, lxb_ns_id_t ns)
lxb_dom_comment_t * lxb_html_tree_insert_comment(lxb_html_tree_t *tree, lxb_html_token_t *token, lxb_dom_node_t *pos)
lxb_html_element_t * lxb_html_tree_generic_rawtext_parsing(lxb_html_tree_t *tree, lxb_html_token_t *token)
lxb_dom_attr_data_t * lxb_dom_attr_qualified_name_append(lexbor_hash_t *hash, const lxb_char_t *name, size_t length)
lxb_html_tree_t * lxb_html_tree_create(void)
lxb_status_t lxb_html_tree_stop_parsing(lxb_html_tree_t *tree)
lxb_html_tree_t * lxb_html_tree_destroy(lxb_html_tree_t *tree)
void lxb_html_tree_generate_implied_end_tags(lxb_html_tree_t *tree, lxb_tag_id_t ex_tag, lxb_ns_id_t ex_ns)
lxb_html_tree_t * lxb_html_tree_ref(lxb_html_tree_t *tree)
lxb_html_tree_t * lxb_html_tree_unref(lxb_html_tree_t *tree)
lxb_status_t lxb_html_tree_init(lxb_html_tree_t *tree, lxb_html_tokenizer_t *tkz)
lxb_status_t lxb_html_tree_insert_character_for_data(lxb_html_tree_t *tree, lexbor_str_t *str, lxb_dom_node_t **ret_node)
lxb_dom_node_t * lxb_html_tree_element_in_scope_tbody_thead_tfoot(lxb_html_tree_t *tree)
bool lxb_html_tree_check_scope_element(lxb_html_tree_t *tree)
lxb_dom_attr_data_t * lxb_dom_attr_local_name_append(lexbor_hash_t *hash, const lxb_char_t *name, size_t length)
lxb_status_t lxb_html_tree_adjust_svg_attributes(lxb_html_tree_t *tree, lxb_dom_attr_t *attr, void *ctx)
lxb_dom_node_t * lxb_html_tree_element_in_scope(lxb_html_tree_t *tree, lxb_tag_id_t tag_id, lxb_ns_id_t ns, lxb_html_tag_category_t ct)
bool lxb_html_tree_construction_dispatcher(lxb_html_tree_t *tree, lxb_html_token_t *token)
lxb_dom_node_t * lxb_html_tree_appropriate_place_inserting_node(lxb_html_tree_t *tree, lxb_dom_node_t *override_target, lxb_html_tree_insertion_position_t *ipos)
lxb_status_t lxb_html_tree_adjust_foreign_attributes(lxb_html_tree_t *tree, lxb_dom_attr_t *attr, void *ctx)
lxb_status_t lxb_html_tree_insert_character(lxb_html_tree_t *tree, lxb_html_token_t *token, lxb_dom_node_t **ret_node)
lxb_html_element_t * lxb_html_tree_create_element_for_token(lxb_html_tree_t *tree, lxb_html_token_t *token, lxb_ns_id_t ns)
lxb_html_element_t * lxb_html_tree_generic_rcdata_parsing(lxb_html_tree_t *tree, lxb_html_token_t *token)
lxb_status_t lxb_html_tree_adjust_attributes_svg(lxb_html_tree_t *tree, lxb_dom_attr_t *attr, void *ctx)
lxb_status_t lxb_html_tree_append_attributes(lxb_html_tree_t *tree, lxb_dom_element_t *element, lxb_html_token_t *token, lxb_ns_id_t ns)
void lxb_html_tree_parse_error(lxb_html_tree_t *tree, lxb_html_token_t *token, lxb_html_tree_error_id_t id)
lxb_dom_node_t * lxb_html_tree_element_in_scope_h123456(lxb_html_tree_t *tree)
bool lxb_html_tree_adoption_agency_algorithm(lxb_html_tree_t *tree, lxb_html_token_t *token, lxb_status_t *status)
const lxb_tag_data_t * lxb_tag_append_lower(lexbor_hash_t *hash, const lxb_char_t *name, size_t length)
lxb_dom_document_type_t * lxb_html_tree_create_document_type_from_token(lxb_html_tree_t *tree, lxb_html_token_t *token)
void lxb_html_tree_reset_insertion_mode_appropriately(lxb_html_tree_t *tree)
LXB_API void * lexbor_free(void *dst)
LXB_API void * lexbor_calloc(size_t num, size_t size)
const lxb_ns_prefix_data_t * lxb_ns_prefix_append(lexbor_hash_t *hash, const lxb_char_t *prefix, size_t length)
LXB_API void lxb_html_tree_open_elements_remove_by_node(lxb_html_tree_t *tree, lxb_dom_node_t *node)
lxb_dom_node_t * lxb_html_tree_open_elements_find_reverse(lxb_html_tree_t *tree, lxb_tag_id_t tag_id, lxb_ns_id_t ns, size_t *return_index)
bool lxb_html_tree_open_elements_find_by_node_reverse(lxb_html_tree_t *tree, lxb_dom_node_t *node, size_t *return_pos)
void lxb_html_tree_open_elements_pop_until_node(lxb_html_tree_t *tree, lxb_dom_node_t *node, bool exclude)
void lxb_html_tree_open_elements_pop_until_tag_id(lxb_html_tree_t *tree, lxb_tag_id_t tag_id, lxb_ns_id_t ns, bool exclude)
bool lxb_html_tree_open_elements_find_by_node(lxb_html_tree_t *tree, lxb_dom_node_t *node, size_t *return_pos)
lxb_inline lxb_status_t lxb_html_tree_open_elements_push(lxb_html_tree_t *tree, lxb_dom_node_t *node)
lxb_inline lxb_status_t lxb_html_tree_open_elements_insert_after(lxb_html_tree_t *tree, lxb_dom_node_t *node, size_t idx)
lxb_inline lxb_dom_node_t * lxb_html_tree_open_elements_first(lxb_html_tree_t *tree)
lxb_inline lxb_dom_node_t * lxb_html_tree_open_elements_get(lxb_html_tree_t *tree, size_t idx)
lxb_inline lxb_dom_node_t * lxb_html_tree_open_elements_pop(lxb_html_tree_t *tree)
unsigned const char * pos
unsigned const char * text
const lxb_char_t * lxb_html_tokenizer_state_rawtext_before(lxb_html_tokenizer_t *tkz, const lxb_char_t *data, const lxb_char_t *end)
const lxb_char_t * lxb_html_tokenizer_state_rcdata_before(lxb_html_tokenizer_t *tkz, const lxb_char_t *data, const lxb_char_t *end)
lxb_char_t * lexbor_str_append(lexbor_str_t *str, lexbor_mraw_t *mraw, const lxb_char_t *buff, size_t length)
bool lexbor_str_data_cmp(const lxb_char_t *first, const lxb_char_t *sec)
lxb_char_t * lexbor_str_init(lexbor_str_t *str, lexbor_mraw_t *mraw, size_t size)
bool lexbor_str_data_casecmp(const lxb_char_t *first, const lxb_char_t *sec)
lexbor_str_t * lexbor_str_destroy(lexbor_str_t *str, lexbor_mraw_t *mraw, bool destroy_obj)
lxb_dom_attr_id_t attr_id
lxb_dom_attr_t * first_attr
lxb_dom_node_t * first_child
lxb_dom_document_t * owner_document
lxb_html_head_element_t * head
lxb_html_document_ready_state_t ready_state
lxb_dom_document_t dom_document
const lxb_char_t * value_begin
lxb_html_token_attr_t * next
const lxb_dom_attr_data_t * name
lxb_html_token_type_t type
const lxb_char_t * text_end
const lxb_char_t * text_start
lxb_html_token_attr_t * attr_first
lexbor_array_obj_t * text_list
lxb_html_tree_append_attr_f before_append_attr
lxb_html_tree_pending_table_t pending_table
lxb_html_tree_insertion_mode_f original_mode
lexbor_array_obj_t * template_insertion_modes
lxb_html_tokenizer_t * tkz_ref
lxb_html_form_element_t * form
lexbor_array_t * active_formatting
lexbor_array_obj_t * parse_errors
lxb_html_tree_insertion_mode_f mode
lexbor_array_t * open_elements
lxb_html_document_t * document
lxb_dom_node_t * fragment
lxb_ns_prefix_id_t prefix_id
lxb_inline lxb_html_tree_insertion_mode_f lxb_html_tree_template_insertion_current(lxb_html_tree_t *tree)
struct lxb_html_token_attr lxb_html_token_attr_t
lxb_html_tree_insertion_position_t
@ LXB_HTML_TREE_INSERTION_POSITION_BEFORE
@ LXB_HTML_TREE_INSERTION_POSITION_CHILD
lxb_inline bool lxb_html_tree_mathml_text_integration_point(lxb_dom_node_t *node)
lxb_inline void lxb_html_tree_insert_node(lxb_dom_node_t *to, lxb_dom_node_t *node, lxb_html_tree_insertion_position_t ipos)
lxb_inline lxb_dom_node_t * lxb_html_tree_current_node(lxb_html_tree_t *tree)
lxb_inline lxb_dom_node_t * lxb_html_tree_adjusted_current_node(lxb_html_tree_t *tree)
lxb_inline lxb_dom_node_t * lxb_html_tree_create_node(lxb_html_tree_t *tree, lxb_tag_id_t tag_id, lxb_ns_id_t ns)
lxb_inline bool lxb_html_tree_node_is(lxb_dom_node_t *node, lxb_tag_id_t tag_id)
lxb_inline lxb_html_element_t * lxb_html_tree_insert_html_element(lxb_html_tree_t *tree, lxb_html_token_t *token)
unsigned int lxb_status_t