mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Make some attr values case-insensitive in selectors
https://bugzilla.mozilla.org/show_bug.cgi?id=1363531
This commit is contained in:
parent
c5e37f3d2c
commit
94b4a32c18
10 changed files with 167 additions and 30 deletions
|
@ -119,13 +119,29 @@ pub static SELECTOR_WHITESPACE: &'static [char] = &[' ', '\t', '\n', '\r', '\x0C
|
|||
pub enum CaseSensitivity {
|
||||
CaseSensitive, // Selectors spec says language-defined, but HTML says sensitive.
|
||||
AsciiCaseInsensitive,
|
||||
AsciiCaseInsensitiveIfInHtmlElementInHtmlDocument,
|
||||
}
|
||||
|
||||
impl CaseSensitivity {
|
||||
pub fn to_definite(self, is_html_element_in_html_document: bool) -> Self {
|
||||
if let CaseSensitivity::AsciiCaseInsensitiveIfInHtmlElementInHtmlDocument = self {
|
||||
if is_html_element_in_html_document {
|
||||
CaseSensitivity::AsciiCaseInsensitive
|
||||
} else {
|
||||
CaseSensitivity::CaseSensitive
|
||||
}
|
||||
} else {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
pub fn eq(self, a: &[u8], b: &[u8]) -> bool {
|
||||
match self {
|
||||
CaseSensitivity::CaseSensitive => a == b,
|
||||
CaseSensitivity::AsciiCaseInsensitive => a.eq_ignore_ascii_case(b)
|
||||
CaseSensitivity::AsciiCaseInsensitive => a.eq_ignore_ascii_case(b),
|
||||
CaseSensitivity::AsciiCaseInsensitiveIfInHtmlElementInHtmlDocument => {
|
||||
unreachable!("matching.rs should have called case_sensitivity.to_definite()");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -152,6 +168,9 @@ impl CaseSensitivity {
|
|||
true
|
||||
}
|
||||
}
|
||||
CaseSensitivity::AsciiCaseInsensitiveIfInHtmlElementInHtmlDocument => {
|
||||
unreachable!("matching.rs should have called case_sensitivity.to_definite()");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue