49 lines
1.4 KiB
Rust
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(())
|
|
}
|