From c0ed350f8e18fe4475d5777ac346ccc964189a11 Mon Sep 17 00:00:00 2001 From: Tri Rianto Utomo Date: Tue, 6 Oct 2026 23:19:44 +0700 Subject: [PATCH] jilid:0.2.0 From shuretokki/jilid@0b58317e4ffc3638b57ee1b26edb4983087687db --- packages/preview/jilid/0.2.0/LICENSE | 44 ++ packages/preview/jilid/0.2.0/README.md | 590 ++++++++++++++++++ packages/preview/jilid/0.2.0/docs/example.pdf | Bin 0 -> 159380 bytes packages/preview/jilid/0.2.0/lib.typ | 4 + .../preview/jilid/0.2.0/src/components.typ | 137 ++++ packages/preview/jilid/0.2.0/src/config.typ | 276 ++++++++ packages/preview/jilid/0.2.0/src/document.typ | 211 +++++++ packages/preview/jilid/0.2.0/src/labels.typ | 67 ++ packages/preview/jilid/0.2.0/src/matter.typ | 235 +++++++ .../preview/jilid/0.2.0/src/pages/cover.typ | 163 +++++ .../preview/jilid/0.2.0/src/pages/footer.typ | 56 ++ .../jilid/0.2.0/src/pages/outlines.typ | 238 +++++++ .../preview/jilid/0.2.0/src/rules/figures.typ | 80 +++ .../jilid/0.2.0/src/rules/headings.typ | 67 ++ .../preview/jilid/0.2.0/src/rules/refs.typ | 38 ++ .../preview/jilid/0.2.0/src/rules/text.typ | 58 ++ packages/preview/jilid/0.2.0/src/state.typ | 27 + packages/preview/jilid/0.2.0/src/utils.typ | 51 ++ packages/preview/jilid/0.2.0/src/validate.typ | 64 ++ .../preview/jilid/0.2.0/template/main.typ | 160 +++++ .../preview/jilid/0.2.0/template/refs.bib | 14 + packages/preview/jilid/0.2.0/thumbnail.png | Bin 0 -> 72040 bytes packages/preview/jilid/0.2.0/typst.toml | 21 + 23 files changed, 2601 insertions(+) create mode 100644 packages/preview/jilid/0.2.0/LICENSE create mode 100644 packages/preview/jilid/0.2.0/README.md create mode 100644 packages/preview/jilid/0.2.0/docs/example.pdf create mode 100644 packages/preview/jilid/0.2.0/lib.typ create mode 100644 packages/preview/jilid/0.2.0/src/components.typ create mode 100644 packages/preview/jilid/0.2.0/src/config.typ create mode 100644 packages/preview/jilid/0.2.0/src/document.typ create mode 100644 packages/preview/jilid/0.2.0/src/labels.typ create mode 100644 packages/preview/jilid/0.2.0/src/matter.typ create mode 100644 packages/preview/jilid/0.2.0/src/pages/cover.typ create mode 100644 packages/preview/jilid/0.2.0/src/pages/footer.typ create mode 100644 packages/preview/jilid/0.2.0/src/pages/outlines.typ create mode 100644 packages/preview/jilid/0.2.0/src/rules/figures.typ create mode 100644 packages/preview/jilid/0.2.0/src/rules/headings.typ create mode 100644 packages/preview/jilid/0.2.0/src/rules/refs.typ create mode 100644 packages/preview/jilid/0.2.0/src/rules/text.typ create mode 100644 packages/preview/jilid/0.2.0/src/state.typ create mode 100644 packages/preview/jilid/0.2.0/src/utils.typ create mode 100644 packages/preview/jilid/0.2.0/src/validate.typ create mode 100644 packages/preview/jilid/0.2.0/template/main.typ create mode 100644 packages/preview/jilid/0.2.0/template/refs.bib create mode 100644 packages/preview/jilid/0.2.0/thumbnail.png create mode 100644 packages/preview/jilid/0.2.0/typst.toml diff --git a/packages/preview/jilid/0.2.0/LICENSE b/packages/preview/jilid/0.2.0/LICENSE new file mode 100644 index 0000000000..617facd13a --- /dev/null +++ b/packages/preview/jilid/0.2.0/LICENSE @@ -0,0 +1,44 @@ +MIT License + +Copyright (c) 2026 Tri Rianto Utomo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--- + +The files in the `template/` directory are licensed under MIT No Attribution: + +MIT No Attribution + +Copyright (c) 2026 Tri Rianto Utomo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/preview/jilid/0.2.0/README.md b/packages/preview/jilid/0.2.0/README.md new file mode 100644 index 0000000000..366be3ea4f --- /dev/null +++ b/packages/preview/jilid/0.2.0/README.md @@ -0,0 +1,590 @@ +# jilid + +A Typst template for Indonesian university reports. + +See the [example.pdf](docs/example.pdf) file to see how it looks. + +## Usage + +You can use this template in the Typst web app by clicking "Start from +template" on the dashboard and searching for `jilid`. + +Alternatively, you can use the CLI to kick this project off using the +command + +```sh +typst init @preview/jilid +``` + +Typst will create a new directory with all the files needed to get you +started. + +The template initializes your project with a sample call to the `jilid` +function in a show rule. If you want to change an existing project to use this template, add a show rule like this at the top of your file: + +```typ +#import "@preview/jilid:0.2.0": jilid, frontmatter, appendix + +#show: jilid.with( + title: [Judul Laporan], + kind: [Laporan Kerja Praktik], + course: "Nama Mata Kuliah", + lecturers: (name: "Nama Dosen, S.Kom., M.Kom.", id: "10000000000000000"), + students: ( + (name: "Nama Mahasiswa", id: "1000000001"), + ), + program: "Teknik Informatika", + faculty: "Teknik", + university: "Universitas Negeri", + year: "2026", + bibliography: bibliography("refs.bib", style: "apa"), + // logo: image("logo.png"), + // cover-details: (([Mitra], [Nama Mitra]),), + // typography: (font-family: "Times New Roman"), + // margin: "print", + // numbering: (position: "top"), +) + +#frontmatter(title: [Kata Pengantar])[ ... ] + += Pendahuluan +... + +#appendix(title: [Data Pengujian])[ ... ] +``` + +## Fonts + +The body font is Typst's bundled Libertinus Serif. Most campus guidelines ask for Times New Roman. To use it, install it or upload the font files to your web app project, then set: + +```typ +#show: jilid.with(typography: (font-family: "Times New Roman")) +``` + +## Packages used + +- [zebraw](https://typst.app/universe/package/zebraw): code blocks with + line numbers (turn off with `code: (zebraw: false)`). Re-exported, so + `#import "@preview/jilid:0.2.0": zebraw` gives you its full API. + +## Document structure + +jilid displays your document in this order: + +1. Cover, when `title` is set +2. Front matter, from `#frontmatter(title: [..])[..]` +3. Daftar Isi, then Daftar Tabel, Gambar, Kode and Lampiran when the + document has any +4. Chapters, from `= Heading` +5. Bibliography, from the `bibliography` option +6. Appendices, from `#appendix(title: [..])[..]` + +## Configuration + +This template exports the `jilid` function with the named arguments +below. It also takes a single positional argument: the body of your +document, which `#show: jilid.with(..)` passes for you. + +Option groups such as `cover` or `footer` take a dictionary, and only the +keys you give change, e.g. `footer: (left: [Laporan Akhir])`. + +### Document information + +- `title`\ + type: [content] or [str]\ + default: `""`\ + description: Document title, on the cover and in the PDF metadata. + +- `kind`\ + type: [content] or `none`\ + default: `none`\ + description: Document kind on the cover, e.g. `[Laporan Praktikum]`. + +- `subtitle`\ + type: [content] or [str]\ + default: `""`\ + description: Second title line on the cover. + +- `cover-details`\ + type: [array]\ + default: `()`\ + description: Extra `(label, value)` rows under the title, e.g. `(([Mitra Kolaborator:], [Nama Mitra]),)`. + +- `course`\ + type: [content] or [str]\ + default: `""`\ + description: Course name, after "Mata Kuliah :". + +- `lecturers`\ + type: [dictionary] or [array]\ + default: `()`\ + description: One `(name: .., id: ..)` dictionary or an array of them. `id` is optional. + +- `students`\ + type: [dictionary] or [array]\ + default: `()`\ + description: One `(name: .., id: ..)` dictionary or an array of them. `id` is optional, and `name` may be content. + +- `program`, `department`, `faculty`\ + type: [content] or [str]\ + default: `""`\ + description: Printed with their label, e.g. `faculty: "Teknik"` gives "FAKULTAS TEKNIK". A value that already starts with the label, such as `"Fakultas Teknik"`, is not prefixed twice. + +- `university`, `year`\ + type: [content] or [str]\ + default: `""`\ + description: Bottom of the cover. + +- `logo`\ + type: [content] or `none`\ + default: `none`\ + description: The logo on the cover, e.g. `image("logo.png")`. + +- `bibliography`\ + type: [content] or `none`\ + default: `none`\ + description: The result of a call to the [bibliography function][bibliography-fn], e.g. `bibliography("refs.bib", style: "apa")`. + +- `lang`\ + type: [str]\ + default: `"id"`\ + description: `"id"` or `"en"`. Other languages go through `labels`. + +- `paper`\ + type: [str]\ + default: `"a4"`\ + description: A [paper size string]. + +- `margin`\ + type: [str], [length] or [dictionary]\ + default: `"digital"`\ + description: `"print"` has 4 cm on the left and 3 cm elsewhere, for bound copies. `"digital"` has 1 inch all round. Any [page margin] value also works. + +- `include-cover`\ + type: [bool] or [auto]\ + default: `auto`\ + description: `auto` shows the cover when `title` is set. + +### `cover` + +- `top`\ + type: [length]\ + default: `2cm`\ + description: Space above the title. + +- `logo-width`\ + type: [length]\ + default: `8cm`\ + description: Logo width, unless the image sets its own. + +- `kind-pos`\ + type: [str]\ + default: `"bottom"`\ + description: `"top"` puts `kind` above the title, `"bottom"` below it. + +- `gap`\ + type: [length]\ + default: `0.2cm`\ + description: Space between the course, lecturer and student blocks. + +- `gap-institution`\ + type: [length]\ + default: `1cm`\ + description: Space kept above the university block. + +- `gap-logo`\ + type: [length]\ + default: `0.5cm`\ + description: Space kept above and below the logo. + +- `student-columns`\ + type: [int] or [auto]\ + default: `auto`\ + description: Columns of the student list. `auto` uses the fewest columns up to 3 that fit the page. + +- `student-id-pos`\ + type: [str]\ + default: `"right"`\ + description: `"right"` puts the student id beside the name, `"below"` under it. + +- `title`, `kind`, `subtitle`, `details`, `label`, `course`, `lecturer-name`, `student-name`, `id`, `institution`\ + type: [dictionary]\ + default: see below\ + description: Text style of each cover text. A style takes any [`text`][text] argument, such as `size`, `weight`, `style`, `fill` or `tracking`, plus `upper` and `underline`. + + - `title`: `(size: 18pt, weight: "bold", upper: true)` + - `kind`: `(size: 14pt, weight: "bold", upper: true)` + - `subtitle`: `(size: 18pt, weight: "bold", upper: true)` + - `details`: `(size: 14pt, weight: "bold")`, the `cover-details` rows + - `label`: `(:)`, "Mata Kuliah :", "Dosen Pengampu :", "Disusun oleh :" + - `course`: `(weight: "bold")` + - `lecturer-name`: `(:)` + - `student-name`: `(:)` + - `id`: `(:)`, the "NIP ..." and "NIM ..." lines + - `institution`: `(weight: "bold", upper: true)`, university, faculty, department, program and year + +- `institution-order`\ + type: [array]\ + default: `("university", "faculty", "department", "program", "year")`\ + description: Institution lines from top to bottom. Leave a key out to hide its line. + +- `institution-render`\ + type: [function] or [auto]\ + default: `auto`\ + description: Draws the institution block yourself. The function gets one dictionary with `university`, `faculty`, `department`, `program`, `year` and `lines`, the filled lines in `institution-order`. for example, `institution-render: it => strong(it.lines.join(" ยท "))`. + +- `render`\ + type: [function] or [auto]\ + default: `auto`\ + description: Draws the whole cover yourself. The function gets one dictionary with `title`, `kind`, `subtitle`, `details`, `course`, `lecturers`, `students`, `logo`, `university`, `faculty`, `department`, `program` (the last three already prefixed, e.g. "FAKULTAS Teknik"), `year` and `labels`. The styles and layout options above no longer apply. + +If the cover runs onto a second page, lower `logo-width`, the `details` +size or the `gap-*` options, or set `student-columns`. + +for example: + +```typ +#show: jilid.with( + kind: [Laporan], + cover: ( + kind: (style: "italic"), + student-name: (style: "normal", upper: true), + ), + labels: (students: [Oleh]), +) +``` + +### `typography` + +- `font-family`\ + type: [str], [array] or [auto]\ + default: `auto`\ + description: Body font, or a list of fonts to try in order. `auto` uses Typst's bundled Libertinus Serif. + +- `font-size`\ + type: [length]\ + default: `12pt`\ + description: Body text size. + +- `caption-size`\ + type: [length]\ + default: `10pt`\ + description: Figure and table caption size. + +- `caption-gap`\ + type: [length]\ + default: `1em`\ + description: Space between a figure and its caption. + +- `table-size`\ + type: [length]\ + default: `10pt`\ + description: Text size inside tables. + +- `url`\ + type: [dictionary]\ + default: `(font: auto, size: 0.85em, fill: blue.darken(20%), underline: true)`\ + description: Text style of web links. `font: auto` uses the code font. for example, `url: (font: "Libertinus Serif", size: 1em)` writes links in the body font. + +- `caption`\ + type: [function] or [auto]\ + default: `auto`\ + description: Draws each caption yourself. The function gets one dictionary with `supplement` ("Gambar"), `number` ("3.1", "L1.1" in appendices), `body` and `kind`. `caption-size` still applies. for example, `caption: it => strong[#it.supplement #it.number. #it.body]`. + +### `paragraph` + +- `justify`\ + type: [bool]\ + default: `true`\ + description: Justify paragraphs. + +- `indent`\ + type: [length]\ + default: `0.63cm`\ + description: First-line indent. + +- `leading`\ + type: [length]\ + default: `0.575em`\ + description: Space between lines. + +- `spacing`\ + type: [length]\ + default: `1.15em`\ + description: Space between paragraphs. + +- `list-indent`\ + type: [length]\ + default: `0cm`\ + description: Space before numbered and bullet markers. + +- `marker-width`\ + type: [length]\ + default: `0.75cm`\ + description: Width of the marker column. List text starts after it. + +### `numbering` + +- `front`\ + type: [str]\ + default: `"i"`\ + description: Page number style before the first chapter. + +- `back`\ + type: [str]\ + default: `"body"`\ + description: Appendix page numbers. `"body"` continues the chapter page numbers, `"front"` continues the front matter ones. + +- `position`\ + type: [str]\ + default: `"bottom"`\ + description: `"top"` puts chapter and appendix page numbers at the top right, except on pages that open a chapter. Front matter stays at the bottom. + +- `chapter`\ + type: [str]\ + default: `"I"`\ + description: Chapter number style. `"I"` gives BAB I, `"1"` gives BAB 1. + +- `appendix`\ + type: [str]\ + default: `"1"`\ + description: Appendix number style. `"1"` gives Lampiran 1, `"A"` gives Lampiran A. + +- `heading`\ + type: [str]\ + default: `"1.1."`\ + description: Section number style inside a chapter. + +- `appendix-prefix`\ + type: [bool]\ + default: `true`\ + description: Put "Lampiran 1." before each appendix title. + +### `headings` + +- `h1`\ + type: [dictionary]\ + default: `(size: 12pt, above: 24pt, below: 18pt, pagebreak: true, uppercase: true)`\ + description: Chapter and front matter titles. `pagebreak` starts each chapter on a new page. `uppercase` writes the title in capitals, on the page and in DAFTAR ISI. + +- `h2`\ + type: [dictionary]\ + default: `(size: 12pt, above: 24pt, below: 18pt, indent: 0cm)`\ + description: Level-2 headings. + +- `h3`\ + type: [dictionary]\ + default: `(size: 12pt, above: 14pt, below: 18pt, indent: 0cm)`\ + description: Level-3 headings. + +- `h4`\ + type: [dictionary]\ + default: `(size: 12pt, above: 12pt, below: 18pt, indent: 0cm)`\ + description: Level-4 headings and deeper. + +- `appendix`\ + type: [dictionary]\ + default: `(uppercase: false)`\ + description: Numbered appendix titles, e.g. "Lampiran 1. Hasil Wawancara". + +### `outlines` + +- `toc`\ + type: [bool]\ + default: `true`\ + description: Show DAFTAR ISI. + +- `depth`\ + type: [int]\ + default: `3`\ + description: Heading levels in DAFTAR ISI. + +- `tables`, `figures`, `codes`\ + type: [bool]\ + default: `true`\ + description: Show DAFTAR TABEL, GAMBAR and KODE when the document has any. + +- `appendices`\ + type: [bool]\ + default: `true`\ + description: Show DAFTAR LAMPIRAN when there are appendices. + +- `toc-appendices`\ + type: [bool]\ + default: `false`\ + description: List each appendix in DAFTAR ISI too. `false` lists only the LAMPIRAN title, as most campus guidelines do. + +- `h1`\ + type: [dictionary]\ + default: `(weight: "bold")`\ + description: Text style of chapter rows in DAFTAR ISI, like the cover styles. + +- `leader`\ + type: [str], [content] or `none`\ + default: `"."`\ + description: Text repeated between an entry and its page number. `none` removes it. + +- `align-titles`\ + type: [str] or `none`\ + default: `"each"`\ + description: Where titles start in Daftar Gambar, Tabel, Kode and Lampiran. `"each"` starts every title in a list at the same place, after the widest number such as "Gambar 2.10". `"shared"` uses one place for all of these lists. `none` puts each title right after its number. + +- `toc-indent`\ + type: [str], [auto] or [length]\ + default: `"title"`\ + description: Where titles start in DAFTAR ISI. `"title"` lines up the chapter titles and starts each row below chapter level under the title of the level above, so "1.1" sits under "PENDAHULUAN". A length such as `1cm` also lines up the chapter titles and moves each lower level by that length, and `0cm` puts those rows at the left. `auto` puts each title right after its number and uses the Typst default for the rows below. + +### `footer` + +- `enabled`\ + type: [bool]\ + default: `true`\ + description: Show a footer on every page except the cover. + +- `left`\ + type: [content] or `none`\ + default: `none`\ + description: Footer text, above the page number. + +- `show-page-number`\ + type: [bool]\ + default: `true`\ + description: Show the page number. + +- `page-number-align`\ + type: [alignment]\ + default: `center`\ + description: Page number alignment. + +- `text`\ + type: [dictionary]\ + default: `(size: 9pt, weight: "bold")`\ + description: Text style of `left`, like the cover styles. + +- `render`\ + type: [function] or [auto]\ + default: `auto`\ + description: Draws the footer yourself. The function gets one dictionary with `number` (the page number, or `none` where it is not shown), `left` (the current footer text) and `part` (`"front"`, `"main"` or `"back"`). The other footer options, except `enabled` and `show-page-number`, no longer apply. + +for example, "Halaman 3" on the right: + +```typ +footer: ( + left: [Laporan Praktikum], + render: it => grid( + columns: (1fr, auto), + emph(it.left), if it.number != none [Halaman #it.number], + ), +) +``` + +### `code` + +- `zebraw`\ + type: [bool] or [dictionary]\ + default: `true`\ + description: Code blocks with line numbers via [zebraw](https://typst.app/universe/package/zebraw). `false` gives a plain shaded block. A dictionary passes options to zebraw, e.g. `(lang: false)`. + +- `fill`\ + type: [color]\ + default: `luma(240)`\ + description: Code block background. + +- `font`\ + type: [str] or [auto]\ + default: `auto`\ + description: Code font. `auto` keeps Typst's bundled monospace font. + +- `size`\ + type: [length]\ + default: `10pt`\ + description: Code text size. + +### `labels` + +type: [dictionary]\ +default: `(:)`\ +description: Every word jilid puts on the page. `lang` picks the defaults, +and `labels` replaces single words with your own [content] or [str]. + +for example: + +```typ +labels: ( + students: [Disusun oleh : \ Kelompok 3], // cover, with the group below + student-id: none, // cover: the student number without "NIM" + figure: "Gbr.", // captions and refs: "Gbr. 2.1" + toc: [ISI], // "DAFTAR ISI" +) +``` + +Keys, with their `id` and `en` defaults: + +- `course`, `lecturer`, `students`: Mata Kuliah :, Dosen Pengampu :, Disusun oleh : / Course :, Lecturer :, Prepared by : +- `student-id`, `lecturer-id`: NIM, NIP / NIM, NIP +- `program`, `faculty`, `department`: PROGRAM STUDI, FAKULTAS, JURUSAN / STUDY PROGRAM OF, FACULTY OF, DEPARTMENT OF +- `toc`, `lof`, `lot`, `loc`, `appendix-list`: DAFTAR ISI, GAMBAR, TABEL, KODE, LAMPIRAN / TABLE OF CONTENTS, LIST OF FIGURES, TABLES, CODES, APPENDICES +- `bibliography`, `appendices`, `appendix`, `chapter`: DAFTAR PUSTAKA, LAMPIRAN-LAMPIRAN, Lampiran, BAB / BIBLIOGRAPHY, APPENDICES, Appendix, CHAPTER +- `appendix-short`: L / A, before figure numbers in appendices, e.g. "Gambar L1.2" +- `figure`, `table`, `code`, `equation`, `section`: Gambar, Tabel, Kode, Persamaan, Bagian / Figure, Table, Code, Equation, Section +- `page`: halaman / page + +For a language other than `id` or `en`, set `lang` and provide every key; +the error message lists the missing ones. + +## Functions + +- `frontmatter(title: none, label: none)[..]`\ + description: A front matter page, such as Kata Pengantar or Abstrak. jilid puts it before the table of contents and shows the title like a chapter title, without a number. Use `==` for headings inside. With `label: `, `@abstrak` gives "Abstrak (halaman ii)". + +- `appendix(title: none, label: none)[..]`\ + description: One appendix, such as Lampiran 1. Kuesioner. jilid puts it after the bibliography and numbers it by the order you write them. Use `==` for headings inside. With `label: `, `@kuesioner` gives "Lampiran 1". + +- `signature(role: none, name: none, id: none, id-label: "NIP", space: 2cm, underline-name: false, alignment: center)`\ + description: One signature block, with a role, space to sign, a name and an ID. jilid keeps the block on one page. + +- `signatures(..signature, header: none, columns: 2, gutter: 1cm)`\ + description: Signature blocks in rows, under a header that spans the full width, such as the place, the date and "Mengetahui,". Names in a row are level. If the last row has fewer signatures, jilid puts it in the center. + +- `set-footer-text(content)`\ + description: Changes the footer text from this page on. If you give `none`, jilid shows the `footer.left` text again. + +- `zebraw`\ + description: The zebraw package, for highlighted lines and comments in code blocks. + +## Migrating from 0.1 + +- `appendices[]` becomes one `appendix(title: [..])[..]` per appendix. +- `frontmatter[= Title ..]` becomes `frontmatter(title: [Title])[..]`. +- `frontmatter` no longer takes `numbering`, `start-page` or `outlined`. +- `margin` is `"digital"` by default. For the old margins, set `margin: "print"`. +- Lecturer names are plain by default. For the old look, set `cover: (lecturer-name: (weight: "bold", style: "italic", underline: true))`. +- DAFTAR ISI lines up titles and starts sub-chapter rows under the chapter title. For the old look, set `outlines: (toc-indent: auto)`. + +## Contributing + +Bug reports and requests for campus rules jilid does not support yet are +welcome as [GitHub issues](https://github.com/shuretokki/jilid/issues). See +[CONTRIBUTING.md](https://github.com/shuretokki/jilid/blob/v0.2.0/CONTRIBUTING.md) +for development. + +## License + +MIT, see [LICENSE](LICENSE). The files in `template/`, which become your +own document, are MIT-0: use them without attribution. + +[alignment]: https://typst.app/docs/reference/layout/alignment/ +[array]: https://typst.app/docs/reference/foundations/array/ +[auto]: https://typst.app/docs/reference/foundations/auto/ +[bibliography-fn]: https://typst.app/docs/reference/model/bibliography/ +[bool]: https://typst.app/docs/reference/foundations/bool/ +[color]: https://typst.app/docs/reference/visualize/color/ +[content]: https://typst.app/docs/reference/foundations/content/ +[dictionary]: https://typst.app/docs/reference/foundations/dictionary/ +[function]: https://typst.app/docs/reference/foundations/function/ +[int]: https://typst.app/docs/reference/foundations/int/ +[length]: https://typst.app/docs/reference/layout/length/ +[page margin]: https://typst.app/docs/reference/layout/page/#parameters-margin +[paper size string]: https://typst.app/docs/reference/layout/page/#parameters-paper +[str]: https://typst.app/docs/reference/foundations/str/ +[text]: https://typst.app/docs/reference/text/text/ diff --git a/packages/preview/jilid/0.2.0/docs/example.pdf b/packages/preview/jilid/0.2.0/docs/example.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4f55e238d5dac8e8f809b29186e1ee3710c60e99 GIT binary patch literal 159380 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 GEB-&Pn*U?~ literal 0 HcmV?d00001 diff --git a/packages/preview/jilid/0.2.0/lib.typ b/packages/preview/jilid/0.2.0/lib.typ new file mode 100644 index 0000000000..7d383cb735 --- /dev/null +++ b/packages/preview/jilid/0.2.0/lib.typ @@ -0,0 +1,4 @@ +#import "src/document.typ": jilid +#import "src/matter.typ": appendices, appendix, frontmatter +#import "src/components.typ": set-footer-text, signature, signatures +#import "@preview/zebraw:0.6.3": zebraw diff --git a/packages/preview/jilid/0.2.0/src/components.typ b/packages/preview/jilid/0.2.0/src/components.typ new file mode 100644 index 0000000000..f2c30a372a --- /dev/null +++ b/packages/preview/jilid/0.2.0/src/components.typ @@ -0,0 +1,137 @@ +#import "state.typ": footer-text + +#import "utils.typ": filled + +/// A signature block, with a role, space to sign, a name and an ID. +/// +/// jilid keeps the block on one page. +/// The name is bold. If there is no ID, jilid keeps an empty line in its place, so names in a row stay level. +/// To put signatures side by side, give them to `signatures`. +/// +/// = Example +/// +/// ``` +/// #signature( +/// role: [Dosen Pembimbing], +/// name: "Nama Dosen", +/// id: "10000000000000000", +/// ) +/// ``` +/// +/// - role (content, str, none): The role above the space, such as Dosen Pembimbing. +/// - name (content, str, none): The name under the space. +/// - id (content, str, none): The ID under the name. +/// - id-label (content, str, none): The word before the ID, such as NIP or NIM. +/// - space (length): The height of the space to sign in. +/// - underline-name (bool): If `true`, jilid underlines the name. +/// - alignment (alignment): The horizontal alignment of the block. +/// -> content +#let signature( + /// The role above the space, such as Dosen Pembimbing. + role: none, + /// The name under the space. + name: none, + /// The ID under the name. + id: none, + /// The word before the ID, such as NIP or NIM. + id-label: "NIP", + /// The height of the space to sign in. + space: 2cm, + /// If `true`, jilid underlines the name. + underline-name: false, + /// The horizontal alignment of the block. + alignment: center, +) = block(width: 100%, breakable: false, { + set align(alignment) + set par(first-line-indent: 0pt, justify: false) + if filled(role) { role } + v(space) + let lines = () + if filled(name) { + lines.push(text(weight: "bold", if underline-name { underline(name) } else { + name + })) + } + // If there is no ID, keep an empty line so the name stays level with its neighbors. + lines.push( + if not filled(id) { hide[0] } else if filled( + id-label, + ) [#id-label #id] else [#id], + ) + lines.join(linebreak()) +}) + +/// Signature blocks in rows, under a header that spans the full width. +/// +/// Each row has `columns` signatures, and the names in a row are level. +/// If the last row has fewer signatures, jilid puts it in the center. +/// jilid keeps the header on the same page as the first row. +/// +/// = Example +/// +/// ``` +/// #signatures( +/// header: [Kota, 1 Januari 2026 \ Mengetahui,], +/// signature(role: [Dosen], name: "Nama Dosen"), +/// signature(role: [Mahasiswa], name: "Nama Mahasiswa", id-label: "NIM"), +/// ) +/// ``` +/// +/// - header (content, none): The text above the first row, such as the place, the date and "Mengetahui,". +/// - columns (int): The number of signatures in each row. +/// - gutter (length): The space between rows. +/// - items (content): The `signature` blocks, in order. +/// -> content +#let signatures( + /// The text above the first row, such as the place, the date and "Mengetahui,". + header: none, + /// The number of signatures in each row. + columns: 2, + /// The space between rows. + gutter: 1cm, + /// The `signature` blocks, in order. + ..items, +) = { + assert( + items.named().len() == 0, + message: "jilid: unknown argument(s) for `signatures`: " + + items.named().keys().map(k => "`" + k + "`").join(", ") + + ".", + ) + assert( + type(columns) == int and columns >= 1, + message: "jilid: `signatures(columns: ..)` must be a positive integer.", + ) + let rows = items + .pos() + .chunks(columns) + .map(row => grid(columns: (1fr,) * row.len(), align: bottom, ..row)) + if filled(header) { + // Keep the header on the same page as the first row. + let first = if rows.len() > 0 { rows.remove(0) } + rows.insert(0, block(breakable: false, { + set par(first-line-indent: 0pt, justify: false) + align(center, header) + v(0.5em) + first + })) + } + stack(spacing: gutter, ..rows) +} + +/// Changes the footer text from this page on. +/// +/// If you give `none`, jilid shows the `footer.left` text again. +/// +/// = Example +/// +/// ``` +/// #set-footer-text[Bab II Tinjauan Pustaka] +/// ``` +/// +/// - body (content, str, none): The new footer text. +/// -> content +#let set-footer-text( + /// The new footer text. + body, +) = footer-text.update(body) diff --git a/packages/preview/jilid/0.2.0/src/config.typ b/packages/preview/jilid/0.2.0/src/config.typ new file mode 100644 index 0000000000..8053ea9972 --- /dev/null +++ b/packages/preview/jilid/0.2.0/src/config.typ @@ -0,0 +1,276 @@ +#let defaults = ( + cover: ( + top: 2cm, + logo-width: 8cm, + // "top" puts `kind` above the title. + // "bottom" puts it below the title. + kind-pos: "bottom", + // The space between the course, lecturer and student blocks. + gap: 0.2cm, + // The space above the institution block. + gap-institution: 1cm, + // The space above and below the logo. + gap-logo: 0.5cm, + // The number of student columns. + // auto uses the fewest columns, up to 3, that fit on the page. + student-columns: auto, + // "right" puts the student ID beside the name. + // "below" puts it under the name. + student-id-pos: "right", + // The text styles of the cover texts below. + // Each style takes any `text` argument, plus `upper` and `underline`. + title: (size: 18pt, weight: "bold", upper: true), + kind: (size: 14pt, weight: "bold", upper: true), + subtitle: (size: 18pt, weight: "bold", upper: true), + details: (size: 14pt, weight: "bold"), + label: (:), + course: (weight: "bold"), + lecturer-name: (:), + student-name: (:), + // The "NIP ..." and "NIM ..." lines. + id: (:), + // The university, faculty, department, program and year. + institution: (weight: "bold", upper: true), + // The institution lines, from top to bottom. + // If you leave a key out, jilid hides its line. + institution-order: ( + "university", + "faculty", + "department", + "program", + "year", + ), + // A function that draws the institution block from its lines. + institution-render: auto, + // A function that draws the whole cover from its data. + render: auto, + ), + footer: ( + enabled: true, + left: none, + show-page-number: true, + page-number-align: center, + // The text style of `left`. + text: (size: 9pt, weight: "bold"), + // A function that draws the footer from the page number and the text. + render: auto, + ), + typography: ( + font-family: auto, + font-size: 12pt, + caption-size: 10pt, + caption-gap: 1em, + table-size: 10pt, + // The text style of web links. + // `font: auto` uses the code font. + url: (font: auto, size: 0.85em, fill: blue.darken(20%), underline: true), + // A function that draws each caption from its parts. + caption: auto, + ), + paragraph: ( + justify: true, + indent: 0.63cm, + leading: 0.575em, + spacing: 1.15em, + // The space before numbered and bullet markers. + list-indent: 0cm, + // The width of the marker column. + // The list text starts after it. + marker-width: 0.75cm, + ), + numbering: ( + // The page number style before the first chapter, such as "i". + front: "i", + // "body" continues the chapter page numbers in the appendices. + // "front" continues the front matter page numbers. + back: "body", + // "bottom" puts page numbers in the footer. + // "top" puts chapter and appendix page numbers at the top right. + // A page that opens a chapter keeps its number at the bottom. + position: "bottom", + // The chapter number style. + // "I" gives BAB I, and "1" gives BAB 1. + chapter: "I", + // The appendix number style. + // "1" gives Lampiran 1, and "A" gives Lampiran A. + appendix: "1", + // The section number style inside a chapter, such as "1.1.". + heading: "1.1.", + // Put "Lampiran 1." before each appendix title. + appendix-prefix: true, + ), + outlines: ( + depth: 3, + toc: true, + figures: true, + tables: true, + codes: true, + // Show DAFTAR LAMPIRAN if the document has appendices. + appendices: true, + // List each appendix in DAFTAR ISI too. + // If false, DAFTAR ISI lists only the LAMPIRAN title. + toc-appendices: false, + // The text style of chapter rows in DAFTAR ISI. + h1: (weight: "bold"), + // The text between an entry and its page number, repeated to fill the line. + // none removes it. + leader: ".", + // Where titles start in Daftar Gambar, Tabel, Kode and Lampiran. + // "each" starts every title in a list at the same place, after the widest number such as "Gambar 2.10". + // "shared" uses one place for all of these lists. + // none puts each title right after its number. + align-titles: "each", + // Where titles start in DAFTAR ISI. + // "title" lines up the chapter titles, and a row below chapter level starts under the title of the level above. + // A length, such as 1cm, also lines up the chapter titles and moves each lower level by that length. + // 0cm puts the rows below chapter level at the left. + // auto puts each title right after its number and uses the Typst default for the rows below. + toc-indent: "title", + ), + headings: ( + // Chapter titles and front matter titles. + h1: ( + size: 12pt, + above: 24pt, + below: 18pt, + pagebreak: true, + uppercase: true, + ), + h2: (size: 12pt, above: 24pt, below: 18pt, indent: 0cm), + h3: (size: 12pt, above: 14pt, below: 18pt, indent: 0cm), + h4: (size: 12pt, above: 12pt, below: 18pt, indent: 0cm), + // Numbered appendix titles, on their page and in the lists. + // The LAMPIRAN-LAMPIRAN title follows `h1`. + appendix: (uppercase: false), + ), + code: ( + fill: luma(240), + font: auto, + size: 10pt, + zebraw: true, + ), +) + +// Accept only the values in the list. +// Any other value fails. +#let one-of(..values) = ( + check: v => v in values.pos(), + message: "must be one of " + values.pos().map(repr).join(", "), +) +#let hook = ( + check: v => v == auto or type(v) == function, + message: "must be auto or a function, e.g. `it => [...]`", +) + +// The values that each option accepts. +#let rules = ( + "cover.kind-pos": one-of("top", "bottom"), + "cover.student-id-pos": one-of("right", "below"), + "cover.student-columns": ( + check: v => v == auto or (type(v) == int and v >= 1), + message: "must be auto or a whole number of 1 or more, e.g. `2`", + ), + "cover.render": hook, + "cover.institution-render": hook, + "cover.institution-order": ( + check: v => ( + type(v) == array + and v.all(k => ( + k in ("university", "faculty", "department", "program", "year") + )) + ), + message: "must be a list of \"university\", \"faculty\", \"department\", \"program\" and \"year\", e.g. `(\"university\", \"program\", \"year\")`", + ), + "footer.render": hook, + "typography.caption": hook, + "numbering.back": one-of("body", "front"), + "numbering.position": one-of("bottom", "top"), + "outlines.align-titles": one-of("each", "shared", none), + "outlines.toc-indent": ( + check: v => v in ("title", auto) or type(v) in (length, relative), + message: "must be \"title\", auto or a length, e.g. `1cm`", + ), + "code.zebraw": ( + check: v => type(v) in (bool, dictionary), + message: "must be true, false, or a dictionary of zebraw options, e.g. `(lang: false)`", + ), +) + +// Options that take any `text` argument, plus `upper` and `underline`. +// jilid does not check their keys, and a user key replaces only that key. +#let text-styles = ( + "cover.title", + "cover.kind", + "cover.subtitle", + "cover.details", + "cover.label", + "cover.course", + "cover.lecturer-name", + "cover.student-name", + "cover.id", + "cover.institution", + "footer.text", + "typography.url", + "outlines.h1", +) + +// The margins for `margin: "print"` and `margin: "digital"`. +#let margin-presets = ( + print: (top: 3cm, bottom: 3cm, left: 4cm, right: 3cm), + digital: 1in, +) + +// Put the options of the user over the defaults, in nested groups too. +// `path` is the option name that errors show. +#let merge(base, user, path: "") = { + let out = base + for (key, value) in user { + let name = if path == "" { key } else { path + "." + key } + assert( + key in base, + message: "jilid: unknown option `" + + name + + "`. Valid options here: " + + base.keys().map(k => "`" + k + "`").join(", ") + + ".", + ) + let default = base.at(key) + if type(default) == dictionary { + let example = if name in text-styles { "size" } else { + default.keys().first() + } + assert( + type(value) == dictionary, + message: "jilid: option `" + + name + + "` expects a dictionary, e.g. `" + + name + + ": (" + + example + + ": ...)`.", + ) + out.insert( + key, + if name in text-styles { default + value } else { + merge(default, value, path: name) + }, + ) + } else { + if name in rules { + let rule = rules.at(name) + assert( + (rule.check)(value), + message: "jilid: option `" + + name + + "` " + + rule.message + + ", not " + + repr(value) + + ".", + ) + } + out.insert(key, value) + } + } + out +} diff --git a/packages/preview/jilid/0.2.0/src/document.typ b/packages/preview/jilid/0.2.0/src/document.typ new file mode 100644 index 0000000000..6a6499369e --- /dev/null +++ b/packages/preview/jilid/0.2.0/src/document.typ @@ -0,0 +1,211 @@ +#import "config.typ": defaults, margin-presets, merge +#import "validate.typ": check-args, people +#import "labels.typ": resolve as resolve-labels +#import "rules/text.typ": para-rules, text-rules +#import "rules/headings.typ": heading-rules +#import "rules/figures.typ": figure-rules +#import "rules/refs.typ": ref-rules +#import "pages/cover.typ": cover-page +#import "pages/footer.typ": page-footer, page-header +#import "matter.typ": flow +#import "utils.typ": plain + +/// Formats a report, proposal or thesis for an Indonesian university. +/// +/// Use it as a show rule at the top of the file. +/// jilid makes the cover, the front matter, the lists of contents, figures and tables, the chapters, the bibliography and the appendices. +/// +/// = Example +/// +/// ``` +/// #show: jilid.with( +/// title: [Judul Laporan], +/// students: (name: "Nama Mahasiswa", id: "1000000001"), +/// university: "Universitas Negeri", +/// year: "2026", +/// ) +/// +/// = Pendahuluan +/// ``` +/// +/// = Options +/// +/// Each option group takes a dictionary with only the keys that you change, such as `footer: (left: [Laporan Akhir])`. +/// These are the keys of each group: +/// +/// / cover: `top`, `logo-width`, `kind-pos`, `gap`, `gap-institution`, `gap-logo`, `student-columns`, `student-id-pos`, `title`, `kind`, `subtitle`, `details`, `label`, `course`, `lecturer-name`, `student-name`, `id`, `institution`, `institution-order`, `institution-render`, `render` +/// / footer: `enabled`, `left`, `show-page-number`, `page-number-align`, `text`, `render` +/// / typography: `font-family`, `font-size`, `caption-size`, `caption-gap`, `table-size`, `url`, `caption` +/// / paragraph: `justify`, `indent`, `leading`, `spacing`, `list-indent`, `marker-width` +/// / numbering: `front`, `back`, `position`, `chapter`, `appendix`, `heading`, `appendix-prefix` +/// / outlines: `depth`, `toc`, `figures`, `tables`, `codes`, `appendices`, `toc-appendices`, `h1`, `leader`, `align-titles`, `toc-indent` +/// / headings: `h1`, `h2`, `h3`, `h4`, `appendix` +/// / code: `fill`, `font`, `size`, `zebraw` +/// +/// The README gives the type, the default value and a description for each key. +/// +/// - title (content, str): The document title. If it is not empty, jilid makes a cover. +/// - kind (content, str, none): The document type, such as Laporan Praktikum or Skripsi. +/// - subtitle (content, str): A second title line under the title. +/// - cover-details (array): Extra (label, value) rows under the title, such as `(([Mitra], [Nama Mitra]),)`. +/// - course (content, str): The course name. +/// - lecturers (dictionary, array): One or more lecturers as `(name: .., id: ..)`. +/// - students (dictionary, array): One or more students as `(name: .., id: ..)`. +/// - program (content, str): The study program. +/// - department (content, str): The department. +/// - faculty (content, str): The faculty. +/// - university (content, str): The university. +/// - year (content, str): The year on the cover. +/// - logo (content, none): The logo, such as `image("logo.png")`. +/// - bibliography (content, none): The result of `bibliography(..)`. jilid puts it after the last chapter. +/// - lang (str): The text language. `"id"` and `"en"` are built in. +/// - paper (str): The paper size, such as `"a4"`. +/// - margin (str, length, dictionary): `"digital"` gives 1 inch on all sides. `"print"` gives 4 cm on the left and 3 cm on the other sides. Any page margin value also works. +/// - include-cover (bool, auto): If `auto`, jilid makes a cover when `title` is not empty. +/// - cover (dictionary): The cover layout and text styles. +/// - footer (dictionary): The footer text and page number. +/// - typography (dictionary): The fonts and text sizes. +/// - paragraph (dictionary): The paragraph and list layout. +/// - numbering (dictionary): The number styles for pages, chapters, sections and appendices. +/// - outlines (dictionary): The lists of contents, figures, tables, code and appendices. +/// - headings (dictionary): The heading sizes and space. +/// - code (dictionary): The code block style. +/// - labels (dictionary): Replacements for the words that jilid prints, such as `(figure: "Gbr.")`. +/// - body (content): The document. The show rule gives it to jilid. +/// -> content +#let jilid( + /// The document title. If it is not empty, jilid makes a cover. + title: "", + /// The document type, such as Laporan Praktikum or Skripsi. + kind: none, + /// A second title line under the title. + subtitle: "", + /// Extra (label, value) rows under the title, such as `(([Mitra], [Nama Mitra]),)`. + cover-details: (), + /// The course name. + course: "", + /// One or more lecturers as `(name: .., id: ..)`. + lecturers: (), + /// One or more students as `(name: .., id: ..)`. + students: (), + /// The study program. + program: "", + /// The department. + department: "", + /// The faculty. + faculty: "", + /// The university. + university: "", + /// The year on the cover. + year: "", + /// The logo, such as `image("logo.png")`. + logo: none, + /// The result of `bibliography(..)`. jilid puts it after the last chapter. + bibliography: none, + /// The text language. `"id"` and `"en"` are built in. + lang: "id", + /// The paper size, such as `"a4"`. + paper: "a4", + /// `"digital"`, `"print"` or any page margin value. + margin: "digital", + /// If `auto`, jilid makes a cover when `title` is not empty. + include-cover: auto, + /// The cover layout and text styles. + cover: (:), + /// The footer text and page number. + footer: (:), + /// The fonts and text sizes. + typography: (:), + /// The paragraph and list layout. + paragraph: (:), + /// The number styles for pages, chapters, sections and appendices. + numbering: (:), + /// The lists of contents, figures, tables, code and appendices. + outlines: (:), + /// The heading sizes and space. + headings: (:), + /// The code block style. + code: (:), + /// Replacements for the words that jilid prints, such as `(figure: "Gbr.")`. + labels: (:), + /// The document. The show rule gives it to jilid. + body, +) = { + let cfg = merge(defaults, ( + cover: cover, + footer: footer, + typography: typography, + paragraph: paragraph, + numbering: numbering, + outlines: outlines, + headings: headings, + code: code, + )) + check-args( + logo: logo, + bibliography: bibliography, + cover-details: cover-details, + margin: margin, + ) + let students = people(students, "students") + let lecturers = people(lecturers, "lecturers") + + let cfg = ( + cfg + + ( + lang: lang, + t: resolve-labels(labels, lang), + info: ( + title: title, + kind: kind, + subtitle: subtitle, + cover-details: cover-details, + course: course, + lecturers: lecturers, + students: students, + program: program, + department: department, + faculty: faculty, + university: university, + year: year, + logo: logo, + ), + ) + ) + + // Turn the student names into plain text for the PDF metadata. + set document(title: title, author: students.map(s => plain(s.name))) + + set page(numbering: none) + set page(header: page-header(cfg), footer: page-footer(cfg)) + set page( + paper: paper, + margin: if type(margin) == str { margin-presets.at(margin) } else { + margin + }, + ) + + show: text-rules.with(cfg) + show: heading-rules.with(cfg) + show: figure-rules.with(cfg) + show: ref-rules.with(cfg) + + show: it => { + let with-cover = if include-cover == auto { title not in ("", none) } else { + include-cover + } + if with-cover { cover-page(cfg) } + flow(cfg, it) + } + + show: para-rules.with(cfg) + + body + + if bibliography != none { + pagebreak(weak: true) + heading(level: 1, numbering: none)[#cfg.t.bibliography] + set std.bibliography(title: none) + bibliography + } +} diff --git a/packages/preview/jilid/0.2.0/src/labels.typ b/packages/preview/jilid/0.2.0/src/labels.typ new file mode 100644 index 0000000000..6c334e37bd --- /dev/null +++ b/packages/preview/jilid/0.2.0/src/labels.typ @@ -0,0 +1,67 @@ +#let strings = ( + course: (id: "Mata Kuliah :", en: "Course :"), + lecturer: (id: "Dosen Pengampu :", en: "Lecturer :"), + students: (id: [Disusun oleh :], en: "Prepared by :"), + student-id: (id: "NIM", en: "NIM"), + lecturer-id: (id: "NIP", en: "NIP"), + program: (id: "PROGRAM STUDI", en: "STUDY PROGRAM OF"), + faculty: (id: "FAKULTAS", en: "FACULTY OF"), + department: (id: "JURUSAN", en: "DEPARTMENT OF"), + toc: (id: [DAFTAR ISI], en: [TABLE OF CONTENTS]), + lof: (id: [DAFTAR GAMBAR], en: [LIST OF FIGURES]), + lot: (id: [DAFTAR TABEL], en: [LIST OF TABLES]), + loc: (id: [DAFTAR KODE], en: [LIST OF CODES]), + appendix-list: (id: [DAFTAR LAMPIRAN], en: [LIST OF APPENDICES]), + bibliography: (id: [DAFTAR PUSTAKA], en: [BIBLIOGRAPHY]), + appendices: (id: [LAMPIRAN-LAMPIRAN], en: [APPENDICES]), + appendix: (id: "Lampiran", en: "Appendix"), + appendix-short: (id: "L", en: "A"), + chapter: (id: "BAB", en: "CHAPTER"), + figure: (id: "Gambar", en: "Figure"), + table: (id: "Tabel", en: "Table"), + code: (id: "Kode", en: "Code"), + equation: (id: "Persamaan", en: "Equation"), + section: (id: "Bagian", en: "Section"), + page: (id: "halaman", en: "page"), +) + +// Pick every word for `lang`. +// Then put the words of the user over them. +#let resolve(overrides, lang) = { + let out = (:) + let missing = () + for (key, entry) in strings { + if lang in entry { out.insert(key, entry.at(lang)) } else { + missing.push(key) + } + } + for (key, value) in overrides { + assert( + key in strings, + message: "jilid: unknown `labels` key `" + + key + + "`. Valid keys: " + + strings.keys().map(k => "`" + k + "`").join(", ") + + ".", + ) + assert( + type(value) != dictionary, + message: "jilid: `labels." + + key + + "` takes the text itself, e.g. `labels: (" + + key + + ": [..])`, not a dictionary of languages.", + ) + out.insert(key, value) + } + missing = missing.filter(key => key not in overrides) + assert( + missing.len() == 0, + message: "jilid: language `" + + lang + + "` is not built in (built in: `id`, `en`). Provide it through `labels` for: " + + missing.map(k => "`" + k + "`").join(", ") + + ".", + ) + out +} diff --git a/packages/preview/jilid/0.2.0/src/matter.typ b/packages/preview/jilid/0.2.0/src/matter.typ new file mode 100644 index 0000000000..a8dd577682 --- /dev/null +++ b/packages/preview/jilid/0.2.0/src/matter.typ @@ -0,0 +1,235 @@ +#import "state.typ": page-label, section, sections +#import "rules/text.typ": para-rules +#import "pages/outlines.typ": figure-entry-rules, outlines + +// Fail on a level-1 heading that is written with `=` in `fn`. +#let check-body(body, fn) = { + let children = if body.has("children") { body.children } else { (body,) } + for c in children { + if ( + c.func() == heading + and c.at("level", default: auto) in (auto, 1) + and c.at("depth", default: 1) == 1 + ) { + panic( + "jilid: use `title:` instead of `=` in `" + + fn + + "`, e.g. `#" + + fn + + "(title: [Judul])[..]`.", + ) + } + } +} + +// Fail on an argument that jilid 0.2 removed. +#let check-removed(args, fn) = { + let named = args.named().keys() + if named.len() > 0 { + panic( + "jilid: `" + + fn + + "` takes only `title:` since 0.2, remove " + + named.map(k => "`" + k + "`").join(", ") + + ". See \"Migrating from 0.1\" in the README.", + ) + } +} + +/// A front matter page, such as Kata Pengantar or Abstrak. +/// +/// Front matter is the pages before the table of contents. +/// jilid puts each `frontmatter` page there, in the order you write them. +/// You can write them anywhere in the file. +/// For a heading inside the page, use `==` or deeper. +/// If you write a `=` heading inside, jilid stops with an error. +/// +/// = Example +/// +/// ``` +/// #frontmatter(title: [Kata Pengantar])[ +/// Puji syukur ... +/// ] +/// ``` +/// +/// ``` +/// #frontmatter(title: [Abstrak], label: )[ +/// Abstrak ... +/// ] +/// ``` +/// +/// - title (content, str, none): The page title. jilid shows it like a chapter title, centered and without a number. +/// - label (label, none): A label that you can refer to with `@`, such as ``. jilid shows the reference as the title and its page, such as "Abstrak (halaman ii)". It needs a `title`. +/// - removed (arguments): Arguments that jilid 0.2 removed: `numbering`, `start-page` and `outlined`. If you give one of them, jilid stops with an error that tells you what changed. +/// - body (content): The text of the page. +/// -> content +#let frontmatter( + /// The page title. jilid shows it like a chapter title, centered and without a number. + title: none, + /// A label that you can refer to with `@`, such as ``. It needs a `title`. + label: none, + /// Arguments that jilid 0.2 removed. If you give one, jilid stops with an error. + ..removed, + /// The text of the page. + body, +) = { + check-removed(removed, "frontmatter") + check-body(body, "frontmatter") + assert( + label == none or type(label) == std.label, + message: "jilid: `frontmatter(label: ..)` must be a label, e.g. `label: `.", + ) + assert( + label == none or title != none, + message: "jilid: `frontmatter(label: ..)` needs a `title`.", + ) + [#metadata(( + kind: sections.front, + title: title, + label: label, + body: body, + )) ] +} + +/// An appendix page, such as Lampiran 1. +/// +/// jilid puts every appendix after the bibliography, in the order you write them. +/// You can write them anywhere in the file. +/// jilid numbers each appendix by its place in that order. +/// Figures, tables and equations inside get the appendix number, such as Gambar L1.2. +/// For a heading inside the appendix, use `==` or deeper. +/// If you write a `=` heading inside, jilid stops with an error. +/// +/// = Example +/// +/// ``` +/// #appendix(title: [Kuesioner], label: )[ +/// Daftar pertanyaan ... +/// ] +/// +/// Lihat @kuesioner. +/// ``` +/// +/// - title (content, str, none): The appendix title. jilid shows it after the number, such as "Lampiran 1. Kuesioner". +/// - label (label, none): A label that you can refer to with `@`, such as ``. +/// - body (content): The text of the appendix. +/// -> content +#let appendix( + /// The appendix title. jilid shows it after the number. + title: none, + /// A label that you can refer to with `@`, such as ``. + label: none, + /// The text of the appendix. + body, +) = { + assert( + label == none or type(label) == std.label, + message: "jilid: `appendix(label: ..)` must be a label, e.g. `label: `.", + ) + check-body(body, "appendix") + [#metadata(( + kind: sections.back, + title: title, + label: label, + body: body, + )) ] +} + +// jilid 0.2 renamed this function to `appendix`. +#let appendices(..args) = panic( + "jilid: `appendices` is `appendix(title: [..])[..]` since 0.2, one call per appendix. See \"Migrating from 0.1\" in the README.", +) + +#let blocks-of(kind) = query().filter(m => m.value.kind == kind) + +#let render-frontmatter(cfg, m) = { + let v = m.value + let title = if v.title != none { heading(level: 1, numbering: none, v.title) } + if v.label != none { title = [#title#v.label] } + let body = { + set figure(outlined: false) + set heading(numbering: none) + v.body + } + para-rules(cfg, title + body) +} + +// Number figures, tables and equations with the appendix number, such as "L1.2". +#let render-appendix(cfg, m, n) = { + let v = m.value + let title = heading(level: 1, if v.title == none [] else { v.title }) + let prefix = [#cfg.t.appendix-short#numbering(cfg.numbering.appendix, n).] + let body = { + set figure(outlined: false, numbering: x => [#prefix#x]) + set math.equation(numbering: x => [(#prefix#x)]) + set heading(numbering: none) + v.body + } + para-rules(cfg, if v.label != none [#title#v.label#body] else [#title#body]) +} + +// Everything after the cover, in this order: +// the front matter, the lists, `body` and the appendices. +#let flow(cfg, body) = { + section.update(sections.front) + counter(page).update(1) + + show: figure-entry-rules.with(cfg) + + [#metadata(none) ] + context { + for m in blocks-of(sections.front) { + render-frontmatter(cfg, m) + pagebreak(weak: true) + } + } + + outlines(cfg) + + [#metadata(none) ] + pagebreak(weak: true) + section.update(sections.main) + counter(page).update(1) + counter(heading).update(0) + [#metadata(none) ] + body + + context { + let back = blocks-of(sections.back) + if back.len() > 0 { + pagebreak(weak: true) + + if cfg.numbering.back == "front" { + let end-marker = query().first() + let val = counter(page).at(end-marker.location()).first() + counter(page).update(val + 1) + } + + section.update(sections.back) + [#metadata(none) ] + heading(level: 1, numbering: none, outlined: true)[#cfg.t.appendices] + [#metadata(none) ] + counter(heading).update(0) + + for (i, m) in back.enumerate() { render-appendix(cfg, m, i + 1) } + } + } + + // Save the first page of each part: the front matter, the chapters and the appendices. + // For each part, jilid saves the page number as a whole number and as the footer shows it, such as 4 and "iv". + // To read the result, run `typst eval 'query()' --in doc.typ`. + context { + let start(lbl) = { + let q = query(lbl) + if q.len() > 0 { + let loc = q.first().location() + (idx: counter(page).at(loc).first(), display: page-label(cfg, loc)) + } + } + [#metadata(( + front: start(), + body: start(), + back: start(), + )) ] + } +} diff --git a/packages/preview/jilid/0.2.0/src/pages/cover.typ b/packages/preview/jilid/0.2.0/src/pages/cover.typ new file mode 100644 index 0000000000..f59d40bf4a --- /dev/null +++ b/packages/preview/jilid/0.2.0/src/pages/cover.typ @@ -0,0 +1,163 @@ +#import "../state.typ": section, sections +#import "../utils.typ": filled, prefixed, styled + +#let default-cover(c, it) = { + let t = it.labels + + let id-line(label, person) = { + let id = person.at("id", default: none) + if not filled(id) [] else if not filled(label) { + styled(c.id, [#id]) + } else { styled(c.id, [#label #id]) } + } + + let title-text = styled(c.title, it.title) + let kind-text = styled(c.kind, it.kind) + + let logo = if it.logo != none { + set image(width: c.logo-width) + it.logo + } + + let lecturers = if it.lecturers.len() > 0 [ + #styled(c.label, t.lecturer)\ + #for l in it.lecturers [ + #styled(c.lecturer-name, l.name)\ + #if filled(l.at("id", default: none)) [#id-line(t.lecturer-id, l)\ ] + ] + #v(c.gap) + ] + + // A grid that jilid fills column by column. + // With id-pos "right", the name and the ID sit side by side. + // With id-pos "below", the ID sits under the name in one cell. + let students(cols) = if it.students.len() == 0 { none } else { + let list = it.students + let beside = c.student-id-pos == "right" + let rows = calc.ceil(list.len() / cols) + let cells = range(rows * cols).map(j => { + let i = calc.rem(j, cols) * rows + calc.quo(j, cols) + if i >= list.len() { if beside { ([], []) } else { [] } } else { + let s = list.at(i) + let name = styled(c.student-name, s.name) + if beside { (name, id-line(t.student-id, s)) } else [ + #name + #if filled(s.at("id", default: none)) [\ #id-line(t.student-id, s)] + ] + } + }) + + context stack( + spacing: par.leading, + styled(c.label, t.students), + align(center, grid( + columns: (auto,) * (if beside { 2 * cols } else { cols }), + // Make a gap between the name and the ID of a student. + column-gutter: if beside { + range(2 * cols - 1).map(g => if calc.odd(g) { 1.5em } else { 0pt }) + } else { 1em }, + row-gutter: if beside { par.leading } else { 1em }, + align: if beside { (left, right) * cols } else { center }, + inset: (x: 4pt), + ..if beside { cells.flatten() } else { cells }, + )), + ) + } + + let lines = c.institution-order.map(k => it.at(k)).filter(filled) + let institution = if c.institution-render == auto { + styled(c.institution, lines.join(linebreak())) + } else { + (c.institution-render)(( + university: it.university, + faculty: it.faculty, + department: it.department, + program: it.program, + year: it.year, + lines: lines, + )) + } + + let body(cols) = align(center)[ + #v(c.top) + + #if c.kind-pos == "top" [ + #if filled(it.kind) { kind-text + v(0.1cm) } + #title-text + ] else [ + #title-text + #if filled(it.kind) { v(0.1cm) + kind-text } + ] + + #if filled(it.subtitle) [ + #v(0.5cm) + #styled(c.subtitle, it.subtitle) + ] + + #for (label, value) in it.details [ + #v(0.5cm) + #styled(c.details, [#label \ #value]) + ] + + #v(1fr) + #if logo != none { v(c.gap-logo) + logo + v(c.gap-logo) } + #v(1fr) + + #if filled(it.course) [ + #styled(c.label, t.course)\ + #styled(c.course, it.course) + #v(c.gap) + ] + + #lecturers + #students(cols) + + #v(1fr) + #v(c.gap-institution) + + #institution + ] + + layout(size => { + let height(cols) = measure(block(width: size.width, body(cols))).height + + // auto: use the fewest columns, up to 3, that fit. + // If none fit, use the shortest cover. + let cols = c.student-columns + if cols == auto { + let options = (1, 2, 3) + cols = options.find(n => height(n) <= size.height) + if cols == none { cols = options.sorted(key: height).first() } + } + body(cols) + }) +} + +#let cover-page(cfg) = { + let info = cfg.info + let t = cfg.t + let unit(label, value) = if filled(value) { prefixed(label, value) } + let render = if cfg.cover.render == auto { + default-cover.with(cfg.cover) + } else { cfg.cover.render } + + page(numbering: none, footer: none)[ + #section.update(sections.cover) + #render(( + title: info.title, + kind: info.kind, + subtitle: info.subtitle, + details: info.cover-details, + course: info.course, + lecturers: info.lecturers, + students: info.students, + logo: info.logo, + university: info.university, + faculty: unit(t.faculty, info.faculty), + department: unit(t.department, info.department), + program: unit(t.program, info.program), + year: info.year, + labels: t, + )) + ] +} diff --git a/packages/preview/jilid/0.2.0/src/pages/footer.typ b/packages/preview/jilid/0.2.0/src/pages/footer.typ new file mode 100644 index 0000000000..bb8e19916b --- /dev/null +++ b/packages/preview/jilid/0.2.0/src/pages/footer.typ @@ -0,0 +1,56 @@ +#import "../state.typ": footer-text, page-format, section, sections +#import "../utils.typ": styled + +// If `numbering.position` is "top", chapter and appendix pages show the number at the top right. +// A page that opens a chapter keeps it at the bottom. +#let number-on-top(cfg, sec) = ( + cfg.numbering.position == "top" + and sec in (sections.main, sections.back) + and not query(heading.where(level: 1)).any(h => ( + h.location().page() == here().page() + )) +) + +#let page-number(cfg, sec) = text(size: cfg.typography.font-size, numbering( + page-format(cfg, sec), + counter(page).get().first(), +)) + +// Show the page number at the top right if `number-on-top` allows it. +#let page-header(cfg) = context { + let sec = section.get() + if cfg.footer.show-page-number and number-on-top(cfg, sec) { + align(right, page-number(cfg, sec)) + } +} + +// The built-in footer: the text above the page number. +// It gets the same data as a `footer.render` hook. +#let default-footer(f, it) = [ + #if it.left != none [ + #align(left, styled(f.text, it.left)) + #v(0.2em) + ] + #if it.number != none [ + #align(f.page-number-align, it.number) + ] +] + +#let page-footer(cfg) = context { + let f = cfg.footer + let sec = section.get() + if sec == sections.cover or not f.enabled { + return none + } + set par(first-line-indent: 0pt) + + let left-text = footer-text.get() + let render = if f.render == auto { default-footer.with(f) } else { f.render } + render(( + number: if f.show-page-number and not number-on-top(cfg, sec) { + page-number(cfg, sec) + }, + left: if left-text == none { f.left } else { left-text }, + part: sec, + )) +} diff --git a/packages/preview/jilid/0.2.0/src/pages/outlines.typ b/packages/preview/jilid/0.2.0/src/pages/outlines.typ new file mode 100644 index 0000000000..a8b55ad2fc --- /dev/null +++ b/packages/preview/jilid/0.2.0/src/pages/outlines.typ @@ -0,0 +1,238 @@ +#import "../state.typ": page-label, section, sections +#import "../utils.typ": h1-number, h1-title, styled +#import "../rules/figures.typ": figure-number + +// The label that marks where the appendix headings start. +// `matter.flow` puts it after the appendices title. +#let appendices-start = + +// A list row: `prefix` and `title`, the leader and the page number, linked to `loc`. +// With a `width`, the prefix goes in a column of that width. +// Without a `width`, `sep` joins the prefix and the title. +#let dotted-row(cfg, loc, prefix, title, width: none, sep: [ ]) = { + let leader = if cfg.outlines.leader == none { h(1fr) } else { + box(width: 1fr, inset: (x: 2pt), repeat(cfg.outlines.leader)) + } + let page = context page-label(cfg, loc) + link(loc, if prefix == none or width == none { + grid( + columns: (1fr, auto), + column-gutter: 0.5em, + align: (left, bottom), + [#if prefix != none [#prefix#sep]#title #leader], page, + ) + } else { + grid( + columns: (width, 1fr, auto), + column-gutter: 0.5em, + align: (left, left, bottom), + prefix, [#title #leader], page, + ) + }) +} + +// The number before a title in the lists, such as "BAB II" or "Lampiran 1.". +// Appendices get it if `numbering.appendix-prefix` is true. +#let entry-prefix(cfg, sec, n) = { + let number = h1-number(cfg, sec, n) + if sec == sections.main { number } else if ( + sec == sections.back and cfg.numbering.appendix-prefix + ) [#number.] +} + +#let heading-prefix(cfg, h) = if h.numbering != none { + let loc = h.location() + entry-prefix(cfg, section.at(loc), counter(heading).at(loc).first()) +} + +// The figure number in the lists, such as "Gambar 2.1". +#let figure-prefix(f) = { + let loc = f.location() + let n = counter(figure.where(kind: f.kind)).at(loc).first() + [#f.supplement #figure-number(loc, n)] +} + +#let widest(items) = calc.max( + 0pt, + ..items.filter(x => x != none).map(x => measure(x).width), +) + +// The width of the number column in the list `name`. +// `name` is "toc", "back" or a figure kind. +// DAFTAR ISI gets a column unless `toc-indent` is auto. +// With "shared", the figure, table, code and appendix lists share one width. +// none puts the number right before the title. +#let number-width(cfg, name) = { + let mode = if name != "toc" { cfg.outlines.align-titles } else if ( + cfg.outlines.toc-indent != auto + ) { "each" } + if mode == none { return none } + let numbered = query(heading.where(level: 1)).filter(h => ( + h.numbering != none and h.outlined + )) + let in-back(h) = section.at(h.location()) == sections.back + let rows(name) = if name == "toc" { + numbered + .filter(h => cfg.outlines.toc-appendices or not in-back(h)) + .map(h => styled(cfg.outlines.h1, heading-prefix(cfg, h))) + } else if name == "back" { + numbered.filter(in-back).map(h => heading-prefix(cfg, h)) + } else { + query(figure.where(kind: name)) + .filter(f => f.caption != none and f.at("outlined", default: true)) + .map(figure-prefix) + } + let names = if mode == "shared" { ("back", image, table, raw) } else { + (name,) + } + widest(names.map(rows).flatten()) +} + +// Figure rows in every outline, also outlines that the user places: +// "Gambar 2.1 Caption .... 12". +#let figure-entry-rules(cfg, body) = { + show outline.entry: it => { + if ( + it.element != none + and it.element.func() == figure + and it.element.caption != none + ) { + context dotted-row( + cfg, + it.element.location(), + figure-prefix(it.element), + it.element.caption.body, + width: number-width(cfg, it.element.kind), + sep: [ #h(0.5em) ], + ) + } else { + it + } + } + + body +} + +// DAFTAR ISI. +// If `outlines.toc-appendices` is false, it lists only the LAMPIRAN title. +// DAFTAR LAMPIRAN then lists the appendices. +#let table-of-contents(cfg) = { + // The headings that DAFTAR ISI lists. + let target() = { + let has-appendices = query(appendices-start).len() > 0 + if has-appendices and not cfg.outlines.toc-appendices { + selector(heading).before(appendices-start) + } else { heading } + } + // The widest number at each heading level in DAFTAR ISI, such as "BAB VIII" and "1.10.". + let level-widths() = { + let hs = query(target()).filter(h => ( + h.outlined and h.numbering != none and h.level <= cfg.outlines.depth + )) + range(1, cfg.outlines.depth + 1).map(level => widest( + hs + .filter(h => h.level == level) + .map(h => if level == 1 { + styled(cfg.outlines.h1, heading-prefix(cfg, h)) + } else { + numbering(h.numbering, ..counter(heading).at(h.location())) + }), + )) + } + + // Use the same leader in rows below chapter level. + set outline.entry(fill: if cfg.outlines.leader != none { + repeat(gap: 0.15em, cfg.outlines.leader) + }) + show outline.entry.where(level: 1): it => { + let loc = it.element.location() + v(0.5em, weak: true) + context { + let appendix = ( + it.element.numbering != none and section.at(loc) == sections.back + ) + let title = h1-title(cfg, it.element.body, appendix: appendix) + styled(cfg.outlines.h1, dotted-row( + cfg, + loc, + heading-prefix(cfg, it.element), + title, + width: number-width(cfg, "toc"), + )) + } + } + // Without `toc-indent: auto`, jilid draws the rows below chapter level. + // "title" starts each row under the title of the level above. + // A length moves each level by that length. + show outline.entry: it => { + let indent = cfg.outlines.toc-indent + if it.level < 2 or indent == auto { return it } + v(0.5em, weak: true) + context { + let widths = level-widths() + let x = if indent == "title" { + widths + .slice(0, it.level - 1) + .map(w => if w > 0pt { w + 0.5em } else { 0pt }) + .sum() + } else { (it.level - 1) * indent } + pad(left: x, dotted-row( + cfg, + it.element.location(), + it.prefix(), + it.element.body, + width: widths.at(it.level - 1), + )) + } + } + + if cfg.outlines.toc { + heading(level: 1, numbering: none)[#cfg.t.toc] + context outline( + title: none, + depth: cfg.outlines.depth, + target: target(), + ) + } +} + +// DAFTAR TABEL, GAMBAR and KODE. +#let figure-list(enabled, kind, title) = context { + if enabled and query(figure.where(kind: kind)).len() > 0 { + pagebreak(weak: true) + heading(level: 1, numbering: none)[#title] + outline( + title: none, + target: figure.where(kind: kind), + ) + } +} + +// DAFTAR LAMPIRAN. +#let appendix-list(cfg) = context { + if not cfg.outlines.appendices or query(appendices-start).len() == 0 { + return + } + let target = heading.where(level: 1).after(appendices-start) + if query(target).len() == 0 { return } + + pagebreak(weak: true) + heading(level: 1, numbering: none)[#cfg.t.appendix-list] + show outline.entry: it => context dotted-row( + cfg, + it.element.location(), + heading-prefix(cfg, it.element), + h1-title(cfg, it.element.body, appendix: it.element.numbering != none), + width: number-width(cfg, "back"), + ) + outline(title: none, target: target) +} + +#let outlines(cfg) = { + set par(leading: 0.65em) + table-of-contents(cfg) + figure-list(cfg.outlines.tables, table, cfg.t.lot) + figure-list(cfg.outlines.figures, image, cfg.t.lof) + figure-list(cfg.outlines.codes, raw, cfg.t.loc) + appendix-list(cfg) +} diff --git a/packages/preview/jilid/0.2.0/src/rules/figures.typ b/packages/preview/jilid/0.2.0/src/rules/figures.typ new file mode 100644 index 0000000000..2565a2346c --- /dev/null +++ b/packages/preview/jilid/0.2.0/src/rules/figures.typ @@ -0,0 +1,80 @@ +#import "@preview/zebraw:0.6.3": zebraw +#import "../state.typ": section, sections + +// The number of the `n`-th item at `loc`. +// It gives "2.3" in a chapter and "3" in the front matter. +// `render-appendix` numbers the items in appendices. +#let figure-number(loc, n) = { + let chapter = counter(heading).at(loc).first() + if section.at(loc) == sections.main [#chapter.#n] else [#n] +} + +// Rules for figures, captions, equations and code blocks. +#let figure-rules(cfg, body) = { + set figure(gap: cfg.typography.caption-gap, placement: none) + + let default-caption(it) = [*#it.supplement #it.number:* #it.body] + let render-caption = if cfg.typography.caption == auto { + default-caption + } else { cfg.typography.caption } + show figure.caption: it => text( + size: cfg.typography.caption-size, + render-caption(( + supplement: it.supplement, + number: context it.counter.display(it.numbering), + body: it.body, + kind: it.kind, + )), + ) + + let number(n) = context figure-number(here(), n) + + set figure(numbering: number) + + set math.equation( + numbering: n => [(#number(n))], + supplement: cfg.t.equation, + block: true, + ) + show math.equation.where(block: true): set block(above: 1.5em, below: 2.5em) + + show figure.where(kind: image): set figure(supplement: cfg.t.figure) + show figure.where(kind: table): set figure(supplement: cfg.t.table) + show figure.where(kind: raw): set figure(supplement: cfg.t.code) + + show figure.where(kind: table): it => { + set figure.caption(position: top) + set align(center) + it + } + show figure.where(kind: raw): it => { + set figure.caption(position: top) + set align(left) + it + } + show figure.where(kind: image): it => { + set align(center) + it + } + + let z = cfg.code.zebraw + show: it => if z == false { + show raw.where(block: true): r => block( + fill: cfg.code.fill, + inset: 8pt, + radius: 3pt, + width: 100%, + r, + ) + it + } else { + let options = if type(z) == dictionary { z } else { (:) } + zebraw(background-color: cfg.code.fill, ..options, it) + } + let code-font = if cfg.code.font == auto { (:) } else { + (font: cfg.code.font) + } + show raw: set text(..code-font, size: cfg.code.size) + + body +} diff --git a/packages/preview/jilid/0.2.0/src/rules/headings.typ b/packages/preview/jilid/0.2.0/src/rules/headings.typ new file mode 100644 index 0000000000..5927f7a42f --- /dev/null +++ b/packages/preview/jilid/0.2.0/src/rules/headings.typ @@ -0,0 +1,67 @@ +#import "../state.typ": section, sections +#import "../utils.typ": h1-number, h1-title + +// The heading look in each part: +// - Front matter: centered and never numbered. +// - Chapters: "BAB I" above the title, centered. +// - Appendices: "Lampiran 1. Title", on the left. +// Each chapter restarts the figure, table, code and equation counters. +#let heading-rules(cfg, body) = { + let hs = cfg.headings + set heading(numbering: cfg.numbering.heading, supplement: cfg.t.section) + + show heading: it => { + set text(weight: "bold") + set par(first-line-indent: 0pt) + + let number = if it.numbering != none { + counter(heading).display(it.numbering) + } + + if it.level == 1 { + counter(figure.where(kind: image)).update(0) + counter(figure.where(kind: table)).update(0) + counter(figure.where(kind: raw)).update(0) + counter(math.equation).update(0) + + context { + let sec = section.get() + let numbered = it.numbering != none and sec != sections.front + let appendix = sec == sections.back and numbered + let title = h1-title(cfg, it.body, appendix: appendix) + + // "BAB I \ TITLE", "Lampiran 1. Title" or only the title. + let n = h1-number(cfg, sec, counter(heading).get().first()) + let label = if not numbered { + title + } else if appendix and cfg.numbering.appendix-prefix { + [#n. #text(weight: "regular", title)] + } else if appendix { + title + } else { + [#n \ #title] + } + + // The first appendix shares its page with the LAMPIRAN title. + let first-appendix = appendix and counter(heading).get().first() == 1 + if hs.h1.pagebreak and not first-appendix { pagebreak(weak: true) } + + align(if appendix { left } else { center })[ + #v(hs.h1.above) + #text(size: hs.h1.size, weight: "bold")[#label] + #v(hs.h1.below) + ] + } + } else { + // Levels deeper than 4 use `h4`. + let style = hs.at("h" + str(calc.min(it.level, 4))) + v(style.above, weak: true) + text(size: style.size)[ + #h(style.indent)#if number != none [#number.trim() ]#it.body + ] + v(style.below, weak: true) + } + } + + body +} diff --git a/packages/preview/jilid/0.2.0/src/rules/refs.typ b/packages/preview/jilid/0.2.0/src/rules/refs.typ new file mode 100644 index 0000000000..16af29c8f7 --- /dev/null +++ b/packages/preview/jilid/0.2.0/src/rules/refs.typ @@ -0,0 +1,38 @@ +#import "../state.typ": page-label, section +#import "../utils.typ": h1-number + +// References to headings: +// - An unnumbered heading gives its title and page, such as "Kata Pengantar (halaman iv)". +// - A chapter gives "BAB II". +// - An appendix gives "Lampiran 1". +// Lower levels keep the Typst default, such as "Bagian 1.2". +#let ref-rules(cfg, body) = { + show ref: it => { + let el = it.element + if el == none or el.func() != heading { return it } + let loc = el.location() + + if el.numbering == none { + return context { + let name = if it.supplement not in (none, auto) { it.supplement } else { + el.body + } + link(loc)[#name (#cfg.t.page #page-label(cfg, loc))] + } + } + + if el.level == 1 and it.supplement == auto { + return context { + let n = h1-number( + cfg, + section.at(loc), + counter(heading).at(loc).first(), + ) + if n == none { it } else { link(loc, n) } + } + } + it + } + + body +} diff --git a/packages/preview/jilid/0.2.0/src/rules/text.typ b/packages/preview/jilid/0.2.0/src/rules/text.typ new file mode 100644 index 0000000000..7a77c17585 --- /dev/null +++ b/packages/preview/jilid/0.2.0/src/rules/text.typ @@ -0,0 +1,58 @@ +#import "../utils.typ": styled + +// Rules for the font, the language, links and table cells. +#let text-rules(cfg, body) = { + let font = cfg.typography.font-family + set text( + ..if font != auto { (font: font) }, + size: cfg.typography.font-size, + lang: cfg.lang, + ) + + show link: it => { + if type(it.dest) == str { + let style = cfg.typography.url + if style.at("font", default: auto) == auto { + style.font = if cfg.code.font == auto { "DejaVu Sans Mono" } else { + cfg.code.font + } + } + styled(style, it) + } else { + it + } + } + + show table.cell: it => { + set text(size: cfg.typography.table-size) + set par(justify: false, leading: 0.5em, first-line-indent: 0pt) + it + } + + body +} + +// Rules for the paragraph and list layout. +// The front matter and the appendices get them too. +#let para-rules(cfg, body) = { + let p = cfg.paragraph + set par( + justify: p.justify, + first-line-indent: (amount: p.indent, all: true), + leading: p.leading, + spacing: p.spacing, + ) + let w = p.marker-width + set enum( + indent: p.list-indent, + body-indent: 0pt, + number-align: start + top, + numbering: (..n) => box(width: w, align(left, numbering("1.", ..n))), + ) + set list( + indent: p.list-indent, + body-indent: 0pt, + marker: ([โ€ข], [โ€ฃ], [โ€“]).map(m => box(width: w, align(left, m))), + ) + body +} diff --git a/packages/preview/jilid/0.2.0/src/state.typ b/packages/preview/jilid/0.2.0/src/state.typ new file mode 100644 index 0000000000..2b983f041a --- /dev/null +++ b/packages/preview/jilid/0.2.0/src/state.typ @@ -0,0 +1,27 @@ +// The state that the rules, pages and footer read. + +// The parts of a document. +// A typo such as `sections.mian` fails. +#let sections = (cover: "cover", front: "front", main: "main", back: "back") +#let section = state("jilid-section", sections.front) + +// The text from `set-footer-text`. +// none uses `footer.left`. +#let footer-text = state("jilid-footer-text", none) + +#let page-format(cfg, sec) = { + if ( + sec == sections.main + or (sec == sections.back and cfg.numbering.back == "body") + ) { + "1" + } else { + cfg.numbering.front + } +} + +// The page number at `loc` as text, as the footer shows it, such as "iv". +#let page-label(cfg, loc) = numbering( + page-format(cfg, section.at(loc)), + counter(page).at(loc).first(), +) diff --git a/packages/preview/jilid/0.2.0/src/utils.typ b/packages/preview/jilid/0.2.0/src/utils.typ new file mode 100644 index 0000000000..f430f180bb --- /dev/null +++ b/packages/preview/jilid/0.2.0/src/utils.typ @@ -0,0 +1,51 @@ +#import "state.typ": sections + +#let filled(x) = x not in (none, "") + +// Turn a string or simple content into plain text. +// jilid uses it to compare [TEXT] with "text". +#let plain(it) = if type(it) == str { it } else if it.has("text") { + it.text +} else if it.has("children") { + it.children.map(plain).sum(default: "") +} else if it.has("body") { plain(it.body) } else { "" } + +// Put the label before the value. +// If the value already starts with the label, skip the label. +#let prefixed(label, value) = { + let l = upper(plain(label)) + let v = upper(plain(value)) + if v == l or v.starts-with(l + " ") { value } else [#label #value] +} + +// Write a level-1 title in capitals if `headings.h1.uppercase` is true. +// Numbered appendix titles follow `headings.appendix.uppercase` instead. +#let h1-title(cfg, body, appendix: false) = { + let up = if appendix { cfg.headings.appendix.uppercase } else { + cfg.headings.h1.uppercase + } + if up { upper(body) } else { body } +} + +// Give "BAB II" for a chapter or "Lampiran 1" for an appendix. +// `n` is the number of the heading inside the part `sec`. +#let h1-number(cfg, sec, n) = { + let (word, style) = if sec == sections.main { + (cfg.t.chapter, cfg.numbering.chapter) + } else if sec == sections.back { + (cfg.t.appendix, cfg.numbering.appendix) + } else { return none } + [#word #numbering(style, n)] +} + +// Write `body` in a text style. +// A style takes any `text` argument, plus `upper` and `underline`. +#let styled(style, body) = { + if body == none { return none } + let args = style + let up = args.remove("upper", default: false) + let line = args.remove("underline", default: false) + if up { body = upper(body) } + if line { body = underline(body) } + text(..args, body) +} diff --git a/packages/preview/jilid/0.2.0/src/validate.typ b/packages/preview/jilid/0.2.0/src/validate.typ new file mode 100644 index 0000000000..72b0636200 --- /dev/null +++ b/packages/preview/jilid/0.2.0/src/validate.typ @@ -0,0 +1,64 @@ +#import "config.typ": margin-presets + +// Turn one person or a list of people into a list. +// `option` is the argument name that errors show. +#let people(value, option) = { + let list = if type(value) == dictionary { (value,) } else { value } + let example = option + ": ((name: \"Nama\", id: \"1001\"),)" + assert( + type(list) == array, + message: "jilid: `" + + option + + "` must be a list of people, e.g. `" + + example + + "`.", + ) + for p in list { + assert( + type(p) == dictionary and "name" in p, + message: "jilid: each entry of `" + + option + + "` must be `(name: .., id: ..)`, e.g. `" + + example + + "`. Got " + + repr(p) + + ".", + ) + } + list +} + +#let content-arg(value, option, example) = assert( + value == none or type(value) == content, + message: "jilid: `" + + option + + "` must be content, e.g. `" + + example + + "`, not a path string.", +) + +// Check the arguments outside the option groups. +// `config.rules` checks the option groups. +#let check-args( + logo: none, + bibliography: none, + cover-details: (), + margin: none, +) = { + content-arg(logo, "logo", "logo: image(\"logo.png\")") + content-arg( + bibliography, + "bibliography", + "bibliography: bibliography(\"refs.bib\")", + ) + for row in cover-details { + assert( + type(row) == array and row.len() == 2, + message: "jilid: each `cover-details` entry must be a (label, value) pair, e.g. `(([Mitra Kolaborator], [Nama Mitra]),)`. Note the trailing comma for a single entry.", + ) + } + assert( + type(margin) != str or margin in margin-presets, + message: "jilid: `margin` must be \"print\", \"digital\" or a `page.margin` value such as `2.5cm` or `(x: 2cm, y: 3cm)`.", + ) +} diff --git a/packages/preview/jilid/0.2.0/template/main.typ b/packages/preview/jilid/0.2.0/template/main.typ new file mode 100644 index 0000000000..fa3d62695b --- /dev/null +++ b/packages/preview/jilid/0.2.0/template/main.typ @@ -0,0 +1,160 @@ +#import "@preview/jilid:0.2.0": ( + appendix, frontmatter, jilid, signature, signatures, +) + +#show: jilid.with( + title: [Judul Laporan], + kind: [Laporan Kerja Praktik], + course: "Nama Mata Kuliah", + lecturers: (name: "Nama Dosen, S.Kom., M.Kom.", id: "10000000000000000"), + students: ( + (name: "Nama Mahasiswa", id: "1000000001"), + ), + program: "Teknik Informatika", + faculty: "Teknik", + university: "Universitas Negeri", + year: "2026", + bibliography: bibliography("refs.bib", style: "apa"), + // Hapus tanda // di depan baris yang ingin dipakai. + // logo: image("logo.png"), + // cover-details: (([Mitra], [Nama Mitra]),), + // typography: (font-family: "Times New Roman"), + // margin: "print", + // numbering: (position: "top"), +) + +// Halaman depan muncul sebelum daftar isi, sesuai urutan penulisannya. +#frontmatter(title: [Lembar Pengesahan])[ + #v(1cm) + #signatures( + header: [Kota, 1 Januari 2026 \ Mengetahui,], + signature( + role: [Dosen Pembimbing], + name: "Nama Dosen, S.Kom., M.Kom.", + id: "10000000000000000", + ), + signature( + role: [Mahasiswa], + name: "Nama Mahasiswa", + id-label: "NIM", + id: "1000000001", + ), + ) +] + +// Dengan `label`, halaman ini bisa dirujuk dengan @abstrak. +#frontmatter(title: [Abstrak], label: )[ + Tulis ringkasan laporan dalam satu paragraf: masalah, metode, hasil, dan + kesimpulan. Abstrak biasanya berisi 150 sampai 250 kata. + + *Kata kunci:* kata kunci satu, kata kunci dua, kata kunci tiga +] + +#frontmatter(title: [Kata Pengantar])[ + Tulis ucapan syukur dan terima kasih kepada pihak yang membantu penyusunan + laporan ini. + + #align(right)[Kota, 1 Januari 2026 \ Penulis] +] + +// Bab ditulis dengan `=`, subbab dengan `==` dan `===`. += Pendahuluan + +== Latar Belakang + +Jelaskan masalah yang mendorong laporan ini dan alasan masalah itu penting. +Ringkasan laporan ada pada @abstrak. + +== Rumusan Masalah + ++ Tulis pertanyaan pertama yang ingin dijawab. ++ Tulis pertanyaan kedua yang ingin dijawab. + +== Tujuan + +Tulis tujuan yang menjawab setiap rumusan masalah. + +== Manfaat + +Tulis manfaat laporan ini bagi pembaca, instansi, atau penulis. + += Tinjauan Pustaka + +Rangkum teori dan penelitian sebelumnya yang menjadi dasar laporan. Sitasi +ditulis dengan `@`, misalnya @einstein1905. + +Rumus diberi nomor otomatis, seperti @persamaan-energi. + +$ E = m c^2 $ + += Metodologi + +Jelaskan langkah kerja, alat, dan data yang dipakai. + +// Diagram alur dibuat dengan paket fletcher: https://typst.app/universe/package/fletcher +// Paket ini ikut terhapus jika gambar ini dihapus. +#figure( + { + import "@preview/fletcher:0.5.8": diagram, edge, node + diagram( + node-stroke: 0.6pt, + spacing: 1.2em, + node((0, 0), [Studi Literatur]), + edge("-|>"), + node((1, 0), [Pengumpulan Data]), + edge("-|>"), + node((2, 0), [Analisis]), + edge("-|>"), + node((3, 0), [Kesimpulan]), + ) + }, + caption: [Diagram alur penelitian], +) + +Alur penelitian ada pada @gambar-alur. + += Hasil dan Pembahasan + +Sajikan hasil dan jelaskan artinya. Tabel diberi judul di atasnya, seperti +@tabel-hasil. + +#figure( + table( + columns: 3, + [*No*], [*Pengujian*], [*Hasil*], + [1], [Pengujian pertama], [Berhasil], + [2], [Pengujian kedua], [Berhasil], + ), + caption: [Hasil pengujian], +) + +#figure( + ```python + def halo(nama): + return f"Halo, {nama}!" + ```, + caption: [Contoh kode program], +) + += Penutup + +== Kesimpulan + +Tulis jawaban singkat untuk setiap rumusan masalah pada @bab-pendahuluan. + +== Saran + +Tulis saran untuk penelitian atau pekerjaan berikutnya. Data lengkap ada pada +@lampiran-data. + +// Lampiran muncul setelah daftar pustaka dan diberi nomor sesuai urutannya. +#appendix(title: [Data Pengujian], label: )[ + Lampirkan data mentah, kuesioner, atau dokumen pendukung. +] + +#appendix(title: [Dokumentasi Kegiatan])[ + #figure( + rect(width: 6cm, height: 3cm, fill: luma(230)), + caption: [Foto kegiatan], + ) +] diff --git a/packages/preview/jilid/0.2.0/template/refs.bib b/packages/preview/jilid/0.2.0/template/refs.bib new file mode 100644 index 0000000000..a67eb2500e --- /dev/null +++ b/packages/preview/jilid/0.2.0/template/refs.bib @@ -0,0 +1,14 @@ +@article{einstein1905, + title = {Zur Elektrodynamik bewegter K\"{o}rper}, + volume = {322}, + ISSN = {1521-3889}, + url = {http://dx.doi.org/10.1002/andp.19053221004}, + DOI = {10.1002/andp.19053221004}, + number = {10}, + journal = {Annalen der Physik}, + publisher = {Wiley}, + author = {Einstein, A.}, + year = {1905}, + month = Jan, + pages = {891โ€“921} +} \ No newline at end of file diff --git a/packages/preview/jilid/0.2.0/thumbnail.png b/packages/preview/jilid/0.2.0/thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..aee18f2700fc1ad43369b5606c4f295c1fe5befe GIT binary patch literal 72040 zcmeEuS6I_&_igNhBRU^gC;}n^5~N5Kq==3M2t|_6t2F5d(g~ z27~eH-}=)G2HRf%LV{-1iN(CmdVo|+)%G2I`oZ&MB?xfncu zW_mX1d^;-Xytw3HL3@aYnXt?$0} z{BYn@vDgZ3ce{|oZrat}m__EUrg$b@KS_|U|Iy+(@%R+Ufw8^G*xjj)vfC=_)|^Kj z5{vv1yIlYM&ELdhnD5tEA!>}e=DokiVW>GF<5nWUgHE*SChj7$eyzKxNg~nPVr@9m zVXbDKR7aFdwR~e8L_@cUCWiha@kBIc-_c92IAhCE>b}vnTm5k#|905^=9%SFmGMJR zZ1eL?Vku_Pi?yRNG8{M2w8JXpP)#sQBu)J3X*0W!v7pID>BNO=YnV-vR@GSWh-aHf zNU*-0OQNfxVLkz*Rr!{X*74fsFH49m+1q2lOlffmdbJ`3-5^`KGofxpz-Jai1nO|S0^P}ZD5W&aG4fG zNE7YK+L=r*W*cs2y^#6vSfpcRuYoLDwzNK=a>y+Utq?i!`~0lb+8S=RUi15_7^aU` zRTKB_hIms)-q6!Sx<5bA%naqw%O90VkWq z=n&qYCyHjAp1HAI-XTAa>AEJy>0wGLgy~lvzs1@*) zob&@e5=}!}pdB_T76+sJ_P(W=+mz_IlNvcpPG+Z$ZRE-)+991E51C1ckuI!FYINh# zA~*O$RQKbVS`IiPT4tB9^U5PEaNe9o*Lc?WdP&ve;mM7<&M%|)@tIY&oon;kTC6T* zqZJP{Z{K}bx9VUBQxqHVty^SfF{(z-L@h@!vP|`p4PMeL95A-;j`N@!e>_$=!p&(r z9f+u0Zrn;ZfF!RhkEiT#m!nHRVzYc}JzAykKOA6r@yX|Z zJ4aJTqLG+y{J6LF8|7(6p*l1j=t4dnFWeu-vwU_dc>T*wlTf2anfvv|Ryuei_Wp(H z?tC2gQDJhrSrDJ|gT;|2+pH4Z{?_|qW4c=+ltYMEw zB#KPl`iXt#o)@o{d0#A;fnhUa`Hjso>hv3jNaqlo45ZH&v?KR!s2SVD&014 zba2X=5|*|iVh+#V81^b<{=;u_njHxr2oNzjak#ojov}5}9*EYRFRoxJo`TI-goBI3 z=!g%r@KxNxhZa0Pj~2D71J~ykV{sM%9CA0cCy1}GFV>x&k!fNS%N{h;mMzGPBpw`s}iF0D@`o$D_v;C6FlCW z)*6MBEM6Y(+7GDrF*!~JS4n;buJFa-52(OSvz7i}aOnrI_X)Q12A^!Z%l2pS_^jT# zMdQV1u3g0XEy@&S2-VHuvj+N1rIqhy^RM1tB+upssiJKjkr%E#dOc?#X~o`6?xJd# z=b2Br#+gmfDL1lUFpnwlXy${K{V1PBM3y?vJ zL@bou)IQ)%^vPh7+uu9rGIipGVvX9ySPgUf>)L`yXRPFb5ENz zw}2DH26fV9l$!A<^*JHfl5Wx7k3C!+(zup0nQQnpbq5u*9v`UVZko4t;cAb?+`!mV zCs%_BP(aMpRiYQ1#V(7ld$J9)2q?v+rrjN6BZ-_aTYl#c*peK;u!_eh$KO_s_%$`; z4!4dP(oo7l6@KB9_u)Y|N*p`Z`$)l)+iuoYbuH3Prugr?5+}mPnlHq6_R&4m@+l>y z!=C-vL&7{0dt}&(Q~!CRQz1cnW3bjEr0<7LpD_RP_rmTbg*@!HoXoOn;cd2&9O9Dd^Da>S zTLKGn!#!1n`LbPunte;FRUYDuC2d;rX3~pmnM8h06&JiP;?_f>wv{$9hlZ7Szw958 zEu{TUJbU*%Xa{G(QM7W0Gj9^Qk9P{Ho0%VOg#yAJufgVqF%hfSs$g)Y5{Iht9{u(p8X`7~Xx zcWfMfpdmHZ>|fh8kR`QZ6;vTB%XU4`w6p?)wSv3UtVQ(uR6q3F(eLaGY9ziETvDdu z8*Od**PlOvy2tan-CJ#9X~V+6bl{di@Kn;xge+znZOcu_SPnpe25O<;Ho_M4ep(%a zyL69Q0(w}3>`z|hlNo1gwwCG=BXqi$b;uO}&5AVp7GopedezXEuH#9<(p`k1OW6V2pT$^StW4t(+4AaD4rGKCobC&{1$W(uVMbk>Xhc8urpJTaD=uZ9P8P|AsEvnCYA(zrPvR71k$;Rtv5Fkx*T;qm z7yK+9;hikDJMMpsypj1N8lbOY-zM%x8N=Q4n|k9)yl1kJ8o|x1J(xwau!vZ02&wG3 z`g{BqrnPCl<#&bRqMB4Iw+zo(r2`i~3X6kCY7^1cE-8NR-^~y!Ei9A@i!SoEQG-3Z4y*(*5f4Be-UxZp&&$7|8i^=}* zhy9nwR}zvKX)->9A0Bn!Lfz!V?Z1PW{rqkMg&$c2wai%;cfVJkAJ35N90J^%{3)`}4 z-4n3RQpEhe2mfIi4GF4#CQql@w8G=f^pq@+UA0P!-tuh1MT@QbCMhR4d@A@mQphb5 zc_wrG=H6sdhT23f$+xNCCqP&_z3%y|Z|lB|z4=?-xRzG3{ji-GcHRh(CNXneT5 z8X9S(ry%abZyF>9@bS}`;!~D;Nq|fEw5$ykqR=^k-5M3E+Au{0=*}y|}ovv|W6GYVF%T4C4rOdgm#h`{ygWkeoASKuGrL_sx9tGHNF=3zg zw<`haNQ{U!_s`PjUz+p8Qz~N$vK8{yCFYAdN5Bug>1#V4JbJGU{kKBn&zf1jpFvx0 zMl3Xoz2A7>h3>_oj#|Tl$`gyBP)Y98R&(*ng z!@cLZ(0ww+txOz?t~tu9KIj-zE3@sQ^r_OOL^Z4JTmzj?N9wnIu!B$)dR9wQNNODz zn`ukdfQW^z`q=$GPZB;es02L1h7nN=HBoc%Z5X#AmsRX3U%!^KT)Z*lj$ zkA*lo6uNN+6D}`Z>PNLAlnsN7N3Nf;LmjdWsYaa$s&*YTm6{9yyf!XE-pPVt@HmfR z864B7VqmhyCX9y7<~VCNaq#`DApqT_wAi3^gxkjKX55mrgp=_V-_F1~6`*?bCRV}f zUeO|ijr?{q_4*i%+tUhkryKCAQhoLf#a~p+#HPUczGt`Cmr5{9K5(ow^ph;}AkD`; zH_XkhL?v$jg{G~sW#$d)+<#P*iVdHL#fDH^)55$tF5s6m}E< z6T;QC4v*46&A&HQCUzWFaMib6GA-MbfL+e%BoyXan`Crs>MXn`1I$z&{`s1y(h@oL zF%o@EZMGXVYg$}Rfd}<%FR31cZHoaFb=?wFH7PE4&!N+b6XfdpX}O?hO4xOBJ0%zb z{t?#_tDqjip9>Dd{K3W@(DjS_C?o2fb9+*g0#bXMgvq8xy@ZlhEo_?thNA{^sWRx~3=5kJDIf^_N_eVJX3hWwdyC zB9>pOq<&tw;#LFr$(35W{H>bjL6sSJ=mT33#8jyIfO9>(dz=`4}O zw!a=?-EVH(xq7cv(7nF_;|s7rtx~@5{rh%No6`;P@0GhQY9|gmnYGTpxOSAVb&$JW zs4G%*B_kou0_Xd9$YEzSt@e&vnq4p4QK8F&OXzKVw9>`#3+|bwzTfx* zB(L0ZOrf9CGWcx;>XcvIrRpi`#QoCAst=9VzN>uee(pz*_rx0)w6D!%`Po}=5gXbu zL=$^!aTX#QPzL zw7hoq?+Z%e_lLo7tO(F#pV2kK0ELo#NaVh05Tu)ojP6g5-`=^G7-8FBLYArxI08X5 zP9$QmUp+`EAZm8B+iMM@aWV|E6=|?s11S&Tv?6<2UCkAC{is`(Piy#lSNMYBi8Rp4 zY--jI!kV>jS1a_KDFxtT{$@-5s5gFCT78mCFmA%*9d7T9U1tlrxi+E-^5GIA?G*tS`Ez=};9!h~V7I#cyxuZWXq+#AJh)O^qTydm^jbV>G_kbVM}s$+P74ExsdC$J=t!G(O#&6HsO=){dX{&&KI?sw5{?^CJamOrTb*BRV$ICX)zxJTA&JK#%dV zo5T7mGQPyQiVAk<_08}x-Qw1AW3Mkd^DQnK_6(f+^Aq=e50xw-EpA;Q3p{3I03oY%K;fGf~0ww*@G0o9#$ z^>;ax?nz6>hfDy}O}IY+H?`9SB)1fhqAWoS6(Vquz(oT(q}5{WJSn+x1Ck_-HRtk~ zpg~)(sL?wWwQJp%=XJB1W;b_t*iAHm1?{89;YGz}i-6+MRy!1Qr-OmSEJu^pS^0|z z{$2`U=%7*7VIzH^gDmcnQL!P94iI9 zstxr^=+-R+vilOT5p-e;XT>6p zP-o0{ozkY}q-J|bL zJQcIYo$3n9pu0M302svykNhNSf13+f4M}wU)gd&{qxKPjUfIafnW3I$R7FNb*zRsr zH__UD09nDG1)f+F2XF_CiAbOB-R-dEJ%>;Lr7ILcFf`d-Rsl0-SOh(KXGT`wxm_Lg zS-ZfJDMm`6*0fBYXar2)vH#%*b=Q4u1N$6LrnFO)AVbLe(N)pD{@(Zh`O`FvCy2~pt zZ*U`fR;zFr96)B)XXWlo&KGWlPYN?E8-9LLAnAaKh>76)`>wlur@4TPyp1-tR5^de zW9r5RRLysQ9Fm|N@{w1)U+)TT^qKUTpA?HmCACzO@ZMx*v*VZRr*hWoAP&uGfFz3f z7kP3{MvorEp7r6`XROOzXF{iWFi_b0ogT(nl!vDYs1Insk#9b+NpyGD z4q&mj#X3Sk3r3gJuToeH=pWH>(SuG;(a}JBYr_~f%5DXNKQ$eF$G3Fu`>phqICrf) zPRprAQ$J^$mRN5(m{{3}1ohwMPrz&hemY@M{3PiGdwY#qN^N5e*!bO;K!LNDO|7bQ zb;z7Qw>5ZrWItAe{Y%2u)twSQMi{Vkj@N`yLf^ZdRwD6W0(2x{+dzpo!x{28LS)<= z8jRc=o{1X+^&1WFy+hHp4DVUg1Zpc(O2Bg@bTWRP?XEi<5E)n;fVoL(fSO9sAJ{YJ z>E=7y)_^K7z2MFnfz#Q6-Grr@$%K12Y~VJ*1mhV5CS~Rp_F=9pFf(b4+5v+{w8*%9 zG?&HN?2EK;=CbIeABW;-peNfry#vjE=I6`g+7v&yJ!)F|=^mFwpS6^_!T_4-lhZ!1 zbn<~EO0>+L=CO0?II^CXA!ynC)QtnKpn#U*V*z^%cQ!}+o5r|d%~Vkt3N)!dB{I_+eV@C2%3eG|94 ziM!`yvLQ*kviSV(STxU+5RU_&DX;8SDwX?5A?o6W?W0Hg^^p4MSjB>&v|9p6{$4Le z-_1&KK@l$Ut4g!H^VjQYRcAV{3=j{?J%Luo#9+D!vEpE)V62_6Ss{DEn@4eYE7w0? z?xAIO398u+jD=X_o(%vQ-|3jgqs*soG>PaG5GBR$O3-Y^Uf|_s=@H{=xn(%@A(v#% zX|YylY~|S@SA9A}ZX4nUztixtuLB;vSYl=SlX+rSw`@(~V~*+69JLaz9t*a?*r_@> z-(oW zTphL8BlX&lc=Ab-zXVz~9;K@S#vXw<&$m^Oz!%iqThf0^@dPA!EvKZTTq2jL|?Ai38h=D zYFH=24*|(^rf?!6J{)LWy8cbZmlxk_zB2et<^16HgK8K(i*EY|NENbwxp3f?28}VUy!^&%~P*?NSO`OY_uMz6rCRrWv zJ`Uf%h@_3a-584v_RChb^GV72x!-LOo(xKT2o3TIydKBhGyeHS%S^BmkP@^m=S!lL z_6|n9AKA_ub@@-j$7YPN!X%{G`;wF)8Adn8nyA^Xt$?Jc4;`qtNy&*pRD-?|(9r@&Vv;{oY z%r(ucd~Sq>po-k6Dit}+%VEo)ACZIkm4dH*`;4kz|C?#75$|hBoTZuH4NSe39&At zNC|GZ*=-u>=l2Mz?dSJ}3mstgpc_!xg$jssGn=ND^ct`RZEb(&X@OXDE!9k-PiZZoXNkYCyz=)#k6idHiy7)cqmTQNL?4IC=`E&h-rl~T2EgnuqthF=mef)eWU#ZZp z;ALy?+=o6Nj#e6-jz7-W1DOErYc+)V}WNO2wRc zm*ZoUI;S=`hEa|K(p3j@tt>+Hh>hL=DVv$F^1JtbNt`UTjS(L~jm0$1Hl-dYsQDTvx_E`MlW5AW!(h|5S=EF7abp zSl~k|{UR$gt?JaN@60y)edTjxf*@FBy5}lfN~u8lwSDUXP9Yp(!SjX0Jd1s-E`z;tiV1|=a-T-Fl5YZwb6nL4~)&1VV*pvJEz>AO3+#);$kmk+);bJ{=Gdu z62Af&B%HCQGY+yLD~+vKI^;FEDlzGl{}f%P(1*ez=LA#cE?I>w0IW@bMsc)}v_H=9 z4ju#Mn%7%f=U|XP+NwI&eZP6XG=a~HSl;`#q4f3I8A9tVDZb3Cm>pix=FH#z9f3MKU`2l?+HUt#8KzS0q-bXWCL6=XANB=PN) zdet!X(vUgJf2*Jr8FF~x%us^2iO@u~~wnN>w z&2L|jp?L#N;=r1B*bN_58NBe;-!D7!x90kr(4{elU(Y=JU_Hn4euU)o6Ah>CS0{=% zQ*N8GK&2bp>h;z}I`(D}>aGq*h^{=-eBogW{8HC2H(UO$0#2LoUb^&!_V>UfW3J#e zj?+b!sVoqm5>B^2cO&chCE66%e0%OZfogdKd7N?w)QV981KpO$s7Quk#5 zY*;k(@()Giw36yY1g6>m zuFFe&;@Vca8W)#IEQu{9q|e)k`)LMrOa9a8KBK8Gu>ss^?~bNCu}iwR+!Y)JY)_)6 z2Jjq@K}VwYLGsBF=bqdIVV>WSPS_pqkCr}_H0A?^37-l+x0Y5FS!$SC4pw^ESHqZR z2)NLmmcc(F4jDgoyjo?;hMB$ubS9!;^ryPI6`^y^y!zZZkE;(yV++`*h{Gc&v(1&q z3Xx84>2BBGjasS)@L%#imQ}R`cejI7r64eqp+!@f51xtyTXNY8?i+F=iU_PpAV2Qw z6qp!`uBT6EkmKo-09?AD8GKF!E?F2_+?-TqDaHOG^l!h7GuH!Y0Ua#j2Qw{1+ zqpI2&_&n~Wm7xFNxJxqH*tL^yf8p7SUF%tA7T@<77wy9mrhXO%z<1cuyCE$CE#1w^^98Gmk9Z$Qg(->v z&x?O)$_uFz@Kd(_dLj?)J!DiVb&+7e6A6h5o~R7@^qIazw|<^@GtA35hYFbq!lK_gc?XHD&|!7Xx-ON#AY{QlnXxz9tHADhI1n!A zv!Q*mNB-M46H{e0jaWt!C;os;hD@pNG2w0bJOTI-RU<4?vVW;sDGM^+)mpzzBIu40 z-;y9p-)NWPqZFq?K~?l09=+MmU)%^6G*T^4EE<}QV1x10!%`0m;?$Gq+O9ffc`LnA zxd{Z^*v$r>ZKg*frR$5~5z1LcgdY9J)VCA2x3)i%FWc;~BhK)B&#&%#rDJ2&@NP`~ z!elQ>daN&>2UFK_5vzUZw10E{a=Xg7?e9QZ@zu_GZ*o%q?ja?f%C(_9O8@x!2Twz4 z9lL&3o7V8jK(++s7r15J-ru>NzxRO|(BVd%3(BQ=Ba~H%a=X-Mp&*k1$ID%X%F}p} z^832(Rrx$&bwX0;3tj7VdczM*;L-NL)tI>5;31H6g@{Sku@Xoo*m+py!e6Z)5X!$i z=0Wr)UOw?o4!PI;@)@CX+`nqk`aE(umu19VrITAArhSqw8xAX3({_Iv$?cR~&)UPK3Sv<))aO#nDP( zi(~xdM>4xp42pyKSxeN9w-jD)1h9DudruXa_~!HfR6!m+rn~)P9Nkqr+3&M(x-?>J zo(U^WLbul%b&qV}WXzBynQ1;ArQgy#i~YcCq@lD+%^0npf*z?o;hTKGIwt=SiQBk- zlxck3K#YXys%)6x^%EG>^-h`0ejpQHhb&Vcx;H0U{rNrN6foU6>lTJD028MOr;cBd zS7-!9?HZ_5L}Sgjtc_|?X}{f6rG>ga_o^Z$I+(C>1R3lwaTcA0IETEqkhQ^eB-=BNf{ zzcn_lk~N4$&-o1%O1!mDR3QWL{v(0k_|ofKwY1sZeQruXz4%b0^XFX2OM-(Pgy~x| zCDqk4(;T8UZ*5_-CW{}X>6jYn5>ym-X{AxBOF?9^$-ZyfV7*!URF*Aj!Z6k9VZ|uzmGo3A#XTYLI48}|*4LzOt$Jxo$HMip$ zyGkd!E@pQJz4WTPTv8E{tB(8+e~L;#f}|~z&y{GzBs+ZYq)z0@cUx(TShNA4%;A*)K_Z)uoW9+I*wwArC zw6|WYy%9`~ZTQ6x4v50OF1_oqS#{WjDYluFB^x|OM7J~V_{<%`W)Viu<8d8D_ADY3 z_%%+~@gP(YQO2K8dmoMdIlUI}5i7hHeBhdd`nZ*ytkIhh_4gT~DV{N4y8V79d%xf> z<2AkmwA7@Rw9ilMR^+tv%o>t>D9^pEXtH~*5))S0D8quVfUD*EPZLN6*Kb)=X^h}> z)D~Zy-Gdy@I{Y%$(a2T*Q9A01ivyqNR8o(GI;lgUDH5|UQ%6UTT`%3$5-5>)IkZoMGh2QOMJC8+VC=Jpt%TCyFcBTUPNAoq^ z2GOvJ29G~;0t+J~awk)M$ZBIV{m-_kwUuah!6%$sbsL(?8CG)_`_^jX%PYd2uKt}Z z9cI+hvp#DO!<`XOFS<4pBsh|tyyz%CiK9_hN1esC1~vciz(-51cSHm%%?!E;2O`#L zgB{++x^#J_Bw_sUwFNvOq{k?GRr=Ldl@FuOWl5LjDtmNr!}O~WLUtB=2WB+eSC;FH z1CAO8=bWqWJp6=k$54#C#KHmpP_`?O`)t!woEiI{@bG03a~IYkfP}_`W`G#XtZi3V z`kDr}tv28^QadgB=CJb%sv-7vch3G+Oq=pUqn1pqw6!{oTu8v>j@#~ABEr>f2>L!s!8ndL=K!h$;qyPXB>US3w8jyctqNFQov=aa4IuuG)o7NmXr*jy{_q zqwMnUg%C4V1J{Pa?4r`GVPK@aBSgu!je@T2#ocHj#GWP-yv^YV0c9zwx@{a z0FwLis~eEKirUn0$@l!aai}TD7lyDN(U{YW{l97Gn(3u_NnnF9$jcH8dXAgm(1u$R zpXZeI=X>*%Mz;t~cVS%HtGUAXZJpVFfFeq}yt8SCf4_0SIX?EeU?MOOSC9fIp{`B9 za66galV5ko6)u8gr8Y~W!+CxxErmHGI6PVaHhf!UH4NRHSW!O4^Jks&i+9qmU0W4L zk~~V2MX14+$x`3Q3FUHODy3BS=|QPjpAK?n*)7ZLK$1pUrcZki_Q~{Epg7%})Bp*6 zlT{@cZRt+K1Liu;b&FNPp(R?I?ItAZ{Eb$1x`j?P**w5r#d$bN4%Uf1u#{=s2PS?q z2qM$W^%Rc@6)5e!S^Hs%?&}~tdH#GK8@Nf3dqz%p$1f2*VX!qJEST0kcA?nf@40$f zWo8yin`Lr=?SvC#QUtl$ZJqsL55kf_!tm9L^*shn#p|!1ub(lvg&lXb8Y?Zu3Bj7{ zp#-L>X(q#c`lB1IQRM(trD@5)4}5bt;JVNV@b0st;KRS^&VQ4v|Bi$I4LARP73AL5 z-B{W`I!s6q-c@qLAK`sj_TqJlxU-vm((8vx=koQ;WL~;FJA2Lbh-AU>jM*@XmJ1x| z_8<65@!R$EkcQo@ZT3*N2KDW9SfmcUvNW(8OnaYJF3(bSHf)+`|C5h*`>*3d<$t1o zg8!|$UH?sk-u<6^yz+ko!kPa~NcQ~urT@N7{~n2dZ_d9};@^t+Z{zs4N&X86Uj07> z1ocnq*Lw}8L0m%irWoda*yeOv+tv;aSIv}4}c;i~9vPl>ef~XGr{`x61Z)E22Df{zKg1!UFb6wOK*E=MF3I_Jd z)lOwi2T&~P8^QQH4NT=r z7oeC~_lfz~-VS-+19RpQzWruD7neQn)LS(Gm*HGUo!6yHt>y z4gxt*_Ib{>*Yv=9cpZ8VtNlH}%(--;9fTUpBX09bI(0)SKF#Ysz!oSJ<4zofY>8P( z?2bUY1EyDrDjZSbU!n9{+rU38*011cyUny{B7#7mWH7x~b~b6vL?8{%IGL7RQJ9hDoidtr(?fW16eIop6Me>C<) z*w@k?SOcK+2rt=A=(!)Tzwg7|xb_$c@~IJ4UC3eqTgl(< zg@RbqH+4C;d26G6;+HSFixyPt^;TS3gU538-fm+o!)M&N`fahM0VC35vFg z;Kpa4CNtl~hVvvo2{#G9U2s-T&u$~f6h51Z-v5-?X`qNbT)y8P3~}z--TMKV!Nt+7 zD`1bx*j@Fw-GS;xbc`nKL761bB3rGlW*FI`VMYm>9rrp)_i@)}F9JI+upgT0E zq<~CQWrE?}0s=nMv&Rdnt=ysAZGS#BXhTCxxa0MW97lK?GuPxA%RB4U5_o)q0nw0I zm3MbFtW#q)+Z7Z;k+)=Wag4ov3!i@HxkbHn69c%|r-6}Q@V!q+4p@^n_F~K6R+>jrLoMyMU0@@O z8`$&)?wg>)Gf)j0ro&)8e&2(h?}4>m!S}JAAfaeWi6Uja9MKRlGBR!+1txH*V10?F zW0tSbR|bdy=xrI$s8GD1D49>*)nFVrH!TV$3JlJF&}Wa|o+Fm7?w~a7KtgdJrYJXZ zwY{u%Al8de3weDhM=vj!UVG*1=_G6S2i7AN+9^_!$|U*Kyz+Sayu??sc_Ndt4^}UP z0_*!GFPymDz)f>YcX~3MCQ~#gnPTuZ<&`IxB#8~W>{ z5!b0`OT!*~`E|0k-ZzdDFdlKaw8h?igplwt{|OYwK=KE)vBNeiL80dBBWH}ghFfOD zY|@Fnebt_b!d_l!Olofoyy&>w^U=vfU3=@$CGso@@A@42J?p=Y;{PcQc^(w<3*$q`Ny=eEK zCa8x%U+W4otzw}%TcRGi5{s9Syb+6_$5k?V!B<-jfJZNG(K?T(xL&W{@hlWzY7;JX zvdpY{Q- zxZSmvzs46*bcGW-JRY^pZ|5~=EE8t_s*E0z&LCP;^D)5vLq^+UShOIV9o9UvD1=X* z`{SwZ=>T1cFtDuSV7LX#pk@P@uFFZmX@sYQpWz@7_jKV<(Dq8(F|9PWg$zVeh7z(|bga#wyudK~kT+`|MJ$lp7h9sje zm#wViAGU%e5w?W|l9u{0O9xI`zCwVCUC9%U-#ZTc!j;uX^H{^=b#I&^h+?ZTBG;7W z@{Dnc=nfv~Y*VVjB-H6?L=yC= z%3U-`oaRby^eSzr@&;n+sq`&g2|vFU;OgDvVsTc@QRWjpsI>3*zFZ<3R?NM69_3hNU->&y+E$jhNQv z$z5$Eao|oSkFrVS=Ra8FI)H5x9ZI^0GRSpMPDT$F57}`{G_3Azc0^2vz(MaWa#Ps=a;hp&OKCRD1e2X$2x{- z?-_v-BtOE5uX^*foQ&~;@{K>gu{L9G0h{8`mEDs42y(*sz4o9+fPzTN)HT7$?3?Op z8KN1Dc06mnTV5b0QWQTM*bO?V6&WNGDNu?a6@beCuw#PGo~`s1n@gji{av3sEqn0@ zMHC)BD(PI@b^@j-|36Y`-t4c*)c+gxL(v?<;Mk(l##+d8x0^hvz4LQ&dZB_U4?y$a z?o=q)hSEA!VgiE+Xq)JA?}z=Ic-jFlwz(J-XUPD|f}W0UfG!VD)ZyICxbs|wSq0WL zL{q>{081zorgX7(GT|}>f~uuZIJ87}76dTDqv9pOb2Ix31lHoO{ zlMX8RJZolq?epw5DWsvO@uZ2?%AcEH*sJL;HYNIbc`_hAQET;4ta;LSrmX|qt7RRR%)RA5E8Uz`}yd9f`8yp}xCWl*zAwz>kr9+?%(Wqw$w&uxtZ zF#cx%X%PSk5Ies{)s4>ZYuu!OxKy_g<;XP1KgomBWHjamN-Sx41f=jO|G+0cK|G>O zimn9;M+*3E_x@pL`?v5wt+-@F`n`=S7EMXIDQaau{|oGZv~go@V7D&LZ|NyCMvjEi z%(Uw{vDXYQl>O73?h*+tgu17>1BD)~gO{T%&5uTs) z0d2L?8r~)_2cAx>A!zmd&!FvSTI)U6ron!?5bhSVjm!$*pbn^yT6ovB9F|Ris)RSV zgREtM@2j%`b8x*Av{2TT3SrDAr^Y71b`-G{Z4l$_d9|nj=tTK!ZbZTwc{F;L8>9rGhih!P(y0j_l((78a3$v9=t6Ma8>jYLixx1KrS17ZZF zOl?h)66Qa!^h=u#VX*Y(^=N(Qh;=|~SG?1)ZS#8g3fD{$tkC>4R{;P*KjQ1b8^S*8 zy1HsGMJH(8(Ehvl3^!t5b*+anj}zaOxOkNVO+Q+G?*Iozi!x`CK@0-L^k}$zJkhUa z;)w-HKB&|Vylo%NgM)hGv_5o$UgJ=d_@pRQs2xh)uYwe16T}AhQF&D>73k?RV^D1K z&;c!g0Rgv+T-?OYCGlXMyqu?^I>sq)AS%L2x-rFtkd$UBd1fN~X?zLNSfe0vNT z5}l4=F%PKwbT#sO#(P}CPI?18wvQ@lS_>_M@JTaxQ!K9zt~Tw3U%o$F&%9g4sI6%g zTiOqQg}`=7yhbhulLyA}Ymfpm7A*=eeP8n$k5{ice6j+(h5;rXoW~k(;Bs({{0W+m z1=OrLo5k;Y4LXHWA9czm$unUG6ex7{p?^;R;jAUC&>TO`aScd=dceJk1M= zfO@G~;Q3}OxqR6{YzLAy+o8KKn$|QiWp5}}@{4!mc3zszJqVN10(dU{ilo+0VEDOw z*K-)kh&stegmXc1QU(W>EO@eLP?*o+f#H=D%G=nBgzULr906nnf+OW{K$sj_4l0eZ-OkGmYbGBX-LYvcfdizPr<7Xrc4Co?>W;cYTb z=#Ub^_FN9-5@;buh8;*U)afs($Ef6U|3rKg9yb+BBEBaPHX$KPsmknn$~z?}4tn%3 zg`X=6hS9Jn*=) zRaa@KF#eNZ;EMQaHn$D}EMZ@l*B9GQamPK}xqL^bz6d{YVOmSmE^zrAgOnsm z$yd%}HFL(BrAj4_FzxK#S>XK(lw|ro-(YJ!Nq(MzGQKYKPl$Lg2$)<}9GeIEXdx90 zNgcsF);$g)S!usaoX&fjob92(3%_40R{Psg1eCsfLO?}8iu7LhyZG;Ob1u%se$M5-nt2>YfqdUu z@B6F1ll$KKrB`rvA6Mzd$L9Qn-3Rm00`GmVA(f)A`qD4rc5NsyRV>|OL)%kp*w|0H zoGf5D&PHV?ulDlH!)Tv}9klB2<6p0=DJ?F6wdFQ!#*P0F(+%#tq*;w& zN!B{7g@TWXHL@yc-bQhbqbs!Ujd$~M_I3P7y6UGuIcDr0yfRSt1I0aXKAP)40Px<8 z;dcG6U4XV)#eYbDV&o@7ssDs7*%?21tK3M>zeEy3vznv#q~mP`m6{F|eqEBMcJztZ znW*RGJjb&YZG{#xA8OxeUSNbc(cGFw2Ul$df-o2T(ea~kgV$K}j$eBJu-3MI$0bqD zQtpZyym&tiO3g^n|F%yXa=j6?Y&|9RjiR|8^H_FFp2un!zaW1_Pu5KIsb3gg0j?gD zHhBxb1+P$r?uRC4VtHrxT0KoZVSKYZk~)pG@8}dG76-zmv~RpchB`Fx$fvw>WF$Fg z%L78^{@6%#&eEROezTr3FsMHDE?_B^H#W}=PzVVCTc@ig;4AeZ?p&)vV(G(YqhzGo zy54MYbZw?+QFl=b9KoT?ci_iewCI{BF)vu-j`6W*T5!2T9VSIj~C@OX#VkCdSOtoEbymqHn5&6e40m8CKbOg5wPn@zu$r@qAH zMQrI}dKc$I7v>mm>$Ysql8h5&sBNQ3JTqv2R_hy9^1npw55BZH(5U>;%EWyJUX9;7 zJhlnqC0iDWGI7)8+aCS>M>g$lOsiZ~JcRjDcnd+}x88jc-i3K)Uh|Co584kj1Ulc0 zeBlJKb^afUz-p(#sUpoIVKeCsp2G)B>7UbZT#7tb-SXiKFL-EG6P?^Lis{DPVgfF zquNf5#yh8L`)g%HjCP9qlZ=cHzm2mHE-ygm(b_KzM%coT?LO@cE4&8Y~tsd>$JYL_{6ZCG(95^WcbULc+A0SHWP zwQWtbYy6lO!v7MDqwnb1c4jv$BYq-~jD1mX>(Dr%-?Mqr^EB-tE_fMXtok!M<5<4c z&6G#ZJm%ED9TMK$GWqD$sUzP#BSw5vGTVH&M5eY)4%=BktZB>=kKtIiI!@Xzx!&gQ zdCXy>oo?|pzX-zi;}s>atr7KEMzoSp;)fU76Y!pHUK!!sRv zF`^{QotXa5hm|@q#g`pKXA~8d6E1~!_66^SXIVPs7)EHnS(t=c7cxWy$A@TO4IW2s zZ;KfA&0SWmz9g?BmU5Xbo?Xi9tCY^i&Sa7GwzpO6cnG(1+}ZgsFK!bc@k0zSYzLN2 zO(@@mKF4G;o?L$kyUR6?*bQl><^T*eA=Gike1Q4r=-4?g2;=B>`iFLfaUhrP+`4vd z2A{m$m4U&&tC@pHLHz)iKMAQ&UJyIcHIqIF-hbJ zzf&c8|a$?w{`U!)bPY!qqmSZCrbYS62DBsxGso z!=gk<@?@*$lQMF}zU8{^Ri5HE{nRy*v=Xj3p79{b&R633r0Qt=y3_*$?`;Gx%j!1~ zqv_fGPl^w5oe})2`LA5K5rcD1*x7!!^vIgBEb-6s-mQvWo|n;2EO4k!1!GOvk`hG! z@_(fT|8Hr5_P|s-rYdt7h(0mE=nP{KE^!Jjr0pmaQ8Nsmuqb*aeNo)GwNw(EKOQLc zI6nriZw4Uw`bhvat;K)^m4OBU2Ow5HrDHKOB?2&sK5a*_mL3S3Ks%PwQjh&&G2j#B zC;@b_5V_h3aZXebq}5-A1ru)!!Hm*p{Q*#ILd1;+U@0WX_i$e-{*IEzRmO9=T$ z&8k}i5Wxs;-iklpY2GGRTuYpsM?}js$r=&Xn+ga(UG-ZtBJ6z}>4q&Hv4%LKtHrQL zI?pdgq}dVUdJyK769km)ycgY$Nhrt=Na zf@_|q5wcYbcmA(Lw_4WkP7TSM-&cxr2Id>r=lXBg@4{FI!FPVK+eil$73BK-gv{`a zPBzuKi04rdH&WCLdBX%)K{H#r*U^1AtUT?jw+f4bb$mfO?^u|7fIX*ypP;EZjD8dM z;QRCcxwrr!{gj+6CggMIFkmJ$LMYuF(7HtsF0p+Yp;=b9&b0K8f_r8Th0vB+20f&( zYtm#aU|9OKoLnWze2a2OIOe8_)Ba6>b1BTMAtE52(I(v_P5_O7_&%kXi^a2bM3*+f@3mqNh~}*Ply?{UsR`06_za$aBvUo2#&7BAiSyP{F$9^}@hfPrZsUqHYRM2LMwK zv^Rs*s|~u?GxHJa9wLnhtChI|cUu<~+Am$ZOI6B_Ra2$_M_O?6q@- zQbS4pQ?wLA^-|OhvBOUoN+S|>ZT0R!%iGm!=5^^u>QSta?BBTIE=Vl2jvo#};ri8| zU@bGRtqE{YXtV6w!8Qg^UMIrb3qOlg+p7#FcoxBF5M-09pwN+Lz)VeY_1L8B|NkI7#IAls;jH|g)1cr;EK z|15)$rtEbfvI#D-I`pWzzp06WH&G5eqb+dh4X>PFGfK5`dC{p!_=u8Wd25IusNjSC z0P9(RmGgAY`SE@KaQO@e82m|^Md@k34n(?W=zq%X8`RI`6kI-mIWx-zM6OZX zovZYql9}Vx+H8*{1I9=+|JV-Fp7dl|m3PSg^S`I7y8x_}Vf-}cJ}`E+J1A$&m-NCV zV`MDVKd0Bd?p}^Lu@)Lr(wwsf zZte+`C=R4_fZ^RZZ(Jk(iepuV7?km`IzxX@pCBmJJ(q7Xj6}fY! z)wa4)kcv1Nx70vR>4aP-dOnYE(KF*UOMfD zjh(73VkAYgd(DkNqQhC=nuPQ@I6z9w#S(q_Yekhi4s8%9#i6bz;^tsU7LG z%FxXCBxX?ml<8*M=yaLm`}t;<^6uN4^<#r7U#%V%>4ZI5XpPI^di=C*tU9E0R>qDal#}QY3$T)Z3>!;kU^vc5r&W^R(XLzQ8KDJoejyA7X~;lRf<b?D{S4#+=ICZ#fU|#GG{nqF%E(rMi8uX#82QY`jv1w|O@K#O z>~!Fm*9GnHF{=g?vcB+8%-M#mxnjXH+CLURco+qbU(oRd%`>Dt;atMTT&&=XX6i!1 zr8U3dd`M6E^y(}#MqfHvE1cxy?K=(OY6iK=>l*rnKqE2R&Sy#qVHl%H6D__Y%CSqa zdvf{2)|-_{6AcI27et$Ub77Us{c(wOr)>{}dI6lB_4pcXjq!c}Vh6oc5ytqUywFcI zIKfcmoy_NBQ*YQXLY9$bN*&S?m@0M=lIWOO)NzsLZhK7lttfiN)^HqC2PkaLcrNQ3 z$ut#n5Ir=(oMsptYaKfhEnt{-CO75ATBY#MjNsu}doL$1xM$D-v#vMw5_ zTpEhg88_kH&itxr-Q?>SYWpzHk_lJAg~?*a;qtB7hV_Fs0khH|w0Y+9Q^D=w+Ynu> zma(bbqY`Ip;Zf8z)IHxg(d+&&F+>G>lS|txmtX@UgGKp(#!d1oq0z`$MxkI{F~|rx z>J-;?F+8h#r5$>0)Dw|T()a>lu_A!~aBzqZHq7sNtiEuvSF2z(-nuDfxDbg&IP?yu z4lLgw)djR-8w;joto1I&-f2)NcxcB~Z8>p!?r{3HX$>7E4L`nzbe`p{NUHTLhyBK; z@_Wqvr@_cI8i7xyBr|VsMsZmZKKCPSM7mW`2S}!B42Zvi&TkCZ;&zP^v1e~G_(NB=WSco0-mkA)CXsth+y$}9z z|NqoIVk@o$!x7?MZxVUoC@5>RNXB5^qQiuA=?{gp9knkY_Ts_`x7B04KAAn~zXx%O zk~^&oMN*X;9&~=DUGv;A7$M!uD`FkuXlRGb zeGYMvxj>!n9bV+uK>C_t;El!HeVZ&8XvUTXB94qm^hua!2s8?rcc~ololPiJUkHAR zYYl&mqI8^;0LW_1>`Q=kbl3uJmRD`x&`kwUpcNxz5{?!vGqe>clU({B#^cu4%%Kk)xl#&*ti`&r#yPazkh>SX9 z6Oca%v672}vY7T(0jbeSF3cA%@op)^AaY{o2umnYXGghv|4bAF8I%R~>YR^|YMS<` zzrYBQWafW%&g{;EtxQe?=q0^agd3n$y#5;~r+qhTwkc9X+Kwm^C~h6!a?KaB=oRIN zLHV_tv7=n~Zdg_TgBgX^vQtw-aQ=!T^nlZ4M{WY;c%N=(G6BN1*|`cD^#Thx>;Nry zk2T#H%?Cdt2w)0?UDwOo( zNt++sMU*%Jn;vxclcCP6A`32rVbm&yit(Ix>(NaOcESGL7R9uG!~%IMJ~)is5Trqd zUH*=Uri9zE?eucQy5Lv5$ynzxZNW0dnW|r!{=CX}Ega~?r=l^TDCv7~6mDD#;0DV6 zeAi+s>>7%q6r!r}0yA1OJlOQLVA|yLLZ_Y-T9-Jvb{hg=cpUEiZ9OWdV8T;&X}Ie8 z^ZHuhN3?kMY~z87AKU83Vn=+?j6F^Q5aTt6Sgt%)h6^Y7ej=Kdn0f?%Z>WE_Wn%rY zpfYH%+A|3H12ds3u_`4X#poLJR1Fg_yoI9ry9Rf}l1pbx?))ka85qmXM;J@YG5)gbX1l=2qkitz2PRzoy2^P--Anw6pK# zU9S^2h1ab>A2YsC)$h%nsqKh_&gPkOt>=fHtu5YyR}WSS65z+J`qFEZ<@Z-qp1Yv@7!Z-B6{SM(leTjP16emWyVEmR|HdV4__=CU>y1^Q(6I~PZRjp)~g+H^whzv zrFX-iKNUw4+AZ~@t;<-l0W0E#;IvLp)Rq#~1c8#g&1s|8au?b)^&>8d69eYF)srXZ zyI&ZsmsFh|?b5veVmvt^=pi}bQr#(Lvi_?|oY1bnEBb{O8lyLnmPy4MV8VT$B~v<( z_I2HcqTsJyu7v6tK36Gkfzg9WnnLN`iqyk{364~s;lIXYyN)zG3k#7SYgvTi!%r{1 zqP%R-2e~lbH&l2WEq3hCCkn6_fyKWXl#`tvV|_b%F4#G|+XCVgW+Ip_%1v|cu$1gZqb z9ZBt{hm>B1X!KHl4?kCdjq~6y-sXpHrU$p)h}u#&M+R3>QCsF17aR4V8x;Cw5o@__ z4+pkXHYEhLo*In|iuUEltZavsyb-{Z{m}yH=ZpUmYsdk+bcSouo)3yPfZI|7i}n8D zLSxP5L-hB4dL?Re+a7{-=_xG$4OrKP1^lV!bEX?_*v;gY{=SO0`Cb^%8&>8>AsN$c zLJiM$YMzg9GQjFyhafWggSKl|j~Xp6g1p4LEW8D=630MCU+Fya@u>W+Dv%?a1c$Tl zXN|j>EzW=);qK!qd;YwRHpy|fz1=cozQxG79@ z<43gU`+mdN8aYMfvW`@d`cf#@#wDpy*|Lw zb>A1@F)gkiSZ($GJ*%MD?#({VPC27Fz@ORb}DMdRapmZfMl~gxM^}wvg3+C=n7LkWFZQpS};I80t?Tp?rdiq@KGQ%;N z{`N-=4V}F90c9bNuuh%9q7U@97d~5K)jauWGZUNg%+1nPdf;jTx6Govwcc;#NT{>$ zs%f?aBeU#&NZV^Do@o;{yZb&i7G~rtFK7<5I3JjV#uq9U&hpX>h9EDs`QkK9`+EEHl$jA{izK<&3d5Cr%;J*2N5pN^dteFupo~2!EZu?-j^_?)DO7HbcR|vs#J zNz-76b1}p(jTnsJE?)*=(njtyadVoOJ)bbz>z`a*{Cq7SXTowl!Eq3}2TGWqEhhS= zx3aeqblYU*&P6XQUg{1ZVu{>JSHe}-^~DmMF*3>|L$f{cq%A zgl_UiwTo!+KWTA)NQIr}HhuZ~TGR5JzrAsb6hNxF+uY3xaxT+Mr=g zsQ9nAe~KH8?A$o!xafOS-Y+15~&)nvW@pV*uh-n$B2OD3Y~9sB(Y`r^oKKeaSoTp2O5 zCO`hU(@at^qUl>JYUtdSE#vikAr^OOUW0(ATXg)m@BmM*I>|Z2Z91ILMF`CnaOKNY z^U2Plm1k3p!q=e@;)>IcB+>lp&^$bC__LOVT$Z2keEhAh)x?H8m$8U@0F#jFz7lhx zQU~|EQ2e-m^Fq#7vvD>TuceCVHY-S3 zzNNVL=u)vS(cJHNH^$cV{Q*e6dYSnQF&@;Ld5P(~BV)H$`w?wncuOAIT)Oh){%MAbPq;Js!CPSK1 zukn;_dcIokbNon`@V+bL70QWwWbdW!K&xP#3d8cqJ>?5MIQw~ggb~)ufDkn@IIfDNXin<1iS?1(eSNlrSzEH_OkpcjXoB_w zDxs2Nc@bEcq}RIwj7GiAv@;4mmI==-)GKA@;ilg%{A5UXEM$x~DLD*wh?g%Vg(96S zVG3U2CE39v3H8_J{Xv#O4pl49z^u40_JCK$i}~roE{w#mkX+b1Zu0jl7k1&2@??85 zlnTC|R?~8O+i5``$P!Z0*ljqF%+W>b(s*cIjHw#%(Y6eS-a0`i%^k^Y8 zBeYv<7LT<$b_q8STDjTMoJCWNE0QUQO@s zi}~jVERWGXYuzRZ&vpAY_-YjDS+^~|9BM6N5{Ro=mQuaCY}xEVy}Ev)5Y!0lIf0-1 z)eQwZ^;C9Yvn}#!!>GgdxhKAQWQjl!>Web3->OIw9zO~!wcz_PRl7U-Ipus>53@G< zzmI0hDNV~qx5*)Koyb7+>}oM%>wALW{U#NGnC3?0(N%RCn{7lx8Bmdrr2mX;t&GjXE8FcbJI%#k1TYz{)zdjj{MbUr}$M$$vsN zo;oHQ)x4Ngx4CNda(^l<6?;z04XZ!3OBX7q_Yh)D=;t~n6`QKL4hm*zzIYM8(cdoo zq9N$9CwJ209)uelPG))>_8tWSPHlXP$94BQfkX>9Rg%U80?T^cXDi#7>H$Y zeW6Ght4?ZpPU0^K9&bzzk;OWA7$zTCtl*nK2*txpcutD@%SPWD-ig#dQIH+N<`u}* zAh5TwNCgt*$jiek9!k9k5j7z*5I4?3XmhI$=jav9ycf4mKfu>SgoN~tLL6bH<-Xwg zm!5IB%#bU^{BzsCLT^`K*L=Jxc1=3hsHR%nJ=31+9|0M<^gC4C>-1Z)zRY@({iIZE zQvk&&pq%R245^OwxcwwdMo<{#xj{`So`>R*85B1BS;xpSTzRm~D`rB5tKhqzE{1%Z z%5gEcAmm*62altKEl)SD1^AOaa^_^}*e`D;r}JH15+*(9Wj5O{39d)`YVD8BlT4XJ zgsSMVb>^Lc$mGbtW0?t+&6k&i2lb9e5^^`PhAjpE)_Nb6ObhHbA-@&UXszgW z5#{kwpf1E^t|u_LM<{JZfgIcp(Bhd}>#ADG&Gk(1FOK`$a)1JUsWh*7i%&wS%h}$; z*Mw6X9wvvBVlbU9EAt+^Fk8Q;m56m4avSNKEfjauA{fzMKn+(2+;%IuQG$MB79{@5 zoBSHux?~9lvk3rv`}|BW_pd56ts#8zrUPSC_ZRq=DsfP?z(4>0h$d+6ol4#HrLq%n z&E8F@VfrxwmZ2#TJzv~12ycSE_n-np7P0`=sX&Du>(V~uE{WprFIfP&vRE+U3@_Fz zjhr1`-0%hZe~<-iEDLc7Q=qmTSq^+-qs%!QL> z0`T7y0t=TP9x8j~4{ZH;57(M^s0@<@0rG>&qY7;z^=BE#l`sWM*t8_rOQqcaP(G}% zgb-10@N3^g2tp~W=9%#@FeYb!RfdGrZoschAsbu)k{BhIq6lHa zdg}Lpqr`=eEOe4j1#OK6m7u1oQ}xi9n@tD@TS47aaU0QXxhq}8>w6EQ&mE8x*Rs1aRI zrlp5HD|G|(PU4=k2q#E*KG}2{O)7`|LHpzl{R;EAnG3iPx%Jzi`Mrxugqn_FULA$U z*Y==4syuRQj|Ru^+%yzN7heF>7T#GP(% zpiUqJ%nj5`l6J;yv>vz8pCu?Hfpr7~Qf?69E%jAPJp}J6SQU2=>pmCTJ9>@l6GAsx zfK7fZU!X`y?9vTi1xS)lF%UEmQ>YIr+FrYXoQoBFtodpgt+o~*B+|NUR#O5ZF~W}? z1nsiG)j9__<6d*GZlhA*b%TENAS6w&N6RP5)*kTVF%>8~i}vM>3N1`1owOHi=h~kG zCm{=&@M(2hNaiytT8$SS;7UT#0)nS`g_4Vbl#5c(ctu*(`c1xh6bcL6U{aA7RXX8N zCnUf-0s*V1nL0Jae4P_eX*mTFts{zZ$6o+3XA-F5!5UWLd;>C7Z-fx{P9vvQ^CGB% zet4}^CS}jqun@1^W4bUMCN;Koycq2FEr;JFn3 zG-BwU)H3pr&PDR-KS)r*f_5H!-BPB1K{ECQ*Xvsd6)(i^DhGAm7;1`hL(=mj@q3b> zOd|`QL|kpMk<29oaXtRNfjo#Y*OR#&(xfx^gXqtoayRH7Dck3fT;BziLb z4+*GiqI^T8ZmkFG5z)k@jq1CPWPZk-iK>!Z@62sh1P5Iy0;UMMTr2;9w#~ZLWki{2 zxQJ?%{6PX?RT1sUP4h5^77B)}$)%1J_z$Mx!$+rmt}4hE(k1M<@`nG)Oki3@V)MAz zuRNqSBR8Z(a+6q1KFHd6})P*`Cg}?(q{f zj!E#?6-%BvVfL`O`Eq5PxM!?qa`MxJcn#Ya&xD^NJ-hCk=?x#i$V54lA00H$SVy`c zy6u(SmjR*mUOkr~`4l&E?q-jRk!bA6U2395a9R? zn)_ekUa|kSdHYnijTygbFioTV1;NBD=aV;xt)hl>cH@IwYYM9MPk+568jA+De5S!2 z(y%MGcMTEwQF~r(^{@+}$!9sXEx;jkoQA~h?Bcz~i%?uu9^!z#UKz3fLABlOBSP`OKoU>LR zZ7bHa``6KvyYOt(tsdx3xXa5I?@VPk*(}x|d_rA+T;r5BGt!G6z>JBG=5U0s#_bok zvnPLFjMg66jNRtd?jF*5WK6F4qxCX*xZ9Q(zsXpPbdLS;4LruSL`m9h#4+ z%0jw@#|8>73HQdHd&0|1B3QjqXG?6*+4NBkqI*}&CxYB%>%WX7b(D^PRqwc4F14-u z7m0Gyh-}{J7TBagTzK3tqIrQ?#YK4C!}HXRpmKlyu$7GxN*l7?*0K+y9!( z7ZaMqu7$O8hI*$WuIqdK8Mbkc9i6NnrfKl#)`SJh8V9+m7l?ah8YyDW8$61#Hmt4t zqi^)ELWR@ec;AKqfxqaeRIR`UzVH*;e)`>Q8oN95MivjpD`fZSQm*+a5@N0C)eawK z3CDyk$f?~BT@vzC8D9y}k-d%khxFxcPtT;MddoHCY#6r4FpW96vpd}o(WRpwn(97WXg$UyEychiHg)Bn0HSgX>CwFPmgPe`@j$U}rQY?}@ z8b8^CcfAZ2B2S@na$hemsqSKZQP~%Mbb5tj*;{%&fu1MMo$zTWo}91XtsozHIKE13 zJ(5Djwo{i^s07!X{6_i zi!8alXk&k`N3;>so`Zq7P{>Vs7p9pDE8cPJbPK~XGU5I>&`=()^o)~gMthA1{^k^Qc7Nq`*kW7R`Pk!I-sbSZKB>;f z=8wPpuX@%D7p?a{%vQ|>uocr#9Ge=k>cx{`v&Jp~nv?I#1!3A~A5m-nTc z#RZNw-lO@%T`QgqLS-~bua;r4|CsxXw(F8j%>%dtTqkM4g@f%G`LV$ZLvhVL8io@Z z^V5ytiR7Q3@)sBF>}_U4O`>uY>Ue87-Aco)AeO2=$?yEfz_bEK*sBw6g}Y1lW!t+9 zX7OUe-tCK2sE{GHC10Ie!Q3}P*6=s6?3!2k?)<&#AD24X=vk=OIhn(8I(XN`xV!rv z@Aq@ujSy*6s!GfOddJ@YrO+`TT9 z(aka0?tL$W6f2ah3XE|&cLT6{=A*#C_X)tJi(~%-~9o@YZl|Z?XMCn(9#ZNo~ z0lHr(bDq7NuL&AMWWM$+*fF?2tpT!A%`Osb?;@1~`q?{^nh$+#=pS;x?3`kM2-M7O zNOZBS>l0xspf`OaYqC*A_`Vr%1ohU)h+P6c9LGr~pUwQmH^Pb)pVx0n+XGcI#nrI4 z_3|^timjf7Gg{9x?dHiuU4r>7jx8V--z%L!7AYyU_Afo+YL?(QZmJvwi8vbbreWZ< zA+7$^|0LnxvBZC`)kixFW66)hj`q7PsVdj3*)yTpvS2WEi?>Jvf82#D76D>GRz^E5PH*ESb}-5g$AS67j$Kp76S*#ol8p6HVR@_by9ahfSe} z1uKGmt|LFHxDlzVLx~yEm7pD%>v6$$pvlBTX*2N3;rK5@S~hDP`1OQ9Ynops3Jd_WSZjsAt_Qat$BQ6yP5 z4EYy}>HI>xEeY=ck`!|aoG$^AREwuRQ>0zO~ySQ%V@$bO?{RI2Hp7vR}bs(yVbR=VAEPX?i zl=n>auhGInpE$lmBx(C@qMWUFpd}(RJ**~SV;`P(rkHqv$%35z1!YIrbJowBjoFi& zX%%Q<6^v=T!zA2=+e(YJrw^Wz^uOYT6{%9Dtye{#pVZRk9!Yzd>yEa8`Fwa$!i|;) zx~&k_Pa8S84n8ak(#4;!OiJaVJ)6)MJ5&;Ij_dk}Ut`uoX;&3}ymBP$QPG9Tyi2jk>^CtNk9aC=+;qCW3$uNK zD^{Q~8EUb5O^2vUqnlN^A zRGx(GFW5wi^^gO>2*4xlzmEL#MkZKK10ET$c<9N>JBvI2od*SVIDCmiFR6j*7LuH(D3}s9&Mo=JW5b9qXYI^uXyO(vg;7IUo826U zO&N}BGGHV`BdYFHWZa7*Rq;;8_)` zk4w_r+>>VaK%*vKe%>fwhRTig!xl%Jp1-6Qh8(BK(Dg+41i#{HQrRPFAHJMUGB4MSYzY2y_@IxG!aMAi$AHUT8Y+~`1yn+o1sQIZZhShl;>IT_6d1bTe0pxq~Z)!o7(U1r4OyfGE`Jw>gBUz zgpi#GL0rlp_XF(f|HhU7Khf+XuFD@W80}n?k+}{-YKIk=Pgnq;b)$^D&ayDH*_VQ$ zzXW;8{2_g_1WaQ?fA#{DIExH6nimkpgH&G(YaU&Mk zWaYmW0ij$n1ybfa$dBVro?H)#i_}voz5rNYDU#^;H)>f+TlJks_|gve1=_8T*)SfQ zBOcp@5vnbKA+6(}`OOqJ7@#JXK-`D0xJeYkGv}vHLoDZdv!hBUs<&sM%kAOw5aZM= z1ff8_V-KKkm*33%w&fWBj;U!~pzG(B;h6C+DawbJ-y2LhqYgKZU@+%!aP??^hJ=%E zZcwZ~j#l`&X#nCX`+(3WMXEFw_?}o+5McE`h#&wNKjeCBgAqnBiG(!!Sf60&9@qg7 ztXCN(t>02t+GbIwcz_O1-+~`hEz8$}pg-nM0D5gpE=4#h4IMTlx`Up20%_HzkSfHC zEoS&SLJ9Cg2)ddAAb28aE-JnGC2>nn22PLW89C?EvgeAxkDv_me3guUv%Sz(@_zWx zZlQY1R|uqJNMGdNgea;n5wA`tV$N6z89GH);F0vQ6z#r!&Y9VDqS;e$MNWbIXc8&y zI`(gZ5cBJS>2**)eM|%+;Qzp|C^o}P_kFW;(_N&6C`A}xDf|F&zbv6d6T+D72HeBb zNUY`t(~9UidH5l+^&jZl1Vfsk$~irnKZrZ~kb;5*d8p%4@W^>!Kh72V2C1YE9^XLg zb8<9BxTXFOKy>-jl-LzO3{A<>6#%755sNyql=M3Mm);~>k(EX!-lAK75E+Chb{pW- z?9PS|m(Ff((Ux(;@_UFPwI?EUSb0oSFK#9P^*l;)P8fCX@eQm=WVLg|&Sl74Z|ozhkbKu5PevF|GY?^|~b~#b88}4jJ3+GG|K;m3`UGLMTAQ*DknK zt!whwpRR5|-e3t|+ZP316bCtm1in)srA%H3WW%6$`zk(Zz~q-Cjm1{@jpj)khc-iB zg`CG;K^Tl%dg8tDfd#5OiB3W3LM%gwv5_7DA7h)Tek3zzv#X`2btt8t?B)#

48qZD~cg_GsID4j*pK7cssKN^BTyw6FX8-K{Uu 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 Om<;sJoqDR{5c+@TdC*e; literal 0 HcmV?d00001 diff --git a/packages/preview/jilid/0.2.0/typst.toml b/packages/preview/jilid/0.2.0/typst.toml new file mode 100644 index 0000000000..ea8714daca --- /dev/null +++ b/packages/preview/jilid/0.2.0/typst.toml @@ -0,0 +1,21 @@ +[package] +name = "jilid" +version = "0.2.0" +entrypoint = "lib.typ" +authors = ["Tri Rianto Utomo <@shuretokki>"] +license = "MIT AND MIT-0" +description = "Report, proposal, and thesis template for Indonesian universities." +repository = "https://github.com/shuretokki/jilid" +keywords = ["Indonesia", "laporan", "proposal", "skripsi", "report", "thesis", "university"] +categories = ["report", "thesis"] +disciplines = ["education"] +compiler = "0.15.0" +exclude = ["docs/*"] + +[template] +path = "template" +entrypoint = "main.typ" +thumbnail = "thumbnail.png" + +[tool.tytanic] +default.ppi = 50