Parameterized by language
parent
40a4692be5
commit
ae155ccfe5
82
main.typ
82
main.typ
|
|
@ -1,51 +1,51 @@
|
||||||
#import "cv/cv.typ": *
|
#import "cv/cv.typ": *
|
||||||
#import "cv/utils.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, (
|
let uservars = (
|
||||||
personal: yaml(("data/", "en", "/personal.yaml").join()),
|
headingfont: "Roboto",
|
||||||
experience: yaml(("data/", "en", "/experience.yaml").join()),
|
bodyfont: "Roboto",
|
||||||
education: yaml(("data/", "en", "/education.yaml").join()),
|
fontsize: 10pt, // 10pt, 11pt, 12pt
|
||||||
skills: yaml(("data/", "en", "/skills.yaml").join()),
|
linespacing: 6pt,
|
||||||
languages: yaml("data/en/languages.yaml"),
|
showAddress: true, // true/false show address in contact info
|
||||||
))
|
showNumber: true, // true/false show phone number in contact info
|
||||||
|
headingsmallcaps: false,
|
||||||
#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
|
|
||||||
)
|
)
|
||||||
|
|
||||||
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
|
||||||
doc = setrules(uservars, doc)
|
}
|
||||||
doc = showrules(uservars, doc)
|
|
||||||
doc = customrules(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)
|
show: doc => cvinit(doc)
|
||||||
#cvwork(language, cvdata)
|
|
||||||
#cveducation(language, cvdata)
|
cvheading(language, cvdata, uservars)
|
||||||
#cvlanguages(language, cvdata)
|
cvwork(language, cvdata)
|
||||||
#cvskills(language, cvdata)
|
cveducation(language, cvdata)
|
||||||
#endnote()
|
cvlanguages(language, cvdata)
|
||||||
|
cvskills(language, cvdata)
|
||||||
|
endnote()
|
||||||
|
}
|
||||||
|
|
@ -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"
|
||||||
|
|
@ -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)
|
||||||
Loading…
Reference in New Issue