-- | Css2.1 syntax -- -- haskell translation of css 2.1 grammar. -- -- See and module Language.Css.Syntax ( -- * Stylesheet StyleSheet(..), StyleBody(..), -- * AtRule AtCharSet(..), AtImport(..), ImportHead(..), AtMedia(..), AtPage(..), PseudoPage, AtFontFace(..), -- * RuleSet RuleSet(..), Decl(..), Prop, Prio(..), Expr(..), -- * Selectors Sel(..), SimpleSel(..), SubSel(..), Element, Attr(..), Class, Id, AttrIdent, AttrVal, PseudoVal(..), -- * Values Value(..), -- * Primitives Ident(..), Func(..), Deg(..), Rad(..), Grad(..), Color(..), Hz(..), KHz(..), Em(..), Ex(..), Px(..), In(..), Cm(..), Mm(..), Pc(..), Pt(..), Percentage(..), Ms(..), S(..), Uri(..) ) where import Text.PrettyPrint data Ident = Ident String deriving (Eq, Show) -------------------------------------------------------- -- Stylesheet data StyleSheet = StyleSheet (Maybe AtCharSet) [AtImport] [StyleBody] deriving (Eq, Show) data StyleBody = SRuleSet RuleSet | SAtMedia AtMedia | SAtPage AtPage | SAtFontFace AtFontFace deriving (Eq, Show) --------------------------------------------------------- -- AtRules -- | \@charset data AtCharSet = AtCharSet String deriving (Eq, Show) -- | \@import data AtImport = AtImport ImportHead [Ident] deriving (Eq, Show) data ImportHead = IStr String | IUri Uri deriving (Eq, Show) -- | \@media data AtMedia = AtMedia [Ident] [RuleSet] deriving (Eq, Show) -- | \@page data AtPage = AtPage (Maybe Ident) (Maybe PseudoPage) [Decl] deriving (Eq, Show) type PseudoPage = Ident -- | \@font-face data AtFontFace = AtFontFace [Decl] deriving (Eq, Show) --------------------------------------------------------- -- Rules data RuleSet = RuleSet [Sel] [Decl] deriving (Eq, Show) -- | Declaration data Decl = Decl (Maybe Prio) Prop Expr deriving (Eq, Show) -- | Property type Prop = Ident -- | sets @!important@ declaration data Prio = Important deriving (Eq, Show) --------------------------------------------------------- -- Selectors -- | Selector data Sel = SSel SimpleSel -- ^ single selector | DescendSel Sel Sel -- ^ ' ' | ChildSel Sel Sel -- ^ \'>\' | AdjSel Sel Sel -- ^ \'+\' deriving (Eq, Show) -- | Simple selector data SimpleSel = UnivSel [SubSel] -- ^ Universal selector | TypeSel Element [SubSel] -- ^ Type selector deriving (Eq, Show) data SubSel = AttrSel Attr -- ^ attribute selector | ClassSel Class -- ^ \'.\' | IdSel Id -- ^ \'#\' | PseudoSel PseudoVal -- ^ pseudo classes/elements deriving (Eq, Show) -- | attribute selector data Attr = Attr AttrIdent | AttrIs AttrIdent AttrVal -- ^ \'=\' | AttrIncl AttrIdent AttrVal -- ^ \'~=\' | AttrBegins AttrIdent AttrVal -- ^ \'|=\' deriving (Eq, Show) type Element = String type Class = String type Id = String type AttrIdent = String type AttrVal = String data PseudoVal = PIdent Ident | PFunc Func deriving (Eq, Show) ------------------------------------------------------------------- -- Values data Expr = EVal Value -- ^ single value | SlashSep Expr Expr -- ^ slash separated expressions | CommaSep Expr Expr -- ^ comma separated expressions | SpaceSep Expr Expr -- ^ space separated expressions deriving (Eq, Show) data Value = VDeg Deg | VRad Rad | VGrad Grad | VColor Color | VHz Hz | VKHz KHz | VFunc Func | VIdent Ident | VInt Int | VEm Em | VEx Ex | VPx Px | VIn In | VCm Cm | VMm Mm | VPc Pc | VPt Pt | VDouble Double | VPercentage Percentage | VString String | VMs Ms | VS S | VUri Uri deriving (Eq, Show) data Func = Func Ident Expr deriving (Eq, Show) -- | \ data Deg = Deg Double deriving (Eq, Show) -- | \ data Rad = Rad Double deriving (Eq, Show) -- | \ data Grad = Grad Double deriving (Eq, Show) -- | \ data Color = Cword String | Crgb Int Int Int deriving (Eq, Show) -- | \ data Hz = Hz Double deriving (Eq, Show) -- | \ data KHz = KHz Double deriving (Eq, Show) -- | \ data Em = Em Double deriving (Eq, Show) -- | \ data Ex = Ex Double deriving (Eq, Show) -- | \ data Px = Px Int deriving (Eq, Show) -- | \ data In = In Double deriving (Eq, Show) -- | \ data Cm = Cm Double deriving (Eq, Show) -- | \ data Mm = Mm Double deriving (Eq, Show) -- | \ data Pc = Pc Double deriving (Eq, Show) -- | \ data Pt = Pt Int deriving (Eq, Show) -- | \ data Percentage = Percentage Double deriving (Eq, Show) -- | \ data Ms = Ms Double deriving (Eq, Show) -- | \ data S = S Double deriving (Eq, Show) -- | \ data Uri = Uri String deriving (Eq, Show)