Both the EN and NL version of are now generated from the same base latex file

This commit is contained in:
2023-08-30 20:45:59 +02:00
parent 0e9af4f540
commit 55765e71a1
25 changed files with 319 additions and 356 deletions

View File

@@ -9,23 +9,28 @@ use regex::{Captures, Regex};
use serde::Deserialize;
use walkdir::WalkDir;
#[derive(Debug, Deserialize)]
#[serde(rename_all = "snake_case")]
enum FrontMatter {
Project { title: String, url: String },
}
fn main() -> anyhow::Result<()> {
dotenvy::dotenv().ok();
generate_latex()?;
generate_lang("en")?;
generate_lang("nl")?;
generate_latex_from_md()?;
generate_latex_from_yml()?;
generate_latex_private()?;
generate_readme()?;
Ok(())
}
fn generate_latex() -> anyhow::Result<()> {
#[derive(Debug, Deserialize)]
#[serde(rename_all = "snake_case")]
enum FrontMatter {
Project { title: String, url: String },
}
fn generate_latex_from_md() -> anyhow::Result<()> {
let matter = Matter::<YAML>::new();
let prefix = Path::new("../markdown");
@@ -37,12 +42,12 @@ fn generate_latex() -> anyhow::Result<()> {
continue;
}
println!("{entry:#?}");
let mut file = File::open(entry.path()).unwrap();
let mut contents = String::new();
file.read_to_string(&mut contents).unwrap();
println!("Converting '{entry:?}' into LaTeX");
let result = matter.parse(&contents);
let content = format!(
"\\begin{{markdown}}\n{}\n\\end{{markdown}}\n",
@@ -62,15 +67,72 @@ fn generate_latex() -> anyhow::Result<()> {
content
};
let path = entry.path().strip_prefix(prefix)?.with_extension("tex");
let path = entry.path().strip_prefix(prefix)?.with_extension("md.tex");
let path = Path::new("../latex").join(path);
create_dir_all(path.parent().unwrap())?;
let mut file = File::create(path)?;
file.write_all(contents.as_bytes())?;
}
Ok(())
}
#[derive(Debug, Deserialize)]
struct Entry {
name: String,
description: String,
at: String,
start: isize,
end: Option<isize>,
}
fn generate_latex_from_yml() -> anyhow::Result<()> {
let prefix = Path::new("../yaml");
for entry in WalkDir::new(prefix).into_iter() {
let entry = entry?;
if entry.metadata()?.is_dir() {
continue;
}
let mut file = File::open(entry.path()).unwrap();
let mut contents = String::new();
file.read_to_string(&mut contents).unwrap();
println!("Converting '{entry:?}' into LaTeX");
let data: Vec<Entry> = serde_yaml::from_str(&contents)?;
let mut content = String::new();
for entry in data {
let date = if entry.end.is_none() {
format!("{} -- \\Now", entry.start)
} else if entry.start == entry.end.unwrap() {
format!("{}", entry.start)
} else {
format!("{} -- {}", entry.start, entry.end.unwrap())
};
content = format!(
"{content}\\entry\n\t{{{date}}}\n\t{{{}}}\n\t{{{}}}\n\t{{{}}}\n",
entry.name, entry.at, entry.description
);
}
let path = entry.path().strip_prefix(prefix)?.with_extension("yml.tex");
let path = Path::new("../latex").join(path);
create_dir_all(path.parent().unwrap())?;
let mut file = File::create(path)?;
file.write_all(content.as_bytes())?;
}
Ok(())
}
fn generate_latex_private() -> anyhow::Result<()> {
let private = format!(
"\\newcommand{{\\city}}{{{}}}\n\\newcommand{{\\phone}}{{{}}}\n\\newcommand{{\\email}}{{{}}}\n",
"\\newcommand{{\\City}}{{{}}}\n\\newcommand{{\\Phone}}{{{}}}\n\\newcommand{{\\Email}}{{{}}}\n",
std::env::var("CITY")?,
std::env::var("PHONE")?,
std::env::var("EMAIL")?,
@@ -118,3 +180,20 @@ fn generate_readme() -> anyhow::Result<()> {
Ok(())
}
fn generate_lang(lang: &str) -> anyhow::Result<()> {
let main = Path::new("../main.tex");
let mut file = File::open(main)?;
let mut contents = String::new();
file.read_to_string(&mut contents)?;
let contents = contents.replace("{{lang}}", lang);
let path = main.with_extension(format!("{lang}.tex"));
println!("Generating '{path:?}'");
let mut file = File::create(path)?;
file.write_all(contents.as_bytes()).unwrap();
Ok(())
}