33use std:: convert:: TryFrom ;
44use std:: fmt;
55
6- use smallvec:: SmallVec ;
7-
6+ pub use cssparser:: ToCss ;
87use html5ever:: { LocalName , Namespace } ;
98use selectors:: {
109 matching,
11- parser:: { self , ParseRelative , SelectorParseErrorKind } ,
10+ parser:: { self , ParseRelative , SelectorList , SelectorParseErrorKind } ,
1211} ;
1312
1413use crate :: error:: SelectorErrorKind ;
@@ -20,18 +19,17 @@ use crate::ElementRef;
2019#[ derive( Debug , Clone , PartialEq , Eq ) ]
2120pub struct Selector {
2221 /// The CSS selectors.
23- selectors : SmallVec < [ parser :: Selector < Simple > ; 1 ] > ,
22+ selectors : SelectorList < Simple > ,
2423}
2524
2625impl Selector {
2726 /// Parses a CSS selector group.
28-
2927 pub fn parse ( selectors : & ' _ str ) -> Result < Self , SelectorErrorKind > {
3028 let mut parser_input = cssparser:: ParserInput :: new ( selectors) ;
3129 let mut parser = cssparser:: Parser :: new ( & mut parser_input) ;
3230
33- parser :: SelectorList :: parse ( & Parser , & mut parser, ParseRelative :: No )
34- . map ( |list| Selector { selectors : list . 0 } )
31+ SelectorList :: parse ( & Parser , & mut parser, ParseRelative :: No )
32+ . map ( |selectors| Self { selectors } )
3533 . map_err ( SelectorErrorKind :: from)
3634 }
3735
@@ -55,11 +53,21 @@ impl Selector {
5553 ) ;
5654 context. scope_element = scope. map ( |x| selectors:: Element :: opaque ( & x) ) ;
5755 self . selectors
56+ . 0
5857 . iter ( )
5958 . any ( |s| matching:: matches_selector ( s, 0 , None , element, & mut context) )
6059 }
6160}
6261
62+ impl ToCss for Selector {
63+ fn to_css < W > ( & self , dest : & mut W ) -> fmt:: Result
64+ where
65+ W : fmt:: Write ,
66+ {
67+ self . selectors . to_css ( dest)
68+ }
69+ }
70+
6371/// An implementation of `Parser` for `selectors`
6472struct Parser ;
6573impl < ' i > parser:: Parser < ' i > for Parser {
@@ -103,7 +111,7 @@ impl AsRef<str> for CssString {
103111 }
104112}
105113
106- impl cssparser :: ToCss for CssString {
114+ impl ToCss for CssString {
107115 fn to_css < W > ( & self , dest : & mut W ) -> fmt:: Result
108116 where
109117 W : fmt:: Write ,
@@ -122,7 +130,7 @@ impl<'a> From<&'a str> for CssLocalName {
122130 }
123131}
124132
125- impl cssparser :: ToCss for CssLocalName {
133+ impl ToCss for CssLocalName {
126134 fn to_css < W > ( & self , dest : & mut W ) -> fmt:: Result
127135 where
128136 W : fmt:: Write ,
@@ -147,7 +155,7 @@ impl parser::NonTSPseudoClass for NonTSPseudoClass {
147155 }
148156}
149157
150- impl cssparser :: ToCss for NonTSPseudoClass {
158+ impl ToCss for NonTSPseudoClass {
151159 fn to_css < W > ( & self , dest : & mut W ) -> fmt:: Result
152160 where
153161 W : fmt:: Write ,
@@ -164,7 +172,7 @@ impl parser::PseudoElement for PseudoElement {
164172 type Impl = Simple ;
165173}
166174
167- impl cssparser :: ToCss for PseudoElement {
175+ impl ToCss for PseudoElement {
168176 fn to_css < W > ( & self , dest : & mut W ) -> fmt:: Result
169177 where
170178 W : fmt:: Write ,
0 commit comments