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"))) | 
