module Data.AdobeSwatchExchange.CSS where
import Data.AdobeSwatchExchange as ASE (ASEBlock(CE), ColorEntry(color), AdobeSwatchExchange, Color(RGB), blocks, getASE)
import qualified Data.ByteString.Lazy as B
import Language.Css.Build ((<:>), (/.), cword, ruleSets, star)
import Language.Css.Build.Idents as CSS (backgroundColor, color)
import Language.Css.Syntax (Expr, RuleSet, StyleSheet)
import Numeric (showHex)
ase2css :: [ColorEntry] -> StyleSheet
ase2css colorEntries =
ruleSets (concatMap genColor (zip [1..] colorEntries))
genColor :: (Int, ColorEntry) -> [RuleSet]
genColor (n, colorEntry) =
[ (star /. ("fg-color-ase-" ++ Prelude.show n)) [ CSS.color <:> (colorToHex (ASE.color colorEntry))
]
, (star /. ("bg-color-ase-" ++ Prelude.show n)) [ backgroundColor <:> (colorToHex (ASE.color colorEntry))
]
]
colorToHex :: Color -> Expr
colorToHex (RGB r g b) =
cword $
showString "#" .
showHex' (round (r * 255)) .
showHex' (round (g * 255)) .
showHex' (round (b * 255)) $ ""
where
showHex' n
| n < 10 = showString "0" . showHex n
| otherwise = showHex n