LibWeb: Ensure lang pseudoclass matches multiple segment subcodes

This commit is contained in:
Tim Ledbetter 2025-04-27 13:46:04 +01:00 committed by Sam Atkins
parent 74c803c87b
commit 04fde1c550
Notes: github-actions[bot] 2025-04-28 10:30:44 +00:00
4 changed files with 109 additions and 5 deletions

View file

@ -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;
}