use ratatui::style::Color;
pub fn parse_color(s: &str) -> Color {
match s.to_lowercase().as_str() {
"black" => Color::Black,
"red" => Color::Red,
"green" => Color::Green,
"yellow" => Color::Yellow,
"blue" => Color::Blue,
"magenta" => Color::Magenta,
"cyan" => Color::Cyan,
"gray" | "grey" => Color::Gray,
"darkgray" | "darkgrey" => Color::DarkGray,
"lightred" => Color::LightRed,
"lightgreen" => Color::LightGreen,
"lightyellow" => Color::LightYellow,
"lightblue" => Color::LightBlue,
"lightmagenta" => Color::LightMagenta,
"lightcyan" => Color::LightCyan,
"white" => Color::White,
_ => {
if s.starts_with('#') && s.len() == 7 {
if let (Ok(r), Ok(g), Ok(b)) = (
u8::from_str_radix(&s[1..3], 16),
u8::from_str_radix(&s[3..5], 16),
u8::from_str_radix(&s[5..7], 16),
) {
return Color::Rgb(r, g, b);
}
}
Color::Reset
}
}
}
pub fn is_valid_color_str(s: &str) -> bool {
matches!(
s.to_lowercase().as_str(),
"black"
| "red"
| "green"
| "yellow"
| "blue"
| "magenta"
| "cyan"
| "gray"
| "grey"
| "darkgray"
| "darkgrey"
| "lightred"
| "lightgreen"
| "lightyellow"
| "lightblue"
| "lightmagenta"
| "lightcyan"
| "white"
) || (s.starts_with('#')
&& s.len() == 7
&& u8::from_str_radix(&s[1..3], 16).is_ok()
&& u8::from_str_radix(&s[3..5], 16).is_ok()
&& u8::from_str_radix(&s[5..7], 16).is_ok())
}