on 6469b16 help sign in
Idris-dev/src/Idris/Colours.hs
80 lines 3.1 kB history raw
1module Idris.Colours (
2 IdrisColour(..),
3 ColourTheme(..),
4 defaultTheme,
5 colouriseKwd, colouriseBound, colouriseImplicit,
6 colouriseType, colouriseFun, colouriseData,
7 colourisePrompt,
8 ColourType(..)) where
10import System.Console.ANSI
12data IdrisColour = IdrisColour { colour :: Color
13 , vivid :: Bool
14 , underline :: Bool
15 , bold :: Bool
16 , italic :: Bool
17 }
18 deriving (Eq, Show)
20mkColour :: Color -> IdrisColour
21mkColour c = IdrisColour c True False False False
23data ColourTheme = ColourTheme { keywordColour :: IdrisColour
24 , boundVarColour :: IdrisColour
25 , implicitColour :: IdrisColour
26 , functionColour :: IdrisColour
27 , typeColour :: IdrisColour
28 , dataColour :: IdrisColour
29 , promptColour :: IdrisColour
30 }
31 deriving (Eq, Show)
33defaultTheme :: ColourTheme
34defaultTheme = ColourTheme { keywordColour = IdrisColour Black True True True False
35 , boundVarColour = mkColour Magenta
36 , implicitColour = IdrisColour Magenta True True False False
37 , functionColour = mkColour Green
38 , typeColour = mkColour Blue
39 , dataColour = mkColour Red
40 , promptColour = IdrisColour Black 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 = [SetColor Foreground (if v then Vivid else Dull) c] ++
47 (if u then [SetUnderlining SingleUnderline] else []) ++
48 (if b then [SetConsoleIntensity BoldIntensity] else []) ++
49 (if i then [SetItalicized True] else [])
51colouriseKwd :: ColourTheme -> String -> String
52colouriseKwd t = colourise (keywordColour t)
54colouriseBound :: ColourTheme -> String -> String
55colouriseBound t = colourise (boundVarColour t)
57colouriseImplicit :: ColourTheme -> String -> String
58colouriseImplicit t = colourise (implicitColour t)
60colouriseFun :: ColourTheme -> String -> String
61colouriseFun t = colourise (functionColour t)
63colouriseType :: ColourTheme -> String -> String
64colouriseType t = colourise (typeColour t)
66colouriseData :: ColourTheme -> String -> String
67colouriseData t = colourise (dataColour t)
69colourisePrompt :: ColourTheme -> String -> String
70colourisePrompt t = colourise (promptColour t)
73data ColourType = KeywordColour
74 | BoundVarColour
75 | ImplicitColour
76 | FunctionColour
77 | TypeColour
78 | DataColour
79 | PromptColour
80 deriving (Eq, Show, Bounded, Enum)