on dd09721 help sign in
Idris-dev/src/Idris/Colours.hs
84 lines 3.4 kB history raw
1module Idris.Colours (
2 IdrisColour(..),
3 ColourTheme(..),
4 defaultTheme,
5 colouriseKwd, colouriseBound, colouriseImplicit,
6 colouriseType, colouriseFun, colouriseData, colouriseKeyword,
7 colourisePrompt, colourise, ColourType(..)) where
9import System.Console.ANSI
11data IdrisColour = IdrisColour { colour :: Maybe Color
12 , vivid :: Bool
13 , underline :: Bool
14 , bold :: Bool
15 , italic :: Bool
16 }
17 deriving (Eq, Show)
19mkColour :: Color -> IdrisColour
20mkColour c = IdrisColour (Just c) True False False False
22data ColourTheme = ColourTheme { keywordColour :: IdrisColour
23 , boundVarColour :: IdrisColour
24 , implicitColour :: IdrisColour
25 , functionColour :: IdrisColour
26 , typeColour :: IdrisColour
27 , dataColour :: IdrisColour
28 , promptColour :: IdrisColour
29 }
30 deriving (Eq, Show)
32-- | Idris's default console colour theme
33defaultTheme :: ColourTheme
34defaultTheme = ColourTheme { keywordColour = IdrisColour Nothing True False True False
35 , boundVarColour = mkColour Magenta
36 , implicitColour = IdrisColour (Just Magenta) True True False False
37 , functionColour = mkColour Green
38 , typeColour = mkColour Blue
39 , dataColour = mkColour Red
40 , promptColour = IdrisColour Nothing True False True False
41 }
43-- | Set the colour of a string using POSIX escape codes
44colourise :: IdrisColour -> String -> String
45colourise (IdrisColour c v u b i) str = setSGRCode sgr ++ str ++ setSGRCode [Reset]
46 where sgr = fg c ++
47 (if u then [SetUnderlining SingleUnderline] else []) ++
48 (if b then [SetConsoleIntensity BoldIntensity] else []) ++
49 (if i then [SetItalicized True] else [])
50 fg Nothing = []
51 fg (Just c) = [SetColor Foreground (if v then Vivid else Dull) c]
53colouriseKwd :: ColourTheme -> String -> String
54colouriseKwd t = colourise (keywordColour t)
56colouriseBound :: ColourTheme -> String -> String
57colouriseBound t = colourise (boundVarColour t)
59colouriseImplicit :: ColourTheme -> String -> String
60colouriseImplicit t = colourise (implicitColour t)
62colouriseFun :: ColourTheme -> String -> String
63colouriseFun t = colourise (functionColour t)
65colouriseType :: ColourTheme -> String -> String
66colouriseType t = colourise (typeColour t)
68colouriseData :: ColourTheme -> String -> String
69colouriseData t = colourise (dataColour t)
71colourisePrompt :: ColourTheme -> String -> String
72colourisePrompt t = colourise (promptColour t)
74colouriseKeyword :: ColourTheme -> String -> String
75colouriseKeyword t = colourise (keywordColour t)
77data ColourType = KeywordColour
78 | BoundVarColour
79 | ImplicitColour
80 | FunctionColour
81 | TypeColour
82 | DataColour
83 | PromptColour
84 deriving (Eq, Show, Bounded, Enum)