css-parser-0.0.1: src/CssParser/Rule.hs
module CssParser.Rule where
import CssParser.At.Container ( ContainerQueryMap )
import CssParser.At.CustomMedia ( CustomMediaQuery )
import CssParser.At.FontFeatureValues ( FontFeatureValues )
import CssParser.At.FontPaletteValues ( FontPaletteValues )
import CssParser.At.Function ( Function )
import CssParser.At.Import ( Import )
import CssParser.At.Keyframe ( KeyframeSet, PropEntry )
import CssParser.At.MediaQuery ( MediaQueryList )
import CssParser.At.Page ( PageMargin, PageSelectorList )
import CssParser.At.Supports qualified as S
import CssParser.Descriptor (Descriptor)
import CssParser.Ident
import CssParser.MonoPair ( MonoPair )
import CssParser.Parser.Monad ( P(Failed) )
import CssParser.Prelude
import CssParser.Rule.Pseudo
( AtomicPseudoClass(UnknownPc),
BrowserSpecificIdent(BrowserSpecificIdent),
PseudoElement,
Language )
import CssParser.Rule.Value
( CommaSeparatedList,
PropVals,
PropValsList,
Source,
Unsigned,
NthFormula )
import CssParser.Show ( toCssStr, CslNe, Embraced, SslNe )
type SelectorList = NonEmpty Selector
type FeatureQuery = S.FeatureQuery SelectorList
data CssRule
= CssRule SelectorList [CssRuleBodyItem]
| AtRule BrowserPrefix AtRule
deriving (Show, Ord, Eq, Generic)
data AtRule
= CharsetStmt Charset
| ColorProfile PropertyName [CssRuleBodyItem]
| Container ContainerQueryMap [CssRuleBodyItem]
| CounterStyle Ident [CssRuleBodyItem]
| CustomMedia Var CustomMediaQuery
| FontFaceBlock [CssRuleBodyItem]
| FontFeatureValuesBlock FontFeatureValues
| FontPaletteValuesBlock FontPaletteValues
| FunctionBlock CssFunction
| ImportStmt (Import SelectorList)
| Keyframes KeyframeSet
| LayerBlock (Maybe LayerName) [CssRuleBodyItem]
| LayerStmt (NonEmpty LayerName)
| MediaRule MediaQueryList [CssRuleBodyItem]
| Mixin Ident
| CustomSelector CustomSelectorName SelectorList
| DefineMixin Ident [CssRuleBodyItem]
| Namespace (Maybe Ident) Source
| Page PageSelectorList [CssRuleBodyItem]
| PageMarginBlock PageMargin [CssRuleBodyItem]
| PositionTry Var [PropEntry]
| Property Var [CssRuleBodyItem]
| ScopeBlock (MonoPair SelectorList) [CssRuleBodyItem]
| StartingStyle [CssRuleBodyItem]
| Supports FeatureQuery [CssRuleBodyItem]
| UnknownGramma Ident (Maybe CommaSeparatedList) [CssRuleBodyItem]
| ViewTransition [CssRuleBodyItem]
deriving (Show, Ord, Eq, Generic)
type CssFunction = Function CssRule
data Selector
= Selector (Maybe TagRelation) TagSelector [(TagRelation, TagSelector)]
| PeSelector (Maybe TagRelation) TagSelector [(TagRelation, TagSelector)] PseudeTagSelector
| PeSelectorOnly PseudeTagSelector
deriving (Eq, Ord, Show, Generic)
instance GEnum Selector where
genum = []
data PseudeTagSelector
= PseudeTagSelector
{ ptagName :: CompositePe
, ptagSubs :: [TagSubSelector]
} deriving (Eq, Ord, Show, Generic)
data CompositePe
= AtomicPe PseudoElement
| Highlight (Embraced Ident)
| Part (Embraced (SslNe Ident))
| Picker (Embraced Ident)
| ScrollButton (Embraced TagName)
| Slotted (Embraced SelectorList)
| ViewTransitionGroup (Embraced SelectorList)
| ViewTransitionImagePair (Embraced SelectorList)
| ViewTransitionNew (Embraced SelectorList)
| ViewTransitionOld (Embraced SelectorList)
deriving (Eq, Ord, Show, Generic)
data TagRelation
= Descendant
| Child
| NextSibling
| GeneralSibling
deriving (Bounded, Enum, Eq, Ord, Show, Generic)
data TagSelector
= TagSelector
{ tagNs :: Namespace
, tagName :: TagName
, tagSubSelectors :: [ TagSubSelector ]
} deriving (Show, Ord, Eq, Generic)
mkUnknownPseudoF :: AtomicPseudoClass -> SelectorList -> P TagSubSelector
mkUnknownPseudoF pc sel =
case pc of
UnknownPc (BrowserSpecificIdent i) ->
pure $ UnknownPseudoF i sel
o -> Failed $ "Expected unknown pseudo class but got " <> toCssStr o
data TagSubSelector
= AtomicClass { unClass :: Ident }
| AtomicPseudoClass AtomicPseudoClass
| UnknownPseudoF Ident SelectorList
| NotClass SelectorList
| Lang Language
| Global SelectorList
| Where SelectorList
| Has SelectorList
| Is SelectorList
| NthChild NthFormula (Maybe TagSelector)
| NthLastChild NthFormula (Maybe TagSelector)
| NthLastOfType NthFormula
| NthOfType NthFormula
| ActiveViewTransitionType (Embraced (CslNe Ident))
| Dir (Embraced Ident)
| Heading (Embraced (CslNe Unsigned))
| Host (Embraced SelectorList)
| State (Embraced Ident)
| HasAttr AttrName
| Attr AttrName AttrOp (Maybe AtrPat)
| Hash Ident
deriving (Eq, Ord, Show, Generic)
data CssRuleBodyItem
= CssLeafRule Descriptor PropVals
| CssEnumLeaf Descriptor PropValsList
| CssNestedRule CssRule
deriving (Show, Ord, Eq, Generic)
data AtrPat
= StrAtrPat Text (Maybe CaseSensetivity)
| IdtAtrPat Ident (Maybe CaseSensetivity)
deriving (Show, Eq, Ord, Generic)
data AttrOp =
Exact -- ^ exactly the value of the value, denoted with @=@
| Include -- ^ whitespace separated list of items, one of these items is the value, denoted with @~=@
| DashMatch -- ^ hyphen separated list of items, the first item is the value, denoted with @|=@
| PrefixMatch -- ^ prefix of the value in the attribute, denoted with @^=@
| SuffixMatch -- ^ suffix of the value in the attribute, denoted with @$=@
| SubstringMatch -- ^ substring of the value in the attribute, denoted with @*=@
deriving (Bounded, Enum, Eq, Ord, Show, Generic)