3
3
use std:: convert:: TryFrom ;
4
4
use std:: fmt;
5
5
6
- use smallvec:: SmallVec ;
7
-
6
+ pub use cssparser:: ToCss ;
8
7
use html5ever:: { LocalName , Namespace } ;
9
8
use selectors:: {
10
9
matching,
11
- parser:: { self , ParseRelative , SelectorParseErrorKind } ,
10
+ parser:: { self , ParseRelative , SelectorList , SelectorParseErrorKind } ,
12
11
} ;
13
12
14
13
use crate :: error:: SelectorErrorKind ;
@@ -20,18 +19,17 @@ use crate::ElementRef;
20
19
#[ derive( Debug , Clone , PartialEq , Eq ) ]
21
20
pub struct Selector {
22
21
/// The CSS selectors.
23
- selectors : SmallVec < [ parser :: Selector < Simple > ; 1 ] > ,
22
+ selectors : SelectorList < Simple > ,
24
23
}
25
24
26
25
impl Selector {
27
26
/// Parses a CSS selector group.
28
-
29
27
pub fn parse ( selectors : & ' _ str ) -> Result < Self , SelectorErrorKind > {
30
28
let mut parser_input = cssparser:: ParserInput :: new ( selectors) ;
31
29
let mut parser = cssparser:: Parser :: new ( & mut parser_input) ;
32
30
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 } )
35
33
. map_err ( SelectorErrorKind :: from)
36
34
}
37
35
@@ -55,11 +53,21 @@ impl Selector {
55
53
) ;
56
54
context. scope_element = scope. map ( |x| selectors:: Element :: opaque ( & x) ) ;
57
55
self . selectors
56
+ . 0
58
57
. iter ( )
59
58
. any ( |s| matching:: matches_selector ( s, 0 , None , element, & mut context) )
60
59
}
61
60
}
62
61
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
+
63
71
/// An implementation of `Parser` for `selectors`
64
72
struct Parser ;
65
73
impl < ' i > parser:: Parser < ' i > for Parser {
@@ -103,7 +111,7 @@ impl AsRef<str> for CssString {
103
111
}
104
112
}
105
113
106
- impl cssparser :: ToCss for CssString {
114
+ impl ToCss for CssString {
107
115
fn to_css < W > ( & self , dest : & mut W ) -> fmt:: Result
108
116
where
109
117
W : fmt:: Write ,
@@ -122,7 +130,7 @@ impl<'a> From<&'a str> for CssLocalName {
122
130
}
123
131
}
124
132
125
- impl cssparser :: ToCss for CssLocalName {
133
+ impl ToCss for CssLocalName {
126
134
fn to_css < W > ( & self , dest : & mut W ) -> fmt:: Result
127
135
where
128
136
W : fmt:: Write ,
@@ -147,7 +155,7 @@ impl parser::NonTSPseudoClass for NonTSPseudoClass {
147
155
}
148
156
}
149
157
150
- impl cssparser :: ToCss for NonTSPseudoClass {
158
+ impl ToCss for NonTSPseudoClass {
151
159
fn to_css < W > ( & self , dest : & mut W ) -> fmt:: Result
152
160
where
153
161
W : fmt:: Write ,
@@ -164,7 +172,7 @@ impl parser::PseudoElement for PseudoElement {
164
172
type Impl = Simple ;
165
173
}
166
174
167
- impl cssparser :: ToCss for PseudoElement {
175
+ impl ToCss for PseudoElement {
168
176
fn to_css < W > ( & self , dest : & mut W ) -> fmt:: Result
169
177
where
170
178
W : fmt:: Write ,
0 commit comments