From b8d9139bb1ecae56f4e5454f3e9fdcdf7230d8c3 Mon Sep 17 00:00:00 2001 From: Relintai Date: Sat, 20 Aug 2022 22:28:08 +0200 Subject: [PATCH] HTMLParser now properly parses doctype in a case insensitive way. Also improved an error message a bit. --- modules/web/html/html_parser.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/modules/web/html/html_parser.cpp b/modules/web/html/html_parser.cpp index 28afab042..65ab2b8f3 100644 --- a/modules/web/html/html_parser.cpp +++ b/modules/web/html/html_parser.cpp @@ -1,8 +1,8 @@ #include "html_parser.h" -#include "core/object/class_db.h" #include "core/error/error_macros.h" #include "core/log/logger.h" +#include "core/object/class_db.h" String HTMLParserAttribute::get_attribute() { return _attribute; @@ -314,15 +314,13 @@ void HTMLParserTag::process() { } // test for doctype. - int doctype_start_index = _data.find("doctype ", 2); - - if (doctype_start_index == -1) { + if (_data.substr(2, 8).to_lower() != "doctype ") { return; } _type = HTMLParserTag::HTML_PARSER_TAG_TYPE_DOCTYPE; - _tag = _data.substr(doctype_start_index + 8, _data.length() - doctype_start_index - 8 - 1); + _tag = _data.substr(2 + 8, _data.length() - 2 - 8 - 1); } else { String tag_text; @@ -529,6 +527,7 @@ String HTMLParserTag::convert_to_string(const int level) const { } } } else if (_type == HTML_PARSER_TAG_TYPE_NONE) { + s += _data + "\n"; for (int i = 0; i < _tags.size(); ++i) { s += _tags[i]->convert_to_string(level) + "\n"; s += String(" ").repeat(level); @@ -737,7 +736,9 @@ void HTMLParser::parse(const String &data) { ERR_CONTINUE(!t.is_valid()); if (t->get_type() == HTMLParserTag::HTML_PARSER_TAG_TYPE_NONE) { - ERR_PRINT("HTMLParser::parse: t->type == HTMLParserTag::HTML_PARSER_TAG_TYPE_NONE!"); + ERR_PRINT("HTMLParser::parse: t->type == HTMLParserTag::HTML_PARSER_TAG_TYPE_NONE! Tag content:"); + ERR_PRINT(tags[i]->convert_to_string()); + //memdelete(t); tags.write[i].unref(); continue;