module Data.AdobeSwatchExchange.CSS where
import Control.Monad.State (State, get, put, evalState)
import Data.AdobeSwatchExchange as ASE (ASEBlock(CE), ColorEntry(color), AdobeSwatchExchange, Color(RGB), blocks, colorToHex, getASE)
import qualified Data.ByteString.Lazy as B
import Language.Css.Build ((<:>), (/.), cword, ruleSets, star)
import Language.Css.Build.Idents as CSS (backgroundColor, borderColor, color)
import Language.Css.Syntax (Expr, RuleSet, StyleSheet)
import Numeric (showHex)
ase2css :: AdobeSwatchExchange -> StyleSheet
ase2css ase =
ruleSets (concat $ evalState (mapM genBlock (blocks ase)) 1)
genBlock :: ASEBlock -> State Int [RuleSet]
genBlock (CE colorEntry) =
do n <- get
put $! (n + 1)
return [ (star /. ("fg-color-ase-" ++ Prelude.show n))
[ CSS.color <:> (cword $ colorToHex (ASE.color colorEntry))
]
, (star /. ("bg-color-ase-" ++ Prelude.show n))
[ backgroundColor <:> (cword $ colorToHex (ASE.color colorEntry))
]
, (star /. ("border-color-ase-" ++ Prelude.show n))
[ borderColor <:> (cword $ colorToHex (ASE.color colorEntry))
]
]
genBlock _ = return []