Graduately/src/cetba.c
pepaskopec-blip c2a632c7d6 Move sources into src/ and runtime files into data/.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 17:00:57 +02:00

1595 lines
56 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "maturita.h"
/* ------------------------------------------------------------------ */
/* Maturitní četba: George Orwell – 1984 */
/* ------------------------------------------------------------------ */
typedef struct {
const char *q;
const char *opts[4];
int correct;
const char *expl;
} LitQ;
static const LitQ lit_qs[] = {
{
"Kdo je hlavní hrdina románu a co dělá?",
{
"Winston Smith – přepisuje historii na Ministerstvu pravdy",
"O'Brien – řídí Ministerstvo lásky",
"Emmanuel Goldstein – vede Bratrstvo",
"Winston Smith – velí Policii myšlení",
},
0,
"Winston Smith je vnější člen strany, který na Ministerstvu pravdy "
"upravuje staré záznamy a novinové články.",
},
{
"Ve kterém fiktivním státě se děj odehrává?",
{"V Eurasii", "V Oceánii", "Ve Východasii", "V Angsocu"},
1,
"Příběh se odehrává v Oceánii, v provincii Letopočet 1 (bývalá "
"Anglie), jejímž hlavním městem je Londýn.",
},
{
"Co znamená slogan „VÁLKA JE MÍR, SVOBODA JE OTROCTVÍ, "
"NEVĚDOMOST JE SÍLA“?",
{
"Jsou to tři zásady Bratrstva",
"Jsou to názvy ministerstev",
"Jde o hesla prolety",
"Jsou to paradoxní hesla, kterými strana ospravedlňuje útlak",
},
3,
"Strana používá dvojité myšlení: hesla znějí vznešeně, ale ve "
"skutečnosti obhajují válku, otroctví a nevědomost.",
},
{
"Kdo je Velký bratr a je reálnou osobou?",
{
"Skutečný vůdce Bratrstva",
"Winstonův nadřízený na ministerstvu",
"Symbol všemocné moci a kultu osobnosti; možná vůbec neexistuje",
"O'Brienův pseudonym",
},
2,
"Velký bratr je tvář režimu. Není jasné, zda jde o živou osobu, "
"nebo jen o symbol, který drží strach a poslušnost.",
},
{
"Co je Newspeak (novořeč) a proč ho strana zavádí?",
{
"Tajná řeč Bratrstva",
"Zjednodušená angličtina omezující slovní zásobu, aby nešlo "
"vyslovit zakázané myšlenky",
"Úřední jazyk prolety",
"Šifra Policie myšlení",
},
1,
"Newspeak neustále ubírá slova. Když pro svobodu nebo odpor "
"neexistuje slovo, nelze o nich ani myslet.",
},
{
"Co je teleobrazovka (telescreen) a jak funguje?",
{
"Televize určená jen pro zábavu",
"Zařízení, které vysílá i sleduje; nelze ji úplně vypnout",
"Rozhlasová stanice",
"Počítač Ministerstva pravdy",
},
1,
"Telescreen funguje obousměrně – neustále sleduje občany. Vypnout "
"lze jen zvuk, obraz běží dál.",
},
{
"Jak se jmenují tři supervelmoci světa 1984?",
{
"Oceánie, Eurasie a Východasie",
"Oceánie, Evropa a Asie",
"Anglie, Eurasie a Ostasie",
"Oceánie, Východasie a Afrika",
},
0,
"Svět je rozdělen na tři státy ve věčném, ale nerozhodném "
"konfliktu: Oceánii, Eurasii a Východasii.",
},
{
"Čím se zabývá Ministerstvo pravdy?",
{
"Vede válku",
"Dohlíží na morálku a sňatky",
"Upravuje a přepisuje historii, noviny a archivy",
"Rozděluje potraviny",
},
2,
"Ministerstvo pravdy vyrábí „pravdu“ – Winston v něm přepisuje "
"staré záznamy tak, aby vždy odpovídaly současné linii strany.",
},
{
"K čemu slouží Ministerstvo lásky?",
{
"Zajišťuje sňatky a lásku",
"Je to budova bez oken, kde se mučí a likvidují nepřátelé strany",
"Vyrábí zbraně",
"Školí děti",
},
1,
"Ministerstvo lásky je opakem svého názvu – sídlí tam mučírny a "
"nachází se v něm i obávaná místnost 101.",
},
{
"V čem je paradox Ministerstva hojnosti?",
{
"Má na starosti hospodářství, ale ve skutečnosti drží lidi "
"v nedostatku",
"Rozdává jídlo a zboží zdarma",
"Zajišťuje dostatek pro všechny",
"Starají se o něj prolety",
},
0,
"Ministerstvo hojnosti plánuje výrobu, ale ekonomika je záměrně "
"nastavena tak, aby lidé žili v trvalém nedostatku.",
},
{
"Co je Ministerstvo míru a čím se zabývá?",
{
"Uzavírá mírové smlouvy",
"Dojednává příměří",
"Ve skutečnosti vede válku",
"Velí Policii myšlení",
},
2,
"Název je přesně opačný: Ministerstvo míru řídí válku, protože "
"trvalý válečný stav pomáhá udržet moc strany.",
},
{
"Kdo je Julie a jaký vztah s ní Winston naváže?",
{
"Winstonova žena",
"Mladá členka strany, s níž Winston prožije tajnou milostnou "
"aféru",
"O'Brienova asistentka",
"Proletka a obchodnice",
},
1,
"Julie pracuje v oddělení beletrie a naoko je vzornou členkou "
"strany. S Winstonem vytvoří tajný milostný vztah.",
},
{
"Proč je vztah Winstona a Julie zakázaný?",
{
"Strana zakazuje lásku a sexualitu jako zločin; vztah je navíc "
"tajný",
"Julie je vdaná za člena vnitřní strany",
"Winston je jejím nadřízeným",
"Julie patří k proletům",
},
0,
"Strana potlačuje citové a sexuální vazby, protože oddanost má "
"patřit jen straně. Tajný vztah je proto dvojnásob nebezpečný.",
},
{
"Kdo je O'Brien a jakou roli hraje v příběhu?",
{
"Skutečný vůdce Bratrstva",
"Vysoce postavený člen vnitřní strany, který Winstona nakonec "
"mučí a „vyléčí“",
"Winstonův přítel z dětství",
"Proletářský básník",
},
1,
"Winston věří, že O'Brien je odbojář. Ve skutečnosti je to věrný "
"člen vnitřní strany, který ho dostane do místnosti 101.",
},
{
"Co je Bratrstvo a existuje vůbec?",
{
"Skutečná armáda Oceánie",
"Náboženská organizace",
"Údajná tajná organizace odporu; není jisté, zda existuje",
"Odbory prolety",
},
2,
"Bratrstvo zmiňuje Goldstein i O'Brien, ale kniha nikdy nepotvrdí, "
"že doopravdy existuje – může jít o past strany.",
},
{
"Kdo je Emmanuel Goldstein?",
{
"Ministr pravdy",
"Oficiální nepřítel státu a údajný vůdce Bratrstva",
"Winstonův kolega",
"Velký bratrův dvojník",
},
1,
"Goldstein je terčem dvouminutovky nenávisti. Má ztělesňovat "
"nepřítele, proti kterému strana sjednocuje občany.",
},
{
"Co je dvojité myšlení (doublethink)?",
{
"Schopnost myslet ve dvou jazycích",
"Zdvojení osobnosti",
"Schopnost věřit dvěma protikladným tvrzením zároveň",
"Tajné zapisování myšlenek",
},
2,
"Dvojité myšlení je jádro stranické ideologie – člověk přijme i "
"zjevné rozpory, jako „válka je mír“.",
},
{
"Proč strana neustále přepisuje minulost?",
{
"Aby opravila chyby v archivech",
"Aby měla vždy pravdu a nepřítel jí nemohl dokázat opak",
"Aby ušetřila papír",
"Aby potěšila prolety",
},
1,
"Kdo ovládá minulost, ovládá i budoucnost. Přepisováním historie "
"strana udržuje absolutní kontrolu nad pravdou.",
},
{
"Co je zločin myšlení (thoughtcrime)?",
{
"Pouhá myšlenka nebo názor, který se nelíbí straně",
"Krádež státního majetku",
"Nelegální obchod",
"Opomenutí dvouminutovky",
},
0,
"Strana trestá už samotné myšlenky. Winston se proviní tím, že si "
"do deníku napíše „Dolů s Velkým bratrem“.",
},
{
"Kdo je pan Charrington a jaké je jeho skutečné postavení?",
{
"Winstonův přítel a majitel hospody",
"Proletářský básník",
"Zdánlivě starý majitel obchodu, ve skutečnosti agent Policie "
"myšlení",
"Člen Bratrstva",
},
2,
"Charrington Winstonovi pronajme pokoj bez teleobrazovky, ale "
"právě on nakonec oba milence udá.",
},
{
"Co je místnost 101?",
{
"Winstonova cela na policii",
"Skladiště knih",
"Místnost, ve které každého čeká jeho největší strach",
"Zasedací místnost vnitřní strany",
},
2,
"Místnost 101 je vrcholný mučicí nástroj. Winstonovi v ní hrozí "
"krysy – jeho největší fobie.",
},
{
"Jak skončí vztah Winstona a Julie?",
{
"Utečou spolu do Eurasie",
"Vezmou se a žijí svobodně",
"Winston se stane členem Bratrstva",
"Zradí se a nakonec se přestanou milovat",
},
3,
"Oba jsou po mučení zlomení a vzájemně se zradí. Na konci už "
"k sobě nic necítí.",
},
{
"Co znamená závěrečná věta „Miloval Velkého bratra“?",
{
"Winstonův vzdor se změnil v pokornou lásku k režimu",
"Winston se stal novým vůdcem",
"Byl to jen Winstonův sen",
"Julie mu to řekla",
},
0,
"Winston byl vnitřně zlomen. Přestal být sám sebou a nakonec "
"režim opravdu přijal za svůj.",
},
{
"Které tvrzení NENÍ jedním z hlavních témat románu?",
{
"Moc a absolutní kontrola",
"Pravda a přepisování historie",
"Svoboda a identita",
"Idylický venkovský život",
},
3,
"1984 je temná antiutopie. Hlavními tématy jsou moc, kontrola, "
"manipulace s pravdou a ztráta svobody, ne venkovská idyla.",
},
{
"V jakém roce byl román 1984 poprvé vydán?",
{"1936", "1949", "1954", "1984"},
1,
"Román vyšel v roce 1949; letopočet 1984 označuje blízkou "
"budoucnost, do níž Orwell příběh zasadil.",
},
{
"Které další Orwellovo dílo se dá s 1984 srovnat?",
{"Farma zvířat", "Velký Gatsby", "Zločin a trest", "Babička"},
0,
"Obě Orwellova díla varují před totalitou. Farma zvířat ji líčí "
"alegoricky pomocí zvířat, 1984 očima jedince.",
},
{
"Co je „dvouminutovka nenávisti“?",
{
"Krátká každodenní akce, při níž občané společně nenávidí "
"Goldsteina a nepřítele",
"Pravidelná modlitba ke Velkému bratrovi",
"Sportovní přestávka ve škole",
"Porada vedení ministerstva",
},
0,
"Slouží k uvolnění a přesměrování agrese občanů na nepřítele "
"státu, čímž strana posiluje svou moc.",
},
{
"Proč je podle knihy válka pro systém nezbytná?",
{
"Přináší mír a blahobyt",
"Udržuje strach, spotřebovává výrobu a zachovává chudobu "
"i hierarchii",
"Rozvíjí vědu a techniku",
"Sjednocuje vládu s prolety",
},
1,
"Trvalá válka pohlcuje nadbytečnou produkci a udržuje lidi ve "
"strachu i chudobě, takže se nemohou vzbouřit.",
},
{
"Jaký je rozdíl mezi vnějšími členy strany a prolety?",
{
"Proleti mají více práv než členové strany",
"Vnější členové jsou dozíráni, kdežto proleti žijí v chudobě "
"a strana o ně nestojí",
"Není mezi nimi žádný rozdíl",
"Proleti tvoří vedení strany",
},
1,
"Proleti tvoří asi 85 % obyvatel. Žijí v bídě a jsou považováni "
"za neškodné, dokud si neuvědomí svou sílu.",
},
{
"Jak strana kontroluje sexualitu a osobní vztahy?",
{
"Podporuje volnou lásku a nezávislost",
"Potlačuje lásku a sexualitu, děti vede k oddanosti straně",
"Zakazuje veškerá manželství",
"Povoluje vztahy jen s prolety",
},
1,
"Strana chce, aby veškerá oddanost a energie patřily jí. Proto "
"podporuje zdrženlivost a vede děti v Antisexuální lize mládeže.",
},
{
"Co symbolizuje papírové těžítko, které si Winston koupí?",
{
"Jeho nenávist ke Goldsteinovi",
"Kousek krásy a minulosti, kterou už nelze vrátit",
"Moc Velkého bratra",
"Lásku k Julii",
},
1,
"Těžítko je drobný, krásný předmět z minulosti. Pro Winstona "
"ztělesňuje svět, který strana zničila.",
},
{
"Jaké poselství chtěl Orwell románem nejspíš předat?",
{
"Varování před totalitou a ztrátou svobody i pravdy",
"Oslavu technického pokroku",
"Návod, jak založit stát",
"Kritiku sportu a zábavy",
},
0,
"1984 je varování: když lidé přestanou bránit pravdu a svobodu, "
"mohou o ně nenávratně přijít.",
},
};
#define LIT_NQ ((int)G_N_ELEMENTS(lit_qs))
static const LitQ fuks_qs[] = {
{
"Kdo je hlavní postava románu a jaké je jeho povolání?",
{
"Pan Kopfrkingl – zaměstnanec krematoria",
"Willi Reinke – nacistický důstojník",
"Dr. Bettelheim – psychiatr",
"Pan Kopfrkingl – ředitel školy",
},
0,
"Hlavní postavou je pan Kopfrkingl, spořádaný zaměstnanec krematoria, "
"který svou práci vnímá jako poslání.",
},
{
"V jakém prostředí pan Kopfrkingl pracuje?",
{"V nemocnici", "V krematoriu", "V divadle", "Ve škole"},
1,
"Kopfrkingl pracuje v krematoriu, kde má na starosti zpopelňování "
"zemřelých.",
},
{
"V jaké historické době se děj románu odehrává?",
{
"Za první republiky",
"Za protektorátu Čechy a Morava (před a během 2. světové války)",
"Po roce 1989",
"V 19. století",
},
1,
"Román se odehrává v době nastupujícího nacismu a protektorátu, "
"který umožňuje Kopfrkinglovu proměnu.",
},
{
"Jak se proměňuje hlavní hrdina v průběhu příběhu?",
{
"Z laskavého spořádaného muže v chladnokrevného vraha a fanatika",
"Z vraha v kajícníka",
"Z chudáka v boháče",
"Vůbec se nemění",
},
0,
"Kopfrkingl se postupně mění v člověka, který vraždí své blízké a "
"ospravedlňuje to vyšším dobrem.",
},
{
"Jaký je vztah pana Kopfrkingla k jeho rodině na začátku knihy?",
{
"Nenávidí je",
"Je starostlivý, zdvořilý a především spořádaný",
"S rodinou se nezná",
"Týrá je",
},
1,
"Na začátku působí jako vzorný manžel a otec, posedlý řádem a "
"zdvořilostí.",
},
{
"Jak se jmenuje manželka pana Kopfrkingla a jaký je jejich vztah?",
{
"Marie – milují se",
"Lakmé – formálně zdvořilý, chladný vztah",
"Zina – nenávidí se",
"Julie – jsou rozvedení",
},
1,
"Manželka se jmenuje Lakmé. Jejich vztah je spíš zdvořilá forma než "
"opravdová láska.",
},
{
"Jaký je vztah pana Kopfrkingla k dětem, Zině a Mílovi?",
{
"Miluje je víc než sebe",
"Chová se k nim odtažitě, jako k součásti řádu",
"Nevidí je",
"Jsou adoptované",
},
1,
"K dětem je odměřený; vnímá je spíš jako součást svého spořádaného "
"světa než jako milované bytosti.",
},
{
"Kdo je Willi Reinke a jakou roli hraje v proměně hlavního hrdiny?",
{
"Soused z krematoria",
"Německý úředník a bývalý voják, který Kopfrkingla ovlivní",
"Kopfrkinglův bratr",
"Lékař v nemocnici",
},
1,
"Reinke je Němec, který v Kopfrkinglovi probudí touhu po árijském "
"původu a kariéře.",
},
{
"Jak Willi Reinke ovlivňuje Kopfrkinglovo smýšlení?",
{
"Přesvědčí ho, aby se přidal k nacistům a byl „lepší“",
"Nabádá ho k odchodu do zahraničí",
"Učí ho tibetštinu",
"Nijak ho neovlivní",
},
0,
"Reinke v něm posiluje antisemitismus a touhu po moci a uznání "
"v novém režimu.",
},
{
"Jaký je Kopfrkinglův vztah ke krematoriu a smrti obecně?",
{
"Bojí se jich",
"Má je rád, kremaci vnímá jako krásný obřad osvobození",
"Nechce tam pracovat",
"Je mu to lhostejné",
},
1,
"Smrt a kremace jsou pro něj estetickým a filozofickým rituálem, ne "
"něčím hrůzným.",
},
{
"Jak pan Kopfrkingl vnímá a popisuje proces kremace?",
{
"Jako nutné zlo",
"Jako vznešený, očistný obřad, o kterém rád mluví",
"Jako hroznou povinnost",
"Nikdy o něm nemluví",
},
1,
"Kopfrkingl o kremaci hovoří básnivě a s nadšením, což ostře "
"kontrastuje s hrůzou jeho činů.",
},
{
"Jaká je symbolika krematoria v celém románu?",
{
"Symbol naděje",
"Smrt, odlidštění a zvrácená ideologie, která z lidí dělá jen těla",
"Symbol lásky",
"Symbol mládí",
},
1,
"Krematorium je ústředním symbolem – odhaluje chladnou mašinerii "
"smrti, do níž se ideologie snaží proměnit člověka.",
},
{
"Co symbolizuje Kopfrkinglova záliba v tibetské Knize mrtvých?",
{
"Jeho touhu po vědění a zvrácenou víru ve vlastní výjimečnost",
"Historický zájem o Asii",
"Strach ze smrti",
"Lásku k manželce",
},
0,
"Kopfrkingl si z ní vybírá jen to, co se hodí k ospravedlnění jeho "
"činů a jeho pocitu vyvolenosti.",
},
{
"Jak se v knize projevuje motiv buddhismu a reinkarnace?",
{
"Kopfrkingl jimi ospravedlňuje smrt jako „osvobození duše“",
"Postavy se modlí k Bohu",
"Nikde se neobjevuje",
"Je to hlavní téma manželky",
},
0,
"Reinkarnace a „osvobození od utrpení“ se v jeho mysli zvrhávají "
"v právo zabíjet.",
},
{
"Jak Kopfrkingl zneužívá filozofické a náboženské myšlenky?",
{
"Ospravedlňuje jimi vlastní vraždy jako službu vyššímu dobru",
"Pomáhá jimi druhým",
"Odmítá je",
"Používá je jen v práci",
},
0,
"Z vznešených idejí si staví masku, za kterou skrývá krutost a touhu "
"po moci.",
},
{
"Jak se postupně mění Kopfrkinglova mluva a způsob vyjadřování?",
{
"Začíná mluvit vulgárně",
"Mění se v patetickou, ráznou řeč plnou frází o řádu a osvobození",
"Přestane mluvit",
"Od začátku mluví jen německy",
},
1,
"Jeho zdvořilá mluvnost se postupně mění v ideologické fráze a "
"bezcitný patos.",
},
{
"Jaké opakující se fráze nebo návyky pana Kopfrkingla si všímáš?",
{
"Neustále se ptá na počasí",
"Opakuje „to je takové“, „vidíte“ a lpí na zdvořilosti",
"Zpívá si",
"Mluví jen o jídle",
},
1,
"Opakující se fráze a zdvořilostní obraty vytvářejí rytmus, který je "
"čím dál tím děsivější.",
},
{
"Jaký je vypravěčský styl románu (ich-forma, er-forma)?",
{
"Er-forma bez vnitřního světa",
"Ich-forma – vypráví sám Kopfrkingl",
"Deníková forma",
"Forma dopisů",
},
1,
"Ich-forma je klíčová: čtenář sleduje svět zkreslený Kopfrkinglovou "
"myslí a sám postupně propadá jeho logice.",
},
{
"Jak se v knize projevuje černý humor a groteska?",
{
"Vážné scény jsou líčeny s odstupem a absurditou",
"Kniha je čistě vážná",
"Humor je jediný žánr",
"V knize se neprojevuje",
},
0,
"Groteskní kontrast mezi slavnostním vyprávěním a hrůzou vytváří "
"mrazivý černý humor.",
},
{
"Jak kontrastuje banalita každodenního života s hrůzností činů?",
{
"Vůbec nesouvisí",
"Všední detaily a zdvořilost činí hrůzu ještě děsivější",
"Hrůza je potlačena",
"Den je popsán jen jednou",
},
1,
"Fuks zesiluje otřes tím, že vraždění je popisováno stejně klidně "
"jako ranní káva nebo kremace.",
},
{
"Jak se v knize projevuje antisemitismus?",
{
"Od začátku otevřeně",
"Postupně, nejdřív v náznacích a vlivem Reinkeho",
"Nikdy",
"Jen mimochodem v závěru",
},
1,
"Kopfrkinglův antisemitismus se rodí pozvolna a je živen dobovou "
"atmosférou i Reinkem.",
},
{
"Jak nacistická ideologie postupně prostupuje Kopfrkinglovo myšlení?",
{
"Odmítá ji",
"Přijímá ji jako vyšší řád a ospravedlnění vlastní výjimečnosti",
"Nerozumí jí",
"Zajímá ho jen hudba",
},
1,
"Ideologie se mu stává nástrojem kariéry i vnitřním ospravedlněním "
"vražd.",
},
{
"Jak se mění Kopfrkinglův vztah k manželce kvůli jejímu původu?",
{
"Začne ji milovat víc",
"Odcizí se jí, protože je židovského původu",
"Nijak se nemění",
"Odstěhují se od sebe",
},
1,
"Kvůli jejímu původu ji přestane vnímat jako rovnocennou a nakonec "
"ji zabije.",
},
{
"Co se stane s Kopfrkinglovou rodinou ve druhé polovině románu?",
{
"Odstěhují se",
"Kopfrkingl svou ženu i děti zabije",
"Všichni přežijí",
"Zachrání je Reinke",
},
1,
"Pod vlivem ideologie Kopfrkingl vyvraždí vlastní rodinu a považuje "
"to za „osvobození“.",
},
{
"Jak Kopfrkingl zdůvodňuje vraždu vlastní ženy?",
{
"Zlobila se na něj",
"Že je židovského původu a překáží jeho kariéře",
"Že ho podváděla",
"Nijak ji nezdůvodňuje",
},
1,
"Svou ženu zabije mimo jiné proto, že je židovského původu, tedy "
"„méněcenná“ pro nový režim.",
},
{
"Jakým způsobem Kopfrkingl vraždí své blízké?",
{
"Ve zlosti a afektu",
"Chladně a s pocitem, že je „osvobozuje od utrpení“",
"Omylem",
"Na příkaz úřadů",
},
1,
"Vraždí klidně, jako by vykonával bohulibý úkon, a svou krutost si "
"vykládá jako soucit.",
},
{
"Jak souvisí přesvědčení o „osvobození“ s jeho vražednými činy?",
{
"Dává mu zdání vyššího smyslu, kterým si vraždy ospravedlňuje",
"Nemá s nimi nic společného",
"Brání mu v zabíjení",
"Je to jen náhodná fráze",
},
0,
"Zvrácená víra v osvobození od utrpení mu slouží jako mravní alibi "
"pro vraždy.",
},
{
"Jaký je vztah pana Kopfrkingla k postavě Dr. Bettelheima?",
{
"Obdivuje ho a rád s ním mluví",
"Nenávidí ho",
"Nikdy se nepotkají",
"Je to jeho nadřízený",
},
0,
"S doktorem Bettelheimem vede Kopfrkingl své „filozofické“ rozhovory "
"o smrti a lidskosti.",
},
{
"Jak se mění společenské postavení pana Kopfrkingla v době okupace?",
{
"Upadá",
"Stoupá – díky režimu a touze po árijském původu",
"Nemění se",
"Odchází do penze",
},
1,
"Spolu s nacistickou mocí roste i Kopfrkinglova kariéra a "
"sebevědomí.",
},
{
"Jaký je symbolický význam jména Kopfrkingl?",
{
"Zdánlivě úřednické, ale zní hrozivě – naznačuje zvrácenost",
"Je to běžné české jméno",
"Znamená „laskavý“",
"Je to pseudonym",
},
0,
"Zvukomalebné jméno působí úředně a zároveň hrozivě, což podtrhuje "
"dvojí tvář postavy.",
},
{
"Jak funguje motiv masek, divadla a přetvářky?",
{
"Postavy nosí masky dobroty, pod nimiž se skrývá krutost",
"V knize jsou jen skutečné divadelní masky",
"Motiv se neobjevuje",
"Masky symbolizují lásku",
},
0,
"Přetvářka a předstíraná spořádanost jsou ústřední – zlo se tváří "
"jako slušnost.",
},
{
"Jaký je vztah mezi soukromým a kolektivním šílenstvím doby?",
{
"Kopfrkinglovo osobní šílenství roste spolu s ideologií doby",
"Nijak nesouvisí",
"Doba je klidná a šťastná",
"Lidé režim jednomyslně odmítají",
},
0,
"Fuks ukazuje, jak se individuální porucha napojí na kolektivní "
"ideologii a čerpá z ní sílu.",
},
{
"Jak končí román a co se stane s panem Kopfrkinglem na konci?",
{
"Uteče do zahraničí",
"Je zatčen a zničen",
"Stane se hrdinou",
"Věří, že je vtělením Dalajlámy, a zůstává zaslepený",
},
3,
"Kopfrkinglova zaslepenost vrcholí přesvědčením o vlastní božskosti; "
"jeho zvrácená víra ho neopouští.",
},
{
"Jak je Spalovač mrtvol adaptován filmově?",
{
"Film Juraje Herze je vizuálně expresivní a patří k vrcholům "
"české kinematografie",
"Byl zfilmován jen v zahraničí",
"Film neexistuje",
"Vznikl jako animovaný seriál",
},
0,
"Známá filmová verze je od režiséra Juraje Herze z roku 1968.",
},
{
"Které další dílo Ladislava Fukse se dá srovnat s touto knihou?",
{
"Pan Theodor Mundstock nebo Myši Natálie Mooshabrové",
"Farma zvířat",
"R.U.R.",
"Babička",
},
0,
"Fuks se opakovaně zabýval osudem židovských postav a atmosférou "
"strachu; srovnat lze např. Pana Theodora Mundstocka.",
},
{
"Jaká jsou hlavní témata románu?",
{
"Moc, manipulace, ideologie, násilí a přetvářka",
"Láska a dobrodružství",
"Sport a přátelství",
"Příroda a vesmír",
},
0,
"Kniha zkoumá, jak se obyčejný člověk přizpůsobí zlu a stane se jeho "
"nástrojem.",
},
{
"Jaké poselství podle tebe chtěl Ladislav Fuks knihou předat?",
{
"Varování před manipulací a tím, jak se zlo rodí z banality a "
"lhostejnosti",
"Oslavu války",
"Návod k podnikání",
"Kritiku školství",
},
0,
"Fuks ukazuje, že hrůza může vzniknout z poslušnosti a touhy být "
"„lepší“ než ostatní.",
},
};
#define FUKS_NQ ((int)G_N_ELEMENTS(fuks_qs))
typedef struct {
const LitQ *qs;
int n;
int idx;
int score;
int answered;
int finished;
GtkWidget *progress;
GtkWidget *score_lbl;
GtkWidget *prompt;
GtkWidget *grid;
GtkWidget *opts[4];
GtkWidget *opt_lbl[4];
GtkWidget *expl;
GtkWidget *next;
} LitQuiz;
static void lit_quiz_show(LitQuiz *z) {
const LitQ *q = &z->qs[z->idx];
char buf[128];
g_snprintf(buf, sizeof(buf), tr("lit_question_fmt"), z->idx + 1, z->n);
gtk_label_set_text(GTK_LABEL(z->progress), buf);
g_snprintf(buf, sizeof(buf), tr("lit_score_fmt"), z->score, z->n);
gtk_label_set_text(GTK_LABEL(z->score_lbl), buf);
gtk_label_set_text(GTK_LABEL(z->prompt), q->q);
for (int i = 0; i < 4; i++) {
gtk_label_set_text(GTK_LABEL(z->opt_lbl[i]), q->opts[i]);
gtk_widget_remove_css_class(z->opts[i], "ok");
gtk_widget_remove_css_class(z->opts[i], "wrong");
gtk_widget_set_sensitive(z->opts[i], TRUE);
}
gtk_widget_set_visible(z->grid, TRUE);
gtk_widget_set_visible(z->expl, FALSE);
gtk_widget_set_visible(z->next, FALSE);
z->answered = 0;
}
static void lit_quiz_finish(LitQuiz *z) {
char buf[128];
z->finished = 1;
gtk_label_set_text(GTK_LABEL(z->progress), tr("lit_finished"));
gtk_label_set_text(GTK_LABEL(z->prompt), tr("lit_finished_text"));
g_snprintf(buf, sizeof(buf), tr("lit_score_fmt"), z->score, z->n);
gtk_label_set_text(GTK_LABEL(z->score_lbl), buf);
gtk_widget_set_visible(z->grid, FALSE);
gtk_widget_set_visible(z->expl, FALSE);
gtk_widget_set_visible(z->next, TRUE);
gtk_button_set_label(GTK_BUTTON(z->next), tr("lit_again"));
}
static void lit_opt_clicked(GtkButton *button, gpointer data) {
LitQuiz *z = data;
int chosen = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(button), "idx"));
const LitQ *q;
char buf[128];
if (z->answered)
return;
z->answered = 1;
q = &z->qs[z->idx];
for (int i = 0; i < 4; i++)
gtk_widget_set_sensitive(z->opts[i], FALSE);
gtk_widget_add_css_class(z->opts[q->correct], "ok");
if (chosen == q->correct)
z->score++;
else
gtk_widget_add_css_class(z->opts[chosen], "wrong");
g_snprintf(buf, sizeof(buf), tr("lit_score_fmt"), z->score, z->n);
gtk_label_set_text(GTK_LABEL(z->score_lbl), buf);
gtk_label_set_text(GTK_LABEL(z->expl), q->expl);
gtk_widget_set_visible(z->expl, TRUE);
gtk_button_set_label(GTK_BUTTON(z->next),
z->idx + 1 >= z->n ? tr("lit_show_result")
: tr("lit_next"));
gtk_widget_set_visible(z->next, TRUE);
}
static void lit_next_clicked(GtkButton *button, gpointer data) {
LitQuiz *z = data;
(void)button;
if (z->finished) {
z->finished = 0;
z->idx = 0;
z->score = 0;
lit_quiz_show(z);
return;
}
if (z->idx + 1 >= z->n) {
lit_quiz_finish(z);
return;
}
z->idx++;
lit_quiz_show(z);
}
static GtkWidget *lit_quiz_page(const LitQ *qs, int n, const char *back,
const char *title, const char *sub) {
GtkWidget *page;
GtkWidget *scroll;
GtkWidget *box;
GtkWidget *head;
LitQuiz *z = g_new0(LitQuiz, 1);
z->qs = qs;
z->n = n;
page = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_widget_set_margin_start(page, 32);
gtk_widget_set_margin_end(page, 32);
gtk_widget_set_margin_top(page, 24);
gtk_widget_set_margin_bottom(page, 24);
gtk_box_append(GTK_BOX(page), top_bar(back, title, sub));
scroll = gtk_scrolled_window_new();
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_widget_set_vexpand(scroll, TRUE);
gtk_widget_set_margin_top(scroll, 14);
gtk_box_append(GTK_BOX(page), scroll);
box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 14);
gtk_widget_set_margin_start(box, 6);
gtk_widget_set_margin_end(box, 6);
gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(scroll), box);
head = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10);
gtk_box_append(GTK_BOX(box), head);
z->progress = gtk_label_new("");
gtk_widget_set_halign(z->progress, GTK_ALIGN_START);
gtk_widget_set_hexpand(z->progress, TRUE);
gtk_label_set_xalign(GTK_LABEL(z->progress), 0.0);
gtk_widget_add_css_class(z->progress, "lit-progress");
gtk_box_append(GTK_BOX(head), z->progress);
z->score_lbl = gtk_label_new("");
gtk_widget_set_halign(z->score_lbl, GTK_ALIGN_END);
gtk_widget_add_css_class(z->score_lbl, "lit-score");
gtk_box_append(GTK_BOX(head), z->score_lbl);
z->prompt = gtk_label_new("");
gtk_widget_set_halign(z->prompt, GTK_ALIGN_START);
gtk_label_set_wrap(GTK_LABEL(z->prompt), TRUE);
gtk_widget_set_margin_top(z->prompt, 4);
gtk_widget_add_css_class(z->prompt, "lit-prompt");
gtk_box_append(GTK_BOX(box), z->prompt);
z->grid = gtk_grid_new();
gtk_grid_set_row_spacing(GTK_GRID(z->grid), 12);
gtk_grid_set_column_spacing(GTK_GRID(z->grid), 12);
gtk_grid_set_row_homogeneous(GTK_GRID(z->grid), TRUE);
gtk_grid_set_column_homogeneous(GTK_GRID(z->grid), TRUE);
gtk_widget_set_vexpand(z->grid, TRUE);
gtk_box_append(GTK_BOX(box), z->grid);
for (int i = 0; i < 4; i++) {
GtkWidget *btn = gtk_button_new();
GtkWidget *lbl;
char cls[16];
lbl = gtk_label_new("");
gtk_label_set_wrap(GTK_LABEL(lbl), TRUE);
gtk_label_set_justify(GTK_LABEL(lbl), GTK_JUSTIFY_CENTER);
gtk_label_set_max_width_chars(GTK_LABEL(lbl), 26);
g_snprintf(cls, sizeof(cls), "kahoot-%d", i);
gtk_widget_add_css_class(btn, "kahoot-opt");
gtk_widget_add_css_class(btn, cls);
gtk_widget_set_hexpand(btn, TRUE);
gtk_widget_set_vexpand(btn, TRUE);
gtk_button_set_child(GTK_BUTTON(btn), lbl);
g_object_set_data(G_OBJECT(btn), "idx", GINT_TO_POINTER(i));
g_signal_connect(btn, "clicked", G_CALLBACK(lit_opt_clicked), z);
z->opts[i] = btn;
z->opt_lbl[i] = lbl;
gtk_grid_attach(GTK_GRID(z->grid), btn, i % 2, i / 2, 1, 1);
}
z->expl = gtk_label_new("");
gtk_widget_set_halign(z->expl, GTK_ALIGN_START);
gtk_label_set_wrap(GTK_LABEL(z->expl), TRUE);
gtk_label_set_xalign(GTK_LABEL(z->expl), 0.0);
gtk_widget_add_css_class(z->expl, "lit-expl");
gtk_widget_set_visible(z->expl, FALSE);
gtk_box_append(GTK_BOX(box), z->expl);
z->next = gtk_button_new();
i18n_bind(z->next, "lit_next", 1);
gtk_widget_add_css_class(z->next, "btn-primary");
gtk_widget_set_halign(z->next, GTK_ALIGN_END);
gtk_widget_set_margin_top(z->next, 6);
gtk_widget_set_visible(z->next, FALSE);
gtk_box_append(GTK_BOX(box), z->next);
g_signal_connect(z->next, "clicked", G_CALLBACK(lit_next_clicked), z);
lit_quiz_show(z);
return page;
}
GtkWidget *build_cetba1984_quiz_page(void) {
return lit_quiz_page(lit_qs, LIT_NQ, "cetba1984",
"lit_quiz_title", "lit_quiz_sub");
}
GtkWidget *build_cetba_fuks_quiz_page(void) {
return lit_quiz_page(fuks_qs, FUKS_NQ, "cetbaFuks",
"lit_fuks_quiz_title", "lit_fuks_quiz_sub");
}
/* ------------------------------------------------------------------ */
/* Sestavte děj (drag & drop) */
/* ------------------------------------------------------------------ */
static const AssemblyItem lit_plot_items[] = {
{
"Přetáhněte části příběhu do správného pořadí:",
{
"Winston upravuje historii na Ministerstvu pravdy",
"Seznámí se s Julií a začnou se tajně scházet",
"Pronajme si pokoj nad obchodem pana Charringtona",
"Přečte Goldsteinovu knihu u O'Briena",
"Jsou zatčeni Policií myšlení",
"Winston se zlomí v místnosti 101",
},
6,
},
};
static const char *lit_plot_meaning[] = {
"Správné pořadí: přepisování historie → seznámení s Julií → "
"pronájem pokoje → četba Goldsteinovy knihy → zatčení → místnost 101.",
};
static UnitCtx lit_plot_unit;
GtkWidget *build_cetba1984_plot_page(void) {
lit_plot_unit.page = "cetba1984";
lit_plot_unit.progress_file = app_progress_cetba;
return build_assembly(&lit_plot_unit, tr("lit_plot_title"),
"lit_plot_sub", 1, lit_plot_items,
lit_plot_meaning, 1);
}
static const AssemblyItem fuks_plot_items[] = {
{
"Přetáhněte části příběhu do správného pořadí:",
{
"Kopfrkingl je spořádaným zaměstnancem krematoria",
"Seznámí se s Willim Reinkem",
"Začne věřit v árijskou nadřazenost",
"Postupně se odcizí své rodině",
"Zabije ženu a děti jako „osvobození“",
"Na konci se považuje za vtělení Dalajlámy",
},
6,
},
};
static const char *fuks_plot_meaning[] = {
"Správné pořadí: spořádaný úředník → setkání s Reinkem → árijská "
"ideologie → odcizení rodině → vraždy → přesvědčení o vlastní "
"božskosti.",
};
GtkWidget *build_cetba_fuks_plot_page(void) {
lit_plot_unit.page = "cetbaFuks";
lit_plot_unit.progress_file = app_progress_cetba;
return build_assembly(&lit_plot_unit, tr("lit_fuks_plot_title"),
"lit_fuks_plot_sub", 1, fuks_plot_items,
fuks_plot_meaning, 1);
}
/* ------------------------------------------------------------------ */
/* Reading list and 1984 overview */
/* ------------------------------------------------------------------ */
static GtkWidget *lit_link_card(const char *target, const char *title,
const char *sub, GtkDrawingAreaDrawFunc icon) {
GtkWidget *btn = gtk_button_new();
GtkWidget *row = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 14);
GtkWidget *ic;
GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 3);
GtkWidget *t = gtk_label_new(NULL);
GtkWidget *s = gtk_label_new(NULL);
gtk_widget_add_css_class(btn, "lit-link");
gtk_widget_set_hexpand(btn, TRUE);
ic = icon_area_new(icon, 0, 0, 0, 34);
gtk_widget_set_valign(ic, GTK_ALIGN_CENTER);
gtk_box_append(GTK_BOX(row), ic);
gtk_widget_set_valign(box, GTK_ALIGN_CENTER);
gtk_widget_set_hexpand(box, TRUE);
gtk_widget_set_halign(t, GTK_ALIGN_START);
gtk_label_set_xalign(GTK_LABEL(t), 0.0);
gtk_label_set_wrap(GTK_LABEL(t), TRUE);
gtk_label_set_max_width_chars(GTK_LABEL(t), 40);
gtk_widget_add_css_class(t, "lit-link-title");
i18n_bind(t, title, 0);
gtk_box_append(GTK_BOX(box), t);
gtk_widget_set_halign(s, GTK_ALIGN_START);
gtk_label_set_xalign(GTK_LABEL(s), 0.0);
gtk_label_set_wrap(GTK_LABEL(s), TRUE);
gtk_label_set_max_width_chars(GTK_LABEL(s), 46);
gtk_widget_add_css_class(s, "lit-link-sub");
i18n_bind(s, sub, 0);
gtk_box_append(GTK_BOX(box), s);
gtk_box_append(GTK_BOX(row), box);
gtk_button_set_child(GTK_BUTTON(btn), row);
g_object_set_data_full(G_OBJECT(btn), "target", g_strdup(target), g_free);
g_signal_connect(btn, "clicked", G_CALLBACK(on_nav_clicked), NULL);
return btn;
}
static void lit_note_card(GtkWidget *parent, const char *title,
GtkDrawingAreaDrawFunc icon,
const char *const *lines) {
GtkWidget *card = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
GtkWidget *head;
GtkWidget *ic;
GtkWidget *t;
gtk_widget_add_css_class(card, "notes-card");
gtk_widget_set_margin_bottom(card, 14);
gtk_box_append(GTK_BOX(parent), card);
head = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10);
gtk_box_append(GTK_BOX(card), head);
ic = icon_area_new(icon, 0, 0, 0, 26);
gtk_widget_set_valign(ic, GTK_ALIGN_CENTER);
gtk_box_append(GTK_BOX(head), ic);
t = gtk_label_new(title);
gtk_widget_set_halign(t, GTK_ALIGN_START);
gtk_label_set_wrap(GTK_LABEL(t), TRUE);
gtk_widget_set_valign(t, GTK_ALIGN_CENTER);
gtk_widget_add_css_class(t, "notes-title");
gtk_box_append(GTK_BOX(head), t);
for (int i = 0; lines[i]; i++) {
GtkWidget *l = gtk_label_new(lines[i]);
gtk_widget_set_halign(l, GTK_ALIGN_START);
gtk_label_set_wrap(GTK_LABEL(l), TRUE);
gtk_label_set_xalign(GTK_LABEL(l), 0.0);
gtk_widget_add_css_class(l, "notes-body");
gtk_box_append(GTK_BOX(card), l);
}
}
/* ------------------------------------------------------------------ */
/* Reading roadmap (Maturitní četba) */
/* ------------------------------------------------------------------ */
#define BOOK_NODES 2
typedef struct {
const char *title;
const char *target;
} BookDef;
static const BookDef book_defs[BOOK_NODES] = {
{"George Orwell – 1984", "cetba1984"},
{"Ladislav Fuks – Spalovač mrtvol", "cetbaFuks"},
};
static GtkWidget *book_rail;
static GtkWidget *book_nodes[BOOK_NODES];
static GtkWidget *book_labels[BOOK_NODES];
static double book_cx[BOOK_NODES];
static double book_cy[BOOK_NODES];
static int book_cw = 540;
static int book_ch = 300;
static void book_point(double t, double *ox, double *oy) {
int k = (int)t;
double u = t - (double)k;
double u2, u3;
double p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y;
if (k < 0) { k = 0; u = 0.0; }
if (k >= BOOK_NODES - 1) { k = BOOK_NODES - 2; u = 1.0; }
p1x = book_cx[k]; p1y = book_cy[k];
p2x = book_cx[k + 1]; p2y = book_cy[k + 1];
if (k - 1 >= 0) { p0x = book_cx[k - 1]; p0y = book_cy[k - 1]; }
else { p0x = p1x - (p2x - p1x); p0y = p1y - (p2y - p1y); }
if (k + 2 < BOOK_NODES) { p3x = book_cx[k + 2]; p3y = book_cy[k + 2]; }
else { p3x = p2x + (p2x - p1x); p3y = p2y + (p2y - p1y); }
u2 = u * u;
u3 = u2 * u;
*ox = 0.5 * (2.0 * p1x + (-p0x + p2x) * u
+ (2.0 * p0x - 5.0 * p1x + 4.0 * p2x - p3x) * u2
+ (-p0x + 3.0 * p1x - 3.0 * p2x + p3x) * u3);
*oy = 0.5 * (2.0 * p1y + (-p0y + p2y) * u
+ (2.0 * p0y - 5.0 * p1y + 4.0 * p2y - p3y) * u2
+ (-p0y + 3.0 * p1y - 3.0 * p2y + p3y) * u3);
}
static void book_path(cairo_t *cr, double t0, double t1) {
const double steps_per_unit = 48.0;
int n = (int)((t1 - t0) * steps_per_unit);
double x, y;
if (n < 1)
n = 1;
book_point(t0, &x, &y);
cairo_move_to(cr, x, y);
for (int s = 1; s <= n; s++) {
book_point(t0 + (t1 - t0) * (double)s / (double)n, &x, &y);
cairo_line_to(cr, x, y);
}
}
static void book_geometry(double avail) {
const double phase = 2.0 * G_PI * 1.7 / (double)(BOOK_NODES - 1);
int rows;
int r, c, i;
for (rows = 1; rows <= BOOK_NODES; rows++) {
int cols = (BOOK_NODES + rows - 1) / rows;
if (2.0 * ROAD_MX + (cols - 1) * PATH_SPAC <= avail + 1.0)
break;
}
if (rows > BOOK_NODES)
rows = BOOK_NODES;
int cols = (BOOK_NODES + rows - 1) / rows;
if (cols < 1)
cols = 1;
book_cw = (int)(2.0 * ROAD_MX + (cols - 1) * PATH_SPAC);
book_ch = (int)(2.0 * ROAD_MY + (rows - 1) * ROAD_GAP);
for (r = 0; r < rows; r++) {
int base = r * cols;
int len = MIN(cols, BOOK_NODES - base);
int fwd = (r % 2) == 0;
for (c = 0; c < len; c++) {
i = base + c;
int cc = fwd ? c : (cols - 1 - c);
book_cx[i] = ROAD_MX + cc * PATH_SPAC;
book_cy[i] = ROAD_MY + r * ROAD_GAP
+ ROAD_WAVE * sin((double)i * phase);
}
}
}
static void draw_book_rail(GtkDrawingArea *area, cairo_t *cr,
int width, int height, gpointer data) {
const double t_end = (double)(BOOK_NODES - 1);
const Rgb rail = color_from_hex(app_theme.rail);
const Rgb muted = color_from_hex(app_theme.subtext);
(void)area;
(void)width;
(void)height;
(void)data;
cairo_set_operator(cr, CAIRO_OPERATOR_CLEAR);
cairo_paint(cr);
cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND);
cairo_set_line_join(cr, CAIRO_LINE_JOIN_ROUND);
cairo_new_path(cr);
book_path(cr, 0.0, t_end);
cairo_set_line_width(cr, 12);
cairo_set_source_rgb(cr, rail.r, rail.g, rail.b);
cairo_stroke(cr);
cairo_set_source_rgba(cr, muted.r, muted.g, muted.b, 0.17);
cairo_set_dash(cr, (double[]){2.0, 40.0}, 2, 0.0);
cairo_new_path(cr);
book_path(cr, 0.0, t_end);
cairo_stroke(cr);
cairo_set_dash(cr, NULL, 0, 0.0);
}
void book_rail_theme_reset(void) {
if (book_rail)
gtk_widget_queue_draw(book_rail);
}
static GtkWidget *book_make_node(int i) {
GtkWidget *btn = gtk_button_new();
GtkWidget *icon = icon_area_new(draw_book_badge_icon, 0, 0, 0, 48);
gtk_widget_add_css_class(btn, "unit-node");
gtk_widget_add_css_class(btn, "current");
gtk_widget_set_can_focus(btn, FALSE);
gtk_widget_set_size_request(btn, (int)NODE_SIZE, (int)NODE_SIZE);
gtk_button_set_child(GTK_BUTTON(btn), icon);
g_object_set_data_full(G_OBJECT(btn), "target",
g_strdup(book_defs[i].target), g_free);
g_signal_connect(btn, "clicked", G_CALLBACK(on_nav_clicked), NULL);
return btn;
}
GtkWidget *build_readinglist_page(void) {
GtkWidget *page;
GtkWidget *scroll;
GtkWidget *wrap;
GtkWidget *fixed;
GtkWidget *rail;
int i;
book_geometry(1000.0);
page = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_widget_set_hexpand(page, TRUE);
gtk_widget_set_vexpand(page, TRUE);
gtk_widget_set_margin_start(page, 32);
gtk_widget_set_margin_end(page, 32);
gtk_widget_set_margin_top(page, 24);
gtk_widget_set_margin_bottom(page, 24);
gtk_box_append(GTK_BOX(page),
top_bar("czechmap", "Maturitní četba", "reading_sub"));
scroll = gtk_scrolled_window_new();
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_widget_set_vexpand(scroll, TRUE);
gtk_widget_set_margin_top(scroll, 14);
gtk_box_append(GTK_BOX(page), scroll);
wrap = gtk_center_box_new();
gtk_widget_set_vexpand(wrap, TRUE);
gtk_widget_set_hexpand(wrap, TRUE);
gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(scroll), wrap);
fixed = gtk_fixed_new();
gtk_widget_set_halign(fixed, GTK_ALIGN_CENTER);
gtk_widget_set_valign(fixed, GTK_ALIGN_CENTER);
gtk_widget_set_size_request(fixed, book_cw, book_ch);
gtk_center_box_set_center_widget(GTK_CENTER_BOX(wrap), fixed);
gtk_widget_set_margin_start(fixed, 24);
gtk_widget_set_margin_end(fixed, 24);
rail = gtk_drawing_area_new();
gtk_widget_set_size_request(rail, book_cw, book_ch);
gtk_drawing_area_set_draw_func(GTK_DRAWING_AREA(rail), draw_book_rail,
NULL, NULL);
gtk_fixed_put(GTK_FIXED(fixed), rail, 0, 0);
book_rail = rail;
for (i = 0; i < BOOK_NODES; i++) {
GtkWidget *btn = book_make_node(i);
GtkWidget *name = gtk_label_new(book_defs[i].title);
gtk_widget_set_size_request(name, (int)(PATH_SPAC - 20.0), -1);
gtk_widget_set_halign(name, GTK_ALIGN_CENTER);
gtk_label_set_justify(GTK_LABEL(name), GTK_JUSTIFY_CENTER);
gtk_label_set_wrap(GTK_LABEL(name), TRUE);
gtk_widget_add_css_class(name, "unit-name");
gtk_widget_add_css_class(name, "cz-label");
gtk_fixed_put(GTK_FIXED(fixed), btn, 0, 0);
gtk_fixed_put(GTK_FIXED(fixed), name, 0, 0);
gtk_fixed_move(GTK_FIXED(fixed), btn,
(int)(book_cx[i] - NODE_SIZE / 2.0),
(int)(book_cy[i] - NODE_SIZE / 2.0));
gtk_fixed_move(GTK_FIXED(fixed), name,
(int)(book_cx[i] - (PATH_SPAC - 20.0) / 2.0),
(int)(book_cy[i] + NODE_SIZE / 2.0 + 10.0));
book_nodes[i] = btn;
book_labels[i] = name;
}
return page;
}
GtkWidget *build_cetba1984_page(void) {
GtkWidget *page;
GtkWidget *scroll;
GtkWidget *box;
GtkWidget *links;
static const char *about[] = {
"Autor: George Orwell (vl. jm. Eric Arthur Blair)",
"Žánr: antiutopický (dystopický) román",
"Poprvé vydáno: 1949",
"Děj: Londýn, provincie Letopočet 1, stát Oceánie",
"Vyprávění: v er-formě, po deníkových zápiscích Winstona Smithe",
NULL,
};
static const char *world[] = {
"Svět je rozdělen na tři supervelmoci: Oceánii, Eurasii a Východasii, "
"které spolu vedou trvalou válku.",
"Vládne jediná strana (Angsoc) v čele s kultem Velkého bratra.",
"Ministerstvo pravdy – přepisuje historii a vyrábí „pravdu“.",
"Ministerstvo lásky – mučírny a likvidace nepohodlných.",
"Ministerstvo hojnosti – plánuje hospodářství a drží lidi v "
"nedostatku.",
"Ministerstvo míru – vede válku.",
NULL,
};
static const char *people[] = {
"Winston Smith – hlavní hrdina, přepisuje historii, touží po svobodě.",
"Julie – mladá členka strany, Winstonova tajná láska.",
"O'Brien – člen vnitřní strany, předstírá odboj a Winstona zničí.",
"Emmanuel Goldstein – nepřítel státu, údajný vůdce Bratrstva.",
"Velký bratr – symbol všemocné moci strany.",
"Pan Charrington – zdánlivý obchodník, ve skutečnosti agent.",
NULL,
};
static const char *terms[] = {
"Newspeak – uměle zjednodušovaný jazyk, který omezuje myšlení.",
"Dvojité myšlení – ochota věřit dvěma protikladným pravdám.",
"Zločin myšlení – už samotná zakázaná myšlenka.",
"Policie myšlení – tajná policie, která zatýká a mučí.",
"Bratrstvo – možná neexistující odbojová organizace.",
"Místnost 101 – nejhlubší mučírna, pro každého jeho největší strach.",
NULL,
};
page = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_widget_set_margin_start(page, 32);
gtk_widget_set_margin_end(page, 32);
gtk_widget_set_margin_top(page, 24);
gtk_widget_set_margin_bottom(page, 24);
gtk_box_append(GTK_BOX(page),
top_bar("readinglist", "George Orwell – 1984",
"cetba1984_sub"));
scroll = gtk_scrolled_window_new();
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_widget_set_vexpand(scroll, TRUE);
gtk_widget_set_margin_top(scroll, 14);
gtk_widget_set_margin_bottom(scroll, 14);
gtk_box_append(GTK_BOX(page), scroll);
box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(scroll), box);
links = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
gtk_widget_set_margin_bottom(links, 14);
gtk_box_append(GTK_BOX(box), links);
gtk_box_append(GTK_BOX(links),
lit_link_card("cetba1984quiz", "lit_quiz_title",
"lit_quiz_sub", draw_quiz_icon));
gtk_box_append(GTK_BOX(links),
lit_link_card("cetba1984dej", "lit_plot_title",
"lit_plot_sub", draw_order_icon));
lit_note_card(box, "O knize", draw_book_icon, about);
lit_note_card(box, "Svět a strana", draw_globe_icon, world);
lit_note_card(box, "Postavy", draw_people_icon, people);
lit_note_card(box, "Klíčové pojmy", draw_bulb_icon, terms);
return page;
}
GtkWidget *build_cetba_fuks_page(void) {
GtkWidget *page;
GtkWidget *scroll;
GtkWidget *box;
GtkWidget *links;
static const char *about[] = {
"Autor: Ladislav Fuks (1923–1994)",
"Žánr: psychologický román s prvky grotesky a hororu",
"Poprvé vydáno: 1967",
"Děj: Praha v době protektorátu (konec 30. let)",
"Vyprávění: ich-forma – vypráví sám pan Kopfrkingl",
NULL,
};
static const char *world[] = {
"Děj se odehrává v protektorátu Čechy a Morava za nastupujícího "
"nacismu.",
"Atmosféru tvoří strach, přizpůsobování a touha zalíbit se moci.",
"Krematorium je symbolem smrti a odlidštění.",
"Antisemitismus a árijská ideologie postupně prostupují společnost.",
"Obyčejný úředník se mění v nástroj zla.",
NULL,
};
static const char *people[] = {
"Pan Kopfrkingl – zaměstnanec krematoria, vypravěč a vrah své rodiny.",
"Lakmé – jeho žena, židovského původu.",
"Zina a Mil – jeho děti.",
"Willi Reinke – Němec, který Kopfrkingla přivede k nacismu.",
"Dr. Bettelheim – lékař, s nímž Kopfrkingl rozmlouvá o smrti.",
NULL,
};
static const char *terms[] = {
"Krematorium – symbol smrti a zvrácené „očisty“.",
"Kniha mrtvých – tibetský text, který si Kopfrkingl překrucuje.",
"Reinkarnace a „osvobození“ – záminka pro vraždy.",
"Masky a přetvářka – zlo se tváří jako zdvořilost a řád.",
"Groteska a černý humor – hrůza podaná klidným, slavnostním tónem.",
"Voda a Vltava – motiv smrti a plynutí.",
NULL,
};
page = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_widget_set_margin_start(page, 32);
gtk_widget_set_margin_end(page, 32);
gtk_widget_set_margin_top(page, 24);
gtk_widget_set_margin_bottom(page, 24);
gtk_box_append(GTK_BOX(page),
top_bar("readinglist", "Ladislav Fuks – Spalovač mrtvol",
"cetbaFuks_sub"));
scroll = gtk_scrolled_window_new();
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_widget_set_vexpand(scroll, TRUE);
gtk_widget_set_margin_top(scroll, 14);
gtk_widget_set_margin_bottom(scroll, 14);
gtk_box_append(GTK_BOX(page), scroll);
box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(scroll), box);
links = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
gtk_widget_set_margin_bottom(links, 14);
gtk_box_append(GTK_BOX(box), links);
gtk_box_append(GTK_BOX(links),
lit_link_card("cetbaFuksQuiz", "lit_fuks_quiz_title",
"lit_fuks_quiz_sub", draw_quiz_icon));
gtk_box_append(GTK_BOX(links),
lit_link_card("cetbaFuksDej", "lit_fuks_plot_title",
"lit_fuks_plot_sub", draw_order_icon));
lit_note_card(box, "O knize", draw_book_icon, about);
lit_note_card(box, "Doba a svět", draw_globe_icon, world);
lit_note_card(box, "Postavy", draw_people_icon, people);
lit_note_card(box, "Klíčové motivy", draw_bulb_icon, terms);
return page;
}