From 3f7086f91a8510d2aedc45d9f3b5525bba673b3e Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Tue, 15 Feb 2022 18:45:10 +0000 Subject: [PATCH] LibWeb: Add an optional pointer to an HTMLParser to the HTMLTokenizer This is needed to access the 'adjusted current node' in the 'Markup declaration open state'. We don't want to create a full parser for something like syntax highlighting, so it's optional (null) by default. --- Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp | 1 + Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.h | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp b/Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp index b38af2245d..18e1c95b28 100644 --- a/Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp +++ b/Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.cpp @@ -130,6 +130,7 @@ HTMLParser::HTMLParser(DOM::Document& document, StringView input, const String& : m_tokenizer(input, encoding) , m_document(document) { + m_tokenizer.set_parser({}, *this); m_document->set_should_invalidate_styles_on_attribute_changes(false); auto standardized_encoding = TextCodec::get_standardized_encoding(encoding); VERIFY(standardized_encoding.has_value()); diff --git a/Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.h b/Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.h index 23c14cba6e..dd1dc76c85 100644 --- a/Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.h +++ b/Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2020, Andreas Kling + * Copyright (c) 2022, Linus Groh * * SPDX-License-Identifier: BSD-2-Clause */ @@ -110,6 +111,8 @@ public: Optional next_token(); + void set_parser(Badge, HTMLParser& parser) { m_parser = &parser; } + void switch_to(Badge, State new_state); void switch_to(State new_state) { @@ -151,6 +154,8 @@ private: void restore_to(Utf8CodePointIterator const& new_iterator); HTMLToken::Position nth_last_position(size_t n = 0); + HTMLParser* m_parser { nullptr }; + State m_state { State::Data }; State m_return_state { State::Data };