/* queue */ void myhtml_queue_add(myhtml_tree_t *tree, const char *html, size_t begin, mythread_queue_node_t *qnode) { #ifndef MyHTML_BUILD_WITHOUT_THREADS if(tree->flags & MyHTML_TREE_FLAGS_SINGLE_MODE) { myhtml_parser_worker(0, tree->current_qnode); while(myhtml_rules_tree_dispatcher(tree, tree->current_qnode->token)){}; tree->current_qnode = mythread_queue_node_malloc_limit(tree->myhtml->thread, tree->queue, html, (tree->global_offset + begin), 4, NULL); } else { tree->current_qnode = mythread_queue_node_malloc_round(tree->myhtml->thread, tree->queue_entry, html, (tree->global_offset + begin), NULL); } #else myhtml_parser_worker(0, tree->current_qnode); while(myhtml_rules_tree_dispatcher(tree, tree->current_qnode->token)){}; tree->current_qnode = mythread_queue_node_malloc_limit(tree->myhtml->thread, tree->queue, html, (tree->global_offset + begin), 4, NULL); #endif /* MyHTML_BUILD_WITHOUT_THREADS */ tree->current_qnode->tree = tree; tree->current_qnode->prev = qnode; if(qnode) myhtml_tokenizer_calc_current_namespace(tree, qnode); myhtml_token_node_malloc(tree->token, tree->current_qnode->token, tree->token->mcasync_token_id); }
/* queue */ void myhtml_queue_add(myhtml_tree_t *tree, size_t begin, myhtml_token_node_t* token) { mythread_queue_node_t *qnode = tree->current_qnode; if(tree->parse_flags & MyHTML_TREE_PARSE_FLAGS_SKIP_WHITESPACE_TOKEN) { if(token && token->tag_id == MyHTML_TAG__TEXT && token->type & MyHTML_TOKEN_TYPE_WHITESPACE) { myhtml_token_node_clean(token); token->raw_begin = token->element_begin = (tree->global_offset + begin); return; } } qnode->token = token; #ifndef MyHTML_BUILD_WITHOUT_THREADS if(tree->flags & MyHTML_TREE_FLAGS_SINGLE_MODE) { myhtml_parser_worker(0, qnode); while(myhtml_rules_tree_dispatcher(tree, token)){}; tree->current_qnode = mythread_queue_node_malloc_limit(tree->myhtml->thread, tree->queue, 4, NULL); } else { tree->current_qnode = mythread_queue_node_malloc_round(tree->myhtml->thread, tree->queue_entry, NULL); } #else myhtml_parser_worker(0, qnode); while(myhtml_rules_tree_dispatcher(tree, token)){}; tree->current_qnode = mythread_queue_node_malloc_limit(tree->myhtml->thread, tree->queue, 4, NULL); #endif /* MyHTML_BUILD_WITHOUT_THREADS */ tree->current_qnode->tree = tree; tree->current_qnode->prev = qnode; if(qnode) myhtml_tokenizer_calc_current_namespace(tree, token); myhtml_token_node_malloc(tree->token, tree->current_token_node, tree->token->mcasync_token_id); tree->current_token_node->raw_begin = tree->current_token_node->element_begin = (tree->global_offset + begin); }
void myhtml_parser_stream(mythread_id_t thread_id, mythread_queue_node_t *qnode) { while(myhtml_rules_tree_dispatcher(qnode->tree, qnode->token)){} }
void myhtml_parser_stream(mythread_id_t thread_id, mythread_queue_node_t *qnode) { if((qnode->tree->parse_flags & MyHTML_TREE_PARSE_FLAGS_WITHOUT_BUILD_TREE) == 0) { while(myhtml_rules_tree_dispatcher(qnode->tree, qnode->token)){} } }