use ratatui_core::style::Color;
pub(crate) type Rgb = [u8; 3];
#[allow(non_snake_case)]
#[derive(Debug, Default, Clone)]
pub struct ColorTable {
pub BLACK: Rgb,
pub RED: Rgb,
pub GREEN: Rgb,
pub YELLOW: Rgb,
pub BLUE: Rgb,
pub MAGENTA: Rgb,
pub CYAN: Rgb,
pub GRAY: Rgb,
pub DARKGRAY: Rgb,
pub LIGHTRED: Rgb,
pub LIGHTGREEN: Rgb,
pub LIGHTYELLOW: Rgb,
pub LIGHTBLUE: Rgb,
pub LIGHTMAGENTA: Rgb,
pub LIGHTCYAN: Rgb,
pub WHITE: Rgb,
}
impl ColorTable {
pub(crate) fn c2c(
&self,
color: Color,
reset: Rgb,
) -> Rgb {
match color {
Color::Reset => reset,
Color::Black => self.BLACK,
Color::Red => self.RED,
Color::Green => self.GREEN,
Color::Yellow => self.YELLOW,
Color::Blue => self.BLUE,
Color::Magenta => self.MAGENTA,
Color::Cyan => self.CYAN,
Color::Gray => self.GRAY,
Color::DarkGray => self.DARKGRAY,
Color::LightRed => self.LIGHTRED,
Color::LightGreen => self.LIGHTGREEN,
Color::LightYellow => self.LIGHTYELLOW,
Color::LightBlue => self.LIGHTBLUE,
Color::LightMagenta => self.LIGHTMAGENTA,
Color::LightCyan => self.LIGHTCYAN,
Color::White => self.WHITE,
Color::Rgb(r, g, b) => [r, g, b],
Color::Indexed(idx) => ANSI_TO_RGB[idx as usize],
}
}
}
pub(crate) mod named {
use crate::colors::ColorTable;
pub(crate) const DEFAULT_COLORS: ColorTable = ColorTable {
BLACK: [0, 0, 0],
GREEN: [0, 128, 0],
RED: [255, 0, 0],
BLUE: [0, 0, 255],
CYAN: [0, 255, 255],
DARKGRAY: [169, 169, 169],
GRAY: [128, 128, 128],
LIGHTBLUE: [173, 216, 230],
LIGHTCYAN: [224, 255, 255],
LIGHTGREEN: [144, 238, 144],
LIGHTMAGENTA: [255, 128, 255],
LIGHTRED: [240, 128, 128],
LIGHTYELLOW: [255, 255, 224],
MAGENTA: [255, 0, 255],
WHITE: [255, 255, 255],
YELLOW: [255, 255, 0],
};
}
const ANSI_TO_RGB: [Rgb; 256] = [
[0x00, 0x00, 0x00],
[0x80, 0x00, 0x00],
[0x00, 0x80, 0x00],
[0x80, 0x80, 0x00],
[0x00, 0x00, 0x80],
[0x80, 0x00, 0x80],
[0x00, 0x80, 0x80],
[0xc0, 0xc0, 0xc0],
[0x80, 0x80, 0x80],
[0xff, 0x00, 0x00],
[0x00, 0xff, 0x00],
[0xff, 0xff, 0x00],
[0x00, 0x00, 0xff],
[0xff, 0x00, 0xff],
[0x00, 0xff, 0xff],
[0xff, 0xff, 0xff],
[0x00, 0x00, 0x00],
[0x00, 0x00, 0x5f],
[0x00, 0x00, 0x87],
[0x00, 0x00, 0xaf],
[0x00, 0x00, 0xd7],
[0x00, 0x00, 0xff],
[0x00, 0x5f, 0x00],
[0x00, 0x5f, 0x5f],
[0x00, 0x5f, 0x87],
[0x00, 0x5f, 0xaf],
[0x00, 0x5f, 0xd7],
[0x00, 0x5f, 0xff],
[0x00, 0x87, 0x00],
[0x00, 0x87, 0x5f],
[0x00, 0x87, 0x87],
[0x00, 0x87, 0xaf],
[0x00, 0x87, 0xd7],
[0x00, 0x87, 0xff],
[0x00, 0xaf, 0x00],
[0x00, 0xaf, 0x5f],
[0x00, 0xaf, 0x87],
[0x00, 0xaf, 0xaf],
[0x00, 0xaf, 0xd7],
[0x00, 0xaf, 0xff],
[0x00, 0xd7, 0x00],
[0x00, 0xd7, 0x5f],
[0x00, 0xd7, 0x87],
[0x00, 0xd7, 0xaf],
[0x00, 0xd7, 0xd7],
[0x00, 0xd7, 0xff],
[0x00, 0xff, 0x00],
[0x00, 0xff, 0x5f],
[0x00, 0xff, 0x87],
[0x00, 0xff, 0xaf],
[0x00, 0xff, 0xd7],
[0x00, 0xff, 0xff],
[0x5f, 0x00, 0x00],
[0x5f, 0x00, 0x5f],
[0x5f, 0x00, 0x87],
[0x5f, 0x00, 0xaf],
[0x5f, 0x00, 0xd7],
[0x5f, 0x00, 0xff],
[0x5f, 0x5f, 0x00],
[0x5f, 0x5f, 0x5f],
[0x5f, 0x5f, 0x87],
[0x5f, 0x5f, 0xaf],
[0x5f, 0x5f, 0xd7],
[0x5f, 0x5f, 0xff],
[0x5f, 0x87, 0x00],
[0x5f, 0x87, 0x5f],
[0x5f, 0x87, 0x87],
[0x5f, 0x87, 0xaf],
[0x5f, 0x87, 0xd7],
[0x5f, 0x87, 0xff],
[0x5f, 0xaf, 0x00],
[0x5f, 0xaf, 0x5f],
[0x5f, 0xaf, 0x87],
[0x5f, 0xaf, 0xaf],
[0x5f, 0xaf, 0xd7],
[0x5f, 0xaf, 0xff],
[0x5f, 0xd7, 0x00],
[0x5f, 0xd7, 0x5f],
[0x5f, 0xd7, 0x87],
[0x5f, 0xd7, 0xaf],
[0x5f, 0xd7, 0xd7],
[0x5f, 0xd7, 0xff],
[0x5f, 0xff, 0x00],
[0x5f, 0xff, 0x5f],
[0x5f, 0xff, 0x87],
[0x5f, 0xff, 0xaf],
[0x5f, 0xff, 0xd7],
[0x5f, 0xff, 0xff],
[0x87, 0x00, 0x00],
[0x87, 0x00, 0x5f],
[0x87, 0x00, 0x87],
[0x87, 0x00, 0xaf],
[0x87, 0x00, 0xd7],
[0x87, 0x00, 0xff],
[0x87, 0x5f, 0x00],
[0x87, 0x5f, 0x5f],
[0x87, 0x5f, 0x87],
[0x87, 0x5f, 0xaf],
[0x87, 0x5f, 0xd7],
[0x87, 0x5f, 0xff],
[0x87, 0x87, 0x00],
[0x87, 0x87, 0x5f],
[0x87, 0x87, 0x87],
[0x87, 0x87, 0xaf],
[0x87, 0x87, 0xd7],
[0x87, 0x87, 0xff],
[0x87, 0xaf, 0x00],
[0x87, 0xaf, 0x5f],
[0x87, 0xaf, 0x87],
[0x87, 0xaf, 0xaf],
[0x87, 0xaf, 0xd7],
[0x87, 0xaf, 0xff],
[0x87, 0xd7, 0x00],
[0x87, 0xd7, 0x5f],
[0x87, 0xd7, 0x87],
[0x87, 0xd7, 0xaf],
[0x87, 0xd7, 0xd7],
[0x87, 0xd7, 0xff],
[0x87, 0xff, 0x00],
[0x87, 0xff, 0x5f],
[0x87, 0xff, 0x87],
[0x87, 0xff, 0xaf],
[0x87, 0xff, 0xd7],
[0x87, 0xff, 0xff],
[0xaf, 0x00, 0x00],
[0xaf, 0x00, 0x5f],
[0xaf, 0x00, 0x87],
[0xaf, 0x00, 0xaf],
[0xaf, 0x00, 0xd7],
[0xaf, 0x00, 0xff],
[0xaf, 0x5f, 0x00],
[0xaf, 0x5f, 0x5f],
[0xaf, 0x5f, 0x87],
[0xaf, 0x5f, 0xaf],
[0xaf, 0x5f, 0xd7],
[0xaf, 0x5f, 0xff],
[0xaf, 0x87, 0x00],
[0xaf, 0x87, 0x5f],
[0xaf, 0x87, 0x87],
[0xaf, 0x87, 0xaf],
[0xaf, 0x87, 0xd7],
[0xaf, 0x87, 0xff],
[0xaf, 0xaf, 0x00],
[0xaf, 0xaf, 0x5f],
[0xaf, 0xaf, 0x87],
[0xaf, 0xaf, 0xaf],
[0xaf, 0xaf, 0xd7],
[0xaf, 0xaf, 0xff],
[0xaf, 0xd7, 0x00],
[0xaf, 0xd7, 0x5f],
[0xaf, 0xd7, 0x87],
[0xaf, 0xd7, 0xaf],
[0xaf, 0xd7, 0xd7],
[0xaf, 0xd7, 0xff],
[0xaf, 0xff, 0x00],
[0xaf, 0xff, 0x5f],
[0xaf, 0xff, 0x87],
[0xaf, 0xff, 0xaf],
[0xaf, 0xff, 0xd7],
[0xaf, 0xff, 0xff],
[0xd7, 0x00, 0x00],
[0xd7, 0x00, 0x5f],
[0xd7, 0x00, 0x87],
[0xd7, 0x00, 0xaf],
[0xd7, 0x00, 0xd7],
[0xd7, 0x00, 0xff],
[0xd7, 0x5f, 0x00],
[0xd7, 0x5f, 0x5f],
[0xd7, 0x5f, 0x87],
[0xd7, 0x5f, 0xaf],
[0xd7, 0x5f, 0xd7],
[0xd7, 0x5f, 0xff],
[0xd7, 0x87, 0x00],
[0xd7, 0x87, 0x5f],
[0xd7, 0x87, 0x87],
[0xd7, 0x87, 0xaf],
[0xd7, 0x87, 0xd7],
[0xd7, 0x87, 0xff],
[0xd7, 0xaf, 0x00],
[0xd7, 0xaf, 0x5f],
[0xd7, 0xaf, 0x87],
[0xd7, 0xaf, 0xaf],
[0xd7, 0xaf, 0xd7],
[0xd7, 0xaf, 0xff],
[0xd7, 0xd7, 0x00],
[0xd7, 0xd7, 0x5f],
[0xd7, 0xd7, 0x87],
[0xd7, 0xd7, 0xaf],
[0xd7, 0xd7, 0xd7],
[0xd7, 0xd7, 0xff],
[0xd7, 0xff, 0x00],
[0xd7, 0xff, 0x5f],
[0xd7, 0xff, 0x87],
[0xd7, 0xff, 0xaf],
[0xd7, 0xff, 0xd7],
[0xd7, 0xff, 0xff],
[0xff, 0x00, 0x00],
[0xff, 0x00, 0x5f],
[0xff, 0x00, 0x87],
[0xff, 0x00, 0xaf],
[0xff, 0x00, 0xd7],
[0xff, 0x00, 0xff],
[0xff, 0x5f, 0x00],
[0xff, 0x5f, 0x5f],
[0xff, 0x5f, 0x87],
[0xff, 0x5f, 0xaf],
[0xff, 0x5f, 0xd7],
[0xff, 0x5f, 0xff],
[0xff, 0x87, 0x00],
[0xff, 0x87, 0x5f],
[0xff, 0x87, 0x87],
[0xff, 0x87, 0xaf],
[0xff, 0x87, 0xd7],
[0xff, 0x87, 0xff],
[0xff, 0xaf, 0x00],
[0xff, 0xaf, 0x5f],
[0xff, 0xaf, 0x87],
[0xff, 0xaf, 0xaf],
[0xff, 0xaf, 0xd7],
[0xff, 0xaf, 0xff],
[0xff, 0xd7, 0x00],
[0xff, 0xd7, 0x5f],
[0xff, 0xd7, 0x87],
[0xff, 0xd7, 0xaf],
[0xff, 0xd7, 0xd7],
[0xff, 0xd7, 0xff],
[0xff, 0xff, 0x00],
[0xff, 0xff, 0x5f],
[0xff, 0xff, 0x87],
[0xff, 0xff, 0xaf],
[0xff, 0xff, 0xd7],
[0xff, 0xff, 0xff],
[0x08, 0x08, 0x08],
[0x12, 0x12, 0x12],
[0x1c, 0x1c, 0x1c],
[0x26, 0x26, 0x26],
[0x30, 0x30, 0x30],
[0x3a, 0x3a, 0x3a],
[0x44, 0x44, 0x44],
[0x4e, 0x4e, 0x4e],
[0x58, 0x58, 0x58],
[0x62, 0x62, 0x62],
[0x6c, 0x6c, 0x6c],
[0x76, 0x76, 0x76],
[0x80, 0x80, 0x80],
[0x8a, 0x8a, 0x8a],
[0x94, 0x94, 0x94],
[0x9e, 0x9e, 0x9e],
[0xa8, 0xa8, 0xa8],
[0xb2, 0xb2, 0xb2],
[0xbc, 0xbc, 0xbc],
[0xc6, 0xc6, 0xc6],
[0xd0, 0xd0, 0xd0],
[0xda, 0xda, 0xda],
[0xe4, 0xe4, 0xe4],
[0xee, 0xee, 0xee],
];