#ifndef QUICKMEDIA_HTML_SEARCH_H
#define QUICKMEDIA_HTML_SEARCH_H
#include "NodeSearch.h"
#include
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
char *data;
size_t size;
size_t capacity;
} QuickMediaString;
typedef struct {
const void *doc;
const void *node;
QuickMediaString text;
} QuickMediaHtmlNode;
typedef struct {
const void *doc;
} QuickMediaHtmlSearch;
/*
Returns NULL if attribute doesn't exist or if it doesn't have any value.
The result is only valid within the callback function scope.
*/
const char* quickmedia_html_node_get_attribute_value(QuickMediaHtmlNode *self, const char *attribute_name);
/*
Returns NULL if the node doesn't have any text.
The result is only valid within the callback function scope.
*/
const char* quickmedia_html_node_get_text(QuickMediaHtmlNode *self);
/* @node is only valid within the callback function scope */
typedef void (*QuickMediaHtmlSearchResultCallback)(QuickMediaHtmlNode *node, void *userdata);
int quickmedia_html_search_init(QuickMediaHtmlSearch *self, const char *html_source);
void quickmedia_html_search_deinit(QuickMediaHtmlSearch *self);
/* Non-standard xpath. Doesn't use '@' symbol for accessing properties */
int quickmedia_html_find_nodes_xpath(QuickMediaHtmlSearch *self, const char *xpath, QuickMediaHtmlSearchResultCallback result_callback, void *userdata);
#ifdef __cplusplus
}
#endif
#endif