#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 sw_str_ends(el_val_t s, el_val_t suf); el_val_t sw_str_drop_last(el_val_t s, el_val_t n); el_val_t sw_str_first_char(el_val_t s); el_val_t sw_str_first2(el_val_t s); el_val_t sw_str_first3(el_val_t s); el_val_t sw_str_last_char(el_val_t s); el_val_t sw_is_class1_noun(el_val_t noun); el_val_t sw_noun_class(el_val_t noun); el_val_t sw_subj_prefix(el_val_t person, el_val_t number, el_val_t noun_class); el_val_t sw_obj_prefix(el_val_t person, el_val_t number, el_val_t noun_class); el_val_t sw_tense_marker(el_val_t tense); el_val_t sw_verb_final(el_val_t tense, el_val_t negative); el_val_t sw_neg_subj_prefix(el_val_t person, el_val_t number, el_val_t noun_class); el_val_t sw_verb_stem(el_val_t infinitive); el_val_t sw_conjugate(el_val_t verb_stem, el_val_t person, el_val_t number, el_val_t noun_class, el_val_t tense); el_val_t sw_negative(el_val_t verb_stem, el_val_t person, el_val_t number, el_val_t noun_class, el_val_t tense); el_val_t sw_noun_plural(el_val_t noun); el_val_t sw_adj_prefix(el_val_t noun_class, el_val_t number); el_val_t sw_agree_adj(el_val_t adj_stem, el_val_t noun_class, el_val_t number); el_val_t sw_demonstrative(el_val_t noun_class, el_val_t number, el_val_t proximity); el_val_t sw_copula_present(el_val_t person, el_val_t number, el_val_t use_case); el_val_t sw_copula_neg_present(el_val_t person, el_val_t number); el_val_t sw_str_ends(el_val_t s, el_val_t suf) { return str_ends_with(s, suf); return 0; } el_val_t sw_str_drop_last(el_val_t s, el_val_t n) { el_val_t len = str_len(s); if (n >= len) { return EL_STR(""); } return str_slice(s, 0, (len - n)); return 0; } el_val_t sw_str_first_char(el_val_t s) { el_val_t n = str_len(s); if (n == 0) { return EL_STR(""); } return str_slice(s, 0, 1); return 0; } el_val_t sw_str_first2(el_val_t s) { el_val_t n = str_len(s); if (n < 2) { return s; } return str_slice(s, 0, 2); return 0; } el_val_t sw_str_first3(el_val_t s) { el_val_t n = str_len(s); if (n < 3) { return s; } return str_slice(s, 0, 3); return 0; } el_val_t sw_str_last_char(el_val_t s) { el_val_t n = str_len(s); if (n == 0) { return EL_STR(""); } return str_slice(s, (n - 1), n); return 0; } el_val_t sw_is_class1_noun(el_val_t noun) { if (str_eq(noun, EL_STR("mtu"))) { return 1; } if (str_eq(noun, EL_STR("mwanafunzi"))) { return 1; } if (str_eq(noun, EL_STR("mwalimu"))) { return 1; } if (str_eq(noun, EL_STR("mke"))) { return 1; } if (str_eq(noun, EL_STR("mume"))) { return 1; } if (str_eq(noun, EL_STR("mtoto"))) { return 1; } if (str_eq(noun, EL_STR("mgeni"))) { return 1; } if (str_eq(noun, EL_STR("mwana"))) { return 1; } if (str_eq(noun, EL_STR("mkubwa"))) { return 1; } if (str_eq(noun, EL_STR("mdogo"))) { return 1; } if (str_eq(noun, EL_STR("mgonjwa"))) { return 1; } if (str_eq(noun, EL_STR("mfanyakazi"))) { return 1; } if (str_eq(noun, EL_STR("mkulima"))) { return 1; } if (str_eq(noun, EL_STR("mwimbaji"))) { return 1; } if (str_eq(noun, EL_STR("msomaji"))) { return 1; } if (str_eq(noun, EL_STR("mwandishi"))) { return 1; } if (str_eq(noun, EL_STR("mpiganaji"))) { return 1; } if (str_eq(noun, EL_STR("msaidizi"))) { return 1; } if (str_eq(noun, EL_STR("mpishi"))) { return 1; } if (str_eq(noun, EL_STR("mwanasheria"))) { return 1; } if (str_eq(noun, EL_STR("daktari"))) { return 1; } if (str_eq(noun, EL_STR("rafiki"))) { return 1; } if (str_eq(noun, EL_STR("ndugu"))) { return 1; } return 0; return 0; } el_val_t sw_noun_class(el_val_t noun) { if (sw_str_ends(noun, EL_STR("ku"))) { if (str_eq(sw_str_first2(noun), EL_STR("ku"))) { return EL_STR("15"); } } if (str_eq(sw_str_first2(noun), EL_STR("ku"))) { return EL_STR("15"); } el_val_t p2 = sw_str_first2(noun); if (str_eq(p2, EL_STR("ku"))) { return EL_STR("15"); } el_val_t p3 = sw_str_first3(noun); if (str_eq(p3, EL_STR("ki-"))) { return EL_STR("7"); } if (str_eq(p2, EL_STR("ki"))) { return EL_STR("7"); } if (str_eq(p2, EL_STR("ch"))) { return EL_STR("7"); } el_val_t p1 = sw_str_first_char(noun); if (str_eq(p1, EL_STR("u"))) { return EL_STR("11"); } if (str_eq(p1, EL_STR("w"))) { return EL_STR("11"); } if (str_eq(p2, EL_STR("ji"))) { return EL_STR("5"); } if (str_eq(noun, EL_STR("jicho"))) { return EL_STR("5"); } if (str_eq(noun, EL_STR("jino"))) { return EL_STR("5"); } if (str_eq(noun, EL_STR("bega"))) { return EL_STR("5"); } if (str_eq(noun, EL_STR("tunda"))) { return EL_STR("5"); } if (str_eq(noun, EL_STR("embe"))) { return EL_STR("5"); } if (str_eq(noun, EL_STR("gari"))) { return EL_STR("5"); } if (str_eq(noun, EL_STR("bei"))) { return EL_STR("5"); } if (str_eq(noun, EL_STR("sauti"))) { return EL_STR("5"); } if (str_eq(noun, EL_STR("thamani"))) { return EL_STR("5"); } if (str_eq(p1, EL_STR("m"))) { if (sw_is_class1_noun(noun)) { return EL_STR("1"); } return EL_STR("3"); } if (str_eq(p2, EL_STR("mw"))) { if (sw_is_class1_noun(noun)) { return EL_STR("1"); } return EL_STR("3"); } if (str_eq(p2, EL_STR("ny"))) { return EL_STR("9"); } if (str_eq(p2, EL_STR("ng"))) { return EL_STR("9"); } if (str_eq(p2, EL_STR("mb"))) { return EL_STR("9"); } if (str_eq(p2, EL_STR("nd"))) { return EL_STR("9"); } if (str_eq(p2, EL_STR("nj"))) { return EL_STR("9"); } if (str_eq(p2, EL_STR("nz"))) { return EL_STR("9"); } if (str_eq(p1, EL_STR("n"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("paka"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("mbwa"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("simba"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("tembo"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("nyoka"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("samaki"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("rafiki"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("daktari"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("serikali"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("hospitali"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("shule"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("kanisa"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("ofisi"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("picha"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("sehemu"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("habari"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("nchi"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("bahari"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("dunia"))) { return EL_STR("9"); } if (str_eq(noun, EL_STR("ardhi"))) { return EL_STR("9"); } return EL_STR("9"); return 0; } el_val_t sw_subj_prefix(el_val_t person, el_val_t number, el_val_t noun_class) { if (str_eq(person, EL_STR("1"))) { if (str_eq(number, EL_STR("sg"))) { return EL_STR("ni"); } return EL_STR("tu"); } if (str_eq(person, EL_STR("2"))) { if (str_eq(number, EL_STR("sg"))) { return EL_STR("u"); } return EL_STR("m"); } if (str_eq(number, EL_STR("pl"))) { if (str_eq(noun_class, EL_STR("1"))) { return EL_STR("wa"); } if (str_eq(noun_class, EL_STR("2"))) { return EL_STR("wa"); } if (str_eq(noun_class, EL_STR("3"))) { return EL_STR("i"); } if (str_eq(noun_class, EL_STR("4"))) { return EL_STR("i"); } if (str_eq(noun_class, EL_STR("5"))) { return EL_STR("ya"); } if (str_eq(noun_class, EL_STR("6"))) { return EL_STR("ya"); } if (str_eq(noun_class, EL_STR("7"))) { return EL_STR("vi"); } if (str_eq(noun_class, EL_STR("8"))) { return EL_STR("vi"); } if (str_eq(noun_class, EL_STR("9"))) { return EL_STR("zi"); } if (str_eq(noun_class, EL_STR("10"))) { return EL_STR("zi"); } if (str_eq(noun_class, EL_STR("11"))) { return EL_STR("zi"); } return EL_STR("zi"); } if (str_eq(noun_class, EL_STR("1"))) { return EL_STR("a"); } if (str_eq(noun_class, EL_STR("3"))) { return EL_STR("u"); } if (str_eq(noun_class, EL_STR("4"))) { return EL_STR("i"); } if (str_eq(noun_class, EL_STR("5"))) { return EL_STR("li"); } if (str_eq(noun_class, EL_STR("6"))) { return EL_STR("ya"); } if (str_eq(noun_class, EL_STR("7"))) { return EL_STR("ki"); } if (str_eq(noun_class, EL_STR("8"))) { return EL_STR("vi"); } if (str_eq(noun_class, EL_STR("9"))) { return EL_STR("i"); } if (str_eq(noun_class, EL_STR("10"))) { return EL_STR("zi"); } if (str_eq(noun_class, EL_STR("11"))) { return EL_STR("u"); } if (str_eq(noun_class, EL_STR("15"))) { return EL_STR("ku"); } return EL_STR("a"); return 0; } el_val_t sw_obj_prefix(el_val_t person, el_val_t number, el_val_t noun_class) { if (str_eq(person, EL_STR("1"))) { if (str_eq(number, EL_STR("sg"))) { return EL_STR("ni"); } return EL_STR("tu"); } if (str_eq(person, EL_STR("2"))) { if (str_eq(number, EL_STR("sg"))) { return EL_STR("ku"); } return EL_STR("wa"); } if (str_eq(number, EL_STR("pl"))) { if (str_eq(noun_class, EL_STR("1"))) { return EL_STR("wa"); } if (str_eq(noun_class, EL_STR("2"))) { return EL_STR("wa"); } if (str_eq(noun_class, EL_STR("3"))) { return EL_STR("i"); } if (str_eq(noun_class, EL_STR("4"))) { return EL_STR("i"); } if (str_eq(noun_class, EL_STR("5"))) { return EL_STR("ya"); } if (str_eq(noun_class, EL_STR("6"))) { return EL_STR("ya"); } if (str_eq(noun_class, EL_STR("7"))) { return EL_STR("vi"); } if (str_eq(noun_class, EL_STR("8"))) { return EL_STR("vi"); } if (str_eq(noun_class, EL_STR("9"))) { return EL_STR("zi"); } if (str_eq(noun_class, EL_STR("10"))) { return EL_STR("zi"); } return EL_STR("wa"); } if (str_eq(noun_class, EL_STR("1"))) { return EL_STR("m"); } if (str_eq(noun_class, EL_STR("3"))) { return EL_STR("u"); } if (str_eq(noun_class, EL_STR("5"))) { return EL_STR("li"); } if (str_eq(noun_class, EL_STR("7"))) { return EL_STR("ki"); } if (str_eq(noun_class, EL_STR("9"))) { return EL_STR("i"); } if (str_eq(noun_class, EL_STR("11"))) { return EL_STR("u"); } if (str_eq(noun_class, EL_STR("15"))) { return EL_STR("ku"); } return EL_STR("m"); return 0; } el_val_t sw_tense_marker(el_val_t tense) { if (str_eq(tense, EL_STR("present"))) { return EL_STR("a"); } if (str_eq(tense, EL_STR("progressive"))) { return EL_STR("na"); } if (str_eq(tense, EL_STR("past"))) { return EL_STR("li"); } if (str_eq(tense, EL_STR("future"))) { return EL_STR("ta"); } if (str_eq(tense, EL_STR("perfect"))) { return EL_STR("me"); } if (str_eq(tense, EL_STR("subjunctive"))) { return EL_STR(""); } if (str_eq(tense, EL_STR("remote_past"))) { return EL_STR("li"); } return EL_STR("na"); return 0; } el_val_t sw_verb_final(el_val_t tense, el_val_t negative) { if (negative) { if (str_eq(tense, EL_STR("present"))) { return EL_STR("i"); } if (str_eq(tense, EL_STR("progressive"))) { return EL_STR("i"); } if (str_eq(tense, EL_STR("subjunctive"))) { return EL_STR("e"); } return EL_STR("a"); } if (str_eq(tense, EL_STR("subjunctive"))) { return EL_STR("e"); } return EL_STR("a"); return 0; } el_val_t sw_neg_subj_prefix(el_val_t person, el_val_t number, el_val_t noun_class) { if (str_eq(person, EL_STR("1"))) { if (str_eq(number, EL_STR("sg"))) { return EL_STR("si"); } return EL_STR("hatu"); } if (str_eq(person, EL_STR("2"))) { if (str_eq(number, EL_STR("sg"))) { return EL_STR("hu"); } return EL_STR("ham"); } el_val_t pos = sw_subj_prefix(person, number, noun_class); return el_str_concat(EL_STR("ha"), pos); return 0; } el_val_t sw_verb_stem(el_val_t infinitive) { if (str_eq(infinitive, EL_STR("kula"))) { return EL_STR("l"); } if (str_eq(infinitive, EL_STR("kuwa"))) { return EL_STR("wa"); } if (str_eq(infinitive, EL_STR("kwenda"))) { return EL_STR("enda"); } if (str_eq(infinitive, EL_STR("kuja"))) { return EL_STR("ja"); } if (str_eq(infinitive, EL_STR("kusoma"))) { return EL_STR("soma"); } if (str_eq(infinitive, EL_STR("kusema"))) { return EL_STR("sema"); } if (str_eq(infinitive, EL_STR("kuona"))) { return EL_STR("ona"); } if (str_eq(infinitive, EL_STR("kufanya"))) { return EL_STR("fanya"); } if (str_eq(infinitive, EL_STR("kutaka"))) { return EL_STR("taka"); } if (str_eq(infinitive, EL_STR("kujua"))) { return EL_STR("jua"); } if (str_eq(infinitive, EL_STR("kupata"))) { return EL_STR("pata"); } if (str_eq(infinitive, EL_STR("kuambia"))) { return EL_STR("ambia"); } if (str_eq(infinitive, EL_STR("kuleta"))) { return EL_STR("leta"); } if (str_eq(infinitive, EL_STR("kuweka"))) { return EL_STR("weka"); } if (str_eq(infinitive, EL_STR("kuingia"))) { return EL_STR("ingia"); } if (str_eq(infinitive, EL_STR("kutoka"))) { return EL_STR("toka"); } if (str_eq(infinitive, EL_STR("kupiga"))) { return EL_STR("piga"); } if (str_eq(infinitive, EL_STR("kuimba"))) { return EL_STR("imba"); } if (str_eq(infinitive, EL_STR("kucheza"))) { return EL_STR("cheza"); } if (str_eq(infinitive, EL_STR("kulala"))) { return EL_STR("lala"); } if (str_eq(infinitive, EL_STR("kuandika"))) { return EL_STR("andika"); } if (str_eq(infinitive, EL_STR("kununua"))) { return EL_STR("nunua"); } if (str_eq(infinitive, EL_STR("kuuza"))) { return EL_STR("uza"); } if (str_eq(infinitive, EL_STR("kupenda"))) { return EL_STR("penda"); } if (str_eq(infinitive, EL_STR("kuchukua"))) { return EL_STR("chukua"); } if (str_eq(infinitive, EL_STR("kulipa"))) { return EL_STR("lipa"); } if (str_eq(infinitive, EL_STR("kusikia"))) { return EL_STR("sikia"); } if (str_eq(infinitive, EL_STR("kuamka"))) { return EL_STR("amka"); } if (str_eq(infinitive, EL_STR("kukaa"))) { return EL_STR("kaa"); } if (str_eq(infinitive, EL_STR("kurudi"))) { return EL_STR("rudi"); } if (str_eq(infinitive, EL_STR("kushinda"))) { return EL_STR("shinda"); } if (str_eq(infinitive, EL_STR("kusaidia"))) { return EL_STR("saidia"); } if (str_eq(infinitive, EL_STR("kuzungumza"))) { return EL_STR("zungumza"); } if (str_eq(infinitive, EL_STR("kupumzika"))) { return EL_STR("pumzika"); } if (str_eq(infinitive, EL_STR("kufika"))) { return EL_STR("fika"); } if (str_eq(infinitive, EL_STR("kuomba"))) { return EL_STR("omba"); } if (str_eq(infinitive, EL_STR("kushukuru"))) { return EL_STR("shukuru"); } if (str_eq(sw_str_first2(infinitive), EL_STR("ku"))) { return str_slice(infinitive, 2, str_len(infinitive)); } if (str_eq(sw_str_first2(infinitive), EL_STR("kw"))) { return str_slice(infinitive, 2, str_len(infinitive)); } return infinitive; return 0; } el_val_t sw_conjugate(el_val_t verb_stem, el_val_t person, el_val_t number, el_val_t noun_class, el_val_t tense) { el_val_t subj = sw_subj_prefix(person, number, noun_class); el_val_t tm = sw_tense_marker(tense); el_val_t fv = sw_verb_final(tense, 0); if (str_eq(verb_stem, EL_STR("l"))) { if (str_eq(tm, EL_STR(""))) { return el_str_concat(subj, EL_STR("kula")); } return el_str_concat(el_str_concat(subj, tm), EL_STR("kula")); } if (str_eq(verb_stem, EL_STR("wa"))) { if (str_eq(tense, EL_STR("present"))) { if (str_eq(person, EL_STR("1"))) { if (str_eq(number, EL_STR("sg"))) { return EL_STR("ni"); } return EL_STR("tu ni"); } if (str_eq(person, EL_STR("2"))) { if (str_eq(number, EL_STR("sg"))) { return EL_STR("u"); } return EL_STR("m ni"); } if (str_eq(number, EL_STR("sg"))) { if (str_eq(noun_class, EL_STR("1"))) { return EL_STR("yuko"); } if (str_eq(noun_class, EL_STR("3"))) { return EL_STR("upo"); } if (str_eq(noun_class, EL_STR("5"))) { return EL_STR("lipo"); } if (str_eq(noun_class, EL_STR("7"))) { return EL_STR("kipo"); } if (str_eq(noun_class, EL_STR("9"))) { return EL_STR("ipo"); } if (str_eq(noun_class, EL_STR("11"))) { return EL_STR("upo"); } return EL_STR("yuko"); } if (str_eq(noun_class, EL_STR("1"))) { return EL_STR("wako"); } if (str_eq(noun_class, EL_STR("3"))) { return EL_STR("ipo"); } if (str_eq(noun_class, EL_STR("5"))) { return EL_STR("yapo"); } if (str_eq(noun_class, EL_STR("7"))) { return EL_STR("vipo"); } if (str_eq(noun_class, EL_STR("9"))) { return EL_STR("zipo"); } return EL_STR("wako"); } if (str_eq(tense, EL_STR("progressive"))) { if (str_eq(person, EL_STR("1"))) { if (str_eq(number, EL_STR("sg"))) { return EL_STR("niko"); } return EL_STR("tuko"); } if (str_eq(person, EL_STR("2"))) { if (str_eq(number, EL_STR("sg"))) { return EL_STR("uko"); } return EL_STR("mko"); } if (str_eq(number, EL_STR("sg"))) { if (str_eq(noun_class, EL_STR("1"))) { return EL_STR("yuko"); } return el_str_concat(subj, EL_STR("ko")); } if (str_eq(noun_class, EL_STR("1"))) { return EL_STR("wako"); } return el_str_concat(subj, EL_STR("ko")); } } el_val_t stem_final = sw_str_last_char(verb_stem); if (str_eq(fv, EL_STR("a"))) { if (str_eq(stem_final, EL_STR("a"))) { if (str_eq(tm, EL_STR(""))) { return el_str_concat(subj, verb_stem); } return el_str_concat(el_str_concat(subj, tm), verb_stem); } } if (str_eq(tm, EL_STR(""))) { return el_str_concat(el_str_concat(subj, verb_stem), fv); } return el_str_concat(el_str_concat(el_str_concat(subj, tm), verb_stem), fv); return 0; } el_val_t sw_negative(el_val_t verb_stem, el_val_t person, el_val_t number, el_val_t noun_class, el_val_t tense) { el_val_t neg_subj = sw_neg_subj_prefix(person, number, noun_class); if (str_eq(verb_stem, EL_STR("l"))) { if (str_eq(tense, EL_STR("past"))) { return el_str_concat(neg_subj, EL_STR("kukula")); } if (str_eq(tense, EL_STR("perfect"))) { return el_str_concat(neg_subj, EL_STR("jakula")); } return el_str_concat(neg_subj, EL_STR("kuli")); } if (str_eq(tense, EL_STR("present"))) { el_val_t fv = sw_verb_final(EL_STR("present"), 1); el_val_t stem_no_a = verb_stem; el_val_t slen = str_len(verb_stem); if (slen > 0) { el_val_t last = sw_str_last_char(verb_stem); if (str_eq(last, EL_STR("a"))) { return el_str_concat(el_str_concat(neg_subj, sw_str_drop_last(verb_stem, 1)), fv); } } return el_str_concat(el_str_concat(neg_subj, verb_stem), fv); } if (str_eq(tense, EL_STR("past"))) { return el_str_concat(el_str_concat(el_str_concat(neg_subj, EL_STR("ku")), verb_stem), EL_STR("a")); } if (str_eq(tense, EL_STR("future"))) { el_val_t fv = sw_verb_final(EL_STR("present"), 1); return el_str_concat(el_str_concat(el_str_concat(neg_subj, EL_STR("ta")), verb_stem), fv); } if (str_eq(tense, EL_STR("perfect"))) { return el_str_concat(el_str_concat(el_str_concat(neg_subj, EL_STR("ja")), verb_stem), EL_STR("a")); } if (str_eq(tense, EL_STR("progressive"))) { el_val_t fv = sw_verb_final(EL_STR("present"), 1); el_val_t slen = str_len(verb_stem); if (slen > 0) { el_val_t last = sw_str_last_char(verb_stem); if (str_eq(last, EL_STR("a"))) { return el_str_concat(el_str_concat(neg_subj, sw_str_drop_last(verb_stem, 1)), fv); } } return el_str_concat(el_str_concat(neg_subj, verb_stem), fv); } return el_str_concat(el_str_concat(neg_subj, verb_stem), EL_STR("i")); return 0; } el_val_t sw_noun_plural(el_val_t noun) { if (str_eq(noun, EL_STR("mtu"))) { return EL_STR("watu"); } if (str_eq(noun, EL_STR("mtoto"))) { return EL_STR("watoto"); } if (str_eq(noun, EL_STR("mke"))) { return EL_STR("wake"); } if (str_eq(noun, EL_STR("mume"))) { return EL_STR("waume"); } if (str_eq(noun, EL_STR("mwana"))) { return EL_STR("wana"); } if (str_eq(noun, EL_STR("mwalimu"))) { return EL_STR("walimu"); } if (str_eq(noun, EL_STR("mgeni"))) { return EL_STR("wageni"); } if (str_eq(noun, EL_STR("mwanafunzi"))) { return EL_STR("wanafunzi"); } if (str_eq(noun, EL_STR("mfanyakazi"))) { return EL_STR("wafanyakazi"); } if (str_eq(noun, EL_STR("mkulima"))) { return EL_STR("wakulima"); } if (str_eq(noun, EL_STR("mgonjwa"))) { return EL_STR("wagonjwa"); } if (str_eq(noun, EL_STR("jicho"))) { return EL_STR("macho"); } if (str_eq(noun, EL_STR("jino"))) { return EL_STR("meno"); } if (str_eq(noun, EL_STR("bega"))) { return EL_STR("mabega"); } if (str_eq(noun, EL_STR("tunda"))) { return EL_STR("matunda"); } if (str_eq(noun, EL_STR("gari"))) { return EL_STR("magari"); } if (str_eq(noun, EL_STR("embe"))) { return EL_STR("maembe"); } if (str_eq(noun, EL_STR("wimbo"))) { return EL_STR("nyimbo"); } if (str_eq(noun, EL_STR("ubao"))) { return EL_STR("mbao"); } if (str_eq(noun, EL_STR("ugonjwa"))) { return EL_STR("magonjwa"); } if (str_eq(noun, EL_STR("uso"))) { return EL_STR("nyuso"); } if (str_eq(noun, EL_STR("ukuta"))) { return EL_STR("kuta"); } if (str_eq(noun, EL_STR("ulimi"))) { return EL_STR("ndimi"); } if (str_eq(noun, EL_STR("upande"))) { return EL_STR("pande"); } if (str_eq(noun, EL_STR("uwezo"))) { return EL_STR("nguvu"); } if (str_eq(noun, EL_STR("paka"))) { return EL_STR("paka"); } if (str_eq(noun, EL_STR("samaki"))) { return EL_STR("samaki"); } if (str_eq(noun, EL_STR("rafiki"))) { return EL_STR("rafiki"); } if (str_eq(noun, EL_STR("daktari"))) { return EL_STR("madaktari"); } if (str_eq(noun, EL_STR("habari"))) { return EL_STR("habari"); } if (str_eq(noun, EL_STR("nchi"))) { return EL_STR("nchi"); } if (str_eq(noun, EL_STR("bahari"))) { return EL_STR("bahari"); } if (str_eq(noun, EL_STR("shule"))) { return EL_STR("shule"); } if (str_eq(noun, EL_STR("hospitali"))) { return EL_STR("hospitali"); } if (str_eq(noun, EL_STR("ofisi"))) { return EL_STR("ofisi"); } if (str_eq(noun, EL_STR("serikali"))) { return EL_STR("serikali"); } if (sw_is_class1_noun(noun)) { if (str_eq(sw_str_first2(noun), EL_STR("mw"))) { return el_str_concat(EL_STR("wa"), str_slice(noun, 2, str_len(noun))); } if (str_eq(sw_str_first_char(noun), EL_STR("m"))) { return el_str_concat(EL_STR("wa"), str_slice(noun, 1, str_len(noun))); } } el_val_t p2 = sw_str_first2(noun); if (str_eq(p2, EL_STR("ki"))) { return el_str_concat(EL_STR("vi"), str_slice(noun, 2, str_len(noun))); } if (str_eq(p2, EL_STR("ch"))) { return el_str_concat(EL_STR("vy"), str_slice(noun, 2, str_len(noun))); } if (str_eq(p2, EL_STR("ji"))) { return el_str_concat(EL_STR("ma"), str_slice(noun, 2, str_len(noun))); } el_val_t p1 = sw_str_first_char(noun); if (str_eq(p1, EL_STR("u"))) { return str_slice(noun, 1, str_len(noun)); } if (str_eq(p1, EL_STR("m"))) { if (str_eq(p2, EL_STR("mw"))) { return el_str_concat(EL_STR("mi"), str_slice(noun, 2, str_len(noun))); } return el_str_concat(EL_STR("mi"), str_slice(noun, 1, str_len(noun))); } return noun; return 0; } el_val_t sw_adj_prefix(el_val_t noun_class, el_val_t number) { if (str_eq(number, EL_STR("pl"))) { if (str_eq(noun_class, EL_STR("1"))) { return EL_STR("wa"); } if (str_eq(noun_class, EL_STR("2"))) { return EL_STR("wa"); } if (str_eq(noun_class, EL_STR("3"))) { return EL_STR("mi"); } if (str_eq(noun_class, EL_STR("4"))) { return EL_STR("mi"); } if (str_eq(noun_class, EL_STR("5"))) { return EL_STR("ma"); } if (str_eq(noun_class, EL_STR("6"))) { return EL_STR("ma"); } if (str_eq(noun_class, EL_STR("7"))) { return EL_STR("vi"); } if (str_eq(noun_class, EL_STR("8"))) { return EL_STR("vi"); } if (str_eq(noun_class, EL_STR("9"))) { return EL_STR("n"); } if (str_eq(noun_class, EL_STR("10"))) { return EL_STR("n"); } if (str_eq(noun_class, EL_STR("11"))) { return EL_STR("n"); } return EL_STR("wa"); } if (str_eq(noun_class, EL_STR("1"))) { return EL_STR("m"); } if (str_eq(noun_class, EL_STR("3"))) { return EL_STR("m"); } if (str_eq(noun_class, EL_STR("4"))) { return EL_STR("mi"); } if (str_eq(noun_class, EL_STR("5"))) { return EL_STR("j"); } if (str_eq(noun_class, EL_STR("6"))) { return EL_STR("ma"); } if (str_eq(noun_class, EL_STR("7"))) { return EL_STR("ki"); } if (str_eq(noun_class, EL_STR("8"))) { return EL_STR("vi"); } if (str_eq(noun_class, EL_STR("9"))) { return EL_STR("n"); } if (str_eq(noun_class, EL_STR("10"))) { return EL_STR("n"); } if (str_eq(noun_class, EL_STR("11"))) { return EL_STR("mw"); } if (str_eq(noun_class, EL_STR("15"))) { return EL_STR("ku"); } return EL_STR(""); return 0; } el_val_t sw_agree_adj(el_val_t adj_stem, el_val_t noun_class, el_val_t number) { if (str_eq(adj_stem, EL_STR("nzuri"))) { return EL_STR("nzuri"); } if (str_eq(adj_stem, EL_STR("baya"))) { return EL_STR("baya"); } if (str_eq(adj_stem, EL_STR("safi"))) { return EL_STR("safi"); } if (str_eq(adj_stem, EL_STR("chafu"))) { return EL_STR("chafu"); } if (str_eq(adj_stem, EL_STR("ghali"))) { return EL_STR("ghali"); } if (str_eq(adj_stem, EL_STR("rahisi"))) { return EL_STR("rahisi"); } if (str_eq(adj_stem, EL_STR("mzuri"))) { return el_str_concat(sw_adj_prefix(noun_class, number), EL_STR("zuri")); } el_val_t prefix = sw_adj_prefix(noun_class, number); if (str_eq(prefix, EL_STR(""))) { return adj_stem; } if (str_eq(prefix, EL_STR("m"))) { el_val_t first = sw_str_first_char(adj_stem); if (str_eq(first, EL_STR("a"))) { return el_str_concat(EL_STR("mw"), adj_stem); } if (str_eq(first, EL_STR("e"))) { return el_str_concat(EL_STR("mw"), adj_stem); } if (str_eq(first, EL_STR("i"))) { return el_str_concat(EL_STR("mw"), adj_stem); } if (str_eq(first, EL_STR("o"))) { return el_str_concat(EL_STR("mw"), adj_stem); } if (str_eq(first, EL_STR("u"))) { return el_str_concat(EL_STR("mw"), adj_stem); } return el_str_concat(EL_STR("m"), adj_stem); } if (str_eq(prefix, EL_STR("j"))) { el_val_t first = sw_str_first_char(adj_stem); if (str_eq(first, EL_STR("a"))) { return el_str_concat(EL_STR("j"), adj_stem); } if (str_eq(first, EL_STR("e"))) { return el_str_concat(EL_STR("j"), adj_stem); } if (str_eq(first, EL_STR("i"))) { return el_str_concat(EL_STR("j"), adj_stem); } if (str_eq(first, EL_STR("o"))) { return el_str_concat(EL_STR("j"), adj_stem); } if (str_eq(first, EL_STR("u"))) { return el_str_concat(EL_STR("j"), adj_stem); } return el_str_concat(EL_STR("l"), adj_stem); } return el_str_concat(prefix, adj_stem); return 0; } el_val_t sw_demonstrative(el_val_t noun_class, el_val_t number, el_val_t proximity) { if (str_eq(proximity, EL_STR("near"))) { if (str_eq(number, EL_STR("pl"))) { if (str_eq(noun_class, EL_STR("1"))) { return EL_STR("hawa"); } if (str_eq(noun_class, EL_STR("3"))) { return EL_STR("hii"); } if (str_eq(noun_class, EL_STR("5"))) { return EL_STR("haya"); } if (str_eq(noun_class, EL_STR("7"))) { return EL_STR("hivi"); } if (str_eq(noun_class, EL_STR("9"))) { return EL_STR("hizi"); } return EL_STR("hawa"); } if (str_eq(noun_class, EL_STR("1"))) { return EL_STR("huyu"); } if (str_eq(noun_class, EL_STR("3"))) { return EL_STR("huu"); } if (str_eq(noun_class, EL_STR("5"))) { return EL_STR("hili"); } if (str_eq(noun_class, EL_STR("7"))) { return EL_STR("hiki"); } if (str_eq(noun_class, EL_STR("9"))) { return EL_STR("hii"); } if (str_eq(noun_class, EL_STR("11"))) { return EL_STR("huu"); } if (str_eq(noun_class, EL_STR("15"))) { return EL_STR("huku"); } return EL_STR("hii"); } if (str_eq(number, EL_STR("pl"))) { if (str_eq(noun_class, EL_STR("1"))) { return EL_STR("wale"); } if (str_eq(noun_class, EL_STR("3"))) { return EL_STR("ile"); } if (str_eq(noun_class, EL_STR("5"))) { return EL_STR("yale"); } if (str_eq(noun_class, EL_STR("7"))) { return EL_STR("vile"); } if (str_eq(noun_class, EL_STR("9"))) { return EL_STR("zile"); } return EL_STR("wale"); } if (str_eq(noun_class, EL_STR("1"))) { return EL_STR("yule"); } if (str_eq(noun_class, EL_STR("3"))) { return EL_STR("ule"); } if (str_eq(noun_class, EL_STR("5"))) { return EL_STR("lile"); } if (str_eq(noun_class, EL_STR("7"))) { return EL_STR("kile"); } if (str_eq(noun_class, EL_STR("9"))) { return EL_STR("ile"); } if (str_eq(noun_class, EL_STR("11"))) { return EL_STR("ule"); } if (str_eq(noun_class, EL_STR("15"))) { return EL_STR("kule"); } return EL_STR("ile"); return 0; } el_val_t sw_copula_present(el_val_t person, el_val_t number, el_val_t use_case) { if (str_eq(use_case, EL_STR("equative"))) { if (str_eq(person, EL_STR("1"))) { return EL_STR("ni"); } if (str_eq(person, EL_STR("2"))) { return EL_STR("ni"); } return EL_STR("ni"); } if (str_eq(person, EL_STR("1"))) { if (str_eq(number, EL_STR("sg"))) { return EL_STR("niko"); } return EL_STR("tuko"); } if (str_eq(person, EL_STR("2"))) { if (str_eq(number, EL_STR("sg"))) { return EL_STR("uko"); } return EL_STR("mko"); } if (str_eq(number, EL_STR("sg"))) { return EL_STR("yuko"); } return EL_STR("wako"); return 0; } el_val_t sw_copula_neg_present(el_val_t person, el_val_t number) { if (str_eq(person, EL_STR("1"))) { if (str_eq(number, EL_STR("sg"))) { return EL_STR("si"); } return EL_STR("si"); } if (str_eq(person, EL_STR("2"))) { if (str_eq(number, EL_STR("sg"))) { return EL_STR("si"); } return EL_STR("si"); } return EL_STR("si"); return 0; }