module Graphics.Vty.Attributes.Color240
( rgbColorToColor240
, color240CodeToRGB
)
where
import Data.Word (Word8)
import Text.Printf
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
| r <= 0 && g <= 0 && b <= 0 = 0
| r <= 0 && g <= 0 && b <= 95 = 1
| r <= 0 && g <= 0 && b <= 135 = 2
| r <= 0 && g <= 0 && b <= 175 = 3
| r <= 0 && g <= 0 && b <= 215 = 4
| r <= 0 && g <= 0 && b <= 255 = 5
| r <= 0 && g <= 95 && b <= 0 = 6
| r <= 0 && g <= 95 && b <= 95 = 7
| r <= 0 && g <= 95 && b <= 135 = 8
| r <= 0 && g <= 95 && b <= 175 = 9
| r <= 0 && g <= 95 && b <= 215 = 10
| r <= 0 && g <= 95 && b <= 255 = 11
| r <= 0 && g <= 135 && b <= 0 = 12
| r <= 0 && g <= 135 && b <= 95 = 13
| r <= 0 && g <= 135 && b <= 135 = 14
| r <= 0 && g <= 135 && b <= 175 = 15
| r <= 0 && g <= 135 && b <= 215 = 16
| r <= 0 && g <= 135 && b <= 255 = 17
| r <= 0 && g <= 175 && b <= 0 = 18
| r <= 0 && g <= 175 && b <= 95 = 19
| r <= 0 && g <= 175 && b <= 135 = 20
| r <= 0 && g <= 175 && b <= 175 = 21
| r <= 0 && g <= 175 && b <= 215 = 22
| r <= 0 && g <= 175 && b <= 255 = 23
| r <= 0 && g <= 215 && b <= 0 = 24
| r <= 0 && g <= 215 && b <= 95 = 25
| r <= 0 && g <= 215 && b <= 135 = 26
| r <= 0 && g <= 215 && b <= 175 = 27
| r <= 0 && g <= 215 && b <= 215 = 28
| r <= 0 && g <= 215 && b <= 255 = 29
| r <= 0 && g <= 255 && b <= 0 = 30
| r <= 0 && g <= 255 && b <= 95 = 31
| r <= 0 && g <= 255 && b <= 135 = 32
| r <= 0 && g <= 255 && b <= 175 = 33
| r <= 0 && g <= 255 && b <= 215 = 34
| r <= 0 && g <= 255 && b <= 255 = 35
| r <= 95 && g <= 0 && b <= 0 = 36
| r <= 95 && g <= 0 && b <= 95 = 37
| r <= 95 && g <= 0 && b <= 135 = 38
| r <= 95 && g <= 0 && b <= 175 = 39
| r <= 95 && g <= 0 && b <= 215 = 40
| r <= 95 && g <= 0 && b <= 255 = 41
| r <= 95 && g <= 95 && b <= 0 = 42
| r <= 95 && g <= 95 && b <= 95 = 43
| r <= 95 && g <= 95 && b <= 135 = 44
| r <= 95 && g <= 95 && b <= 175 = 45
| r <= 95 && g <= 95 && b <= 215 = 46
| r <= 95 && g <= 95 && b <= 255 = 47
| r <= 95 && g <= 135 && b <= 0 = 48
| r <= 95 && g <= 135 && b <= 95 = 49
| r <= 95 && g <= 135 && b <= 135 = 50
| r <= 95 && g <= 135 && b <= 175 = 51
| r <= 95 && g <= 135 && b <= 215 = 52
| r <= 95 && g <= 135 && b <= 255 = 53
| r <= 95 && g <= 175 && b <= 0 = 54
| r <= 95 && g <= 175 && b <= 95 = 55
| r <= 95 && g <= 175 && b <= 135 = 56
| r <= 95 && g <= 175 && b <= 175 = 57
| r <= 95 && g <= 175 && b <= 215 = 58
| r <= 95 && g <= 175 && b <= 255 = 59
| r <= 95 && g <= 215 && b <= 0 = 60
| r <= 95 && g <= 215 && b <= 95 = 61
| r <= 95 && g <= 215 && b <= 135 = 62
| r <= 95 && g <= 215 && b <= 175 = 63
| r <= 95 && g <= 215 && b <= 215 = 64
| r <= 95 && g <= 215 && b <= 255 = 65
| r <= 95 && g <= 255 && b <= 0 = 66
| r <= 95 && g <= 255 && b <= 95 = 67
| r <= 95 && g <= 255 && b <= 135 = 68
| r <= 95 && g <= 255 && b <= 175 = 69
| r <= 95 && g <= 255 && b <= 215 = 70
| r <= 95 && g <= 255 && b <= 255 = 71
| r <= 135 && g <= 0 && b <= 0 = 72
| r <= 135 && g <= 0 && b <= 95 = 73
| r <= 135 && g <= 0 && b <= 135 = 74
| r <= 135 && g <= 0 && b <= 175 = 75
| r <= 135 && g <= 0 && b <= 215 = 76
| r <= 135 && g <= 0 && b <= 255 = 77
| r <= 135 && g <= 95 && b <= 0 = 78
| r <= 135 && g <= 95 && b <= 95 = 79
| r <= 135 && g <= 95 && b <= 135 = 80
| r <= 135 && g <= 95 && b <= 175 = 81
| r <= 135 && g <= 95 && b <= 215 = 82
| r <= 135 && g <= 95 && b <= 255 = 83
| r <= 135 && g <= 135 && b <= 0 = 84
| r <= 135 && g <= 135 && b <= 95 = 85
| r <= 135 && g <= 135 && b <= 135 = 86
| r <= 135 && g <= 135 && b <= 175 = 87
| r <= 135 && g <= 135 && b <= 215 = 88
| r <= 135 && g <= 135 && b <= 255 = 89
| r <= 135 && g <= 175 && b <= 0 = 90
| r <= 135 && g <= 175 && b <= 95 = 91
| r <= 135 && g <= 175 && b <= 135 = 92
| r <= 135 && g <= 175 && b <= 175 = 93
| r <= 135 && g <= 175 && b <= 215 = 94
| r <= 135 && g <= 175 && b <= 255 = 95
| r <= 135 && g <= 215 && b <= 0 = 96
| r <= 135 && g <= 215 && b <= 95 = 97
| r <= 135 && g <= 215 && b <= 135 = 98
| r <= 135 && g <= 215 && b <= 175 = 99
| r <= 135 && g <= 215 && b <= 215 = 100
| r <= 135 && g <= 215 && b <= 255 = 101
| r <= 135 && g <= 255 && b <= 0 = 102
| r <= 135 && g <= 255 && b <= 95 = 103
| r <= 135 && g <= 255 && b <= 135 = 104
| r <= 135 && g <= 255 && b <= 175 = 105
| r <= 135 && g <= 255 && b <= 215 = 106
| r <= 135 && g <= 255 && b <= 255 = 107
| r <= 175 && g <= 0 && b <= 0 = 108
| r <= 175 && g <= 0 && b <= 95 = 109
| r <= 175 && g <= 0 && b <= 135 = 110
| r <= 175 && g <= 0 && b <= 175 = 111
| r <= 175 && g <= 0 && b <= 215 = 112
| r <= 175 && g <= 0 && b <= 255 = 113
| r <= 175 && g <= 95 && b <= 0 = 114
| r <= 175 && g <= 95 && b <= 95 = 115
| r <= 175 && g <= 95 && b <= 135 = 116
| r <= 175 && g <= 95 && b <= 175 = 117
| r <= 175 && g <= 95 && b <= 215 = 118
| r <= 175 && g <= 95 && b <= 255 = 119
| r <= 175 && g <= 135 && b <= 0 = 120
| r <= 175 && g <= 135 && b <= 95 = 121
| r <= 175 && g <= 135 && b <= 135 = 122
| r <= 175 && g <= 135 && b <= 175 = 123
| r <= 175 && g <= 135 && b <= 215 = 124
| r <= 175 && g <= 135 && b <= 255 = 125
| r <= 175 && g <= 175 && b <= 0 = 126
| r <= 175 && g <= 175 && b <= 95 = 127
| r <= 175 && g <= 175 && b <= 135 = 128
| r <= 175 && g <= 175 && b <= 175 = 129
| r <= 175 && g <= 175 && b <= 215 = 130
| r <= 175 && g <= 175 && b <= 255 = 131
| r <= 175 && g <= 215 && b <= 0 = 132
| r <= 175 && g <= 215 && b <= 95 = 133
| r <= 175 && g <= 215 && b <= 135 = 134
| r <= 175 && g <= 215 && b <= 175 = 135
| r <= 175 && g <= 215 && b <= 215 = 136
| r <= 175 && g <= 215 && b <= 255 = 137
| r <= 175 && g <= 255 && b <= 0 = 138
| r <= 175 && g <= 255 && b <= 95 = 139
| r <= 175 && g <= 255 && b <= 135 = 140
| r <= 175 && g <= 255 && b <= 175 = 141
| r <= 175 && g <= 255 && b <= 215 = 142
| r <= 175 && g <= 255 && b <= 255 = 143
| r <= 215 && g <= 0 && b <= 0 = 144
| r <= 215 && g <= 0 && b <= 95 = 145
| r <= 215 && g <= 0 && b <= 135 = 146
| r <= 215 && g <= 0 && b <= 175 = 147
| r <= 215 && g <= 0 && b <= 215 = 148
| r <= 215 && g <= 0 && b <= 255 = 149
| r <= 215 && g <= 95 && b <= 0 = 150
| r <= 215 && g <= 95 && b <= 95 = 151
| r <= 215 && g <= 95 && b <= 135 = 152
| r <= 215 && g <= 95 && b <= 175 = 153
| r <= 215 && g <= 95 && b <= 215 = 154
| r <= 215 && g <= 95 && b <= 255 = 155
| r <= 215 && g <= 135 && b <= 0 = 156
| r <= 215 && g <= 135 && b <= 95 = 157
| r <= 215 && g <= 135 && b <= 135 = 158
| r <= 215 && g <= 135 && b <= 175 = 159
| r <= 215 && g <= 135 && b <= 215 = 160
| r <= 215 && g <= 135 && b <= 255 = 161
| r <= 215 && g <= 175 && b <= 0 = 162
| r <= 215 && g <= 175 && b <= 95 = 163
| r <= 215 && g <= 175 && b <= 135 = 164
| r <= 215 && g <= 175 && b <= 175 = 165
| r <= 215 && g <= 175 && b <= 215 = 166
| r <= 215 && g <= 175 && b <= 255 = 167
| r <= 215 && g <= 215 && b <= 0 = 168
| r <= 215 && g <= 215 && b <= 95 = 169
| r <= 215 && g <= 215 && b <= 135 = 170
| r <= 215 && g <= 215 && b <= 175 = 171
| r <= 215 && g <= 215 && b <= 215 = 172
| r <= 215 && g <= 215 && b <= 255 = 173
| r <= 215 && g <= 255 && b <= 0 = 174
| r <= 215 && g <= 255 && b <= 95 = 175
| r <= 215 && g <= 255 && b <= 135 = 176
| r <= 215 && g <= 255 && b <= 175 = 177
| r <= 215 && g <= 255 && b <= 215 = 178
| r <= 215 && g <= 255 && b <= 255 = 179
| r <= 255 && g <= 0 && b <= 0 = 180
| r <= 255 && g <= 0 && b <= 95 = 181
| r <= 255 && g <= 0 && b <= 135 = 182
| r <= 255 && g <= 0 && b <= 175 = 183
| r <= 255 && g <= 0 && b <= 215 = 184
| r <= 255 && g <= 0 && b <= 255 = 185
| r <= 255 && g <= 95 && b <= 0 = 186
| r <= 255 && g <= 95 && b <= 95 = 187
| r <= 255 && g <= 95 && b <= 135 = 188
| r <= 255 && g <= 95 && b <= 175 = 189
| r <= 255 && g <= 95 && b <= 215 = 190
| r <= 255 && g <= 95 && b <= 255 = 191
| r <= 255 && g <= 135 && b <= 0 = 192
| r <= 255 && g <= 135 && b <= 95 = 193
| r <= 255 && g <= 135 && b <= 135 = 194
| r <= 255 && g <= 135 && b <= 175 = 195
| r <= 255 && g <= 135 && b <= 215 = 196
| r <= 255 && g <= 135 && b <= 255 = 197
| r <= 255 && g <= 175 && b <= 0 = 198
| r <= 255 && g <= 175 && b <= 95 = 199
| r <= 255 && g <= 175 && b <= 135 = 200
| r <= 255 && g <= 175 && b <= 175 = 201
| r <= 255 && g <= 175 && b <= 215 = 202
| r <= 255 && g <= 175 && b <= 255 = 203
| r <= 255 && g <= 215 && b <= 0 = 204
| r <= 255 && g <= 215 && b <= 95 = 205
| r <= 255 && g <= 215 && b <= 135 = 206
| r <= 255 && g <= 215 && b <= 175 = 207
| r <= 255 && g <= 215 && b <= 215 = 208
| r <= 255 && g <= 215 && b <= 255 = 209
| r <= 255 && g <= 255 && b <= 0 = 210
| r <= 255 && g <= 255 && b <= 95 = 211
| r <= 255 && g <= 255 && b <= 135 = 212
| r <= 255 && g <= 255 && b <= 175 = 213
| r <= 255 && g <= 255 && b <= 215 = 214
| r <= 255 && g <= 255 && b <= 255 = 215
| otherwise = error (printf "RGB color %d %d %d does not map to 240 palette."
(fromIntegral r :: Int)
(fromIntegral g :: Int)
(fromIntegral b :: Int))
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