module CStyle where
import qualified Data.Set as S
type ColPair = Int
white,red,green,yellow,blue,magenta,cyan,black :: ColPair
white = 0
red = 1
green = 2
yellow = 3
blue = 4
magenta = 5
cyan = 6
black = 7
onBlue, onRed, onMagenta :: ColPair -> ColPair
onBlue = (+8) . (`mod` 8)
onRed = (+16) . (`mod` 8)
onMagenta = (+24) . (`mod` 8)
data CStyle = CStyle { cstyleCol :: ColPair, cstyleBold :: Bool }
deriving (Eq, Ord)
style0, styleBold :: CStyle
style0 = CStyle 0 False
styleBold = CStyle 0 True
data Glyph = Glyph { glyphChar :: Char, glyphStyle :: CStyle }
deriving (Eq, Ord)
modStyleColour :: (ColPair -> ColPair) -> CStyle -> CStyle
modStyleColour f (CStyle col b) = CStyle (f col) b
modColour :: (ColPair -> ColPair) -> Glyph -> Glyph
modColour f (Glyph c st) = Glyph c $ modStyleColour f st
type CompositeGlyph = S.Set Glyph