module Language.Css.Syntax (
StyleSheet(..), StyleBody(..),
AtCharSet(..),
AtImport(..), ImportHead(..),
AtMedia(..),
AtPage(..), PseudoPage,
AtFontFace(..),
RuleSet(..), Decl(..), Prop, Prio(..), Expr(..),
Sel(..), SimpleSel(..), SubSel(..),
Element, Attr(..), Class, Id, AttrIdent, AttrVal, PseudoVal(..),
Value(..),
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)
data StyleSheet = StyleSheet (Maybe AtCharSet) [AtImport] [StyleBody]
deriving (Eq, Show)
data StyleBody = SRuleSet RuleSet
| SAtMedia AtMedia
| SAtPage AtPage
| SAtFontFace AtFontFace
deriving (Eq, Show)
data AtCharSet = AtCharSet String
deriving (Eq, Show)
data AtImport = AtImport ImportHead [Ident]
deriving (Eq, Show)
data ImportHead = IStr String | IUri Uri
deriving (Eq, Show)
data AtMedia = AtMedia [Ident] [RuleSet]
deriving (Eq, Show)
data AtPage = AtPage (Maybe Ident) (Maybe PseudoPage) [Decl]
deriving (Eq, Show)
type PseudoPage = Ident
data AtFontFace = AtFontFace [Decl]
deriving (Eq, Show)
data RuleSet = RuleSet [Sel] [Decl]
deriving (Eq, Show)
data Decl = Decl (Maybe Prio) Prop Expr
deriving (Eq, Show)
type Prop = Ident
data Prio = Important
deriving (Eq, Show)
data Sel = SSel SimpleSel
| DescendSel Sel Sel
| ChildSel Sel Sel
| AdjSel Sel Sel
deriving (Eq, Show)
data SimpleSel = UnivSel [SubSel]
| TypeSel Element [SubSel]
deriving (Eq, Show)
data SubSel = AttrSel Attr
| ClassSel Class
| IdSel Id
| PseudoSel PseudoVal
deriving (Eq, Show)
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)
data Expr = EVal Value
| SlashSep Expr Expr
| CommaSep Expr Expr
| SpaceSep Expr Expr
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)