diff --git a/exercise_u1.c b/exercise_u1.c index c3e5858..9744f7f 100644 --- a/exercise_u1.c +++ b/exercise_u1.c @@ -1156,13 +1156,7 @@ const TypedQ trans_p15[] = { {"Auf Wiedersehen!", "na shledanou|na viděnou|goodbye", "Na shledanou!"}, }; -typedef struct { - const char *header; /* i18n key, e.g. "Strana 10" */ - const TypedQ *rows; - int n; -} TransSection; - -static const TransSection trans_sections[] = { +const TransSection u1_trans_sections[] = { {"Strana 10", trans_p10, (int)G_N_ELEMENTS(trans_p10)}, {"Strana 11", trans_p11, (int)G_N_ELEMENTS(trans_p11)}, {"Strana 12", trans_p12, (int)G_N_ELEMENTS(trans_p12)}, @@ -1170,6 +1164,7 @@ static const TransSection trans_sections[] = { {"Strana 14", trans_p14, (int)G_N_ELEMENTS(trans_p14)}, {"Strana 15", trans_p15, (int)G_N_ELEMENTS(trans_p15)}, }; +const int u1_trans_sections_n = (int)G_N_ELEMENTS(u1_trans_sections); typedef struct { UnitCtx *unit; @@ -1296,8 +1291,8 @@ GtkWidget *build_translate(UnitCtx *unit) { int total = 0; int k = 0; - for (guint s = 0; s < G_N_ELEMENTS(trans_sections); s++) - total += trans_sections[s].n; + for (int s = 0; s < unit->n_trans_sections; s++) + total += unit->trans_sections[s].n; ctx->unit = unit; ctx->ex_num = unit->branch_ex; @@ -1307,8 +1302,8 @@ GtkWidget *build_translate(UnitCtx *unit) { ctx->headers = g_new0(const char *, total); ctx->order = g_new0(int, total); - for (guint s = 0; s < G_N_ELEMENTS(trans_sections); s++) { - const TransSection *sec = &trans_sections[s]; + for (int s = 0; s < unit->n_trans_sections; s++) { + const TransSection *sec = &unit->trans_sections[s]; for (int i = 0; i < sec->n; i++, k++) { ctx->qs[k] = sec->rows[i]; diff --git a/exercise_u2.c b/exercise_u2.c index fec2008..4fd8c3c 100644 --- a/exercise_u2.c +++ b/exercise_u2.c @@ -1305,3 +1305,236 @@ GtkWidget *u2ex19(UnitCtx *unit) { s03_rows, G_N_ELEMENTS(s03_rows), NULL, TRUE); } +/* ------------------------------------------------------------------ */ +/* Unit 2 vocabulary (off-path Vokabeltraining branch) */ +/* ------------------------------------------------------------------ */ + +const TypedQ u2_trans_p22[] = { + {"arbeiten (Infinitiv)", "pracovat|pracuje|to work", "pracovat"}, + {"das Auto, -s", "auto|car", "auto"}, + {"brauchen (Infinitiv)", "potřebovat|potřebuje|to need", "potřebovat"}, + {"die Britin, -nen", "britka|british woman", "Britka"}, + {"britisch", "britský|british", "britský"}, + {"deutsch", "německý|german", "německý"}, + {"das Deutsch", + "němčina|německy|němčina, německy|german", "němčina, německy"}, + {"die Eisschnelläuferin, -nen", + "rychlobruslařka|speed skater", "rychlobruslařka"}, + {"fahren (Infinitiv)", "jezdit|jet|řídit|to drive|to go", "jezdit"}, + {"Er fährt gern Auto.", + "rád řídí auto|rád jezdí autem|he likes driving a car", + "Rád řídí auto."}, + {"Frankreich", "francie|france", "Francie"}, + {"für", "pro|za|for", "pro, za"}, + {"der Fußballspieler", "fotbalista|footballer|football player", + "fotbalista"}, + {"das Jahrhunderttalent, -e", + "talent století|talent of the century", "talent století"}, + {"das Kind, -er", "dítě|child", "dítě"}, + {"lesen (Infinitiv)", "číst|to read", "číst"}, + {"das Model, -s", "model|modelka|model, modelka", "model, modelka"}, + {"die Nummer, -n", "číslo|number", "číslo"}, + {"die Schauspielerin, -nen", "herečka|actress", "herečka"}, + {"der Schüler, -", "žák|pupil|schoolboy", "žák"}, + {"die Sportinitiative, -n", + "sportovní iniciativa|sports initiative", "sportovní iniciativa"}, + {"sprechen (Infinitiv)", "mluvit|to speak", "mluvit"}, + {"Sie spricht Englisch.", + "mluví anglicky|ona mluví anglicky|she speaks english", + "Mluví anglicky."}, + {"der Trainer, -", "trenér|coach|trainer", "trenér"}, +}; + +const TypedQ u2_trans_p23[] = { + {"besuchen (Infinitiv)", "navštěvovat|navštívit|to visit", + "navštěvovat, navštívit"}, + {"Er besucht das Gymnasium.", + "chodí na gymnázium|navštěvuje gymnázium|he attends grammar school", + "Chodí na gymnázium."}, + {"dort", "tam|there", "tam"}, + {"dreifach", "trojnásobný|threefold|triple", "trojnásobný"}, + {"gewinnen (Infinitiv)", "vyhrát|vyhrávat|to win", "vyhrát, vyhrávat"}, + {"die Goldmedaille, -n", "zlatá medaile|gold medal", "zlatá medaile"}, + {"das Gymnasium, Gymnasien", "gymnázium|grammar school", "gymnázium"}, + {"heute", "dnes|dneska|today", "dnes"}, + {"das Kroatisch", + "chorvatština|chorvatsky|chorvatština, chorvatsky|croatian", + "chorvatština, chorvatsky"}, + {"leben (Infinitiv)", "žít|to live", "žít"}, + {"Sie lebt in Österreich.", "žije v rakousku|she lives in austria", + "Žije v Rakousku."}, + {"die Muttersprache, -n", "mateřský jazyk|mother tongue", + "mateřský jazyk"}, + {"oft", "často|often", "často"}, + {"Österreich", "rakousko|austria", "Rakousko"}, + {"die Rad(renn)fahrerin, -nen", "cyklistka|cyclist", "cyklistka"}, + {"das Spanisch", + "španělština|španělsky|španělština, španělsky|spanish", + "španělština, španělsky"}, + {"die Sportlerin, -nen", "sportovkyně|sportswoman|athlete", + "sportovkyně"}, + {"sportlich", "sportovní|sporty", "sportovní"}, + {"tschechisch", "český|czech", "český"}, + {"das Tschechisch", + "čeština|česky|čeština, česky|czech", "čeština, česky"}, +}; + +const TypedQ u2_trans_p24[] = { + {"das Amerika", "amerika|america", "Amerika"}, + {"die Assistentin, -nen", "asistentka|assistant", "asistentka"}, + {"der Beruf, -e", "povolání|profese|job|profession", "povolání"}, + {"Was ist er von Beruf?", + "jaké má povolání|čím je|what is his job", "Jaké má povolání?"}, + {"Deutschland", "německo|germany", "Německo"}, + {"England", "anglie|england", "Anglie"}, + {"die Flagge, -n", "vlajka|flag", "vlajka"}, + {"Griechenland", "řecko|greece", "Řecko"}, + {"das Griechisch", + "řečtina|řecky|řečtina, řecky|greek", "řečtina, řecky"}, + {"Großbritannien", "velká británie|great britain", "Velká Británie"}, + {"die Herkunft", "původ|origin", "původ"}, + {"Italien", "itálie|italy", "Itálie"}, + {"das Italienisch", + "italština|italsky|italština, italsky|italian", "italština, italsky"}, + {"Kroatien", "chorvatsko|croatia", "Chorvatsko"}, + {"das Land, Länder", "země|stát|country", "země, stát"}, + {"der Lehrer, -", "učitel|teacher", "učitel"}, + {"die Lehrerin, -nen", "učitelka|teacher", "učitelka"}, + {"der Manager, -", "manažer|manager", "manažer"}, + {"Polen", "polsko|poland", "Polsko"}, + {"das Polnisch", + "polština|polsky|polština, polsky|polish", "polština, polsky"}, + {"das Russisch", + "ruština|rusky|ruština, rusky|russian", "ruština, rusky"}, + {"Russland", "rusko|russia", "Rusko"}, + {"die Schweiz", "švýcarsko|switzerland", "Švýcarsko"}, + {"die Slowakei", "slovensko|slovakia", "Slovensko"}, + {"das Slowakisch", + "slovenština|slovensky|slovenština, slovensky|slovak", + "slovenština, slovensky"}, + {"Spanien", "španělsko|spain", "Španělsko"}, + {"die Sprache, -n", "jazyk|řeč|language", "jazyk, řeč"}, + {"der Student, -en", "student|student", "student"}, + {"die Studentin, -nen", "studentka|student", "studentka"}, + {"Tschechien", "česko|czechia", "Česko"}, + {"die Türkei", "turecko|turkey", "Turecko"}, + {"das Türkisch", + "turečtina|turecky|turečtina, turecky|turkish", "turečtina, turecky"}, + {"das Ungarisch", + "maďarština|maďarsky|maďarština, maďarsky|hungarian", + "maďarština, maďarsky"}, + {"Ungarn", "maďarsko|hungary", "Maďarsko"}, + {"die Verkäuferin, -nen", "prodavačka|shop assistant|saleswoman", + "prodavačka"}, + {"welcher/welche/welches", "jaký|jaká|jaké|which", "jaký/jaká/jaké"}, + {"Welche Sprachen spricht sie?", + "jakými jazyky mluví|které jazyky mluví|which languages does she speak", + "Jakými jazyky mluví?"}, + {"super", "super|skvělý|great|super, skvělý", "super, skvělý"}, + {"wenig", "málo|little|few", "málo"}, + {"ein wenig", "trochu|a little|a bit", "trochu"}, + {"das Wort, Wörter", "slovo|word", "slovo"}, +}; + +const TypedQ u2_trans_p25[] = { + {"das Abitur, -e", "maturita|a-levels", "maturita"}, + {"der Austausch, -e", "výměna|exchange", "výměna"}, + {"ein bisschen", "trochu|a bit|a little", "trochu"}, + {"finden (Infinitiv)", + "najít|považovat|shledávat|myslet si|to find", + "najít, považovat"}, + {"Sie findet den Kurs...", + "kurz se jí líbí|kurz shledává skvělým|she likes the course", + "Kurz se jí líbí. (Kurz shledává skvělým.)"}, + {"interessant", "zajímavý|interesting", "zajímavý"}, + {"der Kurs, -e", "kurz|course", "kurz"}, + {"leider", "bohužel|unfortunately", "bohužel"}, + {"mein/meine/mein", "můj|moje|my", "můj/moje/moje"}, + {"der Mensch, -en", "člověk|human|person", "člověk"}, + {"die Mutter, Mütter", "matka|mother", "matka"}, + {"noch", "ještě|still", "ještě"}, + {"Portugal", "portugalsko|portugal", "Portugalsko"}, + {"das Portugiesisch", + "portugalština|portugalsky|portugalština, portugalsky|portuguese", + "portugalština, portugalsky"}, + {"Schweden", "švédsko|sweden", "Švédsko"}, + {"das Schwedisch", + "švédština|švédsky|švédština, švédsky|swedish", "švédština, švédsky"}, + {"sehr", "velmi|very", "velmi"}, + {"nicht sehr gut", "ne moc dobře|not very well", "ne moc dobře"}, + {"studieren (Infinitiv)", "studovat|to study", "studovat"}, + {"das Südamerika", "jižní amerika|south america", "Jižní Amerika"}, + {"die USA (mn. č.)", "usa|united states|spojené státy", "USA"}, + {"viel", "hodně|much|a lot", "hodně"}, + {"wie viel", "kolik|how much|how many", "kolik"}, +}; + +const TypedQ u2_trans_p26a[] = { + {"Deutscher/Deutsche", "němec|němka|němec/němka", "Němec/Němka"}, + {"Engländer/Engländerin", + "angličan|angličanka|angličan/angličanka", "Angličan/Angličanka"}, + {"Franzose/Französin", + "francouz|francouzka|francouz/francouzka", "Francouz/Francouzka"}, + {"Italiener/Italienerin", "ital|italka|ital/italka", "Ital/Italka"}, + {"die Nationalität, -en", "národnost|nationality", "národnost"}, + {"Österreicher/Österreicherin", + "rakušan|rakušanka|rakušan/rakušanka", "Rakušan/Rakušanka"}, + {"Russe/Russin", "rus|ruska|rus/ruska", "Rus/Ruska"}, + {"Schweizer/Schweizerin", + "švýcar|švýcarka|švýcar/švýcarka", "Švýcar/Švýcarka"}, + {"Slowake/Slowakin", "slovák|slovenka|slovák/slovenka", + "Slovák/Slovenka"}, + {"Spanier/Spanierin", "španěl|španělka|španěl/španělka", + "Španěl/Španělka"}, + {"Tscheche/Tschechin", "čech|češka|čech/češka", "Čech/Češka"}, +}; + +const TypedQ u2_trans_p26b[] = { + {"dreißig", "30|třicet", "třicet (30)"}, + {"vierzig", "40|čtyřicet", "čtyřicet (40)"}, + {"fünfzig", "50|padesát", "padesát (50)"}, + {"sechzig", "60|šedesát", "šedesát (60)"}, + {"siebzig", "70|sedmdesát", "sedmdesát (70)"}, + {"achtzig", "80|osmdesát", "osmdesát (80)"}, + {"neunzig", "90|devadesát", "devadesát (90)"}, + {"(ein)hundert", "100|sto", "sto (100)"}, + {"(ein)tausend", "1000|tisíc", "tisíc (1000)"}, +}; + +const TypedQ u2_trans_p27[] = { + {"das Afrika", "afrika|africa", "Afrika"}, + {"die Arbeit, -en", "práce|work|job", "práce"}, + {"Asien", "asie|asia", "Asie"}, + {"das Australien", "austrálie|australia", "Austrálie"}, + {"beginnen (Infinitiv)", "začít|začínat|to begin|to start", + "začít, začínat"}, + {"danke", "děkuji|díky|thanks|thank you", "děkuji, díky"}, + {"das Europa", "evropa|europe", "Evropa"}, + {"ganz", "celý|whole", "celý"}, + {"gehen (Infinitiv)", "jít|chodit|to go", "jít"}, + {"Wie geht es Ihnen?", "jak se máte|how are you", "Jak se máte?"}, + {"Wie geht es dir?", "jak se máš|how are you", "Jak se máš?"}, + {"genau", "přesně|exactly", "přesně"}, + {"morgen", "zítra|tomorrow", "zítra"}, + {"nur", "jen|only", "jen"}, + {"der Rekord, -e", "rekord|record", "rekord"}, + {"schon", "již|už|already", "již, už"}, + {"das Semester, -", "semestr|semester", "semestr"}, + {"viel", "hodně|much|a lot", "hodně"}, + {"wie viel", "kolik|how much|how many", "kolik"}, + {"die Welt", "svět|world", "svět"}, + {"aus der ganzen Welt", "z celého světa|from all over the world", + "z celého světa"}, +}; + +const TransSection u2_trans_sections[] = { + {"Strana 22", u2_trans_p22, (int)G_N_ELEMENTS(u2_trans_p22)}, + {"Strana 23", u2_trans_p23, (int)G_N_ELEMENTS(u2_trans_p23)}, + {"Strana 24", u2_trans_p24, (int)G_N_ELEMENTS(u2_trans_p24)}, + {"Strana 25", u2_trans_p25, (int)G_N_ELEMENTS(u2_trans_p25)}, + {"Strana 26", u2_trans_p26a, (int)G_N_ELEMENTS(u2_trans_p26a)}, + {"Strana 26", u2_trans_p26b, (int)G_N_ELEMENTS(u2_trans_p26b)}, + {"Strana 27", u2_trans_p27, (int)G_N_ELEMENTS(u2_trans_p27)}, +}; +const int u2_trans_sections_n = (int)G_N_ELEMENTS(u2_trans_sections); + diff --git a/main.c b/main.c index 84b16a2..327f6db 100644 --- a/main.c +++ b/main.c @@ -37,6 +37,16 @@ void unit_meta_init(void) { units[0].branch_name = "Vokabeltraining"; units[0].branch_target = "u1vocab"; units[0].branch_ex = MAX_UNIT_EX; + units[0].trans_sections = u1_trans_sections; + units[0].n_trans_sections = u1_trans_sections_n; + + /* Same vocabulary-training branch for unit 2 ("Aus aller Welt"). */ + units[1].has_branch = TRUE; + units[1].branch_name = "Vokabeltraining"; + units[1].branch_target = "u2vocab"; + units[1].branch_ex = MAX_UNIT_EX; + units[1].trans_sections = u2_trans_sections; + units[1].n_trans_sections = u2_trans_sections_n; } void unit_configure(int idx, const char *const *names, int n) { diff --git a/maturita.h b/maturita.h index ff29b76..94a81a5 100644 --- a/maturita.h +++ b/maturita.h @@ -86,6 +86,7 @@ typedef enum { LANG_CS = 0, LANG_EN } UiLang; +typedef struct TransSection TransSection; /* vocabulary word list for a branch */ typedef struct { unsigned crust; unsigned base; @@ -145,6 +146,8 @@ typedef struct { GtkWidget *branch_icon; double branch_cx; double branch_cy; + const struct TransSection *trans_sections; /* branch vocabulary content */ + int n_trans_sections; } UnitCtx; typedef struct { double r, g, b; } Rgb; typedef struct { @@ -337,6 +340,11 @@ typedef struct { const char *answers; /* accepted answers separated by '|' */ const char *meaning; /* i18n key of the revealed meaning or NULL */ } TypedQ; +struct TransSection { + const char *header; /* page label shown above the word, e.g. "Strana 22" */ + const TypedQ *rows; + int n; +}; typedef struct { const TypedQ *qs; int n; @@ -606,6 +614,10 @@ extern const TypedQ g06_rows[]; extern const TypedQ g07_rows[]; extern const TypedQ g11_rows[]; extern const TypedQ s03_rows[]; +extern const TransSection u1_trans_sections[]; +extern const int u1_trans_sections_n; +extern const TransSection u2_trans_sections[]; +extern const int u2_trans_sections_n; extern const VerbQ g01_peter[]; extern const VerbQ g01_jana[]; extern const char *g01_pool[];