From bb5372b159569eb3b04058c0fad81edf0a18384d Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Fri, 18 Sep 2026 10:30:53 +0200 Subject: [PATCH] more updates from Codex --- src/faroese/AdjectiveFao.gf | 16 +- src/faroese/AdverbFao.gf | 8 +- src/faroese/CatFao.gf | 20 ++- src/faroese/ConjunctionFao.gf | 30 ++-- src/faroese/ConstructionFao.gf | 51 +++++- src/faroese/DocumentationFao.gf | 16 +- src/faroese/IdiomFao.gf | 56 ++++++- src/faroese/MorphoFao.gf | 281 +++++++++++++++++++++++--------- src/faroese/NamesFao.gf | 2 +- src/faroese/NounFao.gf | 52 ++++-- src/faroese/ParadigmsFao.gf | 32 +++- src/faroese/PhraseFao.gf | 2 +- src/faroese/QuestionFao.gf | 46 ++++-- src/faroese/ResFao.gf | 79 ++++++++- src/faroese/SentenceFao.gf | 46 +++++- src/faroese/VerbFao.gf | 55 ++++++- src/maltese/NounMlt.gf | 4 +- 17 files changed, 626 insertions(+), 170 deletions(-) diff --git a/src/faroese/AdjectiveFao.gf b/src/faroese/AdjectiveFao.gf index 4fbd0a04..01676729 100644 --- a/src/faroese/AdjectiveFao.gf +++ b/src/faroese/AdjectiveFao.gf @@ -2,31 +2,31 @@ concrete AdjectiveFao of Adjective = CatFao ** open ResFao in { lin PositA a = a ; ComparA a np = { - s = \\g,n,c => "meir" ++ a.s ! g ! n ! c ++ "enn" ++ np.s ! Nom + s = \\af,g,n,c => "meir" ++ a.s ! af ! g ! n ! c ++ "enn" ++ np.s ! Nom } ; ComplA2 a np = { - s = \\g,n,c => a.s ! g ! n ! c ++ a.c2.s ++ np.s ! a.c2.c + s = \\af,g,n,c => a.s ! af ! g ! n ! c ++ a.c2.s ++ np.s ! a.c2.c } ; ReflA2 a = { - s = \\g,n,c => a.s ! g ! n ! c ++ a.c2.s ++ "seg" + s = \\af,g,n,c => a.s ! af ! g ! n ! c ++ a.c2.s ++ "seg" } ; UseA2 a = a ; UseComparA a = { - s = \\g,n,c => "meir" ++ a.s ! g ! n ! c + s = \\af,g,n,c => "meir" ++ a.s ! af ! g ! n ! c } ; CAdvAP cadv ap np = { - s = \\g,n,c => cadv.s ++ ap.s ! g ! n ! c ++ cadv.p ++ np.s ! Nom + s = \\af,g,n,c => cadv.s ++ ap.s ! af ! g ! n ! c ++ cadv.p ++ np.s ! Nom } ; AdjOrd ord = { s = ord.s } ; SentAP ap sc = { - s = \\g,n,c => ap.s ! g ! n ! c ++ sc.s + s = \\af,g,n,c => ap.s ! af ! g ! n ! c ++ sc.s } ; AdAP ada ap = { - s = \\g,n,c => ada.s ++ ap.s ! g ! n ! c + s = \\af,g,n,c => ada.s ++ ap.s ! af ! g ! n ! c } ; AdvAP ap adv = { - s = \\g,n,c => ap.s ! g ! n ! c ++ adv.s + s = \\af,g,n,c => ap.s ! af ! g ! n ! c ++ adv.s } ; } diff --git a/src/faroese/AdverbFao.gf b/src/faroese/AdverbFao.gf index 2257eba0..4b716663 100644 --- a/src/faroese/AdverbFao.gf +++ b/src/faroese/AdverbFao.gf @@ -1,11 +1,11 @@ concrete AdverbFao of Adverb = CatFao ** open Prelude,ResFao in { lin - PositAdvAdj a = {s = a.s ! Neuter ! Sg ! Nom} ; + PositAdvAdj a = {s = a.s ! Strong ! Neuter ! Sg ! Nom} ; PrepNP p np = {s = p.s ++ np.s ! p.c} ; - ComparAdvAdj cadv a np = {s = cadv.s ++ a.s ! Neuter ! Sg ! Nom ++ cadv.p ++ np.s ! Nom} ; - ComparAdvAdjS cadv a s = {s = cadv.s ++ a.s ! Neuter ! Sg ! Nom ++ cadv.p ++ s.s} ; + ComparAdvAdj cadv a np = {s = cadv.s ++ a.s ! Strong ! Neuter ! Sg ! Nom ++ cadv.p ++ np.s ! Nom} ; + ComparAdvAdjS cadv a s = {s = cadv.s ++ a.s ! Strong ! Neuter ! Sg ! Nom ++ cadv.p ++ s.s} ; AdAdv ada adv = {s = ada.s ++ adv.s} ; - PositAdAAdj a = {s = a.s ! Neuter ! Sg ! Nom} ; + PositAdAAdj a = {s = a.s ! Strong ! Neuter ! Sg ! Nom} ; SubjS subj s = {s = subj.s ++ s.s} ; AdnCAdv cadv = {s = cadv.s} ; } diff --git a/src/faroese/CatFao.gf b/src/faroese/CatFao.gf index d5398460..0183c170 100644 --- a/src/faroese/CatFao.gf +++ b/src/faroese/CatFao.gf @@ -18,9 +18,17 @@ lincat SSlash = {s : Str ; c2 : Compl} ; lincat Imp = {s : Polarity => Number => Str} ; lincat Prep = Compl ; lincat CN = CommonNoun ; -lincat NP, Pron = {s : Case => Str ; g : Gender ; n : Number ; p : Person} ; +lincat NP = {s : Case => Str ; g : Gender ; n : Number ; p : Person} ; +lincat Pron = { + s : Case => Str ; + poss : Gender => Number => Case => Str ; + g : Gender ; n : Number ; p : Person +} ; lincat QS = {s : Str} ; -lincat QCl = {s : Tense => Polarity => Str} ; +lincat QCl = { + s,anterior : Tense => Polarity => Str ; + future,conditional : Polarity => Str +} ; lincat IP = {s : Str ; n : Number} ; lincat IComp = {s : Str} ; lincat IDet = {s : Str ; n : Number} ; @@ -29,14 +37,14 @@ lincat RCl = {s : Tense => Polarity => Gender => PersNum => Str} ; lincat RS = {s : Gender => PersNum => Str} ; lincat RP = {s : Str} ; lincat AP = AdjPhrase ; -lincat Det = {s : Gender => Case => Str ; n : Number ; sp : Species} ; +lincat Det = {s : Gender => Case => Str ; n : Number ; sp : Species ; d : Declension} ; lincat Predet = {s : Str} ; -lincat Quant = {s : Bool => Gender => Number => Case => Str; sp : Species} ; +lincat Quant = {s : Bool => Gender => Number => Case => Str; sp : Species ; d : Declension} ; lincat Num = {s : Gender => Case => Str ; n : Number ; hasCard : Bool} ; lincat Card = {s : Gender => Case => Str ; n : Number} ; lincat ACard = {s : Str} ; -lincat Ord = {s : Gender => Number => Case => Str} ; -lincat DAP = {s : Gender => Case => Str ; n : Number ; sp : Species} ; +lincat Ord = {s : Declension => Gender => Number => Case => Str} ; +lincat DAP = {s : Gender => Case => Str ; n : Number ; sp : Species ; d : Declension} ; lincat S = {s : Str} ; lincat Numeral = { s : CardOrd => Gender => Case => Str ; diff --git a/src/faroese/ConjunctionFao.gf b/src/faroese/ConjunctionFao.gf index 0cef1753..9ba2d082 100644 --- a/src/faroese/ConjunctionFao.gf +++ b/src/faroese/ConjunctionFao.gf @@ -5,9 +5,9 @@ lincat [RS] = {s1,s2 : Gender => PersNum => Str} ; [Adv], [AdV], [IAdv] = {s1,s2 : Str} ; [NP] = {s1,s2 : Case => Str ; g : Gender ; n : Number ; p : Person} ; - [AP] = {s1,s2 : Gender => Number => Case => Str} ; - [CN] = {s1,s2 : Species => Number => Case => Str ; g : Gender} ; - [DAP] = {s1,s2 : Gender => Case => Str ; n : Number ; sp : Species} ; + [AP] = {s1,s2 : Declension => Gender => Number => Case => Str} ; + [CN] = {s1,s2 : Species => Number => Case => Str ; p1,p2 : Number => Case => Str ; g : Gender} ; + [DAP] = {s1,s2 : Gender => Case => Str ; n : Number ; sp : Species ; d : Declension} ; lin ConjS conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ; @@ -21,15 +21,19 @@ lin n = Pl ; p = P3 } ; - ConjAP conj xs = {s = \\g,n,c => xs.s1 ! g ! n ! c ++ conj.s ++ xs.s2 ! g ! n ! c} ; + ConjAP conj xs = { + s = \\af,g,n,c => xs.s1 ! af ! g ! n ! c ++ conj.s ++ xs.s2 ! af ! g ! n ! c + } ; ConjCN conj xs = { s = \\sp,n,c => xs.s1 ! sp ! n ! c ++ conj.s ++ xs.s2 ! sp ! n ! c ; + p = \\n,c => xs.p1 ! n ! c ++ conj.s ++ xs.p2 ! n ! c ; g = xs.g } ; ConjDet conj xs = { s = \\g,c => xs.s1 ! g ! c ++ conj.s ++ xs.s2 ! g ! c ; n = xs.n ; - sp = xs.sp + sp = xs.sp ; + d = xs.d } ; BaseS x y = {s1 = x.s ; s2 = y.s} ; @@ -45,9 +49,15 @@ lin BaseNP x y = {s1 = x.s ; s2 = y.s ; g = x.g ; n = Pl ; p = P3} ; ConsNP x xs = {s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c ; s2 = xs.s2 ; g = xs.g ; n = Pl ; p = P3} ; BaseAP x y = {s1 = x.s ; s2 = y.s} ; - ConsAP x xs = {s1 = \\g,n,c => x.s ! g ! n ! c ++ "," ++ xs.s1 ! g ! n ! c ; s2 = xs.s2} ; - BaseCN x y = {s1 = x.s ; s2 = y.s ; g = x.g} ; - ConsCN x xs = {s1 = \\sp,n,c => x.s ! sp ! n ! c ++ "," ++ xs.s1 ! sp ! n ! c ; s2 = xs.s2 ; g = xs.g} ; - BaseDAP x y = {s1 = x.s ; s2 = y.s ; n = y.n ; sp = y.sp} ; - ConsDAP x xs = {s1 = \\g,c => x.s ! g ! c ++ "," ++ xs.s1 ! g ! c ; s2 = xs.s2 ; n = xs.n ; sp = xs.sp} ; + ConsAP x xs = { + s1 = \\af,g,n,c => x.s ! af ! g ! n ! c ++ "," ++ xs.s1 ! af ! g ! n ! c ; + s2 = xs.s2 + } ; + BaseCN x y = {s1 = x.s ; s2 = y.s ; p1 = x.p ; p2 = y.p ; g = x.g} ; + ConsCN x xs = { + s1 = \\sp,n,c => x.s ! sp ! n ! c ++ "," ++ xs.s1 ! sp ! n ! c ; s2 = xs.s2 ; + p1 = \\n,c => x.p ! n ! c ++ "," ++ xs.p1 ! n ! c ; p2 = xs.p2 ; g = xs.g + } ; + BaseDAP x y = {s1 = x.s ; s2 = y.s ; n = y.n ; sp = y.sp ; d = y.d} ; + ConsDAP x xs = {s1 = \\g,c => x.s ! g ! c ++ "," ++ xs.s1 ! g ! c ; s2 = xs.s2 ; n = xs.n ; sp = xs.sp ; d = xs.d} ; } diff --git a/src/faroese/ConstructionFao.gf b/src/faroese/ConstructionFao.gf index a1b5d3b8..8f469168 100644 --- a/src/faroese/ConstructionFao.gf +++ b/src/faroese/ConstructionFao.gf @@ -14,34 +14,64 @@ lin have_name_Cl np name = { Converb = np.s ! Nom ++ "eitur" ++ name.s ! Nom ; Indicative = \\t,pol => np.s ! Nom ++ "eitur" ++ negStr pol ++ name.s ! Nom ; + Interrogative = \\t,pol => "eitur" ++ np.s ! Nom ++ negStr pol ++ name.s ! Nom ; + Future = \\pol => np.s ! Nom ++ futureAux ! persNum np.n np.p ++ negStr pol ++ "eita" ++ name.s ! Nom ; + FutureInterrogative = \\pol => futureAux ! persNum np.n np.p ++ np.s ! Nom ++ negStr pol ++ "eita" ++ name.s ! Nom ; + Conditional = \\pol => np.s ! Nom ++ conditionalAux ! persNum np.n np.p ++ negStr pol ++ "eita" ++ name.s ! Nom ; + ConditionalInterrogative = \\pol => conditionalAux ! persNum np.n np.p ++ np.s ! Nom ++ negStr pol ++ "eita" ++ name.s ! Nom ; + Anterior = \\t,pol => np.s ! Nom ++ perfectAux ! t ! persNum np.n np.p ++ negStr pol ++ "itið" ++ name.s ! Nom ; + AnteriorInterrogative = \\t,pol => perfectAux ! t ! persNum np.n np.p ++ np.s ! Nom ++ negStr pol ++ "itið" ++ name.s ! Nom ; Nonfinite = np.s ! Nom ++ "eita" ++ name.s ! Nom ; Participle = \\_ => np.s ! Nom ++ "itið" ++ name.s ! Nom } ; married_Cl np spouse = { Converb = np.s ! Nom ++ "er giftur við" ++ spouse.s ! Dat ; Indicative = \\t,pol => np.s ! Nom ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ "giftur við" ++ spouse.s ! Dat ; + Interrogative = \\t,pol => copula ! t ! persNum np.n np.p ++ np.s ! Nom ++ negStr pol ++ "giftur við" ++ spouse.s ! Dat ; + Future = \\pol => np.s ! Nom ++ futureAux ! persNum np.n np.p ++ negStr pol ++ "vera giftur við" ++ spouse.s ! Dat ; + FutureInterrogative = \\pol => futureAux ! persNum np.n np.p ++ np.s ! Nom ++ negStr pol ++ "vera giftur við" ++ spouse.s ! Dat ; + Conditional = \\pol => np.s ! Nom ++ conditionalAux ! persNum np.n np.p ++ negStr pol ++ "vera giftur við" ++ spouse.s ! Dat ; + ConditionalInterrogative = \\pol => conditionalAux ! persNum np.n np.p ++ np.s ! Nom ++ negStr pol ++ "vera giftur við" ++ spouse.s ! Dat ; + Anterior = \\t,pol => np.s ! Nom ++ perfectAux ! t ! persNum np.n np.p ++ negStr pol ++ "verið giftur við" ++ spouse.s ! Dat ; + AnteriorInterrogative = \\t,pol => perfectAux ! t ! persNum np.n np.p ++ np.s ! Nom ++ negStr pol ++ "verið giftur við" ++ spouse.s ! Dat ; Nonfinite = np.s ! Nom ++ "vera giftur við" ++ spouse.s ! Dat ; Participle = \\_ => np.s ! Nom ++ "verið giftur við" ++ spouse.s ! Dat } ; what_name_QCl np = { - s = \\t,pol => "hvat" ++ "eitur" ++ np.s ! Nom + s = \\t,pol => "hvat" ++ "eitur" ++ np.s ! Nom ; + anterior = \\t,pol => "hvat" ++ perfectAux ! t ! persNum np.n np.p ++ negStr pol ++ "itið" ++ np.s ! Nom ; + future = \\pol => "hvat" ++ futureAux ! persNum np.n np.p ++ negStr pol ++ "eita" ++ np.s ! Nom ; + conditional = \\pol => "hvat" ++ conditionalAux ! persNum np.n np.p ++ negStr pol ++ "eita" ++ np.s ! Nom } ; how_old_QCl np = { - s = \\t,pol => "hvussu gamal" ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom + s = \\t,pol => "hvussu gamal" ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom ; + anterior = \\t,pol => "hvussu gamal" ++ perfectAux ! t ! persNum np.n np.p ++ negStr pol ++ "verið" ++ np.s ! Nom ; + future = \\pol => "hvussu gamal" ++ futureAux ! persNum np.n np.p ++ negStr pol ++ "vera" ++ np.s ! Nom ; + conditional = \\pol => "hvussu gamal" ++ conditionalAux ! persNum np.n np.p ++ negStr pol ++ "vera" ++ np.s ! Nom } ; how_far_QCl np = { - s = \\t,pol => "hvussu langt burtur" ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom + s = \\t,pol => "hvussu langt burtur" ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom ; + anterior = \\t,pol => "hvussu langt burtur" ++ perfectAux ! t ! persNum np.n np.p ++ negStr pol ++ "verið" ++ np.s ! Nom ; + future = \\pol => "hvussu langt burtur" ++ futureAux ! persNum np.n np.p ++ negStr pol ++ "vera" ++ np.s ! Nom ; + conditional = \\pol => "hvussu langt burtur" ++ conditionalAux ! persNum np.n np.p ++ negStr pol ++ "vera" ++ np.s ! Nom } ; weather_adjCl ap = { - Converb = "tað er" ++ ap.s ! Neuter ! Sg ! Nom ; - Indicative = \\t,pol => "tað" ++ copula ! t ! PSg P3 ++ negStr pol ++ ap.s ! Neuter ! Sg ! Nom ; - Nonfinite = "vera" ++ ap.s ! Neuter ! Sg ! Nom ; - Participle = \\_ => "verið" ++ ap.s ! Neuter ! Sg ! Nom + Converb = "tað er" ++ ap.s ! Strong ! Neuter ! Sg ! Nom ; + Indicative = \\t,pol => "tað" ++ copula ! t ! PSg P3 ++ negStr pol ++ ap.s ! Strong ! Neuter ! Sg ! Nom ; + Interrogative = \\t,pol => copula ! t ! PSg P3 ++ "tað" ++ negStr pol ++ ap.s ! Strong ! Neuter ! Sg ! Nom ; + Future = \\pol => "tað" ++ futureAux ! PSg P3 ++ negStr pol ++ "vera" ++ ap.s ! Strong ! Neuter ! Sg ! Nom ; + FutureInterrogative = \\pol => futureAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ ap.s ! Strong ! Neuter ! Sg ! Nom ; + Conditional = \\pol => "tað" ++ conditionalAux ! PSg P3 ++ negStr pol ++ "vera" ++ ap.s ! Strong ! Neuter ! Sg ! Nom ; + ConditionalInterrogative = \\pol => conditionalAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ ap.s ! Strong ! Neuter ! Sg ! Nom ; + Anterior = \\t,pol => "tað" ++ perfectAux ! t ! PSg P3 ++ negStr pol ++ "verið" ++ ap.s ! Strong ! Neuter ! Sg ! Nom ; + AnteriorInterrogative = \\t,pol => perfectAux ! t ! PSg P3 ++ "tað" ++ negStr pol ++ "verið" ++ ap.s ! Strong ! Neuter ! Sg ! Nom ; + Nonfinite = "vera" ++ ap.s ! Strong ! Neuter ! Sg ! Nom ; + Participle = \\_ => "verið" ++ ap.s ! Strong ! Neuter ! Sg ! Nom } ; is_right_VP = beVP "rættur" ; is_wrong_VP = beVP "skeivur" ; n_units_AP card cn a = { - s = \\g,n,c => card.s ! cn.g ! Nom ++ cn.s ! Indef ! Pl ! Nom ++ a.s ! g ! n ! c + s = \\af,g,n,c => card.s ! cn.g ! Nom ++ cn.s ! Indef ! Pl ! Nom ++ a.s ! af ! g ! n ! c } ; n_units_of_NP card cn np = mkNP (card.s ! cn.g ! Nom ++ cn.s ! Indef ! Pl ! Nom ++ "av" ++ np.s ! Dat) np.g np.n np.p ; n_unit_CN card unit cn = mkCN (card.s ! unit.g ! Nom ++ unit.s ! Indef ! Sg ! Nom ++ cn.s ! Indef ! Sg ! Nom) cn.g ; @@ -162,8 +192,11 @@ lin oper beVP : Str -> VerbPhrase = \ap -> { - Converb = copula ! Pres ! PPl ++ ap ; + Converb = "verið" ++ ap ; + Imperative = \\n => case n of {Sg => "ver" ; Pl => "verið"} ++ ap ; Indicative = \\t,pol,_,p => copula ! t ! p ++ negStr pol ++ ap ; + Finite = copula ; + Remainder = \\pol,_,_ => negStr pol ++ ap ; Nonfinite = "vera" ++ ap ; Participle = \\_ => "verið" ++ ap } ; diff --git a/src/faroese/DocumentationFao.gf b/src/faroese/DocumentationFao.gf index 5d855927..cc0675b2 100644 --- a/src/faroese/DocumentationFao.gf +++ b/src/faroese/DocumentationFao.gf @@ -36,15 +36,15 @@ lin s2=frameTable ( tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Masc" ++ th "Fem" ++ th "Neuter") ++ tr (intagAttr "th" "rowspan=\"4\"" "Sg" ++ - th "Nom" ++ td (x.s ! Masc ! Sg ! Nom) ++ td (x.s ! Fem ! Sg ! Nom) ++ td (x.s ! Neuter ! Sg ! Nom)) ++ - tr (th "Acc" ++ td (x.s ! Masc ! Sg ! Acc) ++ td (x.s ! Fem ! Sg ! Acc) ++ td (x.s ! Neuter ! Sg ! Acc)) ++ - tr (th "Dat" ++ td (x.s ! Masc ! Sg ! Dat) ++ td (x.s ! Fem ! Sg ! Dat) ++ td (x.s ! Neuter ! Sg ! Dat)) ++ - tr (th "Gen" ++ td (x.s ! Masc ! Sg ! Gen) ++ td (x.s ! Fem ! Sg ! Gen) ++ td (x.s ! Neuter ! Sg ! Gen)) ++ + th "Nom" ++ td (x.s ! Strong ! Masc ! Sg ! Nom) ++ td (x.s ! Strong ! Fem ! Sg ! Nom) ++ td (x.s ! Strong ! Neuter ! Sg ! Nom)) ++ + tr (th "Acc" ++ td (x.s ! Strong ! Masc ! Sg ! Acc) ++ td (x.s ! Strong ! Fem ! Sg ! Acc) ++ td (x.s ! Strong ! Neuter ! Sg ! Acc)) ++ + tr (th "Dat" ++ td (x.s ! Strong ! Masc ! Sg ! Dat) ++ td (x.s ! Strong ! Fem ! Sg ! Dat) ++ td (x.s ! Strong ! Neuter ! Sg ! Dat)) ++ + tr (th "Gen" ++ td (x.s ! Strong ! Masc ! Sg ! Gen) ++ td (x.s ! Strong ! Fem ! Sg ! Gen) ++ td (x.s ! Strong ! Neuter ! Sg ! Gen)) ++ tr (intagAttr "th" "rowspan=\"4\"" "Pl" ++ - th "Nom" ++ td (x.s ! Masc ! Pl ! Nom) ++ td (x.s ! Fem ! Pl ! Nom) ++ td (x.s ! Neuter ! Pl ! Nom)) ++ - tr (th "Acc" ++ td (x.s ! Masc ! Pl ! Acc) ++ td (x.s ! Fem ! Pl ! Acc) ++ td (x.s ! Neuter ! Pl ! Acc)) ++ - tr (th "Dat" ++ td (x.s ! Masc ! Pl ! Dat) ++ td (x.s ! Fem ! Pl ! Dat) ++ td (x.s ! Neuter ! Pl ! Dat)) ++ - tr (th "Gen" ++ td (x.s ! Masc ! Pl ! Gen) ++ td (x.s ! Fem ! Pl ! Gen) ++ td (x.s ! Neuter ! Pl ! Gen))) ; + th "Nom" ++ td (x.s ! Strong ! Masc ! Pl ! Nom) ++ td (x.s ! Strong ! Fem ! Pl ! Nom) ++ td (x.s ! Strong ! Neuter ! Pl ! Nom)) ++ + tr (th "Acc" ++ td (x.s ! Strong ! Masc ! Pl ! Acc) ++ td (x.s ! Strong ! Fem ! Pl ! Acc) ++ td (x.s ! Strong ! Neuter ! Pl ! Acc)) ++ + tr (th "Dat" ++ td (x.s ! Strong ! Masc ! Pl ! Dat) ++ td (x.s ! Strong ! Fem ! Pl ! Dat) ++ td (x.s ! Strong ! Neuter ! Pl ! Dat)) ++ + tr (th "Gen" ++ td (x.s ! Strong ! Masc ! Pl ! Gen) ++ td (x.s ! Strong ! Fem ! Pl ! Gen) ++ td (x.s ! Strong ! Neuter ! Pl ! Gen))) ; s3=[] } ; lin diff --git a/src/faroese/IdiomFao.gf b/src/faroese/IdiomFao.gf index f9354c20..b95462ed 100644 --- a/src/faroese/IdiomFao.gf +++ b/src/faroese/IdiomFao.gf @@ -4,48 +4,99 @@ lin ImpersCl vp = { Converb = "tað" ++ vp.Converb ; Indicative = \\t,pol => "tað" ++ vp.Indicative ! t ! pol ! Neuter ! PSg P3 ; + Interrogative = \\t,pol => vp.Finite ! t ! PSg P3 ++ "tað" ++ vp.Remainder ! pol ! Neuter ! PSg P3 ; + Future = \\pol => "tað" ++ futureAux ! PSg P3 ++ negStr pol ++ vp.Nonfinite ; + FutureInterrogative = \\pol => futureAux ! PSg P3 ++ "tað" ++ negStr pol ++ vp.Nonfinite ; + Conditional = \\pol => "tað" ++ conditionalAux ! PSg P3 ++ negStr pol ++ vp.Nonfinite ; + ConditionalInterrogative = \\pol => conditionalAux ! PSg P3 ++ "tað" ++ negStr pol ++ vp.Nonfinite ; + Anterior = \\t,pol => "tað" ++ perfectAux ! t ! PSg P3 ++ negStr pol ++ vp.Converb ; + AnteriorInterrogative = \\t,pol => perfectAux ! t ! PSg P3 ++ "tað" ++ negStr pol ++ vp.Converb ; Nonfinite = "tað" ++ vp.Nonfinite ; Participle = \\t => "tað" ++ vp.Participle ! t } ; GenericCl vp = { Converb = "mann" ++ vp.Converb ; Indicative = \\t,pol => "mann" ++ vp.Indicative ! t ! pol ! Masc ! PSg P3 ; + Interrogative = \\t,pol => vp.Finite ! t ! PSg P3 ++ "mann" ++ vp.Remainder ! pol ! Masc ! PSg P3 ; + Future = \\pol => "mann" ++ futureAux ! PSg P3 ++ negStr pol ++ vp.Nonfinite ; + FutureInterrogative = \\pol => futureAux ! PSg P3 ++ "mann" ++ negStr pol ++ vp.Nonfinite ; + Conditional = \\pol => "mann" ++ conditionalAux ! PSg P3 ++ negStr pol ++ vp.Nonfinite ; + ConditionalInterrogative = \\pol => conditionalAux ! PSg P3 ++ "mann" ++ negStr pol ++ vp.Nonfinite ; + Anterior = \\t,pol => "mann" ++ perfectAux ! t ! PSg P3 ++ negStr pol ++ vp.Converb ; + AnteriorInterrogative = \\t,pol => perfectAux ! t ! PSg P3 ++ "mann" ++ negStr pol ++ vp.Converb ; Nonfinite = "mann" ++ vp.Nonfinite ; Participle = \\t => "mann" ++ vp.Participle ! t } ; CleftNP np rs = { Converb = "tað er" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ; Indicative = \\t,pol => "tað" ++ copula ! t ! PSg P3 ++ negStr pol ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ; + Interrogative = \\t,pol => copula ! t ! PSg P3 ++ "tað" ++ negStr pol ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ; + Future = \\pol => "tað" ++ futureAux ! PSg P3 ++ negStr pol ++ "vera" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ; + FutureInterrogative = \\pol => futureAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ; + Conditional = \\pol => "tað" ++ conditionalAux ! PSg P3 ++ negStr pol ++ "vera" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ; + ConditionalInterrogative = \\pol => conditionalAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ; + Anterior = \\t,pol => "tað" ++ perfectAux ! t ! PSg P3 ++ negStr pol ++ "verið" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ; + AnteriorInterrogative = \\t,pol => perfectAux ! t ! PSg P3 ++ "tað" ++ negStr pol ++ "verið" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ; Nonfinite = "vera" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ; Participle = \\_ => "verið" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p } ; CleftAdv adv s = { Converb = "tað er" ++ adv.s ++ s.s ; Indicative = \\t,pol => "tað" ++ copula ! t ! PSg P3 ++ negStr pol ++ adv.s ++ s.s ; + Interrogative = \\t,pol => copula ! t ! PSg P3 ++ "tað" ++ negStr pol ++ adv.s ++ s.s ; + Future = \\pol => "tað" ++ futureAux ! PSg P3 ++ negStr pol ++ "vera" ++ adv.s ++ s.s ; + FutureInterrogative = \\pol => futureAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ adv.s ++ s.s ; + Conditional = \\pol => "tað" ++ conditionalAux ! PSg P3 ++ negStr pol ++ "vera" ++ adv.s ++ s.s ; + ConditionalInterrogative = \\pol => conditionalAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ adv.s ++ s.s ; + Anterior = \\t,pol => "tað" ++ perfectAux ! t ! PSg P3 ++ negStr pol ++ "verið" ++ adv.s ++ s.s ; + AnteriorInterrogative = \\t,pol => perfectAux ! t ! PSg P3 ++ "tað" ++ negStr pol ++ "verið" ++ adv.s ++ s.s ; Nonfinite = "vera" ++ adv.s ++ s.s ; Participle = \\_ => "verið" ++ adv.s ++ s.s } ; ExistNP np = { Converb = "tað er" ++ np.s ! Nom ; Indicative = \\t,pol => "tað" ++ copula ! t ! persNum np.n P3 ++ negStr pol ++ np.s ! Nom ; + Interrogative = \\t,pol => copula ! t ! persNum np.n P3 ++ "tað" ++ negStr pol ++ np.s ! Nom ; + Future = \\pol => "tað" ++ futureAux ! PSg P3 ++ negStr pol ++ "vera" ++ np.s ! Nom ; + FutureInterrogative = \\pol => futureAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ np.s ! Nom ; + Conditional = \\pol => "tað" ++ conditionalAux ! PSg P3 ++ negStr pol ++ "vera" ++ np.s ! Nom ; + ConditionalInterrogative = \\pol => conditionalAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ np.s ! Nom ; + Anterior = \\t,pol => "tað" ++ perfectAux ! t ! PSg P3 ++ negStr pol ++ "verið" ++ np.s ! Nom ; + AnteriorInterrogative = \\t,pol => perfectAux ! t ! PSg P3 ++ "tað" ++ negStr pol ++ "verið" ++ np.s ! Nom ; Nonfinite = "vera" ++ np.s ! Nom ; Participle = \\_ => "verið" ++ np.s ! Nom } ; ExistIP ip = { - s = \\t,pol => "hvat" ++ copula ! t ! persNum ip.n P3 ++ negStr pol + s = \\t,pol => "hvat" ++ copula ! t ! persNum ip.n P3 ++ negStr pol ; + anterior = \\t,pol => "hvat" ++ perfectAux ! t ! persNum ip.n P3 ++ negStr pol ++ "verið" ; + future = \\pol => "hvat" ++ futureAux ! persNum ip.n P3 ++ negStr pol ++ "vera" ; + conditional = \\pol => "hvat" ++ conditionalAux ! persNum ip.n P3 ++ negStr pol ++ "vera" } ; ExistNPAdv np adv = { Converb = "tað er" ++ np.s ! Nom ++ adv.s ; Indicative = \\t,pol => "tað" ++ copula ! t ! persNum np.n P3 ++ negStr pol ++ np.s ! Nom ++ adv.s ; + Interrogative = \\t,pol => copula ! t ! persNum np.n P3 ++ "tað" ++ negStr pol ++ np.s ! Nom ++ adv.s ; + Future = \\pol => "tað" ++ futureAux ! PSg P3 ++ negStr pol ++ "vera" ++ np.s ! Nom ++ adv.s ; + FutureInterrogative = \\pol => futureAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ np.s ! Nom ++ adv.s ; + Conditional = \\pol => "tað" ++ conditionalAux ! PSg P3 ++ negStr pol ++ "vera" ++ np.s ! Nom ++ adv.s ; + ConditionalInterrogative = \\pol => conditionalAux ! PSg P3 ++ "tað" ++ negStr pol ++ "vera" ++ np.s ! Nom ++ adv.s ; + Anterior = \\t,pol => "tað" ++ perfectAux ! t ! PSg P3 ++ negStr pol ++ "verið" ++ np.s ! Nom ++ adv.s ; + AnteriorInterrogative = \\t,pol => perfectAux ! t ! PSg P3 ++ "tað" ++ negStr pol ++ "verið" ++ np.s ! Nom ++ adv.s ; Nonfinite = "vera" ++ np.s ! Nom ++ adv.s ; Participle = \\_ => "verið" ++ np.s ! Nom ++ adv.s } ; ExistIPAdv ip adv = { - s = \\t,pol => ip.s ++ copula ! t ! persNum ip.n P3 ++ negStr pol ++ adv.s + s = \\t,pol => ip.s ++ copula ! t ! persNum ip.n P3 ++ negStr pol ++ adv.s ; + anterior = \\t,pol => ip.s ++ perfectAux ! t ! persNum ip.n P3 ++ negStr pol ++ "verið" ++ adv.s ; + future = \\pol => ip.s ++ futureAux ! persNum ip.n P3 ++ negStr pol ++ "vera" ++ adv.s ; + conditional = \\pol => ip.s ++ conditionalAux ! persNum ip.n P3 ++ negStr pol ++ "vera" ++ adv.s } ; ProgrVP vp = { Converb = "vera við at" ++ vp.Nonfinite ; + Imperative = \\n => case n of {Sg => "ver" ; Pl => "verið"} ++ "við at" ++ vp.Nonfinite ; Indicative = \\t,pol,g,p => copula ! t ! p ++ negStr pol ++ "við at" ++ vp.Nonfinite ; + Finite = copula ; + Remainder = \\pol,_,_ => negStr pol ++ "við at" ++ vp.Nonfinite ; Nonfinite = "vera við at" ++ vp.Nonfinite ; Participle = \\_ => "verið við at" ++ vp.Nonfinite } ; @@ -54,6 +105,7 @@ lin SelfAdvVP vp = vp ** { Converb = vp.Converb ++ "sjálvur" ; Indicative = \\t,pol,g,p => vp.Indicative ! t ! pol ! g ! p ++ "sjálvur" ; + Remainder = \\pol,g,p => vp.Remainder ! pol ! g ! p ++ "sjálvur" ; Nonfinite = vp.Nonfinite ++ "sjálvur" ; Participle = \\t => vp.Participle ! t ++ "sjálvur" } ; diff --git a/src/faroese/MorphoFao.gf b/src/faroese/MorphoFao.gf index 368fe8a1..8da38539 100644 --- a/src/faroese/MorphoFao.gf +++ b/src/faroese/MorphoFao.gf @@ -54,24 +54,24 @@ mkN002 base = Gen => base_1+"s" } ; Pl => table { - Nom => base_1+"ð" ; - Acc => base_1+"ð" ; - Dat => base_1+"num" ; - Gen => base_1+"sins" + Nom => base_1 ; + Acc => base_1 ; + Dat => base_1+"um" ; + Gen => base_1+"a" } } ; Def => table { Sg => table { - Nom => nonExist ; - Acc => nonExist ; - Dat => nonExist ; - Gen => nonExist + Nom => base_1+"ð" ; + Acc => base_1+"ð" ; + Dat => base_1+"num" ; + Gen => base_1+"sins" } ; Pl => table { - Nom => nonExist ; - Acc => nonExist ; - Dat => nonExist ; - Gen => nonExist + Nom => base_1+"ni" ; + Acc => base_1+"ni" ; + Dat => base_1+"unum" ; + Gen => base_1+"anna" } } } ; @@ -249,24 +249,24 @@ mkN007 base = Gen => base_1+"ar" } ; Pl => table { - Nom => base_1+"in" ; - Acc => base_1+"ina" ; - Dat => base_1+"ini" ; - Gen => base_1+"arinnar" + Nom => base_1+"ir" ; + Acc => base_1+"ir" ; + Dat => base_1+"um" ; + Gen => base_1+"a" } } ; Def => table { Sg => table { - Nom => nonExist ; - Acc => nonExist ; - Dat => nonExist ; - Gen => nonExist + Nom => base_1+"in" ; + Acc => base_1+"ina" ; + Dat => base_1+"ini" ; + Gen => base_1+"arinnar" } ; Pl => table { - Nom => nonExist ; - Acc => nonExist ; - Dat => nonExist ; - Gen => nonExist + Nom => base_1+"irnar" ; + Acc => base_1+"irnar" ; + Dat => base_1+"unum" ; + Gen => base_1+"anna" } } } ; @@ -288,24 +288,24 @@ mkN008 base = Gen => base_1+"s" } ; Pl => table { - Nom => base_1+"ið" ; - Acc => base_1+"ið" ; - Dat => base_1+"inum" ; - Gen => base_1+"sins" + Nom => base_1 ; + Acc => base_1 ; + Dat => base_1+"um" ; + Gen => base_1+"a" } } ; Def => table { Sg => table { - Nom => base_1+"in" ; - Acc => base_1+"in" ; + Nom => base_1+"ið" ; + Acc => base_1+"ið" ; Dat => base_1+"inum" ; Gen => base_1+"sins" } ; Pl => table { - Nom => nonExist ; - Acc => nonExist ; - Dat => nonExist ; - Gen => nonExist + Nom => base_1+"ini" ; + Acc => base_1+"ini" ; + Dat => base_1+"unum" ; + Gen => base_1+"anna" } } } ; @@ -6637,6 +6637,7 @@ mkA001 base = case base of { base_1+"dur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"dur" ; @@ -6679,7 +6680,9 @@ mkA001 base = Gen => base_1+"da" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA001" } ; @@ -6689,6 +6692,7 @@ mkA002 base = case base of { base_1+"a"+base_2@(?+?)+"ur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"a"+base_2+"ur" ; @@ -6731,7 +6735,9 @@ mkA002 base = Gen => base_1+"a"+base_2+"a" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA002" } ; @@ -6741,6 +6747,7 @@ mkA003 base = case base of { base_1+"ur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"ur" ; @@ -6783,7 +6790,9 @@ mkA003 base = Gen => base_1+"a" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA003" } ; @@ -6793,6 +6802,7 @@ mkA004 base = case base of { base_1+"a"+base_2@?+"u"+base_3@? => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"a"+base_2+"u"+base_3 ; @@ -6835,7 +6845,9 @@ mkA004 base = Gen => base_1+"a"+base_2+base_3+"a" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA004" } ; @@ -6845,6 +6857,7 @@ mkA005 base = case base of { "a"+base_1+"lur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => "a"+base_1+"lur" ; @@ -6887,7 +6900,9 @@ mkA005 base = Gen => "a"+base_1+"la" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA005" } ; @@ -6897,6 +6912,7 @@ mkA006 base = case base of { base_1+"nur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"nur" ; @@ -6939,7 +6955,9 @@ mkA006 base = Gen => base_1+"na" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA006" } ; @@ -6949,6 +6967,7 @@ mkA007 base = case base of { base_1+"ur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"ur" ; @@ -6991,7 +7010,9 @@ mkA007 base = Gen => base_1+"a" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA007" } ; @@ -7001,6 +7022,7 @@ mkA008 base = case base of { base_1+"ur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"ur" ; @@ -7043,7 +7065,9 @@ mkA008 base = Gen => base_1+"a" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA008" } ; @@ -7053,6 +7077,7 @@ mkA009 base = case base of { base_1+"in" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"in" ; @@ -7095,7 +7120,9 @@ mkA009 base = Gen => base_1+"na" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA009" } ; @@ -7105,6 +7132,7 @@ mkA010 base = case base of { base_1+"ður" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"ður" ; @@ -7147,7 +7175,9 @@ mkA010 base = Gen => base_1+"ða" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA010" } ; @@ -7157,6 +7187,7 @@ mkA011 base = case base of { base_1+"tur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"tur" ; @@ -7199,7 +7230,9 @@ mkA011 base = Gen => base_1+"ta" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA011" } ; @@ -7209,6 +7242,7 @@ mkA012 base = case base of { base_1+"gvin" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"gvin" ; @@ -7251,7 +7285,9 @@ mkA012 base = Gen => base_1+"na" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA012" } ; @@ -7261,6 +7297,7 @@ mkA013 base = case base of { base_1+"gur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"gur" ; @@ -7303,7 +7340,9 @@ mkA013 base = Gen => base_1+"ga" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA013" } ; @@ -7313,6 +7352,7 @@ mkA014 base = case base of { base_1+"ddur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"ddur" ; @@ -7355,7 +7395,9 @@ mkA014 base = Gen => base_1+"dda" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA014" } ; @@ -7365,6 +7407,7 @@ mkA015 base = case base of { base_1+"a"+base_2@("ng"|"m"|(?+?+?))+"ur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"a"+base_2+"ur" ; @@ -7407,7 +7450,9 @@ mkA015 base = Gen => base_1+"a"+base_2+"a" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA015" } ; @@ -7417,6 +7462,7 @@ mkA016 base = case base of { base_1+"mur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"mur" ; @@ -7459,7 +7505,9 @@ mkA016 base = Gen => base_1+"madimra" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA016" } ; @@ -7469,6 +7517,7 @@ mkA017 base = case base of { base_1+"ur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"ur" ; @@ -7511,7 +7560,9 @@ mkA017 base = Gen => base_1+"a" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA017" } ; @@ -7521,6 +7572,7 @@ mkA018 base = case base of { base_1+"kur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"kur" ; @@ -7563,7 +7615,9 @@ mkA018 base = Gen => base_1+"kadøkra" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA018" } ; @@ -7573,6 +7627,7 @@ mkA019 base = case base of { base_1+"tin" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"tin" ; @@ -7615,7 +7670,9 @@ mkA019 base = Gen => base_1+"na" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA019" } ; @@ -7625,6 +7682,7 @@ mkA020 base = case base of { base_1+"a"+base_2@?+"dur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"a"+base_2+"dur" ; @@ -7667,7 +7725,9 @@ mkA020 base = Gen => base_1+"a"+base_2+"da" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA020" } ; @@ -7677,6 +7737,7 @@ mkA021 base = case base of { base_1+"a"+base_2@?+"lur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"a"+base_2+"lur" ; @@ -7719,7 +7780,9 @@ mkA021 base = Gen => base_1+"a"+base_2+"la" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA021" } ; @@ -7729,6 +7792,7 @@ mkA022 base = case base of { base_1+"a"+base_2@?+"ur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"a"+base_2+"ur" ; @@ -7771,7 +7835,9 @@ mkA022 base = Gen => base_1+"a"+base_2+"a" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA022" } ; @@ -7781,6 +7847,7 @@ mkA023 base = case base of { base_1+"rin" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"rin" ; @@ -7823,7 +7890,9 @@ mkA023 base = Gen => base_1+"na" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA023" } ; @@ -7833,6 +7902,7 @@ mkA024 base = case base of { base_1+"lur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"lur" ; @@ -7875,7 +7945,9 @@ mkA024 base = Gen => base_1+"lafulra" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA024" } ; @@ -7885,6 +7957,7 @@ mkA025 base = case base of { base_1+"a"+base_2@?+"a"+base_3@? => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"a"+base_2+"a"+base_3 ; @@ -7927,7 +8000,9 @@ mkA025 base = Gen => base_1+"a"+base_2+base_3+"a" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA025" } ; @@ -7937,6 +8012,7 @@ mkA026 base = case base of { base_1+"óður" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"óður" ; @@ -7979,7 +8055,9 @@ mkA026 base = Gen => base_1+"óða" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA026" } ; @@ -7989,6 +8067,7 @@ mkA027 base = case base of { base_1+"ei"+base_2@?+"a"+base_3@?+"ur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"ei"+base_2+"a"+base_3+"ur" ; @@ -8031,7 +8110,9 @@ mkA027 base = Gen => base_1+"ei"+base_2+"a"+base_3+"a" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA027" } ; @@ -8041,6 +8122,7 @@ mkA028 base = case base of { base_1+"pin" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"pin" ; @@ -8083,7 +8165,9 @@ mkA028 base = Gen => base_1+"na" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA028" } ; @@ -8093,6 +8177,7 @@ mkA029 base = case base of { base_1+"a"+base_2@?+"sur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"a"+base_2+"sur" ; @@ -8135,7 +8220,9 @@ mkA029 base = Gen => base_1+"a"+base_2+"sa" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA029" } ; @@ -8145,6 +8232,7 @@ mkA030 base = case base of { base_1+"ddur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"ddur" ; @@ -8187,7 +8275,9 @@ mkA030 base = Gen => base_1+"dda" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA030" } ; @@ -8197,6 +8287,7 @@ mkA031 base = case base of { base_1+"a"+base_2@?+"ur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"a"+base_2+"ur" ; @@ -8239,7 +8330,9 @@ mkA031 base = Gen => base_1+"a"+base_2+"alatra" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA031" } ; @@ -8249,6 +8342,7 @@ mkA032 base = case base of { base_1+"ðin" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"ðin" ; @@ -8291,7 +8385,9 @@ mkA032 base = Gen => base_1+"dna" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA032" } ; @@ -8301,6 +8397,7 @@ mkA033 base = case base of { base_1+"ggjur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"ggjur" ; @@ -8343,7 +8440,9 @@ mkA033 base = Gen => base_1+"ggja" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA033" } ; @@ -8353,6 +8452,7 @@ mkA034 base = case base of { base_1+"a"+base_2@?+"ur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"a"+base_2+"ur" ; @@ -8395,7 +8495,9 @@ mkA034 base = Gen => base_1+"a"+base_2+"amakra" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA034" } ; @@ -8405,6 +8507,7 @@ mkA035 base = case base of { base_1+"il" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"il" ; @@ -8447,7 +8550,9 @@ mkA035 base = Gen => base_1+"la" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA035" } ; @@ -8457,6 +8562,7 @@ mkA036 base = case base of { base_1+"lur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"lur" ; @@ -8499,7 +8605,9 @@ mkA036 base = Gen => base_1+"la" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA036" } ; @@ -8509,6 +8617,7 @@ mkA037 base = case base of { base_1+"gvur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"gvur" ; @@ -8551,7 +8660,9 @@ mkA037 base = Gen => base_1+"gva" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA037" } ; @@ -8561,6 +8672,7 @@ mkA038 base = case base of { base_1+"u"+base_2@? => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"u"+base_2 ; @@ -8603,7 +8715,9 @@ mkA038 base = Gen => base_1+base_2+"a" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA038" } ; @@ -8613,6 +8727,7 @@ mkA039 base = case base of { base_1+"rur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"rur" ; @@ -8655,7 +8770,9 @@ mkA039 base = Gen => base_1+"ra" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA039" } ; @@ -8665,6 +8782,7 @@ mkA040 base = case base of { base_1+"lur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"lur" ; @@ -8707,7 +8825,9 @@ mkA040 base = Gen => base_1+"lavilra" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA040" } ; @@ -8717,6 +8837,7 @@ mkA041 base = case base of { base_1+"sur" => lin A { s = table { + Strong => table { Masc => table { Sg => table { Nom => base_1+"sur" ; @@ -8759,7 +8880,9 @@ mkA041 base = Gen => base_1+"sa" } } - } + } ; + Weak => weakAdjForms base + } }; _ => error "Can't apply paradigm mkA041" } ; @@ -8902,8 +9025,8 @@ mkV005 base = base_1+"a"+base_2@(?+?) => lin V { Converb = base_1+"a"+base_2 ; imperative = table { - Sg => nonExist ; - Pl => nonExist + Sg => base_1+base_2 ; + Pl => base_1+"i"+base_2 } ; Indicative = table { Pres => table { @@ -10882,8 +11005,8 @@ mkV065 base = base_1+"u"+base_2@?+"na" => lin V { Converb = base_1+"u"+base_2+"nað" ; imperative = table { - Sg => nonExist ; - Pl => nonExist + Sg => base_1+"u"+base_2+"n" ; + Pl => base_1+"u"+base_2+"nið" } ; Indicative = table { Pres => table { diff --git a/src/faroese/NamesFao.gf b/src/faroese/NamesFao.gf index b5c581de..89e52e09 100644 --- a/src/faroese/NamesFao.gf +++ b/src/faroese/NamesFao.gf @@ -10,5 +10,5 @@ lin UseLN ln = mkNP ln.s Neuter Sg P3 ; PlainLN ln = mkNP ln.s Neuter Sg P3 ; InLN ln = {s = "í" ++ ln.s} ; - AdjLN ap ln = {s = ap.s ! Neuter ! Sg ! Nom ++ ln.s} ; + AdjLN ap ln = {s = ap.s ! Strong ! Neuter ! Sg ! Nom ++ ln.s} ; } diff --git a/src/faroese/NounFao.gf b/src/faroese/NounFao.gf index 258f8069..32ea602b 100644 --- a/src/faroese/NounFao.gf +++ b/src/faroese/NounFao.gf @@ -1,7 +1,7 @@ concrete NounFao of Noun = CatFao ** open ResFao, Prelude in { lin - UseN n = n ; - UseN2 n = n ; + UseN n = {s = n.s ; p = n.s ! Indef ; g = n.g} ; + UseN2 n = {s = n.s ; p = n.s ! Indef ; g = n.g} ; Use2N3 n = n ** {c2 = n.c2} ; Use3N3 n = n ** {c2 = n.c3} ; UsePN pn = mkNP pn.s Masc Sg P3 ; @@ -27,7 +27,10 @@ lin s = \\c => np.s ! c ++ "," ++ adv.s } ; DetCN det cn = { - s = \\c => det.s ! cn.g ! c ++ cn.s ! det.sp ! det.n ! c ; + s = \\c => det.s ! cn.g ! c ++ case det.d of { + Weak => cn.p ! det.n ! c ; + Strong => cn.s ! det.sp ! det.n ! c + } ; g = cn.g ; n = det.n ; p = P3 @@ -35,6 +38,7 @@ lin DefArt = { s = \\_,_,_,_ => [] ; sp = Def ; + d = Strong } ; IndefArt = { s = \\b => @@ -62,18 +66,24 @@ lin } } ; sp = Indef ; + d = Strong } ; DetQuant quant num = { s = \\g,c => quant.s ! num.hasCard ! g ! num.n ! c ++ num.s ! g ! c ; n = num.n ; - sp = quant.sp + sp = quant.sp ; + d = quant.d } ; DetQuantOrd quant num ord = { s = \\g,c => quant.s ! num.hasCard ! g ! num.n ! c ++ - num.s ! g ! c ++ ord.s ! g ! num.n ! c ; + num.s ! g ! c ++ case quant.sp of { + Indef => ord.s ! Strong ! g ! num.n ! c ; + Def => ord.s ! Weak ! g ! num.n ! c + } ; n = num.n ; - sp = quant.sp + sp = quant.sp ; + d = quant.d } ; NumSg = { s = \\_,_ => [] ; @@ -90,11 +100,11 @@ lin NumDecimal dec = {s = \\_,_ => dec.s ; n = Pl} ; NumNumeral numeral = {s=numeral.s ! NCard; n=numeral.n} ; AdNum adn card = {s = \\g,c => adn.s ++ card.s ! g ! c ; n = card.n} ; - OrdDigits digits = {s = \\_,_,_ => digits.s ++ BIND ++ "."} ; - OrdNumeral numeral = {s = \\g,n,c => numeral.s ! NOrd n ! g ! c} ; + OrdDigits digits = {s = \\_,_,_,_ => digits.s ++ BIND ++ "."} ; + OrdNumeral numeral = {s = \\_,g,n,c => numeral.s ! NOrd n ! g ! c} ; OrdSuperl a = {s = a.s} ; OrdNumeralSuperl numeral a = { - s = \\g,n,c => numeral.s ! NOrd n ! g ! c ++ a.s ! g ! n ! c + s = \\af,g,n,c => numeral.s ! NOrd n ! g ! c ++ a.s ! af ! g ! n ! c } ; MassNP cn = { s = \\c => cn.s ! Indef ! Sg ! c ; @@ -103,43 +113,59 @@ lin p = P3 } ; PossPron pron = { - s = \\_,_,_,_ => pron.s ! Gen ; - sp = Def + s = \\_,g,n,c => pron.poss ! g ! n ! c ; + -- A preposed possessive replaces, rather than licenses, the suffixed + -- definite article: mín vinur, not *mín vinurin. + sp = Indef ; + d = Weak } ; ComplN2 n2 np = { s = \\sp,n,c => n2.s ! sp ! n ! c ++ n2.c2.s ++ np.s ! n2.c2.c ; + p = \\n,c => n2.s ! Indef ! n ! c ++ n2.c2.s ++ np.s ! n2.c2.c ; g = n2.g } ; ComplN3 n3 np = n3 ** { s = \\sp,n,c => n3.s ! sp ! n ! c ++ n3.c2.s ++ np.s ! n3.c2.c ; + p = \\n,c => n3.s ! Indef ! n ! c ++ n3.c2.s ++ np.s ! n3.c2.c ; c2 = n3.c3 } ; AdjCN ap cn = { - s = \\sp,n,c => ap.s ! cn.g ! n ! c ++ cn.s ! sp ! n ! c ; + s = \\sp,n,c => + case sp of { + Indef => ap.s ! Strong ! cn.g ! n ! c ++ cn.s ! sp ! n ! c ; + Def => weakAdj ap cn.g n c ++ cn.s ! sp ! n ! c + } ; + p = \\n,c => ap.s ! Weak ! cn.g ! n ! c ++ cn.p ! n ! c ; g = cn.g } ; RelCN cn rs = { s = \\sp,n,c => cn.s ! sp ! n ! c ++ rs.s ! cn.g ! persNum n P3 ; + p = \\n,c => cn.p ! n ! c ++ rs.s ! cn.g ! persNum n P3 ; g = cn.g } ; AdvCN cn adv = { s = \\sp,n,c => cn.s ! sp ! n ! c ++ adv.s ; + p = \\n,c => cn.p ! n ! c ++ adv.s ; g = cn.g } ; SentCN cn sc = { s = \\sp,n,c => cn.s ! sp ! n ! c ++ sc.s ; + p = \\n,c => cn.p ! n ! c ++ sc.s ; g = cn.g } ; ApposCN cn np = { s = \\sp,n,c => cn.s ! sp ! n ! c ++ np.s ! Nom ; + p = \\n,c => cn.p ! n ! c ++ np.s ! Nom ; g = cn.g } ; PossNP cn np = { s = \\sp,n,c => cn.s ! sp ! n ! c ++ np.s ! Gen ; + p = \\n,c => cn.p ! n ! c ++ np.s ! Gen ; g = cn.g } ; PartNP cn np = { s = \\sp,n,c => cn.s ! sp ! n ! c ++ "av" ++ np.s ! Dat ; + p = \\n,c => cn.p ! n ! c ++ "av" ++ np.s ! Dat ; g = cn.g } ; CountNP det np = { @@ -149,7 +175,7 @@ lin p = P3 } ; AdjDAP dap ap = dap ** { - s = \\g,c => dap.s ! g ! c ++ ap.s ! g ! dap.n ! c + s = \\g,c => dap.s ! g ! c ++ ap.s ! dap.d ! g ! dap.n ! c } ; DetDAP det = det ; QuantityNP dec mu = { diff --git a/src/faroese/ParadigmsFao.gf b/src/faroese/ParadigmsFao.gf index 76ea9692..78466fdb 100644 --- a/src/faroese/ParadigmsFao.gf +++ b/src/faroese/ParadigmsFao.gf @@ -327,11 +327,32 @@ oper Dat => dat ; Gen => gen } ; + poss = case of { + => possessiveForms "mín" "mítt" ; + => possessiveForms "tín" "títt" ; + _ => \\_,_,_ => gen + } ; g = g ; n = n ; p = p } ; + possessiveForms : Str -> Str -> Gender => Number => Case => Str = \common,neuter -> + table { + Masc => table { + Sg => table {Nom => common ; Acc => common ; Dat => common + "um" ; Gen => common + "s"} ; + Pl => table {Nom => common + "ir" ; Acc => common + "ar" ; Dat => common + "um" ; Gen => common + "a"} + } ; + Fem => table { + Sg => table {Nom => common ; Acc => common + "a" ; Dat => common + "i" ; Gen => common + "ar"} ; + Pl => table {Nom => common + "ar" ; Acc => common + "ar" ; Dat => common + "um" ; Gen => common + "a"} + } ; + Neuter => table { + Sg => table {Nom => neuter ; Acc => neuter ; Dat => common + "um" ; Gen => common + "s"} ; + Pl => table {Nom => common + "i" ; Acc => common + "i" ; Dat => common + "um" ; Gen => common + "a"} + } + } ; + regA : Str -> A -- s;Masc;Sg;Nom = \form -> case form of { _ + "dur" => mkA001 form; @@ -513,7 +534,7 @@ oper } ; invarA : Str -> A = \s -> lin A { - s = \\_,_,_ => s + s = \\_,_,_,_ => s } ; mkA2 = overload { @@ -580,16 +601,19 @@ oper mkInterj : Str -> Interj = \s -> lin Interj {s=s} ; mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ; - mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ; + mkPrep = overload { + mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ; + mkPrep : Str -> Case -> Prep = \s,c -> lin Prep {s=s; c=c} + } ; mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ; mkIP : Str -> IP = \s -> lin IP {s=s; n=Sg} ; mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ; mkIDet : Str -> IDet = \s -> lin IDet {s=s; n=Sg} ; mkSubj : Str -> Subj = \s -> lin Subj {s=s} ; - mkQuant : Str -> Quant = \s -> lin Quant {s=\\_,_,_,_ => s; sp=Indef} ; + mkQuant : Str -> Quant = \s -> lin Quant {s=\\_,_,_,_ => s; sp=Indef; d=Strong} ; mkPredet : Str -> Predet = \s -> lin Predet {s=s} ; - mkDet : Str -> Det = \s -> lin Det {s=\\_,_ => s; n=Sg; sp=Indef} ; + mkDet : Str -> Det = \s -> lin Det {s=\\_,_ => s; n=Sg; sp=Indef; d=Strong} ; mkCard : Str -> Card = \s -> lin Card {s=\\_,_ => s; n=Pl} ; mkACard : Str -> ACard = \s -> lin ACard {s=s} ; mkConj : Str -> Conj = \s -> lin Conj {s=s} ; diff --git a/src/faroese/PhraseFao.gf b/src/faroese/PhraseFao.gf index 8cb09294..19551d29 100644 --- a/src/faroese/PhraseFao.gf +++ b/src/faroese/PhraseFao.gf @@ -13,7 +13,7 @@ lin UttVP vp = {s = vp.Nonfinite} ; UttCN cn = {s = cn.s ! Indef ! Sg ! Nom} ; UttCard card = {s = card.s ! Neuter ! Nom} ; - UttAP ap = {s = ap.s ! Masc ! Sg ! Nom} ; + UttAP ap = {s = ap.s ! Strong ! Masc ! Sg ! Nom} ; UttAdv adv = adv ; UttInterj i = i ; diff --git a/src/faroese/QuestionFao.gf b/src/faroese/QuestionFao.gf index af8b2a71..178cbf94 100644 --- a/src/faroese/QuestionFao.gf +++ b/src/faroese/QuestionFao.gf @@ -1,20 +1,36 @@ concrete QuestionFao of Question = CatFao ** open ResFao in { -lincat QVP = {s : Tense => Polarity => Str} ; +lincat QVP = { + s,anterior : Tense => Polarity => Str ; + future,conditional : Polarity => Str +} ; lin - QuestCl cl = {s = cl.Indicative} ; + QuestCl cl = { + s = cl.Interrogative ; anterior = cl.AnteriorInterrogative ; + future = cl.FutureInterrogative ; conditional = cl.ConditionalInterrogative + } ; QuestVP ip vp = { - s = \\t,pol => ip.s ++ vp.Indicative ! t ! pol ! Masc ! persNum ip.n P3 + s = \\t,pol => ip.s ++ vp.Indicative ! t ! pol ! Masc ! persNum ip.n P3 ; + anterior = \\t,pol => ip.s ++ perfectAux ! t ! persNum ip.n P3 ++ negStr pol ++ vp.Converb ; + future = \\pol => ip.s ++ futureAux ! persNum ip.n P3 ++ negStr pol ++ vp.Nonfinite ; + conditional = \\pol => ip.s ++ conditionalAux ! persNum ip.n P3 ++ negStr pol ++ vp.Nonfinite } ; QuestSlash ip cls = { - s = \\t,pol => ip.s ++ cls.s ! t ! pol + s = \\t,pol => ip.s ++ cls.s ! t ! pol ; anterior = \\t,pol => ip.s ++ cls.s ! t ! pol ; + future = \\pol => ip.s ++ cls.s ! Pres ! pol ; conditional = \\pol => ip.s ++ cls.s ! Past ! pol } ; QuestIAdv iadv cl = { - s = \\t,pol => iadv.s ++ cl.Indicative ! t ! pol + s = \\t,pol => iadv.s ++ cl.Interrogative ! t ! pol ; + anterior = \\t,pol => iadv.s ++ cl.AnteriorInterrogative ! t ! pol ; + future = \\pol => iadv.s ++ cl.FutureInterrogative ! pol ; + conditional = \\pol => iadv.s ++ cl.ConditionalInterrogative ! pol } ; QuestIComp icomp np = { - s = \\t,pol => icomp.s ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom + s = \\t,pol => icomp.s ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom ; + anterior = \\t,pol => icomp.s ++ perfectAux ! t ! persNum np.n np.p ++ negStr pol ++ "verið" ++ np.s ! Nom ; + future = \\pol => icomp.s ++ futureAux ! persNum np.n np.p ++ negStr pol ++ "vera" ++ np.s ! Nom ; + conditional = \\pol => icomp.s ++ conditionalAux ! persNum np.n np.p ++ negStr pol ++ "vera" ++ np.s ! Nom } ; IdetCN idet cn = { @@ -36,15 +52,25 @@ lin CompIP ip = {s = ip.s} ; ComplSlashIP vps ip = { - s = \\t,pol => vps.Indicative ! t ! PSg P3 ++ vps.particle ++ negStr pol ++ vps.c2.s ++ ip.s ++ vps.sc + s = \\t,pol => vps.Indicative ! t ! PSg P3 ++ vps.particle ++ negStr pol ++ vps.c2.s ++ ip.s ++ vps.sc ; + anterior = \\t,pol => perfectAux ! t ! PSg P3 ++ negStr pol ++ vps.Converb ++ vps.c2.s ++ ip.s ++ vps.sc ; + future = \\pol => futureAux ! PSg P3 ++ negStr pol ++ vps.Nonfinite ++ vps.c2.s ++ ip.s ++ vps.sc ; + conditional = \\pol => conditionalAux ! PSg P3 ++ negStr pol ++ vps.Nonfinite ++ vps.c2.s ++ ip.s ++ vps.sc } ; AdvQVP vp iadv = { - s = \\t,pol => vp.Indicative ! t ! pol ! Masc ! PSg P3 ++ iadv.s + s = \\t,pol => vp.Indicative ! t ! pol ! Masc ! PSg P3 ++ iadv.s ; + anterior = \\t,pol => perfectAux ! t ! PSg P3 ++ negStr pol ++ vp.Converb ++ iadv.s ; + future = \\pol => futureAux ! PSg P3 ++ negStr pol ++ vp.Nonfinite ++ iadv.s ; + conditional = \\pol => conditionalAux ! PSg P3 ++ negStr pol ++ vp.Nonfinite ++ iadv.s } ; AddAdvQVP qvp iadv = { - s = \\t,pol => qvp.s ! t ! pol ++ iadv.s + s = \\t,pol => qvp.s ! t ! pol ++ iadv.s ; + anterior = \\t,pol => qvp.anterior ! t ! pol ++ iadv.s ; + future = \\pol => qvp.future ! pol ++ iadv.s ; conditional = \\pol => qvp.conditional ! pol ++ iadv.s } ; QuestQVP ip qvp = { - s = \\t,pol => ip.s ++ qvp.s ! t ! pol + s = \\t,pol => ip.s ++ qvp.s ! t ! pol ; + anterior = \\t,pol => ip.s ++ qvp.anterior ! t ! pol ; + future = \\pol => ip.s ++ qvp.future ! pol ; conditional = \\pol => ip.s ++ qvp.conditional ! pol } ; } diff --git a/src/faroese/ResFao.gf b/src/faroese/ResFao.gf index 72b848be..4d87d20b 100644 --- a/src/faroese/ResFao.gf +++ b/src/faroese/ResFao.gf @@ -43,10 +43,52 @@ oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun = } ; -oper Adj = {s: Gender => Number => Case => Str} ; -- 346 +param Declension = Strong | Weak ; +oper Adj = { + s : Declension => Gender => Number => Case => Str ; +} ; -- 346 + +-- The weak adjective is used attributively in definite noun phrases. The +-- generated morphology contains the strong paradigm; the three weak forms +-- can be recovered from it (e.g. langa -> langi, longum -> longu). +oper weakAdj : Adj -> Gender -> Number -> Case -> Str = + \a,g,n,c -> a.s ! Weak ! g ! n ! c ; + +oper weakAdjForms : Str -> Gender => Number => Case => Str = \lemma -> + let stem = case lemma of { + x + "ur" => x ; + x + "nin" => x + "n" ; + x + "in" => x + "n" ; + x + "il" => x + "il" ; + x => x + } in table { + Masc => table { + Sg => table {Nom => stem + "i" ; _ => stem + "a"} ; + Pl => \\_ => stem + "u" + } ; + _ => table { + Sg => \\_ => stem + "a" ; + Pl => \\_ => stem + "u" + } + } ; + +oper reflPoss : Gender -> Number -> Case -> Str = \g,n,c -> + case of { + => "sín" ; => "sín" ; + => "sínum" ; => "síns" ; + => "sín" ; => "sína" ; + => "síni" ; => "sínar" ; + => "sítt" ; => "sítt" ; + => "sínum" ; => "síns" ; + => "sínir" ; => "sínar" ; + => "sínar" ; => "sínar" ; + => "síni" ; => "síni" ; + <_,Pl,Dat> => "sínum" ; <_,Pl,Gen> => "sína" + } ; oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj = \f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24 -> { s = table { + Strong => table { Masc => table { Sg => table { Nom => f1 ; @@ -89,7 +131,9 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj = Gen => f24 } } - } + } ; + Weak => weakAdjForms f1 + } } ; param Tense = Pres | Past ; @@ -140,17 +184,31 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb = oper Compl = {s : Str; c : Case} ; oper noPrep : Compl = {s=""; c=Acc} ; -oper CommonNoun = Noun ; +oper CommonNoun = { + s : Species => Number => Case => Str ; + p : Number => Case => Str ; + g : Gender +} ; oper AdjPhrase = Adj ; oper VerbPhrase = { Converb : Str ; + Imperative : Number => Str ; Indicative : Tense => Polarity => Gender => PersNum => Str ; + Finite : Tense => PersNum => Str ; + Remainder : Polarity => Gender => PersNum => Str ; Nonfinite : Str ; Participle : Tense => Str ; } ; oper Clause = { Converb : Str ; Indicative : Tense => Polarity => Str ; + Interrogative : Tense => Polarity => Str ; + Future : Polarity => Str ; + FutureInterrogative : Polarity => Str ; + Conditional : Polarity => Str ; + ConditionalInterrogative : Polarity => Str ; + Anterior : Tense => Polarity => Str ; + AnteriorInterrogative : Tense => Polarity => Str ; Nonfinite : Str ; Participle : Tense => Str } ; @@ -172,6 +230,17 @@ oper } } ; + futureAux : PersNum => Str = table { + PSg P1 => "skal" ; PSg P2 => "skalt" ; PSg P3 => "skal" ; PPl => "skulu" + } ; + conditionalAux : PersNum => Str = table { + PSg _ => "skuldi" ; PPl => "skuldu" + } ; + perfectAux : Tense => PersNum => Str = table { + Pres => table {PSg P1 => "havi" ; PSg P2 => "hevur" ; PSg P3 => "hevur" ; PPl => "hava"} ; + Past => table {PSg _ => "hevði" ; PPl => "høvdu"} + } ; + oper negStr : Polarity -> Str = \pol -> case pol of { Pos => [] ; @@ -189,13 +258,17 @@ oper mkCN : Str -> Gender -> CommonNoun = \str,g -> { s = \\_,_,_ => str ; + p = \\_,_ => str ; g = g } ; mkVP : Str -> VerbPhrase = \str -> { Converb = str ; + Imperative = \\_ => str ; Indicative = \\_,pol,_,_ => str ++ negStr pol ; + Finite = \\_,_ => str ; + Remainder = \\pol,_,_ => negStr pol ; Nonfinite = str ; Participle = \\_ => str } ; diff --git a/src/faroese/SentenceFao.gf b/src/faroese/SentenceFao.gf index 67159f8c..1a044776 100644 --- a/src/faroese/SentenceFao.gf +++ b/src/faroese/SentenceFao.gf @@ -3,10 +3,32 @@ concrete SentenceFao of Sentence = CatFao ** open Prelude, ResFao, (P = ParamX) Indicative = \\t,pol => let p = persNum np.n np.p in np.s ! Nom ++ vp.Indicative ! t ! pol ! np.g ! p; + Interrogative = \\t,pol => let p = persNum np.n np.p in + vp.Finite ! t ! p ++ np.s ! Nom ++ vp.Remainder ! pol ! np.g ! p ; + Future = \\pol => let p = persNum np.n np.p in + np.s ! Nom ++ futureAux ! p ++ negStr pol ++ vp.Nonfinite ; + FutureInterrogative = \\pol => let p = persNum np.n np.p in + futureAux ! p ++ np.s ! Nom ++ negStr pol ++ vp.Nonfinite ; + Conditional = \\pol => let p = persNum np.n np.p in + np.s ! Nom ++ conditionalAux ! p ++ negStr pol ++ vp.Nonfinite ; + ConditionalInterrogative = \\pol => let p = persNum np.n np.p in + conditionalAux ! p ++ np.s ! Nom ++ negStr pol ++ vp.Nonfinite ; + Anterior = \\t,pol => let p = persNum np.n np.p in + np.s ! Nom ++ perfectAux ! t ! p ++ negStr pol ++ vp.Converb ; + AnteriorInterrogative = \\t,pol => let p = persNum np.n np.p in + perfectAux ! t ! p ++ np.s ! Nom ++ negStr pol ++ vp.Converb ; Nonfinite = np.s ! Nom ++ vp.Nonfinite; Participle = \\t => np.s ! Nom ++ vp.Participle ! t} ; PredSCVP sc vp = {Converb = sc.s ++ vp.Converb; Indicative = \\t,pol => sc.s ++ vp.Indicative ! t ! pol ! Neuter ! PSg P3; + Interrogative = \\t,pol => vp.Finite ! t ! PSg P3 ++ sc.s ++ + vp.Remainder ! pol ! Neuter ! PSg P3; + Future = \\pol => sc.s ++ futureAux ! PSg P3 ++ negStr pol ++ vp.Nonfinite ; + FutureInterrogative = \\pol => futureAux ! PSg P3 ++ sc.s ++ negStr pol ++ vp.Nonfinite ; + Conditional = \\pol => sc.s ++ conditionalAux ! PSg P3 ++ negStr pol ++ vp.Nonfinite ; + ConditionalInterrogative = \\pol => conditionalAux ! PSg P3 ++ sc.s ++ negStr pol ++ vp.Nonfinite ; + Anterior = \\t,pol => sc.s ++ perfectAux ! t ! PSg P3 ++ negStr pol ++ vp.Converb ; + AnteriorInterrogative = \\t,pol => perfectAux ! t ! PSg P3 ++ sc.s ++ negStr pol ++ vp.Converb ; Nonfinite = sc.s ++ vp.Nonfinite; Participle = \\t => sc.s ++ vp.Participle ! t} ; SlashVP np vps = { @@ -29,7 +51,7 @@ concrete SentenceFao of Sentence = CatFao ** open Prelude, ResFao, (P = ParamX) c2 = sslash.c2 } ; ImpVP vp = { - s = \\pol,n => negStr pol ++ vp.Nonfinite + s = \\pol,n => negStr pol ++ vp.Imperative ! n } ; AdvImp adv imp = { s = \\pol,n => adv.s ++ imp.s ! pol ! n @@ -43,7 +65,16 @@ concrete SentenceFao of Sentence = CatFao ** open Prelude, ResFao, (P = ParamX) P.Cond => Past } ; in { - s = temp.s ++ pol.s ++ cl.Indicative ! tense ! pol.p + s = temp.s ++ pol.s ++ case of { + => cl.Indicative ! Pres ! pol.p ; + => cl.Indicative ! Past ! pol.p ; + => cl.Future ! pol.p ; + => cl.Conditional ! pol.p ; + => cl.Anterior ! Pres ! pol.p ; + => cl.Anterior ! Past ! pol.p ; + => cl.Future ! pol.p ; + => cl.Anterior ! Past ! pol.p + } } ; UseQCl temp pol qcl = let @@ -54,7 +85,16 @@ concrete SentenceFao of Sentence = CatFao ** open Prelude, ResFao, (P = ParamX) P.Cond => Past } ; in { - s = temp.s ++ pol.s ++ qcl.s ! tense ! pol.p + s = temp.s ++ pol.s ++ case of { + => qcl.s ! Pres ! pol.p ; + => qcl.s ! Past ! pol.p ; + => qcl.future ! pol.p ; + => qcl.conditional ! pol.p ; + => qcl.anterior ! Pres ! pol.p ; + => qcl.anterior ! Past ! pol.p ; + => qcl.future ! pol.p ; + => qcl.anterior ! Past ! pol.p + } } ; UseRCl temp pol rcl = let diff --git a/src/faroese/VerbFao.gf b/src/faroese/VerbFao.gf index 7f29a794..192fa614 100644 --- a/src/faroese/VerbFao.gf +++ b/src/faroese/VerbFao.gf @@ -1,64 +1,99 @@ concrete VerbFao of Verb = CatFao ** open Prelude,ResFao in { lin UseV v = {Converb = v.Converb ++ v.particle; + Imperative = \\n => v.imperative ! n ++ v.particle; Indicative = \\t,pol,g,p => v.Indicative ! t ! p ++ v.particle ++ negStr pol ; + Finite = v.Indicative ; + Remainder = \\pol,_,_ => negStr pol ++ v.particle ; Nonfinite = v.Nonfinite ++ v.particle; Participle = \\t => v.Participle ! t ++ v.particle} ; lin ComplVV vv vp = {Converb = vv.Converb ++ vv.particle ++ vp.Nonfinite; + Imperative = \\n => vv.imperative ! n ++ vv.particle ++ vp.Nonfinite; Indicative = \\t,pol,g,p => vv.Indicative ! t ! p ++ vv.particle ++ negStr pol ++ vp.Nonfinite; + Finite = vv.Indicative ; + Remainder = \\pol,_,_ => negStr pol ++ vv.particle ++ vp.Nonfinite; Nonfinite = vv.Nonfinite ++ vv.particle ++ vp.Nonfinite; Participle = \\t => vv.Participle ! t ++ vv.particle ++ vp.Nonfinite} ; lin ComplVS vs s = {Converb = vs.Converb ++ vs.particle ++ "at" ++ s.s; + Imperative = \\n => vs.imperative ! n ++ vs.particle ++ "at" ++ s.s; Indicative = \\t,pol,g,p => vs.Indicative ! t ! p ++ vs.particle ++ negStr pol ++ "at" ++ s.s; + Finite = vs.Indicative ; + Remainder = \\pol,_,_ => negStr pol ++ vs.particle ++ "at" ++ s.s; Nonfinite = vs.Nonfinite ++ vs.particle ++ "at" ++ s.s; Participle = \\t => vs.Participle ! t ++ vs.particle ++ "at" ++ s.s} ; lin ComplVQ vq qs = {Converb = vq.Converb ++ vq.particle ++ qs.s; + Imperative = \\n => vq.imperative ! n ++ vq.particle ++ qs.s; Indicative = \\t,pol,g,p => vq.Indicative ! t ! p ++ vq.particle ++ negStr pol ++ qs.s; + Finite = vq.Indicative ; + Remainder = \\pol,_,_ => negStr pol ++ vq.particle ++ qs.s; Nonfinite = vq.Nonfinite ++ vq.particle ++ qs.s; Participle = \\t => vq.Participle ! t ++ vq.particle ++ qs.s} ; - lin ComplVA va ap = {Converb = va.Converb ++ va.particle ++ ap.s ! Neuter ! Sg ! Nom; + lin ComplVA va ap = {Converb = va.Converb ++ va.particle ++ ap.s ! Strong ! Neuter ! Sg ! Nom; + Imperative = \\n => va.imperative ! n ++ va.particle ++ ap.s ! Strong ! Neuter ! Sg ! Nom; Indicative = \\t,pol,g,p => - va.Indicative ! t ! p ++ va.particle ++ negStr pol ++ ap.s ! g ! persNumNumber p ! Nom; - Nonfinite = va.Nonfinite ++ va.particle ++ ap.s ! Neuter ! Sg ! Nom; - Participle = \\t => va.Participle ! t ++ va.particle ++ ap.s ! Neuter ! Sg ! Nom} ; + va.Indicative ! t ! p ++ va.particle ++ negStr pol ++ ap.s ! Strong ! g ! persNumNumber p ! Nom; + Finite = va.Indicative ; + Remainder = \\pol,g,p => negStr pol ++ va.particle ++ ap.s ! Strong ! g ! persNumNumber p ! Nom; + Nonfinite = va.Nonfinite ++ va.particle ++ ap.s ! Strong ! Neuter ! Sg ! Nom; + Participle = \\t => va.Participle ! t ++ va.particle ++ ap.s ! Strong ! Neuter ! Sg ! Nom} ; lin AdvVP vp adv = {Converb = vp.Converb ++ adv.s; + Imperative = \\n => vp.Imperative ! n ++ adv.s; Indicative = \\t,pol,g,p => vp.Indicative ! t ! pol ! g ! p ++ adv.s; + Finite = vp.Finite ; + Remainder = \\pol,g,p => vp.Remainder ! pol ! g ! p ++ adv.s; Nonfinite = vp.Nonfinite ++ adv.s; Participle = \\t => vp.Participle ! t ++ adv.s} ; lin ExtAdvVP vp adv = {Converb = vp.Converb ++ "," ++ adv.s; + Imperative = \\n => vp.Imperative ! n ++ "," ++ adv.s; Indicative = \\t,pol,g,p => vp.Indicative ! t ! pol ! g ! p ++ "," ++ adv.s; + Finite = vp.Finite ; + Remainder = \\pol,g,p => vp.Remainder ! pol ! g ! p ++ "," ++ adv.s; Nonfinite = vp.Nonfinite ++ "," ++ adv.s; Participle = \\t => vp.Participle ! t ++ "," ++ adv.s} ; lin AdVVP adv vp = {Converb = adv.s ++ vp.Converb; + Imperative = \\n => adv.s ++ vp.Imperative ! n; Indicative = \\t,pol,g,p => adv.s ++ vp.Indicative ! t ! pol ! g ! p; + Finite = vp.Finite ; + Remainder = \\pol,g,p => negStr pol ++ adv.s ++ vp.Remainder ! Pos ! g ! p; Nonfinite = adv.s ++ vp.Nonfinite; Participle = \\t => adv.s ++ vp.Participle ! t} ; lin ComplSlash vps np = {Converb = vps.Converb ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc; + Imperative = \\n => vps.imperative ! n ++ vps.particle ++ + vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc; Indicative = \\t,pol,g,p => vps.Indicative ! t ! p ++ vps.particle ++ negStr pol ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ; + Finite = vps.Indicative ; + Remainder = \\pol,_,_ => negStr pol ++ vps.particle ++ + vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ; Nonfinite = vps.Nonfinite ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc; Participle = \\t => vps.Participle ! t ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc} ; lin UseComp comp = { - Converb = copula ! Pres ! PPl ++ comp.s ! Masc ! Sg ; + Converb = "verið" ++ comp.s ! Masc ! Sg ; + Imperative = \\n => case n of {Sg => "ver" ; Pl => "verið"} ++ comp.s ! Masc ! n ; Indicative = \\t,pol,g,p => copula ! t ! p ++ negStr pol ++ comp.s ! g ! persNumNumber p ; + Finite = copula ; + Remainder = \\pol,g,p => negStr pol ++ comp.s ! g ! persNumNumber p ; Nonfinite = "vera" ++ comp.s ! Masc ! Sg ; Participle = \\t => "verið" ++ comp.s ! Masc ! Sg } ; - lin CompAP ap = {s = \\g,n => ap.s ! g ! n ! Nom} ; + lin CompAP ap = {s = \\g,n => ap.s ! Strong ! g ! n ! Nom} ; lin CompNP np = {s = \\_,_ => np.s ! Nom} ; lin CompAdv adv = {s = \\_,_ => adv.s} ; lin CompCN cn = {s = \\_,n => cn.s ! Indef ! n ! Nom} ; lin UseCopula = { Converb = "verið" ; + Imperative = table {Sg => "ver" ; Pl => "verið"} ; Indicative = \\t,pol,_,p => copula ! t ! p ++ negStr pol ; + Finite = copula ; + Remainder = \\pol,_,_ => negStr pol ; Nonfinite = "vera" ; Participle = \\_ => "verið" } ; @@ -79,7 +114,7 @@ concrete VerbFao of Verb = CatFao ** open Prelude,ResFao in { } ; lin SlashV2A v ap = v ** { c2 = v.c2 ; - sc = ap.s ! Neuter ! Sg ! Nom + sc = ap.s ! Strong ! Neuter ! Sg ! Nom } ; lin SlashV2S v s = v ** { c2 = v.c2 ; @@ -107,14 +142,20 @@ concrete VerbFao of Verb = CatFao ** open Prelude,ResFao in { lin ReflVP vps = let np = mkNP "seg" Masc Sg P3 in { Converb = vps.Converb ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ; + Imperative = \\n => vps.imperative ! n ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ; Indicative = \\t,pol,g,p => vps.Indicative ! t ! p ++ vps.particle ++ negStr pol ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ; + Finite = vps.Indicative ; + Remainder = \\pol,_,_ => negStr pol ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ; Nonfinite = vps.Nonfinite ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ; Participle = \\t => vps.Participle ! t ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc } ; lin PassV2 v = { Converb = "verið" ++ v.Participle ! Past ; + Imperative = table {Sg => "ver" ++ v.Participle ! Past ; Pl => "verið" ++ v.Participle ! Past} ; Indicative = \\t,pol,_,p => copula ! t ! p ++ negStr pol ++ v.Participle ! Past ; + Finite = copula ; + Remainder = \\pol,_,_ => negStr pol ++ v.Participle ! Past ; Nonfinite = "vera" ++ v.Participle ! Past ; Participle = \\_ => "verið" ++ v.Participle ! Past } ; diff --git a/src/maltese/NounMlt.gf b/src/maltese/NounMlt.gf index add58c1e..3e82dc8c 100644 --- a/src/maltese/NounMlt.gf +++ b/src/maltese/NounMlt.gf @@ -225,8 +225,8 @@ concrete NounMlt of Noun = CatMlt ** open ResMlt, Prelude, Maybe in { -- warmest OrdSuperl a = { s = \\c => case a.hasComp of { - True => a.s ! ASuperl ; - False => "l-iktar" ++ a.s ! APosit (GSg Masc) --- should agree + True => a.s ! ACompar ; + False => "iktar" ++ a.s ! APosit (GSg Masc) --- should agree } } ;