mirror of
https://github.com/pepaskopec-blip/Graduately.git
synced 2026-10-27 15:14:35 +00:00
Build all apps from Markdown content; Compose Desktop replaces GTK on Linux and Windows
- content/ + scripts/build-content.py produce content.json for every app - stable lesson IDs with one-time progress migration (Swift, Kotlin) - shared answer-check tests (tests/answers.json) for Kotlin and Swift - android/desktop: Compose app with updater, speech and GTK progress import - CI packages AppImage and Windows zip with ProGuard, runs the tests Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
b324496334
commit
c3bc32113b
964 changed files with 57285 additions and 1156 deletions
319
content/README.md
Normal file
319
content/README.md
Normal file
|
|
@ -0,0 +1,319 @@
|
|||
# Obsah aplikace
|
||||
|
||||
Všechny texty lekcí, cvičení, kvízů a knih jsou tady v Markdownu. Aplikace pro
|
||||
Android, iOS, macOS, Linux i Windows z nich při sestavení vyrobí jeden soubor
|
||||
`content.json` (skript `scripts/build-content.py`). Na kód se kvůli obsahu sahat
|
||||
nemusí.
|
||||
|
||||
Kontrola po úpravě:
|
||||
|
||||
```sh
|
||||
python3 scripts/build-content.py
|
||||
```
|
||||
|
||||
Skript vypíše počet lekcí, nebo chyby s cestou a číslem řádku
|
||||
(`content/fyzika/1-rocnik/02-pohyb.md:41: …`). Při chybě se aplikace nesestaví.
|
||||
|
||||
## Kde co je
|
||||
|
||||
| Složka | Obsah |
|
||||
|---|---|
|
||||
| `pocitacove-site/`, `technicke-vybaveni/`, `obcanska-nauka/`, `fyzika/` | `N-rocnik/`, v nich lekce |
|
||||
| `prirodni-vedy/chemie`, `prirodni-vedy/biologie` | lekce |
|
||||
| `cestina/literatura/N-rocnik` | lekce literatury |
|
||||
| `cestina/mluvnice` | cvičení z mluvnice |
|
||||
| `cestina/cetba` | knihy k maturitní četbě |
|
||||
| `matematika/0-opakovani`, `matematika/N-rocnik` | lekce s příklady |
|
||||
| `anglictina/N-rocnik`, `nemcina/N-rocnik` | lekce s výkladem, čtením, poslechem, psaním |
|
||||
| `nemcina/ucebnice` | učebnice němčiny po kapitolách |
|
||||
| `aplikace/texty.md` | texty rozhraní (tlačítka, nadpisy obrazovek) |
|
||||
| `aplikace/predmety.md` | dlaždice předmětů na úvodní obrazovce |
|
||||
| `aplikace/novinky.txt` | seznam změn zobrazovaný v aplikaci |
|
||||
|
||||
Jedna lekce je jeden soubor `NN-nazev.md`. Pořadí v aplikaci určuje číslo na
|
||||
začátku názvu. Soubory, které začínají `_`, nejsou lekce (např. `_lekce.md`
|
||||
v učebnici popisuje kapitolu).
|
||||
|
||||
## Angličtina
|
||||
|
||||
Anglická verze leží vedle české jako `NN-nazev.en.md`. Co v ní chybí, zobrazí
|
||||
se česky. Obsahuje:
|
||||
|
||||
- hlavičku se stejnými poli jako česká (`nazev`, `popis`, …), ale anglicky,
|
||||
- volitelně tabulku `# Překlady`, kde je každý český text z lekce přeložený:
|
||||
|
||||
```md
|
||||
---
|
||||
nazev: Physical quantities
|
||||
popis: SI, scalar and vector, measurement error.
|
||||
---
|
||||
|
||||
# Překlady
|
||||
|
||||
| Česky | Anglicky |
|
||||
|---|---|
|
||||
| Fyzikální veličina má číselnou hodnotu a jednotku. | A physical quantity has a value and a unit. |
|
||||
```
|
||||
|
||||
Český text musí v tabulce sedět přesně (včetně interpunkce). Pole `id`
|
||||
a `puvodni` do `.en.md` nepatří.
|
||||
|
||||
## Společná pravidla zápisu
|
||||
|
||||
Hlavička mezi `---` obsahuje pole `klíč: hodnota`. Pak následují oddíly `#`,
|
||||
položky `##` a podle potřeby `###`.
|
||||
|
||||
| Zápis | Význam |
|
||||
|---|---|
|
||||
| `- text` | odrážka; v kvízu možnost |
|
||||
| `- [x] text` | správná možnost |
|
||||
| `1. text` | číslovaná položka (např. části děje) |
|
||||
| `> text` | vysvětlení, nápověda, tip nebo význam (podle oddílu) |
|
||||
| `= odpověď` | správná odpověď; více variant odděluje `\|`: `= hasn't\|has not` |
|
||||
| `[odpověď]` | mezera k doplnění uvnitř věty: `Ich [bin\|heiße] Anna.` |
|
||||
| `\| a \| b \|` | tabulka; v buňce se píše `\|` jako `\\|` a nový řádek jako `\n` |
|
||||
| `<!-- … -->` | poznámka, do aplikace se nedostane |
|
||||
|
||||
Hranaté závorky, které nemají být mezerou, se píšou `\[` a `\]`. Řádek, který
|
||||
by jinak vypadal jako značka (začíná `-`, `>`, `=` …), se uvede zpětným
|
||||
lomítkem: `\- tohle je obyčejný text`.
|
||||
|
||||
## ID a postup žáků
|
||||
|
||||
```md
|
||||
id: fyzika-1-fyzikalni-veliciny
|
||||
puvodni: fyz.1
|
||||
```
|
||||
|
||||
- **`id`** je trvalé jméno lekce. Pod ním se ukládá, co má žák hotové. Musí být
|
||||
v celém obsahu jedinečné. **Po vydání ho neměňte**, jinak se žákům postup
|
||||
v lekci ztratí. Název souboru, číslo pořadí i nadpis měnit lze.
|
||||
- **`puvodni`** je adresa lekce ze starších verzí aplikace. Podle ní se při
|
||||
prvním spuštění nové verze převede starý postup. Neměňte ji a u nových lekcí
|
||||
ji nepište.
|
||||
|
||||
Nová lekce: zkopírujte podobný soubor, dejte mu číslo podle pořadí, nové `id`
|
||||
a smažte `puvodni`.
|
||||
|
||||
## Běžná lekce
|
||||
|
||||
Sítě, hardware, občanka, literatura, chemie, biologie, fyzika.
|
||||
|
||||
```md
|
||||
---
|
||||
id: fyzika-1-fyzikalni-veliciny
|
||||
nazev: Fyzikální veličiny
|
||||
popis: SI, skalár a vektor, chyba měření.
|
||||
nazev_cviceni: Kvíz: veličiny
|
||||
nadpis_kvizu: Ověřte si jednotky a chyby
|
||||
---
|
||||
|
||||
# Výklad
|
||||
|
||||
## Veličina a jednotka
|
||||
*Měření*
|
||||
|
||||
- Fyzikální veličina má číselnou hodnotu a jednotku.
|
||||
- Soustava SI má sedm základních jednotek.
|
||||
|
||||
> Tip: základní jednotka hmotnosti je kilogram, ne gram.
|
||||
|
||||
# Kvíz
|
||||
|
||||
## Která jednotka je základní jednotka SI pro hmotnost?
|
||||
- Gram
|
||||
- [x] Kilogram
|
||||
- Newton
|
||||
> Gram je tisícina kilogramu. Newton je jednotka síly.
|
||||
```
|
||||
|
||||
Každá `##` ve výkladu je jeden snímek. Řádek `*Měření*` je štítek snímku,
|
||||
počítadlo „1 / 3“ doplní aplikace sama.
|
||||
|
||||
V první lekci sítí je navíc oddíl `# Úlohy na podsítě`: `## Úloha N` se
|
||||
zadáním, `### Řešení` s textem řešení a `### Kontrola` s tabulkou
|
||||
`Prefix | Síť | Broadcast | První adresa | Poslední adresa`.
|
||||
|
||||
## Matematika
|
||||
|
||||
Stejná hlavička a `# Výklad` jako běžná lekce, místo kvízu `# Příklady`:
|
||||
|
||||
```md
|
||||
# Příklady
|
||||
|
||||
## Jaký je největší společný dělitel čísel 24 a 36?
|
||||
= num:12
|
||||
> Společní dělitelé jsou 1, 2, 3, 4, 6 a 12.
|
||||
```
|
||||
|
||||
Druhy odpovědí:
|
||||
|
||||
| Odpověď | Kdy je správně |
|
||||
|---|---|
|
||||
| `num:12`, `num:1/2` | číslo nebo výraz (zlomek, odmocnina, π); stačí stejná hodnota v jakémkoli tvaru |
|
||||
| `set:2;3` | všechna čísla v libovolném pořadí |
|
||||
| `pair:2;-1` | čísla v daném pořadí (např. x; y) |
|
||||
| `word:ano\|yes` | jedno ze slov |
|
||||
| `square:2,3;5,3`, `right:…`, `mid:…`, `para:…`, `points:1,4;fix:1,1` | rýsování do mřížky 10 × 8; `fix:` jsou body předem zakreslené |
|
||||
|
||||
## Angličtina a němčina po ročnících
|
||||
|
||||
```md
|
||||
---
|
||||
id: anglictina-1-ja-a-moje-rodina
|
||||
nazev: Já a moje rodina
|
||||
popis: Sloveso be, have got. Doplňování a kvíz.
|
||||
---
|
||||
|
||||
# Výklad
|
||||
(snímky jako u běžné lekce)
|
||||
|
||||
# Čtení
|
||||
Text článku jedním odstavcem.
|
||||
|
||||
## The bus is ___ than the train.
|
||||
- faster
|
||||
- [x] slower
|
||||
> cheaper, but slower.
|
||||
|
||||
# Poslech
|
||||
Přepis nahrávky, pak otázky stejně jako u čtení.
|
||||
|
||||
# Doplňování
|
||||
|
||||
## My sister ___ sixteen.
|
||||
= is
|
||||
> Věk: be, ne have.
|
||||
|
||||
# Psaní
|
||||
Zadání.
|
||||
|
||||
## Vzorová odpověď
|
||||
Text.
|
||||
|
||||
## Musí obsahovat
|
||||
- would
|
||||
- because
|
||||
|
||||
## Minimum slov
|
||||
35
|
||||
|
||||
# Kvíz
|
||||
(jako u běžné lekce)
|
||||
```
|
||||
|
||||
Oddíly, které lekce nepotřebuje, se vynechají.
|
||||
|
||||
## Mluvnice (`cestina/mluvnice`)
|
||||
|
||||
Hlavička: `id`, `typ`, `zkratka` (krátký název na mapě), `nazev`, `popis`,
|
||||
volitelně `poznamka`. Úlohy jsou v oddílu `# Úlohy`, podle typu:
|
||||
|
||||
```md
|
||||
typ: doplnovani
|
||||
|
||||
## Stará bab_čka sed_la na lav_čce.
|
||||
- i/í/y/ý = babička
|
||||
- i/í/y/ý = seděla|sedla
|
||||
> babička, seděla, lavičce
|
||||
```
|
||||
|
||||
Každá odrážka je jedno políčko: vlevo nápověda, za `=` správné odpovědi.
|
||||
|
||||
```md
|
||||
typ: vyber
|
||||
|
||||
## Narodil se v ______ v malé vesnici.
|
||||
- [x] Čechách
|
||||
- čechách
|
||||
```
|
||||
|
||||
```md
|
||||
typ: reseni
|
||||
|
||||
## napsali
|
||||
= na- / ps- / -a- / -li
|
||||
```
|
||||
|
||||
U `reseni` si žák řešení jen odkryje.
|
||||
|
||||
## Četba (`cestina/cetba`)
|
||||
|
||||
```md
|
||||
---
|
||||
id: 1984
|
||||
autor: George Orwell
|
||||
nazev: 1984
|
||||
zanr: Próza
|
||||
preklad: Šimečková
|
||||
---
|
||||
|
||||
# O knize
|
||||
- Autor: George Orwell
|
||||
|
||||
# Postavy
|
||||
- Winston Smith – hlavní hrdina.
|
||||
|
||||
# Kvíz
|
||||
## Kdo je hlavní hrdina?
|
||||
- [x] Winston Smith
|
||||
- O'Brien
|
||||
> Vysvětlení.
|
||||
|
||||
# Děj
|
||||
## Přetáhněte části příběhu do správného pořadí:
|
||||
1. První část děje.
|
||||
2. Druhá část děje.
|
||||
> Volitelně význam celého děje.
|
||||
```
|
||||
|
||||
Všechny oddíly kromě `Kvíz` a `Děj` jsou poznámky ke knize, zobrazí se
|
||||
v uvedeném pořadí. Kvíz i děj jsou nepovinné. Volitelná pole v hlavičce:
|
||||
`popis`, `kviz_nadpis`, `kviz_popis`, `dej_nadpis`, `dej_popis` (jinak se
|
||||
použijí obecné texty) a `stranka`/`plna` pro knihy s vlastní obrazovkou.
|
||||
|
||||
## Učebnice němčiny (`nemcina/ucebnice`)
|
||||
|
||||
Každá kapitola je složka `NN-nazev/` se souborem `_lekce.md`:
|
||||
|
||||
```md
|
||||
---
|
||||
id: ucebnice-1
|
||||
nazev: Neue Freunde
|
||||
popis: Vyberte cvičení a dokončete je.
|
||||
zamceno: ano
|
||||
---
|
||||
```
|
||||
|
||||
(`zamceno: ano` kapitolu v aplikaci zamkne.) V kapitole jsou cvičení
|
||||
`NN-nazev.md` a slovíčka `slovicka.md`. Každé cvičení má v hlavičce `typ`.
|
||||
Nejčastější typy:
|
||||
|
||||
| Typ | Oddíly |
|
||||
|---|---|
|
||||
| `choice` | `# Otázky` jako kvíz |
|
||||
| `typed` | `# Úlohy`: tabulka `Zadání \| Odpověď \| Význam` |
|
||||
| `verb`, `fill` | `# Nabídka` (odrážky slov), `# Úlohy`: tabulka s větami a mezerami `[…]` |
|
||||
| `dialog` | `# Nabídka`, `# Rozhovory` s `## názvem` a tabulkou `Kdo \| Věta` |
|
||||
| `assign` | `# Skupiny` (odrážky), `# Slova`: tabulka `Obrázek \| Slovo \| Skupina` |
|
||||
| `free` | `# Otázky`: tabulka `Otázka \| Překlad otázky \| Vzorová odpověď \| Překlad odpovědi` |
|
||||
| `vocab` | `# Slovíčka`, `## Strana N` a tabulka `Německy \| Odpověď \| Význam` |
|
||||
|
||||
Další typy (`assembly`, `number`, `count`, `seq`, `verbclue`, `profile`,
|
||||
`hangman`, `ordne`, `letters`, `ex2`, `table`, `kw` …) mají vždy aspoň jeden
|
||||
vzor v existujících kapitolách; nejjednodušší je zkopírovat ho. Oddíl
|
||||
`# Překlad` obsahuje české překlady položek ve stejném pořadí.
|
||||
|
||||
Volitelná pole hlavičky cvičení: `tip`, `ukazka` (vzorový příklad),
|
||||
`vyznam_predem`, `preklad_predem`, `odhalit_nemcinu`, `ukazat_nemcinu`
|
||||
(`ano`/`ne`) a `poznamka_k_odpovedim`.
|
||||
|
||||
## Texty rozhraní a předměty
|
||||
|
||||
`aplikace/texty.md` obsahuje tabulky `Klíč | Česky | Anglicky`. Klíč používá
|
||||
kód aplikace, neměňte ho; texty ve sloupcích měnit lze. `%s` a `%d` jsou místa,
|
||||
kam aplikace doplní hodnotu.
|
||||
|
||||
`aplikace/predmety.md` má tabulku
|
||||
`Klíč | Česky | Anglicky | Ikona | Cíl | Otevřeno`. `Cíl` je obrazovka, která se
|
||||
otevře, `Otevřeno: ne` dlaždici zamkne.
|
||||
Loading…
Add table
Add a link
Reference in a new issue