From 8b8564e8288622d6fcc89a7d0419151922d0b7b7 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Fri, 9 Jun 2023 22:26:15 +0200 Subject: [PATCH] (Som) Fixes in verb constructors, still WIP --- src/somali/LexiconSom.gf | 580 ++++++++++++++++++------------------ src/somali/ParadigmsSom.gf | 18 +- src/somali/ResSom.gf | 207 +++++++------ src/somali/StructuralSom.gf | 2 +- 4 files changed, 427 insertions(+), 380 deletions(-) diff --git a/src/somali/LexiconSom.gf b/src/somali/LexiconSom.gf index 10eadd9d..03f7b765 100644 --- a/src/somali/LexiconSom.gf +++ b/src/somali/LexiconSom.gf @@ -5,414 +5,414 @@ concrete LexiconSom of Lexicon = CatSom ** -- A lin add_V3 = mkV3 "dar" ku noPrep ; --- lin airplane_N = mkN "" ; --- lin alas_Interj = mkInterj "" ; --- lin already_Adv = mkA "" ; +-- lin airplane_N = mkN [] ; +-- lin alas_Interj = mkInterj [] ; +-- lin already_Adv = mkA [] ; lin animal_N = mkN "xayawaan" ; lin answer_V2S = mkV2S "jawaab" ku ; --- lin apartment_N = mkN "" ; --- lin apple_N = mkN "" ; --- lin art_N = mkN "" ; --- lin ashes_N = mkN "" ; --- lin ask_V2Q = mkV2 "" ; +-- lin apartment_N = mkN [] ; +-- lin apple_N = mkN [] ; +-- lin art_N = mkN [] ; +-- lin ashes_N = mkN [] ; +-- lin ask_V2Q = mkV2 [] ; ---- -- B --- lin baby_N = mkN "" ; --- lin back_N = mkN "" ; --- lin bad_A = mkA "" ; --- lin bank_N = mkN "" ; --- lin bark_N = mkN "" ; --- lin beautiful_A = mkA "" ; --- lin become_VA = mkVA "" ; --- lin beer_N = mkN "" ; --- lin beg_V2V = mkV2 "" ; --- lin belly_N = mkN "" ; +-- lin baby_N = mkN [] ; +-- lin back_N = mkN [] ; +-- lin bad_A = mkA [] ; +-- lin bank_N = mkN [] ; +-- lin bark_N = mkN [] ; +-- lin beautiful_A = mkA [] ; +-- lin become_VA = mkVA [] ; +-- lin beer_N = mkN [] ; +-- lin beg_V2V = mkV2 [] ; +-- lin belly_N = mkN [] ; lin big_A = mkA "weyn" ; --- lin bike_N = mkN "" ; +-- lin bike_N = mkN [] ; lin bird_N = mkN "shimbir" fem ; --- lin bite_V2 = mkV2 "" ; +-- lin bite_V2 = mkV2 [] ; lin black_A = mkA "madow" ; --- lin blood_N = mkN "" ; --- lin blow_V = mkV "" ; --- lin blue_A = mkA "" ; --- lin boat_N = mkN "" ; --- lin bone_N = mkN "" ; --- lin boot_N = mkN "" ; --- lin boss_N = mkN "" ; +-- lin blood_N = mkN [] ; +-- lin blow_V = mkV [] ; +-- lin blue_A = mkA [] ; +-- lin boat_N = mkN [] ; +-- lin bone_N = mkN [] ; +-- lin boot_N = mkN [] ; +-- lin boss_N = mkN [] ; lin book_N = (mk2N "buug" "buugaag") ** {gda = MF GA TA} ; lin boy_N = mk2N "wiil" "wiilal" ; lin bread_N = mkN "rooti" ; --masc/fem --- lin break_V2 = mkV2 "" ; --- lin breast_N = mkN "" ; --- lin breathe_V = mkV "" ; --- lin broad_A = mkA "" ; --- lin brother_N2 = mkN "" ; --- lin brown_A = mkA "" ; --- lin burn_V = mkV "" ; --- lin butter_N = mkN "" ; +-- lin break_V2 = mkV2 [] ; +-- lin breast_N = mkN [] ; +-- lin breathe_V = mkV [] ; +-- lin broad_A = mkA [] ; +-- lin brother_N2 = mkN [] ; +-- lin brown_A = mkA [] ; +-- lin burn_V = mkV [] ; +-- lin butter_N = mkN [] ; lin buy_V2 = mkV2 "iibso" ; ---- -- C --- lin camera_N = mkN "" ; --- lin cap_N = mkN "" ; +-- lin camera_N = mkN [] ; +-- lin cap_N = mkN [] ; lin car_N = mkN "baabuur" masc ; --- lin carpet_N = mkN "" ; +-- lin carpet_N = mkN [] ; lin cat_N = mkN "bisad" ; --- lin ceiling_N = mkN "" ; +-- lin ceiling_N = mkN [] ; lin chair_N = mkN "kursi" ; --- lin cheese_N = mkN "" ; --- lin child_N = mkN "" ; --- lin church_N = mkN "" ; +-- lin cheese_N = mkN [] ; +-- lin child_N = mkN [] ; +-- lin church_N = mkN [] ; lin city_N = mkN "magaalo" ; --- lin clean_A = mkA "" ; --- lin clever_A = mkA "" ; --- lin close_V2 = mkV2 "" ; --- lin cloud_N = mkN "" ; --- lin coat_N = mkN "" ; --- lin cold_A = mkA "" ; +-- lin clean_A = mkA [] ; +-- lin clever_A = mkA [] ; +-- lin close_V2 = mkV2 [] ; +-- lin cloud_N = mkN [] ; +-- lin coat_N = mkN [] ; +-- lin cold_A = mkA [] ; lin come_V = mkV "iman" ; --- lin computer_N = mkN "" ; --- lin correct_A = mkA "" ; --- lin count_V2 = mkV2 "" ; --- lin country_N = mkN "" ; --- lin cousin_N = mkN "" ; --- lin cow_N = mkN "" ; --- lin cut_V2 = mkV2 "" ; +-- lin computer_N = mkN [] ; +-- lin correct_A = mkA [] ; +-- lin count_V2 = mkV2 [] ; +-- lin country_N = mkN [] ; +-- lin cousin_N = mkN [] ; +-- lin cow_N = mkN [] ; +-- lin cut_V2 = mkV2 [] ; -- -- ---- -- -- D -- --- lin day_N = mkN "" ; --- lin die_V = mkV "" ; --- lin dig_V = mkV "" ; --- lin dirty_A = mkA "" ; --- lin distance_N3 = mkN "" ; +-- lin day_N = mkN [] ; +-- lin die_V = mkV [] ; +-- lin dig_V = mkV [] ; +-- lin dirty_A = mkA [] ; +-- lin distance_N3 = mkN [] ; -- lin do_V2 = lin V2 egin_V ; --- lin doctor_N = mkN "" ; --- lin dog_N = mkN "" ; --- lin door_N = mkN "" ; +-- lin doctor_N = mkN [] ; +-- lin dog_N = mkN [] ; +-- lin door_N = mkN [] ; lin drink_V2 = mkV2 "cab" ; --- lin dry_A = mkA "" ; --- lin dull_A = mkA "" ; --- lin dust_N = mkN "" ; +-- lin dry_A = mkA [] ; +-- lin dull_A = mkA [] ; +-- lin dust_N = mkN [] ; ---- -- E --- lin ear_N = mkN "" ; --- lin earth_N = mkN "" ; +-- lin ear_N = mkN [] ; +-- lin earth_N = mkN [] ; lin eat_V2 = mkV2 "cun" ; --- lin egg_N = mkN "" ; --- lin empty_A = mkA "" ; --- lin enemy_N = mkN "" ; --- lin eye_N = mkN "" ; +-- lin egg_N = mkN [] ; +-- lin empty_A = mkA [] ; +-- lin enemy_N = mkN [] ; +-- lin eye_N = mkN [] ; ---- -- F --- lin factory_N = mkN "" ; --- lin fall_V = mkV "" ; --- lin far_Adv = mkA "" ; --- lin fat_N = mkN "" ; +-- lin factory_N = mkN [] ; +-- lin fall_V = mkV [] ; +-- lin far_Adv = mkA [] ; +-- lin fat_N = mkN [] ; lin father_N2 = mkN2 (shortPossN (mkN "aabbe")) ; --- lin fear_V2 = mkV2 "" ; --- lin fear_VS = mkVS "" ; --- lin feather_N = mkN "" ; --- lin fight_V2 = mkV2 "" ; --- lin find_V2 = mkV2 "" ; --- lin fingernail_N = mkN "" ; --- lin fire_N = mkN "" ; --- lin fish_N = mkN "" ; --- lin float_V = mkV "" ; --- lin floor_N = mkN "" ; --- lin flow_V = mkV "" ; --- lin flower_N = mkN "" ; --- lin fly_V = mkV "" ; --- lin fog_N = mkN "" ; --- lin foot_N = mkN "" ; --- lin forest_N = mkN "" ; --- lin forget_V2 = mkV2 "" ; --- lin freeze_V = mkV "" ; --- lin fridge_N = mkN "" ; --- lin friend_N = mkN "" ; --- lin fruit_N = mkN "" ; --- lin full_A = mkA "" ; +-- lin fear_V2 = mkV2 [] ; +-- lin fear_VS = mkVS [] ; +-- lin feather_N = mkN [] ; +-- lin fight_V2 = mkV2 [] ; +-- lin find_V2 = mkV2 [] ; +-- lin fingernail_N = mkN [] ; +-- lin fire_N = mkN [] ; +-- lin fish_N = mkN [] ; +-- lin float_V = mkV [] ; +-- lin floor_N = mkN [] ; +-- lin flow_V = mkV [] ; +-- lin flower_N = mkN [] ; +-- lin fly_V = mkV [] ; +-- lin fog_N = mkN [] ; +-- lin foot_N = mkN [] ; +-- lin forest_N = mkN [] ; +-- lin forget_V2 = mkV2 [] ; +-- lin freeze_V = mkV [] ; +-- lin fridge_N = mkN [] ; +-- lin friend_N = mkN [] ; +-- lin fruit_N = mkN [] ; +-- lin full_A = mkA [] ; -- --lin fun_AV ---- -- G --- lin garden_N = mkN "" ; +-- lin garden_N = mkN [] ; lin girl_N = mkN "gabadh" "gabdho" fem ; lin give_V3 = mkV3 "sii" ; --- lin glove_N = mkN "" ; +-- lin glove_N = mkN [] ; lin go_V = mkV "tag" ; --- lin gold_N = mkN "" ; --- lin good_A = mkA "" ; --- lin grammar_N = mkN "" ; --- lin grass_N = mkN "" ; --- lin green_A = mkA "" ; +-- lin gold_N = mkN [] ; +-- lin good_A = mkA [] ; +-- lin grammar_N = mkN [] ; +-- lin grass_N = mkN [] ; +-- lin green_A = mkA [] ; ---- -- H --- lin hair_N = mkN "" ; --- lin hand_N = mkN "" ; --- lin harbour_N = mkN "" ; --- lin hat_N = mkN "" ; --- lin hate_V2 = mkV2 "" ; --- lin head_N = mkN "" ; --- lin hear_V2 = mkV2 "" ; --- lin heart_N = mkN "" ; --- lin heavy_A = mkA "" ; --- lin hill_N = mkN "" ; --- lin hit_V2 = mkV2 "" ; --- lin hold_V2 = mkV2 "" ; --- lin hope_VS = mkV "" ; --- lin horn_N = mkN "" ; --- lin horse_N = mkN "" ; --- lin hot_A = mkA "" ; +-- lin hair_N = mkN [] ; +-- lin hand_N = mkN [] ; +-- lin harbour_N = mkN [] ; +-- lin hat_N = mkN [] ; +-- lin hate_V2 = mkV2 [] ; +-- lin head_N = mkN [] ; +-- lin hear_V2 = mkV2 [] ; +-- lin heart_N = mkN [] ; +-- lin heavy_A = mkA [] ; +-- lin hill_N = mkN [] ; +-- lin hit_V2 = mkV2 [] ; +-- lin hold_V2 = mkV2 [] ; +-- lin hope_VS = mkV [] ; +-- lin horn_N = mkN [] ; +-- lin horse_N = mkN [] ; +-- lin hot_A = mkA [] ; lin house_N = mkN "guri" ; --- lin hunt_V2 = mkV2 "" ; --- lin husband_N = mkN "" ; +-- lin hunt_V2 = mkV2 [] ; +-- lin husband_N = mkN [] ; -------- -- I - K --- lin ice_N = mkN "" ; --- lin industry_N = mkN "" ; --- lin iron_N = mkN "" ; +-- lin ice_N = mkN [] ; +-- lin industry_N = mkN [] ; +-- lin iron_N = mkN [] ; -- lin john_PN = mkPN "Jon" ; lin jump_V = mkV "bood" ; --- lin kill_V2 = mkV2 "" ; --- lin king_N = mkN "" ; --- lin knee_N = mkN "" ; --- lin know_V2 = mkV2 "" ; --- lin know_VQ = mkVQ "" ; +-- lin kill_V2 = mkV2 [] ; +-- lin king_N = mkN [] ; +-- lin knee_N = mkN [] ; +-- lin know_V2 = mkV2 [] ; +-- lin know_VQ = mkVQ [] ; lin know_VS = mkV "ogaan" ; -- copula ** {sii = "og"} ; ---- -- L --- lin lake_N = mkN "" ; --- lin lamp_N = mkN "" ; +-- lin lake_N = mkN [] ; +-- lin lamp_N = mkN [] ; lin language_N = mkN "af" ; --- lin laugh_V = mkV "" ; --- lin leaf_N = mkN "" ; --- lin learn_V2 = mkV2 "" ; --- lin leather_N = mkN "" ; --- lin leave_V2 = mkV2 "" ; --- lin leg_N = mkN "" ; --- lin lie_V = mkV "" ; --- lin like_V2 = mkV2 "" ; --- lin listen_V2 = mkV2 "" ; +-- lin laugh_V = mkV [] ; +-- lin leaf_N = mkN [] ; +-- lin learn_V2 = mkV2 [] ; +-- lin leather_N = mkN [] ; +-- lin leave_V2 = mkV2 [] ; +-- lin leg_N = mkN [] ; +-- lin lie_V = mkV [] ; +-- lin like_V2 = mkV2 [] ; +-- lin listen_V2 = mkV2 [] ; lin live_V = copula ** {sii = "nool"} ; --- lin liver_N = mkN "" ; --- lin long_A = mkA "" ; --- lin lose_V2 = mkV2 "" ; --- lin louse_N = mkN "" ; --- lin love_N = mkN "" ; --- lin love_V2 = mkV2 "" ; +-- lin liver_N = mkN [] ; +-- lin long_A = mkA [] ; +-- lin lose_V2 = mkV2 [] ; +-- lin louse_N = mkN [] ; +-- lin love_N = mkN [] ; +-- lin love_V2 = mkV2 [] ; ---- -- M lin man_N = (mk2N "nin" "niman") ** {gda = MM KA KA} ; --- lin married_A2 = mkA "" ; +-- lin married_A2 = mkA [] ; lin meat_N = mkN "hilib" "hilbo" masc ; --- lin milk_N = mkN "" ; --- lin moon_N = mkN "" ; +-- lin milk_N = mkN [] ; +-- lin moon_N = mkN [] ; lin mother_N2 = mkN2 (shortPossN (mkN "hooyo")) ; --- lin mountain_N = mkN "" ; --- lin mouth_N = mkN "" ; --- lin music_N = mkN "" ; +-- lin mountain_N = mkN [] ; +-- lin mouth_N = mkN [] ; +-- lin music_N = mkN [] ; ---- -- N lin name_N = mkN "magac" ; --- lin narrow_A = mkA "" ; --- lin near_A = mkA "" ; --- lin neck_N = mkN "" ; --- lin new_A = mkA "" ; --- lin newspaper_N = mkN "" ; --- lin night_N = mkN "" ; --- lin nose_N = mkN "" ; --- lin now_Adv = mkA "" ; --- lin number_N = mkN "" ; +-- lin narrow_A = mkA [] ; +-- lin near_A = mkA [] ; +-- lin neck_N = mkN [] ; +-- lin new_A = mkA [] ; +-- lin newspaper_N = mkN [] ; +-- lin night_N = mkN [] ; +-- lin nose_N = mkN [] ; +-- lin now_Adv = mkA [] ; +-- lin number_N = mkN [] ; -- -- -------- -- -- O - P -- -- --- lin oil_N = mkN "" ; --- lin old_A = mkA "" ; +-- lin oil_N = mkN [] ; +-- lin old_A = mkA [] ; lin open_V2 = mkV2 "fur" ; lin paint_V2A = mkV2A "rinjiyee" ; --- lin paper_N = mkN "" ; +-- lin paper_N = mkN [] ; -- lin paris_PN = mkPN "Paris" ; --- lin peace_N = mkN "" ; --- lin pen_N = mkN "" ; +-- lin peace_N = mkN [] ; +-- lin pen_N = mkN [] ; lin person_N = mkNoun "dad" "dadka" "dad" "dadka" Masc ; --- lin planet_N = mkN "" ; --- lin plastic_N = mkN "" ; --- lin play_V = mkV "" ; --- lin policeman_N = mkN "" ; --- lin priest_N = mkN "" ; --- lin pull_V2 = mkV2 "" ; --- lin push_V2 = mkV2 "" ; --- lin put_V2 = mkV2 "" ; +-- lin planet_N = mkN [] ; +-- lin plastic_N = mkN [] ; +-- lin play_V = mkV [] ; +-- lin policeman_N = mkN [] ; +-- lin priest_N = mkN [] ; +-- lin pull_V2 = mkV2 [] ; +-- lin push_V2 = mkV2 [] ; +-- lin put_V2 = mkV2 [] ; -- -- -------- -- -- Q - R -- --- lin queen_N = mkN "" ; --- lin question_N = mkN "" ; --- lin radio_N = mkN "" ; --- lin rain_N = mkN "" ; --- lin rain_V0 = mkV "" ; +-- lin queen_N = mkN [] ; +-- lin question_N = mkN [] ; +-- lin radio_N = mkN [] ; +-- lin rain_N = mkN [] ; +-- lin rain_V0 = mkV [] ; lin read_V2 = mkV2 "akhri" ; --- lin ready_A = mkA "" ; --- lin reason_N = mkN "" ; --- lin red_A = mkA "" ; --- lin religion_N = mkN "" ; --- lin restaurant_N = mkN "" ; --- lin river_N = mkN "" ; --- lin road_N = mkN "" ; --- lin rock_N = mkN "" ; --- lin roof_N = mkN "" ; --- lin root_N = mkN "" ; --- lin rope_N = mkN "" ; --- lin rotten_A = mkA "" ; --- lin round_A = mkA "" ; --- lin rub_V2 = mkV2 "" ; --- lin rubber_N = mkN "" ; --- lin rule_N = mkN "" ; --- lin run_V = mkV "" ; +-- lin ready_A = mkA [] ; +-- lin reason_N = mkN [] ; +-- lin red_A = mkA [] ; +-- lin religion_N = mkN [] ; +-- lin restaurant_N = mkN [] ; +-- lin river_N = mkN [] ; +-- lin road_N = mkN [] ; +-- lin rock_N = mkN [] ; +-- lin roof_N = mkN [] ; +-- lin root_N = mkN [] ; +-- lin rope_N = mkN [] ; +-- lin rotten_A = mkA [] ; +-- lin round_A = mkA [] ; +-- lin rub_V2 = mkV2 [] ; +-- lin rubber_N = mkN [] ; +-- lin rule_N = mkN [] ; +-- lin run_V = mkV [] ; ---- -- S lin salt_N = mkN "cusbo" ; --- lin sand_N = mkN "" ; --- lin say_VS = mkVS "" ; --- lin school_N = mkN "" ; --- lin science_N = mkN "" ; --- lin scratch_V2 = mkV2 "" ; +-- lin sand_N = mkN [] ; +-- lin say_VS = mkVS [] ; +-- lin school_N = mkN [] ; +-- lin science_N = mkN [] ; +-- lin scratch_V2 = mkV2 [] ; lin sea_N = mkN "bad" fem ; -lin see_V2 = mkV2 "ark" ; --- lin seed_N = mkN "" ; --- lin seek_V2 = mkV2 "" ; --- lin sell_V3 = mkV3 "" ; --- lin send_V3 = mkV3 "" ; --- lin sew_V = mkV "" ; --- lin sharp_A = mkA "" ; +lin see_V2 = mkV2 (mkV "arag" "arkaa") noPrep ; +-- lin seed_N = mkN [] ; +-- lin seek_V2 = mkV2 [] ; +-- lin sell_V3 = mkV3 [] ; +-- lin send_V3 = mkV3 [] ; +-- lin sew_V = mkV [] ; +-- lin sharp_A = mkA [] ; lin sheep_N = mkN "lax" fem ; --- lin ship_N = mkN "" ; --- lin shirt_N = mkN "" ; --- lin shoe_N = mkN "" ; --- lin shop_N = mkN "" ; --- lin short_A = mkA "" ; --- lin silver_N = mkN "" ; --- lin sing_V = mkV "" ; --- lin sister_N = mkN "" ; --- lin sit_V = mkV "" ; --- lin skin_N = mkN "" ; --- lin sky_N = mkN "" ; --- lin sleep_V = mkV "" ; +-- lin ship_N = mkN [] ; +-- lin shirt_N = mkN [] ; +-- lin shoe_N = mkN [] ; +-- lin shop_N = mkN [] ; +-- lin short_A = mkA [] ; +-- lin silver_N = mkN [] ; +-- lin sing_V = mkV [] ; +-- lin sister_N = mkN [] ; +-- lin sit_V = mkV [] ; +-- lin skin_N = mkN [] ; +-- lin sky_N = mkN [] ; +-- lin sleep_V = mkV [] ; lin small_A = mkA "yar" ; --- lin smell_V = mkV "" ; --- lin smoke_N = mkN "" ; --- lin smooth_A = mkA "" ; --- lin snake_N = mkN "" ; --- lin snow_N = mkN "" ; --- lin sock_N = mkN "" ; --- lin song_N = mkN "" ; +-- lin smell_V = mkV [] ; +-- lin smoke_N = mkN [] ; +-- lin smooth_A = mkA [] ; +-- lin snake_N = mkN [] ; +-- lin snow_N = mkN [] ; +-- lin sock_N = mkN [] ; +-- lin song_N = mkN [] ; lin speak_V2 = mkV2 "hadlo" ; --- lin spit_V = mkV "" ; --- lin split_V2 = mkV2 "" ; --- lin squeeze_V2 = mkV2 "" ; --- lin stab_V2 = mkV2 "" ; --- lin stand_V = mkV "" ; --- lin star_N = mkN "" ; --- lin steel_N = mkN "" ; --- lin stick_N = mkN "" ; --- lin stone_N = mkN "" ; --- lin stop_V = mkV "" ; --- lin stove_N = mkN "" ; --- lin straight_A = mkA "" ; --- lin student_N = mkN "" ; --- lin stupid_A = mkA "" ; --- lin suck_V2 = mkV2 "" ; --- lin sun_N = mkN "" ; --- lin swell_V = mkV "" ; --- lin swim_V = mkV "" ; +-- lin spit_V = mkV [] ; +-- lin split_V2 = mkV2 [] ; +-- lin squeeze_V2 = mkV2 [] ; +-- lin stab_V2 = mkV2 [] ; +-- lin stand_V = mkV [] ; +-- lin star_N = mkN [] ; +-- lin steel_N = mkN [] ; +-- lin stick_N = mkN [] ; +-- lin stone_N = mkN [] ; +-- lin stop_V = mkV [] ; +-- lin stove_N = mkN [] ; +-- lin straight_A = mkA [] ; +-- lin student_N = mkN [] ; +-- lin stupid_A = mkA [] ; +-- lin suck_V2 = mkV2 [] ; +-- lin sun_N = mkN [] ; +-- lin swell_V = mkV [] ; +-- lin swim_V = mkV [] ; ---- -- T --- lin table_N = mkN "" ; --- lin tail_N = mkN "" ; --- lin talk_V3 = mkV3 "" ; +-- lin table_N = mkN [] ; +-- lin tail_N = mkN [] ; +-- lin talk_V3 = mkV3 [] ; lin teach_V2 = mkV2 "bar" ku ; lin teacher_N = mkN "macallin" ; --- lin television_N = mkN "" ; --- lin thick_A = mkA "" ; --- lin thin_A = mkA "" ; --- lin think_V = mkV "" ; --- lin throw_V2 = mkV2 "" ; --- lin tie_V2 = mkV2 "" ; --- lin today_Adv = mkA "" ; --- lin tongue_N = mkN "" ; --- lin tooth_N = mkN "" ; --- lin train_N = mkN "" ; --- lin travel_V = mkV "" ; --- lin tree_N = mkN "" ; --- lin turn_V = mkV "" ; +-- lin television_N = mkN [] ; +-- lin thick_A = mkA [] ; +-- lin thin_A = mkA [] ; +-- lin think_V = mkV [] ; +-- lin throw_V2 = mkV2 [] ; +-- lin tie_V2 = mkV2 [] ; +-- lin today_Adv = mkA [] ; +-- lin tongue_N = mkN [] ; +-- lin tooth_N = mkN [] ; +-- lin train_N = mkN [] ; +-- lin travel_V = mkV [] ; +-- lin tree_N = mkN [] ; +-- lin turn_V = mkV [] ; -------- -- U - V --- lin ugly_A = mkA "" ; --- lin uncertain_A = mkA "" ; --- lin understand_V2 = mkV2 "" ; --- lin university_N = mkN "" ; --- lin village_N = mkN "" ; --- lin vomit_V = mkV2 "" ; +-- lin ugly_A = mkA [] ; +-- lin uncertain_A = mkA [] ; +-- lin understand_V2 = mkV2 [] ; +-- lin university_N = mkN [] ; +-- lin village_N = mkN [] ; +-- lin vomit_V = mkV2 [] ; -------- -- W - Y lin wait_V2 = mkV2 "sug" ; --- lin walk_V = mkV "" ; --- lin war_N = mkN "" ; --- lin warm_A = mkA "" ; --- lin wash_V2 = mkV2 "" ; --- lin watch_V2 = mkV2 "" ; +lin walk_V = mkV "soco" "socday" ; +-- lin war_N = mkN [] ; +-- lin warm_A = mkA [] ; +-- lin wash_V2 = mkV2 [] ; +-- lin watch_V2 = mkV2 [] ; lin water_N = mkNoun "biyo" "biyaha" "biyo" "biyaha" Masc ; -- ?? gender --- lin wet_A = mkA "" ; +-- lin wet_A = mkA [] ; lin white_A = mkA "cad" ; --- lin wide_A = mkA "" ; --- lin wife_N = mkN "" ; --- lin win_V2 = mkV2 "" ; --- lin wind_N = mkN "" ; --- lin window_N = mkN "" ; --- lin wine_N = mkN "" ; --- lin wing_N = mkN "" ; --- lin wipe_V2 = mkV2 "" ; +-- lin wide_A = mkA [] ; +-- lin wife_N = mkN [] ; +-- lin win_V2 = mkV2 [] ; +-- lin wind_N = mkN [] ; +-- lin window_N = mkN [] ; +-- lin wine_N = mkN [] ; +-- lin wing_N = mkN [] ; +-- lin wipe_V2 = mkV2 [] ; lin woman_N = mkN "naag" fem ; --- lin wonder_VQ = mkVQ "" ; --- lin wood_N = mkN "" ; --- lin worm_N = mkN "" ; --- lin write_V2 = mkV2 "" ; --- lin year_N = mkN "" ; --- lin yellow_A = mkA "" ; --- lin young_A = mkA "" ; +-- lin wonder_VQ = mkVQ [] ; +-- lin wood_N = mkN [] ; +-- lin worm_N = mkN [] ; +-- lin write_V2 = mkV2 [] ; +-- lin year_N = mkN [] ; +-- lin yellow_A = mkA [] ; +-- lin young_A = mkA [] ; } diff --git a/src/somali/ParadigmsSom.gf b/src/somali/ParadigmsSom.gf index 5e14508b..490e582b 100644 --- a/src/somali/ParadigmsSom.gf +++ b/src/somali/ParadigmsSom.gf @@ -214,20 +214,26 @@ oper mkV = overload { mkV : (imp : Str) -> V = \v -> lin V (regV v) ; - mkV : (imp,pl2,sg1 : Str) -> V = \i,p,s -> lin V (mkVerb i p s) ; + mkV : (imp, sg1 : Str) -> V = \i,s1 -> lin V (reg2V i s1) ; + mkV : (imp,sg1,sg2,pl2 : Str) -> V = \i,s1,_,_ -> lin V (reg2V i s1) ; -- TODO: 4-place constructor mkV : Str -> V -> V = \s,v -> lin V (prefixV s v) } ; copula = ResSom.copula ; regV : Str -> Verb = \s -> case s of { - _ + #c + #c + "o" => cJoogso s ; - _ + "o" => cQaado s ; ---- - _ + "i" => cKari s ; - _ + "ee" => cYaree s ; - _ => cSug s + _ + #c + #c + "o" => mkVerb (cJoogso s) ; + _ + "o" => mkVerb (cQaado s) ; ---- + _ + "i" => mkVerb (cKari s) ; + _ + "ee" => mkVerb (cYaree s) ; + _ => mkVerb (cSug s) } ; + reg2V : Str -> Str -> Verb = \arag,arkaa -> case arag of { + _ + #c => mkVerb (cArag arag arkaa) ; + _ => regV arag + } ; + mkV2 = overload { mkV2 : Str -> V2 = \s -> lin V2 (regV s ** {c2 = noPrep}) ; mkV2 : Str -> Adposition -> V2 = \s,p -> lin V2 (regV s ** {c2 = p}) ; diff --git a/src/somali/ResSom.gf b/src/somali/ResSom.gf index 9f2d549a..919618fb 100644 --- a/src/somali/ResSom.gf +++ b/src/somali/ResSom.gf @@ -505,99 +505,72 @@ oper -- Saeed page 79: -- "… the reference form is the imperative singular form -- since it corresponds to the form of the basic root." - mkVerb : (imperative,sg1,pl2 : Str) -> Verb = \qaado,qaat,ark -> - let stems : {p1 : Str ; p2 : Str} = case ark of { - a + r@#c + k@#c -- two consonants need a vowel in between - => ; - _ + #c -- if the pl2 root ends in consonant, infinitive needs a vowel - => ; - yar + "ee" -- double e turns into ey - => ; - _ => -- no changes, just add n for infinitive - } ; - arki = stems.p1 ; - arag = stems.p2 ; - arkin = case last arki of { -- The negative past tense ends in n: - "n" => arki ; -- if infinitive ends in n, no change; - _ => arki + "n" } ; -- otherwise add n. + VerbRoots8 : Type = {imper,sg1stem,sg2stem,pl1stem,progr,inf,negpast,impernegpl : Str} ; - progr : Str = case qaat of { -- Progressive - _ + "eey" => stems.p2 + "nay" ; -- bireey -> bireynay - _ + ("y"|"n") => init qaat + "nay" ; -- akhriy -> akhrinay ; gashad -> gashanay - _ + #v + "t" => qaat + "ay" ; - _ + #c + "t" => init qaat + "anay" ; - _ => qaat + "ay" } ; - - -- Some predictable sound changes - t : Str = case arag of { -- kari+seen, bixi noq+deen, (sug|joogsa|qaada)+teen, - _ + ("i"|"y") => "s" ; -- t changes into s in front of i/y - _ + ("x"|"q"|"c") => "d" ; -- t changes into d in front of x/q/c - _ => "t" } ; - ay : Str = case ark of { - _ + ("i"|"e") => "ey" ; - _ => "ay" } ; - n : Str = case arag of { - _ + #v => "nn" ; -- n duplicates after vowel - _ + "r" => "r" ; -- Saeed p. 35: agreement marker n (1PL) - _ + "l" => "l" ; -- assimilates to stem final r or. - _ => "n" } ; - an : Str = case qaado of { - _ + "o" => "an" ; -- Allomorph for imperatives - _ => "in" } ; - - in { s = table { + mkVerb : VerbRoots8 -> Verb = \vr -> + let arag : Str = vr.imper ; + qaat : Str = vr.sg1stem ; -- +aa -- hayst, boogd, joogsad, bilaab, ark, akhriy, + hadash : Str = vr.sg2stem ; -- +aa -- haysat, booqat, joogsat, bilowd, aragt, akhris, + qaadann : Str = vr.pl1stem ; -- +aa -- + arki : Str = vr.inf ; + arkin : Str = vr.negpast ; + qaada : Str = init vr.negpast ; -- TODO: is this correct? is 2sg neg imperative same as negative past root? + ay : Str = case arag of { + _ + ("i"|"e") => "ey" ; + _ => "ay" } ; + in { + s = table { VPres Simple Sg1_Sg3Masc pol => qaat + if_then_Pol pol "aa" "o" ; VPres Simple Sg2_Sg3Fem pol - => arag + t + if_then_Pol pol "aa" "o" ; - VPres Simple Pl1_ pol => arag + n + if_then_Pol pol "aa" "o" ; - VPres Simple Pl2_ pol => arag + t + "aan" ; - VPres Simple Pl3_ pol => qaat + "aan" ; + => hadash + if_then_Pol pol "aa" "o" ; + VPres Simple Pl1_ pol => qaadann + if_then_Pol pol "aa" "o" ; + VPres Simple Pl2_ pol => hadash + "aan" ; + VPres Simple Pl3_ pol => qaat + "aan" ; VPres Progressive Sg1_Sg3Masc pol - => progr + if_then_Pol pol "aa" "o" ; + => vr.progr + if_then_Pol pol "aa" "o" ; VPres Progressive Sg2_Sg3Fem pol - => progr + if_then_Pol pol "saa" "so" ; + => vr.progr + if_then_Pol pol "saa" "so" ; VPres Progressive Pl1_ pol - => progr + if_then_Pol pol "naa" "no" ; - VPres Progressive Pl2_ pol => progr + "saan" ; - VPres Progressive Pl3_ pol => progr + "aan" ; + => vr.progr + if_then_Pol pol "naa" "no" ; + VPres Progressive Pl2_ pol => vr.progr + "saan" ; + VPres Progressive Pl3_ pol => vr.progr + "aan" ; VPast Simple Sg1_Sg3Masc - => qaat + ay ; - VPast Simple Sg2_Sg3Fem => arag + t + ay ; -- t, d or s - VPast Simple Pl1_ => arag + n + ay ; - VPast Simple Pl2_ => arag + t + "een" ; -- t, d or s - VPast Simple Pl3_ => qaat + "een" ; + => qaat + ay ; + VPast Simple Sg2_Sg3Fem => hadash + ay ; + VPast Simple Pl1_ => qaadann + ay ; + VPast Simple Pl2_ => hadash + "een" ; + VPast Simple Pl3_ => qaat + "een" ; - VPast Progressive Sg1_Sg3Masc - => progr + "ey" ; - VPast Progressive Sg2_Sg3Fem => progr + "sey" ; - VPast Progressive Pl1_ => progr + "ney" ; - VPast Progressive Pl2_ => progr + "seen" ; - VPast Progressive Pl3_ => progr + "een" ; + VPast Progressive Sg1_Sg3Masc => vr.progr + "ey" ; + VPast Progressive Sg2_Sg3Fem => vr.progr + "sey" ; + VPast Progressive Pl1_ => vr.progr + "ney" ; + VPast Progressive Pl2_ => vr.progr + "seen" ; + VPast Progressive Pl3_ => vr.progr + "een" ; VNegPast Simple => arkin ; - VNegPast Progressive => progr + "n" ; + VNegPast Progressive => vr.progr + "n" ; -- TODO check conjugations 2 and 3 - VNegCond PlInv => arag + n + "een" ; - VNegCond SgMasc => qaat + "een" ; -- for most verbs same as VPast Simple Pl3_ - VNegCond SgFem => arag + t + "een" ; -- for most verbs same as VPast Simple Pl2_ + VNegCond SgMasc => qaat + "een" ; -- for most verbs same as VPast Simple Pl3_ + VNegCond SgFem => hadash + "een" ; -- for most verbs same as VPast Simple Pl2_ + VNegCond PlInv => qaadann + "een" ; -- VImp Sg Pos => arag ; VImp Pl Pos => qaat + "a" ; - VImp Sg Neg => arag + an ; - VImp Pl Neg => qaat + "ina" ; + VImp Sg Neg => qaada + "n" ; + VImp Pl Neg => vr.impernegpl ; VInf => arki ; VRel SgMasc => qaat + "a" ; - VRel SgFem => arag + t + "a" ; - VRel PlInv => arag + "na" ; + VRel SgFem => hadash + "a" ; + VRel PlInv => qaadann + "a" ; VRelNeg => qaat + "o" -- TODO check - } ; + } ; sii, dhex = [] ; isCopula = False ; } ; @@ -605,33 +578,101 @@ oper ------------------------- -- Regular verb paradigms - cSug, cKari, cYaree, cJoogso, cQaado : Str -> Verb ; + cSug, cBilaab, cKari, cYaree, cHayso, cJoogso, cQaado : Str -> VerbRoots8 ; + cArag : (arag,arkaa : Str) -> VerbRoots8 ; -- 1: Root verbs with no lexical affixes, e.g. sug TR 'wait for', kar INTR 'boil, cook'; + -- NB. imperative unable to distinguish whether stem consonant is K or G: sug~sugaa vs. bug~bukaa cSug sug = let cabb : Str = case sug of { - _ + "b" => sug + "b" ; -- TODO: more duplication patterns - _ => sug } - in mkVerb sug cabb sug ; + ca + "b" => ca + "bb" ; -- TODO: more duplication patterns + _ => sug } ; + in cArag sug (cabb+"aa") ; + + -- Imperative only cannot distinguish whether the vowel is epenthetic, and whether stem consonant is G/K or N/M + cArag arag arkaa = -- analogously: bug~bukaa, tartan~tartamaa + let ark : Str = init (init arkaa) ; + n : Str = case arag of { + _ + #v => "nn" ; -- n duplicates after vowel + _ + "r" => "r" ; -- Saeed p. 35: agreement marker n (1PL) + _ + "l" => "l" ; -- assimilates to stem final r or. + _ => "n" } ; + t : Str = case arag of { -- kari+saa, noq+daa, (sug|joogsa|qaada)+taa, hadh+aa + _ + ("x"|"q"|"c") => "d" ; -- t changes into d after x/q/c + _ + "dh" => [] ; -- duplicates after dh, but not written + _ => "t" } ; + hadash : Str = case arag of { + hada + "l" => hada + "sh" ; + _ => arag + t + } ; + + in { imper = arag ; + sg1stem = ark ; + sg2stem = hadash ; + pl1stem = arag + n ; + inf = ark + "i" ; + progr = ark + "ay" ; + negpast = ark + "in" ; + impernegpl = ark + "ina" } ; + + + + -- Predictable stem alterations: aab->ow + cBilaab bilaab = + let bilow : Str = init (init (init bilaab)) + "ow" ; + in cArag bilaab (bilaab + "aa") ** { + sg2stem = bilow + "d" ; + pl1stem = bilow + "n" } ; + -- 2A: Verbs derived from root verbs by the causative affix -i/-is, e.g. kari TR 'cook' (from conjugation 1 kar INTR 'boil, cook'); -- 2B: Verbs derived from nouns and adjectives by the causative/factitive affix -eel-ayn, e.g. yaree 'make small' (from yar ADJ 'small'); - cKari, cYaree = \kari -> mkVerb kari (kari+"y") kari ; + cKari kari = { imper = kari ; + sg1stem = kari + "y" ; + sg2stem = kari + "s" ; + pl1stem = kari + "nn" ; + inf, negpast = kari + "n" ; + progr = kari + "nay" ; + impernegpl = kari + "nina" } ; + + cYaree yaree = + let yar : Str = init (init yaree) ; + yarey : Str = case yaree of { + yar + "ee" => yar + "ey" ; + _ => yaree + "n" -- ideally shouldn't happen; this constructor should only be applied to imperatives that end in ee + } ; + in { imper = yaree ; + sg1stem = yaree + "y" ; + sg2stem = yarey + "s" ; + pl1stem = yarey + "n" ; + inf, negpast = yarey + "n" ; + progr = yarey + "nay" ; + impernegpl = yar + "aynina" } ; + -- 3A: Verbs derived from verbal stems by the middle voice affix -ol­/at -- e.g. karsó 'cook for oneself (from conjugation 2 kâri TR 'cook'); cJoogso joogso = let joogsa = init joogso + "a" ; - in mkVerb joogso (joogsa + "d") joogsa ; + in { imper = joogso ; + sg1stem = joogsa + "d" ; + sg2stem = joogsa + "t" ; + pl1stem = joogsa + "nn" ; + inf, negpast = joogsa + "n" ; + progr = joogsa + "nay" ; + impernegpl = joogsa + "nina" } ; + + cHayso hayso = -- otherwise like joogso, but sg1 is different + let hays : Str = init hayso ; + in cJoogso hayso ** {sg1stem = hays + "t"} ; + -- 3B: As conjugation 3A but verbs whose syllable structure triggers -- stem contraction and subsequent sandhi rules, e.g. qaadó 'take for oneself -- (from conjugation 1 qàad TR 'take'). cQaado qaado = let qaa = init (init qaado) - in mkVerb qaado -- Imperative sg, with the vowel - (qaa + "t") -- Per1 Sg, Per3 Pl and Per3 Sg Masc - (qaa + "da") ; -- Per2 Pl and others + in cJoogso qaado ** { sg1stem = qaa + "t" } ; -- Constructs verbs like u baahan+ahay prefixV : Str -> Verb -> Verb = \s,v -> v ** { @@ -676,7 +717,7 @@ oper } ; have_V : Verb = - let hold_V = mkVerb "hayso" "haysat" "haysa" in hold_V ** { + let hold_V = mkVerb (cHayso "hayso") in hold_V ** { s = table { VPres _ Sg1_Sg3Masc Pos => "leeyahay" ; VPres _ Sg2_Sg3Fem Pos => "leedahay" ; @@ -700,7 +741,7 @@ oper } ; fail_V : Verb = - let waa_V : Verb = cSug "waay" in waa_V ** { + let waa_V : Verb = mkVerb (cSug "waay") in waa_V ** { s = table { VPres _ Sg2_Sg3Fem _ => "waayday" ; @@ -1037,9 +1078,9 @@ oper => presV vp ; => pastV vp ; => vp.s ! VInf ++ presCopula ! agrPol ; ---- just guessing - => vp.s ! VInf ++ pastV (cSug "jir") ; - => vp.s ! VInf ++ presV (cSug "doon") ; - => vp.s ! VInf ++ pastV (cSug "doon") + => vp.s ! VInf ++ pastV (mkVerb (cSug "jir")) ; + => vp.s ! VInf ++ presV (mkVerb (cSug "doon")) ; + => vp.s ! VInf ++ pastV (mkVerb (cSug "doon")) } where { agrPol : {agr:Agreement ; pol:Polarity} = {agr=agr; pol=p} ; diff --git a/src/somali/StructuralSom.gf b/src/somali/StructuralSom.gf index 83b26c7a..5ce16529 100644 --- a/src/somali/StructuralSom.gf +++ b/src/somali/StructuralSom.gf @@ -180,7 +180,7 @@ lin have_V2 = mkV2 have_V noPrep ; -- TODO: check if {sii = "l" ++ BIND ; isCopu lin can8know_VV = can_VV ; -- can (capacity) lin can_VV = mkVV "kar" ; -- can (possibility) lin must_VV = mkVV waa_in ; -lin want_VV = mkVV (mkV "rabid" "rab" "rab") subjunctive ; +lin want_VV = mkVV (mkV "rab" "rabaa") subjunctive ; ------