valkyrie-wit 0.0.2

Valkyrie Language Server
Documentation
use std::fmt::Write;

#[derive(Default)]
pub struct ColoredWriter {
    pub buffer: String,
    pub schema: ColorSchema,
}

pub struct ColorSchema {
    pub bad: String,
    pub keyword: String,
    pub class: String,
    pub attribute: String,
}

impl Default for ColorSchema {
    fn default() -> Self {
        Self {
            bad: "F44747".to_string(),
            keyword: "C679DD".to_string(),
            class: "E5C17C".to_string(),
            attribute: "57B6C2".to_string(),
        }
    }
}

impl ColoredWriter {
    pub fn write_text(&mut self, text: &str) {
        self.buffer.push_str(text);
    }
    pub fn write_newline(&mut self) {
        self.buffer.push_str("<br/>");
    }
    pub fn write_bad(&mut self, text: &str) {
        self.buffer.push_str(&format!("<span style=\"color: #{}\">{}</span>", self.schema.bad, text));
    }
    pub fn write_keyword(&mut self, text: &str) {
        self.buffer.push_str(&format!("<span style=\"color: #{}\">{}</span>", self.schema.keyword, text));
    }
    pub fn write_modifiers<T: AsRef<str>>(&mut self, text: &[T]) {
        for modifier in text.iter() {
            self.buffer.push_str(&format!("<span style=\"color: #{}\">{}</span>", self.schema.keyword, modifier.as_ref()));
            self.buffer.push_str(" ");
        }
    }
    pub fn write_class(&mut self, text: &str) {
        write!(self.buffer, "<span style='color:#{color}'>{text}</span>", color = self.schema.class, text = text).ok();
    }
    pub fn write_attribute(&mut self, text: &str) {
        write!(self.buffer, "<span style='color:#{color}'>{text}</span>", color = self.schema.attribute, text = text).ok();
    }
    pub fn finish(self) -> String {
        self.buffer
    }
}