diff --git a/Libraries/LibWeb/Parser/HTMLTokenizer.cpp b/Libraries/LibWeb/Parser/HTMLTokenizer.cpp
index eb277e27d36..b0b1bfaab04 100644
--- a/Libraries/LibWeb/Parser/HTMLTokenizer.cpp
+++ b/Libraries/LibWeb/Parser/HTMLTokenizer.cpp
@@ -227,13 +227,11 @@ Optional HTMLTokenizer::next_token()
BEGIN_STATE(MarkupDeclarationOpen)
{
DONT_CONSUME_NEXT_INPUT_CHARACTER;
- if (next_few_characters_are("--")) {
- consume("--");
+ if (consume_next_if_match("--")) {
create_new_token(HTMLToken::Type::Comment);
SWITCH_TO(CommentStart);
}
- if (next_few_characters_are("DOCTYPE")) {
- consume("DOCTYPE");
+ if (consume_next_if_match("DOCTYPE", CaseSensitivity::CaseInsensitive)) {
SWITCH_TO(DOCTYPE);
}
}
@@ -1029,22 +1027,24 @@ Optional HTMLTokenizer::next_token()
}
}
-void HTMLTokenizer::consume(const StringView& string)
-{
- ASSERT(next_few_characters_are(string));
- m_cursor += string.length();
-}
-
-bool HTMLTokenizer::next_few_characters_are(const StringView& string) const
+bool HTMLTokenizer::consume_next_if_match(const StringView& string, CaseSensitivity case_sensitivity)
{
for (size_t i = 0; i < string.length(); ++i) {
auto codepoint = peek_codepoint(i);
if (!codepoint.has_value())
return false;
// FIXME: This should be more Unicode-aware.
+ if (case_sensitivity == CaseSensitivity::CaseInsensitive) {
+ if (codepoint.value() < 0x80) {
+ if (tolower(codepoint.value()) != tolower(string[i]))
+ return false;
+ continue;
+ }
+ }
if (codepoint.value() != (u32)string[i])
return false;
}
+ m_cursor += string.length();
return true;
}
diff --git a/Libraries/LibWeb/Parser/HTMLTokenizer.h b/Libraries/LibWeb/Parser/HTMLTokenizer.h
index 3f6aa4f191f..fe18e9a211c 100644
--- a/Libraries/LibWeb/Parser/HTMLTokenizer.h
+++ b/Libraries/LibWeb/Parser/HTMLTokenizer.h
@@ -132,8 +132,7 @@ public:
private:
Optional next_codepoint();
Optional peek_codepoint(size_t offset) const;
- bool next_few_characters_are(const StringView&) const;
- void consume(const StringView&);
+ bool consume_next_if_match(const StringView&, CaseSensitivity = CaseSensitivity::CaseSensitive);
void create_new_token(HTMLToken::Type);
bool current_end_tag_token_is_appropriate() const;