Esempio n. 1
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, 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;
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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;
}
Esempio n. 4
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;
}