void myhtml_parser_stream_index(mythread_id_t thread_id, mythread_queue_node_t *qnode) { myhtml_parser_stream(thread_id, qnode); myhtml_parser_index(thread_id, qnode); }
/* queue */ mystatus_t myhtml_queue_add(myhtml_tree_t *tree, size_t begin, myhtml_token_node_t* token) { // TODO: need refactoring this code // too many conditions 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 MyHTML_STATUS_OK; } } #ifndef MyCORE_BUILD_WITHOUT_THREADS if(tree->flags & MyHTML_TREE_FLAGS_SINGLE_MODE) { if(qnode && token) { qnode->args = token; myhtml_parser_worker(0, qnode); myhtml_parser_stream(0, qnode); } tree->current_qnode = mythread_queue_node_malloc_limit(tree->myhtml->thread_stream, tree->queue, 4, NULL); } else { if(qnode) qnode->args = token; tree->current_qnode = mythread_queue_node_malloc_round(tree->myhtml->thread_stream, tree->queue_entry); /* we have a clean queue list */ if(tree->queue_entry->queue->nodes_length == 0) { mythread_queue_list_entry_make_batch(tree->myhtml->thread_batch, tree->queue_entry); mythread_queue_list_entry_make_stream(tree->myhtml->thread_stream, tree->queue_entry); } } #else if(qnode && token) { qnode->args = token; myhtml_parser_worker(0, qnode); myhtml_parser_stream(0, qnode); } tree->current_qnode = mythread_queue_node_malloc_limit(tree->myhtml->thread_stream, tree->queue, 4, NULL); #endif /* MyCORE_BUILD_WITHOUT_THREADS */ if(tree->current_qnode == NULL) return MyHTML_STATUS_ERROR_MEMORY_ALLOCATION; tree->current_qnode->context = tree; tree->current_qnode->prev = qnode; if(qnode && token) myhtml_tokenizer_calc_current_namespace(tree, token); tree->current_token_node = myhtml_token_node_create(tree->token, tree->token->mcasync_token_id); if(tree->current_token_node == NULL) return MyHTML_STATUS_ERROR_MEMORY_ALLOCATION; tree->current_token_node->raw_begin = tree->current_token_node->element_begin = (tree->global_offset + begin); return MyHTML_STATUS_OK; }
void myhtml_parser_worker_stream(mythread_id_t thread_id, mythread_queue_node_t *qnode) { myhtml_parser_worker(thread_id, qnode); myhtml_parser_stream(thread_id, qnode); }