aboutsummaryrefslogtreecommitdiffstats
path: root/components/selectors/attr.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/selectors/attr.rs')
-rw-r--r--components/selectors/attr.rs44
1 files changed, 29 insertions, 15 deletions
diff --git a/components/selectors/attr.rs b/components/selectors/attr.rs
index e8ab10ce02f..274081ae9f7 100644
--- a/components/selectors/attr.rs
+++ b/components/selectors/attr.rs
@@ -12,7 +12,7 @@ pub struct AttrSelectorWithNamespace<Impl: SelectorImpl> {
pub namespace: NamespaceConstraint<(Impl::NamespacePrefix, Impl::NamespaceUrl)>,
pub local_name: Impl::LocalName,
pub local_name_lower: Impl::LocalName,
- pub operation: AttrSelectorOperation<Impl::AttrValue>,
+ pub operation: ParsedAttrSelectorOperation<Impl::AttrValue>,
pub never_matches: bool,
}
@@ -36,6 +36,16 @@ pub enum NamespaceConstraint<NamespaceUrl> {
}
#[derive(Eq, PartialEq, Clone)]
+pub enum ParsedAttrSelectorOperation<AttrValue> {
+ Exists,
+ WithValue {
+ operator: AttrSelectorOperator,
+ case_sensitivity: ParsedCaseSensitivity,
+ expected_value: AttrValue,
+ }
+}
+
+#[derive(Eq, PartialEq, Clone)]
pub enum AttrSelectorOperation<AttrValue> {
Exists,
WithValue {
@@ -116,32 +126,39 @@ impl AttrSelectorOperator {
pub static SELECTOR_WHITESPACE: &'static [char] = &[' ', '\t', '\n', '\r', '\x0C'];
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
-pub enum CaseSensitivity {
+pub enum ParsedCaseSensitivity {
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 {
+impl ParsedCaseSensitivity {
+ pub fn to_unconditional(self, is_html_element_in_html_document: bool) -> CaseSensitivity {
+ match self {
+ ParsedCaseSensitivity::AsciiCaseInsensitiveIfInHtmlElementInHtmlDocument
+ if is_html_element_in_html_document => {
CaseSensitivity::AsciiCaseInsensitive
- } else {
+ }
+ ParsedCaseSensitivity::AsciiCaseInsensitiveIfInHtmlElementInHtmlDocument => {
CaseSensitivity::CaseSensitive
}
- } else {
- self
+ ParsedCaseSensitivity::CaseSensitive => CaseSensitivity::CaseSensitive,
+ ParsedCaseSensitivity::AsciiCaseInsensitive => CaseSensitivity::AsciiCaseInsensitive,
}
}
+}
+#[derive(Eq, PartialEq, Clone, Copy, Debug)]
+pub enum CaseSensitivity {
+ CaseSensitive, // Selectors spec says language-defined, but HTML says sensitive.
+ AsciiCaseInsensitive,
+}
+
+impl CaseSensitivity {
pub fn eq(self, a: &[u8], b: &[u8]) -> bool {
match self {
CaseSensitivity::CaseSensitive => a == b,
CaseSensitivity::AsciiCaseInsensitive => a.eq_ignore_ascii_case(b),
- CaseSensitivity::AsciiCaseInsensitiveIfInHtmlElementInHtmlDocument => {
- unreachable!("matching.rs should have called case_sensitivity.to_definite()");
- }
}
}
@@ -168,9 +185,6 @@ impl CaseSensitivity {
true
}
}
- CaseSensitivity::AsciiCaseInsensitiveIfInHtmlElementInHtmlDocument => {
- unreachable!("matching.rs should have called case_sensitivity.to_definite()");
- }
}
}
}