slate-0.13.1.0: src/Ansi.hs
module Ansi where
progress :: Double -> Int -> String
progress percent size =
makeInverse
((primary palette) ++
(replicate sizeCompleted ' ') ++
(secondary palette) ++ (replicate sizeRemaining ' '))
where
size' = fromIntegral size :: Double
sizeCompleted = round $ size' * percent / 100
sizeRemaining = size - sizeCompleted
reset :: String
reset = "\x1B[0m"
bold :: String
bold = "\x1B[1m"
faint :: String
faint = "\x1B[2m"
italic :: String
italic = "\x1B[3m"
underline :: String
underline = "\x1B[4m"
inverse :: String
inverse = "\x1B[7m"
crossed :: String
crossed = "\x1B[9m"
resetBold :: String
resetBold = "\x1B[22m"
resetItalic :: String
resetItalic = "\x1B[23m"
resetUnderline :: String
resetUnderline = "\x1B[24m"
red :: String
red = "\x1B[31m"
green :: String
green = "\x1B[32m"
grey :: String
grey = "\x1B[2;37m"
data Palette = Palette
{ primary :: String
, secondary :: String
, ternary :: String
, success :: String
, warning :: String
} deriving (Show)
palette :: Palette
palette =
Palette
"\x1B[38;5;97m"
"\x1B[38;5;74m"
"\x1B[38;5;178m"
"\x1B[38;5;72m"
"\x1B[38;5;167m"
makeBold :: String -> String
makeBold s = bold ++ s ++ reset
makeItalic :: String -> String
makeItalic s = italic ++ s ++ reset
makeFaint :: String -> String
makeFaint s = faint ++ s ++ reset
makeUnderline :: String -> String
makeUnderline s = underline ++ s ++ reset
makeInverse :: String -> String
makeInverse s = inverse ++ s ++ reset
makeCrossed :: String -> String
makeCrossed s = crossed ++ s ++ reset
paint :: (Palette -> String) -> String -> String
paint f s = (f palette) ++ s ++ reset