Skip to main content

ratatui_wgpu/
colors.rs

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
56/// <https://www.w3.org/TR/SVG11/types.html#ColorKeywords>
57pub(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
80/// This could be split into `[standard table]` + `[high intensity table]` +
81/// `<6x6x6 cube fn>` + `<grayscale step fn>`, but a lookup table is only 768
82/// bytes and way simpler to implement.
83const 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];