diff options
Diffstat (limited to 'source/myhtml/tag.h')
-rw-r--r-- | source/myhtml/tag.h | 58 |
1 files changed, 35 insertions, 23 deletions
diff --git a/source/myhtml/tag.h b/source/myhtml/tag.h index 136c12c..32616c0 100644 --- a/source/myhtml/tag.h +++ b/source/myhtml/tag.h @@ -26,30 +26,32 @@ extern "C" { #include "myhtml/myosi.h" -#include "myhtml/utils/mctree.h" #include "myhtml/tag_const.h" #include "myhtml/tokenizer.h" #include "myhtml/tree.h" +#include "myhtml/utils/mctree.h" +#include "myhtml/utils/mchar_async.h" #include "myhtml/utils/mcobject_async.h" #define myhtml_tag_get(__tags__, __idx__, __attr__) __tags__->context[__idx__].__attr__ #define myhtml_tag_context_get_free_id(__tags__) __tags__->context_length -#define myhtml_tag_context_clean(__tags__, __idx__) \ - __tags__->context[__idx__].id = 0; \ - __tags__->context[__idx__].mctree_id = 0; \ +#define myhtml_tag_context_clean(__tags__, __idx__) \ + __tags__->context[__idx__].id = 0; \ + __tags__->context[__idx__].name = NULL; \ + __tags__->context[__idx__].name_length = 0; \ __tags__->context[__idx__].data_parser = MyHTML_TOKENIZER_STATE_DATA; \ memset(__tags__->context[__idx__].cats, MyHTML_TAG_CATEGORIES_UNDEF, sizeof(__tags__->context[__idx__].cats)); #define myhtml_tag_context_add(__tags__) \ - __tags__->context_length++; \ - if(__tags__->context_length == __tags__->context_size) { \ - __tags__->context_size += 4096; \ + __tags__->context_length++; \ + if(__tags__->context_length == __tags__->context_size) { \ + __tags__->context_size += 4096; \ __tags__->context = (myhtml_tag_context_t*)myrealloc(__tags__->context, \ sizeof(myhtml_tag_context_t) * __tags__->context_size); \ - } \ + } \ myhtml_tag_context_clean(__tags__, __tags__->context_length) #define myhtml_tag_index_clean_node(__index_node__) \ @@ -72,43 +74,47 @@ struct myhtml_tag_index { myhtml_tag_index_entry_t* tags; size_t tags_length; size_t tags_size; - - size_t index_id; }; struct myhtml_tag_context { - size_t id; - mctree_index_t mctree_id; + myhtml_tag_id_t id; + + const char* name; + size_t name_length; enum myhtml_tokenizer_state data_parser; enum myhtml_tag_categories cats[MyHTML_NAMESPACE_LAST_ENTRY]; } typedef myhtml_tag_context_t; +struct myhtml_tag_static_list { + const myhtml_tag_context_t* ctx; + size_t next; + size_t cur; +} +typedef myhtml_tag_static_list_t; + struct myhtml_tag { mctree_t* tree; - myhtml_tag_context_t *context; + myhtml_tag_context_t* context; size_t context_length; size_t context_size; - char* cache_name; - size_t cache_name_length; - size_t cache_name_size; + size_t mcobject_node; + size_t mchar_node; - mcobject_async_t* index_nodes; + mchar_async_t *mchar; + mcobject_async_t *tag_index; }; myhtml_tag_t * myhtml_tag_create(void); -myhtml_status_t myhtml_tag_init(myhtml_tag_t *tags); -myhtml_tag_t * myhtml_tag_destroy(myhtml_tag_t* tags); - -void myhtml_tag_init_tags(myhtml_tag_t* tags); -void myhtml_tag_init_tags_categories(myhtml_tag_t* tags); +myhtml_status_t myhtml_tag_init(myhtml_tree_t *tree, myhtml_tag_t *tags); void myhtml_tag_clean(myhtml_tag_t* tags); +myhtml_tag_t * myhtml_tag_destroy(myhtml_tag_t* tags); 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); + enum myhtml_tokenizer_state data_parser, bool to_lcase); void myhtml_tag_set_category(myhtml_tag_t* tags, myhtml_tag_id_t tag_idx, enum myhtml_namespace my_namespace, enum myhtml_tag_categories cats); @@ -128,6 +134,12 @@ myhtml_tree_node_t * myhtml_tag_index_tree_node(myhtml_tag_index_node_t *index_n size_t myhtml_tag_index_entry_count(myhtml_tag_index_t* tag_index, myhtml_tag_id_t tag_id); +const myhtml_tag_context_t * myhtml_tag_get_by_id(myhtml_tag_t* tags, myhtml_tag_id_t tag_id); +const myhtml_tag_context_t * myhtml_tag_get_by_name(myhtml_tag_t* tags, const char* name, size_t length); + +const myhtml_tag_context_t * myhtml_tag_static_get_by_id(size_t idx); +const myhtml_tag_context_t * myhtml_tag_static_search(const char* name, size_t length); + void myhtml_tag_print(myhtml_tag_t* tags, FILE* fh); #ifdef __cplusplus |