module Language.Haskell.HsColour.ColourHighlight
( Colour(..)
, Highlight(..)
, base256, unbase
, rgb24bit_to_xterm256
, projectToBasicColour8
, hlProjectToBasicColour8
) where
import Data.Word
data Colour = Black | Red | Green | Yellow | Blue | Magenta | Cyan | White | Rgb Word8 Word8 Word8
deriving (Colour -> Colour -> Bool
(Colour -> Colour -> Bool)
-> (Colour -> Colour -> Bool) -> Eq Colour
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Colour -> Colour -> Bool
$c/= :: Colour -> Colour -> Bool
== :: Colour -> Colour -> Bool
$c== :: Colour -> Colour -> Bool
Eq,Int -> Colour -> ShowS
[Colour] -> ShowS
Colour -> String
(Int -> Colour -> ShowS)
-> (Colour -> String) -> ([Colour] -> ShowS) -> Show Colour
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Colour] -> ShowS
$cshowList :: [Colour] -> ShowS
show :: Colour -> String
$cshow :: Colour -> String
showsPrec :: Int -> Colour -> ShowS
$cshowsPrec :: Int -> Colour -> ShowS
Show,ReadPrec [Colour]
ReadPrec Colour
Int -> ReadS Colour
ReadS [Colour]
(Int -> ReadS Colour)
-> ReadS [Colour]
-> ReadPrec Colour
-> ReadPrec [Colour]
-> Read Colour
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Colour]
$creadListPrec :: ReadPrec [Colour]
readPrec :: ReadPrec Colour
$creadPrec :: ReadPrec Colour
readList :: ReadS [Colour]
$creadList :: ReadS [Colour]
readsPrec :: Int -> ReadS Colour
$creadsPrec :: Int -> ReadS Colour
Read)
base256 :: Integral int => (Word8 -> Word8 -> Word8 -> r) -> int -> r
base256 :: (Word8 -> Word8 -> Word8 -> r) -> int -> r
base256 kont :: Word8 -> Word8 -> Word8 -> r
kont x :: int
x =
let
(r :: int
r,gb :: int
gb) = int -> int -> (int, int)
forall a. Integral a => a -> a -> (a, a)
divMod int
x 256
(g :: int
g,b :: int
b) = int -> int -> (int, int)
forall a. Integral a => a -> a -> (a, a)
divMod int
gb 256
fi :: int -> Word8
fi = int -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral
in
Word8 -> Word8 -> Word8 -> r
kont (int -> Word8
fi int
r) (int -> Word8
fi int
g) (int -> Word8
fi int
b)
unbase :: Integral int => int -> Word8 -> Word8 -> Word8 -> int
unbase :: int -> Word8 -> Word8 -> Word8 -> int
unbase base :: int
base r :: Word8
r g :: Word8
g b :: Word8
b = (Word8 -> int
fi Word8
rint -> int -> int
forall a. Num a => a -> a -> a
*int
baseint -> int -> int
forall a. Num a => a -> a -> a
+Word8 -> int
fi Word8
g)int -> int -> int
forall a. Num a => a -> a -> a
*int
baseint -> int -> int
forall a. Num a => a -> a -> a
+Word8 -> int
fi Word8
b
where fi :: Word8 -> int
fi = Word8 -> int
forall a b. (Integral a, Num b) => a -> b
fromIntegral
rgb24bit_to_xterm256 :: (Integral t) => Word8 -> Word8 -> Word8 -> t
rgb24bit_to_xterm256 :: Word8 -> Word8 -> Word8 -> t
rgb24bit_to_xterm256 r :: Word8
r g :: Word8
g b :: Word8
b = let f :: Word8 -> Word8
f = (Word8 -> Word8 -> Word8
forall a. Integral a => a -> a -> a
`div` 43)
in 16 t -> t -> t
forall a. Num a => a -> a -> a
+ t -> Word8 -> Word8 -> Word8 -> t
forall int. Integral int => int -> Word8 -> Word8 -> Word8 -> int
unbase 6 (Word8 -> Word8
f Word8
r) (Word8 -> Word8
f Word8
g) (Word8 -> Word8
f Word8
b)
projectToBasicColour8 :: Colour -> Colour
projectToBasicColour8 :: Colour -> Colour
projectToBasicColour8 (Rgb r :: Word8
r g :: Word8
g b :: Word8
b) = let f :: Word8 -> Word8
f = (Word8 -> Word8 -> Word8
forall a. Integral a => a -> a -> a
`div` 128)
in Int -> Colour
forall a. Enum a => Int -> a
toEnum ( Int -> Word8 -> Word8 -> Word8 -> Int
forall int. Integral int => int -> Word8 -> Word8 -> Word8 -> int
unbase 2 (Word8 -> Word8
f Word8
r) (Word8 -> Word8
f Word8
g) (Word8 -> Word8
f Word8
b) )
projectToBasicColour8 x :: Colour
x = Colour
x
hlProjectToBasicColour8 :: Highlight -> Highlight
hlProjectToBasicColour8 :: Highlight -> Highlight
hlProjectToBasicColour8 (Foreground c :: Colour
c) = Colour -> Highlight
Foreground (Colour -> Colour
projectToBasicColour8 Colour
c)
hlProjectToBasicColour8 (Background c :: Colour
c) = Colour -> Highlight
Background (Colour -> Colour
projectToBasicColour8 Colour
c)
hlProjectToBasicColour8 h :: Highlight
h = Highlight
h
instance Enum Colour where
toEnum :: Int -> Colour
toEnum 0 = Colour
Black
toEnum 1 = Colour
Red
toEnum 2 = Colour
Green
toEnum 3 = Colour
Yellow
toEnum 4 = Colour
Blue
toEnum 5 = Colour
Magenta
toEnum 6 = Colour
Cyan
toEnum 7 = Colour
White
toEnum x :: Int
x = (Word8 -> Word8 -> Word8 -> Colour) -> Int -> Colour
forall int r.
Integral int =>
(Word8 -> Word8 -> Word8 -> r) -> int -> r
base256 Word8 -> Word8 -> Word8 -> Colour
Rgb (Int
xInt -> Int -> Int
forall a. Num a => a -> a -> a
-8)
fromEnum :: Colour -> Int
fromEnum Black = 0
fromEnum Red = 1
fromEnum Green = 2
fromEnum Yellow = 3
fromEnum Blue = 4
fromEnum Magenta = 5
fromEnum Cyan = 6
fromEnum White = 7
fromEnum (Rgb r :: Word8
r g :: Word8
g b :: Word8
b) = 8 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int -> Word8 -> Word8 -> Word8 -> Int
forall int. Integral int => int -> Word8 -> Word8 -> Word8 -> int
unbase 256 Word8
r Word8
g Word8
b
data Highlight =
Normal
| Bold
| Dim
| Underscore
| Blink
| ReverseVideo
| Concealed
| Foreground Colour
| Background Colour
| Italic
deriving (Highlight -> Highlight -> Bool
(Highlight -> Highlight -> Bool)
-> (Highlight -> Highlight -> Bool) -> Eq Highlight
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Highlight -> Highlight -> Bool
$c/= :: Highlight -> Highlight -> Bool
== :: Highlight -> Highlight -> Bool
$c== :: Highlight -> Highlight -> Bool
Eq,Int -> Highlight -> ShowS
[Highlight] -> ShowS
Highlight -> String
(Int -> Highlight -> ShowS)
-> (Highlight -> String)
-> ([Highlight] -> ShowS)
-> Show Highlight
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Highlight] -> ShowS
$cshowList :: [Highlight] -> ShowS
show :: Highlight -> String
$cshow :: Highlight -> String
showsPrec :: Int -> Highlight -> ShowS
$cshowsPrec :: Int -> Highlight -> ShowS
Show,ReadPrec [Highlight]
ReadPrec Highlight
Int -> ReadS Highlight
ReadS [Highlight]
(Int -> ReadS Highlight)
-> ReadS [Highlight]
-> ReadPrec Highlight
-> ReadPrec [Highlight]
-> Read Highlight
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Highlight]
$creadListPrec :: ReadPrec [Highlight]
readPrec :: ReadPrec Highlight
$creadPrec :: ReadPrec Highlight
readList :: ReadS [Highlight]
$creadList :: ReadS [Highlight]
readsPrec :: Int -> ReadS Highlight
$creadsPrec :: Int -> ReadS Highlight
Read)