Make some attr values case-insensitive in selectors

https://bugzilla.mozilla.org/show_bug.cgi?id=1363531
This commit is contained in:
Simon Sapin 2017-05-18 00:27:49 +02:00
parent c5e37f3d2c
commit 94b4a32c18
10 changed files with 167 additions and 30 deletions

View file

@ -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()");
}
}
}
}