php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
in_table_text.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2018-2020 Alexander Borisov
3 *
4 * Author: Alexander Borisov <borisov@lexbor.com>
5 */
6
8#include "lexbor/html/token.h"
9
10
11static void
12lxb_html_tree_insertion_mode_in_table_text_erase(lxb_html_tree_t *tree);
13
14
15bool
17 lxb_html_token_t *token)
18{
22
23 if (token->tag_id == LXB_TAG__TEXT) {
24 if (token->null_count != 0) {
25 lxb_html_tree_parse_error(tree, token,
27 }
28
29 text = lexbor_array_obj_push(pt_list);
30 if (text == NULL) {
32
33 lxb_html_tree_insertion_mode_in_table_text_erase(tree);
34
35 return lxb_html_tree_process_abort(tree);
36 }
37
38 if (token->null_count != 0) {
39 lxb_html_tree_parse_error(tree, token,
41
44 }
45 else {
48 }
49
50 if (tree->status != LXB_STATUS_OK) {
51 lxb_html_tree_insertion_mode_in_table_text_erase(tree);
52
53 return lxb_html_tree_process_abort(tree);
54 }
55
56 if (text->length == 0) {
57 lexbor_array_obj_pop(pt_list);
59
60 return true;
61 }
62
63 /*
64 * The lxb_html_token_data_skip_ws_begin function
65 * can change token->text_start value.
66 */
68
69 if (i_pos != text->length) {
70 if (!tree->pending_table.have_non_ws) {
71 tree->pending_table.have_non_ws = true;
72 }
73 }
74
75 return true;
76 }
77
78 if (tree->pending_table.have_non_ws) {
80
81 tree->foster_parenting = true;
82
83 for (size_t i = 0; i < lexbor_array_obj_length(pt_list); i++) {
84 text = lexbor_array_obj_get(pt_list, i);
85
87 text);
88 if (status != LXB_STATUS_OK) {
89 lxb_html_tree_insertion_mode_in_table_text_erase(tree);
90
91 return lxb_html_tree_process_abort(tree);
92 }
93 }
94
95 tree->foster_parenting = false;
96 }
97 else {
98 for (size_t i = 0; i < lexbor_array_obj_length(pt_list); i++) {
99 text = lexbor_array_obj_get(pt_list, i);
100
102 NULL);
103 if (tree->status != LXB_STATUS_OK) {
104 lxb_html_tree_insertion_mode_in_table_text_erase(tree);
105
106 return lxb_html_tree_process_abort(tree);
107 }
108 }
109 }
110
111 tree->mode = tree->original_mode;
112
113 return false;
114}
115
116static void
117lxb_html_tree_insertion_mode_in_table_text_erase(lxb_html_tree_t *tree)
118{
121
122 for (size_t i = 0; i < lexbor_array_obj_length(pt_list); i++) {
123 text = lexbor_array_obj_get(pt_list, i);
124
126 }
127}
void * lexbor_array_obj_pop(lexbor_array_obj_t *array)
Definition array_obj.c:147
void * lexbor_array_obj_push(lexbor_array_obj_t *array)
Definition array_obj.c:93
lxb_inline size_t lexbor_array_obj_length(lexbor_array_obj_t *array)
Definition array_obj.h:80
lxb_inline void * lexbor_array_obj_get(const lexbor_array_obj_t *array, size_t idx)
Definition array_obj.h:70
@ LXB_STATUS_ERROR_MEMORY_ALLOCATION
Definition base.h:51
@ LXB_STATUS_OK
Definition base.h:49
DNS_STATUS status
Definition dns_win32.c:49
#define NULL
Definition gdcache.h:45
struct lxb_html_tree lxb_html_tree_t
Definition base.h:28
lxb_status_t lxb_html_token_make_text_drop_null(lxb_html_token_t *token, lexbor_str_t *str, lexbor_mraw_t *mraw)
Definition token.c:110
lxb_status_t lxb_html_token_make_text(lxb_html_token_t *token, lexbor_str_t *str, lexbor_mraw_t *mraw)
Definition token.c:91
@ LXB_HTML_RULES_ERROR_NUCH
Definition error.h:26
@ LXB_HTML_RULES_ERROR_CHINTATE
Definition error.h:80
bool lxb_html_tree_insertion_mode_in_table_text(lxb_html_tree_t *tree, lxb_html_token_t *token)
LXB_API lxb_status_t lxb_html_tree_insertion_mode_in_body_text_append(lxb_html_tree_t *tree, lexbor_str_t *str)
Definition in_body.c:113
bool lxb_html_tree_process_abort(lxb_html_tree_t *tree)
Definition tree.c:224
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)
Definition tree.c:697
void lxb_html_tree_parse_error(lxb_html_tree_t *tree, lxb_html_token_t *token, lxb_html_tree_error_id_t id)
Definition tree.c:237
unsigned const char * text
Definition php_ffi.h:53
size_t lexbor_str_whitespace_from_begin(lexbor_str_t *target)
Definition str.c:348
lexbor_str_t * lexbor_str_destroy(lexbor_str_t *str, lexbor_mraw_t *mraw, bool destroy_obj)
Definition str.c:76
lexbor_mraw_t * text
Definition document.h:54
lxb_dom_document_t dom_document
Definition document.h:58
size_t null_count
Definition token.h:47
lxb_tag_id_t tag_id
Definition token.h:48
lexbor_array_obj_t * text_list
Definition tree.h:34
lxb_html_tree_pending_table_t pending_table
Definition tree.h:51
lxb_html_tree_insertion_mode_f original_mode
Definition tree.h:63
lxb_status_t status
Definition tree.h:66
lxb_html_tree_insertion_mode_f mode
Definition tree.h:62
bool foster_parenting
Definition tree.h:55
lxb_html_document_t * document
Definition tree.h:42
@ LXB_TAG__TEXT
Definition const.h:26
unsigned int lxb_status_t
Definition types.h:28