Skip to content

Commit

Permalink
yanky mewos
Browse files Browse the repository at this point in the history
  • Loading branch information
CutestNekoAqua committed Jul 14, 2024
1 parent 040cf36 commit 3eac94e
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 7 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ version = "0.1.0"
actix-web = "4.8.0"
anyhow = "1.0.86"
clap = { version = "4.3.14", features = ["derive"] }
serde = "1.0.204"
tectonic = { version = "0.15.0", default-features = false, features = [
"external-harfbuzz",
"geturl-curl",
Expand Down
113 changes: 106 additions & 7 deletions src/main.rs
Original file line number Diff line number Diff line change
@@ -1,17 +1,74 @@
use actix_web::{get, post, web, App, HttpResponse, HttpServer, Responder};
use clap::Parser;
use serde::Deserialize;

#[derive(Deserialize)]
struct Data {
amtname: String,
amtstreet: String,
amtcity: String,
fname: String,
lname: String,
street: String,
city: String,
email: String,
phone: String,
dob: String,
birthplace: String,
change_name: Option<bool>,
prev_gender: String,
post_gender: String, // remove the x
post_fname: Option<String>,
}

#[get("/")]
async fn hello() -> impl Responder {
let res = gen_pdf();
async fn hello(data: web::Query<Data>) -> impl Responder {
let keep_gender = &data.post_gender.eq("xnone");
let res = gen_pdf(
data.amtname,
data.amtstreet,
data.amtcity,
data.fname,
data.lname,
data.street,
data.city,
data.email,
data.phone,
data.dob,
data.birthplace,
data.change_name.unwrap_or(false),
keep_gender,
data.data.prev_gender,
data.post_gender.split("x").collect()[1],
data.post_fname.unwrap_or("".to_string()),
);
if let Ok(good) = res {
return HttpResponse::Ok().body(good);
}
HttpResponse::UnprocessableEntity().body("Ein Fehler ist aufgetreten.")
}

fn gen_pdf() -> anyhow::Result<Vec<u8>> {
let latex = r#"
fn gen_pdf(
amtname: String,
amtstreet: String,
amtcity: String,
fname: String,
lname: String,
street: String,
city: String,
email: String,
phone: String,
dob: String,
birthplace: String,
change_name: bool,
keep_gender: bool,
prev_gender: String,
post_gender: String, // remove the x
post_fname: String,
) -> anyhow::Result<Vec<u8>> {
let slashslash = r#"\\"#;

let mut latex = r#"
\documentclass[parskip=half,paper=a4]{scrlttr2}
\usepackage{polyglossia}
Expand Down Expand Up @@ -39,10 +96,10 @@ fn gen_pdf() -> anyhow::Result<Vec<u8>> {
\begin{document}
\setkomavar{fromname}{Max Mustermann}
\setkomavar{date}{1. August. 2024}
\setkomavar{date}{1. August. 2024} % remove this once past 1st August
\setkomavar{fromaddress}{strasse\\plzustadt}
\setkomavar{fromemail}{anon@example.com}
\setkomavar{fromphone}{+49~221~69\,800\,700}
\setkomavar{fromphone}{08000800}
\setkomavar{dob}{9. September 1999}
\setkomavar{birthplace}{Geisterstadt}
Expand Down Expand Up @@ -81,7 +138,49 @@ Zur Terminvereinbarung können Sie mich auch per E‐Mail unter \usekomavar{fro
\end{document}
"#;
"#.to_string();
latex = latex.replace("amtname", &amtname);
latex = latex.replace("amtstrasse", &amtstreet);
latex = latex.replace("amtstadt", &amtcity);

latex = latex.replace(
"wantsname{true}",
"wantsname{" + &change_name.to_string() + "}",
);
latex = latex.replace(
"wantssex{false}",
"wantssex{" + &keep_gender.to_string() + "}",
);

latex = latex.replace("{newsex}{weiblich}", "{newsex}{" + &post_gender + "}");
latex = latex.replace("{newname}{Erika}", "{newname}{" + &post_fname + "}");

latex = latex.replace(
"{previoussex}{männlich}",
"{previoussex}{" + &prev_gender + "}",
);
latex = latex.replace("{previousname}{Max}", "{previousname}{" + &fname + "}");

latex = latex.replace("{dob}{9. September 1999}", "{dob}{" + &dob + "}");
latex = latex.replace(
"{birthplace}{Geisterstadt}",
"{birthplace}{" + &birthplace + "}",
);

latex = latex.replace(
"{fromname}{Max Mustermann}",
"{fromname}{" + &fname + " " + &lname + "}",
);
latex = latex.replace(
"{fromaddress}{strasse\\plzustadt}",
"{fromaddress}{" + &street + &slashslash + &city + "}",
);
latex = latex.replace(
"{fromemail}{anon@example.com}",
"{fromemail}{" + &email + "}",
);
latex = latex.replace("{fromphone}{08000800}", "{fromphone}{" + &phone + "}");

let res = tectonic::latex_to_pdf(latex);
if let Ok(good) = res {
return Ok(good);
Expand Down

0 comments on commit 3eac94e

Please sign in to comment.