content: -- 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
  