module BishBosh.Attribute.PhysicalColour(
PhysicalColour(..),
black,
red,
green,
yellow,
blue,
magenta,
cyan,
white,
mkFgColourCode,
mkBgColourCode,
selectGraphicsRendition,
bracket
) where
import qualified BishBosh.Property.FixedMembership as Property.FixedMembership
import qualified Control.DeepSeq
import qualified Text.XML.HXT.Arrow.Pickle as HXT
import qualified Text.XML.HXT.Arrow.Pickle.Schema
data PhysicalColour
= Black
| Red
| Green
| Yellow
| Blue
| Magenta
| Cyan
| White
deriving (Int -> PhysicalColour
PhysicalColour -> Int
PhysicalColour -> [PhysicalColour]
PhysicalColour -> PhysicalColour
PhysicalColour -> PhysicalColour -> [PhysicalColour]
PhysicalColour
-> PhysicalColour -> PhysicalColour -> [PhysicalColour]
(PhysicalColour -> PhysicalColour)
-> (PhysicalColour -> PhysicalColour)
-> (Int -> PhysicalColour)
-> (PhysicalColour -> Int)
-> (PhysicalColour -> [PhysicalColour])
-> (PhysicalColour -> PhysicalColour -> [PhysicalColour])
-> (PhysicalColour -> PhysicalColour -> [PhysicalColour])
-> (PhysicalColour
-> PhysicalColour -> PhysicalColour -> [PhysicalColour])
-> Enum PhysicalColour
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 :: PhysicalColour
-> PhysicalColour -> PhysicalColour -> [PhysicalColour]
$cenumFromThenTo :: PhysicalColour
-> PhysicalColour -> PhysicalColour -> [PhysicalColour]
enumFromTo :: PhysicalColour -> PhysicalColour -> [PhysicalColour]
$cenumFromTo :: PhysicalColour -> PhysicalColour -> [PhysicalColour]
enumFromThen :: PhysicalColour -> PhysicalColour -> [PhysicalColour]
$cenumFromThen :: PhysicalColour -> PhysicalColour -> [PhysicalColour]
enumFrom :: PhysicalColour -> [PhysicalColour]
$cenumFrom :: PhysicalColour -> [PhysicalColour]
fromEnum :: PhysicalColour -> Int
$cfromEnum :: PhysicalColour -> Int
toEnum :: Int -> PhysicalColour
$ctoEnum :: Int -> PhysicalColour
pred :: PhysicalColour -> PhysicalColour
$cpred :: PhysicalColour -> PhysicalColour
succ :: PhysicalColour -> PhysicalColour
$csucc :: PhysicalColour -> PhysicalColour
Enum, PhysicalColour -> PhysicalColour -> Bool
(PhysicalColour -> PhysicalColour -> Bool)
-> (PhysicalColour -> PhysicalColour -> Bool) -> Eq PhysicalColour
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PhysicalColour -> PhysicalColour -> Bool
$c/= :: PhysicalColour -> PhysicalColour -> Bool
== :: PhysicalColour -> PhysicalColour -> Bool
$c== :: PhysicalColour -> PhysicalColour -> Bool
Eq, ReadPrec [PhysicalColour]
ReadPrec PhysicalColour
Int -> ReadS PhysicalColour
ReadS [PhysicalColour]
(Int -> ReadS PhysicalColour)
-> ReadS [PhysicalColour]
-> ReadPrec PhysicalColour
-> ReadPrec [PhysicalColour]
-> Read PhysicalColour
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PhysicalColour]
$creadListPrec :: ReadPrec [PhysicalColour]
readPrec :: ReadPrec PhysicalColour
$creadPrec :: ReadPrec PhysicalColour
readList :: ReadS [PhysicalColour]
$creadList :: ReadS [PhysicalColour]
readsPrec :: Int -> ReadS PhysicalColour
$creadsPrec :: Int -> ReadS PhysicalColour
Read, Int -> PhysicalColour -> ShowS
[PhysicalColour] -> ShowS
PhysicalColour -> String
(Int -> PhysicalColour -> ShowS)
-> (PhysicalColour -> String)
-> ([PhysicalColour] -> ShowS)
-> Show PhysicalColour
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PhysicalColour] -> ShowS
$cshowList :: [PhysicalColour] -> ShowS
show :: PhysicalColour -> String
$cshow :: PhysicalColour -> String
showsPrec :: Int -> PhysicalColour -> ShowS
$cshowsPrec :: Int -> PhysicalColour -> ShowS
Show)
instance Control.DeepSeq.NFData PhysicalColour where
rnf :: PhysicalColour -> ()
rnf PhysicalColour
_ = ()
instance Bounded PhysicalColour where
minBound :: PhysicalColour
minBound = PhysicalColour
black
maxBound :: PhysicalColour
maxBound = PhysicalColour
white
instance HXT.XmlPickler PhysicalColour where
xpickle :: PU PhysicalColour
xpickle = (String -> PhysicalColour, PhysicalColour -> String)
-> PU String -> PU PhysicalColour
forall a b. (a -> b, b -> a) -> PU a -> PU b
HXT.xpWrap (String -> PhysicalColour
forall a. Read a => String -> a
read, PhysicalColour -> String
forall a. Show a => a -> String
show) (PU String -> PU PhysicalColour)
-> ([String] -> PU String) -> [String] -> PU PhysicalColour
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Schema -> PU String
HXT.xpTextDT (Schema -> PU String)
-> ([String] -> Schema) -> [String] -> PU String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> Schema
Text.XML.HXT.Arrow.Pickle.Schema.scEnum ([String] -> PU PhysicalColour) -> [String] -> PU PhysicalColour
forall a b. (a -> b) -> a -> b
$ (PhysicalColour -> String) -> [PhysicalColour] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map PhysicalColour -> String
forall a. Show a => a -> String
show [PhysicalColour]
range
range :: [PhysicalColour]
range :: [PhysicalColour]
range = [PhysicalColour
forall a. Bounded a => a
minBound .. PhysicalColour
forall a. Bounded a => a
maxBound]
instance Property.FixedMembership.FixedMembership PhysicalColour where
members :: [PhysicalColour]
members = [PhysicalColour]
range
black :: PhysicalColour
black :: PhysicalColour
black = PhysicalColour
Black
red :: PhysicalColour
red :: PhysicalColour
red = PhysicalColour
Red
green :: PhysicalColour
green :: PhysicalColour
green = PhysicalColour
Green
yellow :: PhysicalColour
yellow :: PhysicalColour
yellow = PhysicalColour
Yellow
blue :: PhysicalColour
blue :: PhysicalColour
blue = PhysicalColour
Blue
magenta :: PhysicalColour
magenta :: PhysicalColour
magenta = PhysicalColour
Magenta
cyan :: PhysicalColour
cyan :: PhysicalColour
cyan = PhysicalColour
Cyan
white :: PhysicalColour
white :: PhysicalColour
white = PhysicalColour
White
type ANSIColourCode = Int
mkFgColourCode :: PhysicalColour -> ANSIColourCode
mkFgColourCode :: PhysicalColour -> Int
mkFgColourCode = (Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
30) (Int -> Int) -> (PhysicalColour -> Int) -> PhysicalColour -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PhysicalColour -> Int
toANSIColourCode
mkBgColourCode :: PhysicalColour -> ANSIColourCode
mkBgColourCode :: PhysicalColour -> Int
mkBgColourCode = (Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
40) (Int -> Int) -> (PhysicalColour -> Int) -> PhysicalColour -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PhysicalColour -> Int
toANSIColourCode
toANSIColourCode :: PhysicalColour -> ANSIColourCode
toANSIColourCode :: PhysicalColour -> Int
toANSIColourCode = PhysicalColour -> Int
forall a. Enum a => a -> Int
fromEnum
selectGraphicsRendition :: Bool -> ANSIColourCode -> String
selectGraphicsRendition :: Bool -> Int -> String
selectGraphicsRendition Bool
isBold Int
parameter = String -> ShowS
showString String
"\x1b[" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ShowS
forall a. Show a => a -> ShowS
shows Int
parameter ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ (if Bool
isBold then String -> ShowS
showString String
";1" else ShowS
forall a. a -> a
id) String
"m"
bracket :: String -> String -> ShowS
bracket :: String -> String -> ShowS
bracket String
graphicsRendition String
s = String -> ShowS
showString String
graphicsRendition ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
s ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString (
Bool -> Int -> String
selectGraphicsRendition Bool
False Int
0
)