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 @@ + + +CSS Reference + + +
This line should be green
+
This line should be green
+
This line should be green
+
This line should be green
+
This line should be green
+ +

This line should be green and this should be green too

+

This line should be green

This line should NOT be green
+

This line should NOT be green but this should be green

+ +
This line should NOT be green
+
This line should NOT be green
+
This line should NOT be green
+ diff --git a/Tests/LibWeb/Ref/input/wpt-import/css/CSS2/selector/lang-pseudoclass-001.html b/Tests/LibWeb/Ref/input/wpt-import/css/CSS2/selector/lang-pseudoclass-001.html new file mode 100644 index 00000000000..defddc2cbe7 --- /dev/null +++ b/Tests/LibWeb/Ref/input/wpt-import/css/CSS2/selector/lang-pseudoclass-001.html @@ -0,0 +1,36 @@ + + + + CSS Test: :lang pseudoclass + + + + + + + + + + +
This line should be green
+
This line should be green
+
This line should be green
+ +
This line should be green
+
This line should be green
+ +

This line should be green and this should be green too

+

This line should be green

This line should NOT be green
+

This line should NOT be green but this should be green

+ +
This line should NOT be green
+
This line should NOT be green
+
This line should NOT be green
+ + diff --git a/Tests/LibWeb/Ref/input/wpt-import/css/CSS2/selector/lang-pseudoclass-002.xht b/Tests/LibWeb/Ref/input/wpt-import/css/CSS2/selector/lang-pseudoclass-002.xht new file mode 100644 index 00000000000..be18d797198 --- /dev/null +++ b/Tests/LibWeb/Ref/input/wpt-import/css/CSS2/selector/lang-pseudoclass-002.xht @@ -0,0 +1,40 @@ + + + + CSS Test: :lang pseudoclass + + + + + + + + + + +
This line should be green
+
This line should be green
+
This line should be green
+ +
This line should be green
+
This line should be green
+ +

This line should be green and this should be green too

+ +

This line should be green

This line should NOT be green
+

This line should NOT be green but this should be green

+ +
This line should NOT be green
+
This line should NOT be green
+
This line should NOT be green
+ + + + +