diff --git a/lib/doc/MkSynopsis.hs b/lib/doc/MkSynopsis.hs
index 8df378a0a..62ba34aeb 100644
--- a/lib/doc/MkSynopsis.hs
+++ b/lib/doc/MkSynopsis.hs
@@ -17,8 +17,8 @@ synopsis = "synopsis.txt"
revealedLang = "Eng"
-- all languages shown
-apiExxFiles = ["api-examples-" ++ lang ++ ".txt" | lang <- words
--- "Eng Chi"
+apiExxFiles = ["api-examples-" ++ lang ++ ".txt" | lang <- words
+-- "Eng Chi"
"Afr Bul Cat Chi Dan Dut Eng Fin Fre Ger Gre Hin Ita Jpn Lav Mlt Nep Nor Pes Pnb Pol Ron Rus Snd Spa Swe Tha Urd"
]
@@ -26,7 +26,7 @@ main = do
xx <- getArgs
let isLatex = case xx of
"-tex":_ -> True
- _ -> False
+ _ -> False
cs1 <- getCats commonAPI
cs2 <- getCats catAPI
let cs = sortCats (cs1 ++ cs2)
@@ -42,7 +42,7 @@ main = do
append "%!postproc(html): '#UL' '
'"
append "%!postproc(html): '#EUL' '
'"
append "%!postproc(html): '#LI' ''"
- append "%!postproc(html): '(SRC=\"categories.png\")' '\\1 USEMAP=\"#categories\"'"
+ append "%!postproc(html): '(SRC=\"categories.png\")' '\\1 USEMAP=\"#categories\"'"
append "%!postproc(html): '#LParadigms' ''"
append "%!postproc(tex): '#LParadigms' ''"
delimit $ addToolTips cs
@@ -66,12 +66,12 @@ main = do
space
apiExx <- getApiExx apiExxFiles
rs <- getRules apiExx syntaxAPI
---- putStrLn $ unlines ["p -cat=" ++ last (words t) ++
+--- putStrLn $ unlines ["p -cat=" ++ last (words t) ++
--- " \"" ++ e ++ "\"" | (_,t,e) <- rs, not (null e)] ----
rs2 <- getRules apiExx structuralAPI
let rss = rs ++ rs2
--- mapM_ putStrLn [f ++ " " ++ e | (f,_,e) <- rss]
- delimit $ mkSplitTables True isLatex apiExx cs rss
+ delimit $ mkSplitTables True isLatex apiExx cs rss
space
-- title "Structural Words"
-- space
@@ -138,7 +138,7 @@ getRules aexx file = do
_:":":_ -> getrs (rule s:rs) ss2
_ -> getrs rs ss2
rule s = (name, typ, ex)
- where
+ where
ws = takeWhile (flip notElem ["--#", "--:", "="]) $ words s
name = head ws
(t,e) = span (/="--") (tail ws)
@@ -171,7 +171,7 @@ inChunks i f = concat . intersperse ["\n\n"] . map f . chunks i where
mkSplitTables :: Bool -> Bool -> ApiExx -> Cats -> Rules -> [String]
mkSplitTables hasEx isLatex aexx cs = concatMap t . addLexicalCats cs . sortRules
where t (c, xs) = [subtitle c expl] ++ tableOrLink
- where
+ where
expl = case [e | (n,e,_) <- cs, n == c] of
[] -> ""
e:_ -> e
@@ -185,25 +185,25 @@ mkTable :: Bool -> Bool -> ApiExx -> Cats -> Rules -> [String]
mkTable hasEx isLatex aexx cs = inChunks chsize (\rs -> header : map (unwords . row) rs)
where
chsize = if isLatex then 40 else 1000
- header = if hasEx then "|| Function | Type | Example ||"
+ header = if hasEx then "|| Function | Type | Example ||"
else "|| Function | Type | Explanation ||"
row (name,typ,ex) =
let ntyp = mkIdent (name ++ " : " ++ typ) in
if hasEx then ["|", name', "|", typ', "|", ex' ntyp, "|"]
else ["|", name', "|", typ', "|", expl ntyp, "|"]
- where
+ where
name' = ttf name
typ' = showTyp cs typ
- ex' typ = let ex0 = if null ex then itf (takeWhile (/='_') name) else ex in
+ ex' typ = let ex0 = if null ex then itf (takeWhile (/='_') name) else ex in
case M.lookup typ aexx of
Just es -> mkExample es ex0
_ -> itf ex0
- expl typ = if null ex then itf "-" else itf ex
+ expl typ = if null ex then itf "-" else itf ex
-- make an example with hover-popup translations
mkExample es ex = unwords [
"#divreveal",
- itf (maybe ex id (M.lookup revealedLang es)),
+ itf (maybe ex id (M.lookup revealedLang es)),
"#divpopup",
"#UL",
unwords ["#LI" ++ e | e <- prApiEx es],
@@ -296,11 +296,11 @@ sortCats = sortBy compareCat
sortRules :: Rules -> [Rules]
sortRules = groupBy sameCat . sortBy compareRules
where sameCat r1 r2 = resultCat r1 == resultCat r2
- compareRules r1@(n1,_,_) r2@(n2,_,_)
+ compareRules r1@(n1,_,_) r2@(n2,_,_)
= compare (resultCat r1,n1) (resultCat r2,n2)
addLexicalCats :: Cats -> [Rules] -> [(String,Rules)]
-addLexicalCats cs rss =
+addLexicalCats cs rss =
map head $ groupBy fstEq $ sortBy (\x y -> compare (fst x) (fst y)) $
[ (resultCat r, rs) | rs@(r:_) <- rss] ++ [(n,[]) | (n,_,_) <- cs]
where fstEq p1 p2 = fst p1 == fst p2
@@ -335,10 +335,11 @@ readFileC cod file = do
system $ "iconv -f ISO-8859-1 -t UTF-8 " ++ file ++ " >" ++ tmp
readFile tmp
+-- 'intelligently' determine the coding of a file
coding file = case language file of
"Pol" -> "utf8"
"Rus" -> "utf8"
+ "Mlt" -> "utf8"
_ -> "latin1"
language = reverse . take 3 . drop 3 . reverse
-
diff --git a/lib/src/maltese/DictMlt.gf b/lib/src/maltese/DictMlt.gf
index 517074f1c..aedc894bb 100644
--- a/lib/src/maltese/DictMlt.gf
+++ b/lib/src/maltese/DictMlt.gf
@@ -345,12 +345,12 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
tkaghweg_KGHWG_2_7009_V = mkV_II "tkagħweġ" (mkRoot "k-għ-w-ġ") ;
kolja_KLJJ_1_7010_V = mkV "kolja" (mkRoot "k-l-j-j") ;
kampa_KMPJ_1_7011_V = mkV "kampa" (mkRoot "k-m-p-j") ;
- kompla_KMPLJ_1_7012_V = mkV quadWeak form1 (mkRoot "k-m-pl-j") (mkPattern "o" "a")
+ kompla_KMPLJ_1_7012_V = mkV quadWeak form1 (mkRoot "k-m-pl-j") (mkVowels "o" "a")
"komplejt" "komplejt" "kompla" "kompliet" "komplejna" "komplejtu" "komplew"
"nkompli" "tkompli" "jkompli" "tkompli" "nkomplu" "tkomplu" "jkomplu"
"kompli" "komplu"
;
- tkompla_KMPLJ_2_7013_V = mkV quadWeak form2 (mkRoot "k-m-pl-j") (mkPattern "o" "a")
+ tkompla_KMPLJ_2_7013_V = mkV quadWeak form2 (mkRoot "k-m-pl-j") (mkVowels "o" "a")
"tkomplejt" "tkomplejt" "tkompla" "tkompliet" "tkomplejna" "tkomplejtu" "tkomplew"
"nitkompla" "titkompla" "jitkompla" "titkompla" "nitkomplu" "titkomplu" "jitkomplu"
"tkompla" "tkomplu"
@@ -428,12 +428,12 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
mander_MNDR_1_7085_V = mkV "mander" (mkRoot "m-n-d-r") ;
tmandar_MNDR_2_7086_V = mkV_II "tmandar" (mkRoot "m-n-d-r") ;
menghel_MNGHL_1_7087_V = mkV "mengħel" (mkRoot "m-n-għ-l") ;
- mantna_MNTNJ_1_7088_V = mkV quadWeak form1 (mkRoot "m-n-tn-j") (mkPattern "a" "a")
+ mantna_MNTNJ_1_7088_V = mkV quadWeak form1 (mkRoot "m-n-tn-j") (mkVowels "a" "a")
"mantnejt" "mantnejt" "mantna" "mantniet" "mantnejna" "mantnejtu" "mantnew"
"nmantna" "tmantna" "jmantna" "tmantna" "nmantnu" "tmantnu" "jmantnu"
"mantna" "mantnu"
;
- tmantna_MNTNJ_2_7089_V = mkV quadWeak form2 (mkRoot "m-n-tn-j") (mkPattern "a" "a")
+ tmantna_MNTNJ_2_7089_V = mkV quadWeak form2 (mkRoot "m-n-tn-j") (mkVowels "a" "a")
"tmantnejt" "tmantnejt" "tmantna" "tmantniet" "tmantnejna" "tmantnejtu" "tmantnew"
"nitmantna" "titmantna" "jitmantna" "titmantna" "nitmantnu" "titmantnu" "jitmantnu"
"tmantna" "tmantnu"
@@ -784,12 +784,12 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
balla'_BLGH_2_7436_V = mkV_II "balla'" (mkRoot "b-l-għ") ;
tballa'_BLGH_5_7437_V = mkV_V "tballa'" (mkRoot "b-l-għ") ;
nbela'_BLGH_7_7438_V = mkV_VII "bela'" "nbela'" (mkRoot "b-l-għ") ;
- blehhen_BLHN_1_7439_V = mkV strong form1 (mkRoot "bl-ħ-n") (mkPattern "e" "e")
+ blehhen_BLHN_1_7439_V = mkV strong form1 (mkRoot "bl-ħ-n") (mkVowels "e" "e")
"bleħħint" "bleħħint" "bleħħen" "bleħħnet" "bleħħinna" "bleħħintu" "bleħħnu"
"nbleħħen" "tbleħħen" "jibleħħen" "tbleħħen" "nbleħħnu" "tbleħħnu" "jibleħħnu"
"bleħħen" "bleħħnu"
;
- tblehhen_BLHN_2_7440_V = mkV strong form2 (mkRoot "bl-ħ-n") (mkPattern "e" "e")
+ tblehhen_BLHN_2_7440_V = mkV strong form2 (mkRoot "bl-ħ-n") (mkVowels "e" "e")
"tbleħħint" "tbleħħint" "tbleħħen" "tbleħħnet" "tbleħħinna" "tbleħħintu" "tbleħħnu"
"nitbleħħen" "titbleħħen" "jitbleħħen" "titbleħħen" "nitbleħħnu" "titbleħħnu" "jitbleħħnu"
"tbleħħen" "tbleħħnu"
@@ -846,7 +846,7 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
tberrek_BRK_5_7490_V = mkV_V "tberrek" (mkRoot "b-r-k") ;
bierek_BRK_3_7491_V = mkV_III "bierek" (mkRoot "b-r-k") ;
tbierek_BRK_6_7492_V = mkV_VI "tbierek" (mkRoot "b-r-k") ;
- tbrekken_BRKN_5_7493_V = mkV strong form5 (mkRoot "br-k-n") (mkPattern "e" "e")
+ tbrekken_BRKN_5_7493_V = mkV strong form5 (mkRoot "br-k-n") (mkVowels "e" "e")
"tbrekkint" "tbrekkint" "tbrekken" "tbrekknet" "tbrekkinna" "tbrekkintu" "tbrekknu"
"nitbrekken" "titbrekken" "jitbrekken" "titbrekken" "nitbrekknu" "titbrekknu" "jitbrekknu"
"tbrekken" "tbrekknu"
@@ -1484,7 +1484,7 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
gezz_GZZ_1_8120_V = mkV "ġeżż" (mkRoot "ġ-ż-ż") ;
gezzez_GZZ_2_8121_V = mkV_II "ġeżżeż" (mkRoot "ġ-ż-ż") ;
ngezz_GZZ_7_8122_V = mkV_VII "ġeżż" "nġeżż" (mkRoot "ġ-ż-ż") ;
- gie_GJ'_1_8123_V = presPartV "ġej" (pastPartV "miġjub" (irregularV form1 (mkRoot "ġ-j-'") (mkPattern "ie" [])
+ gie_GJ'_1_8123_V = presPartV "ġej" (pastPartV "miġjub" (irregularV form1 (mkRoot "ġ-j-'") (mkVowels "ie" [])
"ġejt" "ġejt" "ġie" "ġiet" "ġejna" "ġejtu" "ġew"
"niġi" "tiġi" "jiġi" "tiġi" "niġu" "tiġu" "jiġu"
"ejja" "ejjew"
@@ -2035,7 +2035,7 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
tkejjef_KJF_5_8669_V = mkV_V "tkejjef" (mkRoot "k-j-f") ;
kejjel_KJL_2_8670_V = mkV_II "kejjel" (mkRoot "k-j-l") ;
tkejjel_KJL_5_8671_V = mkV_V "tkejjel" (mkRoot "k-j-l") ;
- kiel_KJL_1_8672_V = pastPartV "mikul" (irregularV form1 (mkRoot "k-j-l") (mkPattern "ie" [])
+ kiel_KJL_1_8672_V = pastPartV "mikul" (irregularV form1 (mkRoot "k-j-l") (mkVowels "ie" [])
"kilt" "kilt" "kiel" "kielet" "kilna" "kiltu" "kielu"
"niekol" "tiekol" "jiekol" "tiekol" "nieklu" "tieklu" "jieklu"
("kul"|"iekol") ("kulu"|"ieklu")
@@ -2062,7 +2062,7 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
kewa_KWJ_1_8692_V = mkV "kewa" (mkRoot "k-w-j") ;
tkiewa_KWJ_6_8693_V = mkV_VI "tkiewa" (mkRoot "k-w-j") ;
nkewa_KWJ_7_8694_V = mkV_VII "kewa" "nkewa" (mkRoot "k-w-j") ;
- kien_KWN_1_8695_V = irregularV form1 (mkRoot "k-w-n") (mkPattern "ie" [])
+ kien_KWN_1_8695_V = irregularV form1 (mkRoot "k-w-n") (mkVowels "ie" [])
"kont" "kont" "kien" "kienet" "konna" "kontu" "kienu"
"nkun" "tkun" "jkun" "tkun" "nkunu" "tkunu" "jkunu"
"kun" "kunu"
@@ -2289,7 +2289,7 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
tmiera_MRJ_6_8915_V = mkV_VI "tmiera" (mkRoot "m-r-j") ;
mewweg_MWG_2_8916_V = mkV_II "mewweġ" (mkRoot "m-w-ġ") ;
tmewweg_MWG_5_8917_V = mkV_V "tmewweġ" (mkRoot "m-w-ġ") ;
- mar_MWR_1_8918_V = presPartV "sejjer" (irregularV form1 (mkRoot "m-w-r") (mkPattern "a" [])
+ mar_MWR_1_8918_V = presPartV "sejjer" (irregularV form1 (mkRoot "m-w-r") (mkVowels "a" [])
"mort" "mort" "mar" "marret" "morna" "mortu" "marru"
"mmur" "tmur" "jmur" "tmur" "mmorru" "tmorru" "jmorru"
"mur" "morru"
@@ -2730,7 +2730,7 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
nqara_QRJ_7_9354_V = mkV_VII "qara" "nqara" (mkRoot "q-r-j") ;
qawwa_QWJ_2_9355_V = mkV_II "qawwa" (mkRoot "q-w-j") ;
tqawwa_QWJ_5_9356_V = mkV_V "tqawwa" (mkRoot "q-w-j") ;
- qal_QWL_1_9357_V = irregularV form1 (mkRoot "q-w-l") (mkPattern "a" [])
+ qal_QWL_1_9357_V = irregularV form1 (mkRoot "q-w-l") (mkVowels "a" [])
"għedt" "għedt" "qal" "qalet" "għedna" "għedtu" "qalu"
"ngħid" "tgħid" "jgħid" "tgħid" "ngħidu" "tgħidu" "jgħidu"
"għid" "għidu"
@@ -2890,12 +2890,12 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
razan_RZN_1_9510_V = mkV "rażan" (mkRoot "r-ż-n") ;
razzan_RZN_2_9511_V = mkV_II "rażżan" (mkRoot "r-ż-n") ;
trazzan_RZN_5_9512_V = mkV_V "trażżan" (mkRoot "r-ż-n") ;
- ra_R'J_1_9513_V = pastPartV "muri" (irregularV form1 (mkRoot "r-'-j") (mkPattern "a" [])
+ ra_R'J_1_9513_V = pastPartV "muri" (irregularV form1 (mkRoot "r-'-j") (mkVowels "a" [])
"rajt" "rajt" "ra" "rat" "rajna" "rajtu" "raw"
"nara" "tara" "jara" "tara" "naraw" "taraw" "jaraw"
"ara" "araw"
) ;
- ntwera_R'J_7_9514_V = irregularV form7 (mkRoot "r-'-j") (mkPattern "e" "e")
+ ntwera_R'J_7_9514_V = irregularV form7 (mkRoot "r-'-j") (mkVowels "e" "e")
"ntwerejt" "ntwerejt" "ntwera" "ntweriet" "ntwerejna" "ntwerejtu" "ntwerew"
"nintwera" "tintwera" "jintwera" "tintwera" "nintwerew" "tintwerew" "jintwerew"
"ntwera" "ntwerew"
@@ -3293,17 +3293,17 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
ntelaq_TLQ_7_9906_V = mkV_VII "telaq" "ntelaq" (mkRoot "t-l-q") ;
tellet_TLT_2_9907_V = mkV_II "tellet" (mkRoot "t-l-t") ;
ttellet_TLT_5_9908_V = mkV_V "ttellet" (mkRoot "t-l-t") ;
- tamma_TM'_2_9909_V = mkV irregular form2 (mkRoot "t-m-'") (mkPattern "a" "a")
+ tamma_TM'_2_9909_V = mkV irregular form2 (mkRoot "t-m-'") (mkVowels "a" "a")
"tammajt" "tammajt" "tamma" "tammat" "tammajna" "tammajtu" "tammaw"
"nitamma" "titamma" "jitamma" "titamma" "nitammaw" "titammaw" "jitammaw"
"tamma" "tammaw"
;
- tama_TM'_3_9910_V = mkV irregular form3 (mkRoot "t-m-'") (mkPattern "a" "a")
+ tama_TM'_3_9910_V = mkV irregular form3 (mkRoot "t-m-'") (mkVowels "a" "a")
"tamajt" "tamajt" "tama" "tamat" "tamajna" "tamajtu" "tamaw"
"nitama" "titama" "jitama" "titama" "nitamaw" "titamaw" "jitamaw"
"tama" "tamaw"
;
- ttama_TM'_6_9911_V = mkV irregular form6 (mkRoot "t-m-'") (mkPattern "a" "a")
+ ttama_TM'_6_9911_V = mkV irregular form6 (mkRoot "t-m-'") (mkVowels "a" "a")
"ttamajt" "ttamajt" "ttama" "ttamat" "ttamajna" "ttamajtu" "ttamaw"
"nittama" "tittama" "jittama" "tittama" "nittamaw" "tittamaw" "jittamaw"
"ttama" "ttamaw"
@@ -3458,7 +3458,7 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
wieled_WLD_3_10059_V = mkV_III "wieled" (mkRoot "w-l-d") ;
twelled_WLD_5_10060_V = mkV_V "twelled" (mkRoot "w-l-d") ;
twieled_WLD_6_10061_V = mkV_VI "twieled" (mkRoot "w-l-d") ;
- emmen_WMN_1_10062_V = irregularV form1 (mkRoot "w-m-n") (mkPattern "e" "e")
+ emmen_WMN_1_10062_V = irregularV form1 (mkRoot "w-m-n") (mkVowels "e" "e")
"emmint" "emmint" "emmen" "emmnet" "emminna" "emmintu" "emmnu"
"nemmen" "temmen" "jemmen" "temmen" "nemmnu" "temmnu" "jemmnu"
"emmen" "emmnu"
@@ -4167,78 +4167,78 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
tghazza_GHZW_5_10764_V = mkV_V "tgħażża" (mkRoot "għ-ż-w") ;
hassel_HSL_2_10765_V = mkV_II "ħassel" (mkRoot "ħ-s-l") ;
thassel_HSL_5_10766_V = mkV_V "tħassel" (mkRoot "ħ-s-l") ;
- ta_GHTJ_1_10767_V = pastPartV "mogħti" (irregularV form1 (mkRoot "għ-t-j") (mkPattern "a" [])
+ ta_GHTJ_1_10767_V = pastPartV "mogħti" (irregularV form1 (mkRoot "għ-t-j") (mkVowels "a" [])
"tajt" "tajt" "ta" "tat" "tajna" "tajtu" "taw"
"nagħti" "tagħti" "jagħti" "tagħti" "nagħtu" "tagħtu" "jagħtu"
"agħti" "agħtu"
) ;
nghata_GHTJ_7_10768_V = mkV_VII "għata" "ngħata" (mkRoot "għ-t-j") ;
- idda_'DJ_8_10771_V = irregularV form8 (mkRoot "'-d-j") (mkPattern "i" "e")
+ idda_'DJ_8_10771_V = irregularV form8 (mkRoot "'-d-j") (mkVowels "i" "e")
"iddejt" "iddejt" "idda" "iddiet" "iddejna" "iddejtu" "iddew"
"niddi" "tiddi" "jiddi" "tiddi" "niddu" "tiddu" "jiddu"
"iddi" "iddu"
;
- idden_'DN_2_10772_V = irregularV form2 (mkRoot "'-d-n") (mkPattern "i" "e")
+ idden_'DN_2_10772_V = irregularV form2 (mkRoot "'-d-n") (mkVowels "i" "e")
"iddint" "iddint" "idden" "iddnet" "iddinna" "iddinntu" "iddnu"
"nidden" "tidden" "jidden" "tidden" "niddnu" "tiddnu" "jiddnu"
"idden" "iddnu"
;
- stieden_'DN_10_10773_V = irregularV form10 (mkRoot "'-d-n") (mkPattern "ie" "e")
+ stieden_'DN_10_10773_V = irregularV form10 (mkRoot "'-d-n") (mkVowels "ie" "e")
"stedint" "stedint" "stieden" "stiednet" "stedinna" "stedintu" "stiednu"
"nistieden" "tistieden" "jistieden" "tistieden" "nistiednu" "tistiednu" "jistiednu"
"stieden" "stiednu"
;
- af_''F_1_10774_V = irregularV form1 (mkRoot "'-'-f") (mkPattern "a" [])
+ af_''F_1_10774_V = irregularV form1 (mkRoot "'-'-f") (mkVowels "a" [])
"kont naf" "kont taf" "kien jaf" "kienet taf" "konna nafu" "kontu tafu" "kienu jafu" --- will fail for negative
"naf" "taf" "jaf" "taf" "nafu" "tafu" "jafu"
"kun af" "kunu afu"
;
- ntaf_''F_7_10775_V = irregularV form2 (mkRoot "'-'-f") (mkPattern "a" [])
+ ntaf_''F_7_10775_V = irregularV form2 (mkRoot "'-'-f") (mkVowels "a" [])
"ntafejt" "ntafejt" "ntaf" "ntafet" "ntafna" "ntaftu" "ntafu"
"nintaf" "tintaf" "jintaf" "tintaf" "nintafu" "tintafu" "jintafu"
"ntaf" "ntafu"
;
- ha_'HD_1_10776_V = irregularV form1 (mkRoot "'-ħ-d") (mkPattern "a" [])
+ ha_'HD_1_10776_V = irregularV form1 (mkRoot "'-ħ-d") (mkVowels "a" [])
"ħadt" "ħadt" "ħa" "ħadet" "ħadna" "ħadtu" "ħadu"
"nieħu" "tieħu" "jieħu" "tieħu" "nieħdu" "tieħdu" "jieħdu"
"ħu" "ħudu"
;
- ttiehed_'HD_6_10777_V = irregularV form6 (mkRoot "'-ħ-d") (mkPattern "ie" "e")
+ ttiehed_'HD_6_10777_V = irregularV form6 (mkRoot "'-ħ-d") (mkVowels "ie" "e")
"ttieħedt" "ttieħedt" "ttieħed" "ttieħdet" "ttieħedna" "ttieħedtu" "ttieħdu"
"nittieħed" "tittieħed" "jittieħed" "tittieħed" "nittieħdu" "tittieħdu" "jittieħdu"
"ttieħed" "ttieħdu"
;
- staha_'HJ_10_10778_V = irregularV form10 (mkRoot "'-ħ-j") (mkPattern "a" "a")
+ staha_'HJ_10_10778_V = irregularV form10 (mkRoot "'-ħ-j") (mkVowels "a" "a")
"stħajt" "stħajt" "staħa" "stħiet" "stħajna" "stħajtu" "stħew"
"nistħi" "tistħi" "jistħi" "tistħi" "nistħu" "tistħu" "jistħu"
"istħi" "istħu"
;
- amar_'MR_1_10779_V = irregularV form1 (mkRoot "'-m-r") (mkPattern "a" "a") -- order, command
+ amar_'MR_1_10779_V = irregularV form1 (mkRoot "'-m-r") (mkVowels "a" "a") -- order, command
"amart" "amart" "amar" "amret" "amarna" "amartu" "amraw"
"namar" "tamar" "jamar" "tamar" "namraw" "tamraw" "jamraw"
"amar" "amraw"
;
- amba_'MB_1_10780_V = irregularV form1 (mkRoot "'-m-b") (mkPattern "a" "a")
+ amba_'MB_1_10780_V = irregularV form1 (mkRoot "'-m-b") (mkVowels "a" "a")
"ambajt" "ambajt" "amba" "ambat" "ambajna" "ambajtu" "ambaw"
"namba" "tamba" "jamba" "tamba" "nambaw" "tambaw" "jambaw"
"amba" "ambaw"
;
- stenna_'NJ_10_10781_V = pastPartV "mistenni" (irregularV form10 (mkRoot "'-n-j") (mkPattern "e" "a")
+ stenna_'NJ_10_10781_V = pastPartV "mistenni" (irregularV form10 (mkRoot "'-n-j") (mkVowels "e" "a")
"stennejt" "stennejt" "stenna" "stenniet" "stennejna" "stennejtu" "stennew"
"nistenna" "tistenna" "jistenna" "tistenna" "nistennew" "tistennew" "jistennew"
"stenna" "stennew"
) ;
- stienes_'NS_10_10782_V = mkV irregular form10 (mkRoot "'-n-s") (mkPattern "ie" "e")
+ stienes_'NS_10_10782_V = mkV irregular form10 (mkRoot "'-n-s") (mkVowels "ie" "e")
"stienist" "stienist" "stienes" "stienset" "stienisna" "stienistu" "stiensu"
"nistienes" "tistienes" "jistienes" "tistienes" "nistiensu" "tistiensu" "jistiensu"
"stienes" "stiensu"
;
- izza_'ZJ_2_10783_V = irregularV form2 (mkRoot "'-ż-j") (mkPattern "i" "a")
+ izza_'ZJ_2_10783_V = irregularV form2 (mkRoot "'-ż-j") (mkVowels "i" "a")
"iżżajt" "iżżajt" "iżża" "iżżat" "iżżajna" "iżżajtu" "iżżaw"
"niżżi" "tiżżi" "jiżżi" "tiżżi" "niżżu" "tiżżu" "jiżżu"
"iżżi" "iżżu"
;
- azzem_'ZM_2_10784_V = irregularV form2 (mkRoot "'-ż-m") (mkPattern "a" "e")
+ azzem_'ZM_2_10784_V = irregularV form2 (mkRoot "'-ż-m") (mkVowels "a" "e")
"ażżimt" "ażżimt" "ażżem" "ażżmet" "ażżimna" "ażżimtu" "ażżmu"
"nażżem" "tażżem" "jażżem" "tażżem" "nażżmu" "tażżmu" "jażżmu"
"ażżem" "ażżmu"
@@ -4273,12 +4273,12 @@ concrete DictMlt of DictMltAbs = CatMlt ** open ParadigmsMlt in {
pexxex_PXX_2_10812_V = mkV_II "pexxex" (mkRoot "p-x-x") ;
penpen_PNPN_1_10813_V = mkV "penpen" (mkRoot "p-n-p-n") ;
hezzez_HZZ_2_10814_V = mkV_II "heżżeż" (mkRoot "h-ż-ż") ;
- wera_R'J_1_10815_V = irregularV form4 (mkRoot "r-'-j") (mkPattern "e" "a")
+ wera_R'J_1_10815_V = irregularV form4 (mkRoot "r-'-j") (mkVowels "e" "a")
"urejt" "urejt" "wera" "uriet" "urejna" "urejtu" "urejna"
"nuri" "turi" "juri" "turi" "nuru" "turu" "juru"
"uri" "uru"
;
- ntara_R'J_7_10816_V = irregularV form7 (mkRoot "r-'-j") (mkPattern "a" "a")
+ ntara_R'J_7_10816_V = irregularV form7 (mkRoot "r-'-j") (mkVowels "a" "a")
"ntrajt" "ttarajt" "ntara" "ttarat" "ntrajna" "ntrajtu" "ntraw"
"nintara" "tintara" "jintara" "tintara" "nintaraw" "tintaraw" "jintaraw"
"ntara" "ntaraw"
diff --git a/lib/src/maltese/LexiconMlt.gf b/lib/src/maltese/LexiconMlt.gf
index 1cc27ee0a..a31084483 100644
--- a/lib/src/maltese/LexiconMlt.gf
+++ b/lib/src/maltese/LexiconMlt.gf
@@ -318,15 +318,15 @@ concrete LexiconMlt of Lexicon = CatMlt **
broad_A = mkA "wiesgħa" "wiesgħa" "wiesgħin" ;
brown_A = sameA "kannella" ;
clean_A = brokenA "nadif" "nodfa" ;
- clever_A = regA "bravu" ;
+ clever_A = mkA "bravu" ;
cold_A = mkA "kiesaħ" "kiesħa" "kesħin" ;
- correct_A = regA "korrett" ;
- dirty_A = regA "maħmuġ" ;
- dry_A = regA "niexef" ;
+ correct_A = mkA "korrett" ;
+ dirty_A = mkA "maħmuġ" ;
+ dry_A = mkA "niexef" ;
dull_A = sameA "tad-dwejjaq" ;
easy_A2V = dirA2 (sameA "faċli") ;
empty_A = mkA "vojt" "vojta" "vojta" ;
- full_A = regA "mimli" ;
+ full_A = mkA "mimli" ;
fun_AV = sameA "pjaċevoli" ;
good_A = mkA "tajjeb" "tajba" "tajbin" ;
green_A = mkA "aħdar" "ħadra" "ħodor" ;
@@ -336,24 +336,24 @@ concrete LexiconMlt of Lexicon = CatMlt **
long_A = brokenA "twil" "twal" "itwal" ;
married_A2 = mkA2 (mkA "miżżewweġ" "miżżewġa") lilP ;
narrow_A = mkA "dejjaq" "dejqa" "dojoq" "idjaq" ;
- near_A = regA "viċin" ;
+ near_A = mkA "viċin" ;
new_A = brokenA "ġdid" "ġodda" ;
old_A = brokenA "qadim" "qodma" "eqdem" ; -- xiħ
probable_AS = mkAS (sameA "probabbli") ;
- ready_A = regA "lest" ;
+ ready_A = mkA "lest" ;
red_A = mkA "aħmar" "ħamra" "ħomor" ;
rotten_A = mkA "mħassar" "mħassra" "mħassrin" ;
- round_A = regA "tond" ;
+ round_A = mkA "tond" ;
sharp_A = mkA "jaqta'" "taqta'" "jaqtgħu" ;
short_A = brokenA "qasir" "qosra" "iqsar" ;
small_A = brokenA "zgħir" "zgħar" "iżgħar" ;
- smooth_A = regA "lixx" ;
- straight_A = regA "dritt" ;
+ smooth_A = mkA "lixx" ;
+ straight_A = mkA "dritt" ;
stupid_A = mkA "iblah" "belha" "boloh" ;
thick_A = mkA "oħxon" "ħoxna" "ħoxnin" "eħxen" ;
thin_A = brokenA "rqiq" "rqaq" "rqaq" ;
ugly_A = mkA "ikrah" "kerha" "koroh" ;
- uncertain_A = regA "inċert" ;
+ uncertain_A = mkA "inċert" ;
warm_A = brokenA "sħun" "sħan" ;
wet_A = mkA "mxarrab" "mxarrba" "mxarrbin" ;
white_A = mkA "abjad" "bajda" "bojod" ;
diff --git a/lib/src/maltese/MorphoMlt.gf b/lib/src/maltese/MorphoMlt.gf
index 832ea4f41..d59ebfc63 100644
--- a/lib/src/maltese/MorphoMlt.gf
+++ b/lib/src/maltese/MorphoMlt.gf
@@ -45,6 +45,54 @@ resource MorphoMlt = ResMlt ** open Prelude in {
a = mkAgr num pers gen ;
} ;
+ {- Noun --------------------------------------------------------------- -}
+
+ -- Helper function for inferring noun plural from singulative
+ -- Nouns with collective & determinate forms should not use this...
+ inferNounPlural : Str -> Str = \sing ->
+ case sing of {
+ _ + "na" => init sing + "iet" ; -- eg WIDNIET
+ _ + "i" => sing + "n" ; -- eg BAĦRIN, DĦULIN, RAĦLIN
+ _ + ("a"|"u") => init(sing) + "i" ; -- eg ROTI
+ _ + "q" => sing + "at" ; -- eg TRIQAT
+ _ => sing + "i"
+ } ;
+
+ -- Helper function for inferring noun gender from singulative
+ -- Refer {MDG pg190}
+ inferNounGender : Str -> Gender = \sing ->
+ case sing of {
+ _ + "aġni" => Fem ;
+ _ + "anti" => Fem ;
+ _ + "zzjoni" => Fem ;
+ _ + "ġenesi" => Fem ;
+ _ + "ite" => Fem ;
+ _ + "itù" => Fem ;
+ _ + "joni" => Fem ;
+ _ + "ojde" => Fem ;
+ _ + "udni" => Fem ;
+ _ + ("a"|"à") => Fem ;
+ _ => Masc
+ } ;
+
+ {- Adjective ------------------------------------------------------------ -}
+
+ -- Infer femininine form of adjective from masculine
+ inferAdjFem : Str -> Str ;
+ inferAdjFem masc = case masc of {
+ _ + "ef" => (dropSfx 2 masc) + "fa" ; -- NIEXEF
+ _ + "u" => (init masc) + "a" ; -- BRAVU
+ _ + "i" => masc + "ja" ; -- MIMLI
+ _ => masc + "a" -- VOJT
+ } ;
+
+ -- Infer plural form of adjective from feminine
+ inferAdjPlural : Str -> Str ;
+ inferAdjPlural fem = case fem of {
+ _ + ("f"|"j"|"ġ") + "a" => (init fem) + "in" ; -- NIEXFA, MIMLIJA, MAĦMUĠA
+ _ => (init fem) + "i" -- BRAVA
+ } ;
+
{- Verb ----------------------------------------------------------------- -}
oper
@@ -64,19 +112,19 @@ resource MorphoMlt = ResMlt ** open Prelude in {
-- IE/I vowel changes
-- so far only used in derived verbs
- vowelChangesIE : Root -> Pattern -> Pattern = \root,vowels ->
+ vowelChangesIE : Root -> Vowels -> Vowels = \root,vowels ->
case of { -- see {GO pg93}
- <{C2="għ"},{V1="ie";V2="e"}> => mkPattern "e" "i" ; -- QIEGĦED > QEGĦIDKOM
- <_,{V1="ie";V2="e"}> => mkPattern "i" "i" ; -- WIEĠEB > WIĠIBKOM
- <_,{V1="ie";V2=""}> => mkPattern "i" ; -- STRIEĦ > STRIĦAJT
+ <{C2="għ"},{V1="ie";V2="e"}> => mkVowels "e" "i" ; -- QIEGĦED > QEGĦIDKOM
+ <_,{V1="ie";V2="e"}> => mkVowels "i" "i" ; -- WIEĠEB > WIĠIBKOM
+ <_,{V1="ie";V2=""}> => mkVowels "i" ; -- STRIEĦ > STRIĦAJT
_ => vowels
} ;
{- ~~~ Strong Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense
- -- Params: Root, Pattern
- conjStrongPerf : Root -> Pattern -> (VAgr => Str) = \root,p ->
+ -- Params: Root, Vowels
+ conjStrongPerf : Root -> Vowels -> (VAgr => Str) = \root,p ->
let
ktib = root.C1 + root.C2 + (case p.V2 of {"e" => "i" ; _ => p.V2 }) + root.C3 ;
kitb = root.C1 + p.V1 + root.C2 + root.C3 ;
@@ -95,11 +143,11 @@ resource MorphoMlt = ResMlt ** open Prelude in {
-- Params: Imperative Singular (eg IKTEB), Imperative Plural (eg IKTBU)
conjStrongImpf = conjGenericImpf ;
- -- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns
- -- Params: Root, Pattern
- conjStrongImp : Root -> Pattern -> (Number => Str) = \root,patt ->
+ -- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
+ -- Params: Root, Vowels
+ conjStrongImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
let
- vwls = vowelChangesStrong patt ;
+ vwls = vowelChangesStrong vseq ;
in
table {
Sg => (vwls!Sg).V1 + root.C1 + root.C2 + (vwls!Sg).V2 + root.C3 ; -- Inti: IKTEB
@@ -107,43 +155,43 @@ resource MorphoMlt = ResMlt ** open Prelude in {
} ;
-- Vowel changes for imperative
- vowelChangesStrong : Pattern -> (Number => Pattern) = \patt ->
+ vowelChangesStrong : Vowels -> (Number => Vowels) = \vseq ->
table {
- Sg => case of {
- <"a","a"> => mkPattern "o" "o" ; -- RABAT > ORBOT (but: ILGĦAB, AĦBAT)
- <"a","e"> => mkPattern "a" "e" ; -- GĦAMEL > AGĦMEL
- <"e","e"> => mkPattern "i" "e" ; -- FEHEM > IFHEM
- <"e","a"> => mkPattern "i" "a" ; -- FETAĦ > IFTAĦ (but: ONFOĦ)
- <"i","e"> => mkPattern "i" "e" ; -- KITEB > IKTEB
- <"o","o"> => mkPattern "o" "o" -- GĦOĠOB > OGĦĠOB
+ Sg => case of {
+ <"a","a"> => mkVowels "o" "o" ; -- RABAT > ORBOT (but: ILGĦAB, AĦBAT)
+ <"a","e"> => mkVowels "a" "e" ; -- GĦAMEL > AGĦMEL
+ <"e","e"> => mkVowels "i" "e" ; -- FEHEM > IFHEM
+ <"e","a"> => mkVowels "i" "a" ; -- FETAĦ > IFTAĦ (but: ONFOĦ)
+ <"i","e"> => mkVowels "i" "e" ; -- KITEB > IKTEB
+ <"o","o"> => mkVowels "o" "o" -- GĦOĠOB > OGĦĠOB
};
- Pl => case of {
- <"a","a"> => mkPattern "o" ; -- RABAT > ORBTU
- <"a","e"> => mkPattern "a" ; -- GĦAMEL > AGĦMLU
- <"e","e"> => mkPattern "i" ; -- FEHEM > IFHMU
- <"e","a"> => mkPattern "i" ; -- FETAĦ > IFTĦU
- <"i","e"> => mkPattern "i" ; -- KITEB > IKTBU
- <"o","o"> => mkPattern "o" -- GĦOĠOB > OGĦĠBU
+ Pl => case of {
+ <"a","a"> => mkVowels "o" ; -- RABAT > ORBTU
+ <"a","e"> => mkVowels "a" ; -- GĦAMEL > AGĦMLU
+ <"e","e"> => mkVowels "i" ; -- FEHEM > IFHMU
+ <"e","a"> => mkVowels "i" ; -- FETAĦ > IFTĦU
+ <"i","e"> => mkVowels "i" ; -- KITEB > IKTBU
+ <"o","o"> => mkVowels "o" -- GĦOĠOB > OGĦĠBU
}
} ;
{- ~~~ Liquid-Medial Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense
- -- Params: Root, Pattern
- conjLiquidMedialPerf : Root -> Pattern -> (VAgr => Str) = \root,patt ->
+ -- Params: Root, Vowels
+ conjLiquidMedialPerf : Root -> Vowels -> (VAgr => Str) = \root,vseq ->
let
zlaq : Str = case root.C1 of {
- "għ" => root.C1 + patt.V1 + root.C2 + (case patt.V2 of {"e" => "i" ; _ => patt.V2 }) + root.C3 ; -- GĦAMIL-
- _ => root.C1 + root.C2 + (case patt.V2 of {"e" => "i" ; _ => patt.V2 }) + root.C3 -- ŻLAQ-
+ "għ" => root.C1 + vseq.V1 + root.C2 + (case vseq.V2 of {"e" => "i" ; _ => vseq.V2 }) + root.C3 ; -- GĦAMIL-
+ _ => root.C1 + root.C2 + (case vseq.V2 of {"e" => "i" ; _ => vseq.V2 }) + root.C3 -- ŻLAQ-
} ;
- zelq = root.C1 + patt.V1 + root.C2 + root.C3 ;
+ zelq = root.C1 + vseq.V1 + root.C2 + root.C3 ;
in
table {
AgP1 Sg => zlaq + "t" ; -- Jiena ŻLAQT
AgP2 Sg => zlaq + "t" ; -- Inti ŻLAQT
- AgP3Sg Masc=> root.C1 + patt.V1 + root.C2 + patt.V2 + root.C3 ; -- Huwa ŻELAQ
- AgP3Sg Fem => zelq + (case patt.V2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija ŻELQET
+ AgP3Sg Masc=> root.C1 + vseq.V1 + root.C2 + vseq.V2 + root.C3 ; -- Huwa ŻELAQ
+ AgP3Sg Fem => zelq + (case vseq.V2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija ŻELQET
AgP1 Pl => zlaq + "na" ; -- Aħna ŻLAQNA
AgP2 Pl => zlaq + "tu" ; -- Intom ŻLAQTU
AgP3Pl => zelq + "u" -- Huma ŻELQU
@@ -153,11 +201,11 @@ resource MorphoMlt = ResMlt ** open Prelude in {
-- Params: Imperative Singular (eg IŻLOQ), Imperative Plural (eg IŻOLQU)
conjLiquidMedialImpf = conjGenericImpf ;
- -- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns
- -- Params: Root, Pattern
- conjLiquidMedialImp : Root -> Pattern -> (Number => Str) = \root,patt ->
+ -- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
+ -- Params: Root, Vowels
+ conjLiquidMedialImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
let
- vwls = vowelChangesLiquidMedial patt ;
+ vwls = vowelChangesLiquidMedial vseq ;
in
table {
Sg => (vwls!Sg).V1 + root.C1 + root.C2 + (vwls!Sg).V2 + root.C3 ; -- Inti: IŻLOQ
@@ -165,33 +213,33 @@ resource MorphoMlt = ResMlt ** open Prelude in {
} ;
-- Vowel changes for imperative
- vowelChangesLiquidMedial : Pattern -> (Number => Pattern) = \patt ->
+ vowelChangesLiquidMedial : Vowels -> (Number => Vowels) = \vseq ->
table {
- Sg => case of {
- <"a","a"> => mkPattern "i" "o" ; -- TALAB > ITLOB but ĦARAQ > AĦRAQ
- <"a","e"> => mkPattern "o" "o" ; -- ĦAREĠ > OĦROĠ
- <"e","e"> => mkPattern "e" "e" ; -- ĦELES > EĦLES
- <"e","a"> => mkPattern "i" "o" ; -- ŻELAQ > IŻLOQ
- <"i","e"> => mkPattern "i" "e" ; -- DILEK > IDLEK
- <"o","o"> => mkPattern "i" "o" -- XOROB > IXROB
+ Sg => case of {
+ <"a","a"> => mkVowels "i" "o" ; -- TALAB > ITLOB but ĦARAQ > AĦRAQ
+ <"a","e"> => mkVowels "o" "o" ; -- ĦAREĠ > OĦROĠ
+ <"e","e"> => mkVowels "e" "e" ; -- ĦELES > EĦLES
+ <"e","a"> => mkVowels "i" "o" ; -- ŻELAQ > IŻLOQ
+ <"i","e"> => mkVowels "i" "e" ; -- DILEK > IDLEK
+ <"o","o"> => mkVowels "i" "o" -- XOROB > IXROB
};
- Pl => case of {
- <"a","a"> => mkPattern "i" "o" ; -- TALAB > ITOLBU
- <"a","e"> => mkPattern "o" "o" ; -- ĦAREĠ > OĦORĠU
- <"e","e"> => mkPattern "e" "i" ; -- ĦELES > EĦILSU
- <"e","a"> => mkPattern "i" "o" ; -- ŻELAQ > IŻOLQU
- <"i","e"> => mkPattern "i" "i" ; -- DILEK > IDILKU
- <"o","o"> => mkPattern "i" "o" -- XOROB > IXORBU
+ Pl => case of {
+ <"a","a"> => mkVowels "i" "o" ; -- TALAB > ITOLBU
+ <"a","e"> => mkVowels "o" "o" ; -- ĦAREĠ > OĦORĠU
+ <"e","e"> => mkVowels "e" "i" ; -- ĦELES > EĦILSU
+ <"e","a"> => mkVowels "i" "o" ; -- ŻELAQ > IŻOLQU
+ <"i","e"> => mkVowels "i" "i" ; -- DILEK > IDILKU
+ <"o","o"> => mkVowels "i" "o" -- XOROB > IXORBU
}
} ;
{- ~~~ Geminated Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense
- -- Params: Root, Pattern
- conjGeminatedPerf : Root -> Pattern -> (VAgr => Str) = \root,patt ->
+ -- Params: Root, Vowels
+ conjGeminatedPerf : Root -> Vowels -> (VAgr => Str) = \root,vseq ->
let
- habb = root.C1 + patt.V1 + root.C2 + root.C3 ;
+ habb = root.C1 + vseq.V1 + root.C2 + root.C3 ;
in
table {
AgP1 Sg => habb + "ejt" ; -- Jiena ĦABBEJT
@@ -207,11 +255,11 @@ resource MorphoMlt = ResMlt ** open Prelude in {
-- Params: Imperative Singular (eg IKTEB), Imperative Plural (eg IKTBU)
conjGeminatedImpf = conjGenericImpf ;
- -- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns
- -- Params: Root, Pattern
- conjGeminatedImp : Root -> Pattern -> (Number => Str) = \root,patt ->
+ -- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
+ -- Params: Root, Vowels
+ conjGeminatedImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
let
- vwls = vowelChangesGeminated patt ;
+ vwls = vowelChangesGeminated vseq ;
stem_sg = root.C1 + (vwls!Sg).V1 + root.C2 + root.C3 ;
in
table {
@@ -220,30 +268,30 @@ resource MorphoMlt = ResMlt ** open Prelude in {
} ;
-- Vowel changes for imperative
- vowelChangesGeminated : Pattern -> (Number => Pattern) = \patt ->
- \\n => case patt.V1 of {
- "e" => mkPattern "e" ; -- BEXX > BEXX (?)
- _ => mkPattern "o" -- ĦABB > ĦOBB
+ vowelChangesGeminated : Vowels -> (Number => Vowels) = \vseq ->
+ \\n => case vseq.V1 of {
+ "e" => mkVowels "e" ; -- BEXX > BEXX (?)
+ _ => mkVowels "o" -- ĦABB > ĦOBB
} ;
{- ~~~ Assimilative Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense
- -- Params: Root, Pattern
- conjAssimilativePerf : Root -> Pattern -> (VAgr => Str) = \root,patt ->
+ -- Params: Root, Vowels
+ conjAssimilativePerf : Root -> Vowels -> (VAgr => Str) = \root,vseq ->
let
wasal = case root.C3 of {
- "għ" => root.C1 + patt.V1 + root.C2 + patt.V2 + "j" ;
- _ => root.C1 + patt.V1 + root.C2 + patt.V2 + root.C3
+ "għ" => root.C1 + vseq.V1 + root.C2 + vseq.V2 + "j" ;
+ _ => root.C1 + vseq.V1 + root.C2 + vseq.V2 + root.C3
} ;
- wasl = root.C1 + patt.V1 + root.C2 + root.C3 ;
+ wasl = root.C1 + vseq.V1 + root.C2 + root.C3 ;
in
table {
AgP1 Sg => wasal + "t" ; -- Jiena WASALT
AgP2 Sg => wasal + "t" ; -- Inti WASALT
AgP3Sg Masc=> case root.C3 of {
- "għ" => root.C1 + patt.V1 + root.C2 + patt.V2 + "'" ; -- Huwa WAQA'
+ "għ" => root.C1 + vseq.V1 + root.C2 + vseq.V2 + "'" ; -- Huwa WAQA'
_ => wasal -- Huwa WASAL
} ;
AgP3Sg Fem => wasl + "et" ; -- Hija WASLET
@@ -256,23 +304,23 @@ resource MorphoMlt = ResMlt ** open Prelude in {
-- Params: Imperative Singular (eg ASAL), Imperative Plural (eg ASLU)
conjAssimilativeImpf = conjGenericImpf ;
- -- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns
- -- Params: Root, Pattern
- conjAssimilativeImp : Root -> Pattern -> (Number => Str) = \root,patt ->
+ -- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
+ -- Params: Root, Vowels
+ conjAssimilativeImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
table {
- Sg => patt.V1 + root.C2 + patt.V2 + case root.C3 of { "għ" => "'" ; _ => root.C3 } ; -- Inti: ASAL
- Pl => patt.V1 + root.C2 + root.C3 + "u" -- Intom: ASLU
+ Sg => vseq.V1 + root.C2 + vseq.V2 + case root.C3 of { "għ" => "'" ; _ => root.C3 } ; -- Inti: ASAL
+ Pl => vseq.V1 + root.C2 + root.C3 + "u" -- Intom: ASLU
} ;
{- ~~~ Hollow Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense
- -- Params: Root, Pattern
+ -- Params: Root, Vowels
-- Refer: http://blog.johnjcamilleri.com/2012/07/vowel-patterns-maltese-hollow-verb/
- conjHollowPerf : Root -> Pattern -> (VAgr => Str) = \root,patt ->
+ conjHollowPerf : Root -> Vowels -> (VAgr => Str) = \root,vseq ->
let
- sar = root.C1 + patt.V1 + root.C3 ;
- sir = case of {
+ sar = root.C1 + vseq.V1 + root.C3 ;
+ sir = case of {
<"a","w"> => root.C1 + "o" + root.C3 ; -- DAM, FAR, SAQ (most common case)
_ => root.C1 + "i" + root.C3
}
@@ -300,18 +348,18 @@ resource MorphoMlt = ResMlt ** open Prelude in {
AgP3Pl => pfx_J imp_pl -- Huma JDUMU / JMORRU
} ;
- -- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns
- -- Params: Root, Pattern
+ -- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
+ -- Params: Root, Vowels
-- Refer: http://blog.johnjcamilleri.com/2012/07/vowel-patterns-maltese-hollow-verb/
- conjHollowImp : Root -> Pattern -> (Number => Str) = \root,patt ->
+ conjHollowImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
let
- sir = case of {
+ sir = case of {
<"a","w"> => root.C1 + "u" + root.C3 ; -- DAM, FAR, SAQ (most common case)
<"a","j"> => root.C1 + "i" + root.C3 ; -- ĠAB, SAB, TAR
<"ie","j"> => root.C1 + "i" + root.C3 ; -- FIEQ, RIED, ŻIED
<"ie","w"> => root.C1 + "u" + root.C3 ; -- MIET
<"e","j"> => root.C1 + "i" + root.C3 ; -- GĦEB
- _ => Predef.error("Unhandled case in hollow verb:"++root.C1+patt.V1+root.C2+patt.V2+root.C3)
+ _ => Predef.error("Unhandled case in hollow verb:"++root.C1+vseq.V1+root.C2+vseq.V2+root.C3)
}
in
table {
@@ -322,23 +370,23 @@ resource MorphoMlt = ResMlt ** open Prelude in {
{- ~~~ Lacking Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense
- -- Params: Root, Pattern
- conjLackingPerf : Root -> Pattern -> (VAgr => Str) = \root,patt ->
+ -- Params: Root, Vowels
+ conjLackingPerf : Root -> Vowels -> (VAgr => Str) = \root,vseq ->
let
- mxej = root.C1 + root.C2 + patt.V1 + root.C3
+ mxej = root.C1 + root.C2 + vseq.V1 + root.C3
in
table {
--- i tal-leħen needs to be added here!
AgP1 Sg => mxej + "t" ; -- Jiena IMXEJT
AgP2 Sg => mxej + "t" ; -- Inti IMXEJT
- AgP3Sg Masc=> root.C1 + patt.V1 + root.C2 + patt.V2 ; -- Huwa MEXA
- AgP3Sg Fem => case patt.V1 of {
+ AgP3Sg Masc=> root.C1 + vseq.V1 + root.C2 + vseq.V2 ; -- Huwa MEXA
+ AgP3Sg Fem => case vseq.V1 of {
"a" => root.C1 + root.C2 + "at" ; -- Hija QRAT
_ => root.C1 + root.C2 + "iet" -- Hija MXIET
} ;
AgP1 Pl => mxej + "na" ; -- Aħna IMXEJNA
AgP2 Pl => mxej + "tu" ; -- Intom IMXEJTU
- AgP3Pl => case patt.V1 of {
+ AgP3Pl => case vseq.V1 of {
"a" => root.C1 + root.C2 + "aw" ; -- Huma QRAW
_ => root.C1 + root.C2 + "ew" -- Huma IMXEW
}
@@ -348,9 +396,9 @@ resource MorphoMlt = ResMlt ** open Prelude in {
-- Params: Imperative Singular (eg IMXI), Imperative Plural (eg IMXU)
conjLackingImpf = conjGenericImpf ;
- -- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns
- -- Params: Root, Pattern
- conjLackingImp : Root -> Pattern -> (Number => Str) = \root,patt ->
+ -- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
+ -- Params: Root, Vowels
+ conjLackingImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
table {
Sg => "i" + root.C1 + root.C2 + "i" ; -- Inti: IMXI
Pl => "i" + root.C1 + root.C2 + "u" -- Intom: IMXU
@@ -359,17 +407,17 @@ resource MorphoMlt = ResMlt ** open Prelude in {
{- ~~~ Defective Verb ~~~ -}
-- Conjugate entire verb in PERFECT tense
- -- Params: Root, Pattern
- conjDefectivePerf : Root -> Pattern -> ( VAgr => Str ) = \root,patt ->
+ -- Params: Root, Vowels
+ conjDefectivePerf : Root -> Vowels -> ( VAgr => Str ) = \root,vseq ->
let
- qlaj = root.C1 + root.C2 + (case patt.V2 of {"e" => "i" ; _ => patt.V2 }) + "j" ;
- qalgh = root.C1 + patt.V1 + root.C2 + root.C3 ;
+ qlaj = root.C1 + root.C2 + (case vseq.V2 of {"e" => "i" ; _ => vseq.V2 }) + "j" ;
+ qalgh = root.C1 + vseq.V1 + root.C2 + root.C3 ;
in
table {
AgP1 Sg => qlaj + "t" ; -- Jiena QLAJT
AgP2 Sg => qlaj + "t" ; -- Inti QLAJT
- AgP3Sg Masc=> root.C1 + patt.V1 + root.C2 + patt.V2 + "'" ; -- Huwa QALA'
- AgP3Sg Fem => qalgh + (case patt.V2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija QALGĦET
+ AgP3Sg Masc=> root.C1 + vseq.V1 + root.C2 + vseq.V2 + "'" ; -- Huwa QALA'
+ AgP3Sg Fem => qalgh + (case vseq.V2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija QALGĦET
AgP1 Pl => qlaj + "na" ; -- Aħna QLAJNA
AgP2 Pl => qlaj + "tu" ; -- Intom QLAJTU
AgP3Pl => qalgh + "u" -- Huma QALGĦU
@@ -379,32 +427,32 @@ resource MorphoMlt = ResMlt ** open Prelude in {
-- Params: Imperative Singular (eg IKTEB), Imperative Plural (eg IKTBU)
conjDefectiveImpf = conjGenericImpf ;
- -- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns
- -- Params: Root, Pattern
- conjDefectiveImp : Root -> Pattern -> ( Number => Str ) = \root,patt ->
+ -- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
+ -- Params: Root, Vowels
+ conjDefectiveImp : Root -> Vowels -> ( Number => Str ) = \root,vseq ->
let
- v1 = case patt.V1 of { "e" => "i" ; _ => patt.V1 } ;
+ v1 = case vseq.V1 of { "e" => "i" ; _ => vseq.V1 } ;
v_pl : Str = case root.C2 of { #LiquidCons => "i" ; _ => "" } ; -- some verbs require "i" insertion in middle (eg AQILGĦU)
in
table {
- Sg => v1 + root.C1 + root.C2 + patt.V2 + "'" ; -- Inti: AQLA' / IBŻA'
+ Sg => v1 + root.C1 + root.C2 + vseq.V2 + "'" ; -- Inti: AQLA' / IBŻA'
Pl => v1 + root.C1 + v_pl + root.C2 + root.C3 + "u" -- Intom: AQILGĦU / IBŻGĦU
} ;
{- ~~~ Quadriliteral Verb (Strong) ~~~ -}
-- Conjugate entire verb in PERFECT tense
- -- Params: Root, Pattern
- conjQuadPerf : Root -> Pattern -> (VAgr => Str) = \root,patt ->
+ -- Params: Root, Vowels
+ conjQuadPerf : Root -> Vowels -> (VAgr => Str) = \root,vseq ->
let
- dendil = root.C1 + patt.V1 + root.C2 + root.C3 + (case patt.V2 of {"e" => "i" ; _ => patt.V2 }) + root.C4 ;
- dendl = root.C1 + patt.V1 + root.C2 + root.C3 + root.C4 ;
+ dendil = root.C1 + vseq.V1 + root.C2 + root.C3 + (case vseq.V2 of {"e" => "i" ; _ => vseq.V2 }) + root.C4 ;
+ dendl = root.C1 + vseq.V1 + root.C2 + root.C3 + root.C4 ;
in
table {
AgP1 Sg => dendil + "t" ; -- Jiena DENDILT
AgP2 Sg => dendil + "t" ; -- Inti DENDILT
- AgP3Sg Masc=> root.C1 + patt.V1 + root.C2 + root.C3 + patt.V2 + root.C4 ; -- Huwa DENDIL
- AgP3Sg Fem => dendl + (case patt.V2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija DENDLET
+ AgP3Sg Masc=> root.C1 + vseq.V1 + root.C2 + root.C3 + vseq.V2 + root.C4 ; -- Huwa DENDIL
+ AgP3Sg Fem => dendl + (case vseq.V2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija DENDLET
AgP1 Pl => dendil + "na" ; -- Aħna DENDILNA
AgP2 Pl => dendil + "tu" ; -- Intom DENDILTU
AgP3Pl => dendl + "u" -- Huma DENDLU
@@ -423,19 +471,19 @@ resource MorphoMlt = ResMlt ** open Prelude in {
AgP3Pl => pfx_J imp_pl -- Huma JDENDLU
} ;
- -- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns
- -- Params: Root, Pattern
- conjQuadImp : Root -> Pattern -> (Number => Str) = \root,patt ->
+ -- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
+ -- Params: Root, Vowels
+ conjQuadImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
table {
- Sg => root.C1 + patt.V1 + root.C2 + root.C3 + patt.V2 + root.C4 ; -- Inti: DENDEL
- Pl => root.C1 + patt.V1 + root.C2 + root.C3 + root.C4 + "u" -- Intom: DENDLU
+ Sg => root.C1 + vseq.V1 + root.C2 + root.C3 + vseq.V2 + root.C4 ; -- Inti: DENDEL
+ Pl => root.C1 + vseq.V1 + root.C2 + root.C3 + root.C4 + "u" -- Intom: DENDLU
} ;
{- ~~~ Quadriliteral Verb (Weak Final) ~~~ -}
-- Conjugate entire verb in PERFECT tense
-- Params: Stem
- conjQuadWeakPerf : Root -> Pattern -> Str -> (VAgr => Str) = \root,patt,imp_sg ->
+ conjQuadWeakPerf : Root -> Vowels -> Str -> (VAgr => Str) = \root,vseq,imp_sg ->
case takeSfx 1 imp_sg of {
"a" => -- KANTA
let
@@ -452,13 +500,13 @@ resource MorphoMlt = ResMlt ** open Prelude in {
} ;
_ => -- SERVI
let
- serve = root.C1 + patt.V1 + root.C2 + root.C3 + "e" ;
+ serve = root.C1 + vseq.V1 + root.C2 + root.C3 + "e" ;
in
table {
AgP1 Sg => serve + "jt" ; -- Jiena SERVEJT
AgP2 Sg => serve + "jt" ; -- Inti SERVEJT
- AgP3Sg Masc=> root.C1 + patt.V1 + root.C2 + root.C3 + patt.V2 ; -- Huwa SERVA
- AgP3Sg Fem => root.C1 + patt.V1 + root.C2 + root.C3 + "iet" ; -- Hija SERVIET
+ AgP3Sg Masc=> root.C1 + vseq.V1 + root.C2 + root.C3 + vseq.V2 ; -- Huwa SERVA
+ AgP3Sg Fem => root.C1 + vseq.V1 + root.C2 + root.C3 + "iet" ; -- Hija SERVIET
AgP1 Pl => serve + "jna" ; -- Aħna SERVEJNA
AgP2 Pl => serve + "jtu" ; -- Intom SERVEJTU
AgP3Pl => serve + "w" -- Huma SERVEW
@@ -478,13 +526,13 @@ resource MorphoMlt = ResMlt ** open Prelude in {
AgP3Pl => pfx_J imp_pl -- Huma JSERVU
} ;
- -- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns
- -- Params: Root, Pattern
- conjQuadWeakImp : Root -> Pattern -> (Number => Str) = \root,patt ->
+ -- Conjugate entire verb in IMPERATIVE tense, infers vowel sequence
+ -- Params: Root, Vowels
+ conjQuadWeakImp : Root -> Vowels -> (Number => Str) = \root,vseq ->
table {
--- this is known to fail for KANTA, but that seems like a less common case
- Sg => root.C1 + patt.V1 + root.C2 + root.C3 + "i" ; -- Inti: SERVI
- Pl => root.C1 + patt.V1 + root.C2 + root.C3 + "u" -- Intom: SERVU
+ Sg => root.C1 + vseq.V1 + root.C2 + root.C3 + "i" ; -- Inti: SERVI
+ Pl => root.C1 + vseq.V1 + root.C2 + root.C3 + "u" -- Intom: SERVU
} ;
@@ -542,7 +590,7 @@ resource MorphoMlt = ResMlt ** open Prelude in {
} ;
-- Conjugate entire verb in IMPERATIVE tense
- -- Params: Root, Pattern
+ -- Params: Root, Vowels
conjLoanImp : Str -> (Number => Str) = \mamma ->
table {
Sg => case mamma of {
@@ -560,37 +608,37 @@ resource MorphoMlt = ResMlt ** open Prelude in {
conjFormII : VerbInfo -> (VForm => Str) = \i ->
let
mamma : Str = case i.class of {
- Weak Defective => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 + i.patt.V2 + "'" ; -- QATTA'
- Weak Lacking => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 + i.patt.V2 ; -- NEĦĦA
- _ => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 + i.patt.V2 + i.root.C3 -- WAQQAF
+ Weak Defective => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 + i.vseq.V2 + "'" ; -- QATTA'
+ Weak Lacking => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 + i.vseq.V2 ; -- NEĦĦA
+ _ => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 + i.vseq.V2 + i.root.C3 -- WAQQAF
} ;
nehhi : Str = case i.class of {
- Weak Lacking => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 + "i" ; -- NEĦĦI
+ Weak Lacking => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 + "i" ; -- NEĦĦI
_ => mamma -- WAQQAF
} ;
- bexxix : Str = case of {
- => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 + i.patt.V2 + "j" ; -- QATTAJ
- <_,"e","a"> => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 + "e" + i.root.C3 ; -- NEĦĦEJ
- <_,_,"e"> => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 + "i" + i.root.C3 ;
+ bexxix : Str = case of {
+ => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 + i.vseq.V2 + "j" ; -- QATTAJ
+ <_,"e","a"> => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 + "e" + i.root.C3 ; -- NEĦĦEJ
+ <_,_,"e"> => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 + "i" + i.root.C3 ;
_ => nehhi -- no change
} ;
waqqf : Str = case i.class of {
- Weak Hollow => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3 ; -- QAJM
- Weak Lacking => i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2 ; -- NEĦĦ
- _ => sfx (i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C2) i.root.C3
+ Weak Hollow => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3 ; -- QAJM
+ Weak Lacking => i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2 ; -- NEĦĦ
+ _ => sfx (i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C2) i.root.C3
} ;
waqqfu : Str = waqqf + "u" ;
perf : VAgr => Str = table {
AgP1 Sg => bexxix + "t" ;
AgP2 Sg => bexxix + "t" ;
AgP3Sg Masc => mamma ;
- AgP3Sg Fem => case of {
+ AgP3Sg Fem => case of {
<"e","a"> => waqqf + "iet" ; -- NEĦĦIET
_ => waqqf + "et"
} ;
AgP1 Pl => bexxix + "na" ;
AgP2 Pl => bexxix + "tu" ;
- AgP3Pl => case of {
+ AgP3Pl => case of {
<"e","a"> => waqqf + "ew" ; -- NEĦĦEW
_ => waqqf + "u"
}
@@ -618,23 +666,23 @@ resource MorphoMlt = ResMlt ** open Prelude in {
conjFormII_quad : VerbInfo -> (VForm => Str) = \i ->
let
- vowels = extractPattern i.imp ;
+ vowels = extractVowels i.imp ;
mamma : Str = case i.class of {
- Quad QWeak => pfx_T i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3 + i.patt.V2 ; -- SSERVA
- _ => pfx_T i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3 + i.patt.V2 + i.root.C4 -- T-ĦARBAT
+ Quad QWeak => pfx_T i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3 + i.vseq.V2 ; -- SSERVA
+ _ => pfx_T i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3 + i.vseq.V2 + i.root.C4 -- T-ĦARBAT
} ;
tharb : Str = case i.class of {
- _ => pfx_T i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3
+ _ => pfx_T i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3
} ;
tharbt : Str = case i.class of {
- Quad QWeak => pfx_T i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3 ; -- SSERV
- _ => pfx_T i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3 + i.root.C4
+ Quad QWeak => pfx_T i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3 ; -- SSERV
+ _ => pfx_T i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3 + i.root.C4
} ;
perf : VAgr => Str =
let
tharbat : Str = case of {
- => pfx_T i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3 + "e" + i.root.C4 ; -- SSERVEJ
- => pfx_T i.root.C1 + i.patt.V1 + i.root.C2 + i.root.C3 + "a" + i.root.C4 ; -- TKANTAJ
+ => pfx_T i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3 + "e" + i.root.C4 ; -- SSERVEJ
+ => pfx_T i.root.C1 + i.vseq.V1 + i.root.C2 + i.root.C3 + "a" + i.root.C4 ; -- TKANTAJ
_ => mamma
} ;
tharbtu : Str = case of {
@@ -707,13 +755,13 @@ resource MorphoMlt = ResMlt ** open Prelude in {
conjFormIII : VerbInfo -> (VForm => Str) = \i ->
let
- wiegeb : Str = i.root.C1 + i.patt.V1 + i.root.C2 + i.patt.V2 + i.root.C3 ;
- wegib : Str = case of {
+ wiegeb : Str = i.root.C1 + i.vseq.V1 + i.root.C2 + i.vseq.V2 + i.root.C3 ;
+ wegib : Str = case of {
<"ie","e"> => i.root.C1 + "e" + i.root.C2 + "i" + i.root.C3 ;
=> i.root.C1 + v1 + i.root.C2 + "i" + i.root.C3 ;
_ => wiegeb -- no change
} ;
- wiegb : Str = sfx (i.root.C1 + i.patt.V1 + i.root.C2) i.root.C3 ;
+ wiegb : Str = sfx (i.root.C1 + i.vseq.V1 + i.root.C2) i.root.C3 ;
wiegbu : Str = wiegb + "u" ;
perf : VAgr => Str = table {
AgP1 Sg => wegib + "t" ;
@@ -751,13 +799,13 @@ resource MorphoMlt = ResMlt ** open Prelude in {
conjFormVII : VerbInfo -> Str -> (VForm => Str) = \i,C1 ->
let
nhasel : Str = case i.class of {
- Weak Hollow => C1 + i.patt.V1 + i.root.C3 ;
- Weak Lacking => C1 + i.patt.V1 + i.root.C2 + i.patt.V2 ;
- Weak Defective => C1 + i.patt.V1 + i.root.C2 + i.patt.V2 + "'" ;
- _ => C1 + i.patt.V1 + i.root.C2 + i.patt.V2 + i.root.C3
+ Weak Hollow => C1 + i.vseq.V1 + i.root.C3 ;
+ Weak Lacking => C1 + i.vseq.V1 + i.root.C2 + i.vseq.V2 ;
+ Weak Defective => C1 + i.vseq.V1 + i.root.C2 + i.vseq.V2 + "'" ;
+ _ => C1 + i.vseq.V1 + i.root.C2 + i.vseq.V2 + i.root.C3
} ;
- v1 : Str = case i.patt.V1 of { "ie" => "e" ; v => v } ;
- v2 : Str = case i.patt.V2 of { "e" => "i" ; v => v } ;
+ v1 : Str = case i.vseq.V1 of { "ie" => "e" ; v => v } ;
+ v2 : Str = case i.vseq.V2 of { "e" => "i" ; v => v } ;
-- nhsil : Str = case of {
-- => C1 + i.root.C2 + v2 + i.root.C3 ;
-- => C1 + v1 + i.root.C2 + v2 + i.root.C3 ;
@@ -775,9 +823,9 @@ resource MorphoMlt = ResMlt ** open Prelude in {
_ => C1 + v1 + i.root.C2 + v2 + i.root.C3
} ;
nhasl : Str = case i.class of {
- Weak Hollow => C1 + i.patt.V1 + i.root.C3 ;
+ Weak Hollow => C1 + i.vseq.V1 + i.root.C3 ;
Weak Lacking => C1 + i.root.C2 ;
- _ => sfx (C1 + i.patt.V1 + i.root.C2) i.root.C3
+ _ => sfx (C1 + i.vseq.V1 + i.root.C2) i.root.C3
} ;
nhaslu : Str = case i.class of {
Weak Lacking => nhasl + "ew" ;
diff --git a/lib/src/maltese/ParadigmsMlt.gf b/lib/src/maltese/ParadigmsMlt.gf
index b7ead8943..ef2f89ff9 100644
--- a/lib/src/maltese/ParadigmsMlt.gf
+++ b/lib/src/maltese/ParadigmsMlt.gf
@@ -55,38 +55,134 @@ resource ParadigmsMlt = open
loan = Loan ;
irregular = Irregular ;
+ {- Type declarations only (for synopsis) ------------------------------ -}
+
+ mkN : overload {
+ mkN : Str -> N ; -- 1: Take the singular and infer plural
+ mkN : Str -> Gender -> N ; -- 1: Explicit gender
+ mkN : Str -> Str -> N ; -- 1: Take the singular and explicit plural
+ mkN : Str -> Str -> Gender -> N ; -- 1: Explicit gender
+ mkN : Str -> Str -> Str -> N ; -- 1x: Take singular and both plurals
+ mkN : Str -> Str -> Str -> Gender -> N ; -- 1x: Explicit gender
+ } ;
+
+ mkNColl : overload {
+ mkNColl : Str -> N ; -- 2c: Collective form only
+ mkNColl : Str -> Str -> N ; -- 2b: Collective and plural
+ mkNColl : Str -> Str -> Str -> N ; -- 2: Singular, collective and plural
+ mkNColl : Str -> Str -> Str -> Str -> N ; -- 2x: Singular, collective and both plurals
+ } ;
+
+ mkNNoPlural : overload {
+ mkNNoPlural : Str -> N ; -- 3: No plural
+ mkNNoPlural : Str -> Gender -> N ; -- 3: Explicit gender
+ } ;
+
+ mkNDual : overload {
+ mkNDual : Str -> N ; -- 4: Infer dual, plural and gender from singular
+ mkNDual : Str -> Str -> Str -> N ; -- 4: Singular, dual, plural
+ mkNDual : Str -> Str -> Str -> Gender -> N ; -- 4: Explicit gender
+ mkNDual : Str -> Str -> Str -> Str -> N ; -- 4x: Singular, dual, both plurals
+ mkNDual : Str -> Str -> Str -> Str -> Gender -> N ; -- 4x: Explicit gender
+ } ;
+
+ mkPN : Str -> Gender -> Number -> ProperNoun ; -- Proper noun
+
+ mkN2 : overload {
+ mkN2 : N -> Prep -> N2 ;
+ mkN2 : N -> Str -> N2 ;
+ mkN2 : N -> N2 ; -- use "ta'"
+ } ;
+
+ mkN3 : Noun -> Prep -> Prep -> N3 ;
+
+ possN : N -> N ; -- Mark a noun as taking possessive enclitic pronouns: missieri, missierek...
+
+ mkRoot : overload {
+ mkRoot : Root ; -- Null root
+ mkRoot : Str -> Root ; -- From hyphenated string: "k-t-b"
+ mkRoot : Str -> Str -> Str -> Root ; -- Tri-consonantal root
+ mkRoot : Str -> Str -> Str -> Str -> Root ; -- Quadri-consonantal root
+ } ;
+
+ mkVowels : overload {
+ mkVowels : Vowels ; -- Null vowel sequence
+ mkVowels : Str -> Vowels ; -- Only single vowel
+ mkVowels : Str -> Str -> Vowels ; -- Two-vowel sequence
+ } ;
+
+ -- Smart paradigm for building a verb
+ mkV : overload {
+ mkV : Str -> V ; -- With no root, automatically treat as loan verb
+ mkV : Str -> Root -> V ; -- Take an explicit root, implying it is a root & pattern verb
+ mkV : Str -> Str -> Root -> V ; -- Takes an Imperative of the word for when it behaves less predictably
+ mkV : VClass -> VDerivedForm -> Root -> Vowels -> (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V ; -- All forms: mkV (Strong Regular) (FormI) (mkRoot "k-t-b") (mkVowels "i" "e") "ktibt" "ktibt" "kiteb" "kitbet" "ktibna" "ktibtu" "kitbu" "nikteb" "tikteb" "jikteb" "tikteb" "niktbu" "tiktbu" "jiktbu" "ikteb" "iktbu"
+ } ;
+ mkV_II : overload {
+ mkV_II : Str -> Root -> V ; -- Form II verb: mkV_II "waqqaf" (mkRoot "w-q-f")
+ mkV_II : Str -> Str -> Root -> V ; -- Form II verb with explicit imperative form: mkV_II "waqqaf" "waqqaf" (mkRoot "w-q-f")
+ } ;
+ mkV_III : Str -> Root -> V ; -- Form III verb: mkV_III "qiegħed" (mkRoot "q-għ-d")
+ mkV_V : Str -> Root -> V ; -- Form V verb: mkV_V "twaqqaf" (mkRoot "w-q-f")
+ mkV_VI : Str -> Root -> V ; -- Form VI verb: mkV_VI "tqiegħed" (mkRoot "q-għ-d")
+ mkV_VII : Str -> Str -> Root -> V ; -- Form VII verb: mkV_VII "xeħet" "nxteħet" (mkRoot "x-ħ-t")
+ mkV_VIII : Str -> Root -> V ; -- Form VIII verb: mkV_VIII "xteħet" (mkRoot "x-ħ-t")
+ mkV_IX : Str -> Root -> V ; -- Form IX verb: mkV_IX "sfar" (mkRoot "s-f-r")
+ mkV_X : Str -> Root -> V ; -- Form X verb: mkV_X "stagħġeb" (mkRoot "għ-ġ-b")
+
+ presPartV : overload {
+ presPartV : Str -> V -> V ; -- Add the present participle to a verb: ħiereġ
+ presPartV : Str -> Str -> Str -> V -> V ; -- Add the present participle to a verb: ħiereġ, ħierġa, ħierġin
+ } ;
+ pastPartV : overload {
+ pastPartV : Str -> V -> V ; -- Add the past participle to a verb: miktub
+ pastPartV : Str -> Str -> Str -> V -> V ; -- Add the past participle to a verb: miktub, miktuba, miktubin
+ } ;
+
+ mkVS : V -> VS ; -- sentence-compl
+
+ mkV3 : overload {
+ mkV3 : V -> V3 ; -- ditransitive: give,_,_
+ mkV3 : V -> Prep -> Prep -> V3 ; -- two prepositions: speak, with, about
+ mkV3 : V -> Prep -> V3 ; -- one preposition: give,_,to
+ };
+
+ mkV2V : V -> Prep -> Prep -> V2V ; -- want (noPrep NP) (to VP)
+
+ mkConj : overload {
+ mkConj : Str -> Conj ; -- Conjunction: wieħed tnejn u tlieta
+ mkConj : Str -> Str -> Conj ; -- Conjunction: wieħed , tnejn u tlieta
+ } ;
+
+ mkA : overload {
+ mkA : Str -> A ; -- Regular adjective with predictable feminine and plural forms: bravu
+ mkA : Str -> Str -> A ; -- Infer feminine from masculine; no comparative form: sabiħ, sbieħ
+ mkA : Str -> Str -> Str -> A ; -- Explicit feminine form; no comparative form: sabiħ, sabiħa, sbieħ
+ mkA : Str -> Str -> Str -> Str -> A ; -- All forms: sabiħ, sabiħa, sbieħ, isbaħ
+ } ;
+
+ sameA : Str -> A ; -- Adjective with same forms for masculine, feminine and plural: blu
+
+ mkA2 : overload {
+ mkA2 : A -> Prep -> A2 ;
+ mkA2 : A -> Str -> A2 ;
+ } ;
+
+ mkAS : A -> AS ;
+
+ mkAdv : Str -> Adv ; -- post-verbal adverb: illum
+ mkAdV : Str -> AdV ; -- preverbal adverb: dejjem
+
+ mkAdA : Str -> AdA ; -- adverb modifying adjective: pjuttost
+ mkAdN : Str -> AdN ; -- adverb modifying numeral: madwar
+
+--.
+-- Everything below this is definitions (excluded from synopsis)
+
{- Noun --------------------------------------------------------------- -}
- -- Helper function for inferring noun plural from singulative
- -- Nouns with collective & determinate forms should not use this...
- inferNounPlural : Str -> Str = \sing ->
- case sing of {
- _ + "na" => init sing + "iet" ; -- eg WIDNIET
- _ + "i" => sing + "n" ; -- eg BAĦRIN, DĦULIN, RAĦLIN
- _ + ("a"|"u") => init(sing) + "i" ; -- eg ROTI
- _ + "q" => sing + "at" ; -- eg TRIQAT
- _ => sing + "i"
- } ;
-
- -- Helper function for inferring noun gender from singulative
- -- Refer {MDG pg190}
- inferNounGender : Str -> Gender = \sing ->
- case sing of {
- _ + "aġni" => Fem ;
- _ + "anti" => Fem ;
- _ + "zzjoni" => Fem ;
- _ + "ġenesi" => Fem ;
- _ + "ite" => Fem ;
- _ + "itù" => Fem ;
- _ + "joni" => Fem ;
- _ + "ojde" => Fem ;
- _ + "udni" => Fem ;
- _ + ("a"|"à") => Fem ;
- _ => Masc
- } ;
-
-- Noun paradigm 1(x): singular and plural(s)
- mkN : N = overload {
+ mkN = overload {
-- 1: Take the singular and infer plural
mkN : Str -> N = \sing ->
@@ -224,8 +320,7 @@ resource ParadigmsMlt = open
mkN3 = \n,p,q -> lin N3 (n ** {c2 = hasCompl p ; c3 = hasCompl q}) ;
-- Mark a noun as taking possessive enclitic pronouns
- possN : N -> N ;
- possN = \n -> lin N {
+ possN : N -> N = \n -> lin N {
s = n.s ;
g = n.g ;
hasColl = n.hasColl ;
@@ -376,39 +471,11 @@ resource ParadigmsMlt = open
mkRoot : Str -> Str -> Str -> Str -> Root = \s0,s1,s2,s3 -> ResMlt.mkRoot s0 s1 s2 s3 ;
} ;
- -- Re-export ResMlt.mkPattern
- mkPattern : Pattern = overload {
- mkPattern : Pattern = ResMlt.mkPattern ;
- mkPattern : Str -> Pattern = \s0 -> ResMlt.mkPattern s0 ;
- mkPattern : Str -> Str -> Pattern = \s0,s1 -> ResMlt.mkPattern s0 s1 ;
- } ;
-
- -- Return the class for a given root
- classifyRoot : Root -> VClass = \r ->
- case of {
- <#WeakCons, #StrongCons, #StrongCons, ""> => Weak Assimilative ;
- <#StrongCons, #WeakCons, #StrongCons, ""> => Weak Hollow ;
- <#StrongCons, #StrongCons, #WeakCons, ""> => Weak Lacking ;
- <#StrongCons, #WeakCons, #WeakCons, ""> => Weak Lacking ;
- <#Consonant, #Consonant, "għ", ""> => Weak Defective ;
- <#Consonant, c2@#Consonant, c3@#Consonant, ""> =>
- if_then_else VClass (pbool2bool (eqStr c2 c3))
- (Strong Geminated)
- (case c2 of {
- #LiquidCons => Strong LiquidMedial ;
- _ => Strong Regular
- }) ;
- <#Consonant, #Consonant, #Consonant, #WeakCons> => Quad QWeak ;
- <#Consonant, #Consonant, #Consonant, #Consonant> => Quad QStrong ;
-
- -- Irregular
- <"'",_,_,_> => Irregular ;
- <_,"'",_,_> => Irregular ;
- <_,_,"'",_> => Irregular ;
- <_,_,_,"'"> => Irregular ;
-
- <_,_,_,""> => Predef.error("Cannot classify root:"++r.C1+"-"+r.C2+"-"+r.C3) ;
- <_,_,_,_> => Predef.error("Cannot classify root:"++r.C1+"-"+r.C2+"-"+r.C3+"-"+r.C4)
+ -- Re-export ResMlt.mkVowels
+ mkVowels : Vowels = overload {
+ mkVowels : Vowels = ResMlt.mkVowels ;
+ mkVowels : Str -> Vowels = \s0 -> ResMlt.mkVowels s0 ;
+ mkVowels : Str -> Str -> Vowels = \s0,s1 -> ResMlt.mkVowels s0 s1 ;
} ;
-- Smart paradigm for building a verb
@@ -423,47 +490,47 @@ resource ParadigmsMlt = open
mkV : Str -> Root -> V = \mamma,root ->
let
class : VClass = classifyRoot root ;
- patt : Pattern = extractPattern mamma ;
+ vseq : Vowels = extractVowels mamma ;
in
case class of {
- Strong Regular => strongV root patt ;
- Strong LiquidMedial => liquidMedialV root patt ;
- Strong Geminated => geminatedV root patt ;
- Weak Assimilative => assimilativeV root patt ;
- Weak Hollow => hollowV root patt ;
- Weak Lacking => lackingV root patt ;
- Weak Defective => defectiveV root patt ;
- Quad QStrong => quadV root patt ;
- Quad QWeak => quadWeakV root patt ;
+ Strong Regular => strongV root vseq ;
+ Strong LiquidMedial => liquidMedialV root vseq ;
+ Strong Geminated => geminatedV root vseq ;
+ Weak Assimilative => assimilativeV root vseq ;
+ Weak Hollow => hollowV root vseq ;
+ Weak Lacking => lackingV root vseq ;
+ Weak Defective => defectiveV root vseq ;
+ Quad QStrong => quadV root vseq ;
+ Quad QWeak => quadWeakV root vseq ;
Irregular => Predef.error("Cannot use smart paradigm for irregular verb:"++mamma) ;
Loan => loanV mamma --- this should probably be an error
} ;
- -- Takes takes an Imperative of the word for when it behaves less predictably
+ -- Takes an Imperative of the word for when it behaves less predictably
-- Params: mamma, imperative P2Sg, root
mkV : Str -> Str -> Root -> V = \mamma,imp_sg,root ->
let
class : VClass = classifyRoot root ;
- patt : Pattern = extractPattern mamma ;
+ vseq : Vowels = extractVowels mamma ;
in
case class of {
- Strong Regular => strongV root patt imp_sg ;
- Strong LiquidMedial => liquidMedialV root patt imp_sg ;
- Strong Geminated => geminatedV root patt imp_sg ;
- Weak Assimilative => assimilativeV root patt imp_sg ;
- Weak Hollow => hollowV root patt imp_sg ;
- Weak Lacking => lackingV root patt imp_sg ;
- Weak Defective => defectiveV root patt imp_sg ;
- Quad QStrong => quadV root patt imp_sg ;
- Quad QWeak => quadWeakV root patt imp_sg ;
+ Strong Regular => strongV root vseq imp_sg ;
+ Strong LiquidMedial => liquidMedialV root vseq imp_sg ;
+ Strong Geminated => geminatedV root vseq imp_sg ;
+ Weak Assimilative => assimilativeV root vseq imp_sg ;
+ Weak Hollow => hollowV root vseq imp_sg ;
+ Weak Lacking => lackingV root vseq imp_sg ;
+ Weak Defective => defectiveV root vseq imp_sg ;
+ Quad QStrong => quadV root vseq imp_sg ;
+ Quad QWeak => quadWeakV root vseq imp_sg ;
Irregular => Predef.error("Cannot use smart paradigm for irregular verb:"++mamma) ;
Loan => loanV mamma
} ;
-- All forms
- -- mkV (Strong Regular) (FormI) (mkRoot "k-t-b") (mkPattern "i" "e") "ktibt" "ktibt" "kiteb" "kitbet" "ktibna" "ktibtu" "kitbu" "nikteb" "tikteb" "jikteb" "tikteb" "niktbu" "tiktbu" "jiktbu" "ikteb" "iktbu"
- mkV : VClass -> VDerivedForm -> Root -> Pattern -> (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V =
- \class, form, root, patt,
+ -- mkV (Strong Regular) (FormI) (mkRoot "k-t-b") (mkVowels "i" "e") "ktibt" "ktibt" "kiteb" "kitbet" "ktibna" "ktibtu" "kitbu" "nikteb" "tikteb" "jikteb" "tikteb" "niktbu" "tiktbu" "jiktbu" "ikteb" "iktbu"
+ mkV : VClass -> VDerivedForm -> Root -> Vowels -> (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V =
+ \class, form, root, vseq,
perfP1Sg, perfP2Sg, perfP3SgMasc, perfP3SgFem, perfP1Pl, perfP2Pl, perfP3Pl,
impfP1Sg, impfP2Sg, impfP3SgMasc, impfP3SgFem, impfP1Pl, impfP2Pl, impfP3Pl,
impSg, impPl ->
@@ -488,7 +555,7 @@ resource ParadigmsMlt = open
VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST
} ;
- info : VerbInfo = mkVerbInfo class form root patt impSg ;
+ info : VerbInfo = mkVerbInfo class form root vseq impSg ;
in lin V {
s = stemVariantsTbl tbl ;
i = info ;
@@ -532,12 +599,12 @@ resource ParadigmsMlt = open
derivedV_TriII : Str -> Root -> V = \mammaII, root ->
let
class : VClass = classifyRoot root ;
- patt : Pattern = extractPattern mammaII ;
+ vseq : Vowels = extractVowels mammaII ;
imp : Str = case mammaII of {
nehh + "a" => nehh + "i" ; --- maybe too generic?
_ => mammaII --- assumption: mamma II is also imperative
} ;
- newinfo : VerbInfo = mkVerbInfo class FormII root patt imp ;
+ newinfo : VerbInfo = mkVerbInfo class FormII root vseq imp ;
in lin V {
s = stemVariantsTbl (conjFormII newinfo) ;
i = newinfo ;
@@ -550,9 +617,9 @@ resource ParadigmsMlt = open
derivedV_QuadII : Str -> Root -> V = \mammaII, root ->
let
class : VClass = classifyRoot root ;
- patt : Pattern = extractPattern mammaII ;
+ vseq : Vowels = extractVowels mammaII ;
imp : Str = mammaII ; --- assumption: mamma II is also imperative
- newinfo : VerbInfo = mkVerbInfo class FormII root patt imp ;
+ newinfo : VerbInfo = mkVerbInfo class FormII root vseq imp ;
in lin V {
s = stemVariantsTbl (conjFormII_quad newinfo) ;
i = newinfo ;
@@ -562,8 +629,8 @@ resource ParadigmsMlt = open
derivedV_QuadII : Str -> Str -> Root -> V = \mammaII, imp, root ->
let
class : VClass = classifyRoot root ;
- patt : Pattern = extractPattern mammaII ;
- newinfo : VerbInfo = mkVerbInfo class FormII root patt imp ;
+ vseq : Vowels = extractVowels mammaII ;
+ newinfo : VerbInfo = mkVerbInfo class FormII root vseq imp ;
in lin V {
s = stemVariantsTbl (conjFormII_quad newinfo) ;
i = newinfo ;
@@ -576,9 +643,9 @@ resource ParadigmsMlt = open
-- e.g.: derivedV_III "qiegħed" (mkRoot "q-għ-d")
derivedV_III : Str -> Root -> V = \mammaIII, root ->
let
- patt : Pattern = extractPattern mammaIII ;
+ vseq : Vowels = extractVowels mammaIII ;
class : VClass = classifyRoot root ;
- info : VerbInfo = mkVerbInfo class FormIII root patt mammaIII ; --- assumption: mamma III is also imperative
+ info : VerbInfo = mkVerbInfo class FormIII root vseq mammaIII ; --- assumption: mamma III is also imperative
in lin V {
s = stemVariantsTbl (conjFormIII info) ;
i = info ;
@@ -596,7 +663,7 @@ resource ParadigmsMlt = open
-- use the Form II conjugation, just prefixing a T
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 ;
+ info : VerbInfo = mkVerbInfo vII.i.class FormV vII.i.root vII.i.vseq mammaV ;
get : VForm -> Str = \vf -> (vII.s ! vf).s1 ;
tbl : VForm => Str = table {
VPerf agr => pfx_T (get (VPerf agr)) ;
@@ -652,7 +719,7 @@ resource ParadigmsMlt = open
derivedV_VII : Str -> Str -> Root -> V = \mammaI, mammaVII, root ->
let
class : VClass = classifyRoot root ;
- vowels : Pattern = extractPattern mammaI ;
+ vowels : Vowels = extractVowels mammaI ;
c1 : Str = case mammaVII of {
"n" + c@#Cns + "t" + _ => "n"+c+"t" ; -- NXT-EĦET
"ntgħ" + _ => "ntgħ" ; -- NTGĦ-AĠEN
@@ -675,7 +742,7 @@ resource ParadigmsMlt = open
let
mammaI : Str = delCharAt 1 mammaVIII ;
class : VClass = classifyRoot root ;
- vowels : Pattern = extractPattern mammaI ;
+ vowels : Vowels = extractVowels mammaI ;
info : VerbInfo = mkVerbInfo class FormVIII root vowels mammaVIII ;
c1 : Str = root.C1+"t";
in lin V {
@@ -686,15 +753,15 @@ resource ParadigmsMlt = open
} ;
-- Make a Form IX verb
- -- e.g.: derivedV_IX "sfar"
+ -- e.g.: derivedV_IX "sfar" (mkRoot "s-f-r")
derivedV_IX : Str -> Root -> V = \mammaIX, root ->
case mammaIX of {
-- c1@#Consonant + c2@#Consonant + v1@("ie"|"a") + c3@#Consonant =>
_ + v1@("ie"|"a"|"â") + _ =>
let
- patt : Pattern = mkPattern v1 ;
+ vseq : Vowels = mkVowels v1 ;
class : VClass = classifyRoot root ;
- info : VerbInfo = mkVerbInfo class FormIX root patt mammaIX ;
+ info : VerbInfo = mkVerbInfo class FormIX root vseq mammaIX ;
in lin V {
s = stemVariantsTbl (conjFormIX info) ;
i = info ;
@@ -709,8 +776,8 @@ resource ParadigmsMlt = open
derivedV_X : Str -> Root -> V = \mammaX, root ->
let
class : VClass = classifyRoot root ;
- patt : Pattern = extractPattern mammaX ;
- info : VerbInfo = mkVerbInfo class FormX root patt mammaX ;
+ vseq : Vowels = extractVowels mammaX ;
+ info : VerbInfo = mkVerbInfo class FormX root vseq mammaX ;
in lin V {
s = stemVariantsTbl (conjFormX info) ;
i = info ;
@@ -723,33 +790,33 @@ resource ParadigmsMlt = open
-- Regular strong verb ("sħiħ"), eg KITEB
strongV : V = overload {
- -- Params: root, pattern
- strongV : Root -> Pattern -> V = \root,patt ->
- let imp = conjStrongImp root patt
- in strongVWorst root patt imp ;
+ -- Params: root, vowels
+ strongV : Root -> Vowels -> V = \root,vseq ->
+ let imp = conjStrongImp root vseq
+ in strongVWorst root vseq imp ;
- -- Params: root, pattern, imperative P2Sg
- strongV : Root -> Pattern -> Str -> V =\root,patt,imp_sg ->
+ -- Params: root, vowels, imperative P2Sg
+ strongV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let
imp = table {
Sg => imp_sg ;
Pl => (takePfx 3 imp_sg) + root.C3 + "u" -- IFTAĦ > IFTĦU
} ;
- in strongVWorst root patt imp ;
+ in strongVWorst root vseq imp ;
} ;
-- Worst case for strong verb
- strongVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp ->
+ strongVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let
tbl : (VForm => Str) = table {
- VPerf agr => ( conjStrongPerf root patt ) ! agr ;
+ VPerf agr => ( conjStrongPerf root vseq ) ! agr ;
VImpf agr => ( conjStrongImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ;
VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST
} ;
- info : VerbInfo = mkVerbInfo (Strong Regular) (FormI) root patt (imp ! Sg) ;
+ info : VerbInfo = mkVerbInfo (Strong Regular) (FormI) root vseq (imp ! Sg) ;
in lin V {
s = stemVariantsTbl tbl ;
i = info ;
@@ -763,15 +830,15 @@ resource ParadigmsMlt = open
-- Liquid-medial strong verb, eg ŻELAQ
liquidMedialV : V = overload {
- -- Params: root, pattern
- liquidMedialV : Root -> Pattern -> V = \root,patt ->
- let imp = conjLiquidMedialImp root patt
- in liquidMedialVWorst root patt imp ;
+ -- Params: root, vowels
+ liquidMedialV : Root -> Vowels -> V = \root,vseq ->
+ let imp = conjLiquidMedialImp root vseq
+ in liquidMedialVWorst root vseq imp ;
- -- Params: root, pattern, imperative P2Sg
- liquidMedialV : Root -> Pattern -> Str -> V = \root,patt,imp_sg ->
+ -- Params: root, vowels, imperative P2Sg
+ liquidMedialV : Root -> Vowels -> Str -> V = \root,vseq,imp_sg ->
let
- vowels = extractPattern imp_sg ;
+ vowels = extractVowels imp_sg ;
imp = table {
Sg => imp_sg ;
Pl => case root.C1 of {
@@ -779,21 +846,21 @@ resource ParadigmsMlt = open
_ => vowels.V1 + root.C1 + vowels.V2 + root.C2 + root.C3 + "u" -- OĦROĠ > OĦORĠU
}
} ;
- in liquidMedialVWorst root patt imp ;
+ in liquidMedialVWorst root vseq imp ;
} ;
-- Worst case for liquid medial strong verb
- liquidMedialVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp ->
+ liquidMedialVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let
tbl : (VForm => Str) = table {
- VPerf agr => ( conjLiquidMedialPerf root patt ) ! agr ;
+ VPerf agr => ( conjLiquidMedialPerf root vseq ) ! agr ;
VImpf agr => ( conjLiquidMedialImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ;
VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST
} ;
- info : VerbInfo = mkVerbInfo (Strong LiquidMedial) (FormI) root patt (imp ! Sg) ;
+ info : VerbInfo = mkVerbInfo (Strong LiquidMedial) (FormI) root vseq (imp ! Sg) ;
in lin V {
s = stemVariantsTbl tbl ;
i = info ;
@@ -806,33 +873,33 @@ resource ParadigmsMlt = open
-- Geminated strong verb ("trux"), eg ĦABB
geminatedV : V = overload {
- -- Params: root, pattern
- geminatedV : Root -> Pattern -> V = \root,patt ->
- let imp = conjGeminatedImp root patt
- in geminatedVWorst root patt imp ;
+ -- Params: root, vowels
+ geminatedV : Root -> Vowels -> V = \root,vseq ->
+ let imp = conjGeminatedImp root vseq
+ in geminatedVWorst root vseq imp ;
- -- Params: root, pattern, imperative P2Sg
- geminatedV : Root -> Pattern -> Str -> V = \root,patt,imp_sg ->
+ -- Params: root, vowels, imperative P2Sg
+ geminatedV : Root -> Vowels -> Str -> V = \root,vseq,imp_sg ->
let
imp = table {
Sg => imp_sg ;
Pl => imp_sg + "u" -- ŻOMM > ŻOMMU
} ;
- in geminatedVWorst root patt imp ;
+ in geminatedVWorst root vseq imp ;
};
-- Worst case for reduplicated verb
- geminatedVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp ->
+ geminatedVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let
tbl : (VForm => Str) = table {
- VPerf agr => ( conjGeminatedPerf root patt ) ! agr ;
+ VPerf agr => ( conjGeminatedPerf root vseq ) ! agr ;
VImpf agr => ( conjGeminatedImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ;
VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST
} ;
- info : VerbInfo = mkVerbInfo (Strong Geminated) (FormI) root patt (imp ! Sg) ;
+ info : VerbInfo = mkVerbInfo (Strong Geminated) (FormI) root vseq (imp ! Sg) ;
in lin V {
s = stemVariantsTbl tbl ;
i = info ;
@@ -845,33 +912,33 @@ resource ParadigmsMlt = open
-- Assimilative weak verb, eg WASAL
assimilativeV : V = overload {
- -- Params: root, pattern
- assimilativeV : Root -> Pattern -> V = \root,patt ->
- let imp = conjAssimilativeImp root patt
- in assimilativeVWorst root patt imp ;
+ -- Params: root, vowels
+ assimilativeV : Root -> Vowels -> V = \root,vseq ->
+ let imp = conjAssimilativeImp root vseq
+ in assimilativeVWorst root vseq imp ;
- -- Params: root, pattern, imperative P2Sg
- assimilativeV : Root -> Pattern -> Str -> V =\root,patt,imp_sg ->
+ -- Params: root, vowels, imperative P2Sg
+ assimilativeV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let
imp = table {
Sg => imp_sg ;
Pl => (dropSfx 2 imp_sg) + root.C3 + "u" -- ASAL > ASLU
} ;
- in assimilativeVWorst root patt imp ;
+ in assimilativeVWorst root vseq imp ;
} ;
-- Worst case for assimilative verb
- assimilativeVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp ->
+ assimilativeVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let
tbl : (VForm => Str) = table {
- VPerf agr => ( conjAssimilativePerf root patt ) ! agr ;
+ VPerf agr => ( conjAssimilativePerf root vseq ) ! agr ;
VImpf agr => ( conjAssimilativeImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ;
VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST
} ;
- info : VerbInfo = mkVerbInfo (Weak Assimilative) (FormI) root patt (imp ! Sg) ;
+ info : VerbInfo = mkVerbInfo (Weak Assimilative) (FormI) root vseq (imp ! Sg) ;
in lin V {
s = stemVariantsTbl tbl ;
i = info ;
@@ -884,33 +951,33 @@ resource ParadigmsMlt = open
-- Hollow weak verb, eg SAR (S-J-R)
hollowV : V = overload {
- -- Params: root, pattern
- hollowV : Root -> Pattern -> V = \root,patt ->
- let imp = conjHollowImp root patt
- in hollowVWorst root patt imp ;
+ -- Params: root, vowels
+ hollowV : Root -> Vowels -> V = \root,vseq ->
+ let imp = conjHollowImp root vseq
+ in hollowVWorst root vseq imp ;
- -- Params: root, pattern, imperative P2Sg
- hollowV : Root -> Pattern -> Str -> V =\root,patt,imp_sg ->
+ -- Params: root, vowels, imperative P2Sg
+ hollowV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let
imp = table {
Sg => imp_sg ;
Pl => imp_sg + "u" -- SIR > SIRU
} ;
- in hollowVWorst root patt imp ;
+ in hollowVWorst root vseq imp ;
} ;
-- Worst case for hollow verb
- hollowVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp ->
+ hollowVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let
tbl : (VForm => Str) = table {
- VPerf agr => ( conjHollowPerf root patt ) ! agr ;
+ VPerf agr => ( conjHollowPerf root vseq ) ! agr ;
VImpf agr => ( conjHollowImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ;
VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST
} ;
- info : VerbInfo = mkVerbInfo (Weak Hollow) (FormI) root patt (imp ! Sg) ;
+ info : VerbInfo = mkVerbInfo (Weak Hollow) (FormI) root vseq (imp ! Sg) ;
in lin V {
s = stemVariantsTbl tbl ;
i = info ;
@@ -923,13 +990,13 @@ resource ParadigmsMlt = open
-- Lacking (nieqes) verb, eg MEXA (M-X-J)
lackingV : V = overload {
- -- Params: root, pattern
- lackingV : Root -> Pattern -> V = \root,patt ->
- let imp = conjLackingImp root patt
- in lackingVWorst root patt imp ;
+ -- Params: root, vowels
+ lackingV : Root -> Vowels -> V = \root,vseq ->
+ let imp = conjLackingImp root vseq
+ in lackingVWorst root vseq imp ;
- -- Params: root, pattern, imperative P2Sg
- lackingV : Root -> Pattern -> Str -> V =\root,patt,imp_sg ->
+ -- Params: root, vowels, imperative P2Sg
+ lackingV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let
imp = table {
Sg => imp_sg ;
@@ -939,21 +1006,21 @@ resource ParadigmsMlt = open
x => (dropSfx 1 x) + "u" --- unknown case
}
} ;
- in lackingVWorst root patt imp ;
+ in lackingVWorst root vseq imp ;
} ;
-- Worst case for lacking verb
- lackingVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp ->
+ lackingVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let
tbl : (VForm => Str) = table {
- VPerf agr => ( conjLackingPerf root patt ) ! agr ;
+ VPerf agr => ( conjLackingPerf root vseq ) ! agr ;
VImpf agr => ( conjLackingImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ;
VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST
} ;
- info : VerbInfo = mkVerbInfo (Weak Lacking) (FormI) root patt (imp ! Sg) ;
+ info : VerbInfo = mkVerbInfo (Weak Lacking) (FormI) root vseq (imp ! Sg) ;
in lin V {
s = stemVariantsTbl tbl ;
i = info ;
@@ -966,33 +1033,33 @@ resource ParadigmsMlt = open
-- Defective verb, eg QALA' (Q-L-GĦ)
defectiveV : V = overload {
- -- Params: root, pattern
- defectiveV : Root -> Pattern -> V = \root,patt ->
- let imp = conjDefectiveImp root patt
- in defectiveVWorst root patt imp ;
+ -- Params: root, vowels
+ defectiveV : Root -> Vowels -> V = \root,vseq ->
+ let imp = conjDefectiveImp root vseq
+ in defectiveVWorst root vseq imp ;
- -- Params: root, pattern, imperative P2Sg
- defectiveV : Root -> Pattern -> Str -> V =\root,patt,imp_sg ->
+ -- Params: root, vowels, imperative P2Sg
+ defectiveV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let
imp = table {
Sg => imp_sg ;
Pl => (takePfx 2 imp_sg) + "i" + root.C2 + "għu" -- ISMA' > ISIMGĦU
} ;
- in defectiveVWorst root patt imp ;
+ in defectiveVWorst root vseq imp ;
} ;
-- Worst case for defective verb
- defectiveVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp ->
+ defectiveVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let
tbl : (VForm => Str) = table {
- VPerf agr => ( conjDefectivePerf root patt ) ! agr ;
+ VPerf agr => ( conjDefectivePerf root vseq ) ! agr ;
VImpf agr => ( conjDefectiveImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ;
VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST
} ;
- info : VerbInfo = mkVerbInfo (Weak Defective) (FormI) root patt (imp ! Sg) ;
+ info : VerbInfo = mkVerbInfo (Weak Defective) (FormI) root vseq (imp ! Sg) ;
in lin V {
s = stemVariantsTbl tbl ;
i = info ;
@@ -1005,33 +1072,33 @@ resource ParadigmsMlt = open
-- Make a Quad verb, eg DENDEL (D-L-D-L)
quadV : V = overload {
- -- Params: root, pattern
- quadV : Root -> Pattern -> V = \root,patt ->
- let imp = conjQuadImp root patt
- in quadVWorst root patt imp ;
+ -- Params: root, vowels
+ quadV : Root -> Vowels -> V = \root,vseq ->
+ let imp = conjQuadImp root vseq
+ in quadVWorst root vseq imp ;
- -- Params: root, pattern, imperative P2Sg
- quadV : Root -> Pattern -> Str -> V =\root,patt,imp_sg ->
+ -- Params: root, vowels, imperative P2Sg
+ quadV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let
imp = table {
Sg => imp_sg ;
Pl => (takePfx 4 imp_sg) + root.C4 + "u" -- ĦARBAT > ĦARBTU
} ;
- in quadVWorst root patt imp ;
+ in quadVWorst root vseq imp ;
} ;
-- Worst case for quad verb
- quadVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp ->
+ quadVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let
tbl : (VForm => Str) = table {
- VPerf agr => ( conjQuadPerf root patt ) ! agr ;
+ VPerf agr => ( conjQuadPerf root vseq ) ! agr ;
VImpf agr => ( conjQuadImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ;
VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST
} ;
- info : VerbInfo = mkVerbInfo (Quad QStrong) (FormI) root patt (imp ! Sg) ;
+ info : VerbInfo = mkVerbInfo (Quad QStrong) (FormI) root vseq (imp ! Sg) ;
in lin V {
s = stemVariantsTbl tbl ;
i = info ;
@@ -1044,13 +1111,13 @@ resource ParadigmsMlt = open
-- Make a weak-final Quad verb, eg SERVA (S-R-V-J)
quadWeakV : V = overload {
- -- Params: root, pattern
- quadWeakV : Root -> Pattern -> V = \root,patt ->
- let imp = conjQuadWeakImp root patt
- in quadWeakVWorst root patt imp ;
+ -- Params: root, vowels
+ quadWeakV : Root -> Vowels -> V = \root,vseq ->
+ let imp = conjQuadWeakImp root vseq
+ in quadWeakVWorst root vseq imp ;
- -- Params: root, pattern, imperative P2Sg
- quadWeakV : Root -> Pattern -> Str -> V =\root,patt,imp_sg ->
+ -- Params: root, vowels, imperative P2Sg
+ quadWeakV : Root -> Vowels -> Str -> V =\root,vseq,imp_sg ->
let
imp = table {
Sg => imp_sg ;
@@ -1059,21 +1126,21 @@ resource ParadigmsMlt = open
_ => (dropSfx 1 imp_sg) + "u" -- SERVI > SERVU
}
} ;
- in quadWeakVWorst root patt imp ;
+ in quadWeakVWorst root vseq imp ;
} ;
-- Worst case for quadWeak verb
- quadWeakVWorst : Root -> Pattern -> (Number => Str) -> V = \root,patt,imp ->
+ quadWeakVWorst : Root -> Vowels -> (Number => Str) -> V = \root,vseq,imp ->
let
tbl : (VForm => Str) = table {
- VPerf agr => ( conjQuadWeakPerf root patt (imp ! Sg) ) ! agr ;
+ VPerf agr => ( conjQuadWeakPerf root vseq (imp ! Sg) ) ! agr ;
VImpf agr => ( conjQuadWeakImpf (imp ! Sg) (imp ! Pl) ) ! agr ;
VImp n => imp ! n ;
VPresPart _ => NONEXIST ;
VPastPart _ => NONEXIST
} ;
- info : VerbInfo = mkVerbInfo (Quad QWeak) (FormI) root patt (imp ! Sg) ;
+ info : VerbInfo = mkVerbInfo (Quad QWeak) (FormI) root vseq (imp ! Sg) ;
in lin V {
s = stemVariantsTbl tbl ;
i = info ;
@@ -1204,45 +1271,29 @@ resource ParadigmsMlt = open
hasCompl : Prep -> Compl = \p -> p ** { isPresent = True } ;
noCompl : Compl = noPrep ** { isPresent = False } where { noPrep : Prep = mkPrep [] };
- mkVS : V -> VS ; -- sentence-compl
mkVS v = lin VS v ;
prepV2 : V -> Prep -> V2 ;
prepV2 v p = lin V2 ( v ** { c2 = hasCompl p } ) ;
dirV2 : V -> V2 ;
- -- dirV2 v = prepV2 v noPrep ;
dirV2 v = lin V2 ( v ** { c2 = noCompl } ) ;
prepPrepV3 : V -> Prep -> Prep -> V3 ;
prepPrepV3 v p t = lin V3 (v ** { c2 = hasCompl p ; c3 = hasCompl t }) ;
dirV3 : V -> Prep -> V3 ;
- -- dirV3 v p = prepPrepV3 v noPrep p ;
dirV3 v t = lin V3 (v ** { c2 = noCompl ; c3 = hasCompl t }) ;
dirdirV3 : V -> V3 ;
- -- dirdirV3 v = dirV3 v noPrep ;
dirdirV3 v = lin V3 (v ** { c2 = noCompl ; c3 = noCompl }) ;
- mkV3 : overload {
- mkV3 : V -> V3 ; -- ditransitive, e.g. give,_,_
- mkV3 : V -> Prep -> Prep -> V3 ; -- two prepositions, e.g. speak, with, about
- mkV3 : V -> Prep -> V3 ; -- give,_,to --%
- -- mkV3 : V -> Str -> V3 ; -- give,_,to --%
- -- mkV3 : Str -> Str -> V3 ; -- give,_,to --%
- -- mkV3 : Str -> V3 ; -- give,_,_ --%
- };
mkV3 = overload {
mkV3 : V -> V3 = dirdirV3 ;
mkV3 : V -> Prep -> Prep -> V3 = prepPrepV3 ;
mkV3 : V -> Prep -> V3 = dirV3 ;
- -- mkV3 : V -> Str -> V3 = \v,s -> dirV3 v (mkPrep s);
- -- mkV3 : Str -> Str -> V3 = \v,s -> dirV3 (regV v) (mkPrep s);
- -- mkV3 : Str -> V3 = \v -> dirdirV3 (regV v) ;
} ;
- mkV2V : V -> Prep -> Prep -> V2V ; -- e.g. want (noPrep NP) (to VP)
mkV2V v p t = lin V2V (v ** { c2 = hasCompl p ; c3 = hasCompl t }) ;
{- Conjunction -------------------------------------------------------- -}
@@ -1260,10 +1311,15 @@ resource ParadigmsMlt = open
-- Overloaded function for building an adjective
mkA : A = overload {
- -- Same form for gender and number; no comparative form.
+ -- Regular adjective with predictable feminine and plural forms
-- Params:
- -- Adjective, eg BLU
- mkA : Str -> A = sameA ;
+ -- Adjective, eg BRAVU
+ mkA : Str -> A = \masc ->
+ let
+ fem = inferAdjFem masc ;
+ plural = inferAdjPlural fem
+ in
+ mk3A masc fem plural ;
-- Infer feminine from masculine; no comparative form.
-- Params:
@@ -1271,7 +1327,7 @@ resource ParadigmsMlt = open
-- Plural, eg SBIEĦ
mkA : Str -> Str -> A = brokenA ;
- -- Infer feminine from masculine; no comparative form.
+ -- Explicit feminine form; no comparative form.
-- Params:
-- Masculine, eg SABIĦ
-- Feminine, eg SABIĦA
@@ -1288,17 +1344,6 @@ resource ParadigmsMlt = open
} ;
- -- Regular adjective with predictable feminine and plural forms
- regA : Str -> A ;
- regA masc =
- let
- fem = determineAdjFem masc ;
- plural = determineAdjPlural fem
- in
- mk3A masc fem plural ;
-
- -- Adjective with same forms for masculine, feminine and plural.
- sameA : Str -> A ;
sameA a = mk3A a a a ;
-- Adjective with predictable feminine but broken plural
@@ -1307,14 +1352,14 @@ resource ParadigmsMlt = open
-- without comparative form
brokenA : Str -> Str -> A = \masc,plural ->
let
- fem = determineAdjFem masc
+ fem = inferAdjFem masc
in
mk3A masc fem plural ;
-- with comparative form
brokenA : Str -> Str -> Str -> A = \masc,plural,compar ->
let
- fem = determineAdjFem masc
+ fem = inferAdjFem masc
in
mk4A masc fem plural compar ;
@@ -1330,22 +1375,6 @@ resource ParadigmsMlt = open
mk4A = \masc,fem,plural,compar ->
lin A (mkAdjective masc fem plural compar) ** {hasComp = True} ;
- -- Determine femininine form of adjective from masculine
- determineAdjFem : Str -> Str ;
- determineAdjFem masc = case masc of {
- _ + "ef" => (dropSfx 2 masc) + "fa" ; -- NIEXEF
- _ + "u" => (init masc) + "a" ; -- BRAVU
- _ + "i" => masc + "ja" ; -- MIMLI
- _ => masc + "a" -- VOJT
- } ;
-
- -- Determine plural form of adjective from feminine
- determineAdjPlural : Str -> Str ;
- determineAdjPlural fem = case fem of {
- _ + ("f"|"j"|"ġ") + "a" => (init fem) + "in" ; -- NIEXFA, MIMLIJA, MAĦMUĠA
- _ => (init fem) + "i" -- BRAVA
- } ;
-
prepA2 : A -> Prep -> A2 ;
prepA2 a p = lin A2 (a ** {c2 = hasCompl p}) ;
@@ -1353,10 +1382,6 @@ resource ParadigmsMlt = open
-- dirA2 a = prepA2 a noPrep ;
dirA2 a = lin A2 (a ** {c2 = noCompl}) ;
- mkA2 : overload {
- mkA2 : A -> Prep -> A2 ;
- mkA2 : A -> Str -> A2 ;
- } ;
mkA2 = overload {
mkA2 : A -> Prep -> A2 = prepA2 ;
mkA2 : A -> Str -> A2 = \a,p -> prepA2 a (mkPrep p) ;
@@ -1365,17 +1390,10 @@ resource ParadigmsMlt = open
AS, A2S, AV : Type = A ;
A2V : Type = A2 ;
- mkAS : A -> AS ;
mkAS a = a ;
{- Adverb ------------------------------------------------------------- -}
- mkAdv : Str -> Adv ; -- post-verbal adverb, e.g. ILLUM
- mkAdV : Str -> AdV ; -- preverbal adverb, e.g. DEJJEM
-
- mkAdA : Str -> AdA ; -- adverb modifying adjective, e.g. PJUTTOST
- mkAdN : Str -> AdN ; -- adverb modifying numeral, e.g. MADWAR
-
mkAdv x = lin Adv (ss x) ** {
joinsVerb = False ;
a = agrP3 Sg Masc ; -- ignored when joinsVerb = False
@@ -1400,5 +1418,4 @@ resource ParadigmsMlt = open
mkOrd : Str -> Ord = \x -> lin Ord { s = \\c => x };
-
}
diff --git a/lib/src/maltese/ResMlt.gf b/lib/src/maltese/ResMlt.gf
index 23e733eb0..c9bf928f7 100644
--- a/lib/src/maltese/ResMlt.gf
+++ b/lib/src/maltese/ResMlt.gf
@@ -537,7 +537,7 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
class : VClass ;
form : VDerivedForm ;
root : Root ; -- radicals
- patt : Pattern ; -- vowels extracted from mamma
+ vseq : Vowels ; -- vowels extracted from mamma
imp : Str ; -- Imperative Sg. Gives so much information jaħasra!
} ;
@@ -849,8 +849,8 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
=> "nkunu" ;
=> "tkunu" ;
=> "jkunu" ;
- => "kun" ;
- => "kunu" ;
+ => "kun" ;
+ => "kunu" ;
=> "kontx" ;
=> "kontx" ;
=> "kienx" ;
@@ -865,8 +865,8 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
=> "nkunux" ;
=> "tkunux" ;
=> "jkunux" ;
- => "kunx" ;
- => "kunux" ;
+ => "kunx" ;
+ => "kunux" ;
=> NONEXIST ;
=> NONEXIST
}
@@ -907,8 +907,8 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
VImpf (AgP1 Pl) => mkVerbStems [] "m'aħnie" ;
VImpf (AgP2 Pl) => mkVerbStems [] "m'intom" ;
VImpf (AgP3Pl) => mkVerbStems "huma" "m'humie" ;
- VImp (Pl) => mkVerbStems "kun" ;
- VImp (Sg) => mkVerbStems "kunu" ;
+ VImp (Sg) => mkVerbStems "kun" ;
+ VImp (Pl) => mkVerbStems "kunu" ;
VPresPart gn => mkVerbStems NONEXIST ;
VPastPart gn => mkVerbStems NONEXIST
} ;
@@ -1043,9 +1043,9 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
EorI : Str = "e" | "i" ;
IorE : Str = "i" | "e" ;
- {- ~~~ Roots & Patterns ~~~ -}
+ {- ~~~ Roots & Vowel sequences ~~~ -}
- Pattern : Type = {V1, V2 : Str} ;
+ Vowels : Type = {V1, V2 : Str} ;
Root : Type = {C1, C2, C3, C4 : Str} ;
-- Make a root object. Accepts following overloads:
@@ -1068,40 +1068,40 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
{ C1=toLower c1 ; C2=toLower c2 ; C3=toLower c3 ; C4=toLower c4 } ;
} ;
- mkPattern : Pattern = overload {
- mkPattern : Pattern =
+ mkVowels : Vowels = overload {
+ mkVowels : Vowels =
{ V1=[] ; V2=[] } ;
- mkPattern : Str -> Pattern = \v1 ->
+ mkVowels : Str -> Vowels = \v1 ->
{ V1=toLower v1 ; V2=[] } ;
- mkPattern : Str -> Str -> Pattern = \v1,v2 ->
+ mkVowels : Str -> Str -> Vowels = \v1,v2 ->
{ V1=toLower v1 ; V2=case v2 of {"" => [] ; _ => toLower v2}} ;
} ;
-- Extract first two vowels from a token (designed for semitic verb forms)
--- potentially slow
- extractPattern : Str -> Pattern = \s ->
+ extractVowels : Str -> Vowels = \s ->
case s of {
- v1@"ie" + _ + v2@#Vowel + _ => mkPattern v1 v2 ; -- IEQAF
- v1@#Vowel + _ + v2@#Vowel + _ => mkPattern v1 v2 ; -- IKTEB
- _ + v1@"ie" + _ + v2@#Vowel + _ => mkPattern v1 v2 ; -- RIEQED
- _ + v1@"ie" + _ => mkPattern v1 ; -- ŻIED
- _ + v1@#Vowel + _ + v2@#Vowel + _ => mkPattern v1 v2 ; -- ĦARBAT
- _ + v1@#Vowel + _ => mkPattern v1 ; -- ĦOBB
- _ => mkPattern
+ v1@"ie" + _ + v2@#Vowel + _ => mkVowels v1 v2 ; -- IEQAF
+ v1@#Vowel + _ + v2@#Vowel + _ => mkVowels v1 v2 ; -- IKTEB
+ _ + v1@"ie" + _ + v2@#Vowel + _ => mkVowels v1 v2 ; -- RIEQED
+ _ + v1@"ie" + _ => mkVowels v1 ; -- ŻIED
+ _ + v1@#Vowel + _ + v2@#Vowel + _ => mkVowels v1 v2 ; -- ĦARBAT
+ _ + v1@#Vowel + _ => mkVowels v1 ; -- ĦOBB
+ _ => mkVowels
} ;
-- Create a VerbInfo record, optionally omitting various fields
mkVerbInfo : VerbInfo = overload {
mkVerbInfo : VClass -> VDerivedForm -> VerbInfo = \c,f ->
- { class=c ; form=f ; root=mkRoot ; patt=mkPattern ; imp=[] } ;
+ { class=c ; form=f ; root=mkRoot ; vseq=mkVowels ; imp=[] } ;
mkVerbInfo : VClass -> VDerivedForm -> Str -> VerbInfo = \c,f,i ->
- { class=c ; form=f ; root=mkRoot ; patt=mkPattern ; imp=i } ;
- mkVerbInfo : VClass -> VDerivedForm -> Root -> Pattern -> VerbInfo = \c,f,r,p ->
- { class=c ; form=f ; root=r ; patt=p ; imp=[] } ;
- mkVerbInfo : VClass -> VDerivedForm -> Root -> Pattern -> Str -> VerbInfo = \c,f,r,p,i ->
- { class=c ; form=f ; root=r ; patt=p ; imp=i } ;
- -- mkVerbInfo : VClass -> VDerivedForm -> Root -> Pattern -> Pattern -> Str -> VerbInfo = \c,f,r,p,p2,i ->
- -- { class=c ; form=f ; root=r ; patt=p ; patt2=p2 ; imp=i } ;
+ { class=c ; form=f ; root=mkRoot ; vseq=mkVowels ; imp=i } ;
+ mkVerbInfo : VClass -> VDerivedForm -> Root -> Vowels -> VerbInfo = \c,f,r,p ->
+ { class=c ; form=f ; root=r ; vseq=p ; imp=[] } ;
+ mkVerbInfo : VClass -> VDerivedForm -> Root -> Vowels -> Str -> VerbInfo = \c,f,r,p,i ->
+ { class=c ; form=f ; root=r ; vseq=p ; imp=i } ;
+ -- mkVerbInfo : VClass -> VDerivedForm -> Root -> Vowels -> Vowels -> Str -> VerbInfo = \c,f,r,p,p2,i ->
+ -- { class=c ; form=f ; root=r ; vseq=p ; vseq2=p2 ; imp=i } ;
} ;
-- Change certain fields of a VerbInfo record
@@ -1109,18 +1109,46 @@ resource ResMlt = ParamX ** open Prelude, Predef, Maybe in {
-- Root
updateVerbInfo : VerbInfo -> Root -> VerbInfo = \i,r ->
- { class=i.class ; form=i.form ; root=r ; patt=i.patt ; imp=i.imp } ;
+ { class=i.class ; form=i.form ; root=r ; vseq=i.vseq ; imp=i.imp } ;
-- DerivedForm
updateVerbInfo : VerbInfo -> VDerivedForm -> VerbInfo = \i,f ->
- { class=i.class ; form=f ; root=i.root ; patt=i.patt ; imp=i.imp } ;
+ { class=i.class ; form=f ; root=i.root ; vseq=i.vseq ; imp=i.imp } ;
-- DerivedForm, Imperative
updateVerbInfo : VerbInfo -> VDerivedForm -> Str -> VerbInfo = \i,f,imp ->
- { class=i.class ; form=f ; root=i.root ; patt=i.patt ; imp=imp } ;
+ { class=i.class ; form=f ; root=i.root ; vseq=i.vseq ; imp=imp } ;
} ;
+ -- Return the class for a given root
+ classifyRoot : Root -> VClass = \r ->
+ case of {
+ <#WeakCons, #StrongCons, #StrongCons, ""> => Weak Assimilative ;
+ <#StrongCons, #WeakCons, #StrongCons, ""> => Weak Hollow ;
+ <#StrongCons, #StrongCons, #WeakCons, ""> => Weak Lacking ;
+ <#StrongCons, #WeakCons, #WeakCons, ""> => Weak Lacking ;
+ <#Consonant, #Consonant, "għ", ""> => Weak Defective ;
+ <#Consonant, c2@#Consonant, c3@#Consonant, ""> =>
+ if_then_else VClass (pbool2bool (eqStr c2 c3))
+ (Strong Geminated)
+ (case c2 of {
+ #LiquidCons => Strong LiquidMedial ;
+ _ => Strong Regular
+ }) ;
+ <#Consonant, #Consonant, #Consonant, #WeakCons> => Quad QWeak ;
+ <#Consonant, #Consonant, #Consonant, #Consonant> => Quad QStrong ;
+
+ -- Irregular
+ <"'",_,_,_> => Irregular ;
+ <_,"'",_,_> => Irregular ;
+ <_,_,"'",_> => Irregular ;
+ <_,_,_,"'"> => Irregular ;
+
+ <_,_,_,""> => Predef.error("Cannot classify root:"++r.C1+"-"+r.C2+"-"+r.C3) ;
+ <_,_,_,_> => Predef.error("Cannot classify root:"++r.C1+"-"+r.C2+"-"+r.C3+"-"+r.C4)
+ } ;
+
{- ~~~ Useful helper functions ~~~ -}
NONEXIST : Str = "#NONEXIST#" ;
diff --git a/lib/src/maltese/StructuralMlt.gf b/lib/src/maltese/StructuralMlt.gf
index ce9d760eb..d3e3c5060 100644
--- a/lib/src/maltese/StructuralMlt.gf
+++ b/lib/src/maltese/StructuralMlt.gf
@@ -152,14 +152,14 @@ concrete StructuralMlt of Structural = CatMlt **
have_V2 = dirV2 (kellu_V) ;
oper
- af_V = irregularV form1 (ResMlt.mkRoot "'-'-f") (ResMlt.mkPattern "a" [])
+ af_V = irregularV form1 (ResMlt.mkRoot "'-'-f") (ResMlt.mkVowels "a" [])
"kont naf" "kont taf" "kien jaf" "kienet taf" "konna nafu" "kontu tafu" "kienu jafu" --- will fail for negative
"naf" "taf" "jaf" "taf" "nafu" "tafu" "jafu"
"kun af" "kunu afu"
;
sata'_V = mkV "sata'" (ResMlt.mkRoot "s-t-għ") ;
ried_V = mkV "ried" (ResMlt.mkRoot "r-j-d") ;
- kellu_V = irregularV form1 (ResMlt.mkRoot) (ResMlt.mkPattern)
+ kellu_V = irregularV form1 (ResMlt.mkRoot) (ResMlt.mkVowels)
"kelli" "kellek" "kellu" "kellha" "kellna" "kellkom" "kellhom"
"għandi" "għandek" "għandu" "għandha" "għandna" "għandkom" "għandhom"
"kollok" "kollkom"