diff options
author | Linus Groh <mail@linusgroh.de> | 2022-02-15 18:52:45 +0000 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-02-15 23:24:34 +0100 |
commit | 892f6394b8bc3e44e3f4003d2568da74ad880e28 (patch) | |
tree | e829831ba400baa7a4cb3b983eb2b5d990136ada /Userland/Libraries/LibWeb/HTML/Parser | |
parent | 3f7086f91a8510d2aedc45d9f3b5525bba673b3e (diff) | |
download | serenity-892f6394b8bc3e44e3f4003d2568da74ad880e28.zip |
LibWeb: Implement state switch for "[CDATA[" in HTML parser
Diffstat (limited to 'Userland/Libraries/LibWeb/HTML/Parser')
-rw-r--r-- | Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.h | 2 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.cpp | 13 |
2 files changed, 14 insertions, 1 deletions
diff --git a/Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.h b/Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.h index 683ea61dda..f8803dc801 100644 --- a/Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.h +++ b/Userland/Libraries/LibWeb/HTML/Parser/HTMLParser.h @@ -42,6 +42,8 @@ namespace Web::HTML { RefPtr<DOM::Document> parse_html_document(StringView, const AK::URL&, const String& encoding); class HTMLParser { + friend class HTMLTokenizer; + public: HTMLParser(DOM::Document&, StringView input, const String& encoding); ~HTMLParser(); diff --git a/Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.cpp b/Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.cpp index 63c996a2d6..37be0a014d 100644 --- a/Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.cpp +++ b/Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2020, Andreas Kling <kling@serenityos.org> + * Copyright (c) 2022, Linus Groh <linusg@serenityos.org> * * SPDX-License-Identifier: BSD-2-Clause */ @@ -9,8 +10,10 @@ #include <AK/SourceLocation.h> #include <LibTextCodec/Decoder.h> #include <LibWeb/HTML/Parser/Entities.h> +#include <LibWeb/HTML/Parser/HTMLParser.h> #include <LibWeb/HTML/Parser/HTMLToken.h> #include <LibWeb/HTML/Parser/HTMLTokenizer.h> +#include <LibWeb/Namespace.h> #include <string.h> namespace Web::HTML { @@ -394,7 +397,15 @@ _StartOfFunction: SWITCH_TO(DOCTYPE); } if (consume_next_if_match("[CDATA[")) { - TODO(); + // We keep the parser optional so that syntax highlighting can be lexer-only. + // The parser registers itself with the lexer it creates. + if (m_parser != nullptr && m_parser->adjusted_current_node().namespace_() != Namespace::HTML) { + SWITCH_TO(CDATASection); + } else { + create_new_token(HTMLToken::Type::Comment); + m_current_builder.append("[CDATA["); + SWITCH_TO_WITH_UNCLEAN_BUILDER(BogusComment); + } } ANYTHING_ELSE { |