1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_GHC -fno-warn-missing-fields #-}
module Text.Cassius
( -- * Datatypes
Css
, CssUrl
-- * Type class
, ToCss (..)
-- * Rendering
, renderCss
, renderCssUrl
-- * Parsing
, cassius
, cassiusFile
, cassiusFileDebug
, cassiusFileReload
-- ** Mixims
, cassiusMixin
, Mixin
-- * ToCss instances
-- ** Color
, Color (..)
, colorRed
, colorBlack
-- ** Size
, mkSize
, AbsoluteUnit (..)
, AbsoluteSize (..)
, absoluteSize
, EmSize (..)
, ExSize (..)
, PercentageSize (..)
, percentageSize
, PixelSize (..)
-- * Internal
, cassiusUsedIdentifiers
) where
import Language.Haskell.TH.Quote (QuasiQuoter (..))
import Language.Haskell.TH.Syntax
import Text.IndentToBrace (i2b)
import Text.Internal.Cassius (i2bMixin)
import Text.Internal.Css
import Text.Internal.CssCommon
import Text.Internal.Lucius (parseTopLevels)
import qualified Text.Lucius as Lucius
import Text.Shakespeare (VarType)
import Text.Shakespeare.Base
cassius :: QuasiQuoter
cassius = QuasiQuoter { quoteExp = quoteExp Lucius.lucius . i2b }
cassiusFile :: FilePath -> Q Exp
cassiusFile fp = do
contents <- readFileRecompileQ fp
quoteExp cassius contents
cassiusFileDebug :: FilePath -> Q Exp
cassiusFileDebug = cssFileDebug True [|parseTopLevels Unordered|] (parseTopLevels Unordered)
cassiusFileReload :: FilePath -> Q Exp
cassiusFileReload = cassiusFileDebug
-- | Determine which identifiers are used by the given template, useful for
-- creating systems like yesod devel.
cassiusUsedIdentifiers :: String -> [(Deref, VarType)]
cassiusUsedIdentifiers = cssUsedIdentifiers True (parseTopLevels Unordered)
-- | Create a mixin with Cassius syntax.
--
-- Since 2.0.3
cassiusMixin :: QuasiQuoter
cassiusMixin = QuasiQuoter
{ quoteExp = quoteExp Lucius.luciusMixin . i2bMixin
}
|