#include #include #include "el_runtime.h" el_val_t str_ends(el_val_t s, el_val_t suf); el_val_t str_last_char(el_val_t s); el_val_t str_last2(el_val_t s); el_val_t str_last3(el_val_t s); el_val_t str_drop_last(el_val_t s, el_val_t n); el_val_t is_vowel(el_val_t c); el_val_t morph_apply_suffix(el_val_t base, el_val_t suffix); el_val_t en_irregular_plural(el_val_t word); el_val_t en_irregular_singular(el_val_t word); el_val_t en_irregular_verb(el_val_t base); el_val_t en_verb_3sg(el_val_t base); el_val_t en_should_double_final(el_val_t base); el_val_t en_verb_past(el_val_t base); el_val_t en_verb_gerund(el_val_t base); el_val_t en_pluralize_regular(el_val_t singular); el_val_t en_verb_form(el_val_t base, el_val_t tense, el_val_t person, el_val_t number); el_val_t agree_determiner(el_val_t det, el_val_t noun); el_val_t morph_pluralize(el_val_t noun, el_val_t profile); el_val_t morph_map_canonical(el_val_t verb, el_val_t code); el_val_t morph_conjugate(el_val_t verb, el_val_t tense, el_val_t person, el_val_t number, el_val_t profile); el_val_t morph_inflect(el_val_t word, el_val_t features, el_val_t profile); el_val_t pluralize(el_val_t singular); el_val_t singularize(el_val_t plural); el_val_t verb_form(el_val_t base, el_val_t tense, el_val_t person, el_val_t number); el_val_t irregular_plural(el_val_t word); el_val_t irregular_singular(el_val_t word); el_val_t de_article_def(el_val_t gender, el_val_t gram_case, el_val_t number); el_val_t de_article_indef(el_val_t gender, el_val_t gram_case, el_val_t number); el_val_t de_article(el_val_t gender, el_val_t gram_case, el_val_t number, el_val_t definite); el_val_t de_adj_ending(el_val_t gender, el_val_t gram_case, el_val_t number, el_val_t article_type); el_val_t de_noun_plural(el_val_t noun, el_val_t gender); el_val_t de_case_ending(el_val_t noun, el_val_t gender, el_val_t gram_case, el_val_t number); el_val_t de_conjugate_weak(el_val_t stem, el_val_t tense, el_val_t person, el_val_t number); el_val_t de_irregular_present(el_val_t verb, el_val_t person, el_val_t number); el_val_t de_strong_past_stem(el_val_t verb); el_val_t de_norm_number(el_val_t number); el_val_t de_norm_person(el_val_t person); el_val_t de_conjugate(el_val_t verb, el_val_t tense, el_val_t person, el_val_t number); el_val_t de_article_def(el_val_t gender, el_val_t gram_case, el_val_t number) { if (str_eq(number, EL_STR("pl"))) { if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("die"); } if (str_eq(gram_case, EL_STR("acc"))) { return EL_STR("die"); } if (str_eq(gram_case, EL_STR("dat"))) { return EL_STR("den"); } if (str_eq(gram_case, EL_STR("gen"))) { return EL_STR("der"); } return EL_STR("die"); } if (str_eq(gender, EL_STR("m"))) { if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("der"); } if (str_eq(gram_case, EL_STR("acc"))) { return EL_STR("den"); } if (str_eq(gram_case, EL_STR("dat"))) { return EL_STR("dem"); } if (str_eq(gram_case, EL_STR("gen"))) { return EL_STR("des"); } return EL_STR("der"); } if (str_eq(gender, EL_STR("f"))) { if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("die"); } if (str_eq(gram_case, EL_STR("acc"))) { return EL_STR("die"); } if (str_eq(gram_case, EL_STR("dat"))) { return EL_STR("der"); } if (str_eq(gram_case, EL_STR("gen"))) { return EL_STR("der"); } return EL_STR("die"); } if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("das"); } if (str_eq(gram_case, EL_STR("acc"))) { return EL_STR("das"); } if (str_eq(gram_case, EL_STR("dat"))) { return EL_STR("dem"); } if (str_eq(gram_case, EL_STR("gen"))) { return EL_STR("des"); } return EL_STR("das"); return 0; } el_val_t de_article_indef(el_val_t gender, el_val_t gram_case, el_val_t number) { if (str_eq(number, EL_STR("pl"))) { return EL_STR(""); } if (str_eq(gender, EL_STR("m"))) { if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("ein"); } if (str_eq(gram_case, EL_STR("acc"))) { return EL_STR("einen"); } if (str_eq(gram_case, EL_STR("dat"))) { return EL_STR("einem"); } if (str_eq(gram_case, EL_STR("gen"))) { return EL_STR("eines"); } return EL_STR("ein"); } if (str_eq(gender, EL_STR("f"))) { if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("eine"); } if (str_eq(gram_case, EL_STR("acc"))) { return EL_STR("eine"); } if (str_eq(gram_case, EL_STR("dat"))) { return EL_STR("einer"); } if (str_eq(gram_case, EL_STR("gen"))) { return EL_STR("einer"); } return EL_STR("eine"); } if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("ein"); } if (str_eq(gram_case, EL_STR("acc"))) { return EL_STR("ein"); } if (str_eq(gram_case, EL_STR("dat"))) { return EL_STR("einem"); } if (str_eq(gram_case, EL_STR("gen"))) { return EL_STR("eines"); } return EL_STR("ein"); return 0; } el_val_t de_article(el_val_t gender, el_val_t gram_case, el_val_t number, el_val_t definite) { if (str_eq(definite, EL_STR("def"))) { return de_article_def(gender, gram_case, number); } if (str_eq(definite, EL_STR("indef"))) { return de_article_indef(gender, gram_case, number); } return EL_STR(""); return 0; } el_val_t de_adj_ending(el_val_t gender, el_val_t gram_case, el_val_t number, el_val_t article_type) { if (str_eq(article_type, EL_STR("def"))) { if (str_eq(number, EL_STR("pl"))) { return EL_STR("en"); } if (str_eq(gender, EL_STR("m"))) { if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("e"); } return EL_STR("en"); } if (str_eq(gender, EL_STR("f"))) { if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("e"); } if (str_eq(gram_case, EL_STR("acc"))) { return EL_STR("e"); } return EL_STR("en"); } if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("e"); } if (str_eq(gram_case, EL_STR("acc"))) { return EL_STR("e"); } return EL_STR("en"); } if (str_eq(article_type, EL_STR("indef"))) { if (str_eq(number, EL_STR("pl"))) { return EL_STR("en"); } if (str_eq(gender, EL_STR("m"))) { if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("er"); } return EL_STR("en"); } if (str_eq(gender, EL_STR("f"))) { if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("e"); } if (str_eq(gram_case, EL_STR("acc"))) { return EL_STR("e"); } return EL_STR("en"); } if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("es"); } if (str_eq(gram_case, EL_STR("acc"))) { return EL_STR("es"); } return EL_STR("en"); } if (str_eq(number, EL_STR("pl"))) { if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("e"); } if (str_eq(gram_case, EL_STR("acc"))) { return EL_STR("e"); } if (str_eq(gram_case, EL_STR("dat"))) { return EL_STR("en"); } if (str_eq(gram_case, EL_STR("gen"))) { return EL_STR("er"); } return EL_STR("e"); } if (str_eq(gender, EL_STR("m"))) { if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("er"); } if (str_eq(gram_case, EL_STR("acc"))) { return EL_STR("en"); } if (str_eq(gram_case, EL_STR("dat"))) { return EL_STR("em"); } if (str_eq(gram_case, EL_STR("gen"))) { return EL_STR("en"); } return EL_STR("er"); } if (str_eq(gender, EL_STR("f"))) { if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("e"); } if (str_eq(gram_case, EL_STR("acc"))) { return EL_STR("e"); } if (str_eq(gram_case, EL_STR("dat"))) { return EL_STR("er"); } if (str_eq(gram_case, EL_STR("gen"))) { return EL_STR("er"); } return EL_STR("e"); } if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("es"); } if (str_eq(gram_case, EL_STR("acc"))) { return EL_STR("es"); } if (str_eq(gram_case, EL_STR("dat"))) { return EL_STR("em"); } if (str_eq(gram_case, EL_STR("gen"))) { return EL_STR("en"); } return EL_STR("es"); return 0; } el_val_t de_noun_plural(el_val_t noun, el_val_t gender) { if (str_eq(noun, EL_STR("Mann"))) { return EL_STR("M\xc3\xa4nner"); } if (str_eq(noun, EL_STR("Kind"))) { return EL_STR("Kinder"); } if (str_eq(noun, EL_STR("Haus"))) { return EL_STR("H\xc3\xa4user"); } if (str_eq(noun, EL_STR("Buch"))) { return EL_STR("B\xc3\xbc""cher"); } if (str_eq(noun, EL_STR("Mutter"))) { return EL_STR("M\xc3\xbctter"); } if (str_eq(noun, EL_STR("Vater"))) { return EL_STR("V\xc3\xa4ter"); } if (str_eq(noun, EL_STR("Bruder"))) { return EL_STR("Br\xc3\xbc""der"); } if (str_eq(noun, EL_STR("Tochter"))) { return EL_STR("T\xc3\xb6""chter"); } if (str_eq(noun, EL_STR("Nacht"))) { return EL_STR("N\xc3\xa4""chte"); } if (str_eq(noun, EL_STR("Stadt"))) { return EL_STR("St\xc3\xa4""dte"); } if (str_eq(noun, EL_STR("Wort"))) { return EL_STR("W\xc3\xb6rter"); } if (str_eq(noun, EL_STR("Gott"))) { return EL_STR("G\xc3\xb6tter"); } if (str_eq(noun, EL_STR("Wald"))) { return EL_STR("W\xc3\xa4lder"); } if (str_eq(noun, EL_STR("Band"))) { return EL_STR("B\xc3\xa4nde"); } if (str_eq(noun, EL_STR("Hund"))) { return EL_STR("Hunde"); } if (str_eq(noun, EL_STR("Baum"))) { return EL_STR("B\xc3\xa4ume"); } if (str_eq(noun, EL_STR("Raum"))) { return EL_STR("R\xc3\xa4ume"); } if (str_eq(noun, EL_STR("Traum"))) { return EL_STR("Tr\xc3\xa4ume"); } if (str_eq(noun, EL_STR("Zug"))) { return EL_STR("Z\xc3\xbcge"); } if (str_eq(noun, EL_STR("Flug"))) { return EL_STR("Fl\xc3\xbcge"); } if (str_eq(noun, EL_STR("Fu\xc3\x9f"))) { return EL_STR("F\xc3\xbc\xc3\x9f""e"); } if (str_eq(noun, EL_STR("Gru\xc3\x9f"))) { return EL_STR("Gr\xc3\xbc\xc3\x9f""e"); } if (str_eq(noun, EL_STR("Geist"))) { return EL_STR("Geister"); } if (str_eq(noun, EL_STR("Schwanz"))) { return EL_STR("Schw\xc3\xa4nze"); } if (str_eq(noun, EL_STR("Stuhl"))) { return EL_STR("St\xc3\xbchle"); } if (str_eq(noun, EL_STR("Stuhl"))) { return EL_STR("St\xc3\xbchle"); } if (str_eq(noun, EL_STR("Sohn"))) { return EL_STR("S\xc3\xb6hne"); } if (str_eq(noun, EL_STR("Ton"))) { return EL_STR("T\xc3\xb6ne"); } if (str_eq(noun, EL_STR("Fluss"))) { return EL_STR("Fl\xc3\xbcsse"); } if (str_eq(noun, EL_STR("Frau"))) { return EL_STR("Frauen"); } if (str_eq(noun, EL_STR("Stra\xc3\x9f""e"))) { return EL_STR("Stra\xc3\x9f""en"); } if (str_eq(noun, EL_STR("Schule"))) { return EL_STR("Schulen"); } if (str_eq(noun, EL_STR("Blume"))) { return EL_STR("Blumen"); } if (str_eq(noun, EL_STR("Katze"))) { return EL_STR("Katzen"); } if (str_eq(noun, EL_STR("Sprache"))) { return EL_STR("Sprachen"); } if (str_eq(noun, EL_STR("Kirche"))) { return EL_STR("Kirchen"); } if (str_eq(noun, EL_STR("T\xc3\xbcr"))) { return EL_STR("T\xc3\xbcren"); } if (str_eq(noun, EL_STR("Uhr"))) { return EL_STR("Uhren"); } if (str_eq(noun, EL_STR("Zahl"))) { return EL_STR("Zahlen"); } if (str_eq(noun, EL_STR("Wahl"))) { return EL_STR("Wahlen"); } if (str_eq(noun, EL_STR("Bahn"))) { return EL_STR("Bahnen"); } if (str_eq(noun, EL_STR("Zahn"))) { return EL_STR("Z\xc3\xa4hne"); } if (str_eq(noun, EL_STR("Nase"))) { return EL_STR("Nasen"); } if (str_eq(noun, EL_STR("Maus"))) { return EL_STR("M\xc3\xa4use"); } if (str_eq(noun, EL_STR("M\xc3\xa4""dchen"))) { return EL_STR("M\xc3\xa4""dchen"); } if (str_eq(noun, EL_STR("Messer"))) { return EL_STR("Messer"); } if (str_eq(noun, EL_STR("Fenster"))) { return EL_STR("Fenster"); } if (str_eq(noun, EL_STR("Zimmer"))) { return EL_STR("Zimmer"); } if (str_eq(noun, EL_STR("Wasser"))) { return EL_STR("Wasser"); } if (str_eq(noun, EL_STR("Bett"))) { return EL_STR("Betten"); } if (str_eq(noun, EL_STR("Auto"))) { return EL_STR("Autos"); } if (str_eq(noun, EL_STR("Kino"))) { return EL_STR("Kinos"); } if (str_eq(noun, EL_STR("Radio"))) { return EL_STR("Radios"); } if (str_eq(noun, EL_STR("Foto"))) { return EL_STR("Fotos"); } if (str_eq(noun, EL_STR("Cafe"))) { return EL_STR("Cafes"); } if (str_eq(noun, EL_STR("Zentrum"))) { return EL_STR("Zentren"); } if (str_eq(noun, EL_STR("Museum"))) { return EL_STR("Museen"); } if (str_eq(noun, EL_STR("Gymnasium"))) { return EL_STR("Gymnasien"); } if (str_eq(noun, EL_STR("Studium"))) { return EL_STR("Studien"); } if (str_eq(noun, EL_STR("Datum"))) { return EL_STR("Daten"); } if (str_ends_with(noun, EL_STR("chen"))) { return noun; } if (str_ends_with(noun, EL_STR("lein"))) { return noun; } if (str_ends_with(noun, EL_STR("um"))) { return el_str_concat(str_drop_last(noun, 2), EL_STR("en")); } if (str_ends_with(noun, EL_STR("a"))) { return el_str_concat(noun, EL_STR("s")); } if (str_ends_with(noun, EL_STR("o"))) { return el_str_concat(noun, EL_STR("s")); } if (str_ends_with(noun, EL_STR("i"))) { return el_str_concat(noun, EL_STR("s")); } if (str_ends_with(noun, EL_STR("u"))) { return el_str_concat(noun, EL_STR("s")); } if (str_ends_with(noun, EL_STR("y"))) { return el_str_concat(noun, EL_STR("s")); } if (str_eq(gender, EL_STR("f"))) { if (str_ends_with(noun, EL_STR("e"))) { return el_str_concat(noun, EL_STR("n")); } if (str_ends_with(noun, EL_STR("in"))) { return el_str_concat(noun, EL_STR("nen")); } return el_str_concat(noun, EL_STR("en")); } return el_str_concat(noun, EL_STR("e")); return 0; } el_val_t de_case_ending(el_val_t noun, el_val_t gender, el_val_t gram_case, el_val_t number) { if (str_eq(noun, EL_STR("Herr"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("Herr"); } return EL_STR("Herrn"); } return EL_STR("Herren"); } if (str_eq(noun, EL_STR("Mensch"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("Mensch"); } return EL_STR("Menschen"); } return EL_STR("Menschen"); } if (str_eq(noun, EL_STR("Student"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("Student"); } return EL_STR("Studenten"); } return EL_STR("Studenten"); } if (str_eq(noun, EL_STR("Kollege"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("Kollege"); } return EL_STR("Kollegen"); } return EL_STR("Kollegen"); } if (str_eq(noun, EL_STR("Name"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(gram_case, EL_STR("nom"))) { return EL_STR("Name"); } if (str_eq(gram_case, EL_STR("gen"))) { return EL_STR("Namens"); } return EL_STR("Namen"); } return EL_STR("Namen"); } if (str_eq(number, EL_STR("sg"))) { if (str_eq(gram_case, EL_STR("gen"))) { if (str_eq(gender, EL_STR("m"))) { if (str_ends_with(noun, EL_STR("s"))) { return el_str_concat(noun, EL_STR("es")); } if (str_ends_with(noun, EL_STR("x"))) { return el_str_concat(noun, EL_STR("es")); } if (str_ends_with(noun, EL_STR("z"))) { return el_str_concat(noun, EL_STR("es")); } if (str_ends_with(noun, EL_STR("sch"))) { return el_str_concat(noun, EL_STR("es")); } return el_str_concat(noun, EL_STR("s")); } if (str_eq(gender, EL_STR("n"))) { if (str_ends_with(noun, EL_STR("s"))) { return el_str_concat(noun, EL_STR("es")); } if (str_ends_with(noun, EL_STR("x"))) { return el_str_concat(noun, EL_STR("es")); } if (str_ends_with(noun, EL_STR("z"))) { return el_str_concat(noun, EL_STR("es")); } return el_str_concat(noun, EL_STR("s")); } } return noun; } if (str_eq(gram_case, EL_STR("dat"))) { el_val_t pl = de_noun_plural(noun, gender); if (str_ends_with(pl, EL_STR("n"))) { return pl; } if (str_ends_with(pl, EL_STR("s"))) { return pl; } return el_str_concat(pl, EL_STR("n")); } return de_noun_plural(noun, gender); return 0; } el_val_t de_conjugate_weak(el_val_t stem, el_val_t tense, el_val_t person, el_val_t number) { if (str_eq(tense, EL_STR("present"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return el_str_concat(stem, EL_STR("e")); } if (str_eq(person, EL_STR("2"))) { if (str_ends_with(stem, EL_STR("t"))) { return el_str_concat(stem, EL_STR("est")); } if (str_ends_with(stem, EL_STR("d"))) { return el_str_concat(stem, EL_STR("est")); } return el_str_concat(stem, EL_STR("st")); } if (str_ends_with(stem, EL_STR("t"))) { return el_str_concat(stem, EL_STR("et")); } if (str_ends_with(stem, EL_STR("d"))) { return el_str_concat(stem, EL_STR("et")); } return el_str_concat(stem, EL_STR("t")); } if (str_eq(person, EL_STR("1"))) { return el_str_concat(stem, EL_STR("en")); } if (str_eq(person, EL_STR("2"))) { if (str_ends_with(stem, EL_STR("t"))) { return el_str_concat(stem, EL_STR("et")); } if (str_ends_with(stem, EL_STR("d"))) { return el_str_concat(stem, EL_STR("et")); } return el_str_concat(stem, EL_STR("t")); } return el_str_concat(stem, EL_STR("en")); } if (str_eq(tense, EL_STR("past"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return el_str_concat(stem, EL_STR("te")); } if (str_eq(person, EL_STR("2"))) { return el_str_concat(stem, EL_STR("test")); } return el_str_concat(stem, EL_STR("te")); } if (str_eq(person, EL_STR("1"))) { return el_str_concat(stem, EL_STR("ten")); } if (str_eq(person, EL_STR("2"))) { return el_str_concat(stem, EL_STR("tet")); } return el_str_concat(stem, EL_STR("ten")); } return el_str_concat(stem, EL_STR("en")); return 0; } el_val_t de_irregular_present(el_val_t verb, el_val_t person, el_val_t number) { if (str_eq(verb, EL_STR("sein"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("bin"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("bist"); } return EL_STR("ist"); } if (str_eq(person, EL_STR("1"))) { return EL_STR("sind"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("seid"); } return EL_STR("sind"); } if (str_eq(verb, EL_STR("haben"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("habe"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("hast"); } return EL_STR("hat"); } if (str_eq(person, EL_STR("1"))) { return EL_STR("haben"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("habt"); } return EL_STR("haben"); } if (str_eq(verb, EL_STR("werden"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("werde"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("wirst"); } return EL_STR("wird"); } if (str_eq(person, EL_STR("1"))) { return EL_STR("werden"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("werdet"); } return EL_STR("werden"); } if (str_eq(verb, EL_STR("gehen"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("gehe"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("gehst"); } return EL_STR("geht"); } if (str_eq(person, EL_STR("1"))) { return EL_STR("gehen"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("geht"); } return EL_STR("gehen"); } if (str_eq(verb, EL_STR("kommen"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("komme"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("kommst"); } return EL_STR("kommt"); } if (str_eq(person, EL_STR("1"))) { return EL_STR("kommen"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("kommt"); } return EL_STR("kommen"); } if (str_eq(verb, EL_STR("sehen"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("sehe"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("siehst"); } return EL_STR("sieht"); } if (str_eq(person, EL_STR("1"))) { return EL_STR("sehen"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("seht"); } return EL_STR("sehen"); } if (str_eq(verb, EL_STR("essen"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("esse"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("isst"); } return EL_STR("isst"); } if (str_eq(person, EL_STR("1"))) { return EL_STR("essen"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("esst"); } return EL_STR("essen"); } if (str_eq(verb, EL_STR("geben"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("gebe"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("gibst"); } return EL_STR("gibt"); } if (str_eq(person, EL_STR("1"))) { return EL_STR("geben"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("gebt"); } return EL_STR("geben"); } if (str_eq(verb, EL_STR("nehmen"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("nehme"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("nimmst"); } return EL_STR("nimmt"); } if (str_eq(person, EL_STR("1"))) { return EL_STR("nehmen"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("nehmt"); } return EL_STR("nehmen"); } if (str_eq(verb, EL_STR("fahren"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("fahre"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("f\xc3\xa4hrst"); } return EL_STR("f\xc3\xa4hrt"); } if (str_eq(person, EL_STR("1"))) { return EL_STR("fahren"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("fahrt"); } return EL_STR("fahren"); } if (str_eq(verb, EL_STR("laufen"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("laufe"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("l\xc3\xa4ufst"); } return EL_STR("l\xc3\xa4uft"); } if (str_eq(person, EL_STR("1"))) { return EL_STR("laufen"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("lauft"); } return EL_STR("laufen"); } if (str_eq(verb, EL_STR("wissen"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("wei\xc3\x9f"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("wei\xc3\x9ft"); } return EL_STR("wei\xc3\x9f"); } if (str_eq(person, EL_STR("1"))) { return EL_STR("wissen"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("wisst"); } return EL_STR("wissen"); } if (str_eq(verb, EL_STR("k\xc3\xb6nnen"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("kann"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("kannst"); } return EL_STR("kann"); } if (str_eq(person, EL_STR("1"))) { return EL_STR("k\xc3\xb6nnen"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("k\xc3\xb6nnt"); } return EL_STR("k\xc3\xb6nnen"); } if (str_eq(verb, EL_STR("m\xc3\xbcssen"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("muss"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("musst"); } return EL_STR("muss"); } if (str_eq(person, EL_STR("1"))) { return EL_STR("m\xc3\xbcssen"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("m\xc3\xbcsst"); } return EL_STR("m\xc3\xbcssen"); } if (str_eq(verb, EL_STR("wollen"))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("will"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("willst"); } return EL_STR("will"); } if (str_eq(person, EL_STR("1"))) { return EL_STR("wollen"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("wollt"); } return EL_STR("wollen"); } return EL_STR(""); return 0; } el_val_t de_strong_past_stem(el_val_t verb) { if (str_eq(verb, EL_STR("gehen"))) { return EL_STR("ging"); } if (str_eq(verb, EL_STR("kommen"))) { return EL_STR("kam"); } if (str_eq(verb, EL_STR("sehen"))) { return EL_STR("sah"); } if (str_eq(verb, EL_STR("geben"))) { return EL_STR("gab"); } if (str_eq(verb, EL_STR("nehmen"))) { return EL_STR("nahm"); } if (str_eq(verb, EL_STR("fahren"))) { return EL_STR("fuhr"); } if (str_eq(verb, EL_STR("laufen"))) { return EL_STR("lief"); } if (str_eq(verb, EL_STR("schreiben"))) { return EL_STR("schrieb"); } if (str_eq(verb, EL_STR("bleiben"))) { return EL_STR("blieb"); } if (str_eq(verb, EL_STR("steigen"))) { return EL_STR("stieg"); } if (str_eq(verb, EL_STR("lesen"))) { return EL_STR("las"); } if (str_eq(verb, EL_STR("sprechen"))) { return EL_STR("sprach"); } if (str_eq(verb, EL_STR("treffen"))) { return EL_STR("traf"); } if (str_eq(verb, EL_STR("essen"))) { return EL_STR("a\xc3\x9f"); } if (str_eq(verb, EL_STR("trinken"))) { return EL_STR("trank"); } if (str_eq(verb, EL_STR("finden"))) { return EL_STR("fand"); } if (str_eq(verb, EL_STR("denken"))) { return EL_STR("dachte"); } if (str_eq(verb, EL_STR("bringen"))) { return EL_STR("brachte"); } if (str_eq(verb, EL_STR("stehen"))) { return EL_STR("stand"); } if (str_eq(verb, EL_STR("liegen"))) { return EL_STR("lag"); } if (str_eq(verb, EL_STR("sitzen"))) { return EL_STR("sa\xc3\x9f"); } if (str_eq(verb, EL_STR("fallen"))) { return EL_STR("fiel"); } if (str_eq(verb, EL_STR("halten"))) { return EL_STR("hielt"); } if (str_eq(verb, EL_STR("rufen"))) { return EL_STR("rief"); } if (str_eq(verb, EL_STR("tragen"))) { return EL_STR("trug"); } if (str_eq(verb, EL_STR("schlagen"))) { return EL_STR("schlug"); } if (str_eq(verb, EL_STR("ziehen"))) { return EL_STR("zog"); } if (str_eq(verb, EL_STR("wachsen"))) { return EL_STR("wuchs"); } if (str_eq(verb, EL_STR("helfen"))) { return EL_STR("half"); } if (str_eq(verb, EL_STR("werfen"))) { return EL_STR("warf"); } return EL_STR(""); return 0; } el_val_t de_norm_number(el_val_t number) { if (str_eq(number, EL_STR("singular"))) { return EL_STR("sg"); } if (str_eq(number, EL_STR("plural"))) { return EL_STR("pl"); } return number; return 0; } el_val_t de_norm_person(el_val_t person) { if (str_eq(person, EL_STR("first"))) { return EL_STR("1"); } if (str_eq(person, EL_STR("second"))) { return EL_STR("2"); } if (str_eq(person, EL_STR("third"))) { return EL_STR("3"); } return person; return 0; } el_val_t de_conjugate(el_val_t verb, el_val_t tense, el_val_t person, el_val_t number) { number = de_norm_number(number); person = de_norm_person(person); if (str_eq(tense, EL_STR("future"))) { el_val_t aux = de_irregular_present(EL_STR("werden"), person, number); return el_str_concat(el_str_concat(aux, EL_STR(" ")), verb); } if (str_eq(verb, EL_STR("sein"))) { if (str_eq(tense, EL_STR("present"))) { return de_irregular_present(EL_STR("sein"), person, number); } if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("war"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("warst"); } return EL_STR("war"); } if (str_eq(person, EL_STR("1"))) { return EL_STR("waren"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("wart"); } return EL_STR("waren"); } if (str_eq(verb, EL_STR("haben"))) { if (str_eq(tense, EL_STR("present"))) { return de_irregular_present(EL_STR("haben"), person, number); } if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("hatte"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("hattest"); } return EL_STR("hatte"); } if (str_eq(person, EL_STR("1"))) { return EL_STR("hatten"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("hattet"); } return EL_STR("hatten"); } if (str_eq(verb, EL_STR("wissen"))) { if (str_eq(tense, EL_STR("present"))) { return de_irregular_present(EL_STR("wissen"), person, number); } if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("wusste"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("wusstest"); } return EL_STR("wusste"); } if (str_eq(person, EL_STR("1"))) { return EL_STR("wussten"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("wusstet"); } return EL_STR("wussten"); } if (str_eq(verb, EL_STR("k\xc3\xb6nnen"))) { if (str_eq(tense, EL_STR("present"))) { return de_irregular_present(EL_STR("k\xc3\xb6nnen"), person, number); } return de_conjugate_weak(EL_STR("konnt"), EL_STR("past"), person, number); } if (str_eq(verb, EL_STR("m\xc3\xbcssen"))) { if (str_eq(tense, EL_STR("present"))) { return de_irregular_present(EL_STR("m\xc3\xbcssen"), person, number); } return de_conjugate_weak(EL_STR("musst"), EL_STR("past"), person, number); } if (str_eq(verb, EL_STR("wollen"))) { if (str_eq(tense, EL_STR("present"))) { return de_irregular_present(EL_STR("wollen"), person, number); } return de_conjugate_weak(EL_STR("wollt"), EL_STR("past"), person, number); } if (str_eq(tense, EL_STR("present"))) { el_val_t irr = de_irregular_present(verb, person, number); if (!str_eq(irr, EL_STR(""))) { return irr; } el_val_t stem = str_drop_last(verb, 2); return de_conjugate_weak(stem, EL_STR("present"), person, number); } if (str_eq(tense, EL_STR("past"))) { el_val_t ps = de_strong_past_stem(verb); if (!str_eq(ps, EL_STR(""))) { if (str_eq(number, EL_STR("sg"))) { if (str_eq(person, EL_STR("1"))) { return ps; } if (str_eq(person, EL_STR("2"))) { return el_str_concat(ps, EL_STR("st")); } return ps; } if (str_eq(person, EL_STR("1"))) { return el_str_concat(ps, EL_STR("en")); } if (str_eq(person, EL_STR("2"))) { return el_str_concat(ps, EL_STR("t")); } return el_str_concat(ps, EL_STR("en")); } el_val_t stem = str_drop_last(verb, 2); return de_conjugate_weak(stem, EL_STR("past"), person, number); } return verb; return 0; }