v6/src/generator/css.rs

49 lines
1.4 KiB
Rust

use crate::generator;
use rsass::compile_scss_path;
use rsass::output::{Format, Style};
use std::io::Write;
const CHARSET: &'static str = r#"@charset "UTF-8";"#;
pub fn generate() -> anyhow::Result<()> {
let format = Format {
style: if cfg!(debug_assertions) {
Style::Expanded
} else {
Style::Compressed
},
precision: 3,
};
let main = compile_scss_path(&generator::content_path("css/main.scss"), format)?;
// strip the charset, it will be added to actually output files in generate_theme
let main_slice: &[u8];
let charset_bytes = CHARSET.as_bytes();
if main.starts_with(charset_bytes) {
main_slice = &main[charset_bytes.len()..];
} else {
main_slice = &main;
}
generate_theme("auto", format, main_slice)?;
generate_theme("light", format, main_slice)?;
generate_theme("dark", format, main_slice)?;
Ok(())
}
fn generate_theme(name: &'static str, format: Format, main: &[u8]) -> anyhow::Result<()> {
let res = compile_scss_path(
&generator::content_path(format!("css/{}.scss", name)),
format,
)?;
let mut writer =
generator::util::output_writer(format!("css/{}.css", name)).expect("output writer");
write!(writer, "{}\n", CHARSET).unwrap();
writer.write_all(&res).expect("writing theme css");
writer.write_all(main).expect("writing main");
Ok(())
}