@@ -36,7 +36,7 @@ import CssParser.Lexer
3636 , TOpen , TClose
3737 , Greater , Less , LessEqual , GreaterEqual
3838 , RatioT , Percents , Pixels
39- , UrlT , TWhere
39+ , UrlT , TWhere , THas , TIs
4040 , PseudoPageT , PageT , PageMarginT
4141 , KeyframesT , ColorProfileT , FontFaceT , SrcPropT , UnicodeRangeT , UnicodeRangeVal
4242 , FontFeatureValuesT , AtT , FontPaletteValuesT , ContainerT , DivT , PositionTryT
@@ -152,8 +152,10 @@ import Prelude
152152 px { TokenLoc (Pixels $$ ) _ _ }
153153 var { TokenLoc (Var $$ ) _ _ }
154154 nth { TokenLoc (TNth $$ ) _ _ }
155- 'not( ' { TokenLoc TNot _ _ }
155+ ': not' { TokenLoc TNot _ _ }
156156 where { TokenLoc TWhere _ _ }
157+ is { TokenLoc TIs _ _ }
158+ has { TokenLoc THas _ _ }
157159 'lang(' { TokenLoc TLang _ _ }
158160 ' (' { TokenLoc TOpen _ _ }
159161 ' )' { TokenLoc TClose _ _ }
@@ -440,12 +442,15 @@ CssRuleBody :: { [ CssRuleBodyItem ] }
440442 | IdKwd pseudc ContinueRule CssRuleBody { upsertHeadTagSelector
441443 (setTag $ 1 . addClass (AtomicPseudoClass $ 2 )) $ 3 $ 4 }
442444 | IdKwd pseudc ERB CssRuleBody { newRule (addClass (AtomicPseudoClass $ 2 ) . setTag $ 1 ) $ 3 $ 4 }
443- | IdKwd 'not(' SelectorList ' )' ContinueRule CssRuleBody
444- { upsertHeadTagSelector (setTag $ 1 . addClass (NotClass $ 3 )) $ 5 $ 6 }
445- | IdKwd 'not(' SelectorList ' )' ERB CssRuleBody
446- { newRule (setTag $ 1 . addClass (NotClass $ 3 )) $ 5 $ 6 }
445+ | IdKwd ': not' ESL ContinueRule CssRuleBody { upsertHeadTagSelector (setTag $ 1 . addClass (NotClass $ 3 )) $ 4 $ 5 }
446+ | IdKwd ': not' ESL ERB CssRuleBody { newRule (setTag $ 1 . addClass (NotClass $ 3 )) $ 4 $ 5 }
447447 | IdKwd where ESL ContinueRule CssRuleBody { upsertHeadTagSelector (setTag $ 1 . addClass (Where $ 3 )) $ 4 $ 5 }
448448 | IdKwd where ESL ERB CssRuleBody { newRule (setTag $ 1 . addClass (Where $ 3 )) $ 4 $ 5 }
449+ | IdKwd is ESL ContinueRule CssRuleBody { upsertHeadTagSelector (setTag $ 1 . addClass (Is $ 3 )) $ 4 $ 5 }
450+ | IdKwd is ESL ERB CssRuleBody { newRule (setTag $ 1 . addClass (Is $ 3 )) $ 4 $ 5 }
451+ | IdKwd has ESL ContinueRule CssRuleBody { upsertHeadTagSelector (setTag $ 1 . addClass (Has $ 3 )) $ 4 $ 5 }
452+ | IdKwd has ESL ERB CssRuleBody { newRule (setTag $ 1 . addClass (Has $ 3 )) $ 4 $ 5 }
453+
449454 | IdKwd 'lang(' Str ' )' ContinueRule CssRuleBody
450455 { upsertHeadTagSelector (setTag $ 1 . addClass (Lang (Language $ 3 ))) $ 5 $ 6 }
451456 | IdKwd 'lang(' Str ' )' ERB CssRuleBody { newRule (setTag $ 1 . addClass (Lang (Language $ 3 ))) $ 5 $ 6 }
@@ -501,9 +506,11 @@ TagClasses :: { [ Class ] }
501506TagClass :: { Class }
502507 : ' .' Ident { AtomicClass $ 2 }
503508 | pseudc { AtomicPseudoClass $ 1 }
504- | 'not(' SelectorList ' ) ' { NotClass $ 2 }
505- | 'lang(' string ' )' { Lang (Language (pack $ 2 ) ) }
509+ | ': not' ESL { NotClass $ 2 }
510+ | 'lang(' Str ' )' { Lang (Language $ 2 ) }
506511 | where ESL { Where $ 2 }
512+ | is ESL { Is $ 2 }
513+ | has ESL { Has $ 2 }
507514 | pseudf Os Nth { call $ 1 $ 3 }
508515ZipTagRelAndTagSel :: { [ (TagRelation , TagSelector ) ] }
509516 : { [] }
0 commit comments