packages feed

css-parser-0.0.1: src/CssParser/At/Page.hs

module CssParser.At.Page where

import CssParser.Ident ( Ident(..) )
import CssParser.Prelude
import CssParser.Rule.Pseudo ( AtomicPseudoClass )
import CssParser.Show ( CssShow(..) )

data PageMargin
  = TopLeftCorner
  | TopLeft
  | TopCenter
  | TopRight
  | TopRightCorner
  | BottomLeftCorner
  | BottomLeft
  | BottomCenter
  | BottomRight
  | BottomRightCorner
  | LeftTop
  | LeftMiddle
  | LeftBottom
  | RightTop
  | RightMiddle
  | RightBottom
  deriving (Eq, Show, Ord, Generic)

instance CssShow PageMargin where
  toCssText = \case
    TopLeftCorner ->      "top-left-corner"
    TopLeft ->            "top-left"
    TopCenter ->          "top-center"
    TopRight ->           "top-right"
    TopRightCorner ->     "top-right-corner"
    BottomLeftCorner ->   "bottom-left-corner"
    BottomLeft ->         "bottom-left"
    BottomCenter ->       "bottom-center"
    BottomRight ->        "bottom-right"
    BottomRightCorner ->  "bottom-right-corner"
    LeftTop ->            "left-top"
    LeftMiddle ->         "left-middle"
    LeftBottom ->         "left-bottom"
    RightTop ->           "right-top"
    RightMiddle ->        "right-middle"
    RightBottom ->        "right-bottom"

newtype PageName = PageName Ident deriving newtype (Show, Eq, Ord, CssShow, IsString) deriving (Generic)

data PageSelector = PageSelector (Maybe PageName) [AtomicPseudoClass]
  deriving (Show, Eq, Ord, Generic)

instance CssShow PageSelector where
  toCssText (PageSelector mpn pps) =
    maybe "" toCssText mpn <> toCssText pps

newtype PageSelectorList = PageSelectorList [PageSelector]
  deriving newtype (Show, Eq, Ord) deriving (Generic)

instance CssShow PageSelectorList where
  toCssText (PageSelectorList pps) =
    unwords (toCssText <$> pps)