{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
module Text.Pretty.Simple.Internal.Color
where
#if __GLASGOW_HASKELL__ < 710
import Control.Applicative
#endif
import Data.Text.Lazy.Builder (Builder, fromString)
import Data.Typeable (Typeable)
import GHC.Generics (Generic)
import System.Console.ANSI
(Color(..), ColorIntensity(..), ConsoleIntensity(..),
ConsoleLayer(..), SGR(..), setSGRCode)
data ColorOptions = ColorOptions
{ ColorOptions -> Builder
colorQuote :: Builder
, ColorOptions -> Builder
colorString :: Builder
, ColorOptions -> Builder
colorError :: Builder
, ColorOptions -> Builder
colorNum :: Builder
, ColorOptions -> [Builder]
colorRainbowParens :: [Builder]
} deriving (ColorOptions -> ColorOptions -> Bool
(ColorOptions -> ColorOptions -> Bool)
-> (ColorOptions -> ColorOptions -> Bool) -> Eq ColorOptions
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ColorOptions -> ColorOptions -> Bool
$c/= :: ColorOptions -> ColorOptions -> Bool
== :: ColorOptions -> ColorOptions -> Bool
$c== :: ColorOptions -> ColorOptions -> Bool
Eq, (forall x. ColorOptions -> Rep ColorOptions x)
-> (forall x. Rep ColorOptions x -> ColorOptions)
-> Generic ColorOptions
forall x. Rep ColorOptions x -> ColorOptions
forall x. ColorOptions -> Rep ColorOptions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ColorOptions x -> ColorOptions
$cfrom :: forall x. ColorOptions -> Rep ColorOptions x
Generic, Int -> ColorOptions -> ShowS
[ColorOptions] -> ShowS
ColorOptions -> String
(Int -> ColorOptions -> ShowS)
-> (ColorOptions -> String)
-> ([ColorOptions] -> ShowS)
-> Show ColorOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ColorOptions] -> ShowS
$cshowList :: [ColorOptions] -> ShowS
show :: ColorOptions -> String
$cshow :: ColorOptions -> String
showsPrec :: Int -> ColorOptions -> ShowS
$cshowsPrec :: Int -> ColorOptions -> ShowS
Show, Typeable)
defaultColorOptionsDarkBg :: ColorOptions
defaultColorOptionsDarkBg :: ColorOptions
defaultColorOptionsDarkBg =
ColorOptions :: Builder
-> Builder -> Builder -> Builder -> [Builder] -> ColorOptions
ColorOptions
{ colorQuote :: Builder
colorQuote = Builder
defaultColorQuoteDarkBg
, colorString :: Builder
colorString = Builder
defaultColorStringDarkBg
, colorError :: Builder
colorError = Builder
defaultColorErrorDarkBg
, colorNum :: Builder
colorNum = Builder
defaultColorNumDarkBg
, colorRainbowParens :: [Builder]
colorRainbowParens = [Builder]
defaultColorRainbowParensDarkBg
}
defaultColorQuoteDarkBg :: Builder
defaultColorQuoteDarkBg :: Builder
defaultColorQuoteDarkBg = Builder
colorVividWhiteBold
defaultColorStringDarkBg :: Builder
defaultColorStringDarkBg :: Builder
defaultColorStringDarkBg = Builder
colorVividBlueBold
defaultColorErrorDarkBg :: Builder
defaultColorErrorDarkBg :: Builder
defaultColorErrorDarkBg = Builder
colorVividRedBold
defaultColorNumDarkBg :: Builder
defaultColorNumDarkBg :: Builder
defaultColorNumDarkBg = Builder
colorVividGreenBold
defaultColorRainbowParensDarkBg :: [Builder]
defaultColorRainbowParensDarkBg :: [Builder]
defaultColorRainbowParensDarkBg =
[ Builder
colorVividMagentaBold
, Builder
colorVividCyanBold
, Builder
colorVividYellowBold
, Builder
colorDullMagenta
, Builder
colorDullCyan
, Builder
colorDullYellow
, Builder
colorDullMagentaBold
, Builder
colorDullCyanBold
, Builder
colorDullYellowBold
, Builder
colorVividMagenta
, Builder
colorVividCyan
, Builder
colorVividYellow
]
defaultColorOptionsLightBg :: ColorOptions
defaultColorOptionsLightBg :: ColorOptions
defaultColorOptionsLightBg =
ColorOptions :: Builder
-> Builder -> Builder -> Builder -> [Builder] -> ColorOptions
ColorOptions
{ colorQuote :: Builder
colorQuote = Builder
defaultColorQuoteLightBg
, colorString :: Builder
colorString = Builder
defaultColorStringLightBg
, colorError :: Builder
colorError = Builder
defaultColorErrorLightBg
, colorNum :: Builder
colorNum = Builder
defaultColorNumLightBg
, colorRainbowParens :: [Builder]
colorRainbowParens = [Builder]
defaultColorRainbowParensLightBg
}
defaultColorQuoteLightBg :: Builder
defaultColorQuoteLightBg :: Builder
defaultColorQuoteLightBg = Builder
colorVividBlackBold
defaultColorStringLightBg :: Builder
defaultColorStringLightBg :: Builder
defaultColorStringLightBg = Builder
colorVividBlueBold
defaultColorErrorLightBg :: Builder
defaultColorErrorLightBg :: Builder
defaultColorErrorLightBg = Builder
colorVividRedBold
defaultColorNumLightBg :: Builder
defaultColorNumLightBg :: Builder
defaultColorNumLightBg = Builder
colorVividGreenBold
defaultColorRainbowParensLightBg :: [Builder]
defaultColorRainbowParensLightBg :: [Builder]
defaultColorRainbowParensLightBg =
[ Builder
colorVividMagentaBold
, Builder
colorVividCyanBold
, Builder
colorDullMagenta
, Builder
colorDullCyan
, Builder
colorDullMagentaBold
, Builder
colorDullCyanBold
, Builder
colorVividMagenta
, Builder
colorVividCyan
]
colorVividBlackBold :: Builder
colorVividBlackBold :: Builder
colorVividBlackBold = Builder
colorBold Builder -> Builder -> Builder
forall a. Monoid a => a -> a -> a
`mappend` Builder
colorVividBlack
colorVividBlueBold :: Builder
colorVividBlueBold :: Builder
colorVividBlueBold = Builder
colorBold Builder -> Builder -> Builder
forall a. Monoid a => a -> a -> a
`mappend` Builder
colorVividBlue
colorVividCyanBold :: Builder
colorVividCyanBold :: Builder
colorVividCyanBold = Builder
colorBold Builder -> Builder -> Builder
forall a. Monoid a => a -> a -> a
`mappend` Builder
colorVividCyan
colorVividGreenBold :: Builder
colorVividGreenBold :: Builder
colorVividGreenBold = Builder
colorBold Builder -> Builder -> Builder
forall a. Monoid a => a -> a -> a
`mappend` Builder
colorVividGreen
colorVividMagentaBold :: Builder
colorVividMagentaBold :: Builder
colorVividMagentaBold = Builder
colorBold Builder -> Builder -> Builder
forall a. Monoid a => a -> a -> a
`mappend` Builder
colorVividMagenta
colorVividRedBold :: Builder
colorVividRedBold :: Builder
colorVividRedBold = Builder
colorBold Builder -> Builder -> Builder
forall a. Monoid a => a -> a -> a
`mappend` Builder
colorVividRed
colorVividWhiteBold :: Builder
colorVividWhiteBold :: Builder
colorVividWhiteBold = Builder
colorBold Builder -> Builder -> Builder
forall a. Monoid a => a -> a -> a
`mappend` Builder
colorVividWhite
colorVividYellowBold :: Builder
colorVividYellowBold :: Builder
colorVividYellowBold = Builder
colorBold Builder -> Builder -> Builder
forall a. Monoid a => a -> a -> a
`mappend` Builder
colorVividYellow
colorDullBlackBold :: Builder
colorDullBlackBold :: Builder
colorDullBlackBold = Builder
colorBold Builder -> Builder -> Builder
forall a. Monoid a => a -> a -> a
`mappend` Builder
colorDullBlack
colorDullBlueBold :: Builder
colorDullBlueBold :: Builder
colorDullBlueBold = Builder
colorBold Builder -> Builder -> Builder
forall a. Monoid a => a -> a -> a
`mappend` Builder
colorDullBlue
colorDullCyanBold :: Builder
colorDullCyanBold :: Builder
colorDullCyanBold = Builder
colorBold Builder -> Builder -> Builder
forall a. Monoid a => a -> a -> a
`mappend` Builder
colorDullCyan
colorDullGreenBold :: Builder
colorDullGreenBold :: Builder
colorDullGreenBold = Builder
colorBold Builder -> Builder -> Builder
forall a. Monoid a => a -> a -> a
`mappend` Builder
colorDullGreen
colorDullMagentaBold :: Builder
colorDullMagentaBold :: Builder
colorDullMagentaBold = Builder
colorBold Builder -> Builder -> Builder
forall a. Monoid a => a -> a -> a
`mappend` Builder
colorDullMagenta
colorDullRedBold :: Builder
colorDullRedBold :: Builder
colorDullRedBold = Builder
colorBold Builder -> Builder -> Builder
forall a. Monoid a => a -> a -> a
`mappend` Builder
colorDullRed
colorDullWhiteBold :: Builder
colorDullWhiteBold :: Builder
colorDullWhiteBold = Builder
colorBold Builder -> Builder -> Builder
forall a. Monoid a => a -> a -> a
`mappend` Builder
colorDullWhite
colorDullYellowBold :: Builder
colorDullYellowBold :: Builder
colorDullYellowBold = Builder
colorBold Builder -> Builder -> Builder
forall a. Monoid a => a -> a -> a
`mappend` Builder
colorDullYellow
colorVividBlack :: Builder
colorVividBlack :: Builder
colorVividBlack = ColorIntensity -> Color -> Builder
colorHelper ColorIntensity
Vivid Color
Black
colorVividBlue :: Builder
colorVividBlue :: Builder
colorVividBlue = ColorIntensity -> Color -> Builder
colorHelper ColorIntensity
Vivid Color
Blue
colorVividCyan :: Builder
colorVividCyan :: Builder
colorVividCyan = ColorIntensity -> Color -> Builder
colorHelper ColorIntensity
Vivid Color
Cyan
colorVividGreen :: Builder
colorVividGreen :: Builder
colorVividGreen = ColorIntensity -> Color -> Builder
colorHelper ColorIntensity
Vivid Color
Green
colorVividMagenta :: Builder
colorVividMagenta :: Builder
colorVividMagenta = ColorIntensity -> Color -> Builder
colorHelper ColorIntensity
Vivid Color
Magenta
colorVividRed :: Builder
colorVividRed :: Builder
colorVividRed = ColorIntensity -> Color -> Builder
colorHelper ColorIntensity
Vivid Color
Red
colorVividWhite :: Builder
colorVividWhite :: Builder
colorVividWhite = ColorIntensity -> Color -> Builder
colorHelper ColorIntensity
Vivid Color
White
colorVividYellow :: Builder
colorVividYellow :: Builder
colorVividYellow = ColorIntensity -> Color -> Builder
colorHelper ColorIntensity
Vivid Color
Yellow
colorDullBlack :: Builder
colorDullBlack :: Builder
colorDullBlack = ColorIntensity -> Color -> Builder
colorHelper ColorIntensity
Dull Color
Black
colorDullBlue :: Builder
colorDullBlue :: Builder
colorDullBlue = ColorIntensity -> Color -> Builder
colorHelper ColorIntensity
Dull Color
Blue
colorDullCyan :: Builder
colorDullCyan :: Builder
colorDullCyan = ColorIntensity -> Color -> Builder
colorHelper ColorIntensity
Dull Color
Cyan
colorDullGreen :: Builder
colorDullGreen :: Builder
colorDullGreen = ColorIntensity -> Color -> Builder
colorHelper ColorIntensity
Dull Color
Green
colorDullMagenta :: Builder
colorDullMagenta :: Builder
colorDullMagenta = ColorIntensity -> Color -> Builder
colorHelper ColorIntensity
Dull Color
Magenta
colorDullRed :: Builder
colorDullRed :: Builder
colorDullRed = ColorIntensity -> Color -> Builder
colorHelper ColorIntensity
Dull Color
Red
colorDullWhite :: Builder
colorDullWhite :: Builder
colorDullWhite = ColorIntensity -> Color -> Builder
colorHelper ColorIntensity
Dull Color
White
colorDullYellow :: Builder
colorDullYellow :: Builder
colorDullYellow = ColorIntensity -> Color -> Builder
colorHelper ColorIntensity
Dull Color
Yellow
colorBold :: Builder
colorBold :: Builder
colorBold = [SGR] -> Builder
setSGRCodeBuilder [ConsoleIntensity -> SGR
SetConsoleIntensity ConsoleIntensity
BoldIntensity]
colorReset :: Builder
colorReset :: Builder
colorReset = [SGR] -> Builder
setSGRCodeBuilder [SGR
Reset]
colorNull :: Builder
colorNull :: Builder
colorNull = ""
colorHelper :: ColorIntensity -> Color -> Builder
colorHelper :: ColorIntensity -> Color -> Builder
colorHelper colorIntensity :: ColorIntensity
colorIntensity color :: Color
color =
[SGR] -> Builder
setSGRCodeBuilder [ConsoleLayer -> ColorIntensity -> Color -> SGR
SetColor ConsoleLayer
Foreground ColorIntensity
colorIntensity Color
color]
setSGRCodeBuilder :: [SGR] -> Builder
setSGRCodeBuilder :: [SGR] -> Builder
setSGRCodeBuilder = String -> Builder
fromString (String -> Builder) -> ([SGR] -> String) -> [SGR] -> Builder
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [SGR] -> String
setSGRCode