neum 0.1.0

A CSS formating template
Documentation
use neum_parse::{
    lexer::{self, Token},
    parse::{self, Name},
};

use std::env;
use std::fs::File;
use std::io::{BufWriter, Write};
use std::path::Path;

fn main() {
    let mut total: Vec<(Name, Vec<Token>)> = Vec::new();
    let out_dir = env::var("OUT_DIR").unwrap();
    let output = Path::new(&out_dir).join("formated.rs");
    let mut file = BufWriter::new(File::create(&output).unwrap());
    for i in walkdir::WalkDir::new(Path::new("src/default")) {
        let i = i
            .as_ref()
            .unwrap_or_else(|_| panic!("Cant get a file, {i:?}"));
        if i.file_type().is_file() {
            let file = i.path().display().to_string();
            let content = std::fs::read_to_string(file.clone())
                .unwrap_or_else(|_| panic!("Cant read the contents of {file}"));
            for i in parse::parse(lexer::lex(file.clone(), content.clone()), file, content) {
                total.push(i.clone());
            }
        }
    }
    let mut text = String::new();
    for i in total {
        text.push_str(&format!(
            "(Name {{ regex: Regex::new(r\"{}\").unwrap(), variables: vec![{}] }}, vec![{}]),",
            i.0.regex,
            i.0.variables
                .iter()
                .map(|x| format!("{x:?}.to_string()"))
                .collect::<Vec<_>>()
                .join(","),
            {
                let mut tokens = String::new();
                for i in i.1 {
                    tokens.push_str(
                        match i {
                            Token::String(x) => format!("String({x:?}.to_string()),"),
                            _ => format!("{i:?},"),
                        }
                        .as_str(),
                    );
                }
                tokens
            }
        ));
    }
    writeln!(
        &mut file,
        "use neum_parse::{{parse::{{*}}, lexer::{{*, Token::*}}}};
use regex::Regex;
lazy_static::lazy_static!{{
    pub static ref VALUES: Vec<(Name, Vec<Token>)> = vec![{text}];
}}"
    )
    .expect("Cant write to file");
}