From f35e2122ede3595def9158d0b231a1868b7ad200 Mon Sep 17 00:00:00 2001 From: Tomasz Sowa Date: Wed, 17 Apr 2024 10:39:06 +0200 Subject: [PATCH] (HtmlParser): rename ItemParsedListener to Listener while here: - add a new callback method: bool should_remove(Item &) --- src/html/htmlparser.cpp | 30 +++++++++++------------------- src/html/htmlparser.h | 15 ++++++++------- 2 files changed, 19 insertions(+), 26 deletions(-) diff --git a/src/html/htmlparser.cpp b/src/html/htmlparser.cpp index d08f09b..8fb5273 100644 --- a/src/html/htmlparser.cpp +++ b/src/html/htmlparser.cpp @@ -104,9 +104,9 @@ void HTMLParser::parse_html(const wchar_t * in, Space & space, bool compact_mode } -void HTMLParser::set_item_parsed_listener(ItemParsedListener * listener) +void HTMLParser::set_item_parsed_listener(Listener * listener) { - item_parsed_listener = listener; + this->listener = listener; } @@ -393,7 +393,7 @@ void HTMLParser::SetSomeDefaults() skip_commentaries = false; skip_entities = false; analyze_entities = false; - item_parsed_listener = nullptr; + listener = nullptr; } @@ -2121,11 +2121,7 @@ void HTMLParser::CheckClosingTags() for(int z=(int)stack_len-2 ; z >= i ; --z) { - if( RemoveIfNeeded(z) ) - { - RemoveLastSpace(z); - } - + CallListener(z); // space from the item can be set as null here (when a should_remove() callback returned true) CheckWhiteCharsExceptions(pstack[z]); if( !skip_tags && IsTagSafe(LastItem().name) && !IsNameEqual(no_filter_tag, LastItem().name) ) @@ -2343,23 +2339,20 @@ void HTMLParser::AddTextSpaceToSpaceTree(const Space & space) } - - -bool HTMLParser::RemoveIfNeeded(size_t index) +void HTMLParser::CallListener(size_t index) { - if( item_parsed_listener ) + if( listener ) { - if( !item_parsed_listener->item_parsed(pstack[index]) ) + listener->item_parsed(pstack[index]); + + if( listener->should_remove(pstack[index]) ) { - return true; + RemoveLastSpace(index); } } - - return false; } - void HTMLParser::ReadLoop() { while( status == ok && ReadItem() ) @@ -2392,8 +2385,7 @@ void HTMLParser::ReadLoop() { if( stack_len > 0 ) { - if( RemoveIfNeeded(stack_len - 1) ) - RemoveLastSpace(stack_len - 1); + CallListener(stack_len - 1); } PopStack(); diff --git a/src/html/htmlparser.h b/src/html/htmlparser.h index 2f80e84..090fc31 100644 --- a/src/html/htmlparser.h +++ b/src/html/htmlparser.h @@ -160,14 +160,15 @@ public: }; - class ItemParsedListener + class Listener { public: - ItemParsedListener() {} + Listener() {} - virtual bool item_parsed(const Item & item) { return true; } - virtual ~ItemParsedListener() {} + virtual void item_parsed(const Item & item) { } + virtual bool should_remove(const Item & item) { return false; } + virtual ~Listener() {} }; @@ -182,7 +183,7 @@ public: HTMLParser & operator=(const HTMLParser & f); virtual ~HTMLParser(); - void set_item_parsed_listener(ItemParsedListener * listener); + void set_item_parsed_listener(Listener * listener); void parse_html(const wchar_t * in, Space & space, bool compact_mode = false); @@ -304,7 +305,7 @@ protected: // html tag name std::wstring no_filter_tag; - ItemParsedListener * item_parsed_listener; + Listener * listener; /* true if the lastc was escaped (with a backslash) @@ -445,7 +446,7 @@ protected: void RemoveLastSpace(size_t index); void AddTextSpaceToSpaceTree(const Space & space); - bool RemoveIfNeeded(size_t index); + void CallListener(size_t index); bool check_escape_sequentions(); void read_xml_entity();