aboutsummaryrefslogtreecommitdiffstats
path: root/components/style/servo/selector_parser.rs
diff options
context:
space:
mode:
authorSimon Sapin <simon.sapin@exyr.org>2016-11-21 19:11:35 +0100
committerSimon Sapin <simon.sapin@exyr.org>2016-11-22 14:50:21 +0100
commit82b13d50e356ff3fc0eb90b49258be321c7ea795 (patch)
treec7dee14c45289bb2b77a5e046defc0a2031587ad /components/style/servo/selector_parser.rs
parenta89ba50180532bc652db7ff649f252ffdca33177 (diff)
downloadservo-82b13d50e356ff3fc0eb90b49258be321c7ea795.tar.gz
servo-82b13d50e356ff3fc0eb90b49258be321c7ea795.zip
Update to selectors 0.15
Diffstat (limited to 'components/style/servo/selector_parser.rs')
-rw-r--r--components/style/servo/selector_parser.rs59
1 files changed, 35 insertions, 24 deletions
diff --git a/components/style/servo/selector_parser.rs b/components/style/servo/selector_parser.rs
index defdbf3b129..493710debfb 100644
--- a/components/style/servo/selector_parser.rs
+++ b/components/style/servo/selector_parser.rs
@@ -7,10 +7,11 @@ use attr::{AttrIdentifier, AttrValue};
use cssparser::ToCss;
use element_state::ElementState;
use restyle_hints::ElementSnapshot;
-use selector_parser::{ElementExt, PseudoElementCascadeType, TheSelectorImpl};
+use selector_parser::{ElementExt, PseudoElementCascadeType, SelectorParser};
use selector_parser::{attr_equals_selector_is_shareable, attr_exists_selector_is_shareable};
use selectors::{Element, MatchAttrGeneric};
-use selectors::parser::{AttrSelector, ParserContext, SelectorImpl};
+use selectors::parser::AttrSelector;
+use std::borrow::Cow;
use std::fmt;
/// NB: If you add to this list, be sure to update `each_pseudo_element` too.
@@ -150,9 +151,9 @@ impl NonTSPseudoClass {
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
-pub struct ServoSelectorImpl;
+pub struct SelectorImpl;
-impl SelectorImpl for ServoSelectorImpl {
+impl ::selectors::SelectorImpl for SelectorImpl {
type PseudoElement = PseudoElement;
type NonTSPseudoClass = NonTSPseudoClass;
@@ -173,11 +174,14 @@ impl SelectorImpl for ServoSelectorImpl {
value: &Self::AttrValue) -> bool {
attr_equals_selector_is_shareable(attr_selector, value)
}
+}
+
+impl<'a> ::selectors::Parser for SelectorParser<'a> {
+ type Impl = SelectorImpl;
- fn parse_non_ts_pseudo_class(context: &ParserContext<TheSelectorImpl>,
- name: &str) -> Result<NonTSPseudoClass, ()> {
+ fn parse_non_ts_pseudo_class(&self, name: Cow<str>) -> Result<NonTSPseudoClass, ()> {
use self::NonTSPseudoClass::*;
- let pseudo_class = match_ignore_ascii_case! { name,
+ let pseudo_class = match_ignore_ascii_case! { &name,
"any-link" => AnyLink,
"link" => Link,
"visited" => Visited,
@@ -193,7 +197,7 @@ impl SelectorImpl for ServoSelectorImpl {
"placeholder-shown" => PlaceholderShown,
"target" => Target,
"-servo-nonzero-border" => {
- if !context.in_user_agent_stylesheet {
+ if !self.in_user_agent_stylesheet() {
return Err(());
}
ServoNonZeroBorder
@@ -204,63 +208,62 @@ impl SelectorImpl for ServoSelectorImpl {
Ok(pseudo_class)
}
- fn parse_pseudo_element(context: &ParserContext<TheSelectorImpl>,
- name: &str) -> Result<PseudoElement, ()> {
+ fn parse_pseudo_element(&self, name: Cow<str>) -> Result<PseudoElement, ()> {
use self::PseudoElement::*;
- let pseudo_element = match_ignore_ascii_case! { name,
+ let pseudo_element = match_ignore_ascii_case! { &name,
"before" => Before,
"after" => After,
"selection" => Selection,
"-servo-details-summary" => {
- if !context.in_user_agent_stylesheet {
+ if !self.in_user_agent_stylesheet() {
return Err(())
}
DetailsSummary
},
"-servo-details-content" => {
- if !context.in_user_agent_stylesheet {
+ if !self.in_user_agent_stylesheet() {
return Err(())
}
DetailsContent
},
"-servo-input-text" => {
- if !context.in_user_agent_stylesheet {
+ if !self.in_user_agent_stylesheet() {
return Err(())
}
ServoInputText
},
"-servo-table-wrapper" => {
- if !context.in_user_agent_stylesheet {
+ if !self.in_user_agent_stylesheet() {
return Err(())
}
ServoTableWrapper
},
"-servo-anonymous-table-wrapper" => {
- if !context.in_user_agent_stylesheet {
+ if !self.in_user_agent_stylesheet() {
return Err(())
}
ServoAnonymousTableWrapper
},
"-servo-anonymous-table" => {
- if !context.in_user_agent_stylesheet {
+ if !self.in_user_agent_stylesheet() {
return Err(())
}
ServoAnonymousTable
},
"-servo-anonymous-table-row" => {
- if !context.in_user_agent_stylesheet {
+ if !self.in_user_agent_stylesheet() {
return Err(())
}
ServoAnonymousTableRow
},
"-servo-anonymous-table-cell" => {
- if !context.in_user_agent_stylesheet {
+ if !self.in_user_agent_stylesheet() {
return Err(())
}
ServoAnonymousTableCell
},
"-servo-anonymous-block" => {
- if !context.in_user_agent_stylesheet {
+ if !self.in_user_agent_stylesheet() {
return Err(())
}
ServoAnonymousBlock
@@ -270,9 +273,17 @@ impl SelectorImpl for ServoSelectorImpl {
Ok(pseudo_element)
}
+
+ fn default_namespace(&self) -> Option<Namespace> {
+ self.namespaces.default.clone()
+ }
+
+ fn namespace_for_prefix(&self, prefix: &Prefix) -> Option<Namespace> {
+ self.namespaces.prefixes.get(prefix).cloned()
+ }
}
-impl ServoSelectorImpl {
+impl SelectorImpl {
#[inline]
pub fn pseudo_element_cascade_type(pseudo: &PseudoElement) -> PseudoElementCascadeType {
pseudo.cascade_type()
@@ -368,9 +379,9 @@ impl ElementSnapshot for ServoElementSnapshot {
}
impl MatchAttrGeneric for ServoElementSnapshot {
- type Impl = ServoSelectorImpl;
+ type Impl = SelectorImpl;
- fn match_attr<F>(&self, attr: &AttrSelector<ServoSelectorImpl>, test: F) -> bool
+ fn match_attr<F>(&self, attr: &AttrSelector<SelectorImpl>, test: F) -> bool
where F: Fn(&str) -> bool
{
use selectors::parser::NamespaceConstraint;
@@ -383,7 +394,7 @@ impl MatchAttrGeneric for ServoElementSnapshot {
}
}
-impl<E: Element<Impl=TheSelectorImpl>> ElementExt for E {
+impl<E: Element<Impl=SelectorImpl>> ElementExt for E {
fn is_link(&self) -> bool {
self.match_non_ts_pseudo_class(NonTSPseudoClass::AnyLink)
}