module Penny.Cabin.Scheme.Schemes where
import Data.Monoid ( (<>) )
import qualified Penny.Cabin.Scheme as E
import qualified System.Console.Rainbow as R
light :: E.Scheme
light = E.Scheme "light" "for light background terminals"
lightLabels
lightLabels :: E.Labels (E.EvenAndOdd (R.Chunk -> R.Chunk))
lightLabels = E.Labels
{ E.debit = E.EvenAndOdd { E.eoEven = lightDebit lightEvenTextSpec
, E.eoOdd = lightDebit lightOddTextSpec }
, E.credit = E.EvenAndOdd { E.eoEven = lightCredit lightEvenTextSpec
, E.eoOdd = lightCredit lightOddTextSpec }
, E.zero = E.EvenAndOdd { E.eoEven = lightZero lightEvenTextSpec
, E.eoOdd = lightZero lightOddTextSpec }
, E.other = E.EvenAndOdd { E.eoEven = lightEvenTextSpec
, E.eoOdd = lightOddTextSpec }
}
lightEvenTextSpec :: R.Chunk -> R.Chunk
lightEvenTextSpec = id
lightOddTextSpec :: R.Chunk -> R.Chunk
lightOddTextSpec = (<> (R.c8_b_default <> R.c256_b_255))
lightDebit :: (R.Chunk -> R.Chunk) -> R.Chunk -> R.Chunk
lightDebit f c = f c <> R.c8_f_magenta <> R.c256_f_52
lightCredit :: (R.Chunk -> R.Chunk) -> R.Chunk -> R.Chunk
lightCredit f c = f c <> R.c8_f_cyan <> R.c256_f_21
lightZero :: (R.Chunk -> R.Chunk) -> R.Chunk -> R.Chunk
lightZero f c = f c <> R.c8_f_black <> R.c256_f_0
dark :: E.Scheme
dark = E.Scheme "dark" "for dark background terminals"
darkLabels
darkLabels :: E.Labels (E.EvenAndOdd (R.Chunk -> R.Chunk))
darkLabels = E.Labels
{ E.debit = E.EvenAndOdd { E.eoEven = darkDebit darkEvenTextSpec
, E.eoOdd = darkDebit darkOddTextSpec }
, E.credit = E.EvenAndOdd { E.eoEven = darkCredit darkEvenTextSpec
, E.eoOdd = darkCredit darkOddTextSpec }
, E.zero = E.EvenAndOdd { E.eoEven = darkZero darkEvenTextSpec
, E.eoOdd = darkZero darkOddTextSpec }
, E.other = E.EvenAndOdd { E.eoEven = darkEvenTextSpec
, E.eoOdd = darkOddTextSpec }
}
darkEvenTextSpec :: R.Chunk -> R.Chunk
darkEvenTextSpec = id
darkOddTextSpec :: R.Chunk -> R.Chunk
darkOddTextSpec = (<> (R.c8_b_default <> R.c256_b_235))
darkDebit :: (R.Chunk -> R.Chunk) -> R.Chunk -> R.Chunk
darkDebit f c = f c <> R.c8_f_magenta <> R.c256_f_208
darkCredit :: (R.Chunk -> R.Chunk) -> R.Chunk -> R.Chunk
darkCredit f c = f c <> R.c8_f_cyan <> R.c256_f_45
darkZero :: (R.Chunk -> R.Chunk) -> R.Chunk -> R.Chunk
darkZero f c = f c <> R.c8_f_white <> R.c256_f_15
plain :: E.Scheme
plain = E.Scheme "plain" "uses default terminal colors"
plainLabels
plainLabels :: E.Labels (E.EvenAndOdd (R.Chunk -> R.Chunk))
plainLabels = E.Labels
{ E.debit = E.EvenAndOdd id id
, E.credit = E.EvenAndOdd id id
, E.zero = E.EvenAndOdd id id
, E.other = E.EvenAndOdd id id
}