summaryrefslogtreecommitdiff
path: root/book/book.typ
blob: 14e617a00ad93e5f6123004c0e471d3d330390c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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 "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 [
    #elem
  ]

#element(json.decode(read("book.json")))