diff --git a/Libraries/LibWeb/CSS/SelectorEngine.cpp b/Libraries/LibWeb/CSS/SelectorEngine.cpp index b11887ba98a..cdc7a5ea3f2 100644 --- a/Libraries/LibWeb/CSS/SelectorEngine.cpp +++ b/Libraries/LibWeb/CSS/SelectorEngine.cpp @@ -68,11 +68,15 @@ static inline bool matches_lang_pseudo_class(DOM::Element const& element, Vector continue; if (language == "*"sv) return true; - if (!element_language.contains('-') && Infra::is_ascii_case_insensitive_match(element_language, language)) - return true; - auto parts = element_language.split_limit('-', 2).release_value_but_fixme_should_propagate_errors(); - if (!parts.is_empty() && Infra::is_ascii_case_insensitive_match(parts[0], language)) - return true; + auto element_language_length = element_language.bytes_as_string_view().length(); + auto language_length = language.bytes_as_string_view().length(); + if (element_language_length == language_length) { + if (Infra::is_ascii_case_insensitive_match(element_language, language)) + return true; + } else if (element_language_length > language_length) { + if (element_language.starts_with_bytes(language, CaseSensitivity::CaseInsensitive) && element_language.bytes_as_string_view()[language_length] == '-') + return true; + } } return false; } diff --git a/Tests/LibWeb/Ref/expected/wpt-import/css/CSS2/selector/lang-pseudoclass-001-ref.html b/Tests/LibWeb/Ref/expected/wpt-import/css/CSS2/selector/lang-pseudoclass-001-ref.html new file mode 100644 index 00000000000..ac83e80d955 --- /dev/null +++ b/Tests/LibWeb/Ref/expected/wpt-import/css/CSS2/selector/lang-pseudoclass-001-ref.html @@ -0,0 +1,24 @@ + + +
This line should be green and this should be green too
+This line should be green
This line should NOT be greenThis line should NOT be green but this should be green
+ +This line should be green and this should be green too
+This line should be green
This line should NOT be greenThis line should NOT be green but this should be green
+ +This line should be green and this should be green too
+ +This line should be green
This line should NOT be greenThis line should NOT be green but this should be green
+ +