summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb/HTML/Parser
diff options
context:
space:
mode:
authorLinus Groh <mail@linusgroh.de>2022-02-15 18:52:45 +0000
committerAndreas Kling <kling@serenityos.org>2022-02-15 23:24:34 +0100
commit892f6394b8bc3e44e3f4003d2568da74ad880e28 (patch)
treee829831ba400baa7a4cb3b983eb2b5d990136ada /Userland/Libraries/LibWeb/HTML/Parser
parent3f7086f91a8510d2aedc45d9f3b5525bba673b3e (diff)
downloadserenity-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.h2
-rw-r--r--Userland/Libraries/LibWeb/HTML/Parser/HTMLTokenizer.cpp13
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
{