diff options
author | metamuffin <metamuffin@disroot.org> | 2024-10-13 20:18:07 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-10-13 20:18:07 +0200 |
commit | e8b482d8e787d919af59fc5d18db137aa127b51b (patch) | |
tree | 3f46952b96f0da1f8167987b6294614cccb38b17 /book/book.typ | |
parent | 7b32caf001e8abdfddbaff56851a8951489b69ab (diff) | |
download | hurrycurry-e8b482d8e787d919af59fc5d18db137aa127b51b.tar hurrycurry-e8b482d8e787d919af59fc5d18db137aa127b51b.tar.bz2 hurrycurry-e8b482d8e787d919af59fc5d18db137aa127b51b.tar.zst |
add book back to main repo
Diffstat (limited to 'book/book.typ')
-rw-r--r-- | book/book.typ | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/book/book.typ b/book/book.typ new file mode 100644 index 00000000..39f3cc46 --- /dev/null +++ b/book/book.typ @@ -0,0 +1,58 @@ +#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 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 "translated" in o { tr(o.translated) } 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.cols, ..elem.es.flatten().map(element)) + ] else [ + #elem + ] + +#element(json.decode(read("book.json"))) |