aboutsummaryrefslogtreecommitdiff
path: root/book/book.typ
diff options
context:
space:
mode:
Diffstat (limited to 'book/book.typ')
-rw-r--r--book/book.typ58
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")))