mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-25 04:22:50 +00:00
LibWeb: Ensure lang
pseudoclass matches multiple segment subcodes
This commit is contained in:
parent
74c803c87b
commit
04fde1c550
Notes:
github-actions[bot]
2025-04-28 10:30:44 +00:00
Author: https://github.com/tcl3
Commit: 04fde1c550
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4495
Reviewed-by: https://github.com/AtkinsSJ ✅
4 changed files with 109 additions and 5 deletions
|
@ -68,11 +68,15 @@ static inline bool matches_lang_pseudo_class(DOM::Element const& element, Vector
|
||||||
continue;
|
continue;
|
||||||
if (language == "*"sv)
|
if (language == "*"sv)
|
||||||
return true;
|
return true;
|
||||||
if (!element_language.contains('-') && Infra::is_ascii_case_insensitive_match(element_language, language))
|
auto element_language_length = element_language.bytes_as_string_view().length();
|
||||||
return true;
|
auto language_length = language.bytes_as_string_view().length();
|
||||||
auto parts = element_language.split_limit('-', 2).release_value_but_fixme_should_propagate_errors();
|
if (element_language_length == language_length) {
|
||||||
if (!parts.is_empty() && Infra::is_ascii_case_insensitive_match(parts[0], language))
|
if (Infra::is_ascii_case_insensitive_match(element_language, language))
|
||||||
return true;
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Reference</title>
|
||||||
|
<style>
|
||||||
|
.green {
|
||||||
|
background-color: green;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<div class="green">This line should be green</div>
|
||||||
|
<div class="green">This line should be green</div>
|
||||||
|
<div class="green">This line should be green</div>
|
||||||
|
<div class="green">This line should be green</div>
|
||||||
|
<div class="green">This line should be green</div>
|
||||||
|
|
||||||
|
<p class="green">This line should be green <em>and this should be green too</em></p>
|
||||||
|
<div><p class="green">This line should be green</p>This line should NOT be green</div>
|
||||||
|
<p>This line should NOT be green <em class="green">but this should be green</em></p>
|
||||||
|
|
||||||
|
<div>This line should NOT be green</div>
|
||||||
|
<div>This line should NOT be green</div>
|
||||||
|
<div>This line should NOT be green</div>
|
||||||
|
</body>
|
|
@ -0,0 +1,36 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>CSS Test: :lang pseudoclass</title>
|
||||||
|
<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org">
|
||||||
|
<link rel="author" title="Eira Monstad, Opera Software ASA" href="mailto:public-testsuites@opera.com">
|
||||||
|
<link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#lang">
|
||||||
|
<link rel="match" href="../../../../../expected/wpt-import/css/CSS2/selector/lang-pseudoclass-001-ref.html" />
|
||||||
|
<meta name="flags" content="HTMLonly" >
|
||||||
|
<meta name="assert" content=":lang pseudoclass in HTML should not be case-sensitive, and match a substring">
|
||||||
|
<style type="text/css">
|
||||||
|
div:lang(es) { color:white;background-color:green; }
|
||||||
|
p:lang(es) { color:white;background-color:green; }
|
||||||
|
p:lang(fr) { color:white;background-color:green; }
|
||||||
|
em:lang(de) { color:white;background-color:green; }
|
||||||
|
div:lang(en-GB) { color:white;background-color:green; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div lang="es">This line should be green</div>
|
||||||
|
<div lang="es-MX">This line should be green</div>
|
||||||
|
<div lang="ES">This line should be green</div>
|
||||||
|
|
||||||
|
<div lang="en-GB">This line should be green</div>
|
||||||
|
<div lang="en-GB-scouse">This line should be green</div>
|
||||||
|
|
||||||
|
<p lang="es">This line should be green <em>and this should be green too</em></p>
|
||||||
|
<div lang="fr"><p>This line should be green</p>This line should NOT be green</div>
|
||||||
|
<p lang="de">This line should NOT be green <em>but this should be green</em></p>
|
||||||
|
|
||||||
|
<div lang="MX-es">This line should NOT be green</div>
|
||||||
|
<div lang="en-US">This line should NOT be green</div>
|
||||||
|
<div lang="en">This line should NOT be green</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,40 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>CSS Test: :lang pseudoclass</title>
|
||||||
|
<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org"/>
|
||||||
|
<link rel="author" title="Eira Monstad, Opera Software ASA" href="mailto:public-testsuites@opera.com"/>
|
||||||
|
<link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#lang"/>
|
||||||
|
<link rel="match" href="../../../../../expected/wpt-import/css/CSS2/selector/lang-pseudoclass-001-ref.html" />
|
||||||
|
<meta name="flags" content="nonHTML" />
|
||||||
|
<meta name="assert" content=":lang pseudoclass in XHTML should be case sensitive, and match a substring"/>
|
||||||
|
<style type="text/css"><![CDATA[
|
||||||
|
div:lang(es) { color:white;background-color:green; }
|
||||||
|
p:lang(es) { color:white;background-color:green; }
|
||||||
|
p:lang(fr) { color:white;background-color:green; }
|
||||||
|
em:lang(de) { color:white;background-color:green; }
|
||||||
|
div:lang(en-GB) { color:white;background-color:green; }
|
||||||
|
]]></style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div xml:lang="es">This line should be green</div>
|
||||||
|
<div xml:lang="es-MX">This line should be green</div>
|
||||||
|
<div xml:lang="ES">This line should be green</div>
|
||||||
|
|
||||||
|
<div xml:lang="en-GB">This line should be green</div>
|
||||||
|
<div xml:lang="en-GB-scouse">This line should be green</div>
|
||||||
|
|
||||||
|
<p xml:lang="es">This line should be green <em>and this should be green too</em></p>
|
||||||
|
|
||||||
|
<div xml:lang="fr"><p>This line should be green</p>This line should NOT be green</div>
|
||||||
|
<p xml:lang="de">This line should NOT be green <em>but this should be green</em></p>
|
||||||
|
|
||||||
|
<div xml:lang="en-US">This line should NOT be green</div>
|
||||||
|
<div xml:lang="en">This line should NOT be green</div>
|
||||||
|
<div xml:lang="MX-es">This line should NOT be green</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Add table
Add a link
Reference in a new issue