use crate::soutln;
fn red_text(text: &str) -> String {
format!("\x1b[1;31m{text}\x1b[0m")
}
fn cyan_text(text: &str) -> String {
format!("\x1B[36m{text}\x1B[0m")
}
fn bold_text(text: &str) -> String {
format!("\x1B[1m{text}\x1B[0m")
}
pub fn pretty_print_info(text: &str) {
soutln!(
"{}",
bold_text(&format!("{} {}", cyan_text("Info:"), bold_text(text)))
);
}
pub fn pretty_print_error(text: &str) {
soutln!(
"{}",
bold_text(&format!("{} {}", red_text("Error:"), bold_text(text)))
);
}
pub fn pretty_print_syntax_error(preamble: &str, text: &str, line: usize, column: usize) {
let erronous_line: &str = text.lines().nth(line - 1).unwrap_or(text);
let line_pointer = "└─>";
pretty_print_error(preamble);
soutln!(" {}", red_text("│"));
soutln!(" {} {}", red_text(line_pointer), erronous_line);
soutln!(
" {} {}",
" ".repeat(line_pointer.chars().count() + column - 1),
red_text("^")
);
}