use crate::*;
pub fn color256_fg_color(code: u32) -> String {
if code > 0xFFFFFF {
return String::new();
}
let r: u32 = (code >> 16) & 0xFF;
let g: u32 = (code >> 8) & 0xFF;
let b: u32 = code & 0xFF;
let color_index: u32 = rgb_to_256_color_index(r as u8, g as u8, b as u8);
format!("38;5;{color_index}")
}
pub fn color256_bg_color(code: u32) -> String {
if code > 0xFFFFFF {
return String::new();
}
let r: u32 = (code >> 16) & 0xFF;
let g: u32 = (code >> 8) & 0xFF;
let b: u32 = code & 0xFF;
let color_index: u32 = rgb_to_256_color_index(r as u8, g as u8, b as u8);
format!("48;5;{color_index}")
}
#[inline(always)]
pub fn rgb_fg_color(r: u8, g: u8, b: u8) -> String {
format!("38;2;{r};{g};{b}")
}
#[inline(always)]
pub fn rgb_bg_color(r: u8, g: u8, b: u8) -> String {
format!("48;2;{r};{g};{b}")
}
fn rgb_to_256_color_index(r: u8, g: u8, b: u8) -> u32 {
if r == g && g == b {
if r < 8 {
return 16;
} else if r > 248 {
return 231;
} else {
return 232 + ((r as u32 - 8) * 24 / 248);
}
}
let r_index: u32 = if r < 48 {
0
} else if r < 115 {
1
} else {
(r as u32 - 35) / 40
};
let g_index: u32 = if g < 48 {
0
} else if g < 115 {
1
} else {
(g as u32 - 35) / 40
};
let b_index: u32 = if b < 48 {
0
} else if b < 115 {
1
} else {
(b as u32 - 35) / 40
};
16 + 36 * r_index + 6 * g_index + b_index
}
pub fn output(output: ColorOutput) {
let text: &str = output.text;
let color: ColorType = output.color;
let bg_color: ColorType = output.bg_color;
let bold: bool = output.bold;
let endl: bool = output.endl;
let mut task_list: Task<'_> = Task::default();
task_list.add(Text {
text,
color,
bg_color,
bold,
endl,
});
task_list.run_all();
}
pub fn output_list(output_list: &Vec<ColorOutput>) {
let mut task_list: Task<'_> = Task::default();
for output in output_list {
let text: &str = output.text;
let color: ColorType = output.color;
let bg_color: ColorType = output.bg_color;
let bold: bool = output.bold;
let endl: bool = output.endl;
task_list.add(Text {
text,
color,
bg_color,
bold,
endl,
});
}
task_list.run_all();
}