Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/lexborisov/perl-html-myhtml.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/myhtml/tag.h')
-rw-r--r--source/myhtml/tag.h58
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