railroad_dsl 0.1.1

A small DSL to generate syntax-diagrams
extern crate railroad_dsl;

use std::fs;
use std::io;
use std::io::{Read, Write};

fn main() -> Result<(), io::Error> {
    let mut outp = fs::File::create("examples/example_diagrams.html")?;
    outp.write_all(b"<html>")?;

    let mut paths = fs::read_dir("./examples")?
        .into_iter()
        .filter_map(|d| d.ok())
        .collect::<Vec<_>>();
    paths.sort_by_key(|e| e.file_name());

    for path in paths {
        if let Some(filename) = path.file_name().to_str() {
            if filename.ends_with("diagram.txt") {
                println!("Generating from `{}`", filename);
                let mut buffer = String::new();
                fs::File::open(path.path())?.read_to_string(&mut buffer)?;
                let (width, _height, dia) = railroad_dsl::compile(&buffer).unwrap();
                write!(outp, "<h3>Generated from <i>`{}`</i></h3>", filename)?;
                write!(outp, "<pre>{}</pre><br>", railroad_dsl::encode(&buffer))?;
                write!(outp, "<div style=\"width: {}px; height: auto; max-height: 100%, max-width: 100%\">{}</div>", width, dia)?;
                outp.write_all(b"<hr>")?;
            }
        }
    }

    outp.write_all(b"</html>")?;

    println!("Done");

    Ok(())
}