1use ratatui_core::style::Color;
2
3pub(crate) type Rgb = [u8; 3];
4
5#[allow(non_snake_case)]
6#[derive(Debug, Default, Clone)]
7pub struct ColorTable {
8 pub BLACK: Rgb,
9 pub RED: Rgb,
10 pub GREEN: Rgb,
11 pub YELLOW: Rgb,
12 pub BLUE: Rgb,
13 pub MAGENTA: Rgb,
14 pub CYAN: Rgb,
15 pub GRAY: Rgb,
16 pub DARKGRAY: Rgb,
17 pub LIGHTRED: Rgb,
18 pub LIGHTGREEN: Rgb,
19 pub LIGHTYELLOW: Rgb,
20 pub LIGHTBLUE: Rgb,
21 pub LIGHTMAGENTA: Rgb,
22 pub LIGHTCYAN: Rgb,
23 pub WHITE: Rgb,
24}
25
26impl ColorTable {
27 pub(crate) fn c2c(
28 &self,
29 color: Color,
30 reset: Rgb,
31 ) -> Rgb {
32 match color {
33 Color::Reset => reset,
34 Color::Black => self.BLACK,
35 Color::Red => self.RED,
36 Color::Green => self.GREEN,
37 Color::Yellow => self.YELLOW,
38 Color::Blue => self.BLUE,
39 Color::Magenta => self.MAGENTA,
40 Color::Cyan => self.CYAN,
41 Color::Gray => self.GRAY,
42 Color::DarkGray => self.DARKGRAY,
43 Color::LightRed => self.LIGHTRED,
44 Color::LightGreen => self.LIGHTGREEN,
45 Color::LightYellow => self.LIGHTYELLOW,
46 Color::LightBlue => self.LIGHTBLUE,
47 Color::LightMagenta => self.LIGHTMAGENTA,
48 Color::LightCyan => self.LIGHTCYAN,
49 Color::White => self.WHITE,
50 Color::Rgb(r, g, b) => [r, g, b],
51 Color::Indexed(idx) => ANSI_TO_RGB[idx as usize],
52 }
53 }
54}
55
56pub(crate) mod named {
58 use crate::colors::ColorTable;
59
60 pub(crate) const DEFAULT_COLORS: ColorTable = ColorTable {
61 BLACK: [0, 0, 0],
62 GREEN: [0, 128, 0],
63 RED: [255, 0, 0],
64 BLUE: [0, 0, 255],
65 CYAN: [0, 255, 255],
66 DARKGRAY: [169, 169, 169],
67 GRAY: [128, 128, 128],
68 LIGHTBLUE: [173, 216, 230],
69 LIGHTCYAN: [224, 255, 255],
70 LIGHTGREEN: [144, 238, 144],
71 LIGHTMAGENTA: [255, 128, 255],
72 LIGHTRED: [240, 128, 128],
73 LIGHTYELLOW: [255, 255, 224],
74 MAGENTA: [255, 0, 255],
75 WHITE: [255, 255, 255],
76 YELLOW: [255, 255, 0],
77 };
78}
79
80const ANSI_TO_RGB: [Rgb; 256] = [
84 [0x00, 0x00, 0x00],
85 [0x80, 0x00, 0x00],
86 [0x00, 0x80, 0x00],
87 [0x80, 0x80, 0x00],
88 [0x00, 0x00, 0x80],
89 [0x80, 0x00, 0x80],
90 [0x00, 0x80, 0x80],
91 [0xc0, 0xc0, 0xc0],
92 [0x80, 0x80, 0x80],
93 [0xff, 0x00, 0x00],
94 [0x00, 0xff, 0x00],
95 [0xff, 0xff, 0x00],
96 [0x00, 0x00, 0xff],
97 [0xff, 0x00, 0xff],
98 [0x00, 0xff, 0xff],
99 [0xff, 0xff, 0xff],
100 [0x00, 0x00, 0x00],
101 [0x00, 0x00, 0x5f],
102 [0x00, 0x00, 0x87],
103 [0x00, 0x00, 0xaf],
104 [0x00, 0x00, 0xd7],
105 [0x00, 0x00, 0xff],
106 [0x00, 0x5f, 0x00],
107 [0x00, 0x5f, 0x5f],
108 [0x00, 0x5f, 0x87],
109 [0x00, 0x5f, 0xaf],
110 [0x00, 0x5f, 0xd7],
111 [0x00, 0x5f, 0xff],
112 [0x00, 0x87, 0x00],
113 [0x00, 0x87, 0x5f],
114 [0x00, 0x87, 0x87],
115 [0x00, 0x87, 0xaf],
116 [0x00, 0x87, 0xd7],
117 [0x00, 0x87, 0xff],
118 [0x00, 0xaf, 0x00],
119 [0x00, 0xaf, 0x5f],
120 [0x00, 0xaf, 0x87],
121 [0x00, 0xaf, 0xaf],
122 [0x00, 0xaf, 0xd7],
123 [0x00, 0xaf, 0xff],
124 [0x00, 0xd7, 0x00],
125 [0x00, 0xd7, 0x5f],
126 [0x00, 0xd7, 0x87],
127 [0x00, 0xd7, 0xaf],
128 [0x00, 0xd7, 0xd7],
129 [0x00, 0xd7, 0xff],
130 [0x00, 0xff, 0x00],
131 [0x00, 0xff, 0x5f],
132 [0x00, 0xff, 0x87],
133 [0x00, 0xff, 0xaf],
134 [0x00, 0xff, 0xd7],
135 [0x00, 0xff, 0xff],
136 [0x5f, 0x00, 0x00],
137 [0x5f, 0x00, 0x5f],
138 [0x5f, 0x00, 0x87],
139 [0x5f, 0x00, 0xaf],
140 [0x5f, 0x00, 0xd7],
141 [0x5f, 0x00, 0xff],
142 [0x5f, 0x5f, 0x00],
143 [0x5f, 0x5f, 0x5f],
144 [0x5f, 0x5f, 0x87],
145 [0x5f, 0x5f, 0xaf],
146 [0x5f, 0x5f, 0xd7],
147 [0x5f, 0x5f, 0xff],
148 [0x5f, 0x87, 0x00],
149 [0x5f, 0x87, 0x5f],
150 [0x5f, 0x87, 0x87],
151 [0x5f, 0x87, 0xaf],
152 [0x5f, 0x87, 0xd7],
153 [0x5f, 0x87, 0xff],
154 [0x5f, 0xaf, 0x00],
155 [0x5f, 0xaf, 0x5f],
156 [0x5f, 0xaf, 0x87],
157 [0x5f, 0xaf, 0xaf],
158 [0x5f, 0xaf, 0xd7],
159 [0x5f, 0xaf, 0xff],
160 [0x5f, 0xd7, 0x00],
161 [0x5f, 0xd7, 0x5f],
162 [0x5f, 0xd7, 0x87],
163 [0x5f, 0xd7, 0xaf],
164 [0x5f, 0xd7, 0xd7],
165 [0x5f, 0xd7, 0xff],
166 [0x5f, 0xff, 0x00],
167 [0x5f, 0xff, 0x5f],
168 [0x5f, 0xff, 0x87],
169 [0x5f, 0xff, 0xaf],
170 [0x5f, 0xff, 0xd7],
171 [0x5f, 0xff, 0xff],
172 [0x87, 0x00, 0x00],
173 [0x87, 0x00, 0x5f],
174 [0x87, 0x00, 0x87],
175 [0x87, 0x00, 0xaf],
176 [0x87, 0x00, 0xd7],
177 [0x87, 0x00, 0xff],
178 [0x87, 0x5f, 0x00],
179 [0x87, 0x5f, 0x5f],
180 [0x87, 0x5f, 0x87],
181 [0x87, 0x5f, 0xaf],
182 [0x87, 0x5f, 0xd7],
183 [0x87, 0x5f, 0xff],
184 [0x87, 0x87, 0x00],
185 [0x87, 0x87, 0x5f],
186 [0x87, 0x87, 0x87],
187 [0x87, 0x87, 0xaf],
188 [0x87, 0x87, 0xd7],
189 [0x87, 0x87, 0xff],
190 [0x87, 0xaf, 0x00],
191 [0x87, 0xaf, 0x5f],
192 [0x87, 0xaf, 0x87],
193 [0x87, 0xaf, 0xaf],
194 [0x87, 0xaf, 0xd7],
195 [0x87, 0xaf, 0xff],
196 [0x87, 0xd7, 0x00],
197 [0x87, 0xd7, 0x5f],
198 [0x87, 0xd7, 0x87],
199 [0x87, 0xd7, 0xaf],
200 [0x87, 0xd7, 0xd7],
201 [0x87, 0xd7, 0xff],
202 [0x87, 0xff, 0x00],
203 [0x87, 0xff, 0x5f],
204 [0x87, 0xff, 0x87],
205 [0x87, 0xff, 0xaf],
206 [0x87, 0xff, 0xd7],
207 [0x87, 0xff, 0xff],
208 [0xaf, 0x00, 0x00],
209 [0xaf, 0x00, 0x5f],
210 [0xaf, 0x00, 0x87],
211 [0xaf, 0x00, 0xaf],
212 [0xaf, 0x00, 0xd7],
213 [0xaf, 0x00, 0xff],
214 [0xaf, 0x5f, 0x00],
215 [0xaf, 0x5f, 0x5f],
216 [0xaf, 0x5f, 0x87],
217 [0xaf, 0x5f, 0xaf],
218 [0xaf, 0x5f, 0xd7],
219 [0xaf, 0x5f, 0xff],
220 [0xaf, 0x87, 0x00],
221 [0xaf, 0x87, 0x5f],
222 [0xaf, 0x87, 0x87],
223 [0xaf, 0x87, 0xaf],
224 [0xaf, 0x87, 0xd7],
225 [0xaf, 0x87, 0xff],
226 [0xaf, 0xaf, 0x00],
227 [0xaf, 0xaf, 0x5f],
228 [0xaf, 0xaf, 0x87],
229 [0xaf, 0xaf, 0xaf],
230 [0xaf, 0xaf, 0xd7],
231 [0xaf, 0xaf, 0xff],
232 [0xaf, 0xd7, 0x00],
233 [0xaf, 0xd7, 0x5f],
234 [0xaf, 0xd7, 0x87],
235 [0xaf, 0xd7, 0xaf],
236 [0xaf, 0xd7, 0xd7],
237 [0xaf, 0xd7, 0xff],
238 [0xaf, 0xff, 0x00],
239 [0xaf, 0xff, 0x5f],
240 [0xaf, 0xff, 0x87],
241 [0xaf, 0xff, 0xaf],
242 [0xaf, 0xff, 0xd7],
243 [0xaf, 0xff, 0xff],
244 [0xd7, 0x00, 0x00],
245 [0xd7, 0x00, 0x5f],
246 [0xd7, 0x00, 0x87],
247 [0xd7, 0x00, 0xaf],
248 [0xd7, 0x00, 0xd7],
249 [0xd7, 0x00, 0xff],
250 [0xd7, 0x5f, 0x00],
251 [0xd7, 0x5f, 0x5f],
252 [0xd7, 0x5f, 0x87],
253 [0xd7, 0x5f, 0xaf],
254 [0xd7, 0x5f, 0xd7],
255 [0xd7, 0x5f, 0xff],
256 [0xd7, 0x87, 0x00],
257 [0xd7, 0x87, 0x5f],
258 [0xd7, 0x87, 0x87],
259 [0xd7, 0x87, 0xaf],
260 [0xd7, 0x87, 0xd7],
261 [0xd7, 0x87, 0xff],
262 [0xd7, 0xaf, 0x00],
263 [0xd7, 0xaf, 0x5f],
264 [0xd7, 0xaf, 0x87],
265 [0xd7, 0xaf, 0xaf],
266 [0xd7, 0xaf, 0xd7],
267 [0xd7, 0xaf, 0xff],
268 [0xd7, 0xd7, 0x00],
269 [0xd7, 0xd7, 0x5f],
270 [0xd7, 0xd7, 0x87],
271 [0xd7, 0xd7, 0xaf],
272 [0xd7, 0xd7, 0xd7],
273 [0xd7, 0xd7, 0xff],
274 [0xd7, 0xff, 0x00],
275 [0xd7, 0xff, 0x5f],
276 [0xd7, 0xff, 0x87],
277 [0xd7, 0xff, 0xaf],
278 [0xd7, 0xff, 0xd7],
279 [0xd7, 0xff, 0xff],
280 [0xff, 0x00, 0x00],
281 [0xff, 0x00, 0x5f],
282 [0xff, 0x00, 0x87],
283 [0xff, 0x00, 0xaf],
284 [0xff, 0x00, 0xd7],
285 [0xff, 0x00, 0xff],
286 [0xff, 0x5f, 0x00],
287 [0xff, 0x5f, 0x5f],
288 [0xff, 0x5f, 0x87],
289 [0xff, 0x5f, 0xaf],
290 [0xff, 0x5f, 0xd7],
291 [0xff, 0x5f, 0xff],
292 [0xff, 0x87, 0x00],
293 [0xff, 0x87, 0x5f],
294 [0xff, 0x87, 0x87],
295 [0xff, 0x87, 0xaf],
296 [0xff, 0x87, 0xd7],
297 [0xff, 0x87, 0xff],
298 [0xff, 0xaf, 0x00],
299 [0xff, 0xaf, 0x5f],
300 [0xff, 0xaf, 0x87],
301 [0xff, 0xaf, 0xaf],
302 [0xff, 0xaf, 0xd7],
303 [0xff, 0xaf, 0xff],
304 [0xff, 0xd7, 0x00],
305 [0xff, 0xd7, 0x5f],
306 [0xff, 0xd7, 0x87],
307 [0xff, 0xd7, 0xaf],
308 [0xff, 0xd7, 0xd7],
309 [0xff, 0xd7, 0xff],
310 [0xff, 0xff, 0x00],
311 [0xff, 0xff, 0x5f],
312 [0xff, 0xff, 0x87],
313 [0xff, 0xff, 0xaf],
314 [0xff, 0xff, 0xd7],
315 [0xff, 0xff, 0xff],
316 [0x08, 0x08, 0x08],
317 [0x12, 0x12, 0x12],
318 [0x1c, 0x1c, 0x1c],
319 [0x26, 0x26, 0x26],
320 [0x30, 0x30, 0x30],
321 [0x3a, 0x3a, 0x3a],
322 [0x44, 0x44, 0x44],
323 [0x4e, 0x4e, 0x4e],
324 [0x58, 0x58, 0x58],
325 [0x62, 0x62, 0x62],
326 [0x6c, 0x6c, 0x6c],
327 [0x76, 0x76, 0x76],
328 [0x80, 0x80, 0x80],
329 [0x8a, 0x8a, 0x8a],
330 [0x94, 0x94, 0x94],
331 [0x9e, 0x9e, 0x9e],
332 [0xa8, 0xa8, 0xa8],
333 [0xb2, 0xb2, 0xb2],
334 [0xbc, 0xbc, 0xbc],
335 [0xc6, 0xc6, 0xc6],
336 [0xd0, 0xd0, 0xd0],
337 [0xda, 0xda, 0xda],
338 [0xe4, 0xe4, 0xe4],
339 [0xee, 0xee, 0xee],
340];