#ifndef QUICKMEDIA_HTML_SEARCH_H #define QUICKMEDIA_HTML_SEARCH_H #include "NodeSearch.h" #include #include #ifdef __cplusplus extern "C" { #endif typedef struct QuickMediaHtmlAttribute QuickMediaHtmlAttribute; typedef struct QuickMediaHtmlNode QuickMediaHtmlNode; typedef struct QuickMediaHtmlChildNode QuickMediaHtmlChildNode; typedef struct QuickMediaTextNode QuickMediaTextNode; typedef struct { char *data; size_t size; size_t capacity; } QuickMediaString; struct QuickMediaHtmlAttribute { QuickMediaStringView key; QuickMediaStringView value; QuickMediaHtmlAttribute *next; }; struct QuickMediaHtmlNode { int is_tag; /* 0 = text, 1 = tag */ QuickMediaStringView name; /* name if the node is a tag, text if the node is a text */ QuickMediaHtmlAttribute *first_attribute; QuickMediaHtmlAttribute *last_attribute; QuickMediaHtmlChildNode *first_child; QuickMediaHtmlChildNode *last_child; QuickMediaHtmlNode *parent; }; struct QuickMediaHtmlChildNode { QuickMediaHtmlNode node; QuickMediaHtmlChildNode *next; }; typedef struct { QuickMediaHtmlNode *node; QuickMediaString __str; } QuickMediaMatchNode; typedef struct { QuickMediaHtmlNode root_node; } QuickMediaHtmlSearch; /* Returns an empty string view if attribute doesn't exist or if it doesn't have any value. The result is only valid within the callback function scope. */ QuickMediaStringView quickmedia_html_node_get_attribute_value(QuickMediaMatchNode *self, const char *attribute_name); /* Returns an empty string if the node doesn't have any text or if there was an error creating the text. The result is only valid within the callback function scope. */ QuickMediaStringView quickmedia_html_node_get_text(QuickMediaMatchNode *self); /* @node is only valid within the callback function scope. Return 0 to continue */ typedef int (*QuickMediaHtmlSearchResultCallback)(QuickMediaMatchNode *node, void *userdata); /* |html_source| should be in utf8 format and may contain utf8 BOM */ int quickmedia_html_search_init(QuickMediaHtmlSearch *self, const char *html_source, size_t size); void quickmedia_html_search_deinit(QuickMediaHtmlSearch *self); /* Non-standard xpath. Doesn't use '@' symbol for accessing properties. Returns non-0 value if there is a syntax error in the xpath */ int quickmedia_html_find_nodes_xpath(QuickMediaHtmlSearch *self, const char *xpath, QuickMediaHtmlSearchResultCallback result_callback, void *userdata); #ifdef __cplusplus } #endif #endif