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