diff options
author | lex <lexinhell@gmail.com> | 2016-03-22 17:45:13 +0300 |
---|---|---|
committer | lex <lexinhell@gmail.com> | 2016-03-22 17:45:13 +0300 |
commit | afbb56841f4a0ed5694a22d667ccdd47ecb7ae17 (patch) | |
tree | 33d479e69016f15ae6d837dcc7e4170e62d7c703 | |
parent | 52c9cf7722b4b50d91b442a1df3a5ec6b4a391f8 (diff) |
added MyHTML 0.5.2
39 files changed, 3726 insertions, 1453 deletions
@@ -1,3 +1,6 @@ +0.26 Tue Mar 22 2016 17:43:03 GMT+0300 + Fixes for compile program. Add MyHTML 0.5.2 + 0.25 Tue Mar 01 2016 09:43:03 GMT+0300 And again, fixes for compile program @@ -14,7 +14,6 @@ xs/tree.xs xs/tree_attr.xs xs/tree_node.xs -source/Makefile source/myhtml/api.h source/myhtml/api_encoding.h source/myhtml/charef.c @@ -23,7 +22,6 @@ source/myhtml/def.h source/myhtml/encoding.c source/myhtml/encoding.h source/myhtml/encoding_detect.c -source/myhtml/Makefile source/myhtml/myhtml.c source/myhtml/myhtml.h source/myhtml/myosi.c diff --git a/Makefile.PL b/Makefile.PL index dc4546c..96652cf 100755 --- a/Makefile.PL +++ b/Makefile.PL @@ -1,39 +1,12 @@ -package MYINSTALLER; - use strict; use utf8; use FindBin; -use File::Find; use ExtUtils::MakeMaker; my $myhtml_source_dir = $FindBin::Bin ."/source"; -our ($LIST_COMPILE, $LIST_OBJECTS); - -sub find_all_obj_files { - my ($dir_name) = @_; - - my @list; - my @obj_list; - - my $search = sub { - return unless $_ =~ /\.c$/; - - my $obj_name = $_; #$File::Find::name; - $obj_name =~ s/\.c$/.o/; - - push @obj_list, "source/$obj_name"; - push @list, "-o source/$obj_name ". $File::Find::name; - }; - - find({ wanted => $search, follow => 1 }, "$dir_name/myhtml"); - - return (\@list, \@obj_list); -} -($LIST_COMPILE, $LIST_OBJECTS) = find_all_obj_files($myhtml_source_dir); - -my $fdfdf = WriteMakefile( +WriteMakefile( AUTHOR => 'Alexander Borisov <lex.borisov@gmail.com>', ABSTRACT => 'Fast HTML Parser using Threads with no outside dependencies', VERSION_FROM => 'MyHTML.pm', @@ -41,24 +14,6 @@ my $fdfdf = WriteMakefile( LICENSE => 'Apache 2.0', LINKTYPE => 'dynamic', LIBS => ["-lpthread"], - LDFROM => join(" ", @$LIST_OBJECTS, "MyHTML.o"), + CCFLAGS => "--std=c99", INC => "-I$myhtml_source_dir", - #MYEXTLIB => "$myhtml_source_dir/myhtml/myhtml.o", - clean => {FILES => "$myhtml_source_dir/myhtml/*libmyhtml* $myhtml_source_dir/*.o $myhtml_source_dir/myhtml/*.o $myhtml_source_dir/myhtml/utils/*.o"} ); - -package MY; -use Config; - -sub postamble { - my $self = shift; - my @list; - - foreach my $name (@{$MYINSTALLER::LIST_COMPILE}) { - push @list, "\t". '$(CC) -Wall -Werror -O2 -fPIC --std=c99 -D_POSIX_C_SOURCE=199309L -pthread $(INC) -c '. $name; - } - - return join "\n", @list; -} - - @@ -22,7 +22,7 @@ use strict; use vars qw($AUTOLOAD $VERSION $ABSTRACT @ISA @EXPORT); BEGIN { - $VERSION = 0.25; + $VERSION = 0.26; $ABSTRACT = "Fast HTML Parser using Threads with no outside dependencies"; @ISA = qw(Exporter DynaLoader); @@ -20,7 +20,29 @@ #include "perl.h" #include "XSUB.h" -#include <myhtml/api.h> +#include "source/myhtml/charef.c" +#include "source/myhtml/encoding.c" +#include "source/myhtml/encoding_detect.c" +#include "source/myhtml/myhtml.c" +#include "source/myhtml/myosi.c" +#include "source/myhtml/mystring.c" +#include "source/myhtml/parser.c" +#include "source/myhtml/perf.c" +#include "source/myhtml/rules.c" +#include "source/myhtml/tag.c" +#include "source/myhtml/tag_init.c" +#include "source/myhtml/thread.c" +#include "source/myhtml/token.c" +#include "source/myhtml/tokenizer.c" +#include "source/myhtml/tokenizer_doctype.c" +#include "source/myhtml/tokenizer_end.c" +#include "source/myhtml/tokenizer_script.c" +#include "source/myhtml/tree.c" +#include "source/myhtml/utils/mchar_async.c" +#include "source/myhtml/utils/mcobject_async.c" +#include "source/myhtml/utils/mcsync.c" +#include "source/myhtml/utils/mctree.c" +#include "source/myhtml/utils.c" typedef myhtml_t * HTML__MyHTML; typedef myhtml_tree_t * HTML__MyHTML__Tree; @@ -442,16 +464,6 @@ parse_chunk_end(myhtml, tree) OUTPUT: RETVAL -HTML::MyHTML::Tag -get_tag(myhtml) - HTML::MyHTML myhtml; - - CODE: - RETVAL = myhtml_get_tag(myhtml); - OUTPUT: - RETVAL - - #************************************************************************************ # # MyHTML_TREE @@ -1067,11 +1079,10 @@ MODULE = HTML::MyHTML::Tag PACKAGE = HTML::MyHTML::Tag PROTOTYPES: DISABLE HTML::MyHTML::Tag::Index -tag_index_create(tag) - HTML::MyHTML::Tag tag; +tag_index_create(void) CODE: - RETVAL = myhtml_tag_index_create(tag); + RETVAL = myhtml_tag_index_create(); OUTPUT: RETVAL @@ -5,7 +5,7 @@ DESCRIPTION Fast HTML Parser using Threads with no outside dependencies -This Parser based on MyHTML library (it includes version 0.4.5) +This Parser based on MyHTML library (it includes version 0.5.2) See https://github.com/lexborisov/myhtml @@ -6,7 +6,7 @@ HTML::MyHTML is a fast HTML Parser using Threads with no outside dependencies # DESCRIPTION -This Parser based on [MyHTML library] (it includes version 0.4.5) +This Parser based on [MyHTML library] (it includes version 0.5.2) - Asynchronous Parsing, Build Tree and Indexation - Fully conformant with the [HTML5 specification] diff --git a/source/Makefile b/source/Makefile deleted file mode 100644 index 0130f33..0000000 --- a/source/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -TARGET := myhtml -SRCDIR := myhtml - -CC ?= gcc -CFLAGS ?= -Wall -std=c99 -I. -pthread - -SRCS := $(wildcard $(SRCDIR)/*.c) -HDRS := $(wildcard $(SRCDIR)/*.h) -OBJS := $(patsubst %.c,%.o,$(SRCS)) - -CFLAGS += -pthread -LIBNAME := myhtml - -all: create - $(MAKE) -C $(SRCDIR) all - cp $(SRCDIR)/*lib$(LIBNAME).* lib/ - -clean: - $(MAKE) -C $(SRCDIR) clean - rm -rf lib/* - -create: - mkdir -p lib - -.PHONY:all clean
\ No newline at end of file diff --git a/source/myhtml/Makefile b/source/myhtml/Makefile deleted file mode 100644 index fea345f..0000000 --- a/source/myhtml/Makefile +++ /dev/null @@ -1,41 +0,0 @@ -TARGET := myhtml -SRCDIR := myhtml - -CC ?= gcc - -LIBPOSTFIX := .so -LIBNAME := myhtml -LIBSTATIC_PREFIX := static_ - -CFLAGS ?= -Wall -Werror -O2 -fPIC --std=c99 -pthread -I.. - -ifeq ($(OS),Windows_NT) -else - UNAM := $(shell uname -s) - ifeq ($(UNAM),Darwin) - LIBPOSTFIX := .dylib - else - CFLAGS += -D_POSIX_C_SOURCE=199309L - endif -endif - -SRCS := $(wildcard *.c) -SRCS += $(wildcard utils/*.c) -HDRS := $(wildcard *.h) -HDRS += $(wildcard utils/*.h) -OBJS := $(patsubst %.c, %.o, $(SRCS)) - -all: shared static - -shared: $(OBJS) $(HDRS) - $(CC) -shared $(LDFLAGS) $(OBJS) -o lib$(LIBNAME)$(LIBPOSTFIX) - -static: shared - $(AR) crus $(LIBSTATIC_PREFIX)lib$(LIBNAME).a $(OBJS) - -clean: - rm -rf *.o - rm -rf utils/*.o - rm -rf *lib$(LIBNAME)* - -.PHONY: all clean diff --git a/source/myhtml/api.h b/source/myhtml/api.h index 0f5e25d..5875e6d 100644 --- a/source/myhtml/api.h +++ b/source/myhtml/api.h @@ -33,21 +33,30 @@ */ #define MyHTML_VERSION_MAJOR 0 -#define MyHTML_VERSION_MINOR 4 -#define MyHTML_VERSION_PATCH 5 +#define MyHTML_VERSION_MINOR 5 +#define MyHTML_VERSION_PATCH 2 +#include <stdbool.h> #include <stddef.h> +#include <stdio.h> + +#if defined(_MSC_VER) +# define MyHTML_DEPRECATED(func, message) __declspec(deprecated(message)) func +#elif defined(__GNUC__) || defined(__INTEL_COMPILER) +# define MyHTML_DEPRECATED(func, message) func __attribute__((deprecated(message))) +#else +# define MyHTML_DEPRECATED(func, message) func +#endif #ifdef __cplusplus extern "C" { #endif -#include <stdio.h> -/** - * bool - */ -typedef enum {myfalse = 0, mytrue = 1} mybool_t; +typedef enum { + myfalse = 0, + mytrue = 1 +} MyHTML_DEPRECATED(mybool_t, "use bool"); /** * encodings type @@ -671,16 +680,6 @@ myhtml_parse_chunk_fragment_single(myhtml_tree_t* tree, const char* html, size_t myhtml_status_t myhtml_parse_chunk_end(myhtml_tree_t* tree); -/** - * Get myhtml_tag_t* from a myhtml_t* - * - * @param[in] myhtml_t* - * - * @return myhtml_tag_t* if exists, otherwise a NULL value - */ -myhtml_tag_t* -myhtml_get_tag(myhtml_t* myhtml); - /*********************************************************************************** * * MyHTML_TREE @@ -795,6 +794,26 @@ myhtml_tree_node_t* myhtml_tree_get_document(myhtml_tree_t* tree); /** + * Get node HTML (Document -> HTML, Root of HTML Document) + * + * @param[in] myhtml_tree_t* + * + * @return myhtml_tree_node_t* if successful, otherwise a NULL value + */ +myhtml_tree_node_t* +myhtml_tree_get_node_html(myhtml_tree_t* tree); + +/** + * Get node BODY (Document -> HTML -> BODY) + * + * @param[in] myhtml_tree_t* + * + * @return myhtml_tree_node_t* if successful, otherwise a NULL value + */ +myhtml_tree_node_t* +myhtml_tree_get_node_body(myhtml_tree_t* tree); + +/** * Get mchar_async_t object * * @param[in] myhtml_tree_t* @@ -1128,9 +1147,9 @@ myhtml_tag_id_by_name(myhtml_tree_t* tree, * * @param[in] myhtml_tree_node_t* * - * @return mytrue or myfalse (1 or 0) + * @return true or false (1 or 0) */ -mybool_t +bool myhtml_node_is_close_self(myhtml_tree_node_t *node); /** @@ -1294,7 +1313,6 @@ myhtml_attribute_remove_by_key(myhtml_tree_node_t *node, const char *key, size_t * @param[in] myhtml_tree_node_t* * @param[in] myhtml_tree_attr_t* * - * @return myhtml_tree_attr_t* if successful, otherwise a NULL value */ void myhtml_attribute_delete(myhtml_tree_t *tree, myhtml_tree_node_t *node, @@ -1325,7 +1343,7 @@ myhtml_attribute_free(myhtml_tree_t *tree, myhtml_tree_attr_t *attr); * @return myhtml_tag_index_t* if successful, otherwise a NULL value */ myhtml_tag_index_t* -myhtml_tag_index_create(myhtml_tag_t* tag); +myhtml_tag_index_create(void); /** * Allocating and Initialization resources for a tag index structure @@ -1555,9 +1573,9 @@ myhtml_encoding_codepoint_to_ascii_utf_16(size_t codepoint, char *data); * @param[in] text length * @param[out] detected encoding * - * @return mytrue if encoding found, otherwise myfalse + * @return true if encoding found, otherwise false */ -mybool_t +bool myhtml_encoding_detect(const char *text, size_t length, myhtml_encoding_t *encoding); /** @@ -1569,9 +1587,9 @@ myhtml_encoding_detect(const char *text, size_t length, myhtml_encoding_t *encod * @param[in] text length * @param[out] detected encoding * - * @return mytrue if encoding found, otherwise myfalse + * @return true if encoding found, otherwise false */ -mybool_t +bool myhtml_encoding_detect_russian(const char *text, size_t length, myhtml_encoding_t *encoding); /** @@ -1583,9 +1601,9 @@ myhtml_encoding_detect_russian(const char *text, size_t length, myhtml_encoding_ * @param[in] text length * @param[out] detected encoding * - * @return mytrue if encoding found, otherwise myfalse + * @return true if encoding found, otherwise false */ -mybool_t +bool myhtml_encoding_detect_unicode(const char *text, size_t length, myhtml_encoding_t *encoding); /** @@ -1597,9 +1615,9 @@ myhtml_encoding_detect_unicode(const char *text, size_t length, myhtml_encoding_ * @param[in] text length * @param[out] detected encoding * - * @return mytrue if encoding found, otherwise myfalse + * @return true if encoding found, otherwise false */ -mybool_t +bool myhtml_encoding_detect_bom(const char *text, size_t length, myhtml_encoding_t *encoding); /*********************************************************************************** @@ -1667,10 +1685,10 @@ myhtml_string_clean_all(myhtml_string_t* str); * @param[in] myhtml_string_t*. See description for myhtml_string_init function * @param[in] call free function for current object or not * - * @return NULL if destroy_obj set mytrue, otherwise a current myhtml_string_t object + * @return NULL if destroy_obj set true, otherwise a current myhtml_string_t object */ myhtml_string_t* -myhtml_string_destroy(myhtml_string_t* str, mybool_t destroy_obj); +myhtml_string_destroy(myhtml_string_t* str, bool destroy_obj); /** * Get data (char*) from a myhtml_string_t object diff --git a/source/myhtml/encoding.h b/source/myhtml/encoding.h index cd491c5..ad72b4f 100644 --- a/source/myhtml/encoding.h +++ b/source/myhtml/encoding.h @@ -45,7 +45,7 @@ struct myhtml_encoding_result { typedef myhtml_encoding_result_t; struct myhtml_encoding_trigram { - const char trigram[3]; + const unsigned char trigram[3]; size_t value; } typedef myhtml_encoding_trigram_t; @@ -113,10 +113,10 @@ size_t myhtml_encoding_codepoint_to_ascii_utf_16(size_t codepoint, char *data); void myhtml_encoding_result_clean(myhtml_encoding_result_t *res); -mybool_t myhtml_encoding_detect(const char *text, size_t length, myhtml_encoding_t *encoding); -mybool_t myhtml_encoding_detect_russian(const char *text, size_t length, myhtml_encoding_t *encoding); -mybool_t myhtml_encoding_detect_unicode(const char *text, size_t length, myhtml_encoding_t *encoding); -mybool_t myhtml_encoding_detect_bom(const char *text, size_t length, myhtml_encoding_t *encoding); +bool myhtml_encoding_detect(const char *text, size_t length, myhtml_encoding_t *encoding); +bool myhtml_encoding_detect_russian(const char *text, size_t length, myhtml_encoding_t *encoding); +bool myhtml_encoding_detect_unicode(const char *text, size_t length, myhtml_encoding_t *encoding); +bool myhtml_encoding_detect_bom(const char *text, size_t length, myhtml_encoding_t *encoding); #ifdef __cplusplus } /* extern "C" */ diff --git a/source/myhtml/encoding_detect.c b/source/myhtml/encoding_detect.c index ab540e2..221ba07 100644 --- a/source/myhtml/encoding_detect.c +++ b/source/myhtml/encoding_detect.c @@ -5091,30 +5091,30 @@ myhtml_encoding_trigram_result_t myhtml_encoding_detect_by_trigram(unsigned cons return res; } -mybool_t myhtml_encoding_detect_russian_has_end(myhtml_encoding_trigram_result_t *res, size_t min_count, size_t min_value) +bool myhtml_encoding_detect_russian_has_end(myhtml_encoding_trigram_result_t *res, size_t min_count, size_t min_value) { if(res->value >= min_value || res->count >= min_count) - return mytrue; + return true; - return myfalse; + return false; } -mybool_t myhtml_encoding_detect_unicode_has_end(myhtml_encoding_unicode_result_t *res, size_t max_bad_percent) +bool myhtml_encoding_detect_unicode_has_end(myhtml_encoding_unicode_result_t *res, size_t max_bad_percent) { if(res->count_good == 0) { if(res->count_bad) - return myfalse; + return false; - return mytrue; + return true; } else if(res->count_bad == 0) - return mytrue; + return true; size_t percent_bad = (res->count_bad * 100) / res->count_good; if(percent_bad < max_bad_percent) - return mytrue; + return true; - return myfalse; + return false; } myhtml_encoding_unicode_result_t myhtml_encoding_detect_utf_8(unsigned const char *u_text, size_t length) @@ -5203,7 +5203,7 @@ myhtml_encoding_unicode_result_t myhtml_encoding_detect_utf_16(unsigned const ch return res; } -mybool_t myhtml_encoding_detect_bom(const char *text, size_t length, myhtml_encoding_t *encoding) +bool myhtml_encoding_detect_bom(const char *text, size_t length, myhtml_encoding_t *encoding) { unsigned const char *u_text = (unsigned const char*)text; @@ -5213,19 +5213,19 @@ mybool_t myhtml_encoding_detect_bom(const char *text, size_t length, myhtml_enco u_text[2] == 0xBF) { *encoding = MyHTML_ENCODING_UTF_8; - return mytrue; + return true; } } if(length > 1) { if(u_text[0] == 0xFE && u_text[1] == 0xFF) { *encoding = MyHTML_ENCODING_UTF_16BE; - return mytrue; + return true; } if(u_text[0] == 0xFF && u_text[1] == 0xFE) { *encoding = MyHTML_ENCODING_UTF_16LE; - return mytrue; + return true; } } @@ -5237,7 +5237,7 @@ mybool_t myhtml_encoding_detect_bom(const char *text, size_t length, myhtml_enco // u_text[3] == 0xFF) // { // *encoding = MyHTML_ENCODING_UTF_32BE; -// return mytrue; +// return true; // } // // if(u_text[0] == 0xFF && @@ -5246,14 +5246,14 @@ mybool_t myhtml_encoding_detect_bom(const char *text, size_t length, myhtml_enco // u_text[3] == 0x00) // { // *encoding = MyHTML_ENCODING_UTF_32LE; -// return mytrue; +// return true; // } // } - return myfalse; + return false; } -mybool_t myhtml_encoding_detect_unicode(const char *text, size_t length, myhtml_encoding_t *encoding) +bool myhtml_encoding_detect_unicode(const char *text, size_t length, myhtml_encoding_t *encoding) { unsigned const char *u_text = (unsigned const char*)text; *encoding = MyHTML_ENCODING_DEFAULT; @@ -5262,23 +5262,23 @@ mybool_t myhtml_encoding_detect_unicode(const char *text, size_t length, myhtml_ if(res.count_bad == 0 && res.count_good >= 3) { *encoding = MyHTML_ENCODING_UTF_16LE; - return mytrue; + return true; } else if(res.count_bad >= 3 && res.count_good == 0) { *encoding = MyHTML_ENCODING_UTF_16BE; - return mytrue; + return true; } res = myhtml_encoding_detect_utf_8(u_text, length); if(myhtml_encoding_detect_unicode_has_end(&res, 10)) { *encoding = MyHTML_ENCODING_UTF_8; - return mytrue; + return true; } - return myfalse; + return false; } -mybool_t myhtml_encoding_detect_russian(const char *text, size_t length, myhtml_encoding_t *encoding) +bool myhtml_encoding_detect_russian(const char *text, size_t length, myhtml_encoding_t *encoding) { unsigned const char *u_text = (unsigned const char*)text; @@ -5292,7 +5292,7 @@ mybool_t myhtml_encoding_detect_russian(const char *text, size_t length, myhtml_ res = myhtml_encoding_detect_by_trigram(u_text, length, myhtml_encoding_detect_trigrams_index_windows_1251, 1000, min_value); if(myhtml_encoding_detect_russian_has_end(&res, min_count, min_value)) { *encoding = MyHTML_ENCODING_WINDOWS_1251; - return mytrue; + return true; } max_value = res.value; @@ -5303,7 +5303,7 @@ mybool_t myhtml_encoding_detect_russian(const char *text, size_t length, myhtml_ res = myhtml_encoding_detect_by_trigram(u_text, length, myhtml_encoding_detect_trigrams_index_koi8_r, 1000, min_value); if(myhtml_encoding_detect_russian_has_end(&res, min_count, min_value)) { *encoding = MyHTML_ENCODING_KOI8_R; - return mytrue; + return true; } if(max_value < res.value) { @@ -5314,7 +5314,7 @@ mybool_t myhtml_encoding_detect_russian(const char *text, size_t length, myhtml_ res = myhtml_encoding_detect_by_trigram(u_text, length, myhtml_encoding_detect_trigrams_index_iso_8859_5, 1000, min_value); if(myhtml_encoding_detect_russian_has_end(&res, min_count, min_value)) { *encoding = MyHTML_ENCODING_ISO_8859_5; - return mytrue; + return true; } if(max_value < res.value) { @@ -5325,7 +5325,7 @@ mybool_t myhtml_encoding_detect_russian(const char *text, size_t length, myhtml_ res = myhtml_encoding_detect_by_trigram(u_text, length, myhtml_encoding_detect_trigrams_index_x_mac_cyrillic, 1000, min_value); if(myhtml_encoding_detect_russian_has_end(&res, min_count, min_value)) { *encoding = MyHTML_ENCODING_X_MAC_CYRILLIC; - return mytrue; + return true; } if(max_value < res.value) { @@ -5336,27 +5336,27 @@ mybool_t myhtml_encoding_detect_russian(const char *text, size_t length, myhtml_ res = myhtml_encoding_detect_by_trigram(u_text, length, myhtml_encoding_detect_trigrams_index_ibm866, 1000, min_value); if(myhtml_encoding_detect_russian_has_end(&res, min_count, min_value)) { *encoding = MyHTML_ENCODING_IBM866; - return mytrue; + return true; } if(max_value < res.value) { *encoding = MyHTML_ENCODING_IBM866; } - return myfalse; + return false; } -mybool_t myhtml_encoding_detect(const char *text, size_t length, myhtml_encoding_t *encoding) +bool myhtml_encoding_detect(const char *text, size_t length, myhtml_encoding_t *encoding) { *encoding = MyHTML_ENCODING_DEFAULT; if(myhtml_encoding_detect_unicode(text, length, encoding)) - return mytrue; + return true; if(myhtml_encoding_detect_russian(text, length, encoding)) - return mytrue; + return true; - return myfalse; + return false; } diff --git a/source/myhtml/myhtml.c b/source/myhtml/myhtml.c index 0a8e999..04bad25 100644 --- a/source/myhtml/myhtml.c +++ b/source/myhtml/myhtml.c @@ -51,23 +51,14 @@ myhtml_status_t myhtml_init(myhtml_t* myhtml, enum myhtml_options opt, size_t th if(mcstatus != MCOBJECT_ASYNC_STATUS_OK) return MyHTML_STATUS_ERROR_MEMORY_ALLOCATION; - myhtml->tags = myhtml_tag_create(); - if(myhtml->tags == NULL) { - myhtml->parse_state_func = NULL; - myhtml->insertion_func = NULL; - myhtml->thread = NULL; - - return MyHTML_STATUS_TAGS_ERROR_MEMORY_ALLOCATION; - } + // for tags node and other + myhtml->mchar = mchar_async_create(64, 4096); - status = myhtml_tag_init(myhtml->tags); - if(status) { - myhtml->parse_state_func = NULL; - myhtml->insertion_func = NULL; - myhtml->thread = NULL; - - return status; - } + myhtml->tag_index = mcobject_async_create(); + mcstatus = mcobject_async_init(myhtml->tag_index, 128, 1024, sizeof(myhtml_tag_index_node_t)); + + if(mcstatus != MCOBJECT_ASYNC_STATUS_OK) + return MyHTML_STATUS_TAGS_ERROR_MCOBJECT_CREATE; status = myhtml_tokenizer_state_init(myhtml); if(status) { @@ -87,6 +78,14 @@ myhtml_status_t myhtml_init(myhtml_t* myhtml, enum myhtml_options opt, size_t th myhtml->opt = opt; myhtml->thread = mythread_create(); +#ifdef MyHTML_BUILD_WITHOUT_THREADS + + status = mythread_init(myhtml->thread, NULL, thread_count, queue_size); + + if(status) + return status; + +#else /* MyHTML_BUILD_WITHOUT_THREADS */ switch (opt) { case MyHTML_OPTIONS_PARSE_MODE_SINGLE: status = mythread_init(myhtml->thread, "lastmac", 0, queue_size); @@ -148,6 +147,8 @@ myhtml_status_t myhtml_init(myhtml_t* myhtml, enum myhtml_options opt, size_t th break; } +#endif /* MyHTML_BUILD_WITHOUT_THREADS */ + myhtml_clean(myhtml); return status; @@ -155,8 +156,8 @@ myhtml_status_t myhtml_init(myhtml_t* myhtml, enum myhtml_options opt, size_t th void myhtml_clean(myhtml_t* myhtml) { - mythread_queue_clean(myhtml->thread->queue); mythread_clean(myhtml->thread); + mcobject_async_node_all_clean(myhtml->async_incoming_buf); } @@ -167,11 +168,12 @@ myhtml_t* myhtml_destroy(myhtml_t* myhtml) myhtml_destroy_marker(myhtml); - mythread_destroy(myhtml->thread, mytrue); + mythread_destroy(myhtml->thread, true); myhtml_tokenizer_state_destroy(myhtml); - myhtml->async_incoming_buf = mcobject_async_destroy(myhtml->async_incoming_buf, mytrue); - myhtml->tags = myhtml_tag_destroy(myhtml->tags); + myhtml->async_incoming_buf = mcobject_async_destroy(myhtml->async_incoming_buf, true); + myhtml->tag_index = mcobject_async_destroy(myhtml->tag_index, true); + myhtml->mchar = mchar_async_destroy(myhtml->mchar, true); if(myhtml->insertion_func) free(myhtml->insertion_func); @@ -337,18 +339,6 @@ myhtml_encoding_t myhtml_encoding_get(myhtml_tree_t* tree) return tree->encoding; } - -/* - * Helpers - */ -myhtml_tag_t * myhtml_get_tag(myhtml_t* myhtml) -{ - if(myhtml) - return myhtml->tags; - - return NULL; -} - /* * Nodes */ @@ -402,9 +392,8 @@ myhtml_collection_t * myhtml_get_nodes_by_tag_id(myhtml_tree_t* tree, myhtml_col myhtml_collection_t * myhtml_get_nodes_by_name(myhtml_tree_t* tree, myhtml_collection_t *collection, const char* html, size_t length, myhtml_status_t *status) { - mctree_index_t tag_ctx_idx = mctree_search_lowercase(tree->myhtml->tags->tree, html, length); - - return myhtml_get_nodes_by_tag_id(tree, collection, tag_ctx_idx, status); + const myhtml_tag_context_t *tag_ctx = myhtml_tag_get_by_name(tree->tags, html, length); + return myhtml_get_nodes_by_tag_id(tree, collection, tag_ctx->id, status); } /* @@ -517,9 +506,9 @@ myhtml_tree_node_t * myhtml_node_insert_to_appropriate_place(myhtml_tree_t* tree enum myhtml_tree_insertion_mode mode; - tree->foster_parenting = mytrue; + tree->foster_parenting = true; target = myhtml_tree_appropriate_place_inserting_in_tree(tree, target, &mode); - tree->foster_parenting = myfalse; + tree->foster_parenting = false; myhtml_tree_node_insert_by_mode(tree, target, node, mode); @@ -599,7 +588,7 @@ myhtml_string_t * myhtml_node_text_set_with_charef(myhtml_tree_t* tree, myhtml_t node->token->my_str_tm.length = 0; } - myhtml_string_char_ref_chunk_t str_chunk = {0, 0, 0, {}, 0, encoding}; + myhtml_string_char_ref_chunk_t str_chunk = {0, 0, 0, {0}, 0, encoding}; myhtml_encoding_result_clean(&str_chunk.res); myhtml_string_append_charef(&str_chunk, &node->token->my_str_tm, text, length); @@ -623,43 +612,42 @@ myhtml_tag_id_t myhtml_node_tag_id(myhtml_tree_node_t *node) const char * myhtml_tag_name_by_id(myhtml_tree_t* tree, myhtml_tag_id_t tag_id, size_t *length) { - if(tree == NULL || tree->myhtml == NULL || tree->myhtml->tags == NULL || - tree->myhtml->tags->context_length <= tag_id) - { - if(length) - *length = 0; - + if(length) + *length = 0; + + if(tree == NULL || tree->tags == NULL) return NULL; - } - mctree_node_t* mctree_nodes = tree->myhtml->tags->tree->nodes; - size_t mcid = tree->myhtml->tags->context[tag_id].mctree_id; + const myhtml_tag_context_t *ctx = myhtml_tag_get_by_id(tree->tags, tag_id); + + if(ctx == NULL) + return NULL; if(length) - *length = mctree_nodes[mcid].str_size; + *length = ctx->name_length; - return mctree_nodes[mcid].str; + return ctx->name; } myhtml_tag_id_t myhtml_tag_id_by_name(myhtml_tree_t* tree, const char *tag_name, size_t length) { - if(tree == NULL || tree->myhtml == NULL || tree->myhtml->tags == NULL) + if(tree == NULL || tree->tags == NULL) return MyHTML_TAG__UNDEF; - myhtml_tag_t* tags = tree->myhtml->tags; - mctree_t* tags_tree = tags->tree; + const myhtml_tag_context_t *ctx = myhtml_tag_get_by_name(tree->tags, tag_name, length); - mctree_index_t idx = mctree_search_lowercase(tree->myhtml->tags->tree, tag_name, length); + if(ctx == NULL) + return MyHTML_TAG__UNDEF; - return (myhtml_tag_id_t)(tags_tree->nodes[idx].value); + return ctx->id; } -mybool_t myhtml_node_is_close_self(myhtml_tree_node_t *node) +bool myhtml_node_is_close_self(myhtml_tree_node_t *node) { if(node->token) return (node->token->type & MyHTML_TOKEN_TYPE_CLOSE_SELF); - return myfalse; + return false; } myhtml_tree_attr_t * myhtml_node_attribute_first(myhtml_tree_node_t *node) @@ -1003,30 +991,30 @@ const char * myhtml_tree_incomming_buf_make_data(myhtml_tree_t *tree, mythread_q return tree->temp_tag_name.data; } -mybool_t myhtml_utils_strcmp(const char* ab, const char* to_lowercase, size_t size) +bool myhtml_utils_strcmp(const char* ab, const char* to_lowercase, size_t size) { size_t i = 0; for(;;) { if(i == size) - return mytrue; + return true; if((const unsigned char)(to_lowercase[i] > 0x40 && to_lowercase[i] < 0x5b ? (to_lowercase[i]|0x60) : to_lowercase[i]) != (const unsigned char)ab[i]) { - return myfalse; + return false; } i++; } - return myfalse; + return false; } -mybool_t myhtml_is_html_node(myhtml_tree_node_t *node, myhtml_tag_id_t tag_id) +bool myhtml_is_html_node(myhtml_tree_node_t *node, myhtml_tag_id_t tag_id) { if(node == NULL) - return myfalse; + return false; return node->tag_idx == tag_id && node->my_namespace == MyHTML_NAMESPACE_HTML; } diff --git a/source/myhtml/myhtml.h b/source/myhtml/myhtml.h index 6120212..e7e1d3d 100644 --- a/source/myhtml/myhtml.h +++ b/source/myhtml/myhtml.h @@ -104,9 +104,10 @@ extern "C" { (__char__ < 'A' || __char__ > 'Z')) struct myhtml { - myhtml_tag_t *tags; mythread_t *thread; mcobject_async_t *async_incoming_buf; + mchar_async_t *mchar; // for all + mcobject_async_t *tag_index; myhtml_tokenizer_state_f* parse_state_func; myhtml_insertion_f* insertion_func; @@ -155,8 +156,6 @@ myhtml_encoding_t myhtml_encoding_get(myhtml_tree_t* tree); myhtml_collection_t * myhtml_get_nodes_by_tag_id(myhtml_tree_t* tree, myhtml_collection_t *collection, myhtml_tag_id_t tag_id, myhtml_status_t *status); myhtml_collection_t * myhtml_get_nodes_by_name(myhtml_tree_t* tree, myhtml_collection_t *collection, const char* html, size_t length, myhtml_status_t *status); -myhtml_tag_t * myhtml_get_tag(myhtml_t* myhtml); - myhtml_tree_node_t * myhtml_node_first(myhtml_tree_t* tree); myhtml_tree_node_t * myhtml_node_next(myhtml_tree_node_t *node); myhtml_tree_node_t * myhtml_node_prev(myhtml_tree_node_t *node); @@ -179,7 +178,7 @@ enum myhtml_namespace myhtml_node_namespace(myhtml_tree_node_t *node); myhtml_tag_id_t myhtml_node_tag_id(myhtml_tree_node_t *node); const char * myhtml_tag_name_by_id(myhtml_tree_t* tree, myhtml_tag_id_t tag_id, size_t *length); myhtml_tag_id_t myhtml_tag_id_by_name(myhtml_tree_t* tree, const char *tag_name, size_t length); -mybool_t myhtml_node_is_close_self(myhtml_tree_node_t *node); +bool myhtml_node_is_close_self(myhtml_tree_node_t *node); myhtml_tree_attr_t * myhtml_node_attribute_first(myhtml_tree_node_t *node); myhtml_tree_attr_t * myhtml_node_attribute_last(myhtml_tree_node_t *node); const char * myhtml_node_text(myhtml_tree_node_t *node, size_t *length); @@ -212,8 +211,8 @@ void myhtml_incomming_buf_clean(myhtml_tree_t* tree, myhtml_incoming_buf_t *curr const char * myhtml_tree_incomming_buf_get_last(myhtml_tree_t *tree, myhtml_incoming_buf_t *inc_buf, size_t current_offset, size_t len); const char * myhtml_tree_incomming_buf_make_data(myhtml_tree_t *tree, mythread_queue_node_t *qnode, size_t len); -mybool_t myhtml_utils_strcmp(const char* ab, const char* to_lowercase, size_t size); -mybool_t myhtml_is_html_node(myhtml_tree_node_t *node, myhtml_tag_id_t tag_id); +bool myhtml_utils_strcmp(const char* ab, const char* to_lowercase, size_t size); +bool myhtml_is_html_node(myhtml_tree_node_t *node, myhtml_tag_id_t tag_id); /** * Platform-specific hdef performance clock queries. diff --git a/source/myhtml/myosi.h b/source/myhtml/myosi.h index 938be5c..db9a4da 100644 --- a/source/myhtml/myosi.h +++ b/source/myhtml/myosi.h @@ -20,10 +20,7 @@ #define MyHTML_MYOSI_H #pragma once -#ifdef __cplusplus -extern "C" { -#endif - +#include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <memory.h> @@ -35,6 +32,18 @@ extern "C" { #include <windows.h> #endif +#if defined(_MSC_VER) +# define MyHTML_DEPRECATED(func, message) __declspec(deprecated(message)) func +#elif defined(__GNUC__) || defined(__INTEL_COMPILER) +# define MyHTML_DEPRECATED(func, message) func __attribute__((deprecated(message))) +#else +# define MyHTML_DEPRECATED(func, message) func +#endif + +#ifdef __cplusplus +extern "C" { +#endif + #ifdef DEBUG_MODE #define MyHTML_DEBUG(__format__, ...) \ myhtml_print(stderr, "DEBUG: "__format__"\n", ##__VA_ARGS__) @@ -57,7 +66,11 @@ extern "C" { sizeof(__strcn__) * __myhtml__->__sizen__); \ } -typedef enum {myfalse = 0, mytrue = 1} mybool_t; + +typedef enum { + myfalse = 0, + mytrue = 1 +} MyHTML_DEPRECATED(mybool_t, "use bool"); // encoding // https://encoding.spec.whatwg.org/#the-encoding @@ -371,7 +384,6 @@ typedef myhtml_token_attr_t myhtml_tree_attr_t; typedef struct myhtml_collection myhtml_collection_t; typedef struct myhtml myhtml_t; - // parser state function typedef size_t (*myhtml_tokenizer_state_f)(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size); @@ -379,7 +391,7 @@ typedef size_t (*myhtml_tokenizer_state_f)(myhtml_tree_t* tree, mythread_queue_n typedef void (*mythread_f)(mythread_id_t thread_id, mythread_queue_node_t *qnode); // parser insertion mode function -typedef mybool_t (*myhtml_insertion_f)(myhtml_tree_t* tree, myhtml_token_node_t* token); +typedef bool (*myhtml_insertion_f)(myhtml_tree_t* tree, myhtml_token_node_t* token); void * mymalloc(size_t size); void * myrealloc(void* dst, size_t size); diff --git a/source/myhtml/mystring.c b/source/myhtml/mystring.c index 7e21470..c30d22f 100644 --- a/source/myhtml/mystring.c +++ b/source/myhtml/mystring.c @@ -16,156 +16,9 @@ Author: lex.borisov@gmail.com (Alexander Borisov) */ +#include "myhtml/utils/resources.h" #include "myhtml/mystring.h" -static const unsigned char myhtml_string_chars_num_map[] = { - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, - 0x06, 0x07, 0x08, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff -}; - -static const unsigned char myhtml_string_chars_hex_map[] = { - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, - 0x06, 0x07, 0x08, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff -}; - -static const unsigned char myhtml_string_chars_lowercase_map[] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, - 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, - 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, - 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, - 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, - 0x3f, 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, - 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, - 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, - 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, - 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, - 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, - 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, - 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, - 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, - 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, - 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, - 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, - 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, - 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, - 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, - 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, - 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, - 0xfc, 0xfd, 0xfe, 0xff -}; - -static const size_t replacement_character[] = { - 65533, 1, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 8364, 129, 8218, 402, 8222, 8230, 8224, - 8225, 710, 8240, 352, 8249, 338, 141, 381, 143, - 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, - 8482, 353, 8250, 339, 157, 382, 376 -}; - -static const size_t myhtml_string_alphanumeric_character[] = { - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, - 0x06, 0x07, 0x08, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0a, - 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0a, 0x0b, 0x0c, 0x0d, - 0x0e, 0x0f, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0a, - 0x0b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x0d, - 0x0e, 0x0f, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0a, - 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0a, 0x0b, 0x0c, 0x0d, - 0x0e, 0x0f, 0x0a, 0x0b, 0x0c, 0x0d, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff -}; char * myhtml_string_init(mchar_async_t *mchar, size_t node_idx, myhtml_string_t* str, size_t size) { @@ -189,7 +42,7 @@ void myhtml_string_clean_all(myhtml_string_t* str) memset(str, 0, sizeof(myhtml_string_t)); } -myhtml_string_t * myhtml_string_destroy(myhtml_string_t* str, mybool_t destroy_obj) +myhtml_string_t * myhtml_string_destroy(myhtml_string_t* str, bool destroy_obj) { if(str == NULL) return NULL; @@ -296,7 +149,7 @@ char * myhtml_string_realloc(mchar_async_t *mchar, size_t node_id, myhtml_string return str->data; } -mybool_t myhtml_string_release(myhtml_string_t* str, size_t size) +bool myhtml_string_release(myhtml_string_t* str, size_t size) { char* tmp = mchar_async_realloc(str->mchar, str->node_idx, str->data, str->length, size); @@ -305,14 +158,14 @@ mybool_t myhtml_string_release(myhtml_string_t* str, size_t size) str->data = tmp; } else - return myfalse; + return false; - return mytrue; + return true; } void _myhtml_string_charef_append(myhtml_string_t* str, const char sm) { - MyHTML_STRING_REALLOC_IF_NEED(str, (str->length + 2), 32); + MyHTML_STRING_REALLOC_IF_NEED(str, 2, 32); str->data[str->length] = sm; str->length++; @@ -423,7 +276,7 @@ size_t _myhtml_string_append_char_references_state_2(myhtml_string_char_ref_chun if(current_entry->codepoints_len) { for (size_t i = 0; i < current_entry->codepoints_len; i++) { - MyHTML_STRING_REALLOC_IF_NEED(str, (chunk->begin + 4), 32); + MyHTML_STRING_REALLOC_IF_NEED(str, 4, 32); chunk->begin += myhtml_encoding_codepoint_to_ascii_utf_8(current_entry->codepoints[i], &str->data[chunk->begin]); } @@ -468,7 +321,7 @@ void _myhtml_string_append_char_references_state_end(myhtml_string_char_ref_chun str->length = chunk->begin; /* 4 is max utf8 byte + \0 */ - MyHTML_STRING_REALLOC_IF_NEED(str, (chunk->begin + 5), 12); + MyHTML_STRING_REALLOC_IF_NEED(str, 5, 12); if(chunk->l_data <= 0x9F) chunk->l_data = replacement_character[chunk->l_data]; @@ -507,7 +360,10 @@ size_t _myhtml_string_append_char_references_state_4(myhtml_string_char_ref_chun return offset; } - chunk->l_data = myhtml_string_chars_num_map[ buff[offset] ] + chunk->l_data * 10; + if(chunk->l_data <= 0x10FFFF) { + chunk->l_data = myhtml_string_chars_num_map[ buff[offset] ] + chunk->l_data * 10; + } + offset++; } @@ -519,7 +375,7 @@ size_t _myhtml_string_append_char_references_state_4(myhtml_string_char_ref_chun size_t _myhtml_string_append_char_references_state_5(myhtml_string_char_ref_chunk_t *chunk, myhtml_string_t* str, const char* buff, size_t offset, size_t size) { unsigned const char *u_buff = (unsigned const char*)buff; - size_t start_pos = chunk->begin + 3; + size_t current_len = (str->length - (chunk->begin + 3)); size_t tmp_offset = offset, tmp_set_to = offset; @@ -527,6 +383,10 @@ size_t _myhtml_string_append_char_references_state_5(myhtml_string_char_ref_chun { if(myhtml_string_chars_hex_map[ u_buff[offset] ] == 0xff) { + if(((offset - tmp_offset) + current_len) > 6) { + chunk->l_data = 0xFFFFFF; + } + chunk->state = 0; myhtml_string_append_with_preprocessing(str, &buff[tmp_offset], (tmp_set_to - tmp_offset)); @@ -541,7 +401,7 @@ size_t _myhtml_string_append_char_references_state_5(myhtml_string_char_ref_chun return offset; } - if((str->length - start_pos) < 6) { + if(((offset - tmp_offset) + current_len) < 7) { chunk->l_data <<= 4; chunk->l_data |= myhtml_string_chars_hex_map[ u_buff[offset] ]; @@ -551,6 +411,10 @@ size_t _myhtml_string_append_char_references_state_5(myhtml_string_char_ref_chun offset++; } + if(((offset - tmp_offset) + current_len) > 6) { + chunk->l_data = 0xFFFFFF; + } + myhtml_string_append_with_preprocessing(str, &buff[tmp_offset], (offset - tmp_offset)); return offset; @@ -592,7 +456,7 @@ void myhtml_string_append_charef_end(myhtml_string_char_ref_chunk_t *chunk, myht const charef_entry_t *entry = chunk->charef_res.last_entry; for (size_t i = 0; i < entry->codepoints_len; i++) { - MyHTML_STRING_REALLOC_IF_NEED(str, (chunk->begin + 4), 32); + MyHTML_STRING_REALLOC_IF_NEED(str, 4, 32); chunk->begin += myhtml_encoding_codepoint_to_ascii_utf_8(entry->codepoints[i], &str->data[chunk->begin]); } @@ -644,7 +508,10 @@ void myhtml_string_append_with_preprocessing(myhtml_string_t* str, const char* b } else if(u_buff[i] == 0x00) { - MyHTML_STRING_REALLOC_IF_NEED(str, (length + 4), 32); + MyHTML_STRING_REALLOC_IF_NEED(str, 4, 32); + + if((unsigned char *)str->data != data) + data = (unsigned char*)str->data; // Unicode Character 'REPLACEMENT CHARACTER' (U+FFFD) data[str->length] = 0xEF; str->length++; @@ -680,7 +547,10 @@ void myhtml_string_append_lowercase_with_preprocessing(myhtml_string_t* str, con } else if(u_buff[i] == 0x00) { - MyHTML_STRING_REALLOC_IF_NEED(str, (length + 4), 32); + MyHTML_STRING_REALLOC_IF_NEED(str, 4, 32); + + if((unsigned char *)str->data != data) + data = (unsigned char*)str->data; // Unicode Character 'REPLACEMENT CHARACTER' (U+FFFD) data[str->length] = 0xEF; str->length++; @@ -733,7 +603,7 @@ void myhtml_string_append_chunk_with_convert_encoding_with_preprocessing(myhtml_ if(str->data[str->length] == 0x00) { - MyHTML_STRING_REALLOC_IF_NEED(str, (length + 4), 32); + MyHTML_STRING_REALLOC_IF_NEED(str, 4, 32); // Unicode Character 'REPLACEMENT CHARACTER' (U+FFFD) str->data[str->length] = 0xEF; str->length++; @@ -794,7 +664,7 @@ void myhtml_string_append_one_with_convert_encoding(myhtml_string_t* str, myhtml void myhtml_string_append_lowercase(myhtml_string_t* str, const char* data, size_t length) { - MyHTML_STRING_REALLOC_IF_NEED(str, (length + 1), (length + 32)); + MyHTML_STRING_REALLOC_IF_NEED(str, (length + 1), 32); unsigned char *ref = (unsigned char*)&str->data[str->length]; unsigned char *buf = (unsigned char*)data; diff --git a/source/myhtml/mystring.h b/source/myhtml/mystring.h index 9c09147..0542181 100644 --- a/source/myhtml/mystring.h +++ b/source/myhtml/mystring.h @@ -35,7 +35,7 @@ extern "C" { #define MyHTML_STRING_REALLOC_IF_NEED(__str__, __count__, __upto__) \ if((__str__->length + __count__) >= __str__->size) { \ - myhtml_string_release(__str__, (str->size + __upto__)); \ + myhtml_string_release(__str__, (__str__->length + __count__ + __upto__)); \ } \ #define MyHTML_STRING_APPEND_BYTE_WITHOUT_REALLOC(__byte__, __str__) \ @@ -77,7 +77,7 @@ struct myhtml_string_char_ref_chunk { long l_data; charef_entry_result_t charef_res; - mybool_t is_attributes; + bool is_attributes; myhtml_encoding_t encoding; myhtml_encoding_result_t res; @@ -91,7 +91,7 @@ char * myhtml_string_realloc(mchar_async_t *mchar, size_t node_id, myhtml_string void myhtml_string_clean(myhtml_string_t* str); void myhtml_string_clean_all(myhtml_string_t* str); -myhtml_string_t * myhtml_string_destroy(myhtml_string_t* str, mybool_t destroy_obj); +myhtml_string_t * myhtml_string_destroy(myhtml_string_t* str, bool destroy_obj); char * myhtml_string_data_alloc(mchar_async_t *mchar, size_t node_id, size_t size); char * myhtml_string_data_realloc(mchar_async_t *mchar, size_t node_id, char *data, size_t len_to_copy, size_t size); diff --git a/source/myhtml/parser.c b/source/myhtml/parser.c index 606cf94..8ee2e35 100644 --- a/source/myhtml/parser.c +++ b/source/myhtml/parser.c @@ -196,11 +196,11 @@ size_t myhtml_parser_add_text_lowercase(myhtml_tree_t *tree, myhtml_string_t* st return (string->length - save_str_len); } -size_t myhtml_parser_add_text_with_charef(myhtml_tree_t *tree, myhtml_string_t* string, const char *text, size_t begin, size_t length, mybool_t is_attibutes) +size_t myhtml_parser_add_text_with_charef(myhtml_tree_t *tree, myhtml_string_t* string, const char *text, size_t begin, size_t length, bool is_attibutes) { myhtml_incoming_buf_t *inc_buf = myhtml_parser_find_first_buf(tree, begin); - myhtml_string_char_ref_chunk_t str_chunk = {0, 0, 0, {}, is_attibutes, tree->encoding}; + myhtml_string_char_ref_chunk_t str_chunk = {0, 0, 0, {0}, is_attibutes, tree->encoding}; myhtml_encoding_result_clean(&str_chunk.res); size_t current_buf_offset = begin - inc_buf->offset; @@ -266,7 +266,7 @@ void myhtml_parser_worker(mythread_id_t thread_id, mythread_queue_node_t *qnode) token->type & MyHTML_TOKEN_TYPE_RCDATA || token->type & MyHTML_TOKEN_TYPE_CDATA) { - token->length = myhtml_parser_add_text_with_charef(qnode->tree, &token->my_str_tm, qnode->text, qnode->begin, qnode->length, myfalse); + token->length = myhtml_parser_add_text_with_charef(qnode->tree, &token->my_str_tm, qnode->text, qnode->begin, qnode->length, false); } else token->length = myhtml_parser_add_text(qnode->tree, &token->my_str_tm, qnode->text, qnode->begin, qnode->length); @@ -301,7 +301,7 @@ void myhtml_parser_worker(mythread_id_t thread_id, mythread_queue_node_t *qnode) size_t begin = attr->value_begin; attr->value_begin = attr->entry.length; - attr->value_length = myhtml_parser_add_text_with_charef(qnode->tree, &attr->entry, qnode->text, begin, attr->value_length, mytrue); + attr->value_length = myhtml_parser_add_text_with_charef(qnode->tree, &attr->entry, qnode->text, begin, attr->value_length, true); } attr->my_namespace = MyHTML_NAMESPACE_HTML; diff --git a/source/myhtml/perf.c b/source/myhtml/perf.c index c501dda..1d5e3d3 100644 --- a/source/myhtml/perf.c +++ b/source/myhtml/perf.c @@ -260,8 +260,10 @@ myhtml_status_t myhtml_hperf_print(const char *name, uint64_t x, uint64_t y, FIL unsigned long long freq = myhtml_hperf_res(&status); - _MyHTML_CHECK_STATUS_AND_PRINT_ERROR { - fprintf(fh, "%s: %0.5f\n", name, (((float)(y - x) / (float)freq))); + if(freq) { + _MyHTML_CHECK_STATUS_AND_PRINT_ERROR { + fprintf(fh, "%s: %0.5f\n", name, (((float)(y - x) / (float)freq))); + } } return status; @@ -272,8 +274,10 @@ myhtml_status_t myhtml_hperf_print_by_val(const char *name, uint64_t x, FILE *fh unsigned long long freq = myhtml_hperf_res(&status); - _MyHTML_CHECK_STATUS_AND_PRINT_ERROR { - fprintf(fh, "%s: %0.5f\n", name, ((float)x / (float)freq)); + if(freq) { + _MyHTML_CHECK_STATUS_AND_PRINT_ERROR { + fprintf(fh, "%s: %0.5f\n", name, ((float)x / (float)freq)); + } } return status; diff --git a/source/myhtml/rules.c b/source/myhtml/rules.c index 48efb00..36e0ca4 100644 --- a/source/myhtml/rules.c +++ b/source/myhtml/rules.c @@ -57,14 +57,14 @@ myhtml_token_node_t * myhtml_insertion_fix_split_for_text_begin_ws(myhtml_tree_t return new_token; } -mybool_t myhtml_insertion_mode_initial(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_initial(myhtml_tree_t* tree, myhtml_token_node_t* token) { switch (token->tag_ctx_idx) { case MyHTML_TAG__TEXT: { if(token->type & MyHTML_TOKEN_TYPE_WHITESPACE) { - return myfalse; + return false; } myhtml_insertion_fix_emit_for_text_begin_ws(token); @@ -78,7 +78,7 @@ mybool_t myhtml_insertion_mode_initial(myhtml_tree_t* tree, myhtml_token_node_t* case MyHTML_TAG__COMMENT: { myhtml_tree_node_insert_comment(tree, token, tree->document); - return myfalse; + return false; } case MyHTML_TAG__DOCTYPE: @@ -89,7 +89,7 @@ mybool_t myhtml_insertion_mode_initial(myhtml_tree_t* tree, myhtml_token_node_t* myhtml_tree_node_insert_doctype(tree, token); // fix for tokenizer - if(tree->doctype.is_html == myfalse && + if(tree->doctype.is_html == false && (tree->doctype.attr_public == NULL || tree->doctype.attr_system == NULL)) { @@ -97,7 +97,7 @@ mybool_t myhtml_insertion_mode_initial(myhtml_tree_t* tree, myhtml_token_node_t* } tree->insert_mode = MyHTML_INSERTION_MODE_BEFORE_HTML; - return myfalse; + return false; } default: @@ -106,10 +106,10 @@ mybool_t myhtml_insertion_mode_initial(myhtml_tree_t* tree, myhtml_token_node_t* break; } - return mytrue; + return true; } -mybool_t myhtml_insertion_mode_before_html(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_before_html(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -121,7 +121,7 @@ mybool_t myhtml_insertion_mode_before_html(myhtml_tree_t* tree, myhtml_token_nod { myhtml_tree_node_insert_root(tree, NULL, MyHTML_NAMESPACE_HTML); tree->insert_mode = MyHTML_INSERTION_MODE_BEFORE_HEAD; - return mytrue; + return true; } default: @@ -151,7 +151,7 @@ mybool_t myhtml_insertion_mode_before_html(myhtml_tree_t* tree, myhtml_token_nod // default, other token myhtml_tree_node_insert_root(tree, NULL, MyHTML_NAMESPACE_HTML); tree->insert_mode = MyHTML_INSERTION_MODE_BEFORE_HEAD; - return mytrue; + return true; } case MyHTML_TAG_HTML: @@ -165,15 +165,15 @@ mybool_t myhtml_insertion_mode_before_html(myhtml_tree_t* tree, myhtml_token_nod { myhtml_tree_node_insert_root(tree, NULL, MyHTML_NAMESPACE_HTML); tree->insert_mode = MyHTML_INSERTION_MODE_BEFORE_HEAD; - return mytrue; + return true; } } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_before_head(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_before_head(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -185,7 +185,7 @@ mybool_t myhtml_insertion_mode_before_head(myhtml_tree_t* tree, myhtml_token_nod { tree->node_head = myhtml_tree_node_insert(tree, MyHTML_TAG_HEAD, MyHTML_NAMESPACE_HTML); tree->insert_mode = MyHTML_INSERTION_MODE_IN_HEAD; - return mytrue; + return true; } default: @@ -206,7 +206,7 @@ mybool_t myhtml_insertion_mode_before_head(myhtml_tree_t* tree, myhtml_token_nod // default, other token tree->node_head = myhtml_tree_node_insert(tree, MyHTML_TAG_HEAD, MyHTML_NAMESPACE_HTML); tree->insert_mode = MyHTML_INSERTION_MODE_IN_HEAD; - return mytrue; + return true; } case MyHTML_TAG__COMMENT: @@ -234,15 +234,15 @@ mybool_t myhtml_insertion_mode_before_head(myhtml_tree_t* tree, myhtml_token_nod { tree->node_head = myhtml_tree_node_insert(tree, MyHTML_TAG_HEAD, MyHTML_NAMESPACE_HTML); tree->insert_mode = MyHTML_INSERTION_MODE_IN_HEAD; - return mytrue; + return true; } } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_in_head(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_in_head(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -260,7 +260,7 @@ mybool_t myhtml_insertion_mode_in_head(myhtml_tree_t* tree, myhtml_token_node_t* { myhtml_tree_open_elements_pop(tree); tree->insert_mode = MyHTML_INSERTION_MODE_AFTER_HEAD; - return mytrue; + return true; } case MyHTML_TAG_TEMPLATE: @@ -270,7 +270,7 @@ mybool_t myhtml_insertion_mode_in_head(myhtml_tree_t* tree, myhtml_token_node_t* // oh God... myhtml_tree_generate_all_implied_end_tags(tree, 0, MyHTML_NAMESPACE_UNDEF); - myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_TEMPLATE, MyHTML_NAMESPACE_HTML, myfalse); + myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_TEMPLATE, MyHTML_NAMESPACE_HTML, false); myhtml_tree_active_formatting_up_to_last_marker(tree); myhtml_tree_template_insertion_pop(tree); myhtml_tree_reset_insertion_mode_appropriately(tree); @@ -300,7 +300,7 @@ mybool_t myhtml_insertion_mode_in_head(myhtml_tree_t* tree, myhtml_token_node_t* // default, other token myhtml_tree_open_elements_pop(tree); tree->insert_mode = MyHTML_INSERTION_MODE_AFTER_HEAD; - return mytrue; + return true; } case MyHTML_TAG__COMMENT: @@ -421,15 +421,15 @@ mybool_t myhtml_insertion_mode_in_head(myhtml_tree_t* tree, myhtml_token_node_t* myhtml_tree_open_elements_pop(tree); tree->insert_mode = MyHTML_INSERTION_MODE_AFTER_HEAD; - return mytrue; + return true; } } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_in_head_noscript(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_in_head_noscript(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -445,7 +445,7 @@ mybool_t myhtml_insertion_mode_in_head_noscript(myhtml_tree_t* tree, myhtml_toke { myhtml_tree_open_elements_pop(tree); tree->insert_mode = MyHTML_INSERTION_MODE_IN_HEAD; - return mytrue; + return true; } default: @@ -471,7 +471,7 @@ mybool_t myhtml_insertion_mode_in_head_noscript(myhtml_tree_t* tree, myhtml_toke // default, other token myhtml_tree_open_elements_pop(tree); tree->insert_mode = MyHTML_INSERTION_MODE_IN_HEAD; - return mytrue; + return true; } case MyHTML_TAG_BASEFONT: @@ -491,15 +491,15 @@ mybool_t myhtml_insertion_mode_in_head_noscript(myhtml_tree_t* tree, myhtml_toke { myhtml_tree_open_elements_pop(tree); tree->insert_mode = MyHTML_INSERTION_MODE_IN_HEAD; - return mytrue; + return true; } } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_after_head(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_after_head(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -508,9 +508,9 @@ mybool_t myhtml_insertion_mode_after_head(myhtml_tree_t* tree, myhtml_token_node case MyHTML_TAG_HTML: case MyHTML_TAG_BODY: { - myhtml_tree_node_insert(tree, MyHTML_TAG_BODY, MyHTML_NAMESPACE_HTML); + tree->node_body = myhtml_tree_node_insert(tree, MyHTML_TAG_BODY, MyHTML_NAMESPACE_HTML); tree->insert_mode = MyHTML_INSERTION_MODE_IN_BODY; - return mytrue; + return true; } case MyHTML_TAG_TEMPLATE: @@ -538,9 +538,9 @@ mybool_t myhtml_insertion_mode_after_head(myhtml_tree_t* tree, myhtml_token_node myhtml_tree_node_insert_text(tree, new_token); // default, other token - myhtml_tree_node_insert(tree, MyHTML_TAG_BODY, MyHTML_NAMESPACE_HTML); + tree->node_body = myhtml_tree_node_insert(tree, MyHTML_TAG_BODY, MyHTML_NAMESPACE_HTML); tree->insert_mode = MyHTML_INSERTION_MODE_IN_BODY; - return mytrue; + return true; } case MyHTML_TAG__COMMENT: @@ -555,7 +555,7 @@ mybool_t myhtml_insertion_mode_after_head(myhtml_tree_t* tree, myhtml_token_node case MyHTML_TAG_BODY: { - myhtml_tree_node_insert_html_element(tree, token); + tree->node_body = myhtml_tree_node_insert_html_element(tree, token); tree->flags ^= (tree->flags & MyHTML_TREE_FLAGS_FRAMESET_OK); tree->insert_mode = MyHTML_INSERTION_MODE_IN_BODY; @@ -590,20 +590,18 @@ mybool_t myhtml_insertion_mode_after_head(myhtml_tree_t* tree, myhtml_token_node default: { - myhtml_tree_node_insert(tree, MyHTML_TAG_BODY, MyHTML_NAMESPACE_HTML); + tree->node_body = myhtml_tree_node_insert(tree, MyHTML_TAG_BODY, MyHTML_NAMESPACE_HTML); tree->insert_mode = MyHTML_INSERTION_MODE_IN_BODY; - return mytrue; + return true; } } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_in_body_other_end_tag(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_in_body_other_end_tag(myhtml_tree_t* tree, myhtml_token_node_t* token) { - myhtml_tag_context_t* tags_context = tree->myhtml->tags->context; - // step 1 size_t i = tree->open_elements->length; while(i) { @@ -615,20 +613,21 @@ mybool_t myhtml_insertion_mode_in_body_other_end_tag(myhtml_tree_t* tree, myhtml while (node->tag_idx == token->tag_ctx_idx && node->my_namespace == MyHTML_NAMESPACE_HTML) { myhtml_tree_generate_implied_end_tags(tree, token->tag_ctx_idx, MyHTML_NAMESPACE_HTML); - myhtml_tree_open_elements_pop_until_by_node(tree, node, myfalse); + myhtml_tree_open_elements_pop_until_by_node(tree, node, false); - return myfalse; + return false; } - if(tags_context[node->tag_idx].cats[node->my_namespace] & MyHTML_TAG_CATEGORIES_SPECIAL) { + const myhtml_tag_context_t *tag_ctx = myhtml_tag_get_by_id(tree->tags, node->tag_idx); + if(tag_ctx->cats[node->my_namespace] & MyHTML_TAG_CATEGORIES_SPECIAL) { break; } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -713,7 +712,7 @@ mybool_t myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* } tree->insert_mode = MyHTML_INSERTION_MODE_AFTER_BODY; - return mytrue; + return true; } case MyHTML_TAG_ADDRESS: @@ -755,7 +754,7 @@ mybool_t myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* // parse error // step 3 - myhtml_tree_open_elements_pop_until(tree, token->tag_ctx_idx, MyHTML_NAMESPACE_HTML, myfalse); + myhtml_tree_open_elements_pop_until(tree, token->tag_ctx_idx, MyHTML_NAMESPACE_HTML, false); break; } @@ -772,7 +771,7 @@ mybool_t myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* tree->node_form = NULL; // step 3 - if(node == NULL || myhtml_tree_element_in_scope_by_node(tree, node, MyHTML_TAG_CATEGORIES_SCOPE) == myfalse) { + if(node == NULL || myhtml_tree_element_in_scope_by_node(tree, node, MyHTML_TAG_CATEGORIES_SCOPE) == false) { // parse error break; } @@ -805,7 +804,7 @@ mybool_t myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* // // parse error // step 4 - myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_FORM, MyHTML_NAMESPACE_HTML, myfalse); + myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_FORM, MyHTML_NAMESPACE_HTML, false); } break; @@ -838,7 +837,7 @@ mybool_t myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* // // parse error // step 3 - myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_LI, MyHTML_NAMESPACE_HTML, myfalse); + myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_LI, MyHTML_NAMESPACE_HTML, false); break; } @@ -860,7 +859,7 @@ mybool_t myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* // // parse error // step 3 - myhtml_tree_open_elements_pop_until(tree, token->tag_ctx_idx, MyHTML_NAMESPACE_HTML, myfalse); + myhtml_tree_open_elements_pop_until(tree, token->tag_ctx_idx, MyHTML_NAMESPACE_HTML, false); break; } @@ -873,13 +872,14 @@ mybool_t myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* case MyHTML_TAG_H6: { myhtml_tree_node_t** list = tree->open_elements->list; - myhtml_tag_context_t* tags_context = tree->myhtml->tags->context; myhtml_tree_node_t* node = NULL; size_t i = tree->open_elements->length; while(i) { i--; + const myhtml_tag_context_t *tag_ctx = myhtml_tag_get_by_id(tree->tags, list[i]->tag_idx); + if((list[i]->tag_idx == MyHTML_TAG_H1 || list[i]->tag_idx == MyHTML_TAG_H2 || list[i]->tag_idx == MyHTML_TAG_H3 || @@ -891,7 +891,7 @@ mybool_t myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* break; } // TODO: This is wrong!!! - else if(tags_context[list[i]->tag_idx].cats[list[i]->my_namespace] & MyHTML_TAG_CATEGORIES_SCOPE) + else if(tag_ctx->cats[list[i]->my_namespace] & MyHTML_TAG_CATEGORIES_SCOPE) break; } @@ -966,7 +966,7 @@ mybool_t myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* // // parse error // step 3 - myhtml_tree_open_elements_pop_until(tree, token->tag_ctx_idx, MyHTML_NAMESPACE_HTML, myfalse); + myhtml_tree_open_elements_pop_until(tree, token->tag_ctx_idx, MyHTML_NAMESPACE_HTML, false); // step 4 myhtml_tree_active_formatting_up_to_last_marker(tree); @@ -1108,7 +1108,7 @@ mybool_t myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* myhtml_tree_node_t* node = tree->open_elements->list[1]; myhtml_tree_node_remove(node); - myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_HTML, MyHTML_NAMESPACE_HTML, mytrue); + myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_HTML, MyHTML_NAMESPACE_HTML, true); myhtml_tree_node_insert_html_element(tree, token); @@ -1249,20 +1249,20 @@ mybool_t myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* { tree->flags ^= (tree->flags & MyHTML_TREE_FLAGS_FRAMESET_OK); - myhtml_tag_context_t* tags_context = tree->myhtml->tags->context; size_t oel_index = tree->open_elements->length; while (oel_index) { oel_index--; myhtml_tree_node_t* node = tree->open_elements->list[oel_index]; + const myhtml_tag_context_t *tag_ctx = myhtml_tag_get_by_id(tree->tags, node->tag_idx); if(myhtml_is_html_node(node, MyHTML_TAG_LI)) { myhtml_tree_generate_implied_end_tags(tree, MyHTML_TAG_LI, MyHTML_NAMESPACE_HTML); - myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_LI, MyHTML_NAMESPACE_HTML, myfalse); + myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_LI, MyHTML_NAMESPACE_HTML, false); break; } - else if(tags_context[node->tag_idx].cats[node->my_namespace] & MyHTML_TAG_CATEGORIES_SPECIAL) + else if(tag_ctx->cats[node->my_namespace] & MyHTML_TAG_CATEGORIES_SPECIAL) { if(!((node->tag_idx == MyHTML_TAG_ADDRESS || node->tag_idx == MyHTML_TAG_DIV || node->tag_idx == MyHTML_TAG_P) && node->my_namespace == MyHTML_NAMESPACE_HTML)) @@ -1284,25 +1284,25 @@ mybool_t myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* // this is copy/past tree->flags ^= (tree->flags & MyHTML_TREE_FLAGS_FRAMESET_OK); - myhtml_tag_context_t* tags_context = tree->myhtml->tags->context; size_t oel_index = tree->open_elements->length; while (oel_index) { oel_index--; myhtml_tree_node_t* node = tree->open_elements->list[oel_index]; + const myhtml_tag_context_t *tag_ctx = myhtml_tag_get_by_id(tree->tags, node->tag_idx); if(myhtml_is_html_node(node, MyHTML_TAG_DD)) { myhtml_tree_generate_implied_end_tags(tree, MyHTML_TAG_DD, MyHTML_NAMESPACE_HTML); - myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_DD, MyHTML_NAMESPACE_HTML, myfalse); + myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_DD, MyHTML_NAMESPACE_HTML, false); break; } else if(myhtml_is_html_node(node, MyHTML_TAG_DT)) { myhtml_tree_generate_implied_end_tags(tree, MyHTML_TAG_DT, MyHTML_NAMESPACE_HTML); - myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_DT, MyHTML_NAMESPACE_HTML, myfalse); + myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_DT, MyHTML_NAMESPACE_HTML, false); break; } - else if(tags_context[node->tag_idx].cats[node->my_namespace] & MyHTML_TAG_CATEGORIES_SPECIAL) + else if(tag_ctx->cats[node->my_namespace] & MyHTML_TAG_CATEGORIES_SPECIAL) { if(!((node->tag_idx == MyHTML_TAG_ADDRESS || node->tag_idx == MyHTML_TAG_DIV || node->tag_idx == MyHTML_TAG_P) && node->my_namespace == MyHTML_NAMESPACE_HTML)) @@ -1334,7 +1334,7 @@ mybool_t myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* { if(myhtml_tree_element_in_scope(tree, MyHTML_TAG_BUTTON, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SCOPE)) { myhtml_tree_generate_implied_end_tags(tree, 0, MyHTML_NAMESPACE_UNDEF); - myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_BUTTON, MyHTML_NAMESPACE_HTML, myfalse); + myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_BUTTON, MyHTML_NAMESPACE_HTML, false); } myhtml_tree_active_formatting_reconstruction(tree); @@ -1484,7 +1484,7 @@ mybool_t myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* case MyHTML_TAG_IMAGE: { token->tag_ctx_idx = MyHTML_TAG_IMG; - return mytrue; + return true; } case MyHTML_TAG_ISINDEX: @@ -1792,10 +1792,10 @@ mybool_t myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_text(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_text(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -1827,16 +1827,16 @@ mybool_t myhtml_insertion_mode_text(myhtml_tree_t* tree, myhtml_token_node_t* to myhtml_tree_open_elements_pop(tree); tree->insert_mode = tree->orig_insert_mode; - return mytrue; + return true; } myhtml_tree_node_insert_text(tree, token); } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_in_table(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_in_table(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -1849,7 +1849,7 @@ mybool_t myhtml_insertion_mode_in_table(myhtml_tree_t* tree, myhtml_token_node_t // parse error break; - myhtml_tree_open_elements_pop_until_by_node(tree, table_node, myfalse); + myhtml_tree_open_elements_pop_until_by_node(tree, table_node, false); myhtml_tree_reset_insertion_mode_appropriately(tree); break; @@ -1878,9 +1878,9 @@ mybool_t myhtml_insertion_mode_in_table(myhtml_tree_t* tree, myhtml_token_node_t default: { // parse error - tree->foster_parenting = mytrue; + tree->foster_parenting = true; myhtml_insertion_mode_in_body(tree, token); - tree->foster_parenting = myfalse; + tree->foster_parenting = false; break; } @@ -1905,12 +1905,12 @@ mybool_t myhtml_insertion_mode_in_table(myhtml_tree_t* tree, myhtml_token_node_t tree->orig_insert_mode = tree->insert_mode; tree->insert_mode = MyHTML_INSERTION_MODE_IN_TABLE_TEXT; - return mytrue; + return true; } else { - tree->foster_parenting = mytrue; + tree->foster_parenting = true; myhtml_insertion_mode_in_body(tree, token); - tree->foster_parenting = myfalse; + tree->foster_parenting = false; break; } @@ -1950,7 +1950,7 @@ mybool_t myhtml_insertion_mode_in_table(myhtml_tree_t* tree, myhtml_token_node_t myhtml_tree_node_insert(tree, MyHTML_TAG_COLGROUP, MyHTML_NAMESPACE_HTML); tree->insert_mode = MyHTML_INSERTION_MODE_IN_COLUMN_GROUP; - return mytrue; + return true; } case MyHTML_TAG_TBODY: @@ -1973,7 +1973,7 @@ mybool_t myhtml_insertion_mode_in_table(myhtml_tree_t* tree, myhtml_token_node_t myhtml_tree_node_insert(tree, MyHTML_TAG_TBODY, MyHTML_NAMESPACE_HTML); tree->insert_mode = MyHTML_INSERTION_MODE_IN_TABLE_BODY; - return mytrue; + return true; } case MyHTML_TAG_TABLE: @@ -1984,10 +1984,10 @@ mybool_t myhtml_insertion_mode_in_table(myhtml_tree_t* tree, myhtml_token_node_t if(table_node == NULL) break; - myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_TABLE, MyHTML_NAMESPACE_HTML, myfalse); + myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_TABLE, MyHTML_NAMESPACE_HTML, false); myhtml_tree_reset_insertion_mode_appropriately(tree); - return mytrue; + return true; } case MyHTML_TAG_STYLE: @@ -2001,9 +2001,9 @@ mybool_t myhtml_insertion_mode_in_table(myhtml_tree_t* tree, myhtml_token_node_t { myhtml_token_node_wait_for_done(token); if(myhtml_token_attr_match_case(tree->token, token, "type", 4, "hidden", 6) == NULL) { - tree->foster_parenting = mytrue; + tree->foster_parenting = true; myhtml_insertion_mode_in_body(tree, token); - tree->foster_parenting = myfalse; + tree->foster_parenting = false; break; } @@ -2035,35 +2035,35 @@ mybool_t myhtml_insertion_mode_in_table(myhtml_tree_t* tree, myhtml_token_node_t default: { // parse error - tree->foster_parenting = mytrue; + tree->foster_parenting = true; myhtml_insertion_mode_in_body(tree, token); - tree->foster_parenting = myfalse; + tree->foster_parenting = false; break; } } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_in_table_text(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_in_table_text(myhtml_tree_t* tree, myhtml_token_node_t* token) { // skip NULL, we replaced earlier if(token->tag_ctx_idx == MyHTML_TAG__TEXT) { if(token->type & MyHTML_TOKEN_TYPE_NULL) - return myfalse; + return false; myhtml_tree_token_list_append(tree->token_list, token); } else { myhtml_tree_token_list_t* token_list = tree->token_list; - mybool_t is_not_ws = myfalse; + bool is_not_ws = false; for(size_t i = 0; i < token_list->length; i++) { if((token_list->list[i]->type & MyHTML_TOKEN_TYPE_WHITESPACE) == 0) { - is_not_ws = mytrue; + is_not_ws = true; break; } } @@ -2071,9 +2071,9 @@ mybool_t myhtml_insertion_mode_in_table_text(myhtml_tree_t* tree, myhtml_token_n if(is_not_ws) { for(size_t i = 0; i < token_list->length; i++) { - tree->foster_parenting = mytrue; + tree->foster_parenting = true; myhtml_insertion_mode_in_body(tree, token_list->list[i]); - tree->foster_parenting = myfalse; + tree->foster_parenting = false; } } else { @@ -2083,13 +2083,13 @@ mybool_t myhtml_insertion_mode_in_table_text(myhtml_tree_t* tree, myhtml_token_n } tree->insert_mode = tree->orig_insert_mode; - return mytrue; + return true; } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_in_caption(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_in_caption(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -2108,7 +2108,7 @@ mybool_t myhtml_insertion_mode_in_caption(myhtml_tree_t* tree, myhtml_token_node // // parse error //} - myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_CAPTION, MyHTML_NAMESPACE_HTML, myfalse); + myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_CAPTION, MyHTML_NAMESPACE_HTML, false); myhtml_tree_active_formatting_up_to_last_marker(tree); tree->insert_mode = MyHTML_INSERTION_MODE_IN_TABLE; @@ -2129,11 +2129,11 @@ mybool_t myhtml_insertion_mode_in_caption(myhtml_tree_t* tree, myhtml_token_node // // parse error //} - myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_CAPTION, MyHTML_NAMESPACE_HTML, myfalse); + myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_CAPTION, MyHTML_NAMESPACE_HTML, false); myhtml_tree_active_formatting_up_to_last_marker(tree); tree->insert_mode = MyHTML_INSERTION_MODE_IN_TABLE; - return mytrue; + return true; } case MyHTML_TAG_BODY: @@ -2179,11 +2179,11 @@ mybool_t myhtml_insertion_mode_in_caption(myhtml_tree_t* tree, myhtml_token_node // // parse error //} - myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_CAPTION, MyHTML_NAMESPACE_HTML, myfalse); + myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_CAPTION, MyHTML_NAMESPACE_HTML, false); myhtml_tree_active_formatting_up_to_last_marker(tree); tree->insert_mode = MyHTML_INSERTION_MODE_IN_TABLE; - return mytrue; + return true; } default: @@ -2191,10 +2191,10 @@ mybool_t myhtml_insertion_mode_in_caption(myhtml_tree_t* tree, myhtml_token_node } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_in_column_group(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_in_column_group(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -2234,7 +2234,7 @@ mybool_t myhtml_insertion_mode_in_column_group(myhtml_tree_t* tree, myhtml_token myhtml_tree_open_elements_pop(tree); tree->insert_mode = MyHTML_INSERTION_MODE_IN_TABLE; - return mytrue; + return true; } break; @@ -2262,7 +2262,7 @@ mybool_t myhtml_insertion_mode_in_column_group(myhtml_tree_t* tree, myhtml_token myhtml_tree_open_elements_pop(tree); tree->insert_mode = MyHTML_INSERTION_MODE_IN_TABLE; - return mytrue; + return true; } // parse error @@ -2308,7 +2308,7 @@ mybool_t myhtml_insertion_mode_in_column_group(myhtml_tree_t* tree, myhtml_token myhtml_tree_open_elements_pop(tree); tree->insert_mode = MyHTML_INSERTION_MODE_IN_TABLE; - return mytrue; + return true; } // parse error @@ -2317,10 +2317,10 @@ mybool_t myhtml_insertion_mode_in_column_group(myhtml_tree_t* tree, myhtml_token } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_in_table_body(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_in_table_body(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -2356,7 +2356,7 @@ mybool_t myhtml_insertion_mode_in_table_body(myhtml_tree_t* tree, myhtml_token_n myhtml_tree_open_elements_pop(tree); tree->insert_mode = MyHTML_INSERTION_MODE_IN_TABLE; - return mytrue; + return true; } case MyHTML_TAG_BODY: @@ -2398,7 +2398,7 @@ mybool_t myhtml_insertion_mode_in_table_body(myhtml_tree_t* tree, myhtml_token_n myhtml_tree_node_insert(tree, MyHTML_TAG_TR, MyHTML_NAMESPACE_HTML); tree->insert_mode = MyHTML_INSERTION_MODE_IN_ROW; - return mytrue; + return true; } case MyHTML_TAG_CAPTION: @@ -2420,7 +2420,7 @@ mybool_t myhtml_insertion_mode_in_table_body(myhtml_tree_t* tree, myhtml_token_n myhtml_tree_open_elements_pop(tree); tree->insert_mode = MyHTML_INSERTION_MODE_IN_TABLE; - return mytrue; + return true; } default: @@ -2428,10 +2428,10 @@ mybool_t myhtml_insertion_mode_in_table_body(myhtml_tree_t* tree, myhtml_token_n } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_in_row(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_in_row(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -2464,7 +2464,7 @@ mybool_t myhtml_insertion_mode_in_row(myhtml_tree_t* tree, myhtml_token_node_t* myhtml_tree_open_elements_pop(tree); tree->insert_mode = MyHTML_INSERTION_MODE_IN_TABLE_BODY; - return mytrue; + return true; } case MyHTML_TAG_TBODY: @@ -2484,7 +2484,7 @@ mybool_t myhtml_insertion_mode_in_row(myhtml_tree_t* tree, myhtml_token_node_t* myhtml_tree_open_elements_pop(tree); tree->insert_mode = MyHTML_INSERTION_MODE_IN_TABLE_BODY; - return mytrue; + return true; } default: @@ -2523,7 +2523,7 @@ mybool_t myhtml_insertion_mode_in_row(myhtml_tree_t* tree, myhtml_token_node_t* myhtml_tree_open_elements_pop(tree); tree->insert_mode = MyHTML_INSERTION_MODE_IN_TABLE_BODY; - return mytrue; + return true; } default: @@ -2531,10 +2531,10 @@ mybool_t myhtml_insertion_mode_in_row(myhtml_tree_t* tree, myhtml_token_node_t* } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_in_cell(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_in_cell(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -2558,7 +2558,7 @@ mybool_t myhtml_insertion_mode_in_cell(myhtml_tree_t* tree, myhtml_token_node_t* // parse error } - myhtml_tree_open_elements_pop_until(tree, token->tag_ctx_idx, MyHTML_NAMESPACE_HTML, myfalse); + myhtml_tree_open_elements_pop_until(tree, token->tag_ctx_idx, MyHTML_NAMESPACE_HTML, false); myhtml_tree_active_formatting_up_to_last_marker(tree); @@ -2595,7 +2595,7 @@ mybool_t myhtml_insertion_mode_in_cell(myhtml_tree_t* tree, myhtml_token_node_t* myhtml_tree_close_cell(tree, node); } - return mytrue; + return true; } default: @@ -2624,7 +2624,7 @@ mybool_t myhtml_insertion_mode_in_cell(myhtml_tree_t* tree, myhtml_token_node_t* myhtml_tree_close_cell(tree, (td_node == NULL ? th_node : td_node)); - return mytrue; + return true; } default: @@ -2632,10 +2632,10 @@ mybool_t myhtml_insertion_mode_in_cell(myhtml_tree_t* tree, myhtml_token_node_t* } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_in_select(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_in_select(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -2696,7 +2696,7 @@ mybool_t myhtml_insertion_mode_in_select(myhtml_tree_t* tree, myhtml_token_node_ // parse error break; - myhtml_tree_open_elements_pop_until_by_node(tree, select_node, myfalse); + myhtml_tree_open_elements_pop_until_by_node(tree, select_node, false); myhtml_tree_reset_insertion_mode_appropriately(tree); break; @@ -2768,7 +2768,7 @@ mybool_t myhtml_insertion_mode_in_select(myhtml_tree_t* tree, myhtml_token_node_ if(select_node == NULL) break; - myhtml_tree_open_elements_pop_until_by_node(tree, select_node, myfalse); + myhtml_tree_open_elements_pop_until_by_node(tree, select_node, false); myhtml_tree_reset_insertion_mode_appropriately(tree); break; @@ -2784,10 +2784,10 @@ mybool_t myhtml_insertion_mode_in_select(myhtml_tree_t* tree, myhtml_token_node_ if(select_node == NULL) break; - myhtml_tree_open_elements_pop_until_by_node(tree, select_node, myfalse); + myhtml_tree_open_elements_pop_until_by_node(tree, select_node, false); myhtml_tree_reset_insertion_mode_appropriately(tree); - return mytrue; + return true; } case MyHTML_TAG_SCRIPT: @@ -2803,10 +2803,10 @@ mybool_t myhtml_insertion_mode_in_select(myhtml_tree_t* tree, myhtml_token_node_ } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_in_select_in_table(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_in_select_in_table(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -2826,10 +2826,10 @@ mybool_t myhtml_insertion_mode_in_select_in_table(myhtml_tree_t* tree, myhtml_to if(some_node == NULL) break; - myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_SELECT, MyHTML_NAMESPACE_HTML, myfalse); + myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_SELECT, MyHTML_NAMESPACE_HTML, false); myhtml_tree_reset_insertion_mode_appropriately(tree); - return mytrue; + return true; } default: @@ -2849,10 +2849,10 @@ mybool_t myhtml_insertion_mode_in_select_in_table(myhtml_tree_t* tree, myhtml_to case MyHTML_TAG_TH: { // parse error - myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_SELECT, MyHTML_NAMESPACE_HTML, myfalse); + myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_SELECT, MyHTML_NAMESPACE_HTML, false); myhtml_tree_reset_insertion_mode_appropriately(tree); - return mytrue; + return true; } default: @@ -2860,10 +2860,10 @@ mybool_t myhtml_insertion_mode_in_select_in_table(myhtml_tree_t* tree, myhtml_to } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_in_template(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_in_template(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -2904,21 +2904,21 @@ mybool_t myhtml_insertion_mode_in_template(myhtml_tree_t* tree, myhtml_token_nod myhtml_tree_template_insertion_append(tree, MyHTML_INSERTION_MODE_IN_TABLE); tree->insert_mode = MyHTML_INSERTION_MODE_IN_TABLE; - return mytrue; + return true; case MyHTML_TAG_COL: myhtml_tree_template_insertion_pop(tree); myhtml_tree_template_insertion_append(tree, MyHTML_INSERTION_MODE_IN_COLUMN_GROUP); tree->insert_mode = MyHTML_INSERTION_MODE_IN_COLUMN_GROUP; - return mytrue; + return true; case MyHTML_TAG_TR: myhtml_tree_template_insertion_pop(tree); myhtml_tree_template_insertion_append(tree, MyHTML_INSERTION_MODE_IN_TABLE_BODY); tree->insert_mode = MyHTML_INSERTION_MODE_IN_TABLE_BODY; - return mytrue; + return true; case MyHTML_TAG_TD: case MyHTML_TAG_TH: @@ -2926,7 +2926,7 @@ mybool_t myhtml_insertion_mode_in_template(myhtml_tree_t* tree, myhtml_token_nod myhtml_tree_template_insertion_append(tree, MyHTML_INSERTION_MODE_IN_ROW); tree->insert_mode = MyHTML_INSERTION_MODE_IN_ROW; - return mytrue; + return true; case MyHTML_TAG__END_OF_FILE: { @@ -2938,12 +2938,12 @@ mybool_t myhtml_insertion_mode_in_template(myhtml_tree_t* tree, myhtml_token_nod } // parse error - myhtml_tree_open_elements_pop_until_by_node(tree, node, myfalse); + myhtml_tree_open_elements_pop_until_by_node(tree, node, false); myhtml_tree_active_formatting_up_to_last_marker(tree); myhtml_tree_template_insertion_pop(tree); myhtml_tree_reset_insertion_mode_appropriately(tree); - return mytrue; + return true; } default: @@ -2951,14 +2951,14 @@ mybool_t myhtml_insertion_mode_in_template(myhtml_tree_t* tree, myhtml_token_nod myhtml_tree_template_insertion_append(tree, MyHTML_INSERTION_MODE_IN_BODY); tree->insert_mode = MyHTML_INSERTION_MODE_IN_BODY; - return mytrue; + return true; } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_after_body(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_after_body(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -2976,7 +2976,7 @@ mybool_t myhtml_insertion_mode_after_body(myhtml_tree_t* tree, myhtml_token_node default: tree->insert_mode = MyHTML_INSERTION_MODE_IN_BODY; - return mytrue; + return true; } } else { @@ -2988,7 +2988,7 @@ mybool_t myhtml_insertion_mode_after_body(myhtml_tree_t* tree, myhtml_token_node return myhtml_insertion_mode_in_body(tree, token); tree->insert_mode = MyHTML_INSERTION_MODE_IN_BODY; - return mytrue; + return true; } case MyHTML_TAG__COMMENT: @@ -3025,14 +3025,14 @@ mybool_t myhtml_insertion_mode_after_body(myhtml_tree_t* tree, myhtml_token_node default: tree->insert_mode = MyHTML_INSERTION_MODE_IN_BODY; - return mytrue; + return true; } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_in_frameset(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_in_frameset(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -3128,10 +3128,10 @@ mybool_t myhtml_insertion_mode_in_frameset(myhtml_tree_t* tree, myhtml_token_nod } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_after_frameset(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_after_frameset(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { @@ -3192,15 +3192,15 @@ mybool_t myhtml_insertion_mode_after_frameset(myhtml_tree_t* tree, myhtml_token_ } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_after_after_body(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_after_after_body(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { tree->insert_mode = MyHTML_INSERTION_MODE_IN_BODY; - return mytrue; + return true; } else { switch (token->tag_ctx_idx) @@ -3224,7 +3224,7 @@ mybool_t myhtml_insertion_mode_after_after_body(myhtml_tree_t* tree, myhtml_toke return myhtml_insertion_mode_in_body(tree, token); tree->insert_mode = MyHTML_INSERTION_MODE_IN_BODY; - return mytrue; + return true; } case MyHTML_TAG_HTML: @@ -3237,17 +3237,17 @@ mybool_t myhtml_insertion_mode_after_after_body(myhtml_tree_t* tree, myhtml_toke default: tree->insert_mode = MyHTML_INSERTION_MODE_IN_BODY; - return mytrue; + return true; } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_after_after_frameset(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_after_after_frameset(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { - return myfalse; + return false; } else { switch (token->tag_ctx_idx) @@ -3295,10 +3295,10 @@ mybool_t myhtml_insertion_mode_after_after_frameset(myhtml_tree_t* tree, myhtml_ } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_in_foreign_content_end_other(myhtml_tree_t* tree, myhtml_tree_node_t* current_node, myhtml_token_node_t* token) +bool myhtml_insertion_mode_in_foreign_content_end_other(myhtml_tree_t* tree, myhtml_tree_node_t* current_node, myhtml_token_node_t* token) { if(current_node->tag_idx != token->tag_ctx_idx) { // parse error @@ -3314,8 +3314,8 @@ mybool_t myhtml_insertion_mode_in_foreign_content_end_other(myhtml_tree_t* tree, current_node = list[i]; if(current_node->tag_idx == token->tag_ctx_idx) { - myhtml_tree_open_elements_pop_until_by_node(tree, current_node, myfalse); - return myfalse; + myhtml_tree_open_elements_pop_until_by_node(tree, current_node, false); + return false; } i--; @@ -3328,7 +3328,7 @@ mybool_t myhtml_insertion_mode_in_foreign_content_end_other(myhtml_tree_t* tree, return tree->myhtml->insertion_func[tree->insert_mode](tree, token); } -mybool_t myhtml_insertion_mode_in_foreign_content_start_other(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_in_foreign_content_start_other(myhtml_tree_t* tree, myhtml_token_node_t* token) { myhtml_tree_node_t* adjusted_node = myhtml_tree_adjusted_current_node(tree); @@ -3358,10 +3358,10 @@ mybool_t myhtml_insertion_mode_in_foreign_content_start_other(myhtml_tree_t* tre } } - return myfalse; + return false; } -mybool_t myhtml_insertion_mode_in_foreign_content(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_insertion_mode_in_foreign_content(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(token->type & MyHTML_TOKEN_TYPE_CLOSE) { myhtml_tree_node_t* current_node = myhtml_tree_current_node(tree); @@ -3372,7 +3372,7 @@ mybool_t myhtml_insertion_mode_in_foreign_content(myhtml_tree_t* tree, myhtml_to { myhtml_tree_open_elements_pop(tree); // TODO: now script is disable, skip this - return myfalse; + return false; } return myhtml_insertion_mode_in_foreign_content_end_other(tree, current_node, token); @@ -3470,7 +3470,7 @@ mybool_t myhtml_insertion_mode_in_foreign_content(myhtml_tree_t* tree, myhtml_to myhtml_tree_is_html_integration_point(tree, current_node) || current_node->my_namespace == MyHTML_NAMESPACE_HTML)); - return mytrue; + return true; } } @@ -3479,7 +3479,7 @@ mybool_t myhtml_insertion_mode_in_foreign_content(myhtml_tree_t* tree, myhtml_to } } - return myfalse; + return false; } void myhtml_rules_stop_parsing(myhtml_tree_t* tree) @@ -3487,7 +3487,7 @@ void myhtml_rules_stop_parsing(myhtml_tree_t* tree) // THIS! IS! -(SPARTA!)- STOP PARSING } -mybool_t myhtml_rules_check_for_first_newline(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_rules_check_for_first_newline(myhtml_tree_t* tree, myhtml_token_node_t* token) { if(tree->flags & MyHTML_TREE_FLAGS_PARSE_FLAG) { if(tree->flags &MyHTML_TREE_FLAGS_PARSE_FLAG_EMIT_NEWLINE) @@ -3504,31 +3504,31 @@ mybool_t myhtml_rules_check_for_first_newline(myhtml_tree_t* tree, myhtml_token_ if(token->length == 0) { tree->flags ^= (tree->flags & MyHTML_TREE_FLAGS_PARSE_FLAG); - return mytrue; + return true; } } } else - return mytrue; + return true; } } tree->flags ^= (tree->flags & MyHTML_TREE_FLAGS_PARSE_FLAG); } - return myfalse; + return false; } -mybool_t myhtml_rules_tree_dispatcher(myhtml_tree_t* tree, myhtml_token_node_t* token) +bool myhtml_rules_tree_dispatcher(myhtml_tree_t* tree, myhtml_token_node_t* token) { // for textarea && pre && listen if(myhtml_rules_check_for_first_newline(tree, token)) - return myfalse; + return false; if(tree->state_of_builder != MyHTML_TOKENIZER_STATE_DATA) tree->state_of_builder = MyHTML_TOKENIZER_STATE_DATA; - mybool_t reprocess = myfalse; + bool reprocess = false; myhtml_tree_node_t* adjusted_node = myhtml_tree_adjusted_current_node(tree); if(tree->open_elements->length == 0 || adjusted_node->my_namespace == MyHTML_NAMESPACE_HTML) { @@ -3557,7 +3557,7 @@ mybool_t myhtml_rules_tree_dispatcher(myhtml_tree_t* tree, myhtml_token_node_t* else reprocess = myhtml_insertion_mode_in_foreign_content(tree, token); - if(reprocess == myfalse) { + if(reprocess == false) { tree->token_last_done = token; } diff --git a/source/myhtml/rules.h b/source/myhtml/rules.h index e260558..4526df3 100644 --- a/source/myhtml/rules.h +++ b/source/myhtml/rules.h @@ -32,10 +32,10 @@ extern "C" { myhtml_status_t myhtml_rules_init(myhtml_t* myhtml); void myhtml_rules_stop_parsing(myhtml_tree_t* tree); -mybool_t myhtml_rules_tree_dispatcher(myhtml_tree_t* tree, myhtml_token_node_t* token); -mybool_t myhtml_insertion_mode_in_body_other_end_tag(myhtml_tree_t* tree, myhtml_token_node_t* token); -mybool_t myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* token); -mybool_t myhtml_insertion_mode_in_template(myhtml_tree_t* tree, myhtml_token_node_t* token); +bool myhtml_rules_tree_dispatcher(myhtml_tree_t* tree, myhtml_token_node_t* token); +bool myhtml_insertion_mode_in_body_other_end_tag(myhtml_tree_t* tree, myhtml_token_node_t* token); +bool myhtml_insertion_mode_in_body(myhtml_tree_t* tree, myhtml_token_node_t* token); +bool myhtml_insertion_mode_in_template(myhtml_tree_t* tree, myhtml_token_node_t* token); #ifdef __cplusplus diff --git a/source/myhtml/tag.c b/source/myhtml/tag.c index 6b4ed04..89b5576 100755 --- a/source/myhtml/tag.c +++ b/source/myhtml/tag.c @@ -1,5 +1,5 @@ /* - Copyright 2015 Alexander Borisov + Copyright 2015-2016 Alexander Borisov Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -24,38 +24,21 @@ myhtml_tag_t * myhtml_tag_create(void) return (myhtml_tag_t*)mymalloc(sizeof(myhtml_tag_t)); } -myhtml_status_t myhtml_tag_init(myhtml_tag_t *tags) +myhtml_status_t myhtml_tag_init(myhtml_tree_t *tree, myhtml_tag_t *tags) { - tags->context_size = 4096 * 50; + tags->context_size = MyHTML_TAG_LAST_ENTRY + 128; tags->context = (myhtml_tag_context_t*)mymalloc(sizeof(myhtml_tag_context_t) * tags->context_size); - if(tags->context == NULL) { - tags->cache_name = NULL; - tags->index_nodes = NULL; - + if(tags->context == NULL) return MyHTML_STATUS_TAGS_ERROR_MEMORY_ALLOCATION; - } - - tags->cache_name_size = tags->context_size * 12; - tags->cache_name = (char*)mymalloc(sizeof(char) * tags->cache_name_size); - if(tags->cache_name == NULL) { - tags->index_nodes = NULL; - - return MyHTML_STATUS_TAGS_ERROR_CACHE_MEMORY_ALLOCATION; - } + tags->mchar_node = mchar_async_node_add(tree->myhtml->mchar); + tags->tree = mctree_create(32); - tags->tree = mctree_create(32); + tags->mchar = tree->myhtml->mchar; + tags->tag_index = tree->myhtml->tag_index; myhtml_tag_clean(tags); - myhtml_tag_init_tags(tags); - myhtml_tag_init_tags_categories(tags); - - tags->index_nodes = mcobject_async_create(); - mcobject_async_status_t mcstatus = mcobject_async_init(tags->index_nodes, 128, 4096, sizeof(myhtml_tag_index_node_t)); - - if(mcstatus != MCOBJECT_ASYNC_STATUS_OK) - return MyHTML_STATUS_TAGS_ERROR_MCOBJECT_CREATE; return MyHTML_STATUS_OK; } @@ -66,7 +49,7 @@ void myhtml_tag_clean(myhtml_tag_t* tags) myhtml_tag_context_clean(tags, tags->context_length); myhtml_tag_context_add(tags); - tags->cache_name_length = 0; + mchar_async_node_clean(tags->mchar, tags->mchar_node); } myhtml_tag_t * myhtml_tag_destroy(myhtml_tag_t* tags) @@ -77,11 +60,9 @@ myhtml_tag_t * myhtml_tag_destroy(myhtml_tag_t* tags) if(tags->context) free(tags->context); - if(tags->cache_name) - free(tags->cache_name); - tags->tree = mctree_destroy(tags->tree); - tags->index_nodes = mcobject_async_destroy(tags->index_nodes, mytrue); + + mchar_async_node_delete(tags->mchar, tags->mchar_node); free(tags); @@ -96,13 +77,10 @@ myhtml_tag_index_t * myhtml_tag_index_create(void) myhtml_status_t myhtml_tag_index_init(myhtml_tag_t* tags, myhtml_tag_index_t* idx_tags) { mcobject_async_status_t mcstatus; - idx_tags->index_id = mcobject_async_node_add(tags->index_nodes, &mcstatus); + tags->mcobject_node = mcobject_async_node_add(tags->tag_index, &mcstatus); - if(mcstatus != MCOBJECT_ASYNC_STATUS_OK) { - idx_tags->tags = NULL; - - return MyHTML_STATUS_TAGS_ERROR_MCOBJECT_CREATE_NODE; - } + if(mcstatus != MCOBJECT_ASYNC_STATUS_OK) + return MyHTML_STATUS_TAGS_ERROR_MCOBJECT_CREATE; idx_tags->tags_size = tags->context_size; idx_tags->tags_length = 0; @@ -116,17 +94,17 @@ myhtml_status_t myhtml_tag_index_init(myhtml_tag_t* tags, myhtml_tag_index_t* id void myhtml_tag_index_clean(myhtml_tag_t* tags, myhtml_tag_index_t* index_tags) { - mcobject_async_node_clean(tags->index_nodes, index_tags->index_id); + mcobject_async_node_clean(tags->tag_index, tags->mcobject_node); memset(index_tags->tags, 0, sizeof(myhtml_tag_index_entry_t) * tags->context_length); } myhtml_tag_index_t * myhtml_tag_index_destroy(myhtml_tag_t* tags, myhtml_tag_index_t* index_tags) { + mcobject_async_node_delete(tags->tag_index, tags->mcobject_node); + if(index_tags == NULL) return NULL; - mcobject_async_node_delete(tags->index_nodes, index_tags->index_id); - if(index_tags->tags) { free(index_tags->tags); index_tags->tags = NULL; @@ -137,28 +115,37 @@ myhtml_tag_index_t * myhtml_tag_index_destroy(myhtml_tag_t* tags, myhtml_tag_ind return NULL; } -void myhtml_tag_index_check_size(myhtml_tag_t* tags, myhtml_tag_index_t* index_tags) +void myhtml_tag_index_check_size(myhtml_tag_t* tags, myhtml_tag_index_t* index_tags, myhtml_tag_id_t tag_id) { - if(index_tags->tags_size < tags->context_size) { - index_tags->tags = (myhtml_tag_index_entry_t*)myrealloc(index_tags->tags, - sizeof(myhtml_tag_index_entry_t) * - tags->context_size); + if(tag_id >= index_tags->tags_size) { + size_t new_size = tags->context_size + MyHTML_TAG_LAST_ENTRY; - memset(&index_tags->tags[index_tags->tags_size], 0, sizeof(myhtml_tag_index_entry_t) - * (tags->context_size - index_tags->tags_size)); + myhtml_tag_index_entry_t *index_entries = (myhtml_tag_index_entry_t*)myrealloc(index_tags->tags, + sizeof(myhtml_tag_index_entry_t) * + new_size); - index_tags->tags_size = tags->context_size; + if(index_entries) { + index_tags->tags = index_entries; + + memset(&index_tags->tags[index_tags->tags_size], 0, sizeof(myhtml_tag_index_entry_t) + * (new_size - index_tags->tags_size)); + + index_tags->tags_size = new_size; + } + else { + // TODO: error + } } } myhtml_status_t myhtml_tag_index_add(myhtml_tag_t* tags, myhtml_tag_index_t* idx_tags, myhtml_tree_node_t* node) { - myhtml_tag_index_check_size(tags, idx_tags); + myhtml_tag_index_check_size(tags, idx_tags, node->tag_idx); myhtml_tag_index_entry_t* tag = &idx_tags->tags[node->tag_idx]; mcobject_async_status_t mcstatus; - myhtml_tag_index_node_t* new_node = mcobject_async_malloc(tags->index_nodes, idx_tags->index_id, &mcstatus); + myhtml_tag_index_node_t* new_node = mcobject_async_malloc(tags->tag_index, tags->mcobject_node, &mcstatus); if(mcstatus != MCOBJECT_ASYNC_STATUS_OK) return MyHTML_STATUS_TAGS_ERROR_MCOBJECT_MALLOC; @@ -242,20 +229,9 @@ myhtml_tree_node_t * myhtml_tag_index_tree_node(myhtml_tag_index_node_t *index_n } 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) { - // 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]; + char* cache = mchar_async_malloc(tags->mchar, tags->mchar_node, (key_size + 1)); if(to_lcase) { size_t i; @@ -272,8 +248,11 @@ myhtml_tag_id_t myhtml_tag_add(myhtml_tag_t* tags, const char* key, size_t key_s // 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); + 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, @@ -282,24 +261,56 @@ myhtml_tag_id_t myhtml_tag_add(myhtml_tag_t* tags, const char* key, size_t key_s myhtml_tag_context_add(tags); - return new_ctx_id; + return tags->context[new_ctx_id].id; } 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) { - tags->context[tag_idx].cats[my_namespace] = cats; + tags->context[(tag_idx - MyHTML_TAG_LAST_ENTRY)].cats[my_namespace] = cats; } -void myhtml_tag_print(myhtml_tag_t* tags, FILE* fh) +const myhtml_tag_context_t * myhtml_tag_get_by_id(myhtml_tag_t* tags, myhtml_tag_id_t tag_id) { - myhtml_tag_context_t* ctx = tags->context; - mctree_node_t* mct_nodes = tags->tree->nodes; + if(tag_id > MyHTML_TAG_LAST_ENTRY) { + tag_id -= MyHTML_TAG_LAST_ENTRY; + return &tags->context[tag_id]; + } + + return myhtml_tag_static_get_by_id(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 *ctx = myhtml_tag_static_search(name, length); + + if(ctx) + return ctx; + + mctree_index_t idx = mctree_search_lowercase(tags->tree, name, length); + size_t ctx_idx = (size_t)tags->tree->nodes[idx].value; + + if(ctx_idx && ctx_idx < tags->context_length) + return &tags->context[ctx_idx]; + return NULL; +} + +void myhtml_tag_print(myhtml_tag_t* tags, FILE* fh) +{ size_t i; - for(i = MyHTML_TAG_FIRST_ENTRY; i <= MyHTML_TAG_LAST_ENTRY; i++) + for(i = MyHTML_TAG_FIRST_ENTRY; i < MyHTML_TAG_LAST_ENTRY; i++) { - fprintf(fh, "<%s id=\"%zu\">\n", mct_nodes[ ctx[i].mctree_id ].str, i); + const myhtml_tag_context_t *ctx = myhtml_tag_get_by_id(tags, i); + + fprintf(fh, "<%s id=\"%zu\">\n", ctx->name, i); + } + + for(i = (MyHTML_TAG_LAST_ENTRY + 1); i < tags->context_length; i++) + { + const myhtml_tag_context_t *ctx = myhtml_tag_get_by_id(tags, i); + + fprintf(fh, "<%s id=\"%zu\">\n", ctx->name, i); } } 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 diff --git a/source/myhtml/tag_const.h b/source/myhtml/tag_const.h index f76c87f..d835e19 100644 --- a/source/myhtml/tag_const.h +++ b/source/myhtml/tag_const.h @@ -1,25 +1,28 @@ /* -Copyright 2015 Alexander Borisov + Copyright 2015 Alexander Borisov -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at -http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. -Author: lex.borisov@gmail.com (Alexander Borisov) + Author: lex.borisov@gmail.com (Alexander Borisov) */ #ifndef MyHTML_TAG_CONST_H #define MyHTML_TAG_CONST_H #pragma once +#define MyHTML_BASE_STATIC_SIZE 479 + + #ifdef __cplusplus extern "C" { #endif diff --git a/source/myhtml/tag_init.c b/source/myhtml/tag_init.c index 9fc61f8..b9bf82c 100755 --- a/source/myhtml/tag_init.c +++ b/source/myhtml/tag_init.c @@ -1,537 +1,2625 @@ /* -Copyright 2015 Alexander Borisov + Copyright 2015 Alexander Borisov -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at -http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. -Author: lex.borisov@gmail.com (Alexander Borisov) + Author: lex.borisov@gmail.com (Alexander Borisov) */ -#include "myhtml/tag.h" +#include "myhtml/utils/resources.h" +#include "tag.h" -void myhtml_tag_init_tags(myhtml_tag_t* tags) +static const myhtml_tag_context_t myhtml_tag_base_list[MyHTML_TAG_LAST_ENTRY] = { - myhtml_tag_add(tags, "-text", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "!--", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "!doctype", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "a", 1, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "abbr", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "acronym", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "address", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "annotation-xml", 14, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "applet", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "area", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "article", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "aside", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "audio", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "b", 1, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "base", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "basefont", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "bdi", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "bdo", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "bgsound", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "big", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "blink", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "blockquote", 10, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "body", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "br", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "button", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "canvas", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "caption", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "center", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "cite", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "code", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "col", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "colgroup", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "command", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "comment", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "datalist", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "dd", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "del", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "details", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "dfn", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "dialog", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "dir", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "div", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "dl", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "dt", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "em", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "embed", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "fieldset", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "figcaption", 10, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "figure", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "font", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "footer", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "form", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "frame", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "frameset", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "h1", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "h2", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "h3", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "h4", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "h5", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "h6", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "head", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "header", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "hgroup", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "hr", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "html", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "i", 1, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "iframe", 6, MyHTML_TOKENIZER_STATE_RAWTEXT, myfalse); - myhtml_tag_add(tags, "image", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "img", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "input", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "ins", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "isindex", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "kbd", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "keygen", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "label", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "legend", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "li", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "link", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "listing", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "main", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "map", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mark", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "marquee", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "menu", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "menuitem", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "meta", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "meter", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mtext", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "nav", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "nobr", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "noembed", 7, MyHTML_TOKENIZER_STATE_RAWTEXT, myfalse); - myhtml_tag_add(tags, "noframes", 8, MyHTML_TOKENIZER_STATE_RAWTEXT, myfalse); - myhtml_tag_add(tags, "noscript", 8, MyHTML_TOKENIZER_STATE_RAWTEXT, myfalse); - myhtml_tag_add(tags, "object", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "ol", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "optgroup", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "option", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "output", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "p", 1, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "param", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "plaintext", 9, MyHTML_TOKENIZER_STATE_PLAINTEXT, myfalse); - myhtml_tag_add(tags, "pre", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "progress", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "q", 1, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "rb", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "rp", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "rt", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "rtc", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "ruby", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "s", 1, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "samp", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "script", 6, MyHTML_TOKENIZER_STATE_SCRIPT_DATA, myfalse); - myhtml_tag_add(tags, "section", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "select", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "small", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "source", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "span", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "strike", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "strong", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "style", 5, MyHTML_TOKENIZER_STATE_RAWTEXT, myfalse); - myhtml_tag_add(tags, "sub", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "summary", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "sup", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "svg", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "table", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "tbody", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "td", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "template", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "textarea", 8, MyHTML_TOKENIZER_STATE_RCDATA, myfalse); - myhtml_tag_add(tags, "tfoot", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "th", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "thead", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "time", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "title", 5, MyHTML_TOKENIZER_STATE_RCDATA, myfalse); - myhtml_tag_add(tags, "tr", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "track", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "tt", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "u", 1, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "ul", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "var", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "video", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "wbr", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "xmp", 3, MyHTML_TOKENIZER_STATE_RAWTEXT, myfalse); - myhtml_tag_add(tags, "altGlyph", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "altGlyphDef", 11, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "altGlyphItem", 12, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "animate", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "animateColor", 12, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "animateMotion", 13, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "animateTransform", 16, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "circle", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "clipPath", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "color-profile", 13, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "cursor", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "defs", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "desc", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "ellipse", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feBlend", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feColorMatrix", 13, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feComponentTransfer", 19, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feComposite", 11, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feConvolveMatrix", 16, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feDiffuseLighting", 17, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feDisplacementMap", 17, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feDistantLight", 14, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feDropShadow", 12, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feFlood", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feFuncA", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feFuncB", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feFuncG", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feFuncR", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feGaussianBlur", 14, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feImage", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feMerge", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feMergeNode", 11, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feMorphology", 12, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feOffset", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "fePointLight", 12, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feSpecularLighting", 18, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feSpotLight", 11, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feTile", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "feTurbulence", 12, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "filter", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "font-face", 9, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "font-face-format", 16, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "font-face-name", 14, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "font-face-src", 13, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "font-face-uri", 13, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "foreignObject", 13, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "g", 1, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "glyph", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "glyphRef", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "hkern", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "line", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "linearGradient", 14, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "marker", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mask", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "metadata", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "missing-glyph", 13, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mpath", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "path", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "pattern", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "polygon", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "polyline", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "radialGradient", 14, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "rect", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "set", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "stop", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "switch", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "symbol", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "text", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "textPath", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "tref", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "tspan", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "use", 3, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "view", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "vkern", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "math", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "maction", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "maligngroup", 11, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "malignmark", 10, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "menclose", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "merror", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mfenced", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mfrac", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mglyph", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mi", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mlabeledtr", 10, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mlongdiv", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mmultiscripts", 13, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mn", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mo", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mover", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mpadded", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mphantom", 8, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mroot", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mrow", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "ms", 2, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mscarries", 9, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mscarry", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "msgroup", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "msline", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mspace", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "msqrt", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "msrow", 5, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mstack", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "mstyle", 6, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "msub", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "msup", 4, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "msubsup", 7, MyHTML_TOKENIZER_STATE_DATA, myfalse); - myhtml_tag_add(tags, "-end-of-file", 12, MyHTML_TOKENIZER_STATE_DATA, myfalse); + {MyHTML_TAG__UNDEF, "-undef", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG__TEXT, "-text", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG__COMMENT, "_comment", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG__DOCTYPE, "!doctype", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_A, "a", 1, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_FORMATTING, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_ABBR, "abbr", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_ACRONYM, "acronym", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_ADDRESS, "address", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_ANNOTATION_XML, "annotation-xml", 14, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_APPLET, "applet", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_AREA, "area", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_ARTICLE, "article", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_ASIDE, "aside", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_AUDIO, "audio", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_B, "b", 1, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_FORMATTING, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_BASE, "base", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_BASEFONT, "basefont", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_BDI, "bdi", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_BDO, "bdo", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_BGSOUND, "bgsound", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_BIG, "big", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_FORMATTING, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_BLINK, "blink", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_BLOCKQUOTE, "blockquote", 10, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_BODY, "body", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_BR, "br", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_BUTTON, "button", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_CANVAS, "canvas", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_CAPTION, "caption", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_CENTER, "center", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_CITE, "cite", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_CODE, "code", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_FORMATTING, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_COL, "col", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_COLGROUP, "colgroup", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_COMMAND, "command", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_COMMENT, "comment", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_DATALIST, "datalist", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_DD, "dd", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_DEL, "del", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_DETAILS, "details", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_DFN, "dfn", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_DIALOG, "dialog", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_DIR, "dir", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_DIV, "div", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_DL, "dl", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_DT, "dt", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_EM, "em", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_FORMATTING, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_EMBED, "embed", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FIELDSET, "fieldset", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FIGCAPTION, "figcaption", 10, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FIGURE, "figure", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FONT, "font", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_FORMATTING, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FOOTER, "footer", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FORM, "form", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FRAME, "frame", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FRAMESET, "frameset", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_H1, "h1", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_H2, "h2", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_H3, "h3", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_H4, "h4", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_H5, "h5", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_H6, "h6", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_HEAD, "head", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_HEADER, "header", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_HGROUP, "hgroup", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_HR, "hr", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_HTML, "html", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON|MyHTML_TAG_CATEGORIES_SCOPE_TABLE, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_I, "i", 1, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_FORMATTING, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_IFRAME, "iframe", 6, MyHTML_TOKENIZER_STATE_RAWTEXT, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_IMAGE, "image", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_IMG, "img", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_INPUT, "input", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_INS, "ins", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_ISINDEX, "isindex", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_KBD, "kbd", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_KEYGEN, "keygen", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_LABEL, "label", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_LEGEND, "legend", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_LI, "li", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_LINK, "link", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_LISTING, "listing", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MAIN, "main", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MAP, "map", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MARK, "mark", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MARQUEE, "marquee", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MENU, "menu", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MENUITEM, "menuitem", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_META, "meta", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_METER, "meter", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MTEXT, "mtext", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_NAV, "nav", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_NOBR, "nobr", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_FORMATTING, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_NOEMBED, "noembed", 7, MyHTML_TOKENIZER_STATE_RAWTEXT, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_NOFRAMES, "noframes", 8, MyHTML_TOKENIZER_STATE_RAWTEXT, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_NOSCRIPT, "noscript", 8, MyHTML_TOKENIZER_STATE_RAWTEXT, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_OBJECT, "object", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_OL, "ol", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_OPTGROUP, "optgroup", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY|MyHTML_TAG_CATEGORIES_SCOPE_SELECT, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_OPTION, "option", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY|MyHTML_TAG_CATEGORIES_SCOPE_SELECT, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_OUTPUT, "output", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_P, "p", 1, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_PARAM, "param", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_PLAINTEXT, "plaintext", 9, MyHTML_TOKENIZER_STATE_PLAINTEXT, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_PRE, "pre", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_PROGRESS, "progress", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_Q, "q", 1, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_RB, "rb", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_RP, "rp", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_RT, "rt", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_RTC, "rtc", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_RUBY, "ruby", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_S, "s", 1, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_FORMATTING, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_SAMP, "samp", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_SCRIPT, "script", 6, MyHTML_TOKENIZER_STATE_SCRIPT_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_SECTION, "section", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_SELECT, "select", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_SMALL, "small", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_FORMATTING, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_SOURCE, "source", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_SPAN, "span", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_STRIKE, "strike", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_FORMATTING, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_STRONG, "strong", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_FORMATTING, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_STYLE, "style", 5, MyHTML_TOKENIZER_STATE_RAWTEXT, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_SUB, "sub", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_SUMMARY, "summary", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_SUP, "sup", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_SVG, "svg", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_TABLE, "table", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON|MyHTML_TAG_CATEGORIES_SCOPE_TABLE, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_TBODY, "tbody", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_TD, "td", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_TEMPLATE, "template", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON|MyHTML_TAG_CATEGORIES_SCOPE_TABLE, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_TEXTAREA, "textarea", 8, MyHTML_TOKENIZER_STATE_RCDATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_TFOOT, "tfoot", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_TH, "th", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_THEAD, "thead", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_TIME, "time", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_TITLE, "title", 5, MyHTML_TOKENIZER_STATE_RCDATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_TR, "tr", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_TRACK, "track", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_TT, "tt", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_FORMATTING, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_U, "u", 1, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_FORMATTING, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_UL, "ul", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_VAR, "var", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_VIDEO, "video", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_WBR, "wbr", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_XMP, "xmp", 3, MyHTML_TOKENIZER_STATE_RAWTEXT, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_ALTGLYPH, "altGlyph", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_ALTGLYPHDEF, "altGlyphDef", 11, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_ALTGLYPHITEM, "altGlyphItem", 12, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_ANIMATE, "animate", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_ANIMATECOLOR, "animateColor", 12, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_ANIMATEMOTION, "animateMotion", 13, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_ANIMATETRANSFORM, "animateTransform", 16, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_CIRCLE, "circle", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_CLIPPATH, "clipPath", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_COLOR_PROFILE, "color-profile", 13, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_CURSOR, "cursor", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_DEFS, "defs", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_DESC, "desc", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_ELLIPSE, "ellipse", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FEBLEND, "feBlend", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FECOLORMATRIX, "feColorMatrix", 13, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FECOMPONENTTRANSFER, "feComponentTransfer", 19, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FECOMPOSITE, "feComposite", 11, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FECONVOLVEMATRIX, "feConvolveMatrix", 16, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FEDIFFUSELIGHTING, "feDiffuseLighting", 17, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FEDISPLACEMENTMAP, "feDisplacementMap", 17, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FEDISTANTLIGHT, "feDistantLight", 14, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FEDROPSHADOW, "feDropShadow", 12, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FEFLOOD, "feFlood", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FEFUNCA, "feFuncA", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FEFUNCB, "feFuncB", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FEFUNCG, "feFuncG", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FEFUNCR, "feFuncR", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FEGAUSSIANBLUR, "feGaussianBlur", 14, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FEIMAGE, "feImage", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FEMERGE, "feMerge", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FEMERGENODE, "feMergeNode", 11, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FEMORPHOLOGY, "feMorphology", 12, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FEOFFSET, "feOffset", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FEPOINTLIGHT, "fePointLight", 12, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FESPECULARLIGHTING, "feSpecularLighting", 18, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FESPOTLIGHT, "feSpotLight", 11, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FETILE, "feTile", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FETURBULENCE, "feTurbulence", 12, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FILTER, "filter", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FONT_FACE, "font-face", 9, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FONT_FACE_FORMAT, "font-face-format", 16, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FONT_FACE_NAME, "font-face-name", 14, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FONT_FACE_SRC, "font-face-src", 13, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FONT_FACE_URI, "font-face-uri", 13, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_FOREIGNOBJECT, "foreignObject", 13, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_G, "g", 1, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_GLYPH, "glyph", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_GLYPHREF, "glyphRef", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_HKERN, "hkern", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_LINE, "line", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_LINEARGRADIENT, "linearGradient", 14, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MARKER, "marker", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MASK, "mask", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_METADATA, "metadata", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MISSING_GLYPH, "missing-glyph", 13, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MPATH, "mpath", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_PATH, "path", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_PATTERN, "pattern", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_POLYGON, "polygon", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_POLYLINE, "polyline", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_RADIALGRADIENT, "radialGradient", 14, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_RECT, "rect", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_SET, "set", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_STOP, "stop", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_SWITCH, "switch", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_SYMBOL, "symbol", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_TEXT, "text", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_TEXTPATH, "textPath", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_TREF, "tref", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_TSPAN, "tspan", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_USE, "use", 3, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_VIEW, "view", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_VKERN, "vkern", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MATH, "math", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MACTION, "maction", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MALIGNGROUP, "maligngroup", 11, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MALIGNMARK, "malignmark", 10, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MENCLOSE, "menclose", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MERROR, "merror", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MFENCED, "mfenced", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MFRAC, "mfrac", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MGLYPH, "mglyph", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MI, "mi", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MLABELEDTR, "mlabeledtr", 10, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MLONGDIV, "mlongdiv", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MMULTISCRIPTS, "mmultiscripts", 13, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MN, "mn", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MO, "mo", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MOVER, "mover", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MPADDED, "mpadded", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MPHANTOM, "mphantom", 8, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MROOT, "mroot", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MROW, "mrow", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MS, "ms", 2, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MSCARRIES, "mscarries", 9, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MSCARRY, "mscarry", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MSGROUP, "msgroup", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MSLINE, "msline", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MSPACE, "mspace", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MSQRT, "msqrt", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MSROW, "msrow", 5, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MSTACK, "mstack", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MSTYLE, "mstyle", 6, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MSUB, "msub", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MSUP, "msup", 4, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG_MSUBSUP, "msubsup", 7, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + }, + {MyHTML_TAG__END_OF_FILE, "-end-of-file", 12, MyHTML_TOKENIZER_STATE_DATA, + { + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY, MyHTML_TAG_CATEGORIES_ORDINARY, + MyHTML_TAG_CATEGORIES_ORDINARY + } + } +}; + + +static const myhtml_tag_static_list_t myhtml_tag_static_list_index[] = +{ + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_USE], 0, 6}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_H5], 480, 8}, + {&myhtml_tag_base_list[MyHTML_TAG_I], 481, 9}, + {&myhtml_tag_base_list[MyHTML_TAG_DIALOG], 0, 10}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_BODY], 0, 12}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_ANIMATECOLOR], 0, 14}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_BUTTON], 0, 16}, + {&myhtml_tag_base_list[MyHTML_TAG_DEFS], 0, 17}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_PATTERN], 482, 21}, + {&myhtml_tag_base_list[MyHTML_TAG_FIGURE], 483, 22}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_B], 484, 25}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_OL], 0, 27}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_DETAILS], 485, 29}, + {&myhtml_tag_base_list[MyHTML_TAG_FEBLEND], 486, 30}, + {&myhtml_tag_base_list[MyHTML_TAG_MN], 0, 31}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_ELLIPSE], 0, 37}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_FEFUNCB], 0, 39}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_FEDROPSHADOW], 0, 41}, + {&myhtml_tag_base_list[MyHTML_TAG_THEAD], 0, 42}, + {&myhtml_tag_base_list[MyHTML_TAG_FETURBULENCE], 0, 43}, + {&myhtml_tag_base_list[MyHTML_TAG_LINE], 0, 44}, + {&myhtml_tag_base_list[MyHTML_TAG_MSTACK], 0, 45}, + {&myhtml_tag_base_list[MyHTML_TAG_DL], 0, 46}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_SCRIPT], 487, 48}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_FONT_FACE_NAME], 0, 50}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_PLAINTEXT], 0, 53}, + {&myhtml_tag_base_list[MyHTML_TAG_NOSCRIPT], 0, 54}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_PROGRESS], 0, 56}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_FOREIGNOBJECT], 0, 58}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_MAIN], 0, 61}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_BDO], 0, 63}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_ISINDEX], 0, 65}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_INPUT], 0, 68}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_CAPTION], 0, 70}, + {&myhtml_tag_base_list[MyHTML_TAG_H3], 0, 71}, + {&myhtml_tag_base_list[MyHTML_TAG_G], 0, 72}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_LINEARGRADIENT], 0, 79}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_ANIMATETRANSFORM], 0, 82}, + {&myhtml_tag_base_list[MyHTML_TAG_ARTICLE], 488, 83}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_XMP], 0, 85}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_TT], 0, 89}, + {&myhtml_tag_base_list[MyHTML_TAG_SVG], 489, 90}, + {&myhtml_tag_base_list[MyHTML_TAG_P], 490, 91}, + {&myhtml_tag_base_list[MyHTML_TAG_RUBY], 0, 92}, + {&myhtml_tag_base_list[MyHTML_TAG_FECOLORMATRIX], 0, 93}, + {&myhtml_tag_base_list[MyHTML_TAG_TSPAN], 491, 94}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_MMULTISCRIPTS], 0, 96}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_MSUB], 0, 98}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_ALTGLYPHDEF], 0, 102}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_RT], 492, 104}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_BIG], 494, 106}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_FONT_FACE_FORMAT], 0, 108}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_FECOMPONENTTRANSFER], 0, 114}, + {&myhtml_tag_base_list[MyHTML_TAG_FIGCAPTION], 0, 115}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_STYLE], 0, 117}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_CIRCLE], 0, 120}, + {&myhtml_tag_base_list[MyHTML_TAG_VAR], 0, 121}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_VIEW], 0, 126}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_ASIDE], 0, 128}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_PATH], 0, 130}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_NOFRAMES], 0, 132}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_H1], 0, 134}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_LEGEND], 0, 136}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_OBJECT], 495, 138}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_MFENCED], 496, 140}, + {&myhtml_tag_base_list[MyHTML_TAG_META], 0, 141}, + {&myhtml_tag_base_list[MyHTML_TAG_NAV], 0, 142}, + {&myhtml_tag_base_list[MyHTML_TAG_TABLE], 497, 143}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_RP], 0, 150}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_MROW], 0, 153}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_MPATH], 0, 159}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_MS], 0, 163}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_ABBR], 0, 165}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_LI], 0, 168}, + {&myhtml_tag_base_list[MyHTML_TAG_SUMMARY], 498, 169}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_TEXT], 0, 177}, + {&myhtml_tag_base_list[MyHTML_TAG_CENTER], 499, 178}, + {&myhtml_tag_base_list[MyHTML_TAG_TH], 500, 179}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_AUDIO], 0, 188}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_MARK], 502, 190}, + {&myhtml_tag_base_list[MyHTML_TAG_MSROW], 0, 191}, + {&myhtml_tag_base_list[MyHTML_TAG_DIR], 0, 192}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_MSGROUP], 503, 195}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_HKERN], 504, 200}, + {&myhtml_tag_base_list[MyHTML_TAG_FEPOINTLIGHT], 0, 201}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_EMBED], 0, 206}, + {&myhtml_tag_base_list[MyHTML_TAG_RECT], 505, 207}, + {&myhtml_tag_base_list[MyHTML_TAG_PARAM], 507, 208}, + {&myhtml_tag_base_list[MyHTML_TAG_DT], 508, 209}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_FEDISPLACEMENTMAP], 0, 214}, + {&myhtml_tag_base_list[MyHTML_TAG_BDI], 0, 215}, + {&myhtml_tag_base_list[MyHTML_TAG_H6], 0, 216}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_BLINK], 0, 220}, + {&myhtml_tag_base_list[MyHTML_TAG_MAP], 509, 221}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_GLYPHREF], 0, 224}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_ALTGLYPH], 0, 233}, + {&myhtml_tag_base_list[MyHTML_TAG_TEXTPATH], 510, 234}, + {&myhtml_tag_base_list[MyHTML_TAG__TEXT], 0, 235}, + {&myhtml_tag_base_list[MyHTML_TAG_VKERN], 511, 236}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG__UNDEF], 0, 238}, + {&myhtml_tag_base_list[MyHTML_TAG_MENU], 0, 239}, + {&myhtml_tag_base_list[MyHTML_TAG_CITE], 513, 240}, + {&myhtml_tag_base_list[MyHTML_TAG_LINK], 0, 241}, + {&myhtml_tag_base_list[MyHTML_TAG_HR], 0, 242}, + {&myhtml_tag_base_list[MyHTML_TAG_RADIALGRADIENT], 0, 243}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_HEADER], 0, 245}, + {&myhtml_tag_base_list[MyHTML_TAG_ACRONYM], 0, 246}, + {&myhtml_tag_base_list[MyHTML_TAG_TBODY], 0, 247}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_MO], 0, 249}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_MSCARRIES], 0, 251}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_FEFUNCG], 0, 256}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_FRAME], 0, 258}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_SET], 0, 264}, + {&myhtml_tag_base_list[MyHTML_TAG_FEIMAGE], 514, 265}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_SAMP], 515, 268}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_TRACK], 0, 270}, + {&myhtml_tag_base_list[MyHTML_TAG_LISTING], 0, 271}, + {&myhtml_tag_base_list[MyHTML_TAG_FONT_FACE], 0, 272}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_AREA], 0, 275}, + {&myhtml_tag_base_list[MyHTML_TAG_SYMBOL], 0, 276}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_U], 0, 278}, + {&myhtml_tag_base_list[MyHTML_TAG_H4], 516, 279}, + {&myhtml_tag_base_list[MyHTML_TAG_ANIMATEMOTION], 0, 280}, + {&myhtml_tag_base_list[MyHTML_TAG_SUB], 518, 281}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_FEFUNCA], 0, 283}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_S], 519, 293}, + {&myhtml_tag_base_list[MyHTML_TAG_FIELDSET], 520, 294}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_INS], 0, 301}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_OPTGROUP], 0, 304}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_SPAN], 0, 306}, + {&myhtml_tag_base_list[MyHTML_TAG_BLOCKQUOTE], 0, 307}, + {&myhtml_tag_base_list[MyHTML_TAG_DEL], 522, 308}, + {&myhtml_tag_base_list[MyHTML_TAG_A], 0, 309}, + {&myhtml_tag_base_list[MyHTML_TAG_SMALL], 0, 310}, + {&myhtml_tag_base_list[MyHTML_TAG_BR], 523, 311}, + {&myhtml_tag_base_list[MyHTML_TAG_MARKER], 524, 312}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_FOOTER], 525, 314}, + {&myhtml_tag_base_list[MyHTML_TAG_BASE], 0, 315}, + {&myhtml_tag_base_list[MyHTML_TAG_Q], 526, 316}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_MATH], 0, 319}, + {&myhtml_tag_base_list[MyHTML_TAG__DOCTYPE], 0, 320}, + {&myhtml_tag_base_list[MyHTML_TAG_SUP], 527, 321}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_DESC], 0, 323}, + {&myhtml_tag_base_list[MyHTML_TAG_TEMPLATE], 0, 324}, + {&myhtml_tag_base_list[MyHTML_TAG_COMMAND], 0, 325}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_RTC], 0, 329}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_IMAGE], 0, 336}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_METER], 528, 340}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_H2], 0, 342}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_FESPOTLIGHT], 0, 344}, + {&myhtml_tag_base_list[MyHTML_TAG_NOBR], 0, 345}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_VIDEO], 0, 347}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_IMG], 0, 353}, + {&myhtml_tag_base_list[MyHTML_TAG_DATALIST], 0, 354}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_MSCARRY], 0, 356}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_NOEMBED], 0, 361}, + {&myhtml_tag_base_list[MyHTML_TAG_DD], 529, 362}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_UL], 0, 365}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_MI], 0, 378}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_HTML], 0, 382}, + {&myhtml_tag_base_list[MyHTML_TAG_FESPECULARLIGHTING], 0, 383}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_FONT], 530, 387}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_SWITCH], 0, 390}, + {&myhtml_tag_base_list[MyHTML_TAG_MLONGDIV], 0, 391}, + {&myhtml_tag_base_list[MyHTML_TAG_GLYPH], 0, 392}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_FEDISTANTLIGHT], 0, 394}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_COMMENT], 0, 396}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_TIME], 0, 402}, + {&myhtml_tag_base_list[MyHTML_TAG_IFRAME], 0, 403}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_FORM], 0, 405}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_PRE], 531, 407}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_FECONVOLVEMATRIX], 0, 409}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_FEGAUSSIANBLUR], 0, 412}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_BASEFONT], 532, 414}, + {&myhtml_tag_base_list[MyHTML_TAG_SECTION], 533, 415}, + {&myhtml_tag_base_list[MyHTML_TAG_MENCLOSE], 0, 416}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_ALTGLYPHITEM], 0, 421}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_MARQUEE], 0, 424}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_DFN], 0, 429}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_MSLINE], 534, 432}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_DIV], 536, 434}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_TEXTAREA], 0, 444}, + {&myhtml_tag_base_list[MyHTML_TAG_POLYLINE], 0, 445}, + {&myhtml_tag_base_list[MyHTML_TAG_FEFUNCR], 0, 446}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_APPLET], 537, 453}, + {&myhtml_tag_base_list[MyHTML_TAG_MSUP], 0, 454}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_CLIPPATH], 0, 460}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_COL], 538, 463}, + {&myhtml_tag_base_list[MyHTML_TAG_EM], 0, 464}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_MTEXT], 539, 472}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_MGLYPH], 0, 478}, + {NULL, 0}, + {&myhtml_tag_base_list[MyHTML_TAG_KBD], 0, 480}, + {&myhtml_tag_base_list[MyHTML_TAG_ADDRESS], 0, 481}, + {&myhtml_tag_base_list[MyHTML_TAG_POLYGON], 0, 482}, + {&myhtml_tag_base_list[MyHTML_TAG_FETILE], 0, 483}, + {&myhtml_tag_base_list[MyHTML_TAG__COMMENT], 0, 484}, + {&myhtml_tag_base_list[MyHTML_TAG_FONT_FACE_SRC], 0, 485}, + {&myhtml_tag_base_list[MyHTML_TAG_FEFLOOD], 0, 486}, + {&myhtml_tag_base_list[MyHTML_TAG_SELECT], 0, 487}, + {&myhtml_tag_base_list[MyHTML_TAG_ANIMATE], 0, 488}, + {&myhtml_tag_base_list[MyHTML_TAG_COLGROUP], 0, 489}, + {&myhtml_tag_base_list[MyHTML_TAG_ANNOTATION_XML], 0, 490}, + {&myhtml_tag_base_list[MyHTML_TAG_FEMORPHOLOGY], 0, 491}, + {&myhtml_tag_base_list[MyHTML_TAG_TR], 493, 492}, + {&myhtml_tag_base_list[MyHTML_TAG_BGSOUND], 0, 493}, + {&myhtml_tag_base_list[MyHTML_TAG_MACTION], 0, 494}, + {&myhtml_tag_base_list[MyHTML_TAG_OUTPUT], 0, 495}, + {&myhtml_tag_base_list[MyHTML_TAG_MPADDED], 0, 496}, + {&myhtml_tag_base_list[MyHTML_TAG_TITLE], 0, 497}, + {&myhtml_tag_base_list[MyHTML_TAG_MALIGNGROUP], 0, 498}, + {&myhtml_tag_base_list[MyHTML_TAG_CURSOR], 0, 499}, + {&myhtml_tag_base_list[MyHTML_TAG_STRONG], 501, 500}, + {&myhtml_tag_base_list[MyHTML_TAG_COLOR_PROFILE], 0, 501}, + {&myhtml_tag_base_list[MyHTML_TAG_MASK], 0, 502}, + {&myhtml_tag_base_list[MyHTML_TAG_MSUBSUP], 0, 503}, + {&myhtml_tag_base_list[MyHTML_TAG_MLABELEDTR], 0, 504}, + {&myhtml_tag_base_list[MyHTML_TAG_MENUITEM], 506, 505}, + {&myhtml_tag_base_list[MyHTML_TAG_MPHANTOM], 0, 506}, + {&myhtml_tag_base_list[MyHTML_TAG_KEYGEN], 0, 507}, + {&myhtml_tag_base_list[MyHTML_TAG_TD], 0, 508}, + {&myhtml_tag_base_list[MyHTML_TAG_TFOOT], 0, 509}, + {&myhtml_tag_base_list[MyHTML_TAG_MALIGNMARK], 0, 510}, + {&myhtml_tag_base_list[MyHTML_TAG_STRIKE], 512, 511}, + {&myhtml_tag_base_list[MyHTML_TAG_SOURCE], 0, 512}, + {&myhtml_tag_base_list[MyHTML_TAG_CODE], 0, 513}, + {&myhtml_tag_base_list[MyHTML_TAG_FEMERGE], 0, 514}, + {&myhtml_tag_base_list[MyHTML_TAG_STOP], 0, 515}, + {&myhtml_tag_base_list[MyHTML_TAG_FECOMPOSITE], 517, 516}, + {&myhtml_tag_base_list[MyHTML_TAG_FEMERGENODE], 0, 517}, + {&myhtml_tag_base_list[MyHTML_TAG_METADATA], 0, 518}, + {&myhtml_tag_base_list[MyHTML_TAG_CANVAS], 0, 519}, + {&myhtml_tag_base_list[MyHTML_TAG_FRAMESET], 521, 520}, + {&myhtml_tag_base_list[MyHTML_TAG_FEOFFSET], 0, 521}, + {&myhtml_tag_base_list[MyHTML_TAG_MFRAC], 0, 522}, + {&myhtml_tag_base_list[MyHTML_TAG_RB], 0, 523}, + {&myhtml_tag_base_list[MyHTML_TAG_MERROR], 0, 524}, + {&myhtml_tag_base_list[MyHTML_TAG_FILTER], 0, 525}, + {&myhtml_tag_base_list[MyHTML_TAG_MISSING_GLYPH], 0, 526}, + {&myhtml_tag_base_list[MyHTML_TAG_FONT_FACE_URI], 0, 527}, + {&myhtml_tag_base_list[MyHTML_TAG_MOVER], 0, 528}, + {&myhtml_tag_base_list[MyHTML_TAG_LABEL], 0, 529}, + {&myhtml_tag_base_list[MyHTML_TAG_TREF], 0, 530}, + {&myhtml_tag_base_list[MyHTML_TAG_HEAD], 0, 531}, + {&myhtml_tag_base_list[MyHTML_TAG__END_OF_FILE], 0, 532}, + {&myhtml_tag_base_list[MyHTML_TAG_FEDIFFUSELIGHTING], 0, 533}, + {&myhtml_tag_base_list[MyHTML_TAG_MSPACE], 535, 534}, + {&myhtml_tag_base_list[MyHTML_TAG_MSTYLE], 0, 535}, + {&myhtml_tag_base_list[MyHTML_TAG_HGROUP], 0, 536}, + {&myhtml_tag_base_list[MyHTML_TAG_OPTION], 0, 537}, + {&myhtml_tag_base_list[MyHTML_TAG_WBR], 0, 538}, + {&myhtml_tag_base_list[MyHTML_TAG_MROOT], 540, 539}, + {&myhtml_tag_base_list[MyHTML_TAG_MSQRT], 0, 540}, + +}; + + +const myhtml_tag_context_t * myhtml_tag_static_search(const char* name, size_t length) +{ + size_t idx = ((myhtml_string_chars_lowercase_map[ (const unsigned char)name[0] ] * + myhtml_string_chars_lowercase_map[ (const unsigned char)name[(length - 1)] ] * + length) + % MyHTML_BASE_STATIC_SIZE) + 1; + + while (myhtml_tag_static_list_index[idx].ctx) + { + if(myhtml_tag_static_list_index[idx].ctx->name_length == length) { + if(myhtml_strncasecmp(myhtml_tag_static_list_index[idx].ctx->name, name, length) == 0) + return myhtml_tag_static_list_index[idx].ctx; + + if(myhtml_tag_static_list_index[idx].next) + idx = myhtml_tag_static_list_index[idx].next; + else + return NULL; + } + else if(myhtml_tag_static_list_index[idx].ctx->name_length > length) { + return NULL; + } + else { + idx = myhtml_tag_static_list_index[idx].next; + } + } + + return NULL; } -void myhtml_tag_init_tags_categories(myhtml_tag_t* tags) +const myhtml_tag_context_t * myhtml_tag_static_get_by_id(size_t idx) { - myhtml_tag_set_category(tags, MyHTML_TAG__TEXT, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG__COMMENT, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG__DOCTYPE, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_A, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_FORMATTING); - myhtml_tag_set_category(tags, MyHTML_TAG_A, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_ABBR, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_ACRONYM, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_ADDRESS, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_ANNOTATION_XML, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON); - myhtml_tag_set_category(tags, MyHTML_TAG_APPLET, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON); - myhtml_tag_set_category(tags, MyHTML_TAG_AREA, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_ARTICLE, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_ASIDE, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_AUDIO, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_B, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_FORMATTING); - myhtml_tag_set_category(tags, MyHTML_TAG_BASE, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_BASEFONT, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_BDI, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_BDO, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_BGSOUND, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_BIG, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_FORMATTING); - myhtml_tag_set_category(tags, MyHTML_TAG_BLINK, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_BLOCKQUOTE, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_BODY, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_BR, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_BUTTON, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON); - myhtml_tag_set_category(tags, MyHTML_TAG_CANVAS, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_CAPTION, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON); - myhtml_tag_set_category(tags, MyHTML_TAG_CENTER, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_CITE, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_CODE, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_FORMATTING); - myhtml_tag_set_category(tags, MyHTML_TAG_COL, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_COLGROUP, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_COMMAND, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_COMMENT, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_DATALIST, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_DD, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_DEL, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_DETAILS, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_DFN, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_DIALOG, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_DIR, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_DIV, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_DL, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_DT, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_EM, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_FORMATTING); - myhtml_tag_set_category(tags, MyHTML_TAG_EMBED, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_FIELDSET, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_FIGCAPTION, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_FIGURE, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_FONT, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_FORMATTING); - myhtml_tag_set_category(tags, MyHTML_TAG_FONT, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FOOTER, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_FORM, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_FRAME, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_FRAMESET, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_H1, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_H2, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_H3, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_H4, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_H5, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_H6, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_HEAD, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_HEADER, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_HGROUP, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_HR, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_HTML, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON|MyHTML_TAG_CATEGORIES_SCOPE_TABLE); - myhtml_tag_set_category(tags, MyHTML_TAG_I, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_FORMATTING); - myhtml_tag_set_category(tags, MyHTML_TAG_IFRAME, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_IMAGE, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_IMAGE, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_IMG, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_INPUT, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_INS, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_ISINDEX, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_KBD, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_KEYGEN, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_LABEL, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_LEGEND, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_LI, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_LINK, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_LISTING, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_MAIN, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_MAP, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MARK, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MARQUEE, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON); - myhtml_tag_set_category(tags, MyHTML_TAG_MENU, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_MENUITEM, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_META, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_METER, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MTEXT, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON); - myhtml_tag_set_category(tags, MyHTML_TAG_NAV, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_NOBR, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_FORMATTING); - myhtml_tag_set_category(tags, MyHTML_TAG_NOEMBED, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_NOFRAMES, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_NOSCRIPT, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_OBJECT, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON); - myhtml_tag_set_category(tags, MyHTML_TAG_OL, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM); - myhtml_tag_set_category(tags, MyHTML_TAG_OPTGROUP, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY|MyHTML_TAG_CATEGORIES_SCOPE_SELECT); - myhtml_tag_set_category(tags, MyHTML_TAG_OPTION, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY|MyHTML_TAG_CATEGORIES_SCOPE_SELECT); - myhtml_tag_set_category(tags, MyHTML_TAG_OUTPUT, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_P, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_PARAM, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_PLAINTEXT, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_PRE, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_PROGRESS, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_Q, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_RB, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_RP, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_RT, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_RTC, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_RUBY, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_S, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_FORMATTING); - myhtml_tag_set_category(tags, MyHTML_TAG_SAMP, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_SCRIPT, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_SCRIPT, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_SECTION, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_SELECT, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_SMALL, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_FORMATTING); - myhtml_tag_set_category(tags, MyHTML_TAG_SOURCE, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_SPAN, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_STRIKE, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_FORMATTING); - myhtml_tag_set_category(tags, MyHTML_TAG_STRONG, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_FORMATTING); - myhtml_tag_set_category(tags, MyHTML_TAG_STYLE, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_STYLE, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_SUB, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_SUMMARY, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_SUP, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_SVG, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_SVG, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_TABLE, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON|MyHTML_TAG_CATEGORIES_SCOPE_TABLE); - myhtml_tag_set_category(tags, MyHTML_TAG_TBODY, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_TD, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON); - myhtml_tag_set_category(tags, MyHTML_TAG_TEMPLATE, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON|MyHTML_TAG_CATEGORIES_SCOPE_TABLE); - myhtml_tag_set_category(tags, MyHTML_TAG_TEXTAREA, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_TFOOT, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_TH, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON); - myhtml_tag_set_category(tags, MyHTML_TAG_THEAD, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_TIME, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_TITLE, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_TITLE, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON); - myhtml_tag_set_category(tags, MyHTML_TAG_TR, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_TRACK, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_TT, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_FORMATTING); - myhtml_tag_set_category(tags, MyHTML_TAG_U, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_FORMATTING); - myhtml_tag_set_category(tags, MyHTML_TAG_UL, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM); - myhtml_tag_set_category(tags, MyHTML_TAG_VAR, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_VIDEO, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_WBR, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_XMP, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_SPECIAL); - myhtml_tag_set_category(tags, MyHTML_TAG_ALTGLYPH, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_ALTGLYPHDEF, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_ALTGLYPHITEM, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_ANIMATE, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_ANIMATECOLOR, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_ANIMATEMOTION, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_ANIMATETRANSFORM, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_CIRCLE, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_CLIPPATH, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_COLOR_PROFILE, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_CURSOR, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_DEFS, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_DESC, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON); - myhtml_tag_set_category(tags, MyHTML_TAG_ELLIPSE, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FEBLEND, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FECOLORMATRIX, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FECOMPONENTTRANSFER, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FECOMPOSITE, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FECONVOLVEMATRIX, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FEDIFFUSELIGHTING, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FEDISPLACEMENTMAP, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FEDISTANTLIGHT, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FEDROPSHADOW, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FEFLOOD, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FEFUNCA, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FEFUNCB, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FEFUNCG, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FEFUNCR, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FEGAUSSIANBLUR, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FEIMAGE, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FEMERGE, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FEMERGENODE, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FEMORPHOLOGY, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FEOFFSET, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FEPOINTLIGHT, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FESPECULARLIGHTING, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FESPOTLIGHT, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FETILE, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FETURBULENCE, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FILTER, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FONT_FACE, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FONT_FACE_FORMAT, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FONT_FACE_NAME, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FONT_FACE_SRC, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FONT_FACE_URI, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_FOREIGNOBJECT, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON); - myhtml_tag_set_category(tags, MyHTML_TAG_G, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_GLYPH, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_GLYPHREF, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_HKERN, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_LINE, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_LINEARGRADIENT, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MARKER, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MASK, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_METADATA, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MISSING_GLYPH, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MPATH, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_PATH, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_PATTERN, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_POLYGON, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_POLYLINE, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_RADIALGRADIENT, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_RECT, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_SET, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_STOP, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_SWITCH, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_SYMBOL, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_TEXT, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_TEXTPATH, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_TREF, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_TSPAN, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_USE, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_VIEW, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_VKERN, MyHTML_NAMESPACE_SVG, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MATH, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MACTION, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MALIGNGROUP, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MALIGNMARK, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MENCLOSE, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MERROR, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MFENCED, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MFRAC, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MGLYPH, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MI, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON); - myhtml_tag_set_category(tags, MyHTML_TAG_MLABELEDTR, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MLONGDIV, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MMULTISCRIPTS, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MN, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON); - myhtml_tag_set_category(tags, MyHTML_TAG_MO, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON); - myhtml_tag_set_category(tags, MyHTML_TAG_MOVER, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MPADDED, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MPHANTOM, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MROOT, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MROW, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MS, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_SPECIAL|MyHTML_TAG_CATEGORIES_SCOPE|MyHTML_TAG_CATEGORIES_SCOPE_LIST_ITEM|MyHTML_TAG_CATEGORIES_SCOPE_BUTTON); - myhtml_tag_set_category(tags, MyHTML_TAG_MSCARRIES, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MSCARRY, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MSGROUP, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MSLINE, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MSPACE, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MSQRT, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MSROW, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MSTACK, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MSTYLE, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MSUB, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MSUP, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG_MSUBSUP, MyHTML_NAMESPACE_MATHML, MyHTML_TAG_CATEGORIES_ORDINARY); - myhtml_tag_set_category(tags, MyHTML_TAG__END_OF_FILE, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); + return &myhtml_tag_base_list[idx]; } + + diff --git a/source/myhtml/thread.c b/source/myhtml/thread.c index f9238c5..9109dd6 100644 --- a/source/myhtml/thread.c +++ b/source/myhtml/thread.c @@ -18,6 +18,8 @@ #include "myhtml/thread.h" +#ifndef MyHTML_BUILD_WITHOUT_THREADS + #if defined(IS_OS_WINDOWS) /*********************************************************************************** * @@ -234,7 +236,7 @@ void myhtml_thread_nanosleep(const struct timespec *tomeout) } #endif /* !defined(IS_OS_WINDOWS) */ - +#endif /* MyHTML_BUILD_WITHOUT_THREADS */ /* * @@ -247,6 +249,21 @@ mythread_t * mythread_create(void) return calloc(1, sizeof(mythread_t)); } +#ifdef MyHTML_BUILD_WITHOUT_THREADS + +myhtml_status_t mythread_init(mythread_t *mythread, const char *sem_prefix, size_t thread_count, size_t queue_size) +{ + myhtml_status_t status; + mythread->queue = mythread_queue_create(4096, &status); + + if(mythread->queue == NULL) + return status; + + return MyHTML_STATUS_OK; +} + +#else /* MyHTML_BUILD_WITHOUT_THREADS */ + myhtml_status_t mythread_init(mythread_t *mythread, const char *sem_prefix, size_t thread_count, size_t queue_size) { mythread->batch_count = 0; @@ -303,6 +320,8 @@ myhtml_status_t mythread_init(mythread_t *mythread, const char *sem_prefix, size return MyHTML_STATUS_OK; } +#endif /* MyHTML_BUILD_WITHOUT_THREADS */ + void mythread_clean(mythread_t *mythread) { mythread->sys_last_error = 0; @@ -310,6 +329,8 @@ void mythread_clean(mythread_t *mythread) if(mythread->queue) mythread_queue_clean(mythread->queue); +#ifndef MyHTML_BUILD_WITHOUT_THREADS + size_t idx; for (idx = mythread->pth_list_root; idx < mythread->pth_list_length; idx++) { mythread->pth_list[idx].data.use = 0; @@ -318,13 +339,17 @@ void mythread_clean(mythread_t *mythread) for (idx = 0; idx < mythread->batch_count; idx++) { mythread->pth_list[( mythread->batch_first_id + idx )].data.use = idx; } + +#endif /* MyHTML_BUILD_WITHOUT_THREADS */ } -mythread_t * mythread_destroy(mythread_t *mythread, mybool_t self_destroy) +mythread_t * mythread_destroy(mythread_t *mythread, bool self_destroy) { if(mythread == NULL) return NULL; +#ifndef MyHTML_BUILD_WITHOUT_THREADS + myhtml_thread_attr_destroy(mythread); if(mythread->pth_list) { @@ -353,6 +378,8 @@ mythread_t * mythread_destroy(mythread_t *mythread, mybool_t self_destroy) mythread->sem_prefix_length = 0; } +#endif /* MyHTML_BUILD_WITHOUT_THREADS */ + if(mythread->queue) mythread_queue_destroy(mythread->queue); @@ -364,6 +391,8 @@ mythread_t * mythread_destroy(mythread_t *mythread, mybool_t self_destroy) return mythread; } +#ifndef MyHTML_BUILD_WITHOUT_THREADS + mythread_id_t _myhread_create_stream_raw(mythread_t *mythread, mythread_f func, void *work_func, myhtml_status_t *status, size_t total_count) { mythread->sys_last_error = 0; @@ -429,15 +458,15 @@ mythread_id_t myhread_create_batch(mythread_t *mythread, mythread_f func, myhtml size_t start = mythread->pth_list_length; *status = MyHTML_STATUS_OK; - mybool_t init_first = myfalse; + bool init_first = false; for (size_t i = 0; i < count; i++) { mythread_id_t curr_id = _myhread_create_stream_raw(mythread, func, mythread_function_batch, status, count); - if(init_first == myfalse) { + if(init_first == false) { mythread->batch_first_id = curr_id; - init_first = mytrue; + init_first = true; } if(*status) @@ -468,6 +497,8 @@ mythread_id_t myhread_create_batch(mythread_t *mythread, mythread_f func, myhtml return mythread->batch_first_id; } +#endif /* MyHTML_BUILD_WITHOUT_THREADS */ + // mythread queue functions mythread_queue_t * mythread_queue_create(size_t size, myhtml_status_t *status) { @@ -565,6 +596,16 @@ mythread_queue_node_t * mythread_queue_get_current_node(mythread_queue_t* queue) return &queue->nodes[queue->nodes_pos][queue->nodes_length]; } +mythread_queue_node_t * mythread_queue_get_first_node(mythread_queue_t* queue) +{ + return &queue->nodes[0][0]; +} + +size_t mythread_queue_count_used_node(mythread_queue_t* queue) +{ + return queue->nodes_uses; +} + mythread_queue_node_t * mythread_queue_node_malloc(mythread_queue_t* queue, const char* text, size_t begin, myhtml_status_t *status) { queue->nodes_length++; @@ -615,6 +656,19 @@ mythread_queue_node_t * mythread_queue_node_malloc(mythread_queue_t* queue, cons return qnode; } +#ifdef MyHTML_BUILD_WITHOUT_THREADS + +void mythread_stream_quit_all(mythread_t *mythread) {} +void mythread_batch_quit_all(mythread_t *mythread) {} +void mythread_stream_pause_all(mythread_t *mythread) {} +void mythread_batch_pause_all(mythread_t *mythread) {} +void mythread_resume_all(mythread_t *mythread) {} +void mythread_wait_all(mythread_t *mythread) {} +void mythread_function_batch(void *arg) {} +void mythread_function_stream(void *arg) {} + +#else /* MyHTML_BUILD_WITHOUT_THREADS */ + // mythread functions void mythread_stream_quit_all(mythread_t *mythread) { @@ -747,4 +801,6 @@ void mythread_function_stream(void *arg) while (1); } +#endif /* MyHTML_BUILD_WITHOUT_THREADS */ + diff --git a/source/myhtml/thread.h b/source/myhtml/thread.h index 1df5643..2fb3826 100644 --- a/source/myhtml/thread.h +++ b/source/myhtml/thread.h @@ -26,6 +26,8 @@ extern "C" { #include "myhtml/myosi.h" +#ifndef MyHTML_BUILD_WITHOUT_THREADS + #if !defined(IS_OS_WINDOWS) # include <pthread.h> # include <semaphore.h> @@ -41,8 +43,19 @@ extern "C" { #include "myhtml/tree.h" #include "myhtml/mystring.h" -#define MyTHREAD_SEM_NAME "mythread" +#endif /* MyHTML_BUILD_WITHOUT_THREADS */ + +#define MyTHREAD_SEM_NAME "myhtml" + +#ifdef MyHTML_BUILD_WITHOUT_THREADS + +struct mythread { + mythread_queue_t *queue; + int sys_last_error; +}; + +#else /* MyHTML_BUILD_WITHOUT_THREADS */ void mythread_function_stream(void *arg); void mythread_function_batch(void *arg); @@ -109,13 +122,17 @@ struct mythread { volatile mythread_thread_opt_t batch_opt; }; +mythread_id_t myhread_create_stream(mythread_t *mythread, mythread_f func, myhtml_status_t *status); +mythread_id_t myhread_create_batch(mythread_t *mythread, mythread_f func, myhtml_status_t *status, size_t count); + +void myhtml_thread_nanosleep(const struct timespec *tomeout); + +#endif + mythread_t * mythread_create(void); myhtml_status_t mythread_init(mythread_t *mythread, const char *sem_prefix, size_t thread_count, size_t queue_size); void mythread_clean(mythread_t *mythread); -mythread_t * mythread_destroy(mythread_t *mythread, mybool_t self_destroy); - -mythread_id_t myhread_create_stream(mythread_t *mythread, mythread_f func, myhtml_status_t *status); -mythread_id_t myhread_create_batch(mythread_t *mythread, mythread_f func, myhtml_status_t *status, size_t count); +mythread_t * mythread_destroy(mythread_t *mythread, bool self_destroy); void mythread_stream_pause_all(mythread_t *mythread); void mythread_batch_pause_all(mythread_t *mythread); @@ -126,8 +143,6 @@ void mythread_resume_all(mythread_t *mythread); void mythread_stream_quit_all(mythread_t *mythread); void mythread_batch_quit_all(mythread_t *mythread); -void myhtml_thread_nanosleep(const struct timespec *tomeout); - // queue struct mythread_queue_node { mythread_queue_node_t *prev; @@ -163,6 +178,8 @@ mythread_queue_t * mythread_queue_destroy(mythread_queue_t* token); void mythread_queue_node_clean(mythread_queue_node_t* qnode); +size_t mythread_queue_count_used_node(mythread_queue_t* queue); +mythread_queue_node_t * mythread_queue_get_first_node(mythread_queue_t* queue); mythread_queue_node_t * mythread_queue_get_prev_node(mythread_queue_t* queue); mythread_queue_node_t * mythread_queue_get_current_node(mythread_queue_t* queue); mythread_queue_node_t * mythread_queue_node_malloc(mythread_queue_t* queue, const char* text, size_t begin, myhtml_status_t *status); diff --git a/source/myhtml/token.c b/source/myhtml/token.c index 8e2b11f..a7a5c58 100644 --- a/source/myhtml/token.c +++ b/source/myhtml/token.c @@ -345,7 +345,7 @@ void myhtml_token_node_attr_copy(myhtml_token_t* token, myhtml_token_node_t* tar } } -mybool_t myhtml_token_attr_copy(myhtml_token_t* token, myhtml_token_attr_t* attr, myhtml_token_node_t* dest, size_t thread_idx) +bool myhtml_token_attr_copy(myhtml_token_t* token, myhtml_token_attr_t* attr, myhtml_token_node_t* dest, size_t thread_idx) { myhtml_token_attr_t* new_attr = mcobject_async_malloc(token->attr_obj, thread_idx, NULL); new_attr->next = 0; @@ -393,7 +393,7 @@ mybool_t myhtml_token_attr_copy(myhtml_token_t* token, myhtml_token_attr_t* attr dest->attr_last = new_attr; } - return mytrue; + return true; } myhtml_token_attr_t * myhtml_token_attr_match(myhtml_token_t* token, myhtml_token_node_t* target, @@ -475,12 +475,12 @@ void myhtml_token_strict_doctype_by_token(myhtml_token_t* token, myhtml_token_no _myhtml_token_create_copy_srt(token, &data[attr->name_begin], attr->name_length, &return_doctype->attr_name); if(strcmp("html", return_doctype->attr_name)) - return_doctype->is_html = myfalse; + return_doctype->is_html = false; else - return_doctype->is_html = mytrue; + return_doctype->is_html = true; } else { - return_doctype->is_html = myfalse; + return_doctype->is_html = false; // if(return_doctype->attr_name) // myfree(return_doctype->attr_name); @@ -571,52 +571,52 @@ void myhtml_token_strict_doctype_by_token(myhtml_token_t* token, myhtml_token_no } } -mybool_t myhtml_token_doctype_check_html_4_0(myhtml_tree_doctype_t* return_doctype) +bool myhtml_token_doctype_check_html_4_0(myhtml_tree_doctype_t* return_doctype) { return strcmp(return_doctype->attr_public, "-//W3C//DTD HTML 4.0//EN") && (return_doctype->attr_system == NULL || strcmp(return_doctype->attr_system, "http://www.w3.org/TR/REC-html40/strict.dtd")); } -mybool_t myhtml_token_doctype_check_html_4_01(myhtml_tree_doctype_t* return_doctype) +bool myhtml_token_doctype_check_html_4_01(myhtml_tree_doctype_t* return_doctype) { return strcmp(return_doctype->attr_public, "-//W3C//DTD HTML 4.01//EN") && (return_doctype->attr_system == NULL || strcmp(return_doctype->attr_system, "http://www.w3.org/TR/html4/strict.dtd")); } -mybool_t myhtml_token_doctype_check_xhtml_1_0(myhtml_tree_doctype_t* return_doctype) +bool myhtml_token_doctype_check_xhtml_1_0(myhtml_tree_doctype_t* return_doctype) { if(return_doctype->attr_system == NULL) - return mytrue; + return true; return strcmp(return_doctype->attr_public, "-//W3C//DTD XHTML 1.0 Strict//EN") && strcmp(return_doctype->attr_system, "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"); } -mybool_t myhtml_token_doctype_check_xhtml_1_1(myhtml_tree_doctype_t* return_doctype) +bool myhtml_token_doctype_check_xhtml_1_1(myhtml_tree_doctype_t* return_doctype) { if(return_doctype->attr_system == NULL) - return mytrue; + return true; return strcmp(return_doctype->attr_public, "-//W3C//DTD XHTML 1.1//EN") && strcmp(return_doctype->attr_system, "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"); } -mybool_t myhtml_token_release_and_check_doctype_attributes(myhtml_token_t* token, myhtml_token_node_t* target, myhtml_tree_doctype_t* return_doctype) +bool myhtml_token_release_and_check_doctype_attributes(myhtml_token_t* token, myhtml_token_node_t* target, myhtml_tree_doctype_t* return_doctype) { if(return_doctype == NULL) - return myfalse; + return false; myhtml_token_strict_doctype_by_token(token, target, return_doctype); if(return_doctype->attr_name == NULL) - return myfalse; + return false; if((return_doctype->is_html || return_doctype->attr_public || (return_doctype->attr_system && strcmp(return_doctype->attr_system, "about:legacy-compat")))) { if(return_doctype->attr_public == NULL) - return myfalse; + return false; if(return_doctype->is_html && myhtml_token_doctype_check_html_4_0(return_doctype) && @@ -624,11 +624,11 @@ mybool_t myhtml_token_release_and_check_doctype_attributes(myhtml_token_t* token myhtml_token_doctype_check_xhtml_1_0(return_doctype) && myhtml_token_doctype_check_xhtml_1_1(return_doctype)) { - return myfalse; + return false; } } - return mytrue; + return true; } // oh @@ -673,10 +673,10 @@ void myhtml_token_adjust_foreign_attributes(myhtml_token_node_t* target) } } -mybool_t myhtml_token_attr_compare(myhtml_token_node_t* target, myhtml_token_node_t* dest) +bool myhtml_token_attr_compare(myhtml_token_node_t* target, myhtml_token_node_t* dest) { if(target == NULL || dest == NULL) - return myfalse; + return false; myhtml_token_attr_t* target_attr = target->attr_first; myhtml_token_attr_t* dest_attr = dest->attr_first; @@ -700,9 +700,9 @@ mybool_t myhtml_token_attr_compare(myhtml_token_node_t* target, myhtml_token_nod } if(target_attr == NULL && dest_attr == NULL) - return mytrue; + return true; - return myfalse; + return false; } myhtml_token_attr_t * myhtml_token_attr_by_name(myhtml_token_node_t* node, const char* name, size_t name_length) @@ -775,7 +775,7 @@ myhtml_token_attr_t * myhtml_token_attr_remove_by_name(myhtml_token_node_t* node return myhtml_token_attr_remove(node, myhtml_token_attr_by_name(node, name, name_length)); } -mybool_t myhtml_token_is_whithspace(myhtml_tree_t* tree, myhtml_token_node_t* node) +bool myhtml_token_is_whithspace(myhtml_tree_t* tree, myhtml_token_node_t* node) { const char* html = node->my_str_tm.data; @@ -785,14 +785,14 @@ mybool_t myhtml_token_is_whithspace(myhtml_tree_t* tree, myhtml_token_node_t* no // TODO: see and use myhtml_whithspace // U+0009 // U+000A // U+000C // U+000D // U+0020 if(html[i] != '\t' && html[i] != '\n' && html[i] != '\f' && html[i] != '\r' && html[i] != ' ') { - return myfalse; + return false; } } - return mytrue; + return true; } -myhtml_token_node_t * myhtml_token_merged_two_token_string(myhtml_tree_t* tree, myhtml_token_node_t* token_to, myhtml_token_node_t* token_from, mybool_t cp_reverse) +myhtml_token_node_t * myhtml_token_merged_two_token_string(myhtml_tree_t* tree, myhtml_token_node_t* token_to, myhtml_token_node_t* token_from, bool cp_reverse) { myhtml_token_node_wait_for_done(token_to); myhtml_token_node_wait_for_done(token_from); @@ -881,21 +881,17 @@ void myhtml_token_print_param_by_idx(myhtml_tree_t* myhtml_tree, myhtml_token_no void myhtml_token_print_by_idx(myhtml_tree_t* tree, myhtml_token_node_t* node, FILE* out) { - myhtml_t* myhtml = tree->myhtml; - mctree_node_t* mctree_nodes = myhtml->tags->tree->nodes; - - size_t mctree_id = mh_tags_get(node->tag_ctx_idx, mctree_id); - size_t tag_name_size = mctree_nodes[mctree_id].str_size; + const myhtml_tag_context_t *ctx = myhtml_tag_get_by_id(tree->tags, node->tag_ctx_idx); if(node->tag_ctx_idx == MyHTML_TAG__TEXT || node->tag_ctx_idx == MyHTML_TAG__COMMENT) { if(node->length) { - fprintf(out, "%.*s: %.*s\n", (int)tag_name_size, mctree_nodes[mctree_id].str, + fprintf(out, "%.*s: %.*s\n", (int)ctx->name_length, ctx->name, (int)node->length, &node->my_str_tm.data[node->begin]); } else { - fprintf(out, "%.*s is empty\n", (int)tag_name_size, mctree_nodes[mctree_id].str); + fprintf(out, "%.*s is empty\n", (int)ctx->name_length, ctx->name); } } else @@ -907,8 +903,7 @@ void myhtml_token_print_by_idx(myhtml_tree_t* tree, myhtml_token_node_t* node, F fprintf(out, "<"); } - fprintf(out, "%.*s tagid=\"%zu\"", (int)tag_name_size, mctree_nodes[mctree_id].str, - mh_tags_get(node->tag_ctx_idx, id)); + fprintf(out, "%.*s tagid=\"%zu\"", (int)ctx->name_length, ctx->name, node->tag_ctx_idx); myhtml_token_print_attr(tree, node, out); diff --git a/source/myhtml/token.h b/source/myhtml/token.h index 8b4b336..a638a4f 100644 --- a/source/myhtml/token.h +++ b/source/myhtml/token.h @@ -108,7 +108,7 @@ struct myhtml_token { size_t mcasync_token_id; size_t mcasync_attr_id; - mybool_t is_new_tmp; + bool is_new_tmp; }; myhtml_token_t * myhtml_token_create(myhtml_tree_t* tree, size_t size); @@ -125,12 +125,12 @@ void myhtml_token_delete(myhtml_token_t* token, myhtml_token_node_t* node); void myhtml_token_node_wait_for_done(myhtml_token_node_t* node); void myhtml_token_set_done(myhtml_token_node_t* node); -mybool_t myhtml_token_is_whithspace(myhtml_tree_t* tree, myhtml_token_node_t* node); +bool myhtml_token_is_whithspace(myhtml_tree_t* tree, myhtml_token_node_t* node); myhtml_token_attr_t * myhtml_token_attr_match(myhtml_token_t* token, myhtml_token_node_t* target, const char* key, size_t key_size, const char* value, size_t value_size); myhtml_token_attr_t * myhtml_token_attr_match_case(myhtml_token_t* token, myhtml_token_node_t* target, const char* key, size_t key_size, const char* value, size_t value_size); -mybool_t myhtml_token_release_and_check_doctype_attributes(myhtml_token_t* token, myhtml_token_node_t* target, myhtml_tree_doctype_t* return_doctype); +bool myhtml_token_release_and_check_doctype_attributes(myhtml_token_t* token, myhtml_token_node_t* target, myhtml_tree_doctype_t* return_doctype); void myhtml_token_adjust_mathml_attributes(myhtml_token_node_t* target); void myhtml_token_adjust_svg_attributes(myhtml_token_node_t* target); @@ -142,10 +142,10 @@ void myhtml_token_node_text_append(myhtml_token_t* token, myhtml_token_node_t* d void myhtml_token_node_attr_copy(myhtml_token_t* token, myhtml_token_node_t* target, myhtml_token_node_t* dest, size_t thread_idx); void myhtml_token_node_attr_copy_with_check(myhtml_token_t* token, myhtml_token_node_t* target, myhtml_token_node_t* dest, size_t thread_idx); myhtml_token_node_t * myhtml_token_node_clone(myhtml_token_t* token, myhtml_token_node_t* node, size_t token_thread_idx, size_t attr_thread_idx); -mybool_t myhtml_token_attr_copy(myhtml_token_t* token, myhtml_token_attr_t* attr, myhtml_token_node_t* dest, size_t thread_idx); +bool myhtml_token_attr_copy(myhtml_token_t* token, myhtml_token_attr_t* attr, myhtml_token_node_t* dest, size_t thread_idx); myhtml_token_attr_t * myhtml_token_attr_by_name(myhtml_token_node_t* node, const char* name, size_t name_size); -mybool_t myhtml_token_attr_compare(myhtml_token_node_t* target, myhtml_token_node_t* dest); -myhtml_token_node_t * myhtml_token_merged_two_token_string(myhtml_tree_t* tree, myhtml_token_node_t* token_to, myhtml_token_node_t* token_from, mybool_t cp_reverse); +bool myhtml_token_attr_compare(myhtml_token_node_t* target, myhtml_token_node_t* dest); +myhtml_token_node_t * myhtml_token_merged_two_token_string(myhtml_tree_t* tree, myhtml_token_node_t* token_to, myhtml_token_node_t* token_from, bool cp_reverse); void myhtml_token_set_replacement_character_for_null_token(myhtml_token_node_t* node); void myhtml_token_print_param_by_idx(myhtml_tree_t* myhtml_tree, myhtml_token_node_t* node, FILE* out); diff --git a/source/myhtml/tokenizer.c b/source/myhtml/tokenizer.c index d109a7a..b39cac4 100644 --- a/source/myhtml/tokenizer.c +++ b/source/myhtml/tokenizer.c @@ -77,6 +77,8 @@ void myhtml_tokenizer_chunk_process(myhtml_tree_t* tree, const char* html, size_ // add for a chunk myhtml_incomming_buf_add(myhtml, tree, tree->incoming_buf, html, html_length); +#ifndef MyHTML_BUILD_WITHOUT_THREADS + if(myhtml->opt & MyHTML_OPTIONS_PARSE_MODE_SINGLE) tree->flags |= MyHTML_TREE_FLAGS_SINGLE_MODE; @@ -95,6 +97,13 @@ void myhtml_tokenizer_chunk_process(myhtml_tree_t* tree, const char* html, size_ myhtml_tokenizer_post(tree); } +#else + + tree->queue = myhtml->thread->queue; + tree->flags |= MyHTML_TREE_FLAGS_SINGLE_MODE; + +#endif + if(tree->current_qnode == NULL) { myhtml_tokenizer_set_first_settings(tree, html, html_length); } @@ -167,6 +176,8 @@ void myhtml_tokenizer_end(myhtml_tree_t* tree) tree->current_qnode->token->tag_ctx_idx = MyHTML_TAG__END_OF_FILE; mh_queue_add(tree, NULL, 0, NULL); +#ifndef MyHTML_BUILD_WITHOUT_THREADS + if((tree->flags & MyHTML_TREE_FLAGS_SINGLE_MODE) == 0 && (tree->myhtml->opt & MyHTML_OPTIONS_PARSE_MODE_SINGLE) == 0) { @@ -174,6 +185,8 @@ void myhtml_tokenizer_end(myhtml_tree_t* tree) myhtml_tokenizer_pause(tree); } +#endif + tree->flags |= MyHTML_TREE_FLAGS_PARSE_END; myhtml_tree_temp_stream_clean(tree); @@ -206,7 +219,8 @@ myhtml_tree_node_t * myhtml_tokenizer_fragment_init(myhtml_tree_t* tree, myhtml_ } } else { - mh_state_set(tree) = mh_tags_get(tag_idx, data_parser); + const myhtml_tag_context_t *tag_ctx = myhtml_tag_get_by_id(tree->tags, tag_idx); + mh_state_set(tree) = tag_ctx->data_parser; } } @@ -268,7 +282,9 @@ void myhtml_tokenizer_calc_current_namespace(myhtml_tree_t* tree, mythread_queue tree->token_namespace = qnode->token; } else if(tree->token_namespace && (qnode->token->type & MyHTML_TOKEN_TYPE_CLOSE) == 0) { - if(tree->myhtml->tags->context[ qnode->token->tag_ctx_idx ].data_parser != MyHTML_TOKENIZER_STATE_DATA) + const myhtml_tag_context_t *tag_ctx = myhtml_tag_get_by_id(tree->tags, qnode->token->tag_ctx_idx); + + if(tag_ctx->data_parser != MyHTML_TOKENIZER_STATE_DATA) { myhtml_tree_wait_for_last_done_token(tree, qnode->token); mh_state_set(tree) = tree->state_of_builder; @@ -301,29 +317,27 @@ void myhtml_tokenizer_calc_current_namespace(myhtml_tree_t* tree, mythread_queue void myhtml_check_tag_parser(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset) { - myhtml_tag_t* tags = tree->myhtml->tags; - mctree_t* tags_tree = tags->tree; - - mctree_index_t idx; + myhtml_tag_t* tags = tree->tags; + const myhtml_tag_context_t *tag_ctx = NULL; if(html_offset < qnode->length) { const char *tagname = myhtml_tree_incomming_buf_make_data(tree, qnode, qnode->length); - idx = mctree_search_lowercase(tags_tree, tagname, qnode->length); + tag_ctx = myhtml_tag_get_by_name(tags, tagname, qnode->length); } else { - idx = mctree_search_lowercase(tags_tree, &html[ (qnode->begin - tree->global_offset) ], qnode->length); + tag_ctx = myhtml_tag_get_by_name(tags, &html[ (qnode->begin - tree->global_offset) ], qnode->length); } - if(idx) { - qnode->token->tag_ctx_idx = (myhtml_tag_id_t)(tags_tree->nodes[idx].value); + if(tag_ctx) { + qnode->token->tag_ctx_idx = tag_ctx->id; } else { if(html_offset < qnode->length) { const char *tagname = myhtml_tree_incomming_buf_make_data(tree, qnode, qnode->length); - qnode->token->tag_ctx_idx = myhtml_tag_add(tags, tagname, qnode->length, MyHTML_TOKENIZER_STATE_DATA, mytrue); + qnode->token->tag_ctx_idx = myhtml_tag_add(tags, tagname, qnode->length, MyHTML_TOKENIZER_STATE_DATA, true); } else { - qnode->token->tag_ctx_idx = myhtml_tag_add(tags, &html[ (qnode->begin - tree->global_offset) ], qnode->length, MyHTML_TOKENIZER_STATE_DATA, mytrue); + qnode->token->tag_ctx_idx = myhtml_tag_add(tags, &html[ (qnode->begin - tree->global_offset) ], qnode->length, MyHTML_TOKENIZER_STATE_DATA, true); } myhtml_tag_set_category(tags, qnode->token->tag_ctx_idx, MyHTML_NAMESPACE_HTML, MyHTML_TAG_CATEGORIES_ORDINARY); @@ -359,7 +373,8 @@ void myhtml_tokenizer_set_state(myhtml_tree_t* tree, mythread_queue_node_t* qnod mh_state_set(tree) = MyHTML_TOKENIZER_STATE_DATA; } else { - mh_state_set(tree) = mh_tags_get(qnode->token->tag_ctx_idx, data_parser); + const myhtml_tag_context_t *tag_ctx = myhtml_tag_get_by_id(tree->tags, qnode->token->tag_ctx_idx); + mh_state_set(tree) = tag_ctx->data_parser; } } else { @@ -428,7 +443,7 @@ size_t myhtml_tokenizer_state_rcdata_end_tag_open(myhtml_tree_t* tree, mythread_ return html_offset; } -mybool_t _myhtml_tokenizer_state_andata_end_tag_name(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t *html_offset, size_t tmp_begin, enum myhtml_token_type type) +bool _myhtml_tokenizer_state_andata_end_tag_name(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t *html_offset, size_t tmp_begin, enum myhtml_token_type type) { qnode->length = (*html_offset + tree->global_offset) - qnode->begin; myhtml_check_tag_parser(tree, qnode, html, *html_offset); @@ -441,7 +456,7 @@ mybool_t _myhtml_tokenizer_state_andata_end_tag_name(myhtml_tree_t* tree, mythre mh_state_set(tree) = MyHTML_TOKENIZER_STATE_RCDATA; (*html_offset)++; - return myfalse; + return false; } if((qnode->begin - 2) > tmp_begin) @@ -458,7 +473,7 @@ mybool_t _myhtml_tokenizer_state_andata_end_tag_name(myhtml_tree_t* tree, mythre qnode->token->tag_ctx_idx = tree->tmp_tag_id; qnode->token->type |= MyHTML_TOKEN_TYPE_CLOSE; - return mytrue; + return true; } size_t myhtml_tokenizer_state_rcdata_end_tag_name(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size) @@ -861,9 +876,11 @@ size_t myhtml_tokenizer_state_markup_declaration_open(myhtml_tree_t* tree, mythr // for a comment if(tagname[0] == '-' && tagname[1] == '-') { - mh_state_set(tree) = MyHTML_TOKENIZER_STATE_COMMENT; + mh_state_set(tree) = MyHTML_TOKENIZER_STATE_COMMENT_START; + + html_offset += 2; - qnode->begin = (html_offset + tree->global_offset) + 2; + qnode->begin = html_offset + tree->global_offset; qnode->length = 0; return html_offset; @@ -1292,8 +1309,14 @@ size_t myhtml_tokenizer_state_comment_start(myhtml_tree_t* tree, mythread_queue_ } else if(html[html_offset] == '>') { - qnode->token->tag_ctx_idx = MyHTML_TAG__TEXT; + html_offset++; + + qnode->length = 0; + mh_queue_add(tree, html, html_offset, qnode); + mh_state_set(tree) = MyHTML_TOKENIZER_STATE_DATA; + + return html_offset; } else { mh_state_set(tree) = MyHTML_TOKENIZER_STATE_COMMENT; @@ -1310,12 +1333,18 @@ size_t myhtml_tokenizer_state_comment_start_dash(myhtml_tree_t* tree, mythread_q if(html[html_offset] == '-') { - mh_state_set(tree) = MyHTML_TOKENIZER_STATE_COMMENT_END_DASH; + mh_state_set(tree) = MyHTML_TOKENIZER_STATE_COMMENT_END; } else if(html[html_offset] == '>') { - qnode->token->tag_ctx_idx = MyHTML_TAG__TEXT; + html_offset++; + + qnode->length = 0; + mh_queue_add(tree, html, html_offset, qnode); + mh_state_set(tree) = MyHTML_TOKENIZER_STATE_DATA; + + return html_offset; } else { mh_state_set(tree) = MyHTML_TOKENIZER_STATE_COMMENT; @@ -1395,10 +1424,17 @@ size_t myhtml_tokenizer_state_comment_end_bang(myhtml_tree_t* tree, mythread_que { if(html[html_offset] == '>') { - qnode->length = ((tree->global_offset + html_offset) - qnode->begin) - 3; - - html_offset++; - mh_queue_add(tree, html, html_offset, qnode); + if(((tree->global_offset + html_offset) - 3) >= qnode->begin) { + qnode->length = ((tree->global_offset + html_offset) - qnode->begin) - 3; + + html_offset++; + mh_queue_add(tree, html, html_offset, qnode); + } + else { + html_offset++; + qnode->length = 0; + mh_queue_add(tree, html, html_offset, qnode); + } mh_state_set(tree) = MyHTML_TOKENIZER_STATE_DATA; } @@ -1466,6 +1502,9 @@ myhtml_status_t myhtml_tokenizer_state_init(myhtml_t* myhtml) myhtml->parse_state_func[MyHTML_TOKENIZER_STATE_ATTRIBUTE_VALUE_UNQUOTED] = myhtml_tokenizer_state_attribute_value_unquoted; // comments + myhtml->parse_state_func[MyHTML_TOKENIZER_STATE_COMMENT_START] = myhtml_tokenizer_state_comment_start; + myhtml->parse_state_func[MyHTML_TOKENIZER_STATE_COMMENT_START_DASH] = myhtml_tokenizer_state_comment_start_dash; + myhtml->parse_state_func[MyHTML_TOKENIZER_STATE_COMMENT] = myhtml_tokenizer_state_comment; myhtml->parse_state_func[MyHTML_TOKENIZER_STATE_COMMENT] = myhtml_tokenizer_state_comment; myhtml->parse_state_func[MyHTML_TOKENIZER_STATE_COMMENT_END] = myhtml_tokenizer_state_comment_end; myhtml->parse_state_func[MyHTML_TOKENIZER_STATE_COMMENT_END_DASH] = myhtml_tokenizer_state_comment_end_dash; @@ -1557,6 +1596,10 @@ myhtml_status_t myhtml_tokenizer_state_init(myhtml_t* myhtml) // for ends comments myhtml->parse_state_func[(MyHTML_TOKENIZER_STATE_LAST_ENTRY + + MyHTML_TOKENIZER_STATE_COMMENT_START)] = myhtml_tokenizer_end_state_comment_start; + myhtml->parse_state_func[(MyHTML_TOKENIZER_STATE_LAST_ENTRY + + MyHTML_TOKENIZER_STATE_COMMENT_START_DASH)] = myhtml_tokenizer_end_state_comment_start_dash; + myhtml->parse_state_func[(MyHTML_TOKENIZER_STATE_LAST_ENTRY + MyHTML_TOKENIZER_STATE_COMMENT)] = myhtml_tokenizer_end_state_comment; myhtml->parse_state_func[(MyHTML_TOKENIZER_STATE_LAST_ENTRY + MyHTML_TOKENIZER_STATE_COMMENT_END)] = myhtml_tokenizer_end_state_comment_end; diff --git a/source/myhtml/tokenizer_end.c b/source/myhtml/tokenizer_end.c index e248a3c..418b2ab 100644 --- a/source/myhtml/tokenizer_end.c +++ b/source/myhtml/tokenizer_end.c @@ -160,6 +160,22 @@ size_t myhtml_tokenizer_end_state_attribute_value_unquoted(myhtml_tree_t* tree, return html_offset; } +size_t myhtml_tokenizer_end_state_comment_start(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size) +{ + qnode->length = ((html_offset + tree->global_offset) - qnode->begin); + mh_queue_add(tree, html, html_offset, qnode); + + return html_offset; +} + +size_t myhtml_tokenizer_end_state_comment_start_dash(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size) +{ + qnode->length = ((html_offset + tree->global_offset) - qnode->begin); + mh_queue_add(tree, html, html_offset, qnode); + + return html_offset; +} + size_t myhtml_tokenizer_end_state_comment(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size) { qnode->length = ((html_offset + tree->global_offset) - qnode->begin); diff --git a/source/myhtml/tokenizer_end.h b/source/myhtml/tokenizer_end.h index 888b591..c0632c1 100644 --- a/source/myhtml/tokenizer_end.h +++ b/source/myhtml/tokenizer_end.h @@ -41,6 +41,8 @@ size_t myhtml_tokenizer_end_state_before_attribute_value(myhtml_tree_t* tree, my size_t myhtml_tokenizer_end_state_attribute_value_double_quoted(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size); size_t myhtml_tokenizer_end_state_attribute_value_single_quoted(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size); size_t myhtml_tokenizer_end_state_attribute_value_unquoted(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size); +size_t myhtml_tokenizer_end_state_comment_start(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size); +size_t myhtml_tokenizer_end_state_comment_start_dash(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size); size_t myhtml_tokenizer_end_state_comment(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size); size_t myhtml_tokenizer_end_state_comment_end(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size); size_t myhtml_tokenizer_end_state_comment_end_dash(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size); @@ -59,7 +61,7 @@ size_t myhtml_tokenizer_end_state_rawtext_end_tag_open(myhtml_tree_t* tree, myth size_t myhtml_tokenizer_end_state_rawtext_end_tag_name(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size); size_t myhtml_tokenizer_end_state_plaintext(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size); -size_t myhtml_tokenizer_end_state_doctype(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size);; +size_t myhtml_tokenizer_end_state_doctype(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size); size_t myhtml_tokenizer_end_state_before_doctype_name(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size); size_t myhtml_tokenizer_end_state_doctype_name(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size); size_t myhtml_tokenizer_end_state_after_doctype_name(myhtml_tree_t* tree, mythread_queue_node_t* qnode, const char* html, size_t html_offset, size_t html_size); diff --git a/source/myhtml/tree.c b/source/myhtml/tree.c index 31489d5..e68845d 100644 --- a/source/myhtml/tree.c +++ b/source/myhtml/tree.c @@ -28,7 +28,7 @@ myhtml_status_t myhtml_tree_init(myhtml_tree_t* tree, myhtml_t* myhtml) myhtml_status_t status = MyHTML_STATUS_OK; tree->myhtml = myhtml; - tree->token = myhtml_token_create(tree, (4096 * 4)); + tree->token = myhtml_token_create(tree, 4096); tree->temp_tag_name.data = NULL; tree->queue = myhtml->thread->queue; tree->single_queue = NULL; @@ -38,13 +38,24 @@ myhtml_status_t myhtml_tree_init(myhtml_tree_t* tree, myhtml_t* myhtml) if(tree->tree_obj == NULL) return MyHTML_STATUS_TREE_ERROR_MCOBJECT_CREATE; - mcobject_async_status_t mcstatus = mcobject_async_init(tree->tree_obj, 128, 4096, sizeof(myhtml_tree_node_t)); + mcobject_async_status_t mcstatus = mcobject_async_init(tree->tree_obj, 128, 1024, sizeof(myhtml_tree_node_t)); if(mcstatus) return MyHTML_STATUS_TREE_ERROR_MCOBJECT_INIT; - tree->mchar = mchar_async_create(128, (4096 * 500)); + tree->tags = myhtml_tag_create(); + status = myhtml_tag_init(tree, tree->tags); - tree->indexes = myhtml_tree_index_create(tree, myhtml->tags); + if(status) { + myhtml->parse_state_func = NULL; + myhtml->insertion_func = NULL; + myhtml->thread = NULL; + + return status; + } + + tree->mchar = mchar_async_create(128, (4096 * 5)); + + tree->indexes = myhtml_tree_index_create(tree, tree->tags); tree->active_formatting = myhtml_tree_active_formatting_init(tree); tree->open_elements = myhtml_tree_open_elements_init(tree); tree->other_elements = myhtml_tree_list_init(); @@ -69,6 +80,9 @@ myhtml_status_t myhtml_tree_init(myhtml_tree_t* tree, myhtml_t* myhtml) tree->mchar_node_id = mchar_async_node_add(tree->mchar); + // TODO: this code need send to some func +#ifndef MyHTML_BUILD_WITHOUT_THREADS + tree->async_args = (myhtml_async_args_t*)calloc(myhtml->thread->pth_list_length, sizeof(myhtml_async_args_t)); if(tree->async_args == NULL) @@ -82,6 +96,17 @@ myhtml_status_t myhtml_tree_init(myhtml_tree_t* tree, myhtml_t* myhtml) tree->async_args[(myhtml->thread->batch_first_id + i)].mchar_node_id = mchar_async_node_add(tree->mchar); } +#else /* MyHTML_BUILD_WITHOUT_THREADS */ + + tree->async_args = (myhtml_async_args_t*)calloc(1, sizeof(myhtml_async_args_t)); + + if(tree->async_args == NULL) + return MyHTML_STATUS_TREE_ERROR_MEMORY_ALLOCATION; + + tree->async_args->mchar_node_id = tree->mchar_node_id; + +#endif /* MyHTML_BUILD_WITHOUT_THREADS */ + tree->sync = mcsync_create(); mcsync_init(tree->sync); @@ -94,9 +119,11 @@ void myhtml_tree_clean(myhtml_tree_t* tree) { myhtml_t* myhtml = tree->myhtml; +#ifndef MyHTML_BUILD_WITHOUT_THREADS for(size_t i = 0; i < myhtml->thread->batch_count; i++) { mchar_async_node_clean(tree->mchar, tree->async_args[(myhtml->thread->batch_first_id + i)].mchar_node_id); } +#endif /* MyHTML_BUILD_WITHOUT_THREADS */ mcobject_async_node_clean(tree->tree_obj, tree->mcasync_tree_id); mcobject_async_node_clean(tree->token->nodes_obj, tree->mcasync_token_id); @@ -111,11 +138,13 @@ void myhtml_tree_clean(myhtml_tree_t* tree) tree->document = myhtml_tree_node_create(tree); tree->fragment = NULL; - tree->doctype.is_html = myfalse; + tree->doctype.is_html = false; tree->doctype.attr_name = NULL; tree->doctype.attr_public = NULL; tree->doctype.attr_system = NULL; + tree->node_html = 0; + tree->node_body = 0; tree->node_head = 0; tree->node_form = 0; @@ -126,7 +155,7 @@ void myhtml_tree_clean(myhtml_tree_t* tree) tree->compat_mode = MyHTML_TREE_COMPAT_MODE_NO_QUIRKS; tree->tmp_tag_id = MyHTML_TAG__UNDEF; tree->flags = MyHTML_TREE_FLAGS_CLEAN|MyHTML_TREE_FLAGS_FRAMESET_OK; - tree->foster_parenting = myfalse; + tree->foster_parenting = false; tree->token_namespace = NULL; tree->incoming_buf = NULL; tree->incoming_buf_first = NULL; @@ -147,8 +176,9 @@ void myhtml_tree_clean(myhtml_tree_t* tree) myhtml_tree_list_clean(tree->other_elements); myhtml_tree_token_list_clean(tree->token_list); myhtml_tree_template_insertion_clean(tree); - myhtml_tree_index_clean(tree, tree->myhtml->tags); + myhtml_tree_index_clean(tree, tree->tags); mcobject_async_node_clean(myhtml->async_incoming_buf, tree->mcasync_incoming_buf_id); + myhtml_tag_clean(tree->tags); myhtml_token_attr_malloc(tree->token, tree->attr_current, tree->mcasync_attr_id); } @@ -165,11 +195,13 @@ void myhtml_tree_clean_all(myhtml_tree_t* tree) tree->document = myhtml_tree_node_create(tree); tree->fragment = NULL; - tree->doctype.is_html = myfalse; + tree->doctype.is_html = false; tree->doctype.attr_name = NULL; tree->doctype.attr_public = NULL; tree->doctype.attr_system = NULL; + tree->node_html = 0; + tree->node_body = 0; tree->node_head = 0; tree->node_form = 0; @@ -180,7 +212,7 @@ void myhtml_tree_clean_all(myhtml_tree_t* tree) tree->compat_mode = MyHTML_TREE_COMPAT_MODE_NO_QUIRKS; tree->tmp_tag_id = MyHTML_TAG__UNDEF; tree->flags = MyHTML_TREE_FLAGS_CLEAN|MyHTML_TREE_FLAGS_FRAMESET_OK; - tree->foster_parenting = myfalse; + tree->foster_parenting = false; tree->token_namespace = NULL; tree->incoming_buf = NULL; tree->incoming_buf_first = NULL; @@ -201,8 +233,9 @@ void myhtml_tree_clean_all(myhtml_tree_t* tree) myhtml_tree_list_clean(tree->other_elements); myhtml_tree_token_list_clean(tree->token_list); myhtml_tree_template_insertion_clean(tree); - myhtml_tree_index_clean(tree, tree->myhtml->tags); + myhtml_tree_index_clean(tree, tree->tags); mcobject_async_node_clean(tree->myhtml->async_incoming_buf, tree->mcasync_incoming_buf_id); + myhtml_tag_clean(tree->tags); myhtml_token_attr_malloc(tree->token, tree->attr_current, tree->mcasync_attr_id); } @@ -214,22 +247,23 @@ myhtml_tree_t * myhtml_tree_destroy(myhtml_tree_t* tree) tree->active_formatting = myhtml_tree_active_formatting_destroy(tree); tree->open_elements = myhtml_tree_open_elements_destroy(tree); - tree->other_elements = myhtml_tree_list_destroy(tree->other_elements, mytrue); - tree->token_list = myhtml_tree_token_list_destroy(tree->token_list, mytrue); + tree->other_elements = myhtml_tree_list_destroy(tree->other_elements, true); + tree->token_list = myhtml_tree_token_list_destroy(tree->token_list, true); tree->template_insertion = myhtml_tree_template_insertion_destroy(tree); - tree->indexes = myhtml_tree_index_destroy(tree, tree->myhtml->tags); - tree->sync = mcsync_destroy(tree->sync, mytrue); - tree->tree_obj = mcobject_async_destroy(tree->tree_obj, mytrue); + tree->indexes = myhtml_tree_index_destroy(tree, tree->tags); + tree->sync = mcsync_destroy(tree->sync, true); + tree->tree_obj = mcobject_async_destroy(tree->tree_obj, true); tree->token = myhtml_token_destroy(tree->token); tree->mchar = mchar_async_destroy(tree->mchar, 1); tree->temp_stream = myhtml_tree_temp_stream_free(tree); + tree->tags = myhtml_tag_destroy(tree->tags); if(tree->single_queue) { tree->single_queue = mythread_queue_destroy(tree->single_queue); } mcobject_async_node_delete(tree->myhtml->async_incoming_buf, tree->mcasync_incoming_buf_id); - myhtml_tree_temp_tag_name_destroy(&tree->temp_tag_name, myfalse); + myhtml_tree_temp_tag_name_destroy(&tree->temp_tag_name, false); free(tree->async_args); free(tree); @@ -284,7 +318,7 @@ void myhtml_tree_index_append(myhtml_tree_t* tree, myhtml_tree_node_t* node) if(tree->indexes == NULL) return; - myhtml_tag_index_add(tree->myhtml->tags, tree->indexes->tags, node); + myhtml_tag_index_add(tree->tags, tree->indexes->tags, node); } myhtml_tree_node_t * myhtml_tree_index_get(myhtml_tree_t* tree, myhtml_tag_id_t tag_id) @@ -310,8 +344,8 @@ myhtml_t * myhtml_tree_get_myhtml(myhtml_tree_t* tree) myhtml_tag_t * myhtml_tree_get_tag(myhtml_tree_t* tree) { - if(tree && tree->myhtml) - return tree->myhtml->tags; + if(tree) + return tree->tags; return NULL; } @@ -329,6 +363,16 @@ myhtml_tree_node_t * myhtml_tree_get_document(myhtml_tree_t* tree) return tree->document; } +myhtml_tree_node_t * myhtml_tree_get_node_html(myhtml_tree_t* tree) +{ + return tree->node_html; +} + +myhtml_tree_node_t * myhtml_tree_get_node_body(myhtml_tree_t* tree) +{ + return tree->node_body; +} + mchar_async_t * myhtml_tree_get_mchar(myhtml_tree_t* tree) { return tree->mchar; @@ -580,6 +624,8 @@ myhtml_tree_node_t * myhtml_tree_node_insert_root(myhtml_tree_t* tree, myhtml_to myhtml_tree_open_elements_append(tree, node); myhtml_tree_index_append(tree, node); + tree->node_html = node; + return node; } @@ -594,13 +640,13 @@ myhtml_tree_node_t * myhtml_tree_node_insert_text(myhtml_tree_t* tree, myhtml_to if(mode == MyHTML_TREE_INSERTION_MODE_AFTER) { if(adjusted_location->tag_idx == MyHTML_TAG__TEXT && adjusted_location->token) { - myhtml_token_merged_two_token_string(tree, adjusted_location->token, token, myfalse); + myhtml_token_merged_two_token_string(tree, adjusted_location->token, token, false); return adjusted_location; } } else if(mode == MyHTML_TREE_INSERTION_MODE_BEFORE) { if(adjusted_location->tag_idx == MyHTML_TAG__TEXT && adjusted_location->token) { - myhtml_token_merged_two_token_string(tree, token, adjusted_location->token, mytrue); + myhtml_token_merged_two_token_string(tree, token, adjusted_location->token, true); return adjusted_location; } } @@ -608,7 +654,7 @@ myhtml_tree_node_t * myhtml_tree_node_insert_text(myhtml_tree_t* tree, myhtml_to if(adjusted_location->last_child && adjusted_location->last_child->tag_idx == MyHTML_TAG__TEXT && adjusted_location->last_child->token) { - myhtml_token_merged_two_token_string(tree, adjusted_location->last_child->token, token, myfalse); + myhtml_token_merged_two_token_string(tree, adjusted_location->last_child->token, token, false); return adjusted_location->last_child; } } @@ -675,46 +721,52 @@ myhtml_tree_node_t * myhtml_tree_node_insert_html_element(myhtml_tree_t* tree, m myhtml_tree_node_t * myhtml_tree_element_in_scope(myhtml_tree_t* tree, myhtml_tag_id_t tag_idx, myhtml_namespace_t mynamespace, enum myhtml_tag_categories category) { myhtml_tree_node_t** list = tree->open_elements->list; - myhtml_tag_context_t* tags_context = tree->myhtml->tags->context; + const myhtml_tag_context_t *tag_ctx; size_t i = tree->open_elements->length; + while(i) { i--; + tag_ctx = myhtml_tag_get_by_id(tree->tags, list[i]->tag_idx); + if(list[i]->tag_idx == tag_idx && (mynamespace == MyHTML_NAMESPACE_UNDEF || list[i]->my_namespace == mynamespace)) return list[i]; else if(category == MyHTML_TAG_CATEGORIES_SCOPE_SELECT) { - if((tags_context[list[i]->tag_idx].cats[list[i]->my_namespace] & category) == 0) + if((tag_ctx->cats[list[i]->my_namespace] & category) == 0) break; } - else if(tags_context[list[i]->tag_idx].cats[list[i]->my_namespace] & category) + else if(tag_ctx->cats[list[i]->my_namespace] & category) break; } return NULL; } -mybool_t myhtml_tree_element_in_scope_by_node(myhtml_tree_t* tree, myhtml_tree_node_t* node, enum myhtml_tag_categories category) +bool myhtml_tree_element_in_scope_by_node(myhtml_tree_t* tree, myhtml_tree_node_t* node, enum myhtml_tag_categories category) { myhtml_tree_node_t** list = tree->open_elements->list; - myhtml_tag_context_t* tags_context = tree->myhtml->tags->context; + const myhtml_tag_context_t *tag_ctx; size_t i = tree->open_elements->length; + while(i) { i--; + tag_ctx = myhtml_tag_get_by_id(tree->tags, list[i]->tag_idx); + if(list[i] == node) - return mytrue; + return true; else if(category == MyHTML_TAG_CATEGORIES_SCOPE_SELECT) { - if((tags_context[list[i]->tag_idx].cats[list[i]->my_namespace] & category) == 0) + if((tag_ctx->cats[list[i]->my_namespace] & category) == 0) break; } - else if(tags_context[list[i]->tag_idx].cats[list[i]->my_namespace] & category) + else if(tag_ctx->cats[list[i]->my_namespace] & category) break; } - return myfalse; + return false; } // list @@ -734,7 +786,7 @@ void myhtml_tree_list_clean(myhtml_tree_list_t* list) list->length = 0; } -myhtml_tree_list_t * myhtml_tree_list_destroy(myhtml_tree_list_t* list, mybool_t destroy_self) +myhtml_tree_list_t * myhtml_tree_list_destroy(myhtml_tree_list_t* list, bool destroy_self) { if(list->list) free(list->list); @@ -902,7 +954,7 @@ void myhtml_tree_open_elements_clean(myhtml_tree_t* tree) myhtml_tree_list_t * myhtml_tree_open_elements_destroy(myhtml_tree_t* tree) { - return myhtml_tree_list_destroy(tree->open_elements, mytrue); + return myhtml_tree_list_destroy(tree->open_elements, true); } myhtml_tree_node_t * myhtml_tree_current_node(myhtml_tree_t* tree) @@ -970,7 +1022,7 @@ void myhtml_tree_open_elements_remove(myhtml_tree_t* tree, myhtml_tree_node_t* n #endif } -void myhtml_tree_open_elements_pop_until(myhtml_tree_t* tree, myhtml_tag_id_t tag_idx, myhtml_namespace_t mynamespace, mybool_t is_exclude) +void myhtml_tree_open_elements_pop_until(myhtml_tree_t* tree, myhtml_tag_id_t tag_idx, myhtml_namespace_t mynamespace, bool is_exclude) { myhtml_tree_node_t** list = tree->open_elements->list; @@ -997,7 +1049,7 @@ void myhtml_tree_open_elements_pop_until(myhtml_tree_t* tree, myhtml_tag_id_t ta #endif } -void myhtml_tree_open_elements_pop_until_by_node(myhtml_tree_t* tree, myhtml_tree_node_t* node, mybool_t is_exclude) +void myhtml_tree_open_elements_pop_until_by_node(myhtml_tree_t* tree, myhtml_tree_node_t* node, bool is_exclude) { myhtml_tree_node_t** list = tree->open_elements->list; @@ -1020,7 +1072,7 @@ void myhtml_tree_open_elements_pop_until_by_node(myhtml_tree_t* tree, myhtml_tre #endif } -void myhtml_tree_open_elements_pop_until_by_index(myhtml_tree_t* tree, size_t idx, mybool_t is_exclude) +void myhtml_tree_open_elements_pop_until_by_index(myhtml_tree_t* tree, size_t idx, bool is_exclude) { while(tree->open_elements->length) { @@ -1041,7 +1093,7 @@ void myhtml_tree_open_elements_pop_until_by_index(myhtml_tree_t* tree, size_t id #endif } -mybool_t myhtml_tree_open_elements_find_reverse(myhtml_tree_t* tree, myhtml_tree_node_t* idx, size_t* pos) +bool myhtml_tree_open_elements_find_reverse(myhtml_tree_t* tree, myhtml_tree_node_t* idx, size_t* pos) { myhtml_tree_node_t** list = tree->open_elements->list; @@ -1054,14 +1106,14 @@ mybool_t myhtml_tree_open_elements_find_reverse(myhtml_tree_t* tree, myhtml_tree if(pos) *pos = i; - return mytrue; + return true; } } - return myfalse; + return false; } -mybool_t myhtml_tree_open_elements_find(myhtml_tree_t* tree, myhtml_tree_node_t* node, size_t* pos) +bool myhtml_tree_open_elements_find(myhtml_tree_t* tree, myhtml_tree_node_t* node, size_t* pos) { myhtml_tree_node_t** list = tree->open_elements->list; @@ -1071,11 +1123,11 @@ mybool_t myhtml_tree_open_elements_find(myhtml_tree_t* tree, myhtml_tree_node_t* if(pos) *pos = i; - return mytrue; + return true; } } - return myfalse; + return false; } myhtml_tree_node_t * myhtml_tree_open_elements_find_by_tag_idx_reverse(myhtml_tree_t* tree, myhtml_tag_id_t tag_idx, myhtml_namespace_t mynamespace, size_t* return_index) @@ -1219,7 +1271,7 @@ void myhtml_tree_reset_insertion_mode_appropriately(myhtml_tree_t* tree) size_t i = tree->open_elements->length; // step 1 - mybool_t last = myfalse; + bool last = false; myhtml_tree_node_t** list = tree->open_elements->list; // step 3 @@ -1237,7 +1289,7 @@ void myhtml_tree_reset_insertion_mode_appropriately(myhtml_tree_t* tree) #endif if(i == 0) { - last = mytrue; + last = true; if(tree->fragment) { node = tree->fragment; @@ -1299,7 +1351,7 @@ void myhtml_tree_reset_insertion_mode_appropriately(myhtml_tree_t* tree) switch (node->tag_idx) { case MyHTML_TAG_TD: case MyHTML_TAG_TH: - if(last == myfalse) { + if(last == false) { tree->insert_mode = MyHTML_INSERTION_MODE_IN_CELL; return; } @@ -1332,7 +1384,7 @@ void myhtml_tree_reset_insertion_mode_appropriately(myhtml_tree_t* tree) return; case MyHTML_TAG_HEAD: - if(last == myfalse) { + if(last == false) { tree->insert_mode = MyHTML_INSERTION_MODE_IN_HEAD; return; } @@ -1386,10 +1438,10 @@ void myhtml_tree_active_formatting_clean(myhtml_tree_t* tree) myhtml_tree_list_t * myhtml_tree_active_formatting_destroy(myhtml_tree_t* tree) { - return myhtml_tree_list_destroy(tree->active_formatting, mytrue); + return myhtml_tree_list_destroy(tree->active_formatting, true); } -mybool_t myhtml_tree_active_formatting_is_marker(myhtml_tree_t* tree, myhtml_tree_node_t* node) +bool myhtml_tree_active_formatting_is_marker(myhtml_tree_t* tree, myhtml_tree_node_t* node) { #ifdef DEBUG_MODE if(node == NULL) { @@ -1398,7 +1450,7 @@ mybool_t myhtml_tree_active_formatting_is_marker(myhtml_tree_t* tree, myhtml_tre #endif if(tree->myhtml->marker == node) - return mytrue; + return true; switch (node->tag_idx) { case MyHTML_TAG_APPLET: @@ -1408,13 +1460,13 @@ mybool_t myhtml_tree_active_formatting_is_marker(myhtml_tree_t* tree, myhtml_tre case MyHTML_TAG_TD: case MyHTML_TAG_TH: case MyHTML_TAG_CAPTION: - return mytrue; + return true; default: break; } - return myfalse; + return false; } void myhtml_tree_active_formatting_append(myhtml_tree_t* tree, myhtml_tree_node_t* node) @@ -1529,7 +1581,7 @@ myhtml_tree_node_t * myhtml_tree_active_formatting_current_node(myhtml_tree_t* t return tree->active_formatting->list[ tree->active_formatting->length - 1 ]; } -mybool_t myhtml_tree_active_formatting_find(myhtml_tree_t* tree, myhtml_tree_node_t* node, size_t* return_idx) +bool myhtml_tree_active_formatting_find(myhtml_tree_t* tree, myhtml_tree_node_t* node, size_t* return_idx) { myhtml_tree_node_t** list = tree->active_formatting->list; @@ -1542,11 +1594,11 @@ mybool_t myhtml_tree_active_formatting_find(myhtml_tree_t* tree, myhtml_tree_nod if(return_idx) *return_idx = i; - return mytrue; + return true; } } - return myfalse; + return false; } void myhtml_tree_active_formatting_up_to_last_marker(myhtml_tree_t* tree) @@ -1661,17 +1713,16 @@ void myhtml_tree_active_formatting_reconstruction(myhtml_tree_t* tree) } } -mybool_t myhtml_tree_adoption_agency_algorithm(myhtml_tree_t* tree, myhtml_tag_id_t subject_tag_idx) +bool myhtml_tree_adoption_agency_algorithm(myhtml_tree_t* tree, myhtml_tag_id_t subject_tag_idx) { if(tree->open_elements->length == 0) - return myfalse; + return false; size_t oel_curr_index = tree->open_elements->length - 1; myhtml_tree_node_t** oel_list = tree->open_elements->list; myhtml_tree_node_t** afe_list = tree->active_formatting->list; myhtml_tree_node_t* current_node = oel_list[oel_curr_index]; - myhtml_tag_context_t* tags_context = tree->myhtml->tags->context; #ifdef DEBUG_MODE if(current_node == NULL) { @@ -1681,10 +1732,10 @@ mybool_t myhtml_tree_adoption_agency_algorithm(myhtml_tree_t* tree, myhtml_tag_i // step 1 if(current_node->my_namespace == MyHTML_NAMESPACE_HTML && current_node->tag_idx == subject_tag_idx && - myhtml_tree_active_formatting_find(tree, current_node, NULL) == myfalse) + myhtml_tree_active_formatting_find(tree, current_node, NULL) == false) { myhtml_tree_open_elements_pop(tree); - return myfalse; + return false; } // step 2, 3 @@ -1707,7 +1758,7 @@ mybool_t myhtml_tree_adoption_agency_algorithm(myhtml_tree_t* tree, myhtml_tag_i i--; if(myhtml_tree_active_formatting_is_marker(tree, list[i])) - return myfalse; + return false; else if(list[i]->tag_idx == subject_tag_idx) { afe_index = i; formatting_element = list[i]; @@ -1721,19 +1772,19 @@ mybool_t myhtml_tree_adoption_agency_algorithm(myhtml_tree_t* tree, myhtml_tag_i // If there is no such element, then abort these steps and instead act as described in the // ===> "any other end tag" entry above. if(formatting_element == NULL) { - return mytrue; + return true; } // step 6 size_t oel_format_el_idx; - if(myhtml_tree_open_elements_find(tree, formatting_element, &oel_format_el_idx) == myfalse) { + if(myhtml_tree_open_elements_find(tree, formatting_element, &oel_format_el_idx) == false) { myhtml_tree_active_formatting_remove(tree, formatting_element); - return myfalse; + return false; } // step 7 - if(myhtml_tree_element_in_scope_by_node(tree, formatting_element, MyHTML_TAG_CATEGORIES_SCOPE) == myfalse) - return myfalse; + if(myhtml_tree_element_in_scope_by_node(tree, formatting_element, MyHTML_TAG_CATEGORIES_SCOPE) == false) + return false; // step 8 //if(afe_last != list[i]) @@ -1745,8 +1796,11 @@ mybool_t myhtml_tree_adoption_agency_algorithm(myhtml_tree_t* tree, myhtml_tag_i // here might not be one. myhtml_tree_node_t* furthest_block = NULL; size_t idx_furthest_block = 0; - for (idx_furthest_block = oel_format_el_idx; idx_furthest_block < tree->open_elements->length; idx_furthest_block++) { - if(tags_context[ oel_list[idx_furthest_block]->tag_idx ].cats[oel_list[idx_furthest_block]->my_namespace] & MyHTML_TAG_CATEGORIES_SPECIAL) { + for (idx_furthest_block = oel_format_el_idx; idx_furthest_block < tree->open_elements->length; idx_furthest_block++) + { + const myhtml_tag_context_t *tag_ctx = myhtml_tag_get_by_id(tree->tags, oel_list[idx_furthest_block]->tag_idx); + + if(tag_ctx->cats[oel_list[idx_furthest_block]->my_namespace] & MyHTML_TAG_CATEGORIES_SPECIAL) { furthest_block = oel_list[idx_furthest_block]; break; } @@ -1765,7 +1819,7 @@ mybool_t myhtml_tree_adoption_agency_algorithm(myhtml_tree_t* tree, myhtml_tag_i myhtml_tree_open_elements_pop(tree); // and including formatting element myhtml_tree_active_formatting_remove(tree, formatting_element); - return myfalse; + return false; } #ifdef DEBUG_MODE @@ -1798,7 +1852,7 @@ mybool_t myhtml_tree_adoption_agency_algorithm(myhtml_tree_t* tree, myhtml_tag_i // step 13.3 size_t node_index; - if(myhtml_tree_open_elements_find(tree, node, &node_index) == myfalse) { + if(myhtml_tree_open_elements_find(tree, node, &node_index) == false) { node_index = index_oel_node; } @@ -1806,7 +1860,7 @@ mybool_t myhtml_tree_adoption_agency_algorithm(myhtml_tree_t* tree, myhtml_tag_i node_index--; else { fprintf(stderr, "ERROR: adoption agency algorithm; decrement node_index, node_index is null"); - return myfalse; + return false; } index_oel_node = node_index; @@ -1824,7 +1878,7 @@ mybool_t myhtml_tree_adoption_agency_algorithm(myhtml_tree_t* tree, myhtml_tag_i // step 13.5 size_t afe_node_index; - mybool_t is_exists = myhtml_tree_active_formatting_find(tree, node, &afe_node_index); + bool is_exists = myhtml_tree_active_formatting_find(tree, node, &afe_node_index); if(inner_loop > 3 && is_exists) { myhtml_tree_active_formatting_remove_by_index(tree, afe_node_index); @@ -1837,7 +1891,7 @@ mybool_t myhtml_tree_adoption_agency_algorithm(myhtml_tree_t* tree, myhtml_tag_i } // step 13.6 - if(is_exists == myfalse) { + if(is_exists == false) { myhtml_tree_open_elements_remove(tree, node); continue; } @@ -1901,8 +1955,8 @@ mybool_t myhtml_tree_adoption_agency_algorithm(myhtml_tree_t* tree, myhtml_tag_i myhtml_tree_node_add_child(tree, furthest_block, new_formatting_element); // step 18 - if(myhtml_tree_active_formatting_find(tree, formatting_element, &afe_index) == myfalse) - return myfalse; + if(myhtml_tree_active_formatting_find(tree, formatting_element, &afe_index) == false) + return false; if(afe_index < bookmark) bookmark--; @@ -1927,7 +1981,7 @@ mybool_t myhtml_tree_adoption_agency_algorithm(myhtml_tree_t* tree, myhtml_tag_i } } - return myfalse; + return false; } myhtml_tree_node_t * myhtml_tree_appropriate_place_inserting(myhtml_tree_t* tree, myhtml_tree_node_t* override_target, @@ -2195,20 +2249,19 @@ void myhtml_tree_print_node(myhtml_tree_t* tree, myhtml_tree_node_t* node, FILE* if(node == NULL) return; - myhtml_t* myhtml = tree->myhtml; - mctree_node_t* mctree_nodes = myhtml->tags->tree->nodes; + const myhtml_tag_context_t *ctx = myhtml_tag_get_by_id(tree->tags, node->tag_idx); - size_t mctree_id = mh_tags_get(node->tag_idx, mctree_id); - size_t tag_name_size = mctree_nodes[mctree_id].str_size; +// size_t mctree_id = mh_tags_get(node->tag_idx, mctree_id); +// size_t tag_name_size = mctree_nodes[mctree_id].str_size; if(node->tag_idx == MyHTML_TAG__TEXT || node->tag_idx == MyHTML_TAG__COMMENT) { if(node->token) - fprintf(out, "<%.*s>: %.*s\n", (int)tag_name_size, mctree_nodes[mctree_id].str, + fprintf(out, "<%.*s>: %.*s\n", (int)ctx->name_length, ctx->name, (int)node->token->length, &node->token->my_str_tm.data[node->token->begin]); else - fprintf(out, "<%.*s>\n", (int)tag_name_size, mctree_nodes[mctree_id].str); + fprintf(out, "<%.*s>\n", (int)ctx->name_length, ctx->name); } else if(node->tag_idx == MyHTML_TAG__DOCTYPE) { @@ -2234,7 +2287,7 @@ void myhtml_tree_print_node(myhtml_tree_t* tree, myhtml_tree_node_t* node, FILE* fprintf(out, "<%.*s tagid=\"%zu\" mem=\"%zx\"", (int)tag_name_size, mctree_nodes[mctree_id].str, mh_tags_get(node->tag_idx, id), (size_t)node); #else - fprintf(out, "<%.*s", (int)tag_name_size, mctree_nodes[mctree_id].str); + fprintf(out, "<%.*s", (int)ctx->name_length, ctx->name); if(node->my_namespace != MyHTML_NAMESPACE_HTML) { switch (node->my_namespace) { @@ -2319,7 +2372,7 @@ void myhtml_tree_token_list_clean(myhtml_tree_token_list_t* list) list->length = 0; } -myhtml_tree_token_list_t * myhtml_tree_token_list_destroy(myhtml_tree_token_list_t* list, mybool_t destroy_self) +myhtml_tree_token_list_t * myhtml_tree_token_list_destroy(myhtml_tree_token_list_t* list, bool destroy_self) { if(list->list) free(list->list); @@ -2384,7 +2437,7 @@ myhtml_token_node_t * myhtml_tree_token_list_current_node(myhtml_tree_token_list void myhtml_tree_tags_close_p(myhtml_tree_t* tree) { myhtml_tree_generate_implied_end_tags(tree, MyHTML_TAG_P, MyHTML_NAMESPACE_HTML); - myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_P, MyHTML_NAMESPACE_HTML, myfalse); + myhtml_tree_open_elements_pop_until(tree, MyHTML_TAG_P, MyHTML_NAMESPACE_HTML, false); } myhtml_tree_node_t * myhtml_tree_generic_raw_text_element_parsing_algorithm(myhtml_tree_t* tree, myhtml_token_node_t* token_node) @@ -2456,7 +2509,7 @@ void myhtml_tree_close_cell(myhtml_tree_t* tree, myhtml_tree_node_t* tr_or_th_no } // step 3 - myhtml_tree_open_elements_pop_until(tree, tr_or_th_node->tag_idx, tr_or_th_node->my_namespace, myfalse); + myhtml_tree_open_elements_pop_until(tree, tr_or_th_node->tag_idx, tr_or_th_node->my_namespace, false); // step 4 myhtml_tree_active_formatting_up_to_last_marker(tree); @@ -2465,7 +2518,7 @@ void myhtml_tree_close_cell(myhtml_tree_t* tree, myhtml_tree_node_t* tr_or_th_no tree->insert_mode = MyHTML_INSERTION_MODE_IN_ROW; } -mybool_t myhtml_tree_is_mathml_integration_point(myhtml_tree_t* tree, myhtml_tree_node_t* node) +bool myhtml_tree_is_mathml_integration_point(myhtml_tree_t* tree, myhtml_tree_node_t* node) { if(node->my_namespace == MyHTML_NAMESPACE_MATHML && (node->tag_idx == MyHTML_TAG_MI || @@ -2474,19 +2527,19 @@ mybool_t myhtml_tree_is_mathml_integration_point(myhtml_tree_t* tree, myhtml_tre node->tag_idx == MyHTML_TAG_MS || node->tag_idx == MyHTML_TAG_MTEXT) ) - return mytrue; + return true; - return myfalse; + return false; } -mybool_t myhtml_tree_is_html_integration_point(myhtml_tree_t* tree, myhtml_tree_node_t* node) +bool myhtml_tree_is_html_integration_point(myhtml_tree_t* tree, myhtml_tree_node_t* node) { if(node->my_namespace == MyHTML_NAMESPACE_SVG && (node->tag_idx == MyHTML_TAG_FOREIGNOBJECT || node->tag_idx == MyHTML_TAG_DESC || node->tag_idx == MyHTML_TAG_TITLE) ) - return mytrue; + return true; if(node->my_namespace == MyHTML_NAMESPACE_MATHML && node->tag_idx == MyHTML_TAG_ANNOTATION_XML && node->token && @@ -2497,15 +2550,15 @@ mybool_t myhtml_tree_is_html_integration_point(myhtml_tree_t* tree, myhtml_tree_ myhtml_token_attr_t* attr = myhtml_token_attr_match_case(tree->token, node->token, "encoding", 8, "text/html", 9); if(attr) - return mytrue; + return true; attr = myhtml_token_attr_match_case(tree->token, node->token, "encoding", 8, "application/xhtml+xml", 21); if(attr) - return mytrue; + return true; } - return myfalse; + return false; } // temp tag name @@ -2526,7 +2579,7 @@ void myhtml_tree_temp_tag_name_clean(myhtml_tree_temp_tag_name_t* temp_tag_name) temp_tag_name->length = 0; } -myhtml_tree_temp_tag_name_t * myhtml_tree_temp_tag_name_destroy(myhtml_tree_temp_tag_name_t* temp_tag_name, mybool_t self_destroy) +myhtml_tree_temp_tag_name_t * myhtml_tree_temp_tag_name_destroy(myhtml_tree_temp_tag_name_t* temp_tag_name, bool self_destroy) { if(temp_tag_name == NULL) return NULL; @@ -2590,8 +2643,12 @@ myhtml_status_t myhtml_tree_temp_tag_name_append(myhtml_tree_temp_tag_name_t* te void myhtml_tree_wait_for_last_done_token(myhtml_tree_t* tree, myhtml_token_node_t* token_for_wait) { +#ifndef MyHTML_BUILD_WITHOUT_THREADS + const struct timespec tomeout = {0, 1000}; while(tree->token_last_done != token_for_wait) {myhtml_thread_nanosleep(&tomeout);} + +#endif } /* special tonek list */ @@ -2612,7 +2669,7 @@ void myhtml_tree_special_list_clean(myhtml_tree_temp_tag_name_t* temp_tag_name) temp_tag_name->length = 0; } -myhtml_tree_special_token_list_t * myhtml_tree_special_list_destroy(myhtml_tree_special_token_list_t* special, mybool_t self_destroy) +myhtml_tree_special_token_list_t * myhtml_tree_special_list_destroy(myhtml_tree_special_token_list_t* special, bool self_destroy) { if(special == NULL) return NULL; diff --git a/source/myhtml/tree.h b/source/myhtml/tree.h index 95e99ea..ffb2798 100644 --- a/source/myhtml/tree.h +++ b/source/myhtml/tree.h @@ -101,7 +101,7 @@ struct myhtml_async_args { }; struct myhtml_tree_doctype { - mybool_t is_html; + bool is_html; char* attr_name; char* attr_public; char* attr_system; @@ -166,6 +166,7 @@ struct myhtml_tree { mcsync_t* sync; mythread_queue_t* queue; mythread_queue_t* single_queue; + myhtml_tag_t* tags; // init id's size_t mcasync_token_id; @@ -185,6 +186,8 @@ struct myhtml_tree { myhtml_tree_node_t* document; myhtml_tree_node_t* fragment; myhtml_tree_node_t* node_head; + myhtml_tree_node_t* node_html; + myhtml_tree_node_t* node_body; myhtml_tree_node_t* node_form; myhtml_tree_doctype_t doctype; @@ -208,7 +211,7 @@ struct myhtml_tree { enum myhtml_insertion_mode orig_insert_mode; enum myhtml_tree_compat_mode compat_mode; volatile enum myhtml_tree_flags flags; - mybool_t foster_parenting; + bool foster_parenting; size_t global_offset; myhtml_encoding_t encoding; @@ -227,6 +230,8 @@ myhtml_t * myhtml_tree_get_myhtml(myhtml_tree_t* tree); myhtml_tag_t * myhtml_tree_get_tag(myhtml_tree_t* tree); myhtml_tag_index_t * myhtml_tree_get_tag_index(myhtml_tree_t* tree); myhtml_tree_node_t * myhtml_tree_get_document(myhtml_tree_t* tree); +myhtml_tree_node_t * myhtml_tree_get_node_html(myhtml_tree_t* tree); +myhtml_tree_node_t * myhtml_tree_get_node_body(myhtml_tree_t* tree); mchar_async_t * myhtml_tree_get_mchar(myhtml_tree_t* tree); size_t myhtml_tree_get_mchar_node_id(myhtml_tree_t* tree); @@ -234,7 +239,7 @@ size_t myhtml_tree_get_mchar_node_id(myhtml_tree_t* tree); // list myhtml_tree_list_t * myhtml_tree_list_init(void); void myhtml_tree_list_clean(myhtml_tree_list_t* list); -myhtml_tree_list_t * myhtml_tree_list_destroy(myhtml_tree_list_t* list, mybool_t destroy_self); +myhtml_tree_list_t * myhtml_tree_list_destroy(myhtml_tree_list_t* list, bool destroy_self); void myhtml_tree_list_append(myhtml_tree_list_t* list, myhtml_tree_node_t* node); void myhtml_tree_list_append_after_index(myhtml_tree_list_t* list, myhtml_tree_node_t* node, size_t index); @@ -244,7 +249,7 @@ myhtml_tree_node_t * myhtml_tree_list_current_node(myhtml_tree_list_t* list); // token list myhtml_tree_token_list_t * myhtml_tree_token_list_init(void); void myhtml_tree_token_list_clean(myhtml_tree_token_list_t* list); -myhtml_tree_token_list_t * myhtml_tree_token_list_destroy(myhtml_tree_token_list_t* list, mybool_t destroy_self); +myhtml_tree_token_list_t * myhtml_tree_token_list_destroy(myhtml_tree_token_list_t* list, bool destroy_self); void myhtml_tree_token_list_append(myhtml_tree_token_list_t* list, myhtml_token_node_t* token); void myhtml_tree_token_list_append_after_index(myhtml_tree_token_list_t* list, myhtml_token_node_t* token, size_t index); @@ -255,7 +260,7 @@ myhtml_tree_list_t * myhtml_tree_active_formatting_init(myhtml_tree_t* tree); void myhtml_tree_active_formatting_clean(myhtml_tree_t* tree); myhtml_tree_list_t * myhtml_tree_active_formatting_destroy(myhtml_tree_t* tree); -mybool_t myhtml_tree_active_formatting_is_marker(myhtml_tree_t* tree, myhtml_tree_node_t* idx); +bool myhtml_tree_active_formatting_is_marker(myhtml_tree_t* tree, myhtml_tree_node_t* idx); myhtml_tree_node_t* myhtml_tree_active_formatting_between_last_marker(myhtml_tree_t* tree, myhtml_tag_id_t tag_idx, size_t* return_idx); void myhtml_tree_active_formatting_append(myhtml_tree_t* tree, myhtml_tree_node_t* node); @@ -267,7 +272,7 @@ void myhtml_tree_active_formatting_remove_by_index(myhtml_tree_t* tree, size_t i void myhtml_tree_active_formatting_reconstruction(myhtml_tree_t* tree); void myhtml_tree_active_formatting_up_to_last_marker(myhtml_tree_t* tree); -mybool_t myhtml_tree_active_formatting_find(myhtml_tree_t* tree, myhtml_tree_node_t* idx, size_t* return_idx); +bool myhtml_tree_active_formatting_find(myhtml_tree_t* tree, myhtml_tree_node_t* idx, size_t* return_idx); myhtml_tree_node_t* myhtml_tree_active_formatting_current_node(myhtml_tree_t* tree); // open elements @@ -281,17 +286,17 @@ myhtml_tree_node_t * myhtml_tree_adjusted_current_node(myhtml_tree_t* tree); void myhtml_tree_open_elements_append(myhtml_tree_t* tree, myhtml_tree_node_t* node); void myhtml_tree_open_elements_append_after_index(myhtml_tree_t* tree, myhtml_tree_node_t* node, size_t index); void myhtml_tree_open_elements_pop(myhtml_tree_t* tree); -void myhtml_tree_open_elements_pop_until(myhtml_tree_t* tree, myhtml_tag_id_t tag_idx, myhtml_namespace_t mynamespace, mybool_t is_exclude); -void myhtml_tree_open_elements_pop_until_by_node(myhtml_tree_t* tree, myhtml_tree_node_t* node_idx, mybool_t is_exclude); -void myhtml_tree_open_elements_pop_until_by_index(myhtml_tree_t* tree, size_t idx, mybool_t is_exclude); +void myhtml_tree_open_elements_pop_until(myhtml_tree_t* tree, myhtml_tag_id_t tag_idx, myhtml_namespace_t mynamespace, bool is_exclude); +void myhtml_tree_open_elements_pop_until_by_node(myhtml_tree_t* tree, myhtml_tree_node_t* node_idx, bool is_exclude); +void myhtml_tree_open_elements_pop_until_by_index(myhtml_tree_t* tree, size_t idx, bool is_exclude); void myhtml_tree_open_elements_remove(myhtml_tree_t* tree, myhtml_tree_node_t* node); -mybool_t myhtml_tree_open_elements_find(myhtml_tree_t* tree, myhtml_tree_node_t* idx, size_t* pos); -mybool_t myhtml_tree_open_elements_find_reverse(myhtml_tree_t* tree, myhtml_tree_node_t* idx, size_t* pos); +bool myhtml_tree_open_elements_find(myhtml_tree_t* tree, myhtml_tree_node_t* idx, size_t* pos); +bool myhtml_tree_open_elements_find_reverse(myhtml_tree_t* tree, myhtml_tree_node_t* idx, size_t* pos); myhtml_tree_node_t * myhtml_tree_open_elements_find_by_tag_idx(myhtml_tree_t* tree, myhtml_tag_id_t tag_idx, myhtml_namespace_t mynamespace, size_t* return_index); myhtml_tree_node_t * myhtml_tree_open_elements_find_by_tag_idx_reverse(myhtml_tree_t* tree, myhtml_tag_id_t tag_idx, myhtml_namespace_t mynamespace, size_t* return_index); myhtml_tree_node_t * myhtml_tree_element_in_scope(myhtml_tree_t* tree, myhtml_tag_id_t tag_idx, myhtml_namespace_t mynamespace, enum myhtml_tag_categories category); -mybool_t myhtml_tree_element_in_scope_by_node(myhtml_tree_t* tree, myhtml_tree_node_t* node, enum myhtml_tag_categories category); +bool myhtml_tree_element_in_scope_by_node(myhtml_tree_t* tree, myhtml_tree_node_t* node, enum myhtml_tag_categories category); void myhtml_tree_generate_implied_end_tags(myhtml_tree_t* tree, myhtml_tag_id_t exclude_tag_idx, myhtml_namespace_t mynamespace); void myhtml_tree_generate_all_implied_end_tags(myhtml_tree_t* tree, myhtml_tag_id_t exclude_tag_idx, myhtml_namespace_t mynamespace); myhtml_tree_node_t * myhtml_tree_appropriate_place_inserting(myhtml_tree_t* tree, myhtml_tree_node_t* override_target, enum myhtml_tree_insertion_mode* mode); @@ -307,7 +312,7 @@ void myhtml_tree_template_insertion_pop(myhtml_tree_t* tree); void myhtml_tree_reset_insertion_mode_appropriately(myhtml_tree_t* tree); -mybool_t myhtml_tree_adoption_agency_algorithm(myhtml_tree_t* tree, myhtml_tag_id_t subject_tag_idx); +bool myhtml_tree_adoption_agency_algorithm(myhtml_tree_t* tree, myhtml_tag_id_t subject_tag_idx); size_t myhtml_tree_template_insertion_length(myhtml_tree_t* tree); // other for a tree @@ -357,13 +362,13 @@ void myhtml_tree_clear_stack_back_table_body_context(myhtml_tree_t* tree); void myhtml_tree_clear_stack_back_table_row_context(myhtml_tree_t* tree); void myhtml_tree_close_cell(myhtml_tree_t* tree, myhtml_tree_node_t* tr_or_th_node); -mybool_t myhtml_tree_is_mathml_integration_point(myhtml_tree_t* tree, myhtml_tree_node_t* node); -mybool_t myhtml_tree_is_html_integration_point(myhtml_tree_t* tree, myhtml_tree_node_t* node); +bool myhtml_tree_is_mathml_integration_point(myhtml_tree_t* tree, myhtml_tree_node_t* node); +bool myhtml_tree_is_html_integration_point(myhtml_tree_t* tree, myhtml_tree_node_t* node); // temp tag name myhtml_status_t myhtml_tree_temp_tag_name_init(myhtml_tree_temp_tag_name_t* temp_tag_name); void myhtml_tree_temp_tag_name_clean(myhtml_tree_temp_tag_name_t* temp_tag_name); -myhtml_tree_temp_tag_name_t * myhtml_tree_temp_tag_name_destroy(myhtml_tree_temp_tag_name_t* temp_tag_name, mybool_t self_destroy); +myhtml_tree_temp_tag_name_t * myhtml_tree_temp_tag_name_destroy(myhtml_tree_temp_tag_name_t* temp_tag_name, bool self_destroy); myhtml_status_t myhtml_tree_temp_tag_name_append(myhtml_tree_temp_tag_name_t* temp_tag_name, const char* name, size_t name_len); myhtml_status_t myhtml_tree_temp_tag_name_append_one(myhtml_tree_temp_tag_name_t* temp_tag_name, const char name); diff --git a/source/myhtml/utils/mchar_async.c b/source/myhtml/utils/mchar_async.c index 870a1e7..71321bb 100644 --- a/source/myhtml/utils/mchar_async.c +++ b/source/myhtml/utils/mchar_async.c @@ -81,7 +81,7 @@ mchar_async_t * mchar_async_destroy(mchar_async_t *mchar_async, int destroy_self for (size_t node_idx = 0; node_idx < mchar_async->nodes_length; node_idx++) { mchar_async_node_t *node = &mchar_async->nodes[node_idx]; - mchar_async_cache_destroy(&node->cache, myfalse); + mchar_async_cache_destroy(&node->cache, false); } free(mchar_async->nodes); @@ -110,7 +110,7 @@ mchar_async_t * mchar_async_destroy(mchar_async_t *mchar_async, int destroy_self mchar_async->chunks = NULL; } - mchar_async_cache_destroy(&mchar_async->chunk_cache, myfalse); + mchar_async_cache_destroy(&mchar_async->chunk_cache, false); mchar_async->mcsync = mcsync_destroy(mchar_async->mcsync, 1); @@ -141,7 +141,7 @@ void mchar_async_mem_malloc(mchar_async_t *mchar_async, mchar_async_node_t *node chunk->size = mchar_async->origin_size; if(length > chunk->size) - chunk->size += length; + chunk->size = length; chunk->begin = (char*)mymalloc(chunk->size * sizeof(char)); } @@ -276,7 +276,7 @@ void mchar_async_node_delete(mchar_async_t *mchar_async, size_t node_idx) } if(node->cache.nodes) - free(node->cache.nodes); + mchar_async_cache_destroy(&node->cache, false); memset(node, 0, sizeof(mchar_async_node_t)); @@ -406,10 +406,10 @@ char * mchar_async_realloc(mchar_async_t *mchar_async, size_t node_idx, char *da size_t next_size = (node->chunk->length - curr_size) + new_size; if(next_size <= node->chunk->size) { - node->chunk->length = next_size; - /* it`s Magic */ - *((size_t*)(&node->chunk->begin[ ((node->chunk->length - new_size) - sizeof(size_t)) ])) = new_size; + *((size_t*)(&node->chunk->begin[ ((node->chunk->length - curr_size) - sizeof(size_t)) ])) = new_size; + + node->chunk->length = next_size; return data; } @@ -508,7 +508,7 @@ void mchar_async_cache_clean(mchar_async_cache_t *cache) } } -mchar_async_cache_t * mchar_async_cache_destroy(mchar_async_cache_t *cache, mybool_t self_destroy) +mchar_async_cache_t * mchar_async_cache_destroy(mchar_async_cache_t *cache, bool self_destroy) { if(cache == NULL) return NULL; diff --git a/source/myhtml/utils/mchar_async.h b/source/myhtml/utils/mchar_async.h index 3f53d4b..b1260a9 100644 --- a/source/myhtml/utils/mchar_async.h +++ b/source/myhtml/utils/mchar_async.h @@ -113,7 +113,7 @@ char * mchar_async_crop_first_chars_without_cache(char *data, size_t crop_len); // cache void mchar_async_cache_init(mchar_async_cache_t *cache); -mchar_async_cache_t * mchar_async_cache_destroy(mchar_async_cache_t *cache, mybool_t self_destroy); +mchar_async_cache_t * mchar_async_cache_destroy(mchar_async_cache_t *cache, bool self_destroy); void mchar_async_cache_clean(mchar_async_cache_t *cache); void mchar_async_cache_add(mchar_async_cache_t *cache, void* value, size_t size); diff --git a/source/myhtml/utils/mctree.c b/source/myhtml/utils/mctree.c index 9bc9663..0a40830 100644 --- a/source/myhtml/utils/mctree.c +++ b/source/myhtml/utils/mctree.c @@ -16,6 +16,7 @@ Author: lex.borisov@gmail.com (Alexander Borisov) */ +#include "myhtml/utils/resources.h" #include "myhtml/utils/mctree.h" diff --git a/source/myhtml/utils/mctree.h b/source/myhtml/utils/mctree.h index c9a9078..635768f 100644 --- a/source/myhtml/utils/mctree.h +++ b/source/myhtml/utils/mctree.h @@ -51,7 +51,8 @@ extern "C" { mctree_node_clean(__mctree__, __mctree__->nodes_length) #define mctree_make_first_idx(__mctree__, __key__, __size__) \ - (((int)(__key__[0]) + (int)(__key__[__size__ - 1])) % __mctree__->start_size) + 1 + ((myhtml_string_chars_lowercase_map[ (const unsigned char)(__key__[0]) ] + myhtml_string_chars_lowercase_map[ (const unsigned char)(__key__[__size__ - 1]) ]) % __mctree__->start_size) + 1 + typedef size_t mctree_index_t; diff --git a/source/myhtml/utils/resources.h b/source/myhtml/utils/resources.h new file mode 100644 index 0000000..ac1224d --- /dev/null +++ b/source/myhtml/utils/resources.h @@ -0,0 +1,174 @@ +/* + Copyright 2015-2016 Alexander Borisov + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Author: lex.borisov@gmail.com (Alexander Borisov) +*/ + +#ifndef MyHTML_UTILS_RESOURCES_H +#define MyHTML_UTILS_RESOURCES_H +#pragma once + +#include <stddef.h> + +static const unsigned char myhtml_string_chars_num_map[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff +}; + +static const unsigned char myhtml_string_chars_hex_map[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0b, + 0x0c, 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff +}; + +static const unsigned char myhtml_string_chars_lowercase_map[] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, + 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, + 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, + 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, + 0x3f, 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, + 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, + 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, + 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, + 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, + 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, + 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, + 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, + 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, + 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, + 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, + 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, + 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, + 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, + 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, + 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, + 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, + 0xfc, 0xfd, 0xfe, 0xff +}; + +static const size_t replacement_character[] = { + 65533, 1, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 8364, 129, 8218, 402, 8222, 8230, 8224, + 8225, 710, 8240, 352, 8249, 338, 141, 381, 143, + 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, + 8482, 353, 8250, 339, 157, 382, 376 +}; + +static const size_t myhtml_string_alphanumeric_character[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0a, + 0x0b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x0d, + 0x0e, 0x0f, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x0a, 0x0b, 0x0c, 0x0d, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff +}; + +#endif /* MyHTML_UTILS_RESOURCES_H */ |