From b2fd63ad96469b450eb98a8034073f5a8c1cb95c Mon Sep 17 00:00:00 2001 From: Aleksi Lindeman Date: Sat, 25 May 2019 23:42:40 +0200 Subject: Fix tests etc --- README.md | 2 +- include/quickmedia/HtmlSearch.h | 13 ++++++++++--- src/HtmlSearch.c | 19 +++++-------------- tests/main.c | 4 ++-- 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index a6e5584..7279c0d 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -Html search using xpath, written in C +Html search using non-standard xpath, written in C. See tests/main.c diff --git a/include/quickmedia/HtmlSearch.h b/include/quickmedia/HtmlSearch.h index 09a17e2..b3b2eaa 100644 --- a/include/quickmedia/HtmlSearch.h +++ b/include/quickmedia/HtmlSearch.h @@ -17,11 +17,17 @@ typedef struct { const void *doc; } QuickMediaHtmlSearch; -/* Returns NULL if attribute doesn't exist or if it doesn't have any value */ +/* + 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 StringView where data is NULL and size is 0 if node doesn't have any text */ -QuickMediaStringView quickmedia_html_node_get_text(QuickMediaHtmlNode *self); +/* + 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); @@ -29,6 +35,7 @@ typedef void (*QuickMediaHtmlSearchResultCallback)(QuickMediaHtmlNode *node, voi 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 diff --git a/src/HtmlSearch.c b/src/HtmlSearch.c index dcbb8f2..abb04d6 100644 --- a/src/HtmlSearch.c +++ b/src/HtmlSearch.c @@ -75,28 +75,19 @@ const char* quickmedia_html_node_get_attribute_value(QuickMediaHtmlNode *self, c return tidyAttrValue(attr); } -QuickMediaStringView quickmedia_html_node_get_text(QuickMediaHtmlNode *self) { - QuickMediaStringView string_view; - string_view.data = NULL; - string_view.size = 0; - - if(self->text) { - string_view.data = (const char*)((TidyBuffer*)self->text)->bp; - string_view.size = ((TidyBuffer*)self->text)->size; - return string_view; - } +const char* quickmedia_html_node_get_text(QuickMediaHtmlNode *self) { + if(self->text) + return (const char*)((TidyBuffer*)self->text)->bp; TidyNode child_node = tidyGetChild(self->node); if(tidyNodeGetType(child_node) != TidyNode_Text) - return string_view; + return NULL; self->text = malloc(sizeof(TidyBuffer)); tidyBufInit(self->text); tidyNodeGetText(self->doc, child_node, self->text); - string_view.data = (const char*)((TidyBuffer*)self->text)->bp; - string_view.size = ((TidyBuffer*)self->text)->size; - return string_view; + return (const char*)((TidyBuffer*)self->text)->bp; } static int quickmedia_html_find_nodes(QuickMediaHtmlSearch *self, QuickMediaNodeSearch *search_data, QuickMediaHtmlSearchResultCallback result_callback, void *userdata) { diff --git a/tests/main.c b/tests/main.c index 4d16ad6..7888ea1 100644 --- a/tests/main.c +++ b/tests/main.c @@ -20,8 +20,8 @@ static char* get_file_content(const char *filepath) { static void result_callback(QuickMediaHtmlNode *node, void *userdata) { const char *href = quickmedia_html_node_get_attribute_value(node, "href"); - QuickMediaStringView text = quickmedia_html_node_get_text(node); - printf("a href: %s, node value: %.*s\n", href, text.size, text.data); + const char *text = quickmedia_html_node_get_text(node); + printf("a href: %s, node value: %s\n", href, text); } int main(int argc, char **argv) { -- cgit v1.2.3