From 0eb546dfc74080e4cd00772dafb0aa2a46bc4153 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Tue, 1 Aug 2023 16:56:40 +0200 Subject: Add quickmedia_html_node_find_child --- src/HtmlSearch.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'src') diff --git a/src/HtmlSearch.c b/src/HtmlSearch.c index 8449ac9..adf64bd 100644 --- a/src/HtmlSearch.c +++ b/src/HtmlSearch.c @@ -450,6 +450,37 @@ QuickMediaStringView quickmedia_html_node_get_attribute_value(QuickMediaHtmlNode } } +QuickMediaHtmlNode* quickmedia_html_node_find_child(QuickMediaHtmlNode *self, const char *tag_name, const char *attribute_name, const char *attribute_value) { + QuickMediaStringView tag; + tag.data = tag_name; + tag.size = strlen(tag_name); + + QuickMediaStringView attr_name; + attr_name.data = attribute_name; + attr_name.size = strlen(attribute_name); + + QuickMediaStringView attr_value; + attr_value.data = attribute_value; + attr_value.size = strlen(attribute_value); + + for(QuickMediaHtmlChildNode *child = self->first_child; child; child = child->next) { + if(!child->node.is_tag) + continue; + + if(!string_views_equal_case_insensitive(child->node.name, tag)) + continue; + + QuickMediaHtmlAttribute *attr = get_attribute_by_name(child, attr_name); + if(!attr) + continue; + + if(string_views_equal_case_insensitive(attr->value, attr_value)) + return &child->node; + } + + return NULL; +} + static int merge_inner_text(QuickMediaHtmlNode *node, QuickMediaString *str) { if(node->is_tag) { int newline = 0; -- cgit v1.2.3