diff --git a/docs/abstract.typst b/docs/abstract.typst new file mode 100644 index 0000000..7526d93 --- /dev/null +++ b/docs/abstract.typst @@ -0,0 +1,49 @@ +#import "layout.typst": indent-par +#pagebreak() +#heading( + level: 1, + outlined: false, + numbering: none, + "Anotācija", +) + + +#indent-par([ + +// LV abstract + +]) + +#par( + first-line-indent: 0cm, + [*Atslēgvārdi:*], +) + + +// LV keywords + +#text( + hyphenate: auto, + lang: "en", + [ + #pagebreak() + #heading( + level: 1, + outlined: false, + numbering: none, + "Abstract", + ) + #indent-par([ + + // EN abstract + + ]) + #par( + first-line-indent: 0cm, + [*Keywords:*], + ) + + // EN keywords + + ], +) diff --git a/docs/layout.typst b/docs/layout.typst new file mode 100644 index 0000000..ca00705 --- /dev/null +++ b/docs/layout.typst @@ -0,0 +1,205 @@ +#import "@preview/i-figured:0.1.0" +#import "@preview/big-todo:0.2.0": * +#import "@preview/tablex:0.0.6": tablex + +#let indent = 1cm +#let indent-par( + body, +) = par(h(indent) + body) + +#let project( + university: "", + faculty: "", + title: [], + authors: (), + advisor: "", + date: "", + body, +) = { + set document(author: authors) + + set page( + margin: ( + left: 30mm, + right: 20mm, + top: 20mm, + bottom: 20mm, + ), + number-align: center, + paper: "a4", + ) + set text( + //font: "New Computer Modern", + font: "CMU", size: 12pt, hyphenate: auto, lang: "lv", region: "LV", + ) + show raw: set text(font: "New Computer Modern Mono") + + show math.equation: set text(weight: 400) + + // Formatting for regular text + set par( + justify: true, + leading: 1.5em, + first-line-indent: indent, + ) + show par: set block(spacing: 1.5em) // Set 1.5em gap between paragraphs + show heading: set block(spacing: 1.5em) + set terms(separator: [ -- ]) + + // Headings + set heading(numbering: "1.1.") + show heading: it => { + if it.level == 1 { + // pagebreak(weak: true) + text( + 14pt, + align( + center, + upper(it), + ), + ) + } else { + it + } + } + + /* Title page config start */ + align( + center, + upper( + text( + size: 16pt, + [ + #university\ + #faculty + ], + ), + ), + ) + + v(1fr) + + align( + center, + text( + 20pt, + weight: "bold", + title, + ), + ) + + v(1fr) + + // Author information + align( + right, + [ + #if authors.len() > 1 { + text( + weight: "bold", + "Darba autori:", + ) + } else { + text( + weight: "bold", + "Darba autors:", + ) + }\ + #authors.join("\n") + + #v(2em) + + #if advisor != "" { + text( + weight: "bold", + "Darba vadītājs:\n", + ) + advisor + } + ], + ) + + v(0.5fr) + + align( + center, + upper( + text(date), + ), + ) + /* Title page config end */ + + // WARNING: removove before sending + // todo_outline + + /* --- Figure/Table conf start --- */ + show heading: i-figured.reset-counters + show figure: i-figured.show-figure.with(numbering: "1.1.") + + show figure.where(kind: "i-figured-table"): set block(breakable: true) + show figure.where(kind: "i-figured-table"): set figure.caption(position: top) + + show figure: set par(justify: false) // disable justify for figures (tables) + + show figure.caption: it => { + if it.kind == "i-figured-table" { + align( + end, + emph(it.counter.display(it.numbering) + " tabula ") + text( + weight: "bold", + it.body, + ), + ) + } else if it.kind == "i-figured-image" { + align( + start, + emph(it.counter.display(it.numbering) + " att. ") + text( + weight: "bold", + it.body, + ), + ) + } else { + it + } + } + + set ref(supplement: it => { }) // disable default reference suppliments + /* --- Figure/Table conf end --- */ + + set list(marker: ( + [•], + [--], + [\*], + [·], + )) + set enum(numbering: "1aiA)") // TODO: make the same style as LaTeX: 1. | (a) | i. | A. + + // Abstract + include "abstract.typst" + + /* ToC config start */ + // Uppercase 1st level headings in ToC + show outline.entry.where(level: 1): it => { + upper(it) + } + + pagebreak() + outline( + depth: 3, + indent: 1cm, + title: text( + size: 14pt, + "SATURS", + ), + ) + /* ToC config end */ + + // Start page numering + set page( + numbering: "1", + number-align: center, + ) + + // Main bdy. + body +} diff --git a/docs/main.pdf b/docs/main.pdf new file mode 100644 index 0000000..b065d97 Binary files /dev/null and b/docs/main.pdf differ diff --git a/docs/main.typst b/docs/main.typst new file mode 100644 index 0000000..b518342 --- /dev/null +++ b/docs/main.typst @@ -0,0 +1,69 @@ +#import "layout.typst": project, indent-par +#import "@preview/i-figured:0.1.0" +#import "@preview/tablex:0.0.6": tablex, rowspanx, colspanx, cellx +#import "utils.typst": * + +#show: project.with( + university: "Latvijas Universitāte", + faculty: "Eksakto zinātņu un tehnoloģiju fakultāte", + title: [Atmiņas kartīšu lietotne ar domēna specifiskās valodas izmantošanu\ Kvalifikācijas darbs], + authors: ( "Jorens Štekeļs, js21283", ), + advisor: "prof. Dr. sc. comp. Laila Niedrīte", + date: "Rīga 2025", +) + + +#set heading(numbering: none) + +#pagebreak(weak: true) += Apzīmējumu saraksts + +#par( + first-line-indent: 0cm, + [ + / API: lietojumprogrammu saskarne (angl. Application Program Interface); + ], +) + + +#pagebreak(weak: true) + += Ievads + +== Nolūks + +#indent-par([ + Šī darba nolūks ir specificēt lietotnes programmatūras prasības un + aprakstīt tās projektējumu, kas tiek aprakstīta un izstrādāta + kvalifikācijas darba ietvaros. +]) + +== Darbības sfēra + +#indent-par([ + Atmiņas kartītes (Angl. flashcards) ir izplatīts veids, kā skolēni, studenti un + citi macošies cilvēki iegaumē materiālu. Šādu kartīšu pamatā parasti ir priekša + un aizmugura. Priekšā atrodas jautājums vai uzdevums vai cita informācija, kas + uzstāda mentālu vai praktisku uzdevumu, iespējams iekļaujot arī mājieni. + Aizmugurā atrodas atbildes teksts, kas ar sevi atbild vai parāda pareizu + atbildi uz priekšā uzstādītu jautājumu vai uzdevumu. +]) + +Tiek veidotas vairākas atmiņas kartītes uz līdzīgu tēmu, veidojas kartīšu kaudzes. +Mācīšanas seansā, tiek vērtēts, cik grūti vai viegli jautājumi vai uzdevumi ir +atbildāmi vai atrisināmi attiecīgi. Balstoties uz grūtību vai iespēju atbildēt, +kartītes tiek grupētas noteiktās grupās, kas, savukārt, nosaka intervālu, pēc kura +kartīte figurēs nākamā mācīšanās seansā. Piemēram, grupas - ļoti viegli, vidēji, +grūti, neizdevās -, kam atbilst 5 dienas, 3 dienas, 1 diena, 0 dienas attiecīgi. +Jo lielāka ir subjektīva piepūle, atbildējot uz jautājumu vai risinot uzdevumu, +jo TK. + +Veidojot atmiņas kartītes manuāli, var rasties grūtības, kā nozaudēšana, +kļūdas sagatavojot tekstu, mācīšanās algoritma uzstādīšanas sarežģītība. + +#pagebreak(weak: true) +#set heading(numbering: "1.1.") + += Vispārējais apraksts + + diff --git a/docs/utils.typst b/docs/utils.typst new file mode 100644 index 0000000..bc21eab --- /dev/null +++ b/docs/utils.typst @@ -0,0 +1,205 @@ +#import "@preview/tablex:0.0.6": tablex +#import "@preview/big-todo:0.2.0": todo as TODO + +#let custom-block( + item, +) = { + set align(start) + block( + inset: 8pt, + stroke: black, + width: 100%, + spacing: 0pt, + breakable: true, + item, + ) +} + +#let longtable( + title: "", + titles: (), + caption: "", + ..items, +) = { + set par(first-line-indent: 0pt) + figure( + gap: 1.5em, + kind: table, + caption: if caption != "" { + caption + } else { + if titles.len() == 0 { + title + } else { + titles.first() + } + }, + [ + #if titles.len() == 0 { + custom-block( + text( + weight: "bold", + title, + ), + ) + } + #for i in range( + items.pos().len(), + ) { + if titles.len() > 0 { + custom-block( + text( + weight: "bold", + titles.at(i), + ), + ) + } + custom-block( + items.pos().at(i), + ) + } + ], + ) + linebreak() +} + +#let parameter-table( + caption: "", + ..items, +) = { + if caption == "" { + caption = items.pos().first() + } + longtable( + titles: ( + "Parametra nosaukums", + "Parametra identifikators", + "Parametra apraksts", + "Parametra prasības", + "Parametra piemērs (/-i)", + ), + caption: caption, + ..items, + ) +} + +#let procedure-table( + caption: "", + ..items, +) = { + if caption == "" { + caption = items.pos().first() + } + longtable( + titles: ( + "Procedūras nosaukums", + "Procedūras identifikators", + "Procedūras apraksts", + "Ievade", + "Apstrāde", + "Izvade", + ), + caption: caption, + ..items, + ) +} + +#let function-table( + caption: "", + ..items, +) = { + if caption == "" { + caption = items.pos().first() + } + longtable( + titles: ( + "Funkcijas nosaukums", + "Funkcijas identifikators", + "Ievads", + "Ievade", + "Apstrāde", + "Izvade", + "Paziņojumi", + ), + caption: caption, + ..items, + ) +} + + +#let entity-table-row( + ..items, +) = { + ( + items.pos().at(0), + upper( + raw( + items.pos().at(1), + block: false, + ), + ), + upper( + raw( + items.pos().at(2), + block: false, + ), + ), + items.pos().at(3), + ) +} + +#let entity-table( + caption: "", + id: (), + ..items, +) = { + if id == () { + id = ( + "id", + "serial8", + "primary key, not null", + "Unikālais identifikators", + ) + } + + figure( + caption: caption, + kind: table, + tablex( + columns: (4cm, 3cm, auto, auto), + repeat-header: true, + /* Header */ + [*Lauks*], [*Datu tips*], [*Lauka atribūti*], [*Apraksts*], + + ..entity-table-row(..id), // id row + + ..for i in range(items.pos().len(), step:4){ + entity-table-row(..items.pos().slice(i, i+4)) + }, + ), + ) +} + +#let todo( + ..body, +) = { + TODO( + ..body, + inline: true, + big_text: 14pt, + small_text: 12pt, + ) +} + +#let hyperlink-source( + author, + title, + link_str, + date, +) = { + if link_str == "" { + [#author #title Aplūkots #date.display("[day].[month].[year]")] + } else { + [#author #title Pieejams: #link(link_str) aplūkots #date.display("[day].[month].[year]")] + } +}