{-# LANGUAGE OverloadedStrings #-} module Main where import Rainbow import qualified Data.ByteString as BS import Data.Function ((&)) import qualified Data.Text as X colors8 :: [(String, Radiant)] colors8 = [ ("(no color)", mempty) , ("black", black) , ("red", red) , ("green", green) , ("yellow", yellow) , ("blue", blue) , ("magenta", magenta) , ("cyan", cyan) , ("white", white) ] colors256 :: [(String, Radiant)] colors256 = ("(no color)", mempty) : map mkColor [minBound..maxBound] where mkColor w = (show w, color256 w) colorChunks8ByForeground :: [[Chunk]] colorChunks8ByForeground = do (fgColorName, fgColor) <- colors8 (bgColorName, bgColor) <- colors8 let lbl = "foreground " <> fgColorName <> " background " <> bgColorName return [ chunk (X.pack lbl) & fore fgColor & back bgColor , chunk "\n" ] colorChunks8ByBackground :: [[Chunk]] colorChunks8ByBackground = do (bgColorName, bgColor) <- colors8 (fgColorName, fgColor) <- colors8 let lbl = "background " <> bgColorName <> " foreground " <> fgColorName return [ chunk (X.pack lbl) & fore fgColor & back bgColor , chunk "\n" ] colorChunks256ByForeground :: [[Chunk]] colorChunks256ByForeground = do (fgColorName, fgColor) <- colors256 (bgColorName, bgColor) <- colors256 let lbl = "foreground " <> fgColorName <> " background " <> bgColorName return [ chunk (X.pack lbl) & fore fgColor & back bgColor , chunk "\n" ] colorChunks256ByBackground :: [[Chunk]] colorChunks256ByBackground = do (bgColorName, bgColor) <- colors256 (fgColorName, fgColor) <- colors256 let lbl = "background " <> bgColorName <> " foreground " <> fgColorName return [ chunk (X.pack lbl) & fore fgColor & back bgColor , chunk "\n" ] sep :: String -> IO () sep s = do putStrLn "" putStrLn "" putStrLn $ replicate 40 '=' putStrLn s main :: IO () main = do sep "8 Colors - sorted by foreground color" mapM_ BS.putStr . chunksToByteStrings toByteStringsColors8 . concat $ colorChunks8ByForeground sep "8 Colors - sorted by background color" mapM_ BS.putStr . chunksToByteStrings toByteStringsColors8 . concat $ colorChunks8ByBackground sep "256 Colors - sorted by foreground color" mapM_ BS.putStr . chunksToByteStrings toByteStringsColors256 . concat $ colorChunks256ByForeground sep "256 Colors - sorted by background color" mapM_ BS.putStr . chunksToByteStrings toByteStringsColors256 . concat $ colorChunks256ByBackground