From ae155ccfe5502dad95afee4ec6969c03958843d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Desmaretz?= Date: Fri, 26 Jan 2024 00:25:39 +0100 Subject: [PATCH] Parameterized by language --- cv_en.typ | 3 ++ cv_fr.typ | 3 ++ main.typ | 82 +++++++++++++++++++++++++++---------------------------- render.sh | 15 ++++++++++ test.typ | 72 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 134 insertions(+), 41 deletions(-) create mode 100644 cv_en.typ create mode 100644 cv_fr.typ create mode 100755 render.sh create mode 100644 test.typ diff --git a/cv_en.typ b/cv_en.typ new file mode 100644 index 0000000..8b38cb0 --- /dev/null +++ b/cv_en.typ @@ -0,0 +1,3 @@ +#import "main.typ" + +#main.render("en") \ No newline at end of file diff --git a/cv_fr.typ b/cv_fr.typ new file mode 100644 index 0000000..1296ef5 --- /dev/null +++ b/cv_fr.typ @@ -0,0 +1,3 @@ +#import "main.typ" + +#main.render("fr") \ No newline at end of file diff --git a/main.typ b/main.typ index ba3d0f6..6cd963d 100644 --- a/main.typ +++ b/main.typ @@ -1,51 +1,51 @@ #import "cv/cv.typ": * #import "cv/utils.typ" -#let language = "fr" +#let render(language) = { + let cvdata = utils.filterLanguage(language, ( + personal: yaml("data/personal.yaml"), + experience: yaml("data/experience.yaml"), + education: yaml("data/education.yaml"), + skills: yaml("data/skills.yaml"), + languages: yaml("data/languages.yaml"), + )) -#let cvdata = utils.filterLanguage(language, ( - personal: yaml(("data/", "en", "/personal.yaml").join()), - experience: yaml(("data/", "en", "/experience.yaml").join()), - education: yaml(("data/", "en", "/education.yaml").join()), - skills: yaml(("data/", "en", "/skills.yaml").join()), - languages: yaml("data/en/languages.yaml"), -)) - -#let uservars = ( - headingfont: "Roboto", - bodyfont: "Roboto", - fontsize: 10pt, // 10pt, 11pt, 12pt - linespacing: 6pt, - showAddress: true, // true/false show address in contact info - showNumber: true, // true/false show phone number in contact info - headingsmallcaps: false, -) - -#let customrules(doc) = { - // add custom document style rules here - set page( - paper: "a4", // a4, us-letter - // numbering: "1 / 1", - number-align: center, // left, center, right - margin: 1.25cm, // 1.25cm, 1.87cm, 2.5cm + let uservars = ( + headingfont: "Roboto", + bodyfont: "Roboto", + fontsize: 10pt, // 10pt, 11pt, 12pt + linespacing: 6pt, + showAddress: true, // true/false show address in contact info + showNumber: true, // true/false show phone number in contact info + headingsmallcaps: false, ) - doc -} + let customrules(doc) = { + // add custom document style rules here + set page( + paper: "a4", // a4, us-letter + // numbering: "1 / 1", + number-align: center, // left, center, right + margin: 1.25cm, // 1.25cm, 1.87cm, 2.5cm + ) -#let cvinit(doc) = { - doc = setrules(uservars, doc) - doc = showrules(uservars, doc) - doc = customrules(doc) + doc + } - doc -} + let cvinit(doc) = { + doc = setrules(uservars, doc) + doc = showrules(uservars, doc) + doc = customrules(doc) -#show: doc => cvinit(doc) + doc + } -#cvheading(language, cvdata, uservars) -#cvwork(language, cvdata) -#cveducation(language, cvdata) -#cvlanguages(language, cvdata) -#cvskills(language, cvdata) -#endnote() \ No newline at end of file + show: doc => cvinit(doc) + + cvheading(language, cvdata, uservars) + cvwork(language, cvdata) + cveducation(language, cvdata) + cvlanguages(language, cvdata) + cvskills(language, cvdata) + endnote() +} \ No newline at end of file diff --git a/render.sh b/render.sh new file mode 100755 index 0000000..d4b879a --- /dev/null +++ b/render.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +### VARS ### +NAME="Felix" +SURNAME="Desmaretz" + +### CLEAN ### +mkdir -p out +rm -f out/* + +### COMPILE ### +# EN +typst compile --font-path fonts cv_en.typ && mv cv_en.pdf "out/Resume_${SURNAME}_${NAME}.pdf" +# FR +typst compile --font-path fonts cv_fr.typ && mv cv_fr.pdf "out/CV_${SURNAME}_${NAME}.pdf" diff --git a/test.typ b/test.typ new file mode 100644 index 0000000..a5f69eb --- /dev/null +++ b/test.typ @@ -0,0 +1,72 @@ +#let language = "en" + +#let cvdata = ( + personal: yaml("data/en/personal.yaml"), + experience: yaml("data/en/experience.yaml"), + education: yaml("data/en/education.yaml") + // skills: yaml("data/en/skills.yaml") +) + + +#let w = cvdata.experience + +#let getWithLang(lang, data) = { + if type(data) == dictionary { + data.at(lang) + } else { + data + } +} + +#(regex("\d{4}-\d{2}-\d{2}") in "2023-04-12") + +#let myarr = (2, 1, 3, 4,) + +// #myarr.sorted(key: a => getWithLang(a.gt)) + + +#let filterLanguage(lang, data) = { + if type(data) == dictionary { + if data.at(lang, default: none) == none { + data = data + .pairs() + .map(xs => (xs.first(), filterLanguage(lang, xs.last()))) + .fold((:), (acc, xs) => { + acc.insert(xs.first(), xs.last()) + acc + }) + } + else { + data = filterLanguage(lang, data.at(lang)) + } + } else if type(data) == array { + data = data.map(v => filterLanguage(lang, v)) + } + + data +} + +#filterLanguage("fr", cvdata) + + +#let dict = ( + name: "myName", + address: "myAddress" +) + +#let a = (a: 1, b: 2) + +#let f(data) = { + data + .pairs() + .map(xs => (xs.first(), xs.last())) + .fold((:), (acc, xs) => { + acc.insert(xs.first(), xs.last()) + acc + }) +} + +#f(dict) + +#let a = (:) +#type(a) \ No newline at end of file