myhtml_tag_id_t myhtml_tag_add(myhtml_tag_t* tags, const char* key, size_t key_size, enum myhtml_tokenizer_state data_parser, bool to_lcase) { char* cache = mchar_async_malloc(tags->mchar, tags->mchar_node, (key_size + 1)); if(to_lcase) { size_t i; for(i = 0; i < key_size; i++) { cache[i] = key[i] > 0x40 && key[i] < 0x5b ? (key[i]|0x60) : key[i]; } cache[i] = '\0'; } else { strncpy(cache, key, key_size); cache[key_size] = '\0'; } // add tags myhtml_tag_id_t new_ctx_id = myhtml_tag_context_get_free_id(tags); mctree_insert(tags->tree, cache, key_size, (void *)new_ctx_id, NULL); tags->context[new_ctx_id].id = new_ctx_id + MyHTML_TAG_LAST_ENTRY; tags->context[new_ctx_id].name = cache; tags->context[new_ctx_id].name_length = key_size; tags->context[new_ctx_id].data_parser = data_parser; memset(tags->context[new_ctx_id].cats, 0, sizeof(enum myhtml_tag_categories) * MyHTML_NAMESPACE_LAST_ENTRY); myhtml_tag_context_add(tags); return tags->context[new_ctx_id].id; }
void myhtml_tag_clean(myhtml_tag_t* tags) { tags->context_length = 0; myhtml_tag_context_clean(tags, tags->context_length); myhtml_tag_context_add(tags); mchar_async_node_clean(tags->mchar, tags->mchar_node); }
void myhtml_tag_clean(myhtml_tag_t* tags) { tags->context_length = 0; myhtml_tag_context_clean(tags, tags->context_length); myhtml_tag_context_add(tags); tags->cache_name_length = 0; }
myhtml_tag_id_t myhtml_tag_add(myhtml_tag_t* tags, const char* key, size_t key_size, enum myhtml_tokenizer_state data_parser, mybool_t to_lcase) { // cache set size_t cache_begin = tags->cache_name_length; tags->cache_name_length += key_size + 1; if(tags->cache_name_length >= tags->cache_name_size) { tags->cache_name_size = tags->cache_name_length + (4096 * 12); tags->cache_name = (char*)myrealloc(tags->cache_name, // char is always 1 sizeof(char) * tags->cache_name_size); } char* cache = &tags->cache_name[cache_begin]; if(to_lcase) { size_t i; for(i = 0; i < key_size; i++) { cache[i] = key[i] > 0x40 && key[i] < 0x5b ? (key[i]|0x60) : key[i]; } cache[i] = '\0'; } else { strncpy(cache, key, key_size); cache[key_size] = '\0'; } // add tags myhtml_tag_id_t new_ctx_id = myhtml_tag_context_get_free_id(tags); tags->context[new_ctx_id].id = new_ctx_id; tags->context[new_ctx_id].mctree_id = mctree_insert(tags->tree, cache, key_size, (void *)new_ctx_id, NULL); tags->context[new_ctx_id].data_parser = data_parser; memset(tags->context[new_ctx_id].cats, 0, sizeof(enum myhtml_tag_categories) * MyHTML_NAMESPACE_LAST_ENTRY); myhtml_tag_context_add(tags); return new_ctx_id; }