use crate::{__ansi_consts, Ansi, AnsiColor8, Digits};
impl Ansi {
__ansi_consts! {
pub const RESET: [u8; 4] = "\x1b[0m", *b"\x1b[0m";
pub const BOLD: [u8; 4] = "\x1b[1m", *b"\x1b[1m";
pub const BOLD_OFF: [u8; 5] = "\x1b[22m", *b"\x1b[22m";
pub const ITALIC: [u8; 4] = "\x1b[3m", *b"\x1b[3m";
pub const ITALIC_OFF: [u8; 5] = "\x1b[23m", *b"\x1b[23m";
pub const DIM: [u8; 4] = "\x1b[2m", *b"\x1b[2m";
pub const DIM_OFF: [u8; 5] = "\x1b[22m", *b"\x1b[22m";
pub const UNDERLINE: [u8; 4] = "\x1b[4m", *b"\x1b[4m";
pub const UNDERLINE_OFF: [u8; 5] = "\x1b[24m", *b"\x1b[24m";
pub const BLINK: [u8; 4] = "\x1b[5m", *b"\x1b[5m";
pub const BLINK_OFF: [u8; 5] = "\x1b[25m", *b"\x1b[25m";
pub const INVERSE: [u8; 4] = "\x1b[7m", *b"\x1b[7m";
pub const INVERSE_OFF: [u8; 5] = "\x1b[27m", *b"\x1b[27m";
pub const HIDDEN: [u8; 4] = "\x1b[8m", *b"\x1b[8m";
pub const HIDDEN_OFF: [u8; 5] = "\x1b[28m", *b"\x1b[28m";
pub const CROSSED: [u8; 4] = "\x1b[9m", *b"\x1b[9m";
pub const CROSSED_OFF: [u8; 5] = "\x1b[29m", *b"\x1b[29m";
}
}
impl Ansi {
__ansi_consts! {
pub const BLINK_FAST: [u8; 4] = "\x1b[6m", *b"\x1b[6m";
pub const FRAKTUR: [u8; 5] = "\x1b[20m", *b"\x1b[20m";
pub const FRAME: [u8; 5] = "\x1b[51m", *b"\x1b[51m";
pub const ENCIRCLE: [u8; 5] = "\x1b[52m", *b"\x1b[52m";
pub const FRAME_ENCIRCLE_OFF: [u8; 5] = "\x1b[54m", *b"\x1b[54m";
pub const OVERLINE: [u8; 5] = "\x1b[53m", *b"\x1b[53m";
pub const OVERLINE_OFF: [u8; 5] = "\x1b[55m", *b"\x1b[55m";
pub const SUPERSCRIPT: [u8; 5] = "\x1b[73m", *b"\x1b[73m";
pub const SUBSCRIPT: [u8; 5] = "\x1b[74m", *b"\x1b[74m";
pub const BASELINE: [u8; 5] = "\x1b[75m", *b"\x1b[75m";
}
}
impl Ansi {
__ansi_consts! {
pub const UNDERLINE_DOUBLE: [u8; 6] = "\x1b[4:2m", *b"\x1b[4:2m";
pub const UNDERLINE_CURLY: [u8; 6] = "\x1b[4:3m", *b"\x1b[4:3m";
pub const UNDERLINE_DOTTED: [u8; 6] = "\x1b[4:4m", *b"\x1b[4:4m";
pub const UNDERLINE_DASHED: [u8; 6] = "\x1b[4:5m", *b"\x1b[4:5m";
pub const UNDERLINE_DOUBLE_ECMA: [u8; 5] = "\x1b[21m", *b"\x1b[21m";
}
pub const fn FONT(index: u8) -> [u8; 5] {
assert![index <= 9];
[b'\x1b', b'[', b'1', b'0' + index, b'm']
}
}
#[rustfmt::skip]
impl Ansi {
__ansi_consts! {
pub const DEFAULT_UNDERLINE_COLOR: [u8; 5] = "\x1b[59m", *b"\x1b[59m";
}
pub const fn UNDERLINE_COLOR8(color: AnsiColor8) -> [u8; 11] {
let c = color.to_ascii();
[
b'\x1b', b'[', b'5', b'8', b';', b'5', b';',
c[0], c[1], c[2],
b'm',
]
}
pub const fn UNDERLINE_RGB(color: [u8; 3]) -> [u8; 19] {
let [r, g, b] = color;
let [r, g, b] = [
Digits(r).digits10(),
Digits(g).digits10(),
Digits(b).digits10(),
];
[
b'\x1b', b'[', b'5', b'8', b';', b'2', b';',
r[0], r[1], r[2], b';',
g[0], g[1], g[2], b';',
b[0], b[1], b[2],
b'm',
]
}
}