From 996a599920feb82ce1415ee7e01a15370b5d3d10 Mon Sep 17 00:00:00 2001 From: eldada Date: Sun, 25 Jun 2006 17:07:08 +0000 Subject: [PATCH] arabic.patch --- lib/resource-1.0/arabic/AdjectiveAra.gf | 9 +- lib/resource-1.0/arabic/AdverbAra.gf | 14 +- lib/resource-1.0/arabic/CatAra.gf | 9 +- lib/resource-1.0/arabic/LexiconAra.gf | 480 +++++++++-------- lib/resource-1.0/arabic/ParadigmsAra.gf | 656 ++++++++++------------- lib/resource-1.0/arabic/ResAra.gf | 41 +- lib/resource-1.0/arabic/StructuralAra.gf | 46 +- 7 files changed, 586 insertions(+), 669 deletions(-) diff --git a/lib/resource-1.0/arabic/AdjectiveAra.gf b/lib/resource-1.0/arabic/AdjectiveAra.gf index 1409627fc..b6e0f551a 100644 --- a/lib/resource-1.0/arabic/AdjectiveAra.gf +++ b/lib/resource-1.0/arabic/AdjectiveAra.gf @@ -13,12 +13,11 @@ concrete AdjectiveAra of Adjective = CatAra ** open ResAra, Prelude in { } } }; --- ComparA a np = { --- s = \\_ => a.s ! AAdj Compar ++ "تهَن" ++ np.s ! Nom ; --- isPre = False --- } ; +-- ComparA a np = { +-- s = \\_ => a.s ! AAdj Compar ++ "مِنْ" ++ np.s ! Gen ; +-- } ; -- ----- $SuperlA$ belongs to determiner syntax in $Noun$. +-- $SuperlA$ belongs to determiner syntax in $Noun$. -- -- ComplA2 a np = { -- s = \\_ => a.s ! AAdj Posit ++ a.c2 ++ np.s ! Acc ; diff --git a/lib/resource-1.0/arabic/AdverbAra.gf b/lib/resource-1.0/arabic/AdverbAra.gf index 0562ef1b8..f42480b99 100644 --- a/lib/resource-1.0/arabic/AdverbAra.gf +++ b/lib/resource-1.0/arabic/AdverbAra.gf @@ -1,16 +1,16 @@ concrete AdverbAra of Adverb = CatAra ** open ResAra, Prelude in { --- --- lin --- PositAdvAdj a = {s = a.s ! AAdv} ; + + lin + PositAdvAdj a = {s = a.s ! Masc ! Sg ! Indef ! Acc} ; -- ComparAdvAdj cadv a np = { --- s = cadv.s ++ a.s ! AAdv ++ "تهَن" ++ np.s ! Nom +-- s = cadv.s ++ a.s ! AAdv ++ "مِنْ" ++ np.s ! Gen -- } ; -- ComparAdvAdjS cadv a s = { -- s = cadv.s ++ a.s ! AAdv ++ "تهَن" ++ s.s -- } ; --- --- PrepNP prep np = {s = prep.s ++ np.s ! Acc} ; --- + + PrepNP prep np = {s = prep.s ++ np.s ! Gen} ; + -- AdAdv = cc2 ; -- -- SubjS = cc2 ; diff --git a/lib/resource-1.0/arabic/CatAra.gf b/lib/resource-1.0/arabic/CatAra.gf index 7d63ecdcd..597b3c70c 100644 --- a/lib/resource-1.0/arabic/CatAra.gf +++ b/lib/resource-1.0/arabic/CatAra.gf @@ -7,7 +7,6 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in { -- Phrase Utt = {s : Gender => Str}; --- Voc = {s : Str} ; -- Tensed/Untensed @@ -34,13 +33,7 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in { -- RP = {s : Case => Str ; a : RAgr} ; -- -- Verb --- -{- - VP = { - s : Tense => Polarity => Order => Agr => Str; - comp : NP - }; --} + VP = ResAra.VP ; Comp = ResAra.Comp ; --{s : AAgr => Case => Str} ; -- SC = {s : Str} ; diff --git a/lib/resource-1.0/arabic/LexiconAra.gf b/lib/resource-1.0/arabic/LexiconAra.gf index dfd9acbd3..e6897f46e 100644 --- a/lib/resource-1.0/arabic/LexiconAra.gf +++ b/lib/resource-1.0/arabic/LexiconAra.gf @@ -13,176 +13,194 @@ flags airplane_N = sdfN "ط؟ر" "فاعِلة" Fem NoHum ; answer_V2S = dirV2 (v3 "جوب") ; - apartment_N = regN "شقّ" "فِعّة" "فِعَل" Fem NoHum ; + apartment_N = brkN "شقّ" "فِعّة" "فِعَل" Fem NoHum ; apple_N = sdfN "تفح" "فِعّالة" Fem NoHum ; - art_N = regN "فنّ" "فَعّ" "فُعُول" Masc NoHum ; - ask_V2Q = dirV2 (v1 "س؟ل" a a) ; - baby_N = regN "طفل" "فِعل" "أَفعال" Masc Hum; - bad_A = regA "سي؟" "فَعِّل" ; - bank_N = regN "بنك" "فَعل" "فُعُول" Masc NoHum ; - beautiful_A = regA "جمل" "فَعِيل" ; + art_N = brkN "فنّ" "فَعّ" "فُعُول" Masc NoHum ; + ask_V2Q = dirV2 (regV "يَس؟َل") ; +-- ask_V2Q = dirV2 (v1 "س؟ل" a a) ; + baby_N = brkN "طفل" "فِعل" "أَفعال" Masc Hum; + bad_A = sndA "سو؟" "فَيِّع" ; + bank_N = brkN "بنك" "فَعل" "فُعُول" Masc NoHum ; + beautiful_A = sndA "جمل" "فَعِيل" ; become_VA = mkVA (v4 "صبح") ; beer_N = sdfN "بير" "فِعلة" Fem NoHum ; beg_V2V = dirV2 (v5 "وسل") ; - big_A = regA "كبر" "فَعِيل" ; + big_A = sndA "كبر" "فَعِيل" ; bike_N = sdfN "درج" "فَعّالة" Fem NoHum ; - bird_N = regN "طير" "فَعل" "فُعُول" Masc NoHum; + bird_N = brkN "طير" "فَعل" "فُعُول" Masc NoHum; black_A = clrA "سود" ; blue_A = clrA "زرق" ; - boat_N = regN "قرب" "فاعِل" "فَواعِل" Masc NoHum ; - book_N = regN "كتب" "فِعال" "فُعُل" Masc NoHum ; + boat_N = brkN "قرب" "فاعِل" "فَواعِل" Masc NoHum ; + book_N = brkN "كتب" "فِعال" "فُعُل" Masc NoHum ; boot_N = sdfN "جزم" "فَعلة" Fem NoHum ; - boss_N = regN "دور" "مُفِيع" "مُفَعاء" Masc Hum ; - boy_N = regN "صبي" "فَعِل" "فُعلان" Masc Hum ; - bread_N = regN "خبز" "فُعل" "أَفعال" Masc NoHum ; - break_V2 = dirV2 (v1 "كسر" a u) ; - broad_A = regA "وسع" "فاعِل" ; - brother_N2 = regN "؟خو" "فَع" "فِعلة" Masc Hum ; --FIXME - brown_A = regA "بني" "فُعِّل"; + boss_N = brkN "دور" "مُفِيع" "مُفَعاء" Masc Hum ; + boy_N = brkN "صبي" "فَعِل" "فُعلان" Masc Hum ; + bread_N = brkN "خبز" "فُعل" "أَفعال" Masc NoHum ; + break_V2 = dirV2 (regV "يَكسُر") ; +-- break_V2 = dirV2 (v1 "كسر" a u) ; + broad_A = sndA "وسع" "فاعِل" ; + brother_N2 = brkN "؟خو" "فَع" "فِعلة" Masc Hum ; --FIXME + brown_A = sndA "بني" "فُعِّل"; butter_N = sdfN "سبد" "فُعلة" Fem NoHum ; buy_V2 = dirV2 (v8 "شري") ; camera_N = sdfN "كمر" "فاعِيلا" Fem NoHum ; -- |Alö taSwIr cap_N = sdfN "قبع" "فُعَّلة" Fem NoHum ; --qalnUsö car_N = sdfN "سير" "فَعّالة" Fem NoHum ; carpet_N = sdfN "سجد" "فَعّالة" Fem NoHum ; - cat_N = regN "هرّ" "فِعّة" "فِعَل" Fem NoHum ; - ceiling_N = regN "سقف" "فَعل" "أَفعُل" Masc NoHum ; - chair_N = regN "كرس" "فُعلِي" "فَعالِي" Masc NoHum ; - cheese_N = regN "جبن" "فُعلة" "أَفعال" Fem NoHum ; - child_N = regN "ولد" "فَعَل" "أَفعال" Masc Hum ; - church_N = regN "كنس" "فَعِيلة" "فَعاٱِل" Fem Hum ; - city_N = regN "مدن" "فَعِيلة" "فُعُل" Fem NoHum ; - clean_A = regA "نظف" "فَعِيل" ; - clever_A = regA "جهد" "مُفتَعِل" ; + cat_N = brkN "هرّ" "فِعّة" "فِعَل" Fem NoHum ; + ceiling_N = brkN "سقف" "فَعل" "أَفعُل" Masc NoHum ; + chair_N = brkN "كرس" "فُعلِي" "فَعالِي" Masc NoHum ; + cheese_N = brkN "جبن" "فُعلة" "أَفعال" Fem NoHum ; + child_N = brkN "ولد" "فَعَل" "أَفعال" Masc Hum ; + church_N = brkN "كنس" "فَعِيلة" "فَعاٱِل" Fem Hum ; + city_N = brkN "مدن" "فَعِيلة" "فُعُل" Fem NoHum ; + clean_A = sndA "نظف" "فَعِيل" ; + clever_A = sndA "جهد" "مُفتَعِل" ; close_V2 = dirV2 (v4 "غلق") ; - coat_N = regN "عطف" "مِفعَل" "مَفاعِل" Masc NoHum ; - cold_A = regA "برد" "فاعِل" ; + coat_N = brkN "عطف" "مِفعَل" "مَفاعِل" Masc NoHum ; + cold_A = sndA "برد" "فاعِل" ; come_V = v1 "جي؟" a i ; --check - computer_N = regN "حسب" "فاعُول" "فَواعِيل" Masc NoHum ; - country_N = regN "بلد" "فَعَل" "فِعال" Masc NoHum ; - cousin_N = regN "قرب" "فَعِيل" "أَفعِلاء" Masc Hum ; -- (aDAc - love_N = regN "حبّ" "فُعّ" "فُعّ" Masc NoHum ; -- no plur + long_A = sndA "طول" "فَعِيل" ; + lose_V2 = dirV2 (regV "خَسِر") ; --Dayyac, >aDAc +-- lose_V2 = dirV2 (v1 "خسر" i a) ; --Dayyac, >aDAc + love_N = brkN "حبّ" "فُعّ" "فُعّ" Masc NoHum ; -- no plur love_V2 = dirV2 (v1 "حبّ" a i) ; - man_N = regN "رجل" "فَعُل" "فِعال" Masc Hum ; - married_A2 = mkA2 (regA "زوج" "مُتَفَعِّل") "مِن" ; - meat_N = regN "لحم" "فَعلة" "فُعُول" Masc NoHum ; - milk_N = regN "حلب" "فَعِيل" "فَعِيل" Masc NoHum ; --no plur - moon_N = regN "قمر" "فَعَل" "أَفعال" Masc NoHum ; + man_N = brkN "رجل" "فَعُل" "فِعال" Masc Hum ; + married_A2 = mkA2 (sndA "زوج" "مُتَفَعِّل") "مِن" ; + meat_N = brkN "لحم" "فَعلة" "فُعُول" Masc NoHum ; + milk_N = brkN "حلب" "فَعِيل" "فَعِيل" Masc NoHum ; --no plur + moon_N = brkN "قمر" "فَعَل" "أَفعال" Masc NoHum ; mother_N2 = sdfN "؟م" "فُعّ" Fem Hum ; - mountain_N = regN "جبل" "فَعَل" "فِعال" Masc NoHum ; + mountain_N = brkN "جبل" "فَعَل" "فِعال" Masc NoHum ; music_N = mkN (reg "مُوسِيقَى" "مُوسِيقَى") Fem NoHum ; --no plur - narrow_A = regA "ضيق" "فَعِّل" ; - new_A = regA "جدّ" "فَعِيل" ; - newspaper_N = regN "صحف" "فَعِيلة" "فُعُل" Fem NoHum ; - oil_N = regN "زيت" "فَعل" "فُعُول" Masc NoHum ; - old_A = regA "قدم" "فَعِيل" ; - open_V2 = dirV2 (v1 "فتح" a a ) ; - paint_V2A = mkV2A (v1 "دهن" a u ) [] ; - paper_N = regN "ورق" "فَعَلة" "أَفعال" Fem NoHum ; + narrow_A = sndA "ضيق" "فَعِّل" ; + new_A = sndA "جدّ" "فَعِيل" ; + newspaper_N = brkN "صحف" "فَعِيلة" "فُعُل" Fem NoHum ; + oil_N = brkN "زيت" "فَعل" "فُعُول" Masc NoHum ; + old_A = sndA "قدم" "فَعِيل" ; + open_V2 = dirV2 (regV "يَفتَح") ; +-- open_V2 = dirV2 (v1 "فتح" a a ) ; + paint_V2A = mkV2A (regV "يَدهَن" ) [] ; +-- paint_V2A = mkV2A (v1 "دهن" a a ) [] ; + paper_N = brkN "ورق" "فَعَلة" "أَفعال" Fem NoHum ; -- paris_PN = regPN "بارِيس" nonhuman ; - peace_N = regN "سلم" "فَعال" "فَعال" Masc NoHum; --no plur - pen_N = regN "قلم" "فَعَل" "أَفعال" Masc NoHum; + peace_N = brkN "سلم" "فَعال" "فَعال" Masc NoHum; --no plur + pen_N = brkN "قلم" "فَعَل" "أَفعال" Masc NoHum; planet_N = mkN (reg "كَوكَب" "كَواكِب") Masc NoHum ; -- quadriconsonantal plastic_N = mkN (sndf "بلاستِيك") Masc NoHum ; - play_V2 = dirV2 (v1 "لعب" i a) ; + play_V2 = dirV2 (regV "لَعِب") ; +-- play_V2 = dirV2 (v1 "لعب" i a) ; policeman_N = sdmN "شرط" "فِعلِي" Masc Hum ; - priest_N = regN "قسّ" "فِعِّيل" "أَفِعّة" Masc Hum ; - probable_AS = mkAS (regA "مكن" "مُفعِل") ; + priest_N = brkN "قسّ" "فِعِّيل" "أَفِعّة" Masc Hum ; + probable_AS = mkAS (sndA "مكن" "مُفعِل") ; queen_N = sdfN "ملك" "فَعِلة" Fem Hum ; radio_N = mkN (sndf "راديُو") Masc NoHum ; - rain_V0 = mkV0 (v1 "مطر" a u) ; - read_V2 = dirV2 (v1 "قر؟" a a ) ; + rain_V0 = mkV0 (regV "يَمطُر") ; +-- rain_V0 = mkV0 (v1 "مطر" a u) ; + read_V2 = dirV2 (regV "يَقرَ؟") ; +-- read_V2 = dirV2 (v1 "قر؟" a a ) ; red_A = clrA "حمر" ; - religion_N = regN "دين" "فِعل" "أَفعال" Masc NoHum ; - restaurant_N = regN "طعم" "مَفعَل" "مَفاعِل" Masc NoHum ; - river_N = regN "نهر" "فَعل" "أَفعال" Masc NoHum ; - rock_N = regN "صخر" "فَعلة" "فُعُول" Fem NoHum ; - roof_N = regN "سطح" "فَعل" "أَفعُل" Masc NoHum ; - rubber_N = regN "مطّ" "فَعّال" "فَعّال" Masc NoHum ; -- no hum - run_V = v1 "ركض" a u ; + religion_N = brkN "دين" "فِعل" "أَفعال" Masc NoHum ; + restaurant_N = brkN "طعم" "مَفعَل" "مَفاعِل" Masc NoHum ; + river_N = brkN "نهر" "فَعل" "أَفعال" Masc NoHum ; + rock_N = brkN "صخر" "فَعلة" "فُعُول" Fem NoHum ; + roof_N = brkN "سطح" "فَعل" "أَفعُل" Masc NoHum ; + rubber_N = brkN "مطّ" "فَعّال" "فَعّال" Masc NoHum ; -- no hum + run_V = regV "يَركُض" ; +-- run_V = v1 "ركض" a u ; say_VS = mkVS (v1 "قول" a u) ; --check - school_N = regN "درس" "مَسفعَلة" "مَفاعِل" Masc NoHum ; - science_N = regN "علم" "فِعل" "فُعُول" Masc NoHum ; - sea_N = regN "بحر" "فَعل" "فُعُول" Masc NoHum ; - seek_V2 = dirV2 (v1 "طلب" a u) ; + school_N = brkN "درس" "مَسفعَلة" "مَفاعِل" Masc NoHum ; + science_N = brkN "علم" "فِعل" "فُعُول" Masc NoHum ; + sea_N = brkN "بحر" "فَعل" "فُعُول" Masc NoHum ; + seek_V2 = dirV2 (regV "يَطلُب") ; +-- seek_V2 = dirV2 (v1 "طلب" a u) ; see_V2 = dirV2 (v1 "ر؟ي" a a) ; sell_V3 = dirdirV3 (v1 "بيع" a i) ; --check send_V3 = dirdirV3 (v4 "رسل") ; - sheep_N = regN "خرف" "فَعُول" "فِعال" Masc NoHum ; - ship_N = regN "سفن" "فَعِيلة" "فُعُل" Fem NoHum ; - shirt_N = regN "قمص" "فَعِيل" "فُعلان" Masc NoHum ; - shoe_N = regN "حذو" "فِعاء" "أَفعِية" Masc NoHum ; - shop_N = regN "تجر" "مَفعَل" "مَفاعِل" Masc NoHum ; - short_A = regA "قصر" "فَعِيل" ; - silver_N = regN "فضّ" "فِعّة" "فِعَل" Fem NoHum ; - sister_N = regN "؟خو" "فُعت" "فَعَوات" Fem Hum ; --FIXME + sheep_N = brkN "خرف" "فَعُول" "فِعال" Masc NoHum ; + ship_N = brkN "سفن" "فَعِيلة" "فُعُل" Fem NoHum ; + shirt_N = brkN "قمص" "فَعِيل" "فُعلان" Masc NoHum ; + shoe_N = brkN "حذو" "فِعاء" "أَفعِية" Masc NoHum ; + shop_N = brkN "تجر" "مَفعَل" "مَفاعِل" Masc NoHum ; + short_A = sndA "قصر" "فَعِيل" ; + silver_N = brkN "فضّ" "فِعّة" "فِعَل" Fem NoHum ; + sister_N = brkN "؟خو" "فُعت" "فَعَوات" Fem Hum ; --FIXME sleep_V = v1 "نوم" i a ; --check - small_A = regA "صغر" "فَعِيل" ; + small_A = sndA "صغر" "فَعِيل" ; snake_N = sdfN "حيّ" "فَعّة" Fem NoHum ; - sock_N = regN "جرب" "فَوعَل" "فَواعِل" Masc NoHum ; + sock_N = brkN "جرب" "فَوعَل" "فَواعِل" Masc NoHum ; speak_V2 = dirV2 (v5 "كلم") ; - star_N = regN "نجم" "فَعل" "فُعُول" Masc NoHum ; --najmö - steel_N = regN "فلذ" "فُوعال" "فَواعِل" Masc NoHum ; - stone_N = regN "حجر" "فَعَل" "أَفعال" Masc NoHum ; - stove_N = regN "وقد" "مَفعِل" "مَفاعِل" Masc NoHum ; - student_N = regN "طلب" "فاعِل" "فُعّال" Masc Hum ; --tilmI* + star_N = brkN "نجم" "فَعل" "فُعُول" Masc NoHum ; --najmö + steel_N = brkN "فلذ" "فُوعال" "فَواعِل" Masc NoHum ; + stone_N = brkN "حجر" "فَعَل" "أَفعال" Masc NoHum ; + stove_N = brkN "وقد" "مَفعِل" "مَفاعِل" Masc NoHum ; + student_N = brkN "طلب" "فاعِل" "فُعّال" Masc Hum ; --tilmI* stupid_A = clrA "بله" ; - sun_N = regN "شمس" "فَعل" "فُعُول" Fem NoHum ; + sun_N = brkN "شمس" "فَعل" "فُعُول" Fem NoHum ; switch8off_V2 = dirV2 (v4 "طف؟") ; switch8on_V2 = dirV2 (v4 "شعل") ; table_N = sdfN "طول" "فاعِلة" Fem NoHum ; @@ -190,147 +208,153 @@ flags teacher_N = sdmN "علم" "مُفَعِّل" Masc Hum ; --mucal~imö teach_V2 = dirV2 (v2 "علم") ; television_N = mkN (sndf "تِلِفِزيُون") Masc NoHum ; - thick_A = regA "سمك" "فَعِيل" ; - thin_A = regA "رفع" "فَعِيل" ; + thick_A = sndA "سمك" "فَعِيل" ; + thin_A = sndA "رفع" "فَعِيل" ; train_N = sdfN "قطر" "فِعال" Masc NoHum; travel_V = v3 "سفر" ; - tree_N = regN "شجر" "فَعلة" "أَفعال" Fem NoHum ; - ugly_A = regA "قبح" "فَعِيل" ; - understand_V2 = dirV2 (v1 "فهم" i a ) ; + tree_N = brkN "شجر" "فَعلة" "أَفعال" Fem NoHum ; + ugly_A = sndA "قبح" "فَعِيل" ; + understand_V2 = dirV2 (regV "فَهِم") ; +-- understand_V2 = dirV2 (v1 "فهم" i a ) ; university_N = sdfN "جمع" "فاعِلة" Fem NoHum ; - village_N = regN "قري" "فَعلة" "فُعَى" Fem NoHum ; --Daycö + village_N = brkN "قري" "فَعلة" "فُعَى" Fem NoHum ; --Daycö wait_V2 = dirV2 (v8 "نظر") ; walk_V = v1 "مشي" a i ; --check - warm_A = regA "دف؟" "فاعِل" ; - war_N = regN "حرب" "فَعل" "فُعُول" Fem NoHum ; + warm_A = sndA "دف؟" "فاعِل" ; + war_N = brkN "حرب" "فَعل" "فُعُول" Fem NoHum ; watch_V2 = dirV2 (v3 "شهد") ; water_N = mkN (reg "ماء" "مِياه") Fem NoHum ; --"موه" "فاء" "فِياع" ?? white_A = clrA "بيض" ; - window_N = regN "نفذ" "فاعِلة" "فَواعِل" Fem NoHum ; --$ub~Ak - wine_N = regN "خمر" "فَعل" "فُعُول" Masc NoHum ; - win_V2 = dirV2 (v1 "ربح" a i) ; + window_N = brkN "نفذ" "فاعِلة" "فَواعِل" Fem NoHum ; --$ub~Ak + wine_N = brkN "خمر" "فَعل" "فُعُول" Masc NoHum ; + win_V2 = dirV2 (regV "رَبِح") ; +-- win_V2 = dirV2 (v1 "ربح" i a) ; woman_N = mkN (reg "إِمرَأَة" "نِسوَة") Fem Hum ; wonder_VQ = mkVQ (v6 "س؟ل") ; - wood_N = regN "خشب" "فَعَل" "أَفعال" Masc NoHum ; - write_V2 = dirV2 (v1 "كتب" a u) ; + wood_N = brkN "خشب" "فَعَل" "أَفعال" Masc NoHum ; + write_V2 = dirV2 (regV "يَكتُب") ; +-- write_V2 = dirV2 (v1 "كتب" a u) ; yellow_A = clrA "صفر" ; - young_A = regA "شبّ" "فاعّ" ; + young_A = sndA "شبّ" "فاعّ" ; - do_V2 = dirV2 (v1 "فعل" a a ) ; + do_V2 = dirV2 (regV "يَفعَل") ; +-- do_V2 = dirV2 (v1 "فعل" a a ) ; now_Adv = mkAdv "الآن" ; already_Adv = mkAdv "سابِقاً" ; - song_N = regN "غني" "أَفعِلة" "أَفاعِي" Fem NoHum ; - add_V3 = dirV3 (v1 "جمع" a a) "وَ" ; - number_N = regN "رقم" "فَعل" "أَفعال" Masc NoHum ; --cadad + song_N = brkN "غني" "أَفعِلة" "أَفاعِي" Fem NoHum ; + add_V3 = dirV3 (regV "يَجمَع") "وَ" ; +-- add_V3 = dirV3 (v1 "جمع" a a) "وَ" ; + number_N = brkN "رقم" "فَعل" "أَفعال" Masc NoHum ; --cadad put_V2 = dirV2 (v1 "وضع" a a ); stop_V = v5 "وقف" ; - jump_V = v1 "قفز" a i ; + jump_V = regV "يَقفِز" ; +-- jump_V = v1 "قفز" a i ; left_Ord = mkOrd "أَيسَر" "يُسرَى"; right_Ord = mkOrd "أَيمَن" "يُمنَى" ; far_Adv = mkAdv "بَعِيداً" ; - correct_A = regA "صحّ" "فَعِيل" ; - dry_A = regA "نشف" "فاعِل" ; - dull_A = regA "بهت" "فاعِل" ; - full_A = regA "مل؟" "فَعِيل" ; - heavy_A = regA "ثقل" "فَعِيل" ; - near_A = regA "قرب" "فَعِيل" ; - rotten_A = regA "فسد" "فاعِل" ; - round_A = regA "دور" "مُفَعَّل" ; - sharp_A = regA "حدّ" "فاعّ" ; - smooth_A = regA "نعم" "فاعِل" ; - straight_A = regA "قوم" "مُستَفِيع" ; - wet_A = regA "رطب" "فَعِل" ; - wide_A = regA "وسع" "فاعِل" ; + correct_A = sndA "صحّ" "فَعِيل" ; + dry_A = sndA "نشف" "فاعِل" ; + dull_A = sndA "بهت" "فاعِل" ; + full_A = sndA "مل؟" "فَعِيل" ; + heavy_A = sndA "ثقل" "فَعِيل" ; + near_A = sndA "قرب" "فَعِيل" ; + rotten_A = sndA "فسد" "فاعِل" ; + round_A = sndA "دور" "مُفَعَّل" ; + sharp_A = sndA "حدّ" "فاعّ" ; + smooth_A = sndA "نعم" "فاعِل" ; + straight_A = sndA "قوم" "مُستَفِيع" ; + wet_A = sndA "رطب" "فَعِل" ; + wide_A = sndA "وسع" "فاعِل" ; animal_N = sdfN "حيّ" "فَعَوان" Masc NoHum ; - ashes_N = regN "رمد" "فَعال" "أَفعِلة" Masc NoHum; - back_N = regN "ظهر" "فَعل" "فُعُول" Masc NoHum; - bark_N = regN "نبح" "فَعل" "فُعال" Masc NoHum; - belly_N = regN "بطن" "فَعل" "فُعُول" Fem NoHum; - blood_N = regN "دم" "فَع" "فِعاء" Masc NoHum; - bone_N = regN "عظم" "فَعلة" "فِعال" Fem NoHum; - breast_N = regN "صدر" "فَعل" "فُعُول" Masc NoHum; - cloud_N = regN "غيم" "فَعلة" "فُعُول" Fem NoHum; - day_N = regN "يوم" "فَعل" "أَفّاع" Masc NoHum; - dust_N = regN "غبر" "فُعال" "أَفعِلة" Masc NoHum; - ear_N = regN "؟ذن" "فُعل" "أَفعال" Fem NoHum; - earth_N = regN "ترب" "فُعلة" "فُعَل" Fem NoHum; + ashes_N = brkN "رمد" "فَعال" "أَفعِلة" Masc NoHum; + back_N = brkN "ظهر" "فَعل" "فُعُول" Masc NoHum; + bark_N = brkN "نبح" "فَعل" "فُعال" Masc NoHum; + belly_N = brkN "بطن" "فَعل" "فُعُول" Fem NoHum; + blood_N = brkN "دم" "فَع" "فِعاء" Masc NoHum; + bone_N = brkN "عظم" "فَعلة" "فِعال" Fem NoHum; + breast_N = brkN "صدر" "فَعل" "فُعُول" Masc NoHum; + cloud_N = brkN "غيم" "فَعلة" "فُعُول" Fem NoHum; + day_N = brkN "يوم" "فَعل" "أَفّاع" Masc NoHum; + dust_N = brkN "غبر" "فُعال" "أَفعِلة" Masc NoHum; + ear_N = brkN "؟ذن" "فُعل" "أَفعال" Fem NoHum; + earth_N = brkN "ترب" "فُعلة" "فُعَل" Fem NoHum; egg_N = sdfN "بيض" "فَعلة" Fem NoHum; - eye_N = regN "عين" "فَعل" "فُعُول" Fem NoHum; - fat_N = regN "دهن" "فُعل" "فُعُول" Masc NoHum ; + eye_N = brkN "عين" "فَعل" "فُعُول" Fem NoHum; + fat_N = brkN "دهن" "فُعل" "فُعُول" Masc NoHum ; feather_N = sdfN "ريش" "فِعلة" Fem NoHum; - fingernail_N = regN "ظفر" "فُعل" "أَفاعِل" Masc NoHum; - fire_N = regN "نور" "فاع" "فِيعان" Fem NoHum; - flower_N = regN "زهر" "فَعلة" "فُعُول" Fem NoHum; - fog_N = regN "ضبّ" "فَعال" "فَعال" Masc NoHum; --no plural ? - foot_N = regN "قدم" "فَعَل" "أَفعال" Fem NoHum; + fingernail_N = brkN "ظفر" "فُعل" "أَفاعِل" Masc NoHum; + fire_N = brkN "نور" "فاع" "فِيعان" Fem NoHum; + flower_N = brkN "زهر" "فَعلة" "فُعُول" Fem NoHum; + fog_N = brkN "ضبّ" "فَعال" "فَعال" Masc NoHum; --no plural ? + foot_N = brkN "قدم" "فَعَل" "أَفعال" Fem NoHum; forest_N = sdfN "غيب" "فاعة" Fem NoHum; - grass_N = regN "عشب" "فُعلة" "أَفعال" Fem NoHum; - guts_N = regN "حشو" "فَعا" "أَفعاء" Fem NoHum; + grass_N = brkN "عشب" "فُعلة" "أَفعال" Fem NoHum; + guts_N = brkN "حشو" "فَعا" "أَفعاء" Fem NoHum; hair_N = sdfN "شعر" "فَعلة" Fem NoHum ; - hand_N = regN "يد" "فَع" "أَفاعِي" Fem NoHum ; - head_N = regN "ر؟س" "فَعل" "فُعُول" Masc NoHum; - heart_N = regN "قلب" "فَعل" "فُعُول" Masc NoHum; - horn_N = regN "قرن" "فَعل" "فُعُول" Masc NoHum; - husband_N = regN "زوج" "فَعل" "أَفعال" Masc NoHum; - ice_N = regN "ثلج" "فَعل" "فُعُول" Masc NoHum; - knee_N = regN "ركب" "فُعلة" "فُعَل" Fem NoHum; - leaf_N = regN "ورق" "فَعَلة" "أَفعال" Fem NoHum; - leg_N = regN "رجل" "فِعل" "أَفعُل" Fem NoHum; - liver_N = regN "كبد" "فَعِل" "أَفعال" Masc NoHum ; + hand_N = brkN "يد" "فَع" "أَفاعِي" Fem NoHum ; + head_N = brkN "ر؟س" "فَعل" "فُعُول" Masc NoHum; + heart_N = brkN "قلب" "فَعل" "فُعُول" Masc NoHum; + horn_N = brkN "قرن" "فَعل" "فُعُول" Masc NoHum; + husband_N = brkN "زوج" "فَعل" "أَفعال" Masc NoHum; + ice_N = brkN "ثلج" "فَعل" "فُعُول" Masc NoHum; + knee_N = brkN "ركب" "فُعلة" "فُعَل" Fem NoHum; + leaf_N = brkN "ورق" "فَعَلة" "أَفعال" Fem NoHum; + leg_N = brkN "رجل" "فِعل" "أَفعُل" Fem NoHum; + liver_N = brkN "كبد" "فَعِل" "أَفعال" Masc NoHum ; louse_N = sdfN "قمل" "فَعلة" Fem NoHum; - mouth_N = regN "فوه" "فُعل" "أَفعال" Masc NoHum ; - name_N = regN "؟سم" "فِعل" "فَعالِي" Masc NoHum; - neck_N = regN "رقب" "فَعَلة" "فِعال" Fem NoHum; - night_N = regN "ليل" "فَعلة" "فَعالِي" Fem NoHum; --plural? - nose_N = regN "؟نف" "فَعل" "فُعُول" Masc NoHum; - person_N = regN "شخص" "فَعل" "أَفعال" Masc Hum; - rain_N = regN "مطر" "فَعَل" "أَفعال" Masc NoHum; - road_N = regN "طرق" "فَعِيل" "فُعُل" Fem NoHum; - root_N = regN "جذر" "فَعل" "فُعُول" Masc NoHum ; - rope_N = regN "حبل" "فَعل" "فِعال" Masc NoHum; - salt_N = regN "ملح" "فِعل" "أَفعال" Masc NoHum; - sand_N = regN "رمل" "فَعل" "فِعال" Masc NoHum; - seed_N = regN "بذر" "فَعل" "فُعُول" Masc NoHum; - skin_N = regN "جلد" "فِعل" "فُعُول" Masc NoHum; + mouth_N = brkN "فوه" "فُعل" "أَفعال" Masc NoHum ; + name_N = brkN "؟سم" "فِعل" "فَعالِي" Masc NoHum; + neck_N = brkN "رقب" "فَعَلة" "فِعال" Fem NoHum; + night_N = brkN "ليل" "فَعلة" "فَعالِي" Fem NoHum; --plural? + nose_N = brkN "؟نف" "فَعل" "فُعُول" Masc NoHum; + person_N = brkN "شخص" "فَعل" "أَفعال" Masc Hum; + rain_N = brkN "مطر" "فَعَل" "أَفعال" Masc NoHum; + road_N = brkN "طرق" "فَعِيل" "فُعُل" Fem NoHum; + root_N = brkN "جذر" "فَعل" "فُعُول" Masc NoHum ; + rope_N = brkN "حبل" "فَعل" "فِعال" Masc NoHum; + salt_N = brkN "ملح" "فِعل" "أَفعال" Masc NoHum; + sand_N = brkN "رمل" "فَعل" "فِعال" Masc NoHum; + seed_N = brkN "بذر" "فَعل" "فُعُول" Masc NoHum; + skin_N = brkN "جلد" "فِعل" "فُعُول" Masc NoHum; sky_N = sdfN "سمو" "فَعاء" Fem NoHum; - smoke_N = regN "دخن" "فُعال" "أَفعِلة" Masc NoHum; - snow_N = regN "ثلج" "فَعل" "فُعُول" Masc NoHum; - stick_N = regN "عصو" "فَعا" "فِعِي" Masc NoHum ; --"عصو" - tail_N = regN "ذنب" "فَعَل" "أَفعال" Masc NoHum; - tongue_N = regN "لسن" "فِعال" "أَفعِلة" Masc NoHum; - tooth_N = regN "سنّ" "فِعل" "أَفعال" Masc NoHum ; + smoke_N = brkN "دخن" "فُعال" "أَفعِلة" Masc NoHum; + snow_N = brkN "ثلج" "فَعل" "فُعُول" Masc NoHum; + stick_N = brkN "عصو" "فَعا" "فِعِي" Masc NoHum ; --"عصو" + tail_N = brkN "ذنب" "فَعَل" "أَفعال" Masc NoHum; + tongue_N = brkN "لسن" "فِعال" "أَفعِلة" Masc NoHum; + tooth_N = brkN "سنّ" "فِعل" "أَفعال" Masc NoHum ; wife_N = sdfN "زوج" "فَعلة" Fem Hum; - wind_N = regN "ريح" "فِعل" "فِعال" Fem NoHum; - wing_N = regN "جنح" "فَعال" "أَفعِلة" Masc NoHum ; - worm_N = regN "دود" "فُعلة" "فِيعان" Fem NoHum ; + wind_N = brkN "ريح" "فِعل" "فِعال" Fem NoHum; + wing_N = brkN "جنح" "فَعال" "أَفعِلة" Masc NoHum ; + worm_N = brkN "دود" "فُعلة" "فِيعان" Fem NoHum ; year_N = sdfN "سن" "فَعة" Fem NoHum ; - blow_V = v1 "نفخ" a u ; + blow_V = regV "يَنفُخ" ; breathe_V = dirV2 (v5 "نفس") ; - burn_V = v1 "حرق" a i ; - dig_V = v1 "حفر" a i ; + burn_V = regV "يَحرِق" ; + dig_V = regV "يَحفِر" ; fall_V = v1 "وقع" a a ; float_V = v1 "عوم" a u ; flow_V = v1 "سيل" a i ; fly_V = v1 "طير" a i ; freeze_V = v2 "جمد" ; give_V3 = dirdirV3 (v4 "عطي") ; - laugh_V = v1 "ضحك" i a ; - lie_V = v1 "كذب" a i ; - play_V = v1 "لعب" i a ; + laugh_V = regV "ضَحِك" ; + lie_V = regV "يَكذِب" ; + play_V = regV "لَعِب" ; sew_V = v1 "خيط" a i ; sing_V = v2 "غني" ; - sit_V = v1 "قعد" a u ; + sit_V = regV "يَقعُد" ; smell_V = v1 "شمّ" i a ; - spit_V = v1 "بصق" a u ; + spit_V = regV "يَبصُق" ; stand_V = v1 "وقف" a i ; swell_V = v8 "نفخ" ; - swim_V = v1 "سبح" a a ; + swim_V = regV "يَسبَح" ; think_V = v2 "فكر" ; - turn_V = v1 "برم" a u ; + turn_V = regV "يَبرُم" ; vomit_V = v5 "قي؟" ; bite_V2 = dirV2 ( v1 "عضّ" a a ) ; @@ -338,23 +362,23 @@ flags cut_V2 = dirV2 (v1 "قصّ" a u) ; fear_V2 = dirV2 (v1 "خوف" i a) ; fight_V2 = dirV2 (v3 "قتل") ; - hit_V2 = dirV2 (v1 "ضرب" a i) ; - hold_V2 = dirV2 (v1 "مسك" a i) ; + hit_V2 = dirV2 (regV "يَضرِب" ) ; + hold_V2 = dirV2 (regV "يَمسِك" ) ; hunt_V2 = dirV2 (v1 "صيد" a i) ; - kill_V2 = dirV2 (v1 "قتل" a u) ; - pull_V2 = dirV2 (v1 "سحب" a a) ; - push_V2 = dirV2 (v1 "دفع" a a) ; - rub_V2 = dirV2 ( v1 "فرك" a u ) ; - scratch_V2 = dirV2 (v1 "خدش" a i) ; + kill_V2 = dirV2 (regV "يَقتُل" ) ; + pull_V2 = dirV2 (regV "يَسحَب") ; + push_V2 = dirV2 (regV "يَدفَع" ) ; + rub_V2 = dirV2 ( regV "يَفرُك" ) ; + scratch_V2 = dirV2 (regV "يَخدِش" ) ; split_V2 = dirV2 ( v2 "قسم" ) ; - squeeze_V2 = dirV2 (v1 "عصر" a i) ; - stab_V2 = dirV2 ( v1 "طعن" a u) ; + squeeze_V2 = dirV2 (regV "يَعصِر" ) ; + stab_V2 = dirV2 ( regV "يَطعُن" ) ; suck_V2 = dirV2 (v1 "مصّ" a u) ; throw_V2 = dirV2 (v1 "رمي" a i) ; - tie_V2 = dirV2 (v1 "ربط" a u) ; - wash_V2 = dirV2 ( v1 "غسل" a i ) ; - wipe_V2 = dirV2 ( v1 "مسح" a a ) ; + tie_V2 = dirV2 (regV "يَربُط" ) ; + wash_V2 = dirV2 ( regV "يَغسِل" ) ; + wipe_V2 = dirV2 ( regV "يَمسَح" ) ; --- other_A = regA "ْتهر" ; +-- other_A = sndA "ْتهر" ; } ; diff --git a/lib/resource-1.0/arabic/ParadigmsAra.gf b/lib/resource-1.0/arabic/ParadigmsAra.gf index 18a18bf2f..884ae8090 100644 --- a/lib/resource-1.0/arabic/ParadigmsAra.gf +++ b/lib/resource-1.0/arabic/ParadigmsAra.gf @@ -20,9 +20,6 @@ -- first we give a handful of patterns that aim to cover all -- regular cases. Then we give a worst-case function $mkC$, which serves as an -- escape to construct the most irregular words of type $C$. --- However, this function should only seldom be needed: we have a --- separate module $IrregularAra$, which covers all irregularly inflected --- words. -- -- The following modules are presupposed: @@ -38,278 +35,48 @@ resource ParadigmsAra = open oper - --lexical paradigms for nouns - - mkN : NTable -> Gender -> Species -> N = - \nsc,gen,spec -> - { s = nsc; - g = gen; - h = spec; - lock_N = <> - }; - - --takes a root string, a singular pattern string, a broken plural - --pattern string, a gender, and species. Gives a noun - regN : Str -> Str -> Str -> Gender -> Species -> N = - \root,sg,pl,gen,spec -> - let { raw = regN' root sg pl gen spec} in - { s = \\n,d,c => - case root of { - _ + "؟" + _ => rectifyHmz(raw.s ! n ! d ! c); - _ => raw.s ! n ! d ! c - }; - g = gen; - h = spec ; lock_N = <> - }; - - regN' : Str -> Str -> Str -> Gender -> Species -> N = - \root,sg,pl,gen,spec -> - let { kitAb = mkWord sg root; - kutub = mkWord pl root - } in mkN (reg kitAb kutub) gen spec; - - --takes a root string, a singular pattern string, a gender, - --and species. Gives a noun whose plural is sound feminine - sdfN : Str -> Str -> Gender -> Species -> N = - \root,sg,gen,spec -> - let { kalima = mkWord sg root; - } in mkN (sndf kalima) gen spec; - - - --takes a root string, a singular pattern string, a gender, - --and species. Gives a noun whose plural is sound masculine - sdmN : Str -> Str -> Gender -> Species -> N = - \root,sg,gen,spec -> - let { mucallim = mkWord sg root; - } in mkN (sndm mucallim) gen spec; - - -- mkN3 : N -> Str -> Str -> N3 = - -- \n,p,q -> n ** {c2 = p ; c3 = q; lock_N3 = <>} ; - - --lexical paradigms for adjectives - - --takes a root string and a pattern string - regA : Str -> Str -> A = - \root,pat -> - let { raw = regA' root pat } in - { s = \\g,n,d,c => - case root of { - _ + "؟" + _ => rectifyHmz(raw.s ! g ! n ! d ! c); - _ => raw.s ! g ! n ! d ! c - }; - lock_A = <> - }; - - regA' : Str -> Str -> A = - \root,pat -> - let { kabIr = mkWord pat root - } in { - s = adj kabIr ; - lock_A = <> - }; - - --takes a root string only - clrA : Str -> A = - \root -> - let { eaHmar = mkWord "أَفعَل" root; - HamrA' = mkWord "فَعلاء" root; - Humr = mkWord "فُعل" root - } in { - s = clr eaHmar HamrA' Humr; - lock_A = <> - }; - - --lexical paradigms for verbs - - v1 : Str -> Vowel -> Vowel -> V = - \rootStr,vPerf,vImpf -> - let { raw = v1' rootStr vPerf vImpf } in - { s = \\vf => - case rootStr of { - _ + "؟" + _ => rectifyHmz(raw.s ! vf); - _ => raw.s ! vf - }; - lock_V = <> - } ; - - - v1' : Str -> Vowel -> Vowel -> Verb = - \rootStr,vPerf,vImpf -> - let { root = mkRoot3 rootStr ; - l = dp 2 rootStr } in --last rootStr - case of { - <"ّ",_> => v1geminate rootStr vPerf vImpf ; - <"و"|"ي",_> => v1defective root vImpf ; - <_,"و"|"ي"> => v1hollow root vImpf ; - _ => v1sound root vPerf vImpf - }; - - - --Verb Form II : faccala +-- Prepositions are used in many-argument functions for rection. - v2 : Str -> V = - \rootStr -> - let { - root = mkRoot3 rootStr - } in { - s = - case root.l of { - "و"|"ي" => (v2defective root).s; - _ => (v2sound root).s - }; - lock_V = <> - }; - - --Verb Form III : fAcala - - v3 : Str -> V = - \rootStr -> - let { - tbc = mkRoot3 rootStr ; - } in { - s = (v3sound tbc).s ; - lock_V = <> - }; - - --Verb Form IV : >afcala - - v4 : Str -> V = - \rootStr -> - let { - root = mkRoot3 rootStr - } in { - s = - case root.l of { - "و"|"ي" => (v4defective root).s; - _ => (v4sound root).s - }; - lock_V = <> - }; - - --Verb Form V : tafaccala - - v5 : Str -> V = - \rootStr -> - let { raw = v5' rootStr } in - { s = \\vf => - case rootStr of { - _ + "؟" + _ => rectifyHmz(raw.s ! vf); - _ => raw.s ! vf - }; - lock_V = <> - }; - - v5' : Str -> V = - \rootStr -> - let { - nfs = mkRoot3 rootStr ; - } in { - s = (v5sound nfs).s ; lock_V = <> - }; - - --Verb Form VI : tafaacala - - v6 : Str -> V = - \rootStr -> - let { - fqm = mkRoot3 rootStr ; - } in { - s = (v6sound fqm).s ; - lock_V = <> - }; - - --Verb Form VIII V = - \rootStr -> - let { - rbT = mkRoot3 rootStr ; - } in { - s = (v8sound rbT).s ; - lock_V = <> - }; - - ----- Prepositions are used in many-argument functions for rection. --- Preposition : Type ; - --2 Nouns - --- Use the function $mkPreposition$ or see the section on prepositions below to --- form other prepositions. --- + +--This is used for loan words or anything that has untreated irregularities +--in the interdigitization process of its words + mkN : NTable -> Gender -> Species -> N ; + +--Takes a root string, a singular pattern string, a broken plural +--pattern string, a gender, and species. Gives a noun. + brkN : Str -> Str -> Str -> Gender -> Species -> N ; + +--Takes a root string, a singular pattern string, a gender, +--and species. Gives a noun whose plural is sound feminine. + sdfN : Str -> Str -> Gender -> Species -> N ; + +--takes a root string, a singular pattern string, a gender, +--and species. Gives a noun whose plural is sound masculine + sdmN : Str -> Str -> Gender -> Species -> N ; + --3 Relational nouns --- --- Relational nouns ("دَُغهتر ْف خ") need a preposition. mkN2 : N -> Preposition -> N2 ; --- Three-place relational nouns ("تهي عْنّعتِْن فرْم خ تْ ي") need two prepositions. - mkN3 : N -> Preposition -> Preposition -> N3 ; +--2 Adjectives + +--Takes a root string and a pattern string + sndA : Str -> Str -> A ; + +--Takes a root string only + clrA : Str -> A ; -----3 Relational common noun phrases ----- ----- In some cases, you may want to make a complex $CN$ into a ----- relational noun (e.g. "تهي ْلد تْون هَلّ ْف"). --- --- cnN2 : CN -> Preposition -> N2 ; --- cnN3 : CN -> Preposition -> Preposition -> N3 ; --- --- ---3 Proper names and noun phrases --- --- Proper names, with a regular genitive, are formed as follows - - mkPN : Str -> Gender -> PN ; - ----- Sometimes you can reuse a common noun as a proper name, e.g. "َنك". --- --- nounPN : N -> PN ; --- ----- To form a noun phrase that can also be plural and have an irregular ----- genitive, you can use the worst-case function. --- --- mkNP : Str -> Str -> Number -> Gender -> NP ; --- -----2 Adjectives --- --3 Two-place adjectives -- -- Two-place adjectives need a preposition for their second argument. mkA2 : A -> Preposition -> A2 ; ----- Comparison adjectives may two more forms. --- --- ADeg : Type ; --- --- mkADeg : (good,better,best,well : Str) -> ADeg ; --- ----- The regular pattern recognizes two common variations: ----- "ي" ("رُدي" - "رُدر" - "رُدست") and ----- "ي" ("هَةّي هَةِّر هَةِّست هَةِّلي") --- --- regADeg : Str -> ADeg ; -- long, longer, longest --- ----- However, the duplication of the final consonant is nor predicted, ----- but a separate pattern is used: --- --- duplADeg : Str -> ADeg ; -- fat, fatter, fattest --- ----- If comparison is formed by "مْري، "most", as in general for ----- long adjective, the following pattern is used: --- --- compoundADeg : A -> ADeg ; -- -/more/most ridiculous --- ----- From a given $ADeg$, it is possible to get back to $A$. --- --- adegA : ADeg -> A ; --- --- --2 Adverbs -- Adverbs are not inflected. Most lexical ones have position @@ -328,26 +95,45 @@ resource ParadigmsAra = open -- build $PP$s in the resource API, just requires a string. mkPreposition : Str -> Preposition ; - mkPrep : Str -> Prep ; -- (These two functions are synonyms.) --2 Verbs --- -----3 Verbs with a particle. ----- ----- The particle, such as in "سوِتعه ْن", is given as a string. --- --- partV : V -> Str -> V ; --- -----3 Reflexive verbs ----- ----- By default, verbs are not reflexive; this function makes them that. --- --- reflV : V -> V ; --- -----3 Two-place verbs --- + +--The verb in the imperfect tense gives the most information + + regV : Str -> V ; + +--Verb Form I : fa`ala, fa`ila, fa`ula + + v1 : Str -> Vowel -> Vowel -> V ; + +--Verb Form II : fa``ala + + v2 : Str -> V ; + +--Verb Form III : faa`ala + + v3 : Str -> V ; + +--Verb Form IV : 'af`ala + + v4 : Str -> V ; + +--Verb Form V : tafa``ala + + v5 : Str -> V ; + +--Verb Form VI : tafaa`ala + + v6 : Str -> V ; + +--Verb Form VIII 'ifta`ala + + v8 : Str -> V ; + +--3 Two-place verbs + -- Two-place verbs need a preposition, except the special case with direct object. -- (transitive verbs). Notice that a particle comes from the $V$. @@ -356,7 +142,7 @@ resource ParadigmsAra = open dirV2 : V -> V2 ; --3 Three-place verbs --- + -- Three-place (ditransitive) verbs need two prepositions, of which -- the first one or both can be absent. @@ -392,113 +178,231 @@ resource ParadigmsAra = open V0, V2S, V2V, V2A, V2Q : Type ; AS, A2S, AV, A2V : Type ; --- -----2 Definitions of paradigms ----- ----- The definitions should not bother the user of the API. So they are ----- hidden from the document. -----. --- --- Gender = MorphoAra.Gender ; --- Number = MorphoAra.Number ; --- Case = MorphoAra.Case ; --- human = Masc ; --- nonhuman = Neutr ; --- masculine = Masc ; --- feminine = Fem ; --- singular = Sg ; --- plural = Pl ; --- nominative = Nom ; --- genitive = Gen ; --- + +--2 Definitions of paradigms + +-- The definitions should not bother the user of the API. So they are +-- hidden from the document. +--. + + regV = \word -> + case word of { + "يَ" + f@_ + c@_ + "ُ" + l@_ => v1 (f+c+l) a u ; + "يَ" + f@_ + c@_ + "ِ" + l@_ => v1 (f+c+l) a i ; + "يَ" + f@_ + c@_ + "َ" + l@_ => v1 (f+c+l) a a ; + f@_ + "َ" + c@_ + "ِ" + l@_ => v1 (f+c+l) i a + }; + + v1 = \rootStr,vPerf,vImpf -> + let { raw = v1' rootStr vPerf vImpf } in + { s = \\vf => + case rootStr of { + _ + "؟" + _ => rectifyHmz(raw.s ! vf); + _ => raw.s ! vf + }; + lock_V = <> + } ; + + + v1' : Str -> Vowel -> Vowel -> Verb = + \rootStr,vPerf,vImpf -> + let { root = mkRoot3 rootStr ; + l = dp 2 rootStr } in --last rootStr + case of { + <"ّ",_> => v1geminate rootStr vPerf vImpf ; + <"و"|"ي",_> => v1defective root vImpf ; + <_,"و"|"ي"> => v1hollow root vImpf ; + _ => v1sound root vPerf vImpf + }; + + v2 = + \rootStr -> + let { + root = mkRoot3 rootStr + } in { + s = + case root.l of { + "و"|"ي" => (v2defective root).s; + _ => (v2sound root).s + }; + lock_V = <> + }; + + v3 = + \rootStr -> + let { + tbc = mkRoot3 rootStr ; + } in { + s = (v3sound tbc).s ; + lock_V = <> + }; + + v4 = + \rootStr -> + let { + root = mkRoot3 rootStr + } in { + s = + case root.l of { + "و"|"ي" => (v4defective root).s; + _ => (v4sound root).s + }; + lock_V = <> + }; + + + v5 = + \rootStr -> + let { raw = v5' rootStr } in + { s = \\vf => + case rootStr of { + _ + "؟" + _ => rectifyHmz(raw.s ! vf); + _ => raw.s ! vf + }; + lock_V = <> + }; + + v5' : Str -> V = + \rootStr -> + let { + nfs = mkRoot3 rootStr ; + } in { + s = (v5sound nfs).s ; lock_V = <> + }; + + v6 = + \rootStr -> + let { + fqm = mkRoot3 rootStr ; + } in { + s = (v6sound fqm).s ; + lock_V = <> + }; + + v8 = + \rootStr -> + let { + rbT = mkRoot3 rootStr ; + } in { + s = (v8sound rbT).s ; + lock_V = <> + }; + Preposition = Str ; - + + mkN nsc gen spec = + { s = nsc; + g = gen; + h = spec; + lock_N = <> + }; + + brkN' : Str -> Str -> Str -> Gender -> Species -> N = + \root,sg,pl,gen,spec -> + let { kitAb = mkWord sg root; + kutub = mkWord pl root + } in mkN (reg kitAb kutub) gen spec; + + brkN root sg pl gen spec = + let { raw = brkN' root sg pl gen spec} in + { s = \\n,d,c => + case root of { + _ + "؟" + _ => rectifyHmz(raw.s ! n ! d ! c); + _ => raw.s ! n ! d ! c + }; + g = gen; + h = spec ; lock_N = <> + }; + + sdfN = + \root,sg,gen,spec -> + let { kalima = mkWord sg root; + } in mkN (sndf kalima) gen spec; + + sdmN = + \root,sg,gen,spec -> + let { mucallim = mkWord sg root; + } in mkN (sndm mucallim) gen spec; + mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p} ; --- regN2 n = mkN2 (regN n) (mkPreposition "ْف") ; + mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ; --- cnN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p} ; --- cnN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ; --- --- mkPN n g = nameReg n g ** {lock_PN = <>} ; --- nounPN n = {s = n.s ! singular ; g = n.g ; lock_PN = <>} ; - mkNP : (_,_,_ : Str) -> PerGenNum -> NP = \ana,nI,I,pgn -> - { s = - table { - Nom => ana; - Acc => nI; - Gen => I - }; - a = {pgn = pgn; isPron = True }; - lock_NP = <> - }; - --- mkNP x y n g = {s = table {Gen => x ; _ => y} ; a = agrP3 n ; --- lock_NP = <>} ; --- - mkQuant7 : (_,_,_,_,_,_,_ : Str) -> State -> Quant = - \hava,havihi,havAn,havayn,hAtAn,hAtayn,hA'ulA,det -> - { s = \\n,s,g,c => - case of { - <_,Masc,_,Sg> => hava; - <_,Fem,_,Sg> => havihi; - <_,Masc,Nom,Dl>=> havAn; - <_,Masc,_,Dl> => havayn; - <_,Fem,Nom,Dl> => hAtAn; - <_,Fem,_,Dl> => hAtayn; - => hA'ulA; - _ => havihi - }; - d = Def; - lock_Quant = <> - }; - - mkQuant3 : (_,_,_ : Str) -> State -> Quant = - \dalika,tilka,ula'ika,det -> - { s = \\n,s,g,c => - case of { - <_,Masc,_,Sg> => dalika; - <_,Fem,_,Sg> => tilka; - => ula'ika; - _ => tilka - }; - d = Def; - lock_Quant = <> - }; - - --- mkA a b = mkAdjective a a a b ** {lock_A = <>} ; --- regA a = regAdjective a ** {lock_A = <>} ; --- + + mkNP : (_,_,_ : Str) -> PerGenNum -> NP = \ana,nI,I,pgn -> + { s = + table { + Nom => ana; + Acc => nI; + Gen => I + }; + a = {pgn = pgn; isPron = True }; + lock_NP = <> + }; + + mkQuant7 : (_,_,_,_,_,_,_ : Str) -> State -> Quant = + \hava,havihi,havAn,havayn,hAtAn,hAtayn,hA'ulA,det -> + { s = \\n,s,g,c => + case of { + <_,Masc,_,Sg> => hava; + <_,Fem,_,Sg> => havihi; + <_,Masc,Nom,Dl>=> havAn; + <_,Masc,_,Dl> => havayn; + <_,Fem,Nom,Dl> => hAtAn; + <_,Fem,_,Dl> => hAtayn; + => hA'ulA; + _ => havihi + }; + d = Def; + lock_Quant = <> + }; + + mkQuant3 : (_,_,_ : Str) -> State -> Quant = + \dalika,tilka,ula'ika,det -> + { s = \\n,s,g,c => + case of { + <_,Masc,_,Sg> => dalika; + <_,Fem,_,Sg> => tilka; + => ula'ika; + _ => tilka + }; + d = Def; + lock_Quant = <> + }; + + sndA root pat = + let { raw = sndA' root pat } in + { s = \\g,n,d,c => + case root of { + _ + "؟" + _ => rectifyHmz(raw.s ! g ! n ! d ! c); + _ => raw.s ! g ! n ! d ! c + }; + lock_A = <> + }; + + sndA' : Str -> Str -> A = + \root,pat -> + let { kabIr = mkWord pat root + } in { + s = adj kabIr ; + lock_A = <> + }; + + clrA root = + let { eaHmar = mkWord "أَفعَل" root; + HamrA' = mkWord "فَعلاء" root; + Humr = mkWord "فُعل" root + } in { + s = clr eaHmar HamrA' Humr; + lock_A = <> + }; + mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ; --- --- ADeg = A ; ---- --- --- mkADeg a b c d = mkAdjective a b c d ** {lock_A = <>} ; --- - --- duplADeg fat = --- mkADeg fat --- (fat + last fat + "ر") (fat + last fat + "ست") (fat + "لي") ; --- --- compoundADeg a = --- let ad = (a.s ! AAdj Posit) --- in mkADeg ad ("مْري" ++ ad) ("مْست" ++ ad) (a.s ! AAdv) ; --- --- adegA a = a ; --- + mkAdv x = ss x ** {lock_Adv = <>} ; mkAdV x = ss x ** {lock_AdV = <>} ; mkAdA x = ss x ** {lock_AdA = <>} ; - + mkPreposition p = p ; --- mkPrep p = ss p ** {lock_Prep = <>} ; --- --- mkV a b c d e = mkVerb a b c d e ** {s1 = [] ; lock_V = <>} ; --- --- --- partV v p = verbPart v p ** {lock_V = <>} ; --- reflV v = {s = v.s ; part = v.part ; lock_V = v.lock_V ; isRefl = True} ; --- mkV2 v p = v ** {s = v.s ; c2 = p ; lock_V2 = <>} ; dirV2 v = mkV2 v [] ; @@ -507,10 +411,6 @@ resource ParadigmsAra = open dirdirV3 v = dirV3 v [] ; mkVS v = v ** {lock_VS = <>} ; --- mkVV v = { --- s = table {VVF vf => v.s ! vf ; _ => variants {}} ; --- isAux = False ; lock_VV = <> --- } ; mkVQ v = v ** {lock_VQ = <>} ; V0 : Type = V ; diff --git a/lib/resource-1.0/arabic/ResAra.gf b/lib/resource-1.0/arabic/ResAra.gf index edbf5a395..efcae625a 100644 --- a/lib/resource-1.0/arabic/ResAra.gf +++ b/lib/resource-1.0/arabic/ResAra.gf @@ -99,10 +99,10 @@ resource ResAra = PatternsAra ** open Prelude, Predef in { NTable = Number => State => Case => Str; Noun : Type = {s : NTable ; g : Gender; h : Species} ; - Adj : Type = {s : Gender => NTable } ; + Adj : Type = {s : Gender => NTable} ; +-- Adj : Type = {s : AForm => Str} ; Verb : Type = {s : VForm => Str} ; - param VForm = VPerf Voice PerGenNum @@ -116,6 +116,9 @@ resource ResAra = PatternsAra ** open Prelude, Predef in { SgPl = Sing | Plur; + AForm = + APosit Gender Number State Case + | AComp Case ; --verbal morphology @@ -646,22 +649,26 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> --Nominal Morphology - adj : Str -> Gender => NTable = - \kabIr -> - let kabIra = kabIr + "َة" in + adj : Str -> Gender => NTable = + \kabIr -> + let kabIra = kabIr + "َة" in + table { + Masc => sndm kabIr; + Fem => sndf kabIra + }; + + clr : Str -> Str -> Str -> Gender => NTable = + \eaHmar,HamrA',Humr -> + table { + Masc => reg eaHmar Humr; + Fem => reg HamrA' Humr + }; + {-in table { - Masc => sndm kabIr; - Fem => sndf kabIra - }; - - clr : Str -> Str -> Str -> Gender => NTable = - \eaHmar,HamrA',Humr -> - table { - Masc => reg eaHmar Humr; - Fem => reg HamrA' Humr - }; - - + APosit _ => posit; + AComp c => posit ! Masc ! Sg ! Const ! c + };-} + --takes 2 words, singular and broken plural, and gives the --complete noun inflection table reg : Str -> Str -> NTable = diff --git a/lib/resource-1.0/arabic/StructuralAra.gf b/lib/resource-1.0/arabic/StructuralAra.gf index 2136e319f..b14974886 100644 --- a/lib/resource-1.0/arabic/StructuralAra.gf +++ b/lib/resource-1.0/arabic/StructuralAra.gf @@ -4,27 +4,27 @@ concrete StructuralAra of Structural = CatAra ** flags optimize=all ; lin --- above_Prep = ss "َبْثي" ; --- after_Prep = ss "َفتر" ; + above_Prep = ss "فَوْقَ" ; + after_Prep = ss "بَعْدَ" ; -- all_Predet = ss "َلّ" ; -- almost_AdA, almost_AdN = ss "َلمْست" ; -- although_Subj = ss "َلتهُْغه" ; -- always_AdV = ss "َلوَيس" ; and_Conj = ss "وَ" ** {n = Pl} ; -- because_Subj = ss "بعَُسي" ; --- before_Prep = ss "بفْري" ; --- behind_Prep = ss "بهِند" ; --- between_Prep = ss "بتوّن" ; + before_Prep = ss "قَبْلَ" ; + behind_Prep = ss "خَلْفَ" ; + between_Prep = ss "بَيْنَ" ; -- both7and_DConj = sd2 "بْته" "َند" ** {n = Pl} ; -- but_PConj = ss "بُت" ; --- by8agent_Prep = ss "بي" ; --- by8means_Prep = ss "بي" ; + by8agent_Prep = ss "بِ" ; + by8means_Prep = ss "بِ" ; -- can8know_VV, can_VV = { -- s = table VVForm [["بي َبلي تْ"] ; "عَن" ; "عُْلد" ; -- ["بّن َبلي تْ"] ; ["بِنغ َبلي تْ"] ; "عَنءت" ; "عُْلدنءت"] ; -- isAux = True -- } ; --- during_Prep = ss "دُرِنغ" ; + during_Prep = ss "خِلَالَ" ; -- either7or_DConj = sd2 "ِتهر" "ْر" ** {n = Sg} ; -- everybody_NP = regNP "ثريبْدي" Sg ; every_Det = mkDet "كُلّ" Sg Const ; @@ -32,7 +32,7 @@ concrete StructuralAra of Structural = CatAra ** -- everywhere_Adv = ss "ثريوهري" ; few_Det = mkDet "بَعض" Pl Const ; -- first_Ord = ss "فِرست" ; --- from_Prep = ss "فرْم" ; + from_Prep = ss "مِنَ" ; he_Pron = mkNP "هُوَ" "هُ" "هُ" (Per3 Masc Sg) ; here_Adv = ss "هُنا" ; -- here7to_Adv = ss ["تْ هري"] ; @@ -40,7 +40,7 @@ concrete StructuralAra of Structural = CatAra ** how_IAdv = ss "كَيفَ" ; -- how8many_IDet = mkDeterminer Pl ["هْو مَني"] ; -- if_Subj = ss "ِف" ; --- in8front_Prep = ss ["ِن فرْنت ْف"] ; + in8front_Prep = ss "مُقَابِلَ" ; i_Pron = mkNP "أَنَا" "نِي" "ِي" (Per1 Sing); in_Prep = ss "فِي" ; -- it_Pron = mkNP "ِت" "ِت" "ِتس" Sg P3 ; @@ -54,15 +54,15 @@ concrete StructuralAra of Structural = CatAra ** -- ["هَد تْ"] ; ["هَثِنغ تْ"] ; "مُستنءت" ; ["هَدنءت تْ"]] ; ---- -- isAux = True -- } ; --- no_Phr = ss "نْ" ; --- on_Prep = ss "ْن" ; + no_Phr = ss "لا" ; + on_Prep = ss "عَلى" ; one_Quant = mkQuantNum "واحِد" Sg Indef ; -- only_Predet = ss "ْنلي" ; -- or_Conj = ss "ْر" ** {n = Sg} ; -- otherwise_PConj = ss "ْتهروِسي" ; --- part_Prep = ss "ْف" ; + part_Prep = ss "مِنَ" ; -- please_Voc = ss "ةلَسي" ; --- possess_Prep = ss "ْف" ; + possess_Prep = ss "ل" ; -- quite_Adv = ss "قُِتي" ; -- she_Pron = mkNP "سهي" "هر" "هر" Sg P3 ; -- so_AdA = ss "سْ" ; @@ -82,10 +82,10 @@ concrete StructuralAra of Structural = CatAra ** this_Quant = mkQuant7 "هَذا" "هَذِهِ" "هَذَان" "هَذَيْن" "هَاتَان" "هَاتَيْن" "هَؤُلَاء" Def; -- this_NP = regNP "تهِس" Sg ; -- those_NP = regNP "تهْسي" Pl ; --- through_Prep = ss "تهرُْغه" ; + through_Prep = ss "عَبْرَ" ; -- too_AdA = ss "تّْ" ; --- to_Prep = ss "تْ" ; --- under_Prep = ss "ُندر" ; + to_Prep = ss "إِلى" ; + under_Prep = ss "تَحْتَ" ; -- very_AdA = ss "ثري" ; -- want_VV = P.mkVV (P.regV "وَنت") ; we_Pron = mkNP "نَحنُ" "نا" "نا" (Per1 Plur) ; @@ -99,17 +99,11 @@ concrete StructuralAra of Structural = CatAra ** whoSg_IP = mkIP "مَنْ" Sg ; whoPl_IP = mkIP "مَنْ" Pl ; -- why_IAdv = ss "وهي" ; --- without_Prep = ss "وِتهُْت" ; + without_Prep = ss "بِدُونِ" ; with_Prep = ss "مَع" ; --- yes_Phr = ss "يس" ; + yes_Phr = ss "نَعَم" ; youSg_Pron = mkNP "أَنتَ" "كَ" "كَ" (Per2 Masc Sg) ; youPl_Pron = mkNP "أَنتُمْ" "كُمْ" "كُمْ" (Per2 Masc Sg) ; youPol_Pron = mkNP "أَنتِ" "كِ" "كِ" (Per2 Fem Sg) ; --- --- ---oper --- mkQuant : Str -> Str -> {s : Number => Str} = \x,y -> { --- s = table Number [x ; y] --- } ; --- + }