generate_syntax_css/
generate-syntax-css.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use std::{
    fs::File,
    io::{BufWriter, Write},
    path::Path,
};

use anyhow::Context;
use bobashare_web::HIGHLIGHT_CLASS_PREFIX;
use syntect::{
    highlighting::ThemeSet,
    html::{css_for_theme_with_class_style, ClassStyle},
};

fn main() -> anyhow::Result<()> {
    let root_var = std::env::var("CARGO_MANIFEST_DIR").context("CARGO_MANIFEST_DIR was not set")?;
    let root = Path::new(&root_var);

    let css_file = File::create(root.join("static/css/highlight/").join("syntax.css"))
        .context("error creating syntax.css")?;
    let mut css_writer = BufWriter::new(css_file);

    let mut theme_set = ThemeSet::load_defaults();
    theme_set
        .add_from_folder(root.join("highlight"))
        .context("error loading highligting themes")?;
    let class_style = ClassStyle::SpacedPrefixed {
        prefix: HIGHLIGHT_CLASS_PREFIX,
    };

    writeln!(
        css_writer,
        "@media not all and (prefers-color-scheme: light) {{"
    )?;
    writeln!(
        css_writer,
        "{}",
        css_for_theme_with_class_style(&theme_set.themes["bobascheme-dark"], class_style,)
            .context("error generating CSS for dark theme")?
    )?;
    writeln!(css_writer, "}}")?;

    writeln!(css_writer, "@media (prefers-color-scheme: light) {{")?;
    writeln!(
        css_writer,
        "{}",
        // TODO: make bobascheme-light
        css_for_theme_with_class_style(&theme_set.themes["InspiredGitHub"], class_style,)
            .context("error generating CSS for light theme")?
    )?;
    writeln!(css_writer, "}}")?;

    Ok(())
}