diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/HtmlParser.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/include/HtmlParser.h b/include/HtmlParser.h new file mode 100644 index 0000000..72de123 --- /dev/null +++ b/include/HtmlParser.h @@ -0,0 +1,54 @@ +#ifndef HTML_PARSER_H +#define HTML_PARSER_H + +/* + A small html parser with no dependencies and doesn't dynamically allocate any memory + and can parse and repair broken html (just like web browsers) +*/ + +#include <stddef.h> + +typedef struct { + const char *data; + size_t size; +} StringView; + +typedef struct HtmlParser HtmlParser; + +typedef enum{ + HTML_PARSE_TAG_START, + HTML_PARSE_TAG_END, + HTML_PARSE_ATTRIBUTE, + HTML_PARSE_TEXT, + HTML_PARSE_JAVASCRIPT_CODE +} HtmlParseType; + +typedef void (*HtmlParseCallback)(HtmlParser *html_parser, HtmlParseType parse_type, void *userdata); + +#define UNCLOSED_TAGS_SIZE 2048 + +struct HtmlParser { + const char *source; + size_t source_len; + size_t offset; + HtmlParseCallback parse_callback; + void *callback_userdata; + + StringView tag_name; + StringView attribute_key; + StringView attribute_value; + StringView text; + + int is_tag_void; + int inside_script_tag; + + size_t unclosed_tags_offset; + StringView unclosed_tags[UNCLOSED_TAGS_SIZE]; +}; + +void html_parser_init(HtmlParser *self, const char *html_source, size_t len, HtmlParseCallback parse_callback, void *userdata); +void html_parser_deinit(HtmlParser *self); + +void html_parser_parse(HtmlParser *self); + +#endif /* HTML_PARSER_H */
\ No newline at end of file |