LambdaHack-0.1.20110918: src/Color.hs
module Color where
import Control.Monad
import qualified Data.Binary as Binary
data Color =
Black
| Red
| Green
| Yellow
| Blue
| Magenta
| Cyan
| White
| BrBlack
| BrRed
| BrGreen
| BrYellow
| BrBlue
| BrMagenta
| BrCyan
| BrWhite
deriving (Show, Eq, Ord, Enum, Bounded)
instance Binary.Binary Color where
put = Binary.putWord8 . fromIntegral . fromEnum
get = liftM (toEnum . fromIntegral) Binary.getWord8
defBG, defFG :: Color
defBG = Black
defFG = White
type Attr = (Color.Color, Color.Color)
defaultAttr :: Attr
defaultAttr = (Color.defFG, Color.defBG)
isBright :: Color -> Bool
isBright c = fromEnum c > 7 -- for terminals that display bright via bold
-- | Due to limitation of curses, only these are legal backgrounds.
legalBG :: [Color]
legalBG = [Black, White, Blue, Magenta]
-- Heavily modified Linux console colors.
colorToRGB :: Color -> String
colorToRGB Black = "#000000"
colorToRGB Red = "#D50000"
colorToRGB Green = "#00AA00"
colorToRGB Yellow = "#AA5500" -- brown
colorToRGB Blue = "#203AF0"
colorToRGB Magenta = "#AA00AA"
colorToRGB Cyan = "#00AAAA"
colorToRGB White = "#C5BCB8"
colorToRGB BrBlack = "#6F5F5F"
colorToRGB BrRed = "#FF5555"
colorToRGB BrGreen = "#75FF45"
colorToRGB BrYellow = "#FFE855"
colorToRGB BrBlue = "#4090FF"
colorToRGB BrMagenta = "#FF77FF"
colorToRGB BrCyan = "#60FFF0"
colorToRGB BrWhite = "#FFFFFF"
-- For reference, the original Linux console colors.
-- Good old retro feel and more useful than xterm (e.g. brown).
colorToRGB' :: Color -> String
colorToRGB' Black = "#000000"
colorToRGB' Red = "#AA0000"
colorToRGB' Green = "#00AA00"
colorToRGB' Yellow = "#AA5500" -- brown
colorToRGB' Blue = "#0000AA"
colorToRGB' Magenta = "#AA00AA"
colorToRGB' Cyan = "#00AAAA"
colorToRGB' White = "#AAAAAA"
colorToRGB' BrBlack = "#555555"
colorToRGB' BrRed = "#FF5555"
colorToRGB' BrGreen = "#55FF55"
colorToRGB' BrYellow = "#FFFF55"
colorToRGB' BrBlue = "#5555FF"
colorToRGB' BrMagenta = "#FF55FF"
colorToRGB' BrCyan = "#55FFFF"
colorToRGB' BrWhite = "#FFFFFF"
-- Human-readable names, for item descriptions. The simple set.
colorToName :: Color -> String
colorToName Black = "black"
colorToName Red = "red"
colorToName Green = "green"
colorToName Yellow = "brown"
colorToName Blue = "blue"
colorToName Magenta = "purple"
colorToName Cyan = "cyan"
colorToName White = "ivory"
colorToName BrBlack = "gray"
colorToName BrRed = "coral"
colorToName BrGreen = "lime"
colorToName BrYellow = "yellow"
colorToName BrBlue = "azure"
colorToName BrMagenta = "pink"
colorToName BrCyan = "aquamarine"
colorToName BrWhite = "white"
-- The fancy set.
colorToName' :: Color -> String
colorToName' Black = "smoky black"
colorToName' Red = "apple red"
colorToName' Green = "forest green"
colorToName' Yellow = "mahogany"
colorToName' Blue = "royal blue"
colorToName' Magenta = "indigo"
colorToName' Cyan = "teal"
colorToName' White = "silver gray"
colorToName' BrBlack = "charcoal"
colorToName' BrRed = "salmon"
colorToName' BrGreen = "emerald"
colorToName' BrYellow = "amber"
colorToName' BrBlue = "sky blue"
colorToName' BrMagenta = "magenta"
colorToName' BrCyan = "turquoise"
colorToName' BrWhite = "ghost white"