@@ -60,10 +60,14 @@ impl Ord for StyleSelector {
6060
6161impl From < & str > for StyleSelector {
6262 fn from ( value : & str ) -> Self {
63- if value. contains ( ": " ) {
64- let t: Vec < _ > = value. split ( ": " ) . collect ( ) ;
63+ if value. contains ( "& " ) {
64+ let t: Vec < _ > = value. split ( "& " ) . collect ( ) ;
6565 if let Prefix ( v) = t[ 0 ] . into ( ) {
66- Dual ( v, t[ 1 ] . to_string ( ) )
66+ if t[ 1 ] . is_empty ( ) {
67+ Prefix ( v)
68+ } else {
69+ Dual ( v, t[ 1 ] . to_string ( ) )
70+ }
6771 } else {
6872 Postfix ( t[ 1 ] . to_string ( ) )
6973 }
@@ -84,6 +88,8 @@ impl From<&str> for StyleSelector {
8488 ) )
8589 } else if value == "print" {
8690 Media ( "print" . to_string ( ) )
91+ } else if value. ends_with ( " " ) {
92+ Prefix ( value. trim ( ) . to_string ( ) )
8793 } else {
8894 Postfix ( to_kebab_case ( value) )
8995 }
@@ -132,6 +138,7 @@ pub fn merge_selector(class_name: &str, selector: Option<&StyleSelector>) -> Str
132138pub enum SelectorSeparator {
133139 Single ,
134140 Double ,
141+ None ,
135142}
136143impl Display for SelectorSeparator {
137144 fn fmt ( & self , f : & mut Formatter ) -> fmt:: Result {
@@ -141,6 +148,7 @@ impl Display for SelectorSeparator {
141148 match self {
142149 SelectorSeparator :: Single => ":" ,
143150 SelectorSeparator :: Double => "::" ,
151+ SelectorSeparator :: None => "" ,
144152 }
145153 )
146154 }
@@ -166,7 +174,9 @@ static DOUBLE_SEPARATOR: Lazy<HashSet<&str>> = Lazy::new(|| {
166174} ) ;
167175
168176pub fn get_selector_separator ( key : & str ) -> SelectorSeparator {
169- if DOUBLE_SEPARATOR . contains ( key) {
177+ if key. starts_with ( ":" ) || key. is_empty ( ) {
178+ SelectorSeparator :: None
179+ } else if DOUBLE_SEPARATOR . contains ( key) {
170180 SelectorSeparator :: Double
171181 } else {
172182 SelectorSeparator :: Single
@@ -669,7 +679,7 @@ mod tests {
669679 ) ;
670680
671681 assert_eq ! (
672- StyleSelector :: from( "themeDark: placeholder" ) ,
682+ StyleSelector :: from( "themeDark& placeholder" ) ,
673683 Dual (
674684 ":root[data-theme=dark]" . to_string( ) ,
675685 "placeholder" . to_string( )
@@ -683,6 +693,11 @@ mod tests {
683693 StyleSelector :: from( "themeLight" ) ,
684694 Prefix ( ":root[data-theme=light]" . to_string( ) )
685695 ) ;
696+
697+ assert_eq ! (
698+ StyleSelector :: from( "*[aria=disabled='true'] &:hover" ) ,
699+ Dual ( "*[aria=disabled='true']" . to_string( ) , ":hover" . to_string( ) )
700+ ) ;
686701 }
687702
688703 #[ test]
@@ -712,7 +727,7 @@ mod tests {
712727 ) ;
713728
714729 assert_eq ! (
715- merge_selector( "cls" , Some ( & "themeDark: hover" . into( ) ) , ) ,
730+ merge_selector( "cls" , Some ( & "themeDark& hover" . into( ) ) , ) ,
716731 ":root[data-theme=dark] .cls:hover"
717732 ) ;
718733 }
0 commit comments