packages feed

vty-6.6: src/Graphics/Vty/Attributes/Color240.hs

-- This header file was generated by ./256colres.pl
module Graphics.Vty.Attributes.Color240
  ( rgbColorToColor240
  , color240CodeToRGB
  )
where

import Data.Word (Word8)
import Text.Printf

-- Note: rgbColor's mapping from RGB to 240 colors was generated from
-- 256colres.pl which is forked from xterm 256colres.pl.

-- | Create a value in the Color240 set from an RGB triple. This maps
-- the input arguments to an entry in the 240-color palette depicted at:
--
-- https://rich.readthedocs.io/en/stable/appendix/colors.html
rgbColorToColor240 :: Integral i => i -> i -> i -> Word8
rgbColorToColor240 r g b
    | r < 0 && g < 0 && b < 0 = error "rgbColor with negative color component intensity"
    | r == 8 && g == 8 && b == 8 = 216
    | r == 18 && g == 18 && b == 18 = 217
    | r == 28 && g == 28 && b == 28 = 218
    | r == 38 && g == 38 && b == 38 = 219
    | r == 48 && g == 48 && b == 48 = 220
    | r == 58 && g == 58 && b == 58 = 221
    | r == 68 && g == 68 && b == 68 = 222
    | r == 78 && g == 78 && b == 78 = 223
    | r == 88 && g == 88 && b == 88 = 224
    | r == 98 && g == 98 && b == 98 = 225
    | r == 108 && g == 108 && b == 108 = 226
    | r == 118 && g == 118 && b == 118 = 227
    | r == 128 && g == 128 && b == 128 = 228
    | r == 138 && g == 138 && b == 138 = 229
    | r == 148 && g == 148 && b == 148 = 230
    | r == 158 && g == 158 && b == 158 = 231
    | r == 168 && g == 168 && b == 168 = 232
    | r == 178 && g == 178 && b == 178 = 233
    | r == 188 && g == 188 && b == 188 = 234
    | r == 198 && g == 198 && b == 198 = 235
    | r == 208 && g == 208 && b == 208 = 236
    | r == 218 && g == 218 && b == 218 = 237
    | r == 228 && g == 228 && b == 228 = 238
    | r == 238 && g == 238 && b == 238 = 239
    | otherwise = 36 * go r + 6 * go g + go b
    where go = simpleColor_ (error (printf "RGB color %d %d %d does not map to 240 palette."
                                (fromIntegral r :: Int)
                                (fromIntegral g :: Int)
                                (fromIntegral b :: Int)))

simpleColor_ :: Integral i => Word8 -> i -> Word8
simpleColor_ e c
    | c <= 0 = 0
    | c <= 95 = 1
    | c <= 255 = fromIntegral ((c-16) `div` 40)
    | otherwise = e

-- | Create a RGB triple from a value in the Color240 set.
color240CodeToRGB :: Word8 -> Maybe (Int, Int, Int)
color240CodeToRGB n = case n of
    0 -> Just (0, 0, 0)
    1 -> Just (0, 0, 95)
    2 -> Just (0, 0, 135)
    3 -> Just (0, 0, 175)
    4 -> Just (0, 0, 215)
    5 -> Just (0, 0, 255)
    6 -> Just (0, 95, 0)
    7 -> Just (0, 95, 95)
    8 -> Just (0, 95, 135)
    9 -> Just (0, 95, 175)
    10 -> Just (0, 95, 215)
    11 -> Just (0, 95, 255)
    12 -> Just (0, 135, 0)
    13 -> Just (0, 135, 95)
    14 -> Just (0, 135, 135)
    15 -> Just (0, 135, 175)
    16 -> Just (0, 135, 215)
    17 -> Just (0, 135, 255)
    18 -> Just (0, 175, 0)
    19 -> Just (0, 175, 95)
    20 -> Just (0, 175, 135)
    21 -> Just (0, 175, 175)
    22 -> Just (0, 175, 215)
    23 -> Just (0, 175, 255)
    24 -> Just (0, 215, 0)
    25 -> Just (0, 215, 95)
    26 -> Just (0, 215, 135)
    27 -> Just (0, 215, 175)
    28 -> Just (0, 215, 215)
    29 -> Just (0, 215, 255)
    30 -> Just (0, 255, 0)
    31 -> Just (0, 255, 95)
    32 -> Just (0, 255, 135)
    33 -> Just (0, 255, 175)
    34 -> Just (0, 255, 215)
    35 -> Just (0, 255, 255)
    36 -> Just (95, 0, 0)
    37 -> Just (95, 0, 95)
    38 -> Just (95, 0, 135)
    39 -> Just (95, 0, 175)
    40 -> Just (95, 0, 215)
    41 -> Just (95, 0, 255)
    42 -> Just (95, 95, 0)
    43 -> Just (95, 95, 95)
    44 -> Just (95, 95, 135)
    45 -> Just (95, 95, 175)
    46 -> Just (95, 95, 215)
    47 -> Just (95, 95, 255)
    48 -> Just (95, 135, 0)
    49 -> Just (95, 135, 95)
    50 -> Just (95, 135, 135)
    51 -> Just (95, 135, 175)
    52 -> Just (95, 135, 215)
    53 -> Just (95, 135, 255)
    54 -> Just (95, 175, 0)
    55 -> Just (95, 175, 95)
    56 -> Just (95, 175, 135)
    57 -> Just (95, 175, 175)
    58 -> Just (95, 175, 215)
    59 -> Just (95, 175, 255)
    60 -> Just (95, 215, 0)
    61 -> Just (95, 215, 95)
    62 -> Just (95, 215, 135)
    63 -> Just (95, 215, 175)
    64 -> Just (95, 215, 215)
    65 -> Just (95, 215, 255)
    66 -> Just (95, 255, 0)
    67 -> Just (95, 255, 95)
    68 -> Just (95, 255, 135)
    69 -> Just (95, 255, 175)
    70 -> Just (95, 255, 215)
    71 -> Just (95, 255, 255)
    72 -> Just (135, 0, 0)
    73 -> Just (135, 0, 95)
    74 -> Just (135, 0, 135)
    75 -> Just (135, 0, 175)
    76 -> Just (135, 0, 215)
    77 -> Just (135, 0, 255)
    78 -> Just (135, 95, 0)
    79 -> Just (135, 95, 95)
    80 -> Just (135, 95, 135)
    81 -> Just (135, 95, 175)
    82 -> Just (135, 95, 215)
    83 -> Just (135, 95, 255)
    84 -> Just (135, 135, 0)
    85 -> Just (135, 135, 95)
    86 -> Just (135, 135, 135)
    87 -> Just (135, 135, 175)
    88 -> Just (135, 135, 215)
    89 -> Just (135, 135, 255)
    90 -> Just (135, 175, 0)
    91 -> Just (135, 175, 95)
    92 -> Just (135, 175, 135)
    93 -> Just (135, 175, 175)
    94 -> Just (135, 175, 215)
    95 -> Just (135, 175, 255)
    96 -> Just (135, 215, 0)
    97 -> Just (135, 215, 95)
    98 -> Just (135, 215, 135)
    99 -> Just (135, 215, 175)
    100 -> Just (135, 215, 215)
    101 -> Just (135, 215, 255)
    102 -> Just (135, 255, 0)
    103 -> Just (135, 255, 95)
    104 -> Just (135, 255, 135)
    105 -> Just (135, 255, 175)
    106 -> Just (135, 255, 215)
    107 -> Just (135, 255, 255)
    108 -> Just (175, 0, 0)
    109 -> Just (175, 0, 95)
    110 -> Just (175, 0, 135)
    111 -> Just (175, 0, 175)
    112 -> Just (175, 0, 215)
    113 -> Just (175, 0, 255)
    114 -> Just (175, 95, 0)
    115 -> Just (175, 95, 95)
    116 -> Just (175, 95, 135)
    117 -> Just (175, 95, 175)
    118 -> Just (175, 95, 215)
    119 -> Just (175, 95, 255)
    120 -> Just (175, 135, 0)
    121 -> Just (175, 135, 95)
    122 -> Just (175, 135, 135)
    123 -> Just (175, 135, 175)
    124 -> Just (175, 135, 215)
    125 -> Just (175, 135, 255)
    126 -> Just (175, 175, 0)
    127 -> Just (175, 175, 95)
    128 -> Just (175, 175, 135)
    129 -> Just (175, 175, 175)
    130 -> Just (175, 175, 215)
    131 -> Just (175, 175, 255)
    132 -> Just (175, 215, 0)
    133 -> Just (175, 215, 95)
    134 -> Just (175, 215, 135)
    135 -> Just (175, 215, 175)
    136 -> Just (175, 215, 215)
    137 -> Just (175, 215, 255)
    138 -> Just (175, 255, 0)
    139 -> Just (175, 255, 95)
    140 -> Just (175, 255, 135)
    141 -> Just (175, 255, 175)
    142 -> Just (175, 255, 215)
    143 -> Just (175, 255, 255)
    144 -> Just (215, 0, 0)
    145 -> Just (215, 0, 95)
    146 -> Just (215, 0, 135)
    147 -> Just (215, 0, 175)
    148 -> Just (215, 0, 215)
    149 -> Just (215, 0, 255)
    150 -> Just (215, 95, 0)
    151 -> Just (215, 95, 95)
    152 -> Just (215, 95, 135)
    153 -> Just (215, 95, 175)
    154 -> Just (215, 95, 215)
    155 -> Just (215, 95, 255)
    156 -> Just (215, 135, 0)
    157 -> Just (215, 135, 95)
    158 -> Just (215, 135, 135)
    159 -> Just (215, 135, 175)
    160 -> Just (215, 135, 215)
    161 -> Just (215, 135, 255)
    162 -> Just (215, 175, 0)
    163 -> Just (215, 175, 95)
    164 -> Just (215, 175, 135)
    165 -> Just (215, 175, 175)
    166 -> Just (215, 175, 215)
    167 -> Just (215, 175, 255)
    168 -> Just (215, 215, 0)
    169 -> Just (215, 215, 95)
    170 -> Just (215, 215, 135)
    171 -> Just (215, 215, 175)
    172 -> Just (215, 215, 215)
    173 -> Just (215, 215, 255)
    174 -> Just (215, 255, 0)
    175 -> Just (215, 255, 95)
    176 -> Just (215, 255, 135)
    177 -> Just (215, 255, 175)
    178 -> Just (215, 255, 215)
    179 -> Just (215, 255, 255)
    180 -> Just (255, 0, 0)
    181 -> Just (255, 0, 95)
    182 -> Just (255, 0, 135)
    183 -> Just (255, 0, 175)
    184 -> Just (255, 0, 215)
    185 -> Just (255, 0, 255)
    186 -> Just (255, 95, 0)
    187 -> Just (255, 95, 95)
    188 -> Just (255, 95, 135)
    189 -> Just (255, 95, 175)
    190 -> Just (255, 95, 215)
    191 -> Just (255, 95, 255)
    192 -> Just (255, 135, 0)
    193 -> Just (255, 135, 95)
    194 -> Just (255, 135, 135)
    195 -> Just (255, 135, 175)
    196 -> Just (255, 135, 215)
    197 -> Just (255, 135, 255)
    198 -> Just (255, 175, 0)
    199 -> Just (255, 175, 95)
    200 -> Just (255, 175, 135)
    201 -> Just (255, 175, 175)
    202 -> Just (255, 175, 215)
    203 -> Just (255, 175, 255)
    204 -> Just (255, 215, 0)
    205 -> Just (255, 215, 95)
    206 -> Just (255, 215, 135)
    207 -> Just (255, 215, 175)
    208 -> Just (255, 215, 215)
    209 -> Just (255, 215, 255)
    210 -> Just (255, 255, 0)
    211 -> Just (255, 255, 95)
    212 -> Just (255, 255, 135)
    213 -> Just (255, 255, 175)
    214 -> Just (255, 255, 215)
    215 -> Just (255, 255, 255)
    216 -> Just (8, 8, 8)
    217 -> Just (18, 18, 18)
    218 -> Just (28, 28, 28)
    219 -> Just (38, 38, 38)
    220 -> Just (48, 48, 48)
    221 -> Just (58, 58, 58)
    222 -> Just (68, 68, 68)
    223 -> Just (78, 78, 78)
    224 -> Just (88, 88, 88)
    225 -> Just (98, 98, 98)
    226 -> Just (108, 108, 108)
    227 -> Just (118, 118, 118)
    228 -> Just (128, 128, 128)
    229 -> Just (138, 138, 138)
    230 -> Just (148, 148, 148)
    231 -> Just (158, 158, 158)
    232 -> Just (168, 168, 168)
    233 -> Just (178, 178, 178)
    234 -> Just (188, 188, 188)
    235 -> Just (198, 198, 198)
    236 -> Just (208, 208, 208)
    237 -> Just (218, 218, 218)
    238 -> Just (228, 228, 228)
    239 -> Just (238, 238, 238)
    _   -> Nothing