diff --git a/lib/src/maltese/DictMlt.gf b/lib/src/maltese/DictMlt.gf index cda0c0d49..050502cb4 100644 --- a/lib/src/maltese/DictMlt.gf +++ b/lib/src/maltese/DictMlt.gf @@ -8,6 +8,7 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in { flags coding=utf8 ; + optimize=values ; -- Root-and-pattern verbs lin diff --git a/lib/src/maltese/IdiomMlt.gf b/lib/src/maltese/IdiomMlt.gf index e09f505ac..4c2a5b9c4 100644 --- a/lib/src/maltese/IdiomMlt.gf +++ b/lib/src/maltese/IdiomMlt.gf @@ -6,6 +6,9 @@ concrete IdiomMlt of Idiom = CatMlt ** open Prelude, ResMlt in { + flags + coding=utf8; + lin -- VP -> Cl ; -- it is hot ImpersCl vp = mkClause "" (agrP3 Sg Masc) vp ; diff --git a/lib/src/maltese/LexiconMlt.gf b/lib/src/maltese/LexiconMlt.gf index 8f549399d..87a0dcce1 100644 --- a/lib/src/maltese/LexiconMlt.gf +++ b/lib/src/maltese/LexiconMlt.gf @@ -13,353 +13,355 @@ concrete LexiconMlt of Lexicon = CatMlt ** optimize=values ; coding=utf8 ; + lin + airplane_N = mkN "ajruplan" "ajruplani" ; + animal_N = mkN "annimal" "annimali" ; + apartment_N = mkN "appartament" "appartamenti" ; + apple_N = mkNColl "tuffieħa" "tuffieħ" "tuffieħat" ; + art_N = mkNNoPlural "arti" feminine ; + ashes_N = mkN "rmied" "rmiet" ; + baby_N = mkN "tarbija" "trabi" ; + back_N = possN (mkN "dahar" "dhur") ; + bank_N = mkN "bank" "bankijiet" ; + bark_N = mkN "qoxra" "qoxriet" ; + beer_N = mkN "birra" "birer" ; + belly_N = possN (mkN "żaqq" "żquq") ; + bike_N = mkN "rota" "roti" ; + bird_N = mkN "għasfur" "għasafar" ; -- genderedN + blood_N = possN (mkNColl "demm" "dmija") ; + boat_N = mkN "dgħajsa" "dgħajjes" ; + bone_N = mkNColl "għadma" "għadam" "għadmiet" ; + book_N = mkN "ktieb" "kotba" ; + boot_N = mkNColl "żarbuna" "żarbun" "żraben" ; + boss_N = mkN "mgħallem" "mgħallmin" ; + boy_N = mkN "tifel" "tfal" ; + bread_N = mkNColl "ħobża" "ħobż" "ħobżiet" ; + breast_N = possN (mkN "sider" "sdur") ; + brother_N2 = mkN2 (possN (mkN "ħu" "aħwa")) ; + butter_N = mkNColl "butir" "butirijiet" ; + camera_N = mkN "kamera" "kameras" ; + cap_N = mkN "kappell" "kpiepel" ; + car_N = mkN "karozza" "karozzi" ; + carpet_N = mkN "tapit" "twapet" ; + cat_N = mkN "qattus" "qtates" ; -- genderedN + ceiling_N = mkN "saqaf" "soqfa" ; + chair_N = mkN "siġġu" "siġġijiet" ; + cheese_N = mkNColl "ġobna" "ġobon" "ġobniet" ; + child_N = mkN "tifel / tifla" "tfal" ; -- genderedN + church_N = mkN "knisja" "knejjes" ; + city_N = mkN "belt" "bliet" feminine ; + cloud_N = mkNColl "sħaba" "sħab" "sħabiet" ; + coat_N = mkN "kowt" "kowtijiet" ; + computer_N = mkN "kompjuter" "kompjuters" ; + country_N = possN (mkN "pajjiż" "pajjiżi") ; + cousin_N = mkN "kuġin" "kuġini" ; -- genderedN + cow_N = mkNColl "baqra" "baqar" "baqriet" ; + day_N = mkN "ġurnata" "ġranet" ; + distance_N3 = mkN3 (mkN "distanza") minnP saP ; + doctor_N = mkN "tabib" "tobba" ; -- genderedN + dog_N = mkN "kelb" "klieb" ; + door_N = mkN "bieb" "bibien" ; + dust_N = mkNColl "traba" "trab" "trabiet" ; + ear_N = possN (mkNDual "widna" "widnejn" "widniet") ; + earth_N = mkN "art" "artijiet" feminine ; + egg_N = mkNColl "bajda" "bajd" "bajdiet" ; + enemy_N = mkN "għadu" "għedewwa" ; + eye_N = possN (mkNDual "għajn" "għajnejn" "għajnejn" "għejun" feminine) ; + factory_N = mkN "fabbrika" "fabbriki" ; + fat_N = mkNColl "xaħma" "xaħam" "xaħmiet" "xaħmijiet" ; + father_N2 = mkN2 (possN (mkN "missier" "missirijiet")) ; + feather_N = mkNColl "rixa" "rix" "rixiet" ; + fingernail_N = possN (mkNDual "difer" "difrejn" "dwiefer") ; + fire_N = mkN "nar" "nirien" ; + fish_N = mkNColl "ħuta" "ħut" "ħutiet" ; + floor_N = mkN "art" "artijiet" feminine ; + flower_N = mkN "fjura" "fjuri" ; + fog_N = mkNColl "ċpar" ; + foot_N = possN (mkNDual "sieq" "saqajn" "saqajn" feminine) ; + forest_N = mkN "foresta" "foresti" ; + fridge_N = mkN "friġġ" "friġġijiet" ; + friend_N = possN (mkN "ħabib" "ħbieb") ; -- genderedN + fruit_N = mkNColl "frotta" "frott" "frottiet" "frottijiet" ; + garden_N = mkN "ġnien" "ġonna" ; + girl_N = mkN "tifla" "tfal" ; + glove_N = mkN "ingwanta" "ingwanti" ; + gold_N = mkNColl "deheb" "dehbijiet" ; + grammar_N = mkN "grammatika" "grammatiki" ; + grass_N = mkNColl "ħaxixa" "ħaxix" "ħxejjex" ; + guts_N = possN (mkN "musrana" "musraniet" "msaren") ; + hair_N = possN (mkNColl "xagħara" "xagħar" "xagħariet" "xgħur") ; + hand_N = possN (mkNDual "id" "idejn" "idejn" feminine) ; + harbour_N = mkN "port" "portijiet" ; + hat_N = mkN "kappell" "kpiepel" ; + head_N = possN (mkN "ras" "rjus" feminine) ; + heart_N = possN (mkN "qalb" "qlub" feminine) ; + hill_N = mkN "għolja" "għoljiet" ; + horn_N = mkN "ħorn" "ħornijiet" ; + horse_N = mkN "żiemel" "żwiemel" ; + house_N = mkN "dar" "djar" feminine ; + husband_N = mkN "raġel" "rġiel" ; + ice_N = mkN "silġ" "silġiet" ; + industry_N = mkN "industrija" "industriji" ; + iron_N = mkNColl "ħadida" "ħadid" "ħadidiet" "ħdejjed" ; + king_N = mkN "re" "rejjiet" ; + knee_N = possN (mkNDual "rkoppa" "rkopptejn" "rkoppiet") ; + lake_N = mkN "għadira" "għadajjar" ; + lamp_N = mkN "lampa" "lampi" ; + language_N = mkN "lingwa" "lingwi" ; + leaf_N = mkNDual "werqa" "werqtejn" "werqiet" ; + leather_N = mkN "ġilda" "ġildiet" ; + leg_N = (mkNDual "riġel" "riġlejn" "riġlejn") ; + liver_N = mkN "fwied" "ifdwa" ; + louse_N = mkN "qamla" "qamliet" ; + love_N = mkN "mħabba" "mħabbiet" ; + man_N = mkN "raġel" "rġiel" ; + meat_N = mkNColl "laħma" "laħam" "laħmiet" "laħmijiet" ; + milk_N = mkNColl "ħalib" "ħalibijiet" ; + moon_N = mkN "qamar" "oqmra" ; + mother_N2 = mkN2 (possN (mkN "omm" "ommijiet" feminine)) ; + mountain_N = mkN "muntanja" "muntanji" ; + mouth_N = possN (mkN "ħalq" "ħluq") ; + music_N = mkN "mużika" "mużiki" ; + name_N = possN (mkN "isem" "ismijiet") ; + neck_N = possN (mkN "għonq" "għenuq") ; + newspaper_N = mkN "gazzetta" "gazzetti" ; + night_N = mkN "lejl" "ljieli" ; + nose_N = possN (mkN "mnieħer" "mniħrijiet") ; + number_N = mkN "numru" "numrui" ; + oil_N = mkN "żejt" "żjut" ; + paper_N = mkN "karta" "karti" ; + peace_N = mkN "paċi" "paċijiet" feminine ; + pen_N = mkN "pinna" "pinen" ; + person_N = mkNColl "persuna" "persuni" ; + planet_N = mkN "pjaneta" "pjaneti" ; + plastic_N = mkNNoPlural "plastik" ; + policeman_N = mkNNoPlural "pulizija" ; + priest_N = mkN "qassis" "qassisin" ; + queen_N = mkN "reġina" "rġejjen" ; + question_N = mkN "mistoqsija" "mistoqsijiet" ; + radio_N = mkN "radju" "radjijiet" ; + rain_N = mkNNoPlural "xita" ; + reason_N = mkN "raġun" "raġunijiet" ; + religion_N = mkN "reliġjon" "reliġjonijiet" ; + restaurant_N = mkN "restorant" "restoranti" ; + river_N = mkN "xmara" "xmajjar" ; + road_N = mkN "triq" "triqat" "toroq" feminine ; + rock_N = mkNColl "blata" "blat" "blatiet" ; + roof_N = mkN "saqaf" "soqfa" ; + root_N = mkN "qħerq" "qħeruq" ; + rope_N = mkN "ħabel" "ħbula" ; + rubber_N = mkN "gomma" "gomom" ; + rule_N = mkN "regola" "regoli" ; + salt_N = mkN "melħ" "melħiet" ; + sand_N = mkNColl "ramla" "ramel" "ramliet" ; + school_N = mkN "skola" "skejjel" ; + science_N = mkN "xjenza" "xjenzi" ; + sea_N = mkNDual "baħar" "baħrejn" "ibħra" ; + seed_N = mkN "żerriegħa" "żerrigħat" ; + sheep_N = mkNColl "nagħġa" "ngħaġ" "nagħġiet" ; + ship_N = mkN "vapur" "vapuri" ; + shirt_N = mkN "qmis" "qomos" feminine ; + shoe_N = mkN "żarbun" "żraben" ; + shop_N = mkN "ħanut" "ħwienet" ; + silver_N = mkN "fidda" "fided" ; + sister_N = (mkN "oħt" "aħwa" feminine) ; + skin_N = mkN "ġilda" "ġildiet" ; + sky_N = mkN "sema" "smewwiet" masculine ; + smoke_N = mkN "duħħan" "dħaħen" ; + snake_N = mkN "serp" "sriep" ; + snow_N = mkNColl "borra" ; + sock_N = mkN "kalzetta" "kalzetti" ; + song_N = mkN "kanzunetta" "kanzunetti" ; + star_N = mkN "stilla" "stilel" ; + steel_N = mkNNoPlural "azzar" ; + stick_N = mkN "lasta" "lasti" ; + stone_N = mkNColl "ġebla" "ġebel" "ġebliet" "ġbiel" ; + stove_N = mkN "kuker" "kukers" ; + student_N = mkN "student" "studenti" ; + sun_N = mkN "xemx" "xmux" feminine ; + table_N = mkN "mejda" "mwejjed" ; + tail_N = (mkN "denb" "dnieb") ; + teacher_N = mkN "għalliem" "għalliema" ; -- genderedN + television_N = mkN "televixin" "televixins" ; + tongue_N = possN (mkN "lsien" "ilsna") ; + tooth_N = possN (mkN "sinna" "sinniet" "snien") ; + train_N = mkN "ferrovija" "ferroviji" ; + tree_N = mkNColl "siġra" "siġar" "siġriet" ; + university_N = mkN "università" "universitàjiet" ; + village_N = mkN "raħal" "rħula" ; + war_N = mkN "gwerra" "gwerrer" ; + water_N = mkN "ilma" "ilmijiet" masculine ; + wife_N = mkN "mara" "nisa" ; + wind_N = mkN "riħ" "rjieħ" "rjiħat" ; + window_N = mkN "tieqa" "twieqi" ; + wine_N = mkNColl "nbid" "nbejjed" ; + wing_N = mkN "ġewnaħ" "ġwienaħ" ; + woman_N = mkN "mara" "nisa" ; + wood_N = mkN "injam" "injamiet" ; + worm_N = mkNColl "dudu" "dud" "dudiet" ; + year_N = mkNDual "sena" "sentejn" "snin" ; + lin add_V3 = mkV3 zied_ZJD_1_10424_V maP ; - airplane_N = mkN "ajruplan" ; alas_Interj = ss "sfortunatament" ; already_Adv = mkAdv "diġà" ; - animal_N = mkN "annimal" ; answer_V2S = lilV2 (wiegeb_WGB_3_10033_V) ; - apartment_N = mkN "appartament" ; - apple_N = mkNColl "tuffieħ" ; - art_N = mkNNoPlural "arti" feminine ; - ashes_N = mkN "rmied" "rmiet" ; ask_V2Q = lilV2 (saqsa_SQSJ_1_7268_V) ; - baby_N = mkN "tarbija" "trabi" ; - back_N = possN (mkN "dahar" "dhur") ; bad_A = brokenA "ħażin" "hżiena" "agħar" ; - bank_N = mkN "bank" "bankijiet" ; -- BANEK is for lotto booths! - bark_N = mkN "qoxra" "qoxriet" ; beautiful_A = brokenA "sabiħ" "sbieħ" "isbaħ" ; become_VA = sar_SJR_1_9797_V ; - beer_N = mkN "birra" "birer" ; beg_V2V = mkV2V ttallab_TLB_5_9893_V ghalP minnP ; - belly_N = possN (mkN "żaqq" "żquq") ; big_A = brokenA "kbir" "kbar" "ikbar" ; - bike_N = mkN "rota" ; - bird_N = genderedN "għasfur" "għasafar" ; bite_V2 = lilV2 (gidem_GDM_1_8009_V) ; black_A = mkA "iswed" "sewda" "suwed" ; - blood_N = possN (mkN [] "demm" [] "dmija" []) ; blow_V = nefah_NFH_1_8966_V ; blue_A = sameA "blu" ; - boat_N = mkN "dgħajsa" "dgħajjes" ; - bone_N = mkNColl "għadam" ; - book_N = mkN "ktieb" "kotba" ; - boot_N = mkN "żarbuna" "żarbun" [] "żraben" [] ; - boss_N = mkN "mgħallem" "mgħallmin" ; - boy_N = mkN "tifel" "tfal" ; - bread_N = mkNColl "ħobż" ; break_V2 = dirV2 (kiser_KSR_1_8636_V) ; - breast_N = possN (mkN "sider" "sdur") ; -- also ISDRA breathe_V = mkV "respira" ; -- ĦA N-NIFS broad_A = mkA "wiesgħa" "wiesgħa" "wiesgħin" ; - brother_N2 = mkN2 (possN (mkN "ħu" "aħwa")) ; brown_A = sameA "kannella" ; burn_V = haraq_HRQ_1_8367_V ; - butter_N = mkN [] "butir" [] "butirijiet" [] ; buy_V2 = dirV2 (xtara_XRJ_8_10296_V) ; - camera_N = mkN "kamera" "kameras" ; - cap_N = mkN "beritta" ; - car_N = mkN "karozza" ; - carpet_N = mkN "tapit" "twapet" ; -- TAPITI - cat_N = genderedN "qattus" "qtates" ; - ceiling_N = mkN "saqaf" "soqfa"; - chair_N = mkN "siġġu" "siġġijiet" ; - cheese_N = mkNColl "ġobon" ; - child_N = genderedN "tifel" "tifla" "tfal" ; - church_N = mkN "knisja" "knejjes" ; - city_N = mkN "belt" "bliet" feminine ; clean_A = brokenA "nadif" "nodfa" ; clever_A = regA "bravu" ; close_V2 = dirV2 (ghalaq_GHLQ_1_10530_V) ; - cloud_N = mkNColl "sħab" ; - coat_N = mkN "kowt" "kowtijiet" ; cold_A = mkA "kiesaħ" "kiesħa" "kesħin" ; come_V = gie_GJ'_1_8123_V ; - computer_N = mkN "kompjuter" "kompjuters" ; correct_A = regA "korrett" ; count_V2 = dirV2 (ghadd_GHDD_1_10460_V) ; - country_N = possN (mkN "pajjiż") ; - cousin_N = genderedN "kuġin" "kuġini" ; - cow_N = mkN "baqra" "baqar" "baqartejn" [] [] ; cut_V2 = dirV2 (qata'_QTGH_1_9305_V) ; - day_N = mkN "ġurnata" "ġranet" ; die_V = miet_MWT_1_8923_V ; dig_V = hafer_HFR_1_8233_V ; dirty_A = regA "maħmuġ" ; - distance_N3 = mkN3 (mkN "distanza") minnP saP ; do_V2 = dirV2 (ghamel_GHML_1_10544_V) ; - doctor_N = genderedN "tabib" "tobba" ; - dog_N = mkN "kelb" "klieb" ; - door_N = mkN "bieb" "bibien" ; drink_V2 = dirV2 (xorob_XRB_1_10231_V) ; dry_A = regA "niexef" ; dull_A = sameA "tad-dwejjaq" ; - dust_N = mkNColl "trab" ; -- not sure but sounds right - ear_N = possN (mkNDual "widna") ; - earth_N = mkN "art" "artijiet" feminine ; easy_A2V = dirA2 (sameA "faċli") ; eat_V2 = dirV2 (kiel_KJL_1_8672_V) ; - egg_N = mkNColl "bajd" ; empty_A = mkA "vojt" "vojta" "vojta" ; - enemy_N = mkN "għadu" "għedewwa" ; - eye_N = possN (mk5N "għajn" [] "għajnejn" "għajnejn" "għejun" feminine) ; - factory_N = mkN "fabbrika" ; fall_V = waqa'_WQGH_1_10070_V ; far_Adv = mkAdv "il-bogħod" ; -- use glue? - fat_N = mkNColl "xaħam" ; - father_N2 = mkN2 (possN (mkN "missier" "missirijiet")) ; fear_V2 = prepV2 (beza'_BZGH_1_7541_V) minnP ; fear_VS = beza'_BZGH_1_7541_V; - feather_N = mkNColl "rix" ; fight_V2 = prepV2 (ggieled_GLD_6_8074_V) maP ; find_V2 = lilV2 (sab_SJB_1_9779_V) ; - fingernail_N = possN (mkN "difer" [] "difrejn" "dwiefer" []) ; - fire_N = mkN "nar" "nirien" ; - fish_N = mkNColl "ħut" ; float_V = gham_GHWM_1_10750_V ; --- - floor_N = mkN "art" "artijiet" feminine ; - flower_N = mkN "fjura" ; flow_V = ghadda_GHDJ_2_10679_V ; fly_V = tar_TJR_1_9972_V ; - fog_N = mkN [] "ċpar" [] [] [] ; - foot_N = possN (mk5N "sieq" [] "saqajn" "saqajn" [] feminine) ; - forest_N = mkN "foresta" ; -- also MASĠAR forget_V2 = lilV2 (nesa_NSJ_1_9126_V) ; freeze_V = ffriza_V ; - fridge_N = mkN "friġġ" "friġġijiet" ; - friend_N = possN (genderedN "ħabib" "ħbieb") ; - fruit_N = mkNColl "frott" ; full_A = regA "mimli" ; fun_AV = sameA "pjaċevoli" ; - garden_N = mkN "ġnien" "ġonna" ; - girl_N = mkN "tifla" "tfal" ; give_V3 = mkV3 ta_GHTJ_1_10767_V lilP ; - glove_N = mkN "ingwanta" ; go_V = mar_MWR_1_8918_V ; - gold_N = mkN [] "deheb" [] "dehbijiet" [] ; good_A = mkA "tajjeb" "tajba" "tajbin" ; - grammar_N = mkN "grammatika" ; - grass_N = mk5N "ħaxixa" "ħaxix" [] [] "ħxejjex" masculine ; -- Dict says ĦAXIX = n.koll.m.s., f. -a, pl.ind. ĦXEJJEX green_A = mkA "aħdar" "ħadra" "ħodor" ; - guts_N = possN (mkN "musrana" [] [] "musraniet" "msaren") ; - hair_N = possN (mkN "xagħar" [] [] "xagħariet" "xgħur") ; - hand_N = possN (mk5N "id" [] "idejn" "idejn" [] feminine) ; - harbour_N = mkN "port" "portijiet" ; - hat_N = mkN "kappell" "kpiepel" ; hate_V2 = lilV2 (baghad_BGHD_1_7402_V) ; - head_N = possN (mkN "ras" "rjus" feminine) ; hear_V2 = lilV2 (sema'_SMGH_1_9698_V) ; - heart_N = possN (mkN "qalb" "qlub" feminine) ; heavy_A = brokenA "tqil" "tqal" "itqal" ; - hill_N = mkN "għolja" "għoljiet" ; hit_V2 = lilV2 (laqat_LQT_1_8772_V) ; hold_V2 = lilV2 (zamm_ZMM_1_10392_V) ; hope_VS = xtaq_XWQ_8_10313_V ; - horn_N = mkN "ħorn" "ħornijiet" ; - horse_N = mkN "żiemel" "żwiemel" ; hot_A = mkA "jaħraq" "taħraq" "jaħarqu" ; - house_N = mkN "dar" "djar" feminine ; hunt_V2 = prepV2 (kaccac_KCC_2_8571_V) ghalP ; - husband_N = mkN "raġel" "rġiel" ; - ice_N = mkN "silġ" "silġiet" ; important_A = sameA "importanti" ; - industry_N = mkN "industrija" ; - iron_N = mk5N "ħadida" "ħadid" [] "ħadidiet" "ħdejjed" masculine ; john_PN = mkPN "Ġanni" masculine singular ; jump_V = qabez_QBZ_1_9182_V ; kill_V2 = lilV2 (qatel_QTL_1_9312_V) ; - king_N = mkN "re" "rejjiet" ; - knee_N = possN (mkN "rkoppa" [] "rkopptejn" "rkoppiet" []) ; -- TODO use mkNDual know_V2 = lilV2 (af_''F_1_10774_V) ; know_VQ = af_''F_1_10774_V ; know_VS = af_''F_1_10774_V ; - lake_N = mkN "għadira" "għadajjar" ; - lamp_N = mkN "lampa" ; - language_N = mkN "lingwa" ; -- lsien? laugh_V = dahak_DHK_1_7688_V ; - leaf_N = mkN "werqa" "weraq" "werqtejn" "werqiet" [] ; learn_V2 = dirV2 (tghallem_GHLM_5_10527_V) ; - leather_N = mkN "ġilda" "ġild" [] "ġildiet" "ġlud" ; -- mkNColl "ġild" ; leave_V2 = prepV2 (telaq_TLQ_1_9903_V) minnP ; left_Ord = mkOrd "xellug" ; - leg_N = possN (mkN "riġel" [] "riġlejn" [] []) ; -- SIEQ lie_V = mtedd_MDD_8_8816_V ; -- lie down like_V2 = lilV2 (ghogob_GHGB_1_10485_V) ; listen_V2 = lilV2 (sema'_SMGH_1_9698_V) ; live_V = ghex_GHJX_1_10711_V ; - liver_N = mkN "fwied" [] [] [] "ifdwa" ; long_A = brokenA "twil" "twal" "itwal" ; lose_V2 = lilV2 (tilef_TLF_1_9895_V) ; - louse_N = mkN "qamla" "qamliet" ; - love_N = mkN "mħabba" "mħabbiet" ; love_V2 = lilV2 (habb_HBB_1_8174_V) ; - man_N = mkN "raġel" "rġiel" ; married_A2 = mkA2 (mkA "miżżewweġ" "miżżewġa") lilP ; - meat_N = mkN "laħam" [] [] "laħmiet" "laħmijiet" ; - milk_N = mkN [] "ħalib" [] "ħalibijiet" "ħlejjeb" ; - moon_N = mkN "qamar" "oqmra" ; -- QMURA - mother_N2 = mkN2 (possN (mkN "omm" "ommijiet" feminine)) ; - mountain_N = mkN "muntanja" ; - mouth_N = possN (mkN "ħalq" "ħluq") ; - music_N = mkN "mużika" "mużiki" ; - name_N = possN (mkN "isem" "ismijiet") ; narrow_A = mkA "dejjaq" "dejqa" "dojoq" "idjaq" ; near_A = regA "viċin" ; - neck_N = possN (mkN "għonq" "għenuq") ; new_A = brokenA "ġdid" "ġodda" ; - newspaper_N = mkN "gazzetta" ; - night_N = mkN "lejl" "ljieli" ; - nose_N = possN (mkN "mnieħer" "mniħrijiet") ; now_Adv = mkAdv "issa" ; - number_N = mkN "numru" ; - oil_N = mkN "żejt" "żjut" ; old_A = brokenA "qadim" "qodma" "eqdem" ; open_V2 = dirV2 (fetah_FTH_1_7932_V) ; paint_V2A = dirV2 (pitter_PTR_2_9152_V) ; - paper_N = mkN "karta" ; paris_PN = mkPN "Pariġi" feminine singular ; - peace_N = mkN "paċi" "paċijiet" feminine ; - pen_N = mkN "pinna" "pinen" ; - person_N = mk5N [] "persuna" [] "persuni" [] masculine ; - planet_N = mkN "pjaneta" ; - plastic_N = mkNNoPlural "plastik" ; play_V = daqq_DQQ_1_7736_V ; play_V2 = prepV2 (laghab_LGHB_1_8724_V) maP ; - policeman_N = mkNNoPlural "pulizija" ; - priest_N = mkN "qassis" "qassisin" ; probable_AS = mkAS (sameA "probabbli") ; pull_V2 = lilV2 (gibed_GBD_1_8043_V) ; push_V2 = dirV2 (mbotta_V) ; -- GĦAFAS put_V2 = lilV2 (qieghed_QGHD_3_9212_V) ; - queen_N = mkN "reġina" "rġejjen" ; - question_N = mkN "mistoqsija" "mistoqsijiet" ; -- DOMANDA - radio_N = mkN "radju" "radjijiet" ; - rain_N = mkNNoPlural "xita" ; rain_V0 = xita_XTW_1_10297_V ; -- TAGĦMEL IX-XITA read_V2 = dirV2 (qara_QRJ_1_9350_V) ; ready_A = regA "lest" ; - reason_N = mkN "raġun" "raġunijiet" ; red_A = mkA "aħmar" "ħamra" "ħomor" ; - religion_N = mkN "reliġjon" "reliġjonijiet" ; - restaurant_N = mkN "restorant" ; right_Ord = mkOrd "lemin" ; - river_N = mkN "xmara" "xmajjar" ; - road_N = mk5N "triq" [] [] "triqat" "toroq" feminine ; - rock_N = mkN "blata" "blat" [] "blatiet" "blajjiet" ; -- in dictionary BLAT and BLATA are separate! - roof_N = mkN "saqaf" "soqfa" ; - root_N = mkN "qħerq" "qħeruq" ; - rope_N = mkN "ħabel" "ħbula" ; rotten_A = mkA "mħassar" "mħassra" "mħassrin" ; round_A = regA "tond" ; rub_V2 = dirV2 (ghorok_GHRK_1_10599_V) ; - rubber_N = mkN "gomma" "gomom" ; - rule_N = mkN "regola" ; run_V = gera_GRJ_1_8131_V ; - salt_N = mkN "melħ" "melħiet" ; - sand_N = mkN "ramla" "ramel" [] "ramliet" "rmiel" ; say_VS = qal_QWL_1_9357_V ; - school_N = mkN "skola" "skejjel" ; - science_N = mkN "xjenza" ; scratch_V2 = lilV2 (barax_BRX_1_7504_V) ; - sea_N = mkN "baħar" [] "baħrejn" "ibħra" [] ; see_V2 = lilV2 (ra_R'J_1_9513_V) ; - seed_N = mkN "żerriegħa" "żerrigħat" ; seek_V2 = lilV2 (fittex_FTX_2_7952_V) ; sell_V3 = mkV3 biegh_BJGH_1_7565_V lilP ; send_V3 = mkV3 baghat_BGHT_1_7412_V lilP ; sew_V = hat_HJT_1_8508_V ; sharp_A = mkA "jaqta'" "taqta'" "jaqtgħu" ; - sheep_N = mkN "nagħġa" "nagħaġ" [] "nagħġiet" [] ; - ship_N = mkN "vapur" ; - shirt_N = mkN "qmis" "qomos" feminine ; - shoe_N = mkN "żarbun" "żraben" ; - shop_N = mkN "ħanut" "ħwienet" ; short_A = brokenA "qasir" "qosra" "iqsar" ; - silver_N = mkN "fidda" "fided" ; sing_V = kanta_KNTJ_1_7016_V ; - sister_N = possN (mkN "oħt" "aħwa" feminine) ; sit_V = pogga_PGJ_2_9157_V ; - skin_N = mkN "ġilda" "ġildiet" ; - sky_N = mkN "sema" "smewwiet" masculine ; sleep_V = raqad_RQD_1_9469_V ; small_A = brokenA "zgħir" "zgħar" "iżgħar" ; smell_V = xamm_XMM_1_10207_V ; - smoke_N = mkN "duħħan" "dħaħen" ; smooth_A = regA "lixx" ; - snake_N = mkN "serp" "sriep" ; - snow_N = mkN [] "borra" [] [] [] ; - sock_N = mkN "kalzetta" ; - song_N = mkN "kanzunetta" ; speak_V2 = prepV2 (kellem_KLM_2_8597_V) maP ; spit_V = bezaq_BZQ_1_7549_V ; split_V2 = lilV2 (qasam_QSM_1_9292_V) ; squeeze_V2 = dirV2 (ghasar_GHSR_1_10625_V) ; stab_V2 = lilV2 (mewwes_MWS_2_8921_V) ; stand_V = qaghad_QGHD_1_9210_V ; --- - star_N = mkN "stilla" "stilel" ; - steel_N = mkNNoPlural "azzar" ; - stick_N = mkN "lasta" ; - stone_N = mkN "ġebla" "ġebel" [] "ġebliet" "ġbiel" ; stop_V = waqaf_WQF_1_10067_V ; - stove_N = mkN "kuker" "kukers" ; -- FUKLAR straight_A = regA "dritt" ; - student_N = mkN "student" ; stupid_A = mkA "iblah" "belha" "boloh" ; suck_V2 = lilV2 (rada'_RDGH_1_9388_V) ; - sun_N = mkN "xemx" "xmux" feminine ; swell_V = ntefah_NFH_8_8970_V ; swim_V = gham_GHWM_1_10750_V ; switch8off_V2 = dirV2 (tefa_TFJ_1_9960_V) ; switch8on_V2 = dirV2 (xeghel_XGHL_1_10155_V) ; - table_N = mkN "mejda" "mwejjed" ; - tail_N = possN (mkN "denb" "dnieb") ; talk_V3 = mkV3 kellem_KLM_2_8597_V maP fuqP ; -- PAĊPAĊ, PARLA teach_V2 = lilV2 (ghallem_GHLM_2_10526_V) ; - teacher_N = genderedN "għalliem" "għalliema" ; - television_N = mkN "televixin" "televixins" ; thick_A = mkA "oħxon" "ħoxna" "ħoxnin" "eħxen" ; thin_A = brokenA "rqiq" "rqaq" "rqaq" ; think_V = haseb_HSB_1_8387_V ; throw_V2 = dirV2 (waddab_WDB_2_10027_V) ; tie_V2 = dirV2 (qafel_QFL_1_9206_V) ; today_Adv = mkAdv "illum" ; - tongue_N = possN (mkN "lsien" "ilsna") ; - tooth_N = possN (mkN "sinna" [] [] "sinniet" "snien") ; -- DARSA - train_N = mkN "ferrovija" ; travel_V = vvjagga_V ; - tree_N = mkN "siġra" "siġar" [] "siġriet" [] ; turn_V = dar_DWR_1_7803_V ; ugly_A = mkA "ikrah" "kerha" "koroh" ; uncertain_A = regA "inċert" ; understand_V2 = lilV2 (fehem_FHM_1_10830_V) ; - university_N = mkN "università" "universitàjiet" ; - village_N = mkN "raħal" "rħula" ; -- VILLAĠĠ vomit_V = qala'_QLGH_1_9223_V ; wait_V2 = lilV2 (stenna_'NJ_10_10781_V) ; walk_V = mexa_MXJ_1_8926_V ; - war_N = mkN "gwerra" "gwerrer" ; warm_A = brokenA "sħun" "sħan" ; wash_V2 = lilV2 (hasel_HSL_1_8395_V) ; watch_V2 = dirV2 (ra_R'J_1_9513_V) ; - water_N = mkN "ilma" "ilmijiet" masculine ; wet_A = mkA "mxarrab" "mxarrba" "mxarrbin" ; white_A = mkA "abjad" "bajda" "bojod" ; wide_A = broad_A ; - wife_N = mkN "mara" "nisa" ; win_V2 = dirV2 (rebah_RBH_1_9371_V) ; - wind_N = mkN "riħ" [] [] "rjieħ" "rjiħat" ; - window_N = mkN "tieqa" "twieqi" ; - wine_N = mkN [] "nbid" [] [] "nbejjed" ; - wing_N = mkN "ġewnaħ" "ġwienaħ" ; wipe_V2 = dirV2 (mesah_MSH_1_8881_V) ; - woman_N = mkN "mara" "nisa" ; wonder_VQ = kkuntempla_V ; - wood_N = mkN "injam" "injamiet" ; - worm_N = mkN "dudu" "dud" [] "dudiet" "dwied" ; write_V2 = dirV2 (kiteb_KTB_1_8641_V) ; - year_N = mkN "sena" [] "sentejn" "snin" [] ; yellow_A = mkA "isfar" "safra" "sofor" ; young_A = small_A ; diff --git a/lib/src/maltese/MorphoMlt.gf b/lib/src/maltese/MorphoMlt.gf index 241ea318e..be5efc260 100644 --- a/lib/src/maltese/MorphoMlt.gf +++ b/lib/src/maltese/MorphoMlt.gf @@ -27,35 +27,22 @@ resource MorphoMlt = ResMlt ** open Prelude in { {- Pronoun -------------------------------------------------------------- -} oper - -- [AZ] - mkPron = overload { - - -- jiena, inti, huwa - mkPron : (_,_,_,_ : Str) -> Number -> Person -> Gender -> Pronoun = - \jien, _i, _ni, _li, num, pers, gen -> { - s = table { - Personal => jien ; -- jien - Possessive => "tiegħ" + _i ; -- tiegħi - Suffixed Acc => _ni ; -- rajtni - Suffixed Dat => _li ; -- rajtli - Suffixed Gen => _i -- qalbi, idejja - } ; - a = mkAgr num pers gen ; - } ; - - -- hija, aħna, intom, huma - mkPron : (_,_ : Str) -> Number -> Person -> Gender -> Pronoun = - \hi, _ha, num, pers, gen -> { - s = table { - Personal => hi ; -- hi - Possessive => "tagħ" + _ha ; -- tagħha - Suffixed Acc => _ha ; -- rajtha - Suffixed Dat => "l"+_ha ; -- rajtilha - Suffixed Gen => _ha -- qalbha - } ; - a = mkAgr num pers gen ; - } ; - + mkPron : (_,_ : Str) -> Number -> Person -> Gender -> Pronoun = + \hi, _ha, num, pers, gen -> + let + tagh : Str = case of { + => "tiegħ" ; + => "tiegħ" ; + => "tiegħ" ; + _ => "tagħ" + } ; + in { + s = table { + Personal => hi ; -- hi + Possessive => tagh + _ha ; -- tagħha + Suffixed => _ha -- qalbha + } ; + a = mkAgr num pers gen ; } ; {- Verb ----------------------------------------------------------------- -} diff --git a/lib/src/maltese/NounMlt.gf b/lib/src/maltese/NounMlt.gf index ed40ba3ce..b5e504b62 100644 --- a/lib/src/maltese/NounMlt.gf +++ b/lib/src/maltese/NounMlt.gf @@ -54,8 +54,8 @@ concrete NounMlt of Noun = CatMlt ** open ResMlt, Prelude in { } } ; a = case (numform2nounnum det.n) of { - Singulative => mkAgr Sg P3 cn.g ; --- collective? - _ => mkAgr Pl P3 cn.g + Singulative => mkAgr Sg P3 cn.g ; --- collective? + _ => mkAgr Pl P3 cn.g } ; isPron = False ; isDefn = det.isDefn ; @@ -133,7 +133,7 @@ concrete NounMlt of Noun = CatMlt ** open ResMlt, Prelude in { s = table { NPNom => p.s ! Personal ; NPAcc => p.s ! Personal ; - NPCPrep => p.s ! Suffixed Acc + NPCPrep => p.s ! Suffixed } ; a = p.a ; isPron = True ; @@ -143,7 +143,7 @@ concrete NounMlt of Noun = CatMlt ** open ResMlt, Prelude in { -- Pron -> Quant PossPron p = { s = \\_ => p.s ! Possessive ; - clitic = p.s ! Suffixed Gen ; + clitic = p.s ! Suffixed ; isPron = True ; isDemo = False ; isDefn = True ; @@ -153,7 +153,7 @@ concrete NounMlt of Noun = CatMlt ** open ResMlt, Prelude in { PredetNP pred np = overwriteNPs np (\\c => pred.s ++ np.s ! c) ; -- NP -> V2 -> NP - PPartNP np v2 = overwriteNPs np (\\c => np.s ! c ++ stem1 (v2.s ! VActivePart (toGenNum np.a))) ; + PPartNP np v2 = overwriteNPs np (\\c => np.s ! c ++ (v2.s ! VActivePart (toGenNum np.a)).s1) ; -- NP -> RS -> NP RelNP np rs = overwriteNPs np (\\c => np.s ! c ++ "," ++ rs.s ! np.a ) ; @@ -260,11 +260,6 @@ concrete NounMlt of Noun = CatMlt ** open ResMlt, Prelude in { } ; oper - -- Copied from ParadigmsMlt (didn't want to change import structure) - -- mkPrep : Str -> Prep = \fuq -> lin Prep { - -- s = \\defn => fuq ; - -- takesDet = False - -- } ; prep_ta = lin Prep { s = table { Indefinite => "ta'" ; @@ -285,7 +280,6 @@ concrete NounMlt of Noun = CatMlt ** open ResMlt, Prelude in { oper -- Overwrite the s field in an NP - -- Use this instead of np ** { s = ... } overwriteNPs : NounPhrase -> (NPCase => Str) -> NounPhrase = \np,tbl -> { s = tbl ; a = np.a ; @@ -294,7 +288,6 @@ concrete NounMlt of Noun = CatMlt ** open ResMlt, Prelude in { } ; -- Overwrite the s field in a Noun - -- Use this instead of n ** { s = ... } overwriteCNs : Noun -> (Noun_Number => Str) -> Noun = \n,tbl -> { s = tbl ; g = n.g ; diff --git a/lib/src/maltese/ParadigmsMlt.gf b/lib/src/maltese/ParadigmsMlt.gf index 452204367..96c9defd0 100644 --- a/lib/src/maltese/ParadigmsMlt.gf +++ b/lib/src/maltese/ParadigmsMlt.gf @@ -85,127 +85,122 @@ resource ParadigmsMlt = open _ => Masc } ; - - -- Smart paradigm for building a noun + -- Noun paradigm 1(x): singular and plural(s) mkN : N = overload { - -- Take the singular and infer gender & plural. - -- Assume no special plural forms. - -- Params: - -- Singular, eg AJRUPLAN + -- 1: Take the singular and infer plural mkN : Str -> N = \sing -> - let - plural = inferNounPlural sing ; - gender = inferNounGender sing ; - in - mk5N sing [] [] plural [] gender ; - - -- Take an explicit gender. - -- Assume no special plural forms. - -- Params: - -- Singular, eg AJRUPLAN - -- Gender + let plural = inferNounPlural sing ; + gender = inferNounGender sing ; + in mk5N sing [] [] plural [] gender ; mkN : Str -> Gender -> N = \sing,gender -> - let - plural = inferNounPlural sing ; - in - mk5N sing [] [] plural [] gender ; + let plural = inferNounPlural sing ; + in mk5N sing [] [] plural [] gender ; - -- Take the singular, plural. Infer gender. - -- Assume no special plural forms. - -- Params: - -- Singular, eg KTIEB - -- Plural, eg KOTBA + -- 1: Take the singular and plural mkN : Str -> Str -> N = \sing,plural -> - let - gender = inferNounGender sing ; - in - mk5N sing [] [] plural [] gender ; - - -- Take the singular, plural and gender. - -- Assume no special plural forms. - -- Params: - -- Singular, eg KTIEB - -- Plural, eg KOTBA - -- Gender + let gender = inferNounGender sing ; + in mk5N sing [] [] plural [] gender ; mkN : Str -> Str -> Gender -> N = \sing,plural,gender -> - mk5N sing [] [] plural [] gender ; + mk5N sing [] [] plural [] gender ; - -- Takes all 5 forms, inferring gender - -- Params: - -- Singulative, eg KOXXA - -- Collective, eg KOXXOX - -- Double, eg KOXXTEJN - -- Determinate Plural, eg KOXXIET - -- Indeterminate Plural - mkN : Str -> Str -> Str -> Str -> Str -> N = \sing,coll,dual,det,ind -> - let - gender = if_then_else (Gender) (isNil sing) (inferNounGender coll) (inferNounGender sing) ; - in - mk5N sing coll dual det ind gender ; + -- 1x: Take both plurals + mkN : Str -> Str -> Str -> N = \sing,det,ind -> + let gender = inferNounGender sing ; + in mk5N sing [] [] det ind gender ; + mkN : Str -> Str -> Str -> Gender -> N = \sing,det,ind,gender -> + mk5N sing [] [] det ind gender ; - } ; --end of mkN overload + } ; - -- Take the singular and infer gender. - -- No other plural forms. - -- Params: - -- Singular, eg ARTI + -- Noun paradigm 2: with a collective form + mkNColl = overload { + -- Note: collective noun is always treated as Masculine + + -- 2c + mkNColl : Str -> N = \coll -> + mk5N [] coll [] [] [] Masc ; + + -- 2b + mkNColl : Str -> Str -> N = \coll,det -> + mk5N [] coll [] det [] Masc ; + -- 2bx + -- mkNColl : Str -> Str -> Str -> N = \coll,det,ind -> + -- mk5N [] coll [] det ind Masc ; + + -- 2 + mkNColl : Str -> Str -> Str -> N = \sing,coll,det -> + mk5N sing coll [] det [] Masc ; + -- 2x + mkNColl : Str -> Str -> Str -> Str -> N = \sing,coll,det,ind -> + mk5N sing coll [] det ind Masc ; + + } ; + + -- Noun paradigm 3: only singulative form mkNNoPlural : N = overload { - mkNNoPlural : Str -> N = \sing -> - let gender = inferNounGender sing ; + let gender = inferNounGender sing ; in mk5N sing [] [] [] [] gender ; - mkNNoPlural : Str -> Gender -> N = \sing,gender -> mk5N sing [] [] [] [] gender ; + } ; - } ; --end of mkNNoPlural overload + -- Noun paradigm 4: with dual form + mkNDual = overload { - - -- Take the singular and infer dual, plural & gender - -- Params: - -- Singular, eg AJRUPLAN - mkNDual : Str -> N = \sing -> - let - dual : Str = case sing of { - _ + ("għ"|"'") => sing + "ajn" ; - _ + ("a") => init(sing) + "ejn" ; - _ => sing + "ejn" - } ; - plural = inferNounPlural sing ; - gender = inferNounGender sing ; - in + -- 4 smart + mkNDual : Str -> N = \sing -> + let + dual : Str = case sing of { + _ + ("għ"|"'") => sing + "ajn" ; + _ + ("a") => init(sing) + "ejn" ; + _ => sing + "ejn" + } ; + plural = inferNounPlural sing ; + gender = inferNounGender sing ; + in mk5N sing [] dual plural [] gender ; + -- 4 + mkNDual : Str -> Str -> Str -> N = \sing,dual,det -> + let gender = inferNounGender sing ; + in mk5N sing [] dual det [] gender ; + mkNDual : Str -> Str -> Str -> Gender -> N = \sing,dual,det,gender -> + mk5N sing [] dual det [] gender ; - -- Take the collective, and infer singulative, determinate plural, and gender. - -- Params: - -- Collective Plural, eg TUFFIEĦ - mkNColl : Str -> N = \coll -> - let - stem : Str = case coll of { - -- This can only apply when there are 2 syllables in the word - _ + #Vowel + #Consonant + #Vowel + K@#Consonant => dropSfx 2 coll + K ; -- eg GĦADAM -> GĦADM- + -- 4x + mkNDual : Str -> Str -> Str -> Str -> N = \sing,dual,det,ind -> + let gender = inferNounGender sing ; + in mk5N sing [] dual det ind gender ; + mkNDual : Str -> Str -> Str -> Str -> Gender -> N = \sing,dual,det,ind,gender -> + mk5N sing [] dual det ind gender ; - _ => coll - } ; - sing : Str = case stem of { - _ => stem + "a" - } ; - det : Str = case stem of { - _ => stem + "iet" - } ; - -- gender = inferNounGender sing ; - gender = Masc ; -- Collective noun is always treated as Masculine - in - mk5N sing coll [] det [] gender ; + } ; - -- Build a noun using 5 forms, and a gender + -- Build a noun using 5 potentially non-present forms and a gender + -- You can pass empty strings to this oper; they won't be passed along mk5N : (_,_,_,_,_ : Str) -> Gender -> N ; mk5N = \sing,coll,dual,det,ind,gen -> lin N ( - mkNoun sing coll dual det ind gen + case of { + => mkNoun sing sing det det det gen False False ; -- 1 + => mkNoun sing sing det det ind gen False False ; -- 1x + + => mkNoun sing coll det det det gen True False ; -- 2 + => mkNoun sing coll det det ind gen True False ; -- 2x + => mkNoun coll coll det det det gen True False ; -- 2b + => mkNoun coll coll det det ind gen True False ; -- 2bx + => mkNoun coll coll coll coll coll gen True False ; -- 2c + + => mkNoun sing sing sing sing sing gen False False ; -- 3 + + => mkNoun sing sing dual det det gen False True ; -- 4 + => mkNoun sing sing dual det ind gen False True ; -- 4x + + _ => error "Calling mk5N with some invalid combination" + } ) ; -- Proper noun @@ -594,7 +589,7 @@ resource ParadigmsMlt = open mammaII : Str = dropPfx 1 mammaV ; -- WAQQAF vII : V = derivedV_II mammaII root ; info : VerbInfo = mkVerbInfo vII.i.class FormV vII.i.root vII.i.patt mammaV ; - get : VForm -> Str = \vf -> stem1 (vII.s ! vf) ; + get : VForm -> Str = \vf -> (vII.s ! vf).s1 ; tbl : VForm => Str = table { VPerf agr => pfx_T (get (VPerf agr)) ; VImpf (AgP1 Sg) => pfx "ni" (pfx_T (dropPfx 1 (get (VImpf (AgP1 Sg))))) ; @@ -621,7 +616,7 @@ resource ParadigmsMlt = open mammaIII : Str = dropPfx 1 mammaVI ; -- QIEGĦED vIII : V = derivedV_III mammaIII root ; info : VerbInfo = updateVerbInfo vIII.i FormVI mammaVI ; - get : VForm -> Str = \vf -> stem1 (vIII.s ! vf) ; + get : VForm -> Str = \vf -> (vIII.s ! vf).s1 ; tbl : VForm => Str = table { VPerf agr => pfx_T (get (VPerf agr)) ; VImpf (AgP1 Sg) => pfx "ni" (pfx_T (dropPfx 1 (get (VImpf (AgP1 Sg))))) ; diff --git a/lib/src/maltese/ResMlt.gf b/lib/src/maltese/ResMlt.gf index 399e77c15..426570124 100644 --- a/lib/src/maltese/ResMlt.gf +++ b/lib/src/maltese/ResMlt.gf @@ -10,6 +10,7 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in { flags coding=utf8 ; + optimize=noexpand ; {- General -------------------------------------------------------------- -} @@ -47,7 +48,7 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in { case vagr of { AgP1 num => mkAgr num P1 Masc ; AgP2 num => mkAgr num P2 Masc ; - AgP3Sg gen => mkAgr Pl P3 gen ; + AgP3Sg gen => mkAgr Sg P3 gen ; AgP3Pl => mkAgr Pl P3 Masc } ; } ; @@ -96,6 +97,25 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in { agrP3 : Number -> Gender -> Agr = \n,g -> mkAgr n P3 g; + VPForm2VAgr : VPForm -> VAgr = \vpform -> + case vpform of { + VPIndicat _ vagr => vagr ; + VPImperat n => AgP2 n + }; + + sing : VAgr -> Bool = \agr -> + case toAgr agr of { + {n=Sg; p=_; g=_} => True ; + _ => False + } ; + + femOrPlural : Agr -> Bool = \agr -> + case agr of { + {n=Sg; p=_; g=Fem} => True ; + {n=Pl; p=_; g=_} => True ; + _ => False + } ; + conjAgr : Agr -> Agr -> Agr = \a,b -> { n = (conjNumber a.n b.n) ; p = (conjPerson a.p b.p) ; @@ -314,18 +334,18 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in { -- Determinate Plural, eg KOXXIET -- Indeterminate Plural -- Gender - mkNoun : (_,_,_,_,_ : Str) -> Gender -> Noun = \sing,coll,dual,det,ind,gen -> { + mkNoun : (_,_,_,_,_ : Str) -> Gender -> (_,_ : Bool) -> Noun = \sing,coll,dual,det,ind,gen,hasColl,hasDual -> { s = table { Singulative => sing ; Collective => coll ; Dual => dual ; - Plural => if_then_Str (isNil det) ind det + Plural => det -- Plural => variants {det ; ind} } ; g = gen ; takesPron = False ; - hasDual = notB (isNil dual) ; - hasColl = notB (isNil coll) ; + hasDual = hasDual ; + hasColl = hasColl ; } ; -- Noun phrase @@ -382,16 +402,17 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in { param PronForm = - Personal -- JIENA - | Possessive -- TIEGĦI - | Suffixed PronCase + Personal -- jiena + | Possessive -- tiegħi + | Suffixed -- qalb-i Only nouns! + -- | Suffixed PronCase ; - PronCase = - Acc -- Accusative: rajtu - | Dat -- Dative: rajtlu - | Gen -- Genitive: qalbu - ; + -- PronCase = + -- Acc -- Accusative: rajtu + -- | Dat -- Dative: rajtlu + -- | Gen -- Genitive: qalbu + -- ; oper -- Interrogative pronoun @@ -404,13 +425,9 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in { {- Verb ----------------------------------------------------------------- -} oper + -- Generic variants (used for verb stems) Variants3 : Type = {s1, s2, s3 : Str} ; - -- Shortcut functions for accessing stems - stem1 : Variants3 -> Str = \stems -> stems.s1 ; - stem2 : Variants3 -> Str = \stems -> stems.s2 ; - stem3 : Variants3 -> Str = \stems -> stems.s3 ; - mkVariants3 : Variants3 = overload { mkVariants3 : (s1 : Str) -> Variants3 = \a -> { s1 = a ; s2 = a ; s3 = a } ; mkVariants3 : (s1, s2, s3 : Str) -> Variants3 = \a,b,c -> { s1 = a ; s2 = b ; s3 = c } ; @@ -420,6 +437,51 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in { NullVariants3 : Maybe Variants3 = Nothing Variants3 { s1 = [] ; s2 = [] ; s3 = [] } ; + NullAgr : Maybe Agr = Nothing Agr (agrP3 Sg Masc) ; + + -- Direct object clitic + DirObjVerbClitic : Type = { + s1 : Str ; + s2 : Str ; + s3 : Str ; + } ; + + dirObjSuffix : Agr -> DirObjVerbClitic = \agr' -> + let agr : VAgr = toVAgr agr' in + case agr of { + -- DO DO + .. DO + .. (Neg) + AgP1 Sg => { s1="ni" ; s2="ni" ; s3="ni" } ; + AgP2 Sg => { s1="ek" ; s2="ek" ; s3="k" } ; + AgP3Sg Masc => { s1="u" ; s2="hu" ; s3="hu" } ; + AgP3Sg Fem => { s1="ha" ; s2="hie" ; s3="hi" } ; + AgP1 Pl => { s1="na" ; s2="nie" ; s3="hi" } ; + AgP2 Pl => { s1="kom" ; s2="kom" ; s3="kom" } ; + AgP3Pl => { s1="hom" ; s2="hom" ; s3="hom" } + } ; + + -- Indirect object clitic + IndObjVerbClitic : Type = { + s1 : Str ; -- ftaħt-ilha + s2 : Str ; -- ftaħnie-lha + s3 : Str ; -- ftaħt-ilhiex + s4 : Str ; -- ftaħnie-lhiex + } ; + + -- Only for_Prep causes these to be used, thus it doesn't make sense to store this + -- information in Prep. + indObjSuffix : Agr -> IndObjVerbClitic = \agr' -> + let agr : VAgr = toVAgr agr' in + case agr of { + -- IO IO + Neg IO IO + Neg + AgP1 Sg => { s1="li" ; s2="li" ; s3="li" ; s4="li" } ; + AgP2 Sg => { s1="lek" ; s2="lek" ; s3="lok" ; s4="lok" } ; + AgP3Sg Masc => { s1="lu" ; s2="lu" ; s3="lu" ; s4="lu" } ; + AgP3Sg Fem => { s1="lha" ; s2="lhie" ; s3="ilha" ; s4="ilhie" } ; + AgP1 Pl => { s1="lna" ; s2="lnie" ; s3="ilna" ; s4="ilnie" } ; + AgP2 Pl => { s1="lkom" ; s2="lkom" ; s3="ilkom" ; s4="ilkom" } ; + AgP3Pl => { s1="lhom" ; s2="lhom" ; s3="ilhom" ; s4="ilhom" } + } ; + -- Produce stem variants as needed (only call on compile-time strings!) -- Refer to doc/stems.org stemVariantsPerf : Str -> Variants3 = \s -> @@ -428,23 +490,27 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in { ftahnie : Str = case s of { ftahn + "a" => ftahn + "ie" ; fet + h@#Cns + "et" => fet + h + "it" ; + fet + "aħ" => fet + "ħ" ; _ => s } ; ftahni : Str = case s of { ftahn + "a" => ftahn + "i" ; _ => ftahnie } ; - in - { s1 = ftahna ; s2 = ftahnie ; s3 = ftahni } ; + in { + s1 = ftahna ; s2 = ftahnie ; s3 = ftahni ; + } ; + stemVariantsImpf : Str -> Variants3 = \s -> let - ftahna : Str = s ; - ftahnie : Str = case s of { - nift + "aħ" => nift + "ħ" ; + jiftah : Str = s ; + jifth : Str = case s of { + jift + "aħ" => jift + "ħ" ; _ => s } ; - in - { s1 = ftahna ; s2 = ftahnie ; s3 = ftahna } ; + in { + s1 = jiftah ; s2 = jifth ; s3 = jifth ; + } ; -- Convert old verb form table into one with stem variants stemVariantsTbl : (VForm => Str) -> (VForm => Variants3) = \tbl -> @@ -529,56 +595,104 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in { oper - joinVariants3 : Variants3 -> Polarity -> Str = \stems,pol -> - case of { - => stem1 stems ; - => stem2 stems ++ BIND ++ "x" - } ; - + -- Join verp phrase components into a string joinVP : VerbPhrase -> VPForm -> Anteriority -> Polarity -> Str = \vp,form,ant,pol -> - let + let stems = (vp.s ! form ! ant ! pol).main ; aux = (vp.s ! form ! ant ! pol).aux ; x : Str = "x" ; + agr : VAgr = VPForm2VAgr form ; + dir_a : Agr = fromJust Agr vp.dir ; -- These are lazy + ind_a : Agr = fromJust Agr vp.ind ; + dir = dirObjSuffix dir_a ; + ind = indObjSuffix ind_a ; + + ind_pos : Str = case of { + => ind.s3 ; -- hom-lok + _ => ind.s1 -- hie-lek + } ; + ind_neg : Str = case of { + => ind.s4 ; -- hom-lokx + _ => ind.s2 -- hie-lekx + } ; in case takesAux form ant of { -- aux is already negated for us - True => aux ++ case of { + True => aux ++ case of { -- konna ftaħna / ma konniex ftaħna => stems.s1 ; -- konna ftaħnie-ha / ma konniex ftaħni-ha - => stems.s2 ++ BIND ++ (fromJust Variants3 vp.dir).s1 ; + => stems.s2 ++ BIND ++ dir.s1 ; -- konna ftaħnie-lha / ma konniex ftaħni-lha - => stems.s2 ++ BIND ++ (fromJust Variants3 vp.ind).s1 ; + => stems.s2 ++ BIND ++ ind.s1 ; -- konna ftaħni-hie-lha / ma konniex ftaħni-hi-lha - => stems.s3 ++ BIND ++ (fromJust Variants3 vp.dir).s2 ++ BIND ++ (fromJust Variants3 vp.ind).s1 + => stems.s3 ++ BIND ++ dir.s2 ++ BIND ++ ind.s1 } ; -- No aux part to handle - False => aux ++ case of { + False => aux ++ case isPerf form ant of { - -- ftaħna / ftaħnie-x - => stems.s1 ; - => stems.s2 ++ BIND ++ x ; + True => case of { - -- ftaħnie-ha / ftaħni-hie-x - => stems.s2 ++ BIND ++ (fromJust Variants3 vp.dir).s1 ; - => stems.s3 ++ BIND ++ (fromJust Variants3 vp.dir).s2 ++ BIND ++ x ; + -- ftaħna / ftaħnie-x + => stems.s1 ; + => stems.s2 ++ BIND ++ x ; - -- ftaħnie-lha / ftaħni-lhie-x - => stems.s2 ++ BIND ++ (fromJust Variants3 vp.ind).s1 ; - => stems.s3 ++ BIND ++ (fromJust Variants3 vp.ind).s2 ++ BIND ++ x ; + -- ftaħnie-ha / ftaħni-hie-x + => stems.s2 ++ BIND ++ dir.s1 ; + => stems.s3 ++ BIND ++ dir.s2 ++ BIND ++ x ; - -- ftaħni-hie-lha / ftaħni-hi-lhie-x - => stems.s3 ++ BIND ++ (fromJust Variants3 vp.dir).s2 ++ BIND ++ (fromJust Variants3 vp.ind).s1 ; - => stems.s3 ++ BIND ++ (fromJust Variants3 vp.dir).s3 ++ BIND ++ (fromJust Variants3 vp.ind).s2 ++ BIND ++ x + -- ftaħnie-lha / ftaħni-lhie-x + => case of { + => stems.s2 ++ BIND ++ ind.s3 ; -- fetħ-ilha + => stems.s2 ++ BIND ++ ind.s1 ; -- ftaħnie-lha + _ => stems.s1 ++ BIND ++ ind.s1 -- fetaħ-li + } ; + => case of { + => stems.s2 ++ BIND ++ ind.s4 ++ BIND ++ x ; -- fetħ-ilhiex + => stems.s3 ++ BIND ++ ind.s2 ++ BIND ++ x ; -- ftaħni-lhiex + _ => stems.s1 ++ BIND ++ ind.s2 ++ BIND ++ x -- fetaħ-lix + } ; + -- ftaħni-hie-lha / ftaħni-hi-lhie-x + => stems.s2 ++ BIND ++ dir.s2 ++ BIND ++ ind_pos ; + => stems.s3 ++ BIND ++ dir.s3 ++ BIND ++ ind_neg ++ BIND ++ x + + } ; + + False => case of { + + -- jiftaħ / jiftaħ-x + => stems.s1 ; + => stems.s1 ++ BIND ++ x ; + + -- jiftaħ-ha / jiftaħ-hie-x + => stems.s1 ++ BIND ++ dir.s1 ; + => stems.s1 ++ BIND ++ dir.s2 ++ BIND ++ x ; + + -- jiftħ-ilha / jiftħ-ilhie-x + => case of { + => stems.s2 ++ BIND ++ ind.s3 ; -- jiftħ-ilha + => stems.s2 ++ BIND ++ ind.s1 ; -- jiftħu-lha + _ => stems.s1 ++ BIND ++ ind.s1 -- jiftaħ-li + } ; + => case of { + => stems.s2 ++ BIND ++ ind.s4 ++ BIND ++ x ; -- jiftħ-ilhiex + => stems.s2 ++ BIND ++ ind.s2 ++ BIND ++ x ; -- jiftħu-lhiex + _ => stems.s1 ++ BIND ++ ind.s2 ++ BIND ++ x -- jiftaħ-lix + } ; + + -- jiftaħ-hie-lha / jiftaħ-hi-lhie-x + => stems.s1 ++ BIND ++ dir.s2 ++ BIND ++ ind_pos ; + => stems.s1 ++ BIND ++ dir.s3 ++ BIND ++ ind_neg ++ BIND ++ x + + } } } ; @@ -599,6 +713,21 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in { => False } ; + -- Does a tense + ant give a perfective verb? + -- Must match with the logic in predV + isPerf : VPForm -> Anteriority -> Bool = \vpf,ant -> + case of { + => False ; + => True ; + => False ; + => False ; + => True ; + => True ; + => True ; + => False ; + => False + } ; + VerbParts : Type = { aux : Str ; -- when present, negation is applied here main : Variants3 ; -- enclitics always applied here @@ -611,12 +740,11 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in { mkVerbParts : Str -> Str -> VerbParts = \a,m -> { aux = a ; main = mkVariants3 m } ; } ; - -- [AZ] VerbPhrase : Type = { s : VPForm => Anteriority => Polarity => VerbParts ; s2 : Agr => Str ; -- complement - dir : Maybe Variants3 ; -- direct object clitic - ind : Maybe Variants3 ; -- indirect object clitic + dir : Maybe Agr ; -- direct object clitic + ind : Maybe Agr ; -- indirect object clitic } ; SlashVerbPhrase : Type = VerbPhrase ** {c2 : Compl} ; @@ -647,11 +775,18 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in { insertObjc : (Agr => Str) -> SlashVerbPhrase -> SlashVerbPhrase = \obj,vp -> insertObj obj vp ** {c2 = vp.c2} ; - insertIndObj : Str -> VerbPhrase -> VerbPhrase = \ind,vp -> { + insertDirObj : Agr -> VerbPhrase -> VerbPhrase = \dir,vp -> { + s = vp.s ; + s2 = vp.s2 ; + dir = Just Agr dir ; + ind = vp.ind ; + }; + + insertIndObj : Agr -> VerbPhrase -> VerbPhrase = \ind,vp -> { s = vp.s ; s2 = vp.s2 ; dir = vp.dir ; - ind = mkMaybeVariants3 ind ; + ind = Just Agr ind ; }; insertAdV : Str -> VerbPhrase -> VerbPhrase = \adv,vp -> { @@ -722,8 +857,8 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in { => mkVerbParts (copula_kien.s ! VImp num ! Neg) [] -- kunx } ; s2 = \\agr => [] ; - dir = NullVariants3 ; - ind = NullVariants3 ; + dir = NullAgr ; + ind = NullAgr ; } ; -- [AZ] @@ -737,8 +872,6 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in { case vpf of { VPIndicat tense vagr => let - -- kien = joinVP CopulaVP (VPIndicat Past vagr) Simul Pos ; - -- kienx = joinVP CopulaVP (VPIndicat Past vagr) Simul Neg ; kien = copula_kien.s ! (VPerf vagr) ! Pos ; kienx = copula_kien.s ! (VPerf vagr) ! Neg ; nkun = copula_kien.s ! (VImpf vagr) ! Pos ; @@ -769,11 +902,8 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in { VPImperat num => b1 (verb.s ! VImp num) -- torqodx }; s2 = \\agr => [] ; - dir = NullVariants3 ; - ind = NullVariants3 ; - -- a1 = [] ; - -- n2 = \\_ => [] ; - -- a2 = [] ; + dir = NullAgr ; + ind = NullAgr ; } ; -- There is no infinitive in Maltese; use perfective diff --git a/lib/src/maltese/SentenceMlt.gf b/lib/src/maltese/SentenceMlt.gf index ed8e8ff03..e397667bb 100644 --- a/lib/src/maltese/SentenceMlt.gf +++ b/lib/src/maltese/SentenceMlt.gf @@ -88,7 +88,7 @@ concrete SentenceMlt of Sentence = CatMlt ** open -- VP -> SC -- to go EmbedVP vp = { - s = infVP vp Simul Pos (agrP3 Sg Masc) --- agr + s = infVP vp Simul Pos (agrP3 Sg Masc) } ; -- Temp -> Pol -> Cl -> S diff --git a/lib/src/maltese/StructuralMlt.gf b/lib/src/maltese/StructuralMlt.gf index 200813c93..158b768ef 100644 --- a/lib/src/maltese/StructuralMlt.gf +++ b/lib/src/maltese/StructuralMlt.gf @@ -15,13 +15,13 @@ concrete StructuralMlt of Structural = CatMlt ** {- Pronoun -------------------------------------------------------------- -} - i_Pron = mkPron "jien" "i" "ni" "li" singular P1 masculine ; --- also JIENA - youSg_Pron = mkPron "int" "ek" "ek" "lek" singular P2 masculine ; --- also INTI - he_Pron = mkPron "hu" "u" "hu" "lu" singular P3 masculine ; --- also HUWA - she_Pron = mkPron "hi" "ha" singular P3 feminine ; --- also HIJA - we_Pron = mkPron "aħna" "na" plural P1 masculine ; - youPl_Pron = mkPron "intom" "kom" plural P2 masculine ; - they_Pron = mkPron "huma" "hom" plural P3 masculine ; + i_Pron = mkPron "jien" "i" singular P1 masculine ; --- also JIENA + youSg_Pron = mkPron "int" "ek" singular P2 masculine ; --- also INTI + he_Pron = mkPron "hu" "u" singular P3 masculine ; --- also HUWA + she_Pron = mkPron "hi" "ha" singular P3 feminine ; --- also HIJA + we_Pron = mkPron "aħna" "na" plural P1 masculine ; + youPl_Pron = mkPron "intom" "kom" plural P2 masculine ; + they_Pron = mkPron "huma" "hom" plural P3 masculine ; youPol_Pron = youSg_Pron ; it_Pron = he_Pron ; diff --git a/lib/src/maltese/VerbMlt.gf b/lib/src/maltese/VerbMlt.gf index 66af5f4eb..82225f5d1 100644 --- a/lib/src/maltese/VerbMlt.gf +++ b/lib/src/maltese/VerbMlt.gf @@ -14,8 +14,8 @@ concrete VerbMlt of Verb = CatMlt ** open Prelude, ResMlt in { -- V2 -> VPSlash -- love (it) - SlashV2a = predVc ; - -- SlashV2a v2 = (predV v2) ** { c2 = noCompl } ; -- gets rid of the V2's prep + -- SlashV2a = predVc ; + SlashV2a v2 = (predV v2) ** { c2 = noCompl } ; -- gets rid of the V2's prep -- V3 -> NP -> VPSlash -- give it (to her) @@ -68,17 +68,12 @@ concrete VerbMlt of Verb = CatMlt ** open Prelude, ResMlt in { => { s = vp.s ; s2 = \\agr => vp.s2 ! agr ++ vp.c2.enclitic ! np.a ; - dir = NullVariants3 ; - ind = NullVariants3 ; + dir = NullAgr ; + ind = NullAgr ; } ; - -- Join pron to verb - => { - s = vp.s ; - s2 = \\agr => [] ; - dir = mkMaybeVariants3 (np.s ! NPCPrep) ; --- we'll need to get all the variants direct from the NP - ind = NullVariants3 ; - } ; + -- Add dir pron to verb + => insertDirObj np.a vp ; -- => { -- s = vp.s ; @@ -116,7 +111,7 @@ concrete VerbMlt of Verb = CatMlt ** open Prelude, ResMlt in { -- VP -> Adv -> VP -- sleep here AdvVP vp adv = case adv.joinsVerb of { - True => insertIndObj (indObjSuffix adv.a) vp ; + True => insertIndObj adv.a vp ; False => insertObj (\\_ => adv.s) vp } ; @@ -127,31 +122,10 @@ concrete VerbMlt of Verb = CatMlt ** open Prelude, ResMlt in { -- VPSlash -> Adv -> VPSlash -- use (it) here AdvVPSlash vp adv = case adv.joinsVerb of { - True => insertIndObj (indObjSuffix adv.a) vp ; + True => insertIndObj adv.a vp ; False => insertObj (\\_ => adv.s) vp } ** {c2 = vp.c2} ; - oper - - -- Only for_Prep causes these to be used, thus it doesn't make sense to store this - -- information in Prep. - indObjSuffix : Agr -> Str = \agr -> - case (toVAgr agr) of { - AgP1 Sg => "li" ; - AgP2 Sg => "lek" ; - AgP3Sg Masc => "lu" ; - -- AgP3Sg Fem => "ilha" ; - -- AgP1 Pl => "ilna" ; - -- AgP2 Pl => "ilkom" ; - -- AgP3Pl => "ilhom" --- need to introduce variants here too - AgP3Sg Fem => "lha" ; - AgP1 Pl => "lna" ; - AgP2 Pl => "lkom" ; - AgP3Pl => "lhom" - } ; - - lin - -- AdV -> VPSlash -> VPSlash -- always use (it) AdVVPSlash adv vp = insertAdV adv.s vp ** {c2 = vp.c2} ; @@ -162,7 +136,7 @@ concrete VerbMlt of Verb = CatMlt ** open Prelude, ResMlt in { -- V2 -> VP -- be loved - PassV2 v2 = insertObj (\\agr => stem1 (v2.s ! VPassivePart (toGenNum agr)) ++ v2.c2.s ! Definite) CopulaVP ; + PassV2 v2 = insertObj (\\agr => (v2.s ! VPassivePart (toGenNum agr)).s1 ++ v2.c2.s ! Definite) CopulaVP ; -- AP -> Comp -- (be) small