#![warn(missing_docs)]
#![allow(dead_code)]
mod compiler;
#[doc(hidden)]
pub mod scanner;
pub mod value;
use std::{collections::HashMap, io::Write};
use value::C;
use crate::compiler::Compiler;
#[doc(hidden)]
pub fn compile(source: &str, out: &mut impl Write) {
let mut vars = HashMap::new();
vars.insert("green".to_string(), C::rgb(0, 150, 75));
vars.insert("cyan".to_string(), C::rgb(0, 150, 150));
let mut compiler = Compiler::new(source, out, vars);
compiler.compile();
}
pub fn style(text: &str) -> String {
let vars = HashMap::new();
let mut out: Vec<u8> = vec![];
let mut compiler = Compiler::new(text, &mut out, vars);
compiler.compile();
unsafe {String::from_utf8_unchecked(out)}
}
pub fn template(save: &str) -> impl for<'a> Fn(&'a str) -> String + '_ {
move |text: &str| -> String { style(format!("{save}{text}").as_str()) }
}
#[test]
fn print() {
assert_eq!("\x1b[1m text\u{1b}[0m", style("[b] text"))
}