module AnsiColor
( Color(..)
, bold
, inColor
) where
import Data.List
data Color = Black
| Red
| Green
| Yellow
| Blue
| Magenta
| Cyan
| White
| Default
deriving Int -> Color
Color -> Int
Color -> [Color]
Color -> Color
Color -> Color -> [Color]
Color -> Color -> Color -> [Color]
(Color -> Color)
-> (Color -> Color)
-> (Int -> Color)
-> (Color -> Int)
-> (Color -> [Color])
-> (Color -> Color -> [Color])
-> (Color -> Color -> [Color])
-> (Color -> Color -> Color -> [Color])
-> Enum Color
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: Color -> Color -> Color -> [Color]
$cenumFromThenTo :: Color -> Color -> Color -> [Color]
enumFromTo :: Color -> Color -> [Color]
$cenumFromTo :: Color -> Color -> [Color]
enumFromThen :: Color -> Color -> [Color]
$cenumFromThen :: Color -> Color -> [Color]
enumFrom :: Color -> [Color]
$cenumFrom :: Color -> [Color]
fromEnum :: Color -> Int
$cfromEnum :: Color -> Int
toEnum :: Int -> Color
$ctoEnum :: Int -> Color
pred :: Color -> Color
$cpred :: Color -> Color
succ :: Color -> Color
$csucc :: Color -> Color
Enum
esc :: [String] -> String
esc :: [String] -> String
esc [] = String
""
esc [String]
xs = String
"\ESC[" String -> String -> String
forall a. [a] -> [a] -> [a]
++ (String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate String
";" [String]
xs) String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"m"
col :: Color -> Bool -> Color -> [String]
col :: Color -> Bool -> Color -> [String]
col Color
fg Bool
bf Color
bg = Int -> String
forall a. Show a => a -> String
show (Color -> Int
forall a. Enum a => a -> Int
fromEnum Color
fg Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
30) String -> [String] -> [String]
forall a. a -> [a] -> [a]
: [String] -> [String]
bf' [Int -> String
forall a. Show a => a -> String
show (Color -> Int
forall a. Enum a => a -> Int
fromEnum Color
bg Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
40)]
where bf' :: [String] -> [String]
bf' | Bool
bf = (String
"01" String -> [String] -> [String]
forall a. a -> [a] -> [a]
:)
| Bool
otherwise = [String] -> [String]
forall a. a -> a
id
inColor :: Color -> Bool -> Color -> String -> String
inColor :: Color -> Bool -> Color -> String -> String
inColor Color
c Bool
bf Color
bg String
txt = [String] -> String
esc (Color -> Bool -> Color -> [String]
col Color
c Bool
bf Color
bg) String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
txt String -> String -> String
forall a. [a] -> [a] -> [a]
++ [String] -> String
esc [String
"00"]
bold :: String -> String
bold :: String -> String
bold = String -> String -> String -> String
ansi String
"1" String
"22"
ansi :: String -> String -> String -> String
ansi :: String -> String -> String -> String
ansi String
on String
off String
txt = [String] -> String
esc [String
on] String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
txt String -> String -> String
forall a. [a] -> [a] -> [a]
++ [String] -> String
esc [String
off]