Both the EN and NL version of are now generated from the same base latex file
This commit is contained in:
42
tool/Cargo.lock
generated
42
tool/Cargo.lock
generated
@@ -23,6 +23,12 @@ version = "0.15.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
|
||||
|
||||
[[package]]
|
||||
name = "equivalent"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
|
||||
|
||||
[[package]]
|
||||
name = "gray_matter"
|
||||
version = "0.2.6"
|
||||
@@ -34,6 +40,22 @@ dependencies = [
|
||||
"yaml-rust",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.14.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "2.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
|
||||
dependencies = [
|
||||
"equivalent",
|
||||
"hashbrown",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itoa"
|
||||
version = "1.0.9"
|
||||
@@ -145,6 +167,19 @@ dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_yaml"
|
||||
version = "0.9.25"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574"
|
||||
dependencies = [
|
||||
"indexmap",
|
||||
"itoa",
|
||||
"ryu",
|
||||
"serde",
|
||||
"unsafe-libyaml",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.29"
|
||||
@@ -165,6 +200,7 @@ dependencies = [
|
||||
"gray_matter",
|
||||
"regex",
|
||||
"serde",
|
||||
"serde_yaml",
|
||||
"walkdir",
|
||||
]
|
||||
|
||||
@@ -174,6 +210,12 @@ version = "1.0.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
|
||||
|
||||
[[package]]
|
||||
name = "unsafe-libyaml"
|
||||
version = "0.2.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa"
|
||||
|
||||
[[package]]
|
||||
name = "walkdir"
|
||||
version = "2.3.3"
|
||||
|
||||
@@ -13,4 +13,5 @@ gray_matter = { version = "0.2.6", features = [
|
||||
], default-features = false }
|
||||
regex = "1.9.4"
|
||||
serde = { version = "1.0.188", features = ["derive"] }
|
||||
serde_yaml = "0.9.25"
|
||||
walkdir = "2.3.3"
|
||||
|
||||
103
tool/src/main.rs
103
tool/src/main.rs
@@ -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(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user