#let lang = sys.inputs.at("lang", default: "en") #set par(justify: true) #set page("a4") #set text(lang: lang.split("_").at(0), size: 15pt, font: "FreeSans") #show list: set text(font: "Gluten", fill: rgb(46, 73, 0), size: 20pt) #show heading.where(level: 2): set text(font: "Great Vibes", size: 40pt) #let document_flags = ("image_attribution",) #let load_locale(name) = { read("locale/"+name+".ini") .split("\n") .filter(l => l != "[hurrycurry]") .filter(l => l != "") .map(l => l.split("=")) .map(((x,y)) => (x.trim(), y.trim().replace("%n","\n"))) } #let translations = { let d = (a:1) for (k,v) in load_locale("en") { d.insert(k,v) } for (k,v) in load_locale(lang) { d.insert(k,v) } d } #let tr(s) = translations.at(s, default: text(fill: red)[TRANSLATION: #s]) #let msgstr(o) = if "translation" in o { tr(o.translation.id) } else { o.text } #let element(elem) = if elem.t == "document" [ #for e in elem.es [ #element(e) ] ] else if elem.t == "page" [ #page( background: if "background" in elem { image( "book-repo/"+elem.background+".jpeg", fit: "cover", height: 100%, width: 100% )} else { none }, [ #for e in elem.es [ #element(e) ] ]) ] else if elem.t == "text" [ #text( font: elem.font, size: elem.size * 1pt, fill: rgb(elem.color), weight: if "bold" in elem { "bold" } else { "regular" }, msgstr(elem.s) ) ] else if elem.t == "list" [ #list(..elem.es.map(element)) ] else if elem.t == "par" [ #par(..elem.es.map(element)) ] else if elem.t == "table" [ #table(columns: elem.es.at(0).len(), ..elem.es.flatten().map(element)) ] else if elem.t == "conditional" [ #if (elem.cond in document_flags) == elem.value [ #element(elem.e) ] ] else [ #elem ] #element(json.decode(read("book.json")))