module Highlight.Common.Color where
import Prelude ()
import Prelude.Compat
import Data.ByteString.Char8 (ByteString, empty, pack)
import Data.IntMap.Strict (IntMap, (!), fromList)
import System.Console.ANSI
(Color(..), ColorIntensity(..), ConsoleIntensity(..),
ConsoleLayer(..), SGR(..), setSGRCode)
colorForFileNumber :: Int -> ByteString
colorForFileNumber num = allColorsMap ! (num `mod` allColorsLength)
allColorsMap :: IntMap ByteString
allColorsMap = fromList $ zip [0..] allColorsList
allColorsLength :: Int
allColorsLength = length allColorsList
allColorsList :: [ByteString]
allColorsList =
[ colorVividBlueBold
, colorVividGreenBold
, colorVividCyanBold
, colorVividMagentaBold
]
colorVividBlackBold :: ByteString
colorVividBlackBold = colorBold `mappend` colorVividBlack
colorVividBlueBold :: ByteString
colorVividBlueBold = colorBold `mappend` colorVividBlue
colorVividCyanBold :: ByteString
colorVividCyanBold = colorBold `mappend` colorVividCyan
colorVividGreenBold :: ByteString
colorVividGreenBold = colorBold `mappend` colorVividGreen
colorVividMagentaBold :: ByteString
colorVividMagentaBold = colorBold `mappend` colorVividMagenta
colorVividRedBold :: ByteString
colorVividRedBold = colorBold `mappend` colorVividRed
colorVividWhiteBold :: ByteString
colorVividWhiteBold = colorBold `mappend` colorVividWhite
colorVividYellowBold :: ByteString
colorVividYellowBold = colorBold `mappend` colorVividYellow
colorDullBlackBold :: ByteString
colorDullBlackBold = colorBold `mappend` colorDullBlack
colorDullBlueBold :: ByteString
colorDullBlueBold = colorBold `mappend` colorDullBlue
colorDullCyanBold :: ByteString
colorDullCyanBold = colorBold `mappend` colorDullCyan
colorDullGreenBold :: ByteString
colorDullGreenBold = colorBold `mappend` colorDullGreen
colorDullMagentaBold :: ByteString
colorDullMagentaBold = colorBold `mappend` colorDullMagenta
colorDullRedBold :: ByteString
colorDullRedBold = colorBold `mappend` colorDullRed
colorDullWhiteBold :: ByteString
colorDullWhiteBold = colorBold `mappend` colorDullWhite
colorDullYellowBold :: ByteString
colorDullYellowBold = colorBold `mappend` colorDullYellow
colorVividBlack :: ByteString
colorVividBlack = colorHelper Vivid Black
colorVividBlue :: ByteString
colorVividBlue = colorHelper Vivid Blue
colorVividCyan :: ByteString
colorVividCyan = colorHelper Vivid Cyan
colorVividGreen :: ByteString
colorVividGreen = colorHelper Vivid Green
colorVividMagenta :: ByteString
colorVividMagenta = colorHelper Vivid Magenta
colorVividRed :: ByteString
colorVividRed = colorHelper Vivid Red
colorVividWhite :: ByteString
colorVividWhite = colorHelper Vivid White
colorVividYellow :: ByteString
colorVividYellow = colorHelper Vivid Yellow
colorDullBlack :: ByteString
colorDullBlack = colorHelper Dull Black
colorDullBlue :: ByteString
colorDullBlue = colorHelper Dull Blue
colorDullCyan :: ByteString
colorDullCyan = colorHelper Dull Cyan
colorDullGreen :: ByteString
colorDullGreen = colorHelper Dull Green
colorDullMagenta :: ByteString
colorDullMagenta = colorHelper Dull Magenta
colorDullRed :: ByteString
colorDullRed = colorHelper Dull Red
colorDullWhite :: ByteString
colorDullWhite = colorHelper Dull White
colorDullYellow :: ByteString
colorDullYellow = colorHelper Dull Yellow
colorBold :: ByteString
colorBold = setSGRCodeBuilder [SetConsoleIntensity BoldIntensity]
colorReset :: ByteString
colorReset = setSGRCodeBuilder [Reset]
colorNull :: ByteString
colorNull = empty
colorHelper :: ColorIntensity -> Color -> ByteString
colorHelper colorIntensity color =
setSGRCodeBuilder [SetColor Foreground colorIntensity color]
setSGRCodeBuilder :: [SGR] -> ByteString
setSGRCodeBuilder = pack . setSGRCode