diff --git a/languages.csv b/languages.csv index 583d57664..b2330d253 100644 --- a/languages.csv +++ b/languages.csv @@ -22,7 +22,7 @@ Ice,Icelandic,icelandic,,,,,,n,,y Ina,Interlingua,interlingua,,,y,,n,n,,n Ita,Italian,italian,Romance,,y,,,,y,y Jpn,Japanese,japanese,,,,,,,,y -Lat,Latin,latin,,,y,,n,n,,n +Lat,Latin,latin,,,,,y,n,n,y Lav,Latvian,latvian,,,,,,,y,y Mlt,Maltese,maltese,,,,,,,,y Mon,Mongolian,mongolian,,,,,,n,,y diff --git a/src/api/TryLat.gf b/src/api/TryLat.gf index 14093181e..1f9236e28 100644 --- a/src/api/TryLat.gf +++ b/src/api/TryLat.gf @@ -1,3 +1,3 @@ --# -path=.:../latin:../common:../abstract:../prelude -resource TryLat = SyntaxLat, LexiconLat, ParadigmsLat - [mkAdv,mkAdN,mkOrd] ; +resource TryLat = SyntaxLat, LexiconLat, ParadigmsLat - [mkAdv,mkAdN,mkOrd,mkNum] ; diff --git a/src/latin/AdjectiveLat.gf b/src/latin/AdjectiveLat.gf index 5098084a9..bb499786c 100644 --- a/src/latin/AdjectiveLat.gf +++ b/src/latin/AdjectiveLat.gf @@ -2,45 +2,52 @@ concrete AdjectiveLat of Adjective = CatLat ** open ResLat, Prelude in { lin +-- PositA : A -> AP ; -- warm + PositA a = + { s = \\ag => a.s ! Posit ! ag }; - PositA a = -- A -> AP - { - s = table { Ag g n c => a.s ! Posit ! Ag g n c } ; - }; - -{- +-- ComparA : A -> NP -> AP ; -- warmer than I ComparA a np = { - s = \\_ => a.s ! AAdj Compar ++ "than" ++ np.s ! Nom ; - isPre = False + s = \\ag => a.s ! Compar ! ag ++ "quam" ++ np.s ! Nom ; } ; --- $SuperlA$ belongs to determiner syntax in $Noun$. - +-- ComplA2 : A2 -> NP -> AP ; -- married to her ComplA2 a np = { - s = \\_ => a.s ! AAdj Posit ++ a.c2 ++ np.s ! Acc ; - isPre = False + s = \\ag => a.s ! Posit ! ag ++ a.c.s ++ np.s ! a.c.c ; } ; +-- ReflA2 : A2 -> AP -- married to myself ReflA2 a = { - s = \\ag => a.s ! AAdj Posit ++ a.c2 ++ reflPron ! ag ; - isPre = False + s = \\ag => a.s ! Posit ! ag ++ a.c.s ++ + table { Acc => "memet" ; _ => "egomet" } ! a.c.c; } ; - SentAP ap sc = { - s = \\a => ap.s ! a ++ sc.s ; - isPre = False - } ; - -} +-- UseA2 : A2 -> AP ; -- married + UseA2 = PositA ; + +-- UseComparA : A -> AP ; -- warmer + UseComparA a = + { s = \\ag => a.s ! Compar ! ag }; + +-- CAdvAP : CAdv -> AP -> NP -> AP ; -- as cool as John + CAdvAP cadv ap np = + { s = \\ag => cadv.s ++ ap.s ! ag ++ cadv.p ++ np.s ! Nom } ; + +-- The superlative use is covered in $Ord$. + +-- AdjOrd : Ord -> AP ; -- warmest + AdjOrd a = { s = table { Ag g n c => a.s ! g ! n ! c } } ; + +-- SentAP : AP -> SC -> AP ; -- good that she is here + SentAP ap sc = + { s = \\a => ap.s ! a ++ sc.s } ; + -- AdAP : AdA -> AP -> AP ; -- very warm - AdAP ada ap = { - s = \\agr => ada.s ++ ap.s ! agr ; - } ; - --- UseA2 : A2 -> AP - UseA2 a = -- A2 -> AP - { - s = table { Ag g n c => a.s ! Posit ! Ag g n c } ; - } ; + AdAP ada ap = + { s = \\agr => ada.s ++ ap.s ! agr } ; +-- AdvAP : AP -> Adv -> AP ; -- warm by nature + AdvAP ap adv = + { s = \\ag => ap.s ! ag ++ adv.s ! Posit} ; } diff --git a/src/latin/AdverbLat.gf b/src/latin/AdverbLat.gf index b7d504bdd..135d469d5 100644 --- a/src/latin/AdverbLat.gf +++ b/src/latin/AdverbLat.gf @@ -1,27 +1,38 @@ -concrete AdverbLat of Adverb = CatLat ** open ResLat, Prelude in +concrete AdverbLat of Adverb = CatLat ** open ResLat, Prelude, ParadigmsLat in { lin --- PositAdvAdj a = {s = a.s ! AAdv} ; --- ComparAdvAdj cadv a np = { --- s = cadv.s ++ a.s ! AAdv ++ "than" ++ np.s ! Nom --- } ; --- ComparAdvAdjS cadv a s = { --- s = cadv.s ++ a.s ! AAdv ++ "than" ++ s.s --- } ; + +-- PositAdvAdj : A -> Adv ; -- warmly + PositAdvAdj a = a.adv ; -- PrepNP : Prep -> NP -> Adv ; -- in the house - PrepNP prep np = {s = prep.s ++ np.s ! prep.c } ; + PrepNP prep np = + mkAdv (prep.s ++ np.adv ++ np.det.s ! np.g ! prep.c ++ np.preap.s ! (Ag np.g np.n prep.c) ++ + np.s ! prep.c ++ np.postap.s ! (Ag np.g np.n prep.c ) ++ np.det.sp ! np.g ! prep.c ) ; --- AdAdv = cc2 ; +-- ComparAdvAdj : CAdv -> A -> NP -> Adv ; -- more warmly than John + ComparAdvAdj cadv a np = + mkAdv (cadv.s ++ a.adv.s ! Compar ++ cadv.p ++ np.s ! Nom) ; + +-- ComparAdvAdjS : CAdv -> A -> S -> Adv ; -- more warmly than he runs + ComparAdvAdjS cadv a s = + mkAdv (cadv.s ++ a.adv.s ! Compar ++ cadv.p ++ combineSentence s ! SPreS ! PreV ! SOV ) ; + +-- AdAdv : AdA -> Adv -> Adv ; -- very quickly + AdAdv ada adv = mkAdv (ada.s ++ (adv.s ! Posit) ) ; + +-- PositAdAAdj : A -> AdA ; -- extremely + PositAdAAdj a = + { s = a.adv.s ! Posit } ; + -- Subordinate clauses can function as adverbs. -- SubjS : Subj -> S -> Adv ; -- when she sleeps - SubjS = cc2 ; + SubjS subj s = mkAdv (subj.s ++ combineSentence s ! SPreS ! PreV ! SOV ) ; ------b AdvSC s = s ; --- this rule give stack overflow in ordinary parsing --- --- AdnCAdv cadv = {s = cadv.s ++ "than"} ; +-- AdnCAdv : CAdv -> AdN ; -- less (than five) + AdnCAdv cadv = {s = cadv.s ++ cadv.p} ; -- } diff --git a/src/latin/CatLat.gf b/src/latin/CatLat.gf index 423f94d65..a40a502a1 100644 --- a/src/latin/CatLat.gf +++ b/src/latin/CatLat.gf @@ -1,4 +1,4 @@ -concrete CatLat of Cat = CommonX ** open ResLat, ParamX, Prelude in { +concrete CatLat of Cat = CommonX-[Adv] ** open ResLat, ParamX, Prelude in { flags optimize=all_subs ; @@ -6,7 +6,7 @@ concrete CatLat of Cat = CommonX ** open ResLat, ParamX, Prelude in { ---- Tensed/Untensed -- - S = {s : Str} ; + S = Sentence ; QS = {s : QForm => Str} ; -- RS = {s : Agr => Str ; c : Case} ; -- c for it clefts -- SSlash = {s : Str ; c2 : Str} ; @@ -15,11 +15,12 @@ concrete CatLat of Cat = CommonX ** open ResLat, ParamX, Prelude in { -- Cl = Clause ; ClSlash = Clause ; - Imp = {s : Polarity => ImpForm => Str} ; + Imp = {s : Polarity => VImpForm => Str} ; -- ---- Question --- - QCl = {s : ResLat.Tense => Anteriority => Polarity => QForm => Str } ; + -- + -- TO FIX + QCl = Clause ; -- {s : ResLat.Tense => Anteriority => Polarity => QForm => Str } ; IP = {s : Case => Str ; n : Number} ; IComp = {s : Str} ; IDet = Determiner ; --{s : Str ; n : Number} ; @@ -36,37 +37,35 @@ concrete CatLat of Cat = CommonX ** open ResLat, ParamX, Prelude in { ---- Verb -- VP = ResLat.VerbPhrase ; - VPSlash = VP ** {c2 : Preposition} ; + VPSlash = ResLat.ObjectVerbPhrase ; -- VP ** {c2 : Preposition} ; Comp = {s : Agr => Str} ; -- ---- Adjective -- -- AP = Adjective ** {isPre : Bool} ; ---- {s : Agr => Str ; isPre : Bool} ; - AP = - { - s : Agr => Str ; --- isPre : Bool ; -- should have no use in latin because adjectives can appear variably before and after nouns - } ; + AP = AdjectivePhrase ; + -- ---- Noun -- - CN = ResLat.ComplexNoun ; + CN = ResLat.CommonNoun ; NP = ResLat.NounPhrase ; Pron = ResLat.Pronoun ; Det = Determiner ; - Predet, Ord = {s : Str} ; + Predet = {s : Str} ; + Ord = Ordinal ; Num = {s : Gender => Case => Str ; n : Number} ; --- Card = {s : Str ; n : Number} ; + Card = {s : Gender => Case => Str ; n : Number} ; Quant = Quantifier ; -- ---- Numeral -- --- Numeral = {s : CardOrd => Str ; n : Number} ; + Numeral = ResLat.Numeral ; Digits = {s : Str ; unit : Unit} ; -- ---- Structural -- - Conj = {s1,s2 : Str ; n : Number} ; + Conj = ResLat.Conjunction; --{s1,s2 : Str ; n : Number} ; Subj = {s : Str} ; Prep = ResLat.Preposition ; -- @@ -79,10 +78,16 @@ concrete CatLat of Cat = CommonX ** open ResLat, ParamX, Prelude in { V2V = Verb ** {c2 : Str ; isAux : Bool} ; A = Adjective ; - + Adv = Adverb ; + N = Noun ; N2 = Noun ** { c : Prep } ; N3 = Noun ** { c : Prep ; c2 : Prep } ; PN = Noun ; A2 = Adjective ** { c : Prep} ; + + linref + NP = \np -> np.preap.s ! Ag np.g np.n Nom ++ np.s ! Nom ++ np.postap.s ! Ag np.g np.n Nom ; + VP = \vp -> vp.adv ++ vp.inf ! VInfActPres ++ vp.obj ++ vp.compl ! Ag Masc Sg Nom ; + S = \s -> combineSentence s ! SPreO ! PreO ! SOV ; } diff --git a/src/latin/ConjunctionLat.gf b/src/latin/ConjunctionLat.gf index 125767dcf..aacb0b428 100644 --- a/src/latin/ConjunctionLat.gf +++ b/src/latin/ConjunctionLat.gf @@ -1,26 +1,41 @@ concrete ConjunctionLat of Conjunction = - CatLat ** open ResLat, StructuralLat, Coordination, Prelude in { + CatLat ** open ResLat, StructuralLat, Coordination, Prelude, ParadigmsLat in { -- -- flags optimize=all_subs ; --- + -- + lin --- - ConjS = conjunctDistrSS ; --- - ConjAdv = conjunctDistrSS ; --- --- ConjNP conj ss = conjunctDistrTable Case conj ss ** { --- a = conjAgr (agrP3 conj.n) ss.a --- } ; --- - ConjAP conj ss = conjunctDistrTable Agr conj ss ; --- ---{---b --- --- ConjS = conjunctSS ; + -- ConjS : Conj -> ListS -> S ; -- he walks and she runs + -- TO FIX + -- ConjS conj ss = { s = \\_ => conjunctDistrX conj (ss.l ! conj.c) ; sadv = lin Adv { s = []} ; neg = ss.neg } ; + + -- ConjAdv : Conj -> ListAdv -> Adv ; -- here or there + ConjAdv conj ss = mkAdv (conjunctDistrSS conj (ss.l ! conj.c) ).s ; + + -- ConjNP : Conj -> ListNP -> NP ; -- she or we + ConjNP conj nps = + { + s = case conj.c of { + And => case nps.isBase of { + False => (conjunctDistrTable Case conj (nps.l ! And)).s ; + True => \\c => conj.s1 ++ (nps.l ! And).s1 ! c ++ conj.s2 ++ (nps.l ! And).s2 ! c + } ; + c => (conjunctDistrTable Case conj (nps.l ! And)).s + } ; + n = case conj.c of { And => Pl ; _ => nps.n } ; + g = nps.g ; + p = nps.p ; + adv = nps.adv ; + preap = nps.preap ; + postap = nps.postap ; + det = { s = \\_,_ => "" ; sp = \\_,_ => "" ; n = nps.n }; + } ; + + -- ConjAP : Conj -> ListAP -> AP ; + ConjAP conj ss = conjunctDistrTable Agr conj (ss.l ! conj.c) ; + + -- -- DConjS = conjunctDistrSS ; --- --- ConjAdv = conjunctSS ; -- DConjAdv = conjunctDistrSS ; -- -- ConjNP conj ss = conjunctTable Case conj ss ** { @@ -29,29 +44,87 @@ concrete ConjunctionLat of Conjunction = -- DConjNP conj ss = conjunctDistrTable Case conj ss ** { -- a = conjAgr (agrP3 conj.n) ss.a -- } ; --- --- ConjAP conj ss = conjunctTable Agr conj ss ; --- -- DConjAP conj ss = conjunctDistrTable Agr conj ss ** { -- isPre = ss.isPre -- } ; ---} -- ---- These fun's are generated from the list cat's. --- --- BaseS = twoSS ; --- ConsS = consrSS comma ; - BaseAdv = twoSS ; - ConsAdv = consrSS "et" ; --- BaseNP x y = twoTable Case x y ** {a = conjAgr x.a y.a} ; --- ConsNP xs x = consrTable Case comma xs x ** {a = conjAgr xs.a x.a} ; - BaseAP x y = lin A ( twoTable Agr x y ) ; - ConsAP xs x = lin A ( consrTable Agr and_Conj.s2 xs x ); + -- + + -- BaseS : S -> S -> ListS + BaseS x y = { + l = \\c => { s1 = x ; s2 = y } ; + } ; + + -- ConsS : S -> ListS -> ListS + -- TO FIX + -- ConsS x xs = { l = \\_ => consrSS bindComma (ss (x.s ! PreS)) (xs.l ! Comma) }; + -- ConsS s ss = { + -- l = \\c => + -- { s1 = ss.s1 ++ + -- table { + -- And => and_Conj + -- } ! c + -- ++ ss.s2 ; + -- s2 = s } + -- } ; + + -- BaseAdv : Adv -> Adv -> ListAdv + BaseAdv x y = { l = \\c => twoSS (ss (x.s ! Posit)) (ss (y.s ! Posit)) } ; + + -- ConsAdv : Adv -> ListAdv -> ListAdv + ConsAdv x xs = { l = \\_ => consrSS bindComma (ss (x.s ! Posit)) (xs.l ! Comma) } ; + + -- BaseNP : NP -> NP -> ListNP ; -- John, Mary + BaseNP x y = { + l = \\c => twoTable Case x y ; + g = Masc ; -- Just guessing (but maybe sexist bullshit) + n = matchNumber x.n y.n ; + p = P3 ; + adv = x.adv ++ y.adv ; + preap = lin AP { s = \\a => x.preap.s ! a ++ y.preap.s ! a } ; + postap = lin AP { s = \\a => x.postap.s ! a ++ y.postap.s ! a } ; + isBase = True ; + det = { s = \\g,c => x.det.s ! g ! c ++ y.det.s ! g ! c ; sp = \\g,c => x.det.sp ! g ! c ++ y.det.sp ! g ! c ; n = matchNumber x.get.n y.get.n } ; + + } ; + + -- ConsNP : NP -> ListNP -> ListNP ; -- John, Mary, Bill + ConsNP x xs = { + l = \\_ => consrTable Case bindComma x ( xs.l ! Comma ); + n = matchNumber x.n xs.n ; + g = xs.g ; + p = xs.p ; + adv = x.adv ++ xs.adv ; + preap = lin AP { s = \\a => x.preap.s ! a ++ xs.preap.s ! a } ; + postap = lin AP { s = \\a => x.postap.s ! a ++ xs.postap.s ! a } ; + isBase = False + -- TODO det + } ; + + -- BaseAP : AP -> AP -> ListAP + BaseAP x y = { l = \\c => twoTable Agr x y }; + + -- ConsAP : AP -> ListAP -> ListAP + ConsAP x xs = + { l = \\_ => consrTable Agr and_Conj.s2 x (xs.l ! Comma ) } ; -- lincat - [S] = {s1,s2 : Str} ; - [Adv] = {s1,s2 : Str} ; --- [NP] = {s1,s2 : Case => Str ; a : Agr} ; - [AP] = {s1,s2 : Agr => Str } ; + [S] = { l : Coordinator => {s1,s2 : S} } ; -- TO FIX + [Adv] = { l: Coordinator => {s1,s2 : Str}} ; + [NP] = {l : Coordinator => {s1,s2 : Case => Str} ; g : Gender ; n : Number ; p : Person ; adv : Str ; preap : AP ; postap : AP ; isBase : Bool } ; + [AP] = {l : Coordinator => {s1,s2 : Agr => Str } } ; + + oper + -- Generates a new number value given two number values. + -- Pl if any of the two is Pl + -- Sg otherwise + matchNumber : Number -> Number -> Number = \n1,n2 -> + case of { + => Pl ; + <_,Pl> => Pl ; + <_,_> => Sg + } ; -- } diff --git a/src/latin/ConstructionLat.gf b/src/latin/ConstructionLat.gf new file mode 100644 index 000000000..ae0970ec8 --- /dev/null +++ b/src/latin/ConstructionLat.gf @@ -0,0 +1,5 @@ +--# -path=.:api +concrete ConstructionLat of Construction = CatLat ** + open SyntaxLat, SymbolicLat, ParadigmsLat, + (L = LexiconLat), (E = ExtraLat), (G = GrammarLat), (I = IrregLat), (R = ResLat), (N = NounLat), Prelude in { +} \ No newline at end of file diff --git a/src/latin/DictLat.gf b/src/latin/DictLat.gf new file mode 120000 index 000000000..c970a9ce6 --- /dev/null +++ b/src/latin/DictLat.gf @@ -0,0 +1 @@ +dict/DictLat.gf \ No newline at end of file diff --git a/src/latin/DictLatAbs.gf b/src/latin/DictLatAbs.gf new file mode 120000 index 000000000..6e86eacb3 --- /dev/null +++ b/src/latin/DictLatAbs.gf @@ -0,0 +1 @@ +dict/DictLatAbs.gf \ No newline at end of file diff --git a/src/latin/DocumentationLat.gf b/src/latin/DocumentationLat.gf new file mode 100644 index 000000000..d94c6d512 --- /dev/null +++ b/src/latin/DocumentationLat.gf @@ -0,0 +1,2 @@ +concrete DocumentationLat of Documentation = { +} \ No newline at end of file diff --git a/src/latin/ExtendLat.gf b/src/latin/ExtendLat.gf new file mode 100644 index 000000000..cf9be2707 --- /dev/null +++ b/src/latin/ExtendLat.gf @@ -0,0 +1 @@ +concrete ExtendLat of Extend = ExtendFunctor with (Grammar=GrammarLat); \ No newline at end of file diff --git a/src/latin/ExtraLat.gf b/src/latin/ExtraLat.gf index 94624cc52..066283529 100644 --- a/src/latin/ExtraLat.gf +++ b/src/latin/ExtraLat.gf @@ -1,13 +1,54 @@ concrete ExtraLat of ExtraLatAbs = - CatLat, - ExtraLexiconLat ** - open ResLat, Coordination, Prelude in { + CatLat, ExtraLexiconLat, ConjunctionLat ** + open ResLat, ParadigmsLat, Coordination, Prelude in { + lincat CS = Str ; lin + useS s = combineSentence s ! SPreO ! PreO ! SOV ; + -- PastPartAP : VPSlash -> AP ; -- lost (opportunity) ; (opportunity) lost in space +-- PastPartAP vp = { s = vp.part ! VPassPerf } ; + UsePronNonDrop p = -- Pron -> NP { - g = p.g ; - n = p.n ; + g = p.pers.g ; + n = p.pers.n ; p = p.p ; - s = p.pers ! PronNonDrop ! PronNonRefl ; + s = p.pers.s ! PronNonDrop ! PronNonRefl ; + adv = "" ; + preap, postap = { s = \\_ => "" } ; + det = { s = \\_,_ => "" ; sp = \\_,_ => "" ; n = p.pers.n } ; } ; + + AdjCNPre ap cn = -- AP -> CN -> CN + addAdjToCN (lin AP ap) (lin CN cn) Post ; + + -- ConjNP : Conj -> ListNP -> NP ; -- she or we + ConjNPque conj nps = + { + s = case conj.c of { + And => case nps.isBase of { + False => (conjunctDistrTable Case conj (nps.l ! And)).s ; + True => \\c => (nps.l ! And).s1 ! c ++ (nps.l ! And).s2 ! c ++ BIND ++ "que" + } ; + c => (conjunctDistrTable Case conj (nps.l ! And)).s + } ; + n = case conj.c of { And => Pl ; _ => nps.n } ; + g = nps.g ; + p = nps.p ; + adv = nps.adv ; + preap = nps.preap ; + postap = nps.postap ; + det = { s = \\_,_ => "" ; sp = \\_,_ => "" ; n = nps.n }; + } ; + + everybodyFem_NP = regNP "quisque" "quemque" "cuiusque" "cuique" "quoque" "quisque" Fem Sg ;-- regNP "quisquae" Sg ; -- L... + somebodyFem_NP = regNP "aliquis" "aliquem" "alicuius" "clicui" "aliquo" "aliquis" Fem Sg ; -- Bayer-Lindauer 60.1 + nobodyFem_NP = regNP "nemo" "neminem" "neminis" "nemini" "nemine" "nemo" Fem Sg ; -- Bayer Lindauer 60.4 + + Nom_Prep = mkPrep "" Nom ; + Gen_Prep = mkPrep "" Gen ; + Acc_Prep = mkPrep "" Acc ; + Dat_Prep = mkPrep "" Dat ; + Abl_Prep = mkPrep "" Abl ; + inAbl_Prep = mkPrep "in" Abl ; + onAbl_Prep = mkPrep "in" Abl ; -- L... } diff --git a/src/latin/ExtraLatAbs.gf b/src/latin/ExtraLatAbs.gf index 93d1b2150..c01f8d158 100644 --- a/src/latin/ExtraLatAbs.gf +++ b/src/latin/ExtraLatAbs.gf @@ -1,8 +1,32 @@ abstract ExtraLatAbs = - Extra, - ExtraLexiconLatAbs ** -{ + Extra, ExtraLexiconLatAbs, Conjunction + ** { + cat CS ; fun - UsePronNonDrop : Pron -> NP ; + useS : S -> CS ; + -- do not drop pronouns + UsePronNonDrop : Pron -> NP ; + -- add adjective before the noun + AdjCNPre : AP -> CN -> CN ; + + -- handle conjunction with suffix + ConjNPque : Conj -> ListNP -> NP ; + + -- Alternative form for female noun phrase + everybodyFem_NP : NP ; + somebodyFem_NP : NP ; + nobodyFem_NP : NP ; + + + -- Some empty prepositions to enforce cases + Nom_Prep : Prep ; + Gen_Prep : Prep ; + Acc_Prep : Prep ; + Dat_Prep : Prep ; + Abl_Prep : Prep ; + + -- Preposition with alternate case + inAbl_Prep : Prep ; + onAbl_Prep : Prep ; } diff --git a/src/latin/ExtraLexCaesar.gf b/src/latin/ExtraLexCaesar.gf new file mode 100644 index 000000000..93287990b --- /dev/null +++ b/src/latin/ExtraLexCaesar.gf @@ -0,0 +1,453 @@ +concrete ExtraLexCaesar of ExtraLexCaesarAbs = CatLat ** open Prelude,ParadigmsLat,ResLat, IrregLat, LexiconLat,StructuralLat in { + lin + a_Prep = mkPrep "a" Abl ; + ab_Prep = mkPrep "ab" Abl ; + abdere_V = mkV "abdere" "abdo" "abdidi" "abditum"; + abducere_V = mkV "abducere" "abduco" "abduxi" "abductum" ; -- prefixVerb "ab" ducere_V; -- ab + ducere, missing abduci (inf VInfPassPres : abduceri) + abesse_V = prefixVerb "ab" be_V; -- ab + esse, missing absente? + abicere_V = mkV "abicere" "abicio" "abieci" "abiectum"; -- prefixVerb "ab" iacere_V; -- ab + iacere + abscisus_A = mkA "abscisus"; + absens_A = mkA "absens" "absentis"; -- missing absente + absimilis_A = mkA "absimilis" "absimile"; -- missing absimili (s Posit (Ag Masc Sg Dat) : absimii) + abstinere_V2 = mkV2 (mkV "abstinere"); -- prefixVerb2 "ab" tenere_V2 ; -- -- ab + tenere + abstrahere_V2 = mkV2 (mkV "abstrahere" "abstraho" "abstraxi" "abstractum");-- prefixVerb2 "ab" trahere_V2 ; -- ab + trahere +-- ac_Conj = mkConj "" "ac" Sg ; + accedere_V = mkV "adcedere" "adcedo" "adcessi" "adcessum"; -- prefixVerb "ad" cedere_V ; -- ad + cedere + accendere_V = mkV "accendere" "accendo" "accendi" "accensum"; + accidere_V = mkV "accidere" "accido" "accidi" "accisum"; -- ad + caedere? + accipere_V = mkV "accipere" "accipio" "accepi" "acceptum"; -- prefixVerb "ad" capere_V; -- ad + capere + acclivis_A = mkA "acclivis" "acclive" ; + acclivitas_N = mkN "acclivitas" "acclivitatis" feminine; + accommodare_V = mkV "accommodare" ; + accommodatus_A = mkA "accommodatus" ; + accurrere_V = mkV "accurrere" "accurro" "accucurri" "accursum"; -- prefixVerb "ad" currere_V; -- ad + currere + accusare_V = mkV "accusare"; + acervus_N = mkN "acervus" ; + acies_N = mkN "acies" ; + acriter_Adv = ss "acriter"; -- comparison??? + ad_Prep = mkPrep "ad" Acc; + adaequare_V = mkV "adaequare"; -- ad + aequare? + adamare_V2 = mkV2 (mkV "adamare"); -- prefixVerb2 "ad" love_V2; -- ad + amare, missing adamassent (act (VAct VAnt (VImpf VConj) Pl P3) : adamavissent)? + adducere_V = mkV "adducere" "adduco" "adduxi" "adductum"; -- prefixVerb "ad" ducere_V; -- ad + ducere, missing adduci + adequitare_V = mkV "adequitare"; -- prefixVerb "ad" equitare_V; -- ad + equitare + adesse_V = prefixVerb "ad" be_V; -- ad + esse + adferre_V = prefixVerb "ad" ferre_V;-- ad + ferre + adfectus_A = mkA "adfectus"; + adfectus_N = mkN "adfectus" "adfectus" masculine; + adficere_V = mkV " adficere" "adfico" "adfeci" "adfectum"; -- ad + facere?, missing adficiebantur + adfigere_V = mkV " adfigere" "adfixi" "adfixum"; -- ad + figere?, missing adfixae + adfinitas_N = mkN "adfinitas" "adfinitatis" feminine; + adflictare_V = mkV "adflictare"; + adflictus_A = mkA "adflictus"; + adgredi_V = mkV "adgredi" "adgredior" "adgressus"; -- ad + gradior?, missing adgressi, adgressus + adgregare_V = mkV "adgregare"; -- ad + gregare? + adhibere_V = mkV "adhibere"; -- ad + habere? + adhuc_Adv = ss "adhuc"; + Adiatunnus_PN = mkPN (lin N (singularN (mkN "Adiatunnus"))); + adicere_V = mkV "adicere" "adieci" "adiectum"; -- ad + iacere?, missing adiecta + adigere_V = mkV "adigere" "adigo" "adegi" "adactum"; -- ad + agere?, missing adigi + adire_V = mkV "adire" "adeo" "" ""; -- prefixVerb "ad" ire_V; -- ad + ire, missing adiisset, aditus? + aditus_N = mkN "aditus" "aditus" masculine; + adiungere_V = mkV "adiungere" "adiungo" "adiunxi" "adiunctum"; -- ad + iungere? + adiuvare_V = mkV "adiuvare"; -- ad + iuvare? + administrare_V = mkV "administrare"; -- ad + ministrare + admirari_V = mkV "admirari" "admiror" "admiratus"; -- ad + mirari? + admittere_V = mkV "admittere" "admitto" "admisi" "admissum"; -- ad + mittere? + admodum_Adv = ss "admodum"; + adoriri_V = mkV "adoriri" "adorior" "adortus"; -- ad + oriri?, missing adorti, adortum, adortus + adpellere_V = mkV "adpellere" "adpello" "adpuli" "adpulsum"; -- ad + pelere? + adpetere_V = mkV "adpetere" "adpeto" "adpetivi" "adpetitum"; -- ad + petere?, missing adpetierit, adpetisse, adpetissent + adpropinquare_V = mkV " adpropinquare"; -- ad + propinquare? + -- adpulsare_V = mkV "adpulsare"; + adsciscere_V = mkV "adsciscere" "adscisco" "adscivi" "ascitum"; -- ad + sciscere? + adsuere_V = mkV "adsuere" "adsuo" "adsui" "adsutum"; -- ad + suere?, missing adsue + adsuefacere_V = mkV "adsuefacere" "adsuefacio" "adsuefeci" "adsuefactum"; -- possibly problematic + -- adtectus ??? + adulescentia_N = mkN "adulescentia"; + adulescentulus_N = mkN "adulescentulus"; + advenire_V = mkV "advenire" "advenio" "adveni" "adventum"; -- prefixVerb "ad" venire_V; -- ad + venire + advertere_V = mkV "advertere" "adverto" "adverti" "adversum"; -- ad + vertere? + adventus_N = mkN "adventus" "adventus" masculine; + aedificare_V = mkV "aedificare"; + aedificium_N = mkN "aedificium"; + aeger_A = mkA "aeger"; + aegre_Adv = ss "aegre"; -- comparison? + Aemilius_PN = mkPN (lin N (singularN (mkN "Aemilius"))); + aequaliter_Adv = ss "aequaliter"; + aequare_V = mkV " aequare"; + aequinoctium_N = mkN "aequinoctium"; + aequitas_N = mkN "aequitas" "aequitatis" feminine; + aequum_N = mkN "aequum"; + aequus_A = mkA "aequus"; + aerarius_A = mkA "aerarius"; + aerarius_N = mkN "aerarius"; + aer_f_N = mkN "aer" "aeris" feminine; + aer_m_N = mkN "aer" "aeris" masculine; + aes_N = mkN "aer" "aeris" neuter; + aestas_N = mkN "aestas" "aestatis" feminine; + aestimare_V = mkV "aestimare"; + aestuarium_N = mkN "aestuarium"; + aestus_N = mkN "aestus" "aestus" masculine; + aetas_N = mkN "aetas" "aetatis" feminine; + ager_N = mkN "ager"; + agere_V = mkV "agere" "ago" "egi" "actum"; + agger_N = mkN "agger" "aggeris" masculine; + agmen_N = mkN "agmen" "agminis" neuter; + alacer_A = mkA "alacer" "alacris"; + alacritas_N = mkN "alacritas" "alacritatis" feminine; + alarius_A = mkA "alarius"; + -- alduas_??? = ???; + alere_1_V = mkV "alere" "alo" "alui" "altum"; + alere_2_V = mkV "alere" "alo" "alui" "alitum"; + alienus_A = mkA "alienus"; +-- alii_Conj = mkConj "alii" "alii" Sg ; + aliquam_Adv = ss "aliquam"; + aliquanto_Adv = ss "aliquanto"; + --aliqui_Pron = mkPron ???; +-- aliquis_Pron = aliquis; + aliter_Adv = ss "aliter"; + alium_N = mkN "alium"; + alius_A = mkA (mkN "alius") (mkN "alia") (mkN "aliud" "alius" neuter); + Allobroges_PN = mkPN (lin N (pluralN (mkNoun "" "" "" "" "" "" "Allobroges" "Allobroges" "Allobrogum" "Allobrogibus" masculine))); -- missing Allobrogas + Alpes_PN = mkPN (lin N (pluralN (mkNoun "" "" "" "" "" "" "Alpes" "Alpes" "Alpium" "Alpibus" feminine))); + alter_A = mkA (mkN "alter") (mkN "altera") (mkN "alterum"); -- missing alterius + alterare_V = mkV "alterare"; + altitudo_N = mkN "altitudo" "altitudinis" feminine; + altus_A = mkA "altus"; + aluta_N = mkN "aluta"; + Ambarri_PN = mkPN (lin N (pluralN (mkN "Ambarrus"))); + Ambiani_PN = mkPN (lin N (pluralN (mkN "Ambianus"))); + Ambiliati_PN = mkPN (lin N (pluralN (mkN "Ambiliatus"))); + Ambivariti_PN = mkPN (lin N (pluralN (mkN "Ambivaritus"))); + amentia_N = mkN "amentia"; + amicitia_N = mkN "amicitia"; + amicus_A = mkA "amicus"; + amittere_V = mkV "amittere" "amitto" "amisi" "amissum"; + amplificare_V = mkV "amplificare"; + amplitudo_N = mkN "amplitudo" "amplitudinis" feminine; + amplus_A = mkA "amplus"; + anceps_A = mkA "anceps" "ancipitis"; + ancora_N = mkN "ancora"; + Andebrogius_PN = mkPN (lin N (singularN (mkN "Andebrogius"))); + --Andes_PN = ??? + angustia_N = mkN "angustia"; + angustiare_V = mkV "angustiare"; +-- an_Conj = mkConj "" "an" Sg; +-- an_an_Conj = mkConj "an" "an" Sg; + animadvertere_V = mkV "animadvertere" "animadverto" "animadverti" "animadversum"; + animus_N = mkN "animus"; + annuus_A = mkA "annuus"; + ante_Adv = ss "ante"; + ante_Prep = mkPrep "ante" Acc; + antea_Adv = ss "antea"; + antecedere_V = mkV "antecedere" "antecedo" "antecessi" "antecessum"; -- ante + cedere? + antemna_N = mkN "antemna"; + anteponere_V = mkV "anteponere" "antepono" "anteposui" "antepositum"; -- prefixVerb2 "ante" put_V2; -- ante + ponere + antiquitus_Adv = ss "antiquitus"; + antiquus_A = mkA "antiquus"; -- missing antiquissimum + aperire_V = mkV "aperire" "aperio" "aperui" "apertum"; -- missing aperta, apertis, apertissimis, apertissimo, aperto, apertum, apertus + apertare_V = mkV "apertare"; + Aprilis_PN = mkPN (lin N (singularN (mkN "Aprilis" "Aprilis" masculine))); -- missing Apr, April + appellare_V = mkV "appellare"; + aptus_A = mkA "aptus"; + apud_Prep = mkPrep "apud" Acc; + aquatio_N = mkN "aquatio" "aquationis" feminine; + aquila_N = mkN "aquila"; + Aquileia_PN = mkPN (lin N (singularN (mkN "Aquileia"))); + Aquitania_PN = mkPN (lin N (singularN (mkN "Aquitania"))); + Aquitanus_N = mkN "Aquitanus"; + Arar_PN = mkPN (lin N (singularN (mkN "Arar" "Araris" masculine))); -- missing Ararim + arbitrari_V = mkV "arbitrari"; + arbitrium_N = mkN "arbitrium"; + arcessere_V = mkV "arcessere" "arcesso" "arcessivi" "arcessitum"; + arduus_A = mkA "arduus"; + aries_N = mkN "aries" "arietis" masculine; + Ariovistus_PN = mkPN (lin N (singularN (mkN "Ariovistus"))); + armatus_A = mkA "armatus"; + arma_N = lin N (pluralN (mkNoun "" "" "" "" "" "" "arma" "arma" "armorum" "armis" neuter)); + armamentum_N = mkN "armamentum"; + armare_V = mkV "armare"; + armatura_N = mkN "armatura"; + armus_N = mkN "armus"; + arroganter_Adv = ss "arroganter"; -- comparison? + arrogantia_N = mkN "arrogantia"; + artus_A = mkA "artus"; + Arverni_PN = mkPN (lin N (pluralN (mkN "Arvernus"))); + arx_N = mkN "arx" "arcis" feminine; + ascendere_V = mkV "ascendere" "ascendo" "ascendi" "ascensum"; +-- at_Conj = mkConj "at" "" Sg ; +-- atque_Conj = mkConj "atque" "" Sg ; + Atrebates_PN = mkPN (mkN "Atrebas" "Atrebatis" masculine); + attingere_V = mkV "attingere" "attingo" "attigi" "attactum"; -- ad + tangere? + attribuere_V = mkV "attribuere" "attribuo" "attribui" "attributum"; -- ad + tribuere?, missing attribuant + -- auctibus ??? + auctor_N = mkN "auctor" "auctoris" masculine; + auctorare_V = mkV "auctorare"; + auctoritas_N = mkN "auctoritas" "auctoritatis" feminine; + auctus_A = mkA "auctus"; + audacter_Adv = ss "audacter"; -- comparison? + audax_A = mkA "audax" "audacis"; + audere_V = mkV "audere"; -- semi-deponent?, missing ausos + audire_V = mkV "audire" ; -- missing audierant, audierit + auditio_N = mkN "auditio" "auditionis" feminine; + augere_V = mkV "augere"; -- missing auxisse + Atuatuci_PN = mkPN (lin N (pluralN (mkN "Atuatucus"))); + Aulerci_PN = mkPN (lin N (pluralN (mkN "Aulercus"))); + Auriga_PN = mkPN (mkN "Auriga"); + Aurunculeius_PN = mkPN (lin N (singularN (mkN "Aurunculeius"))); + Ausci_PN = mkPN (lin N (pluralN (mkN "Auscus"))); +-- aut_Conj = mkConj "aut" "" Sg ; +-- autem_Conj = mkConj "autem" "" Sg ; + auxiliare_V = mkV "auxiliare"; + auxilium_N = mkN "auxilium"; + avaritia_N = mkN "avaritia"; + avertere_V = mkV "avertere" "averto" "averti" "aversum"; -- ab + vertere?, missing aventu (noun sg supine neut dat) + avus_N = mkN "avus"; + Axona_PN = mkPN (lin N (singularN (mkN "Axona"))); + baculus_N = mkN "baculus"; + Baleares_PN = mkPN (lin N (pluralN (mkN "Balear" "Balearis" masculine))); + barbarus_A = mkA "barbarus"; + barbarus_N = mkN "barbarus"; + batavus_A = mkA "batavus"; + Belgae_PN = mkPN (lin N (pluralN (mkN "Belga"))); -- missing Belgos + bellare_V = mkV "bellare"; + bellicosus_A = mkA "bellicosus"; + Bellovaci_PN = mkPN (lin N (pluralN (mkN "Bellovacus"))); + bellum_N = mkN "bellum"; + bellus_A = mkA "bellus"; + bene_Adv = ss "bene"; -- comparison? + beneficium_N = mkN "beneficium"; + Bibrax_PN = mkPN (lin N (singularN (mkN "Bibrax" "Bibractis" masculine))); + biduum_N = mkN "biduum"; + biduus_A = mkA "biduus"; + biennis_A = mkA "biennis" "bienne"; -- missing biennium + biennium_N = mkN "biennium"; + binus_A = mkA "binus"; + bipedalis_A = mkA "bipedalis" "bipedale"; -- missing bipedalibus + bipertitus_A = mkA "bipertitus"; + bis_Adv = ss "bis"; + Biturix_PN = mkPN (lin N (pluralN (mkN "Biturix" "Biturigis" masculine))); + -- boc ??? + Boduognatus_PN = mkPN (lin N (singularN (mkN "Boduognatus"))); + Boi_PN = mkPN (lin N (pluralN (mkN "Boius"))); -- missing Boi + bonitas_N = mkN "bonitas" "bonitatis" feminine; + bracchium_N = mkN "bracchium"; + Bratuspantium_PN = mkPN (lin N (singularN (mkN "Bratuspantium"))); + brevi_Adv = ss "brevi"; + breviare_V = mkV "breviare"; + brevis_A = mkA "brevis" "breve"; -- missing brevi + brevitas_N = mkN "brevitas" "brevitatis" feminine; + Britannia_PN = mkPN (mkN "Britannia"); + britannus_A = mkA "britannus"; + Brutus_PN = mkPN (lin N (singularN (mkN "Brutus"))); + cadaver_N = mkN "cadaver" "cadaveris" neuter; + cadere_V = mkV "cadere" "cado" "cecidi" "casum"; + Caesar_PN = mkPN (lin N (singularN (mkN "Caesar" "Caesaris" masculine))); -- missing Caesare + caespes_N = mkN "caespes" "caespitis" masculine; + calamitas_N = mkN "calamitas" "calamitatis" feminine; + calare_V = mkV "calare"; + calo_N = mkN "calo" "calonis" masculine; + campus_N = mkN "campus"; + capere_V = mkV "capere" "capio" "cepi" "captum"; -- missing capi + captivus_A = mkA "captivus"; + captivus_N = mkN "captivus"; + captus_N = mkN "captus" "captus" masculine; + carina_N = mkN "carina"; + carpere_V = mkV "carpere" "carpio" "carpsi" "carptum"; + carrus_N = mkN "carrus"; + castellum_N = mkN "castellum"; + castra_N = lin N (pluralN (mkNoun "" "" "" "" "" "" "castra" "castra" "castrorum" "castris" neuter)); + casus_N = mkN "casus" "casus" masculine; + catena_N = mkN "catena"; + causa_N = mkN "causa"; + causa_Prep = mkPostp "causa" Gen; + cavare_V = mkV "cavare"; + cavere_V = mkV "cavere"; + cedere_V = mkV "cedere" "cedo" "cessi" "cessum"; + celare_V = mkV "celare"; + celer_A = mkA "celer" "celeris"; -- strange? + celeritas_N = mkN "celeritas" "celeritatis" feminine; + celeriter_Adv = ss "celeriter"; -- comparison? missing celerius, celerrime + census_N = mkN "census" "census" masculine; + censere_V = mkV "censere"; + centuriare_V = mkV "centuriare"; + centurio_N = mkN "centurio" "centurionis" masculine; + cernere_V = mkV "cernere" "cerno" "crevi" "cretum"; + certare_V = mkV "certare"; + certamen_N = mkN "certamen" "certaminis" neuter; + certus_A = mkA "certus"; + ceterus_A = mkA "ceterus"; + cibarius_A = mkA "cibarius"; + cibus_N = mkN "cibus"; + ciere_V = mkV "ciere" "cio" "civi" "citum"; + cingere_V = mkV "cingere" "cingo" "cingi" "cinctum"; + circinare_V = mkV "circinare"; + circinus_N = mkN "circinus"; + circiter_Adv = ss "circiter"; + circiter_Prep = mkPrep "circiter" Acc; + circuitus_N = mkN "circuitus" "circuitus" masculine; + circum_Adv = ss "circum"; + circum_Prep = mkPrep "circum" Acc; + circumdare_V = mkV "circumdare" "circumdo" "circumdedi" "circumdatum"; -- prefixVerb "circum" dare_V; -- circum + dare, missing circumdederant, circumdederunt + circumducere_V = mkV "circumducere" "circumduco" "circumduxi" "circumductum"; -- prefixVerb "circum" ducere_V; circum + ducere + circumiectus_A = mkA "circumiectus"; + circumire_V = prefixVerb "circum" ire_V; + circummunire_V = mkV "circummunire"; + circumsistere_1_V = mkV "circumsistere" "circumsisto" "circumstiti" "circumstatum" ; -- prefixVerb "circum" sistere_1_V; -- circum + sistere +-- circumsistere_2_V = prefixVerb "circum" sistere_2_V; -- circum + sistere + circumvenire_V = mkV "circumvenire" ; -- prefixVerb "circum" venire_V; -- circum + venire + cis_Prep = mkPrep "cis" Acc; + citare_V = mkV "citare"; + citer_A = mkA "citer"; -- missing citeriore, citeriorem, citerioris + citra_Adv = ss "citra"; + citus_A = mkA "citus"; + civitas_N = mkN "civitas" "civitatis" feminine; + colere_V = mkV "colere" "colo" "colui" "cultum"; + cooriri_V = mkV "cooriri" "coorior" "coortus"; -- prefixVerb "con" oriri_V; -- con + oriri, missing coorta + conferre_V = prefixVerb "con" ferre_V; -- con + ferre + --- + conspicere_V = mkV "conspicere" "conspicio" "conspexi" "conspectum"; -- prefixVerb "con" specere_V; -- con + specere + conspirare_V = mkV "conspirare"; -- con + spirare? + constanter_Adv = ss "constanter"; -- comparison + constantia_N = mkN "constantia"; + constare_V = mkV "constare"; -- prefixVerb "con" stare_V; -- con + stare, missing constiterant, constiterat, constiterunt, constitissent, constitisset, constitit +-- consternare_V = mkV "consternare"; -- con + sternere ? + consternere_V = mkV "consternere" "consterno" "constravi" "constratum"; -- con + sternere? + constituere_V = mkV "constituere" "constituo" "constitui" "constitutum"; -- prefixVerb "con" statuere_V; -- con + statuere + constitutum_N = mkN "constitutum"; + consuere_V = mkV "consuere" "consuo" "consui" "consustum"; + consuescere_V = mkV "consuescere" "consuesco" "consuevi" "consuetum"; -- con + suescere?, missing consuesse, consuessent? + consuetudo_N = mkN "consuetudo" "consuetudinis" feminine; + consul_N = mkN "consul" "consulis" masculine; + consulatus_N = mkN "consulatus" "consulatus" masculine; + consulere_V = mkV "consulere" "consulo" "consului" "consultum"; + consultare_V = mkV "consultare"; + consultum_N = mkN "consultum"; + contemptio_N = mkN "contemptio" "contemptionis" feminine; + contemptus_A = mkA "contemptus"; + contemptus_N = mkN "contemptus" "contemptus" masculine; + contentio_N = mkN "contentio" "contentionis" feminine; + contendere_V = mkV "contendere" "contendo" "contendi" "contentum"; + contexere_V = mkV "contexere" "contexo" "contexui" "contextum"; -- prefixVerb "con" texere_V; -- con + texere + continens_N = mkN "continens" "continentis" feminine; + continenter_Adv = ss "continenter"; + continere_V2 = mkV2 (mkV "continere"); -- prefixVerb2 "con" tenere_V2; con + tenere + contingere_V = mkV "contingere" "contingo" "contigi" "contectum"; -- con + tangere? + continuatio_N = mkN "continuatio" "continuationis" feminine; + continuus_A = mkA "continuus"; + contra_Adv = ss "contra"; +-- contrahere_V2 = -- prefixVerb2 "con" trahere_V2; -- con + trahere + contrarius_A = mkA "contrarius"; + contumelia_N = mkN "contumelia"; + convallis_N = mkN "convallis" "convallis" feminine; + convenire_V = prefixVerb "con" venire_V; -- missing convenerant, convenerat, convenerunt, convenisse, convenissent, convenisset, conventu, conventus + conversare_V = mkV "conversare"; + convertere_V = prefixVerb "con" vertere_V; -- con + vertere + convincere_V = prefixVerb "con" vincere_V; -- con + vincere + convocare_V = prefixVerb "con" vocare_V; -- con + vocare + copia_N = mkN "copia"; + copiosus_A = mkA "copiosus"; + copula_N = mkN "copula"; + cora_N = mkN "cora"; + corona_N = mkN "corona"; + corpus_N = mkN "corpus" "corporis" neuter; + cos_N = mkN "cos" "cotis" feminine; + cotidianus_A = mkA "cotidianus"; + cotidie_Adv = ss "cotidie"; + Cotta_PN = mkPN (lin N (singularN (mkN "Cotta"))); + crassitudo_N = mkN "crassitudo" "crassitudinis" feminine; + Crassus_PN = mkPN (lin N (singularN (mkN "Crassus"))); + cratis_N = mkN "cratis" "cratis" feminine; + creare_V = mkV "creare"; + creber_A = mkA "creber"; + credere_V = mkV "credere" "credo" "credidi" "creditum"; + cremare_V = mkV "cremare"; + crescere_V = mkV "crescere" "cresco" "crevi" "cretum"; + Creta_N = mkN "Creta"; + cruciare_V = mkV "cruciare"; + cruciatus_N = mkN "cruciatus" "cruciatus" masculine; + crudelitas_N = mkN "crudelitas" "crudelitatis" feminine; + crudeliter_Adv = ss "crudeliter"; -- comparison? + culmen_N = mkN "culmen" "culminis" neuter; + culpa_N = mkN "culpa"; + cultura_N = mkN "cultura"; + cultus_N = mkN "cultus" "cultus" masculine; + cum_Prep = mkPrep "cum" Abl; + cunctari_V = mkV "cunctari"; + cunctatio_N = mkN "cunctatio" "cunctationis" feminine; + cunctus_A = mkA "cunctus"; + cuniculus_N = mkN "cuniculus"; + cupere_V = mkV "cupere" "cupio" "cupivi" "cupitum"; + cupiditas_N = mkN "cupiditas" "cupiditatis" feminine; + cupidus_A = mkA "cupidus"; + cur_Adv = ss "cur"; + cura_N = mkN "cura"; + curare_V = mkV "curare"; -- missing curasset + currere_V = mkV "currere" "curro" "cucurri" "cursum"; + currus_N = mkN "currus" "currus" masculine; + custodia_N = mkN "custodia"; + damnare_V = mkV "damnare"; + damnatus_A = mkA "damnatus"; + dare_V = mkV "dare" "do" "dedi" "datum"; + datum_N = mkN "datum"; + de_Prep = mkPrep "de" Abl; + debere_VV = StructuralLat.must_VV; + ducere_V = mkV "ducere" "duco" "duxi" "ductum" ; + equitare_V = mkV "equitare"; + ferre_V = fixFerre (mkVerb "ferre" "fer" "fer" "fera" "fereba" "ferre" "fere" "fer" "tul" "tul" "tuleri" "tulera" "tulisse" "tuleri" "lat"); + iacere_V = mkV "iacere" "iacio" "ieci" "iactum"; + ire_V = LexiconLat.go_V; +-- ne_an_Conj = mkConj (BIND ++ "ne") "an" Sg; +-- nonne_an_Conj = mkConj "nonne" "an" Sg; +-- num_an_Conj = mkConj "num" "an" Sg; + oriri_V = mkV "oriri" "orior" nonExist "ortus"; + qui_IP = StructuralLat.whatSg_IP; + sistere_1_V = mkV "sistere" "sisto" "stiti" "statum"; + sistere_2_V = mkV "sistere" "sisto" "steti" "statum"; + specere_V = mkV "specere" "speco" "spexi" "spectum"; + stare_V = LexiconLat.stand_V; + statuere_V = mkV "statuere" "statuo" "statui" "statutum"; + tenere_V2 = LexiconLat.hold_V2; + texere_V = mkV "texere" "texo" "texui" "textum"; + trahere_V2 = LexiconLat.pull_V2; +-- utrum_an_Conj = mkConj "utrum" "an" Sg; + venire_V = LexiconLat.come_V; + vertere_V = mkV "vertere" "verto" "verti" "versum"; + vincere_V = mkV "vincere" "vinco" "vici" "victum"; + vocare_V = mkV "vocare"; + oper + fixFerre : Verb -> Verb = + \ferre -> + { + act = table + { + (VAct VSim (VPres VInd) Sg P2) => "fers"; + (VAct VSim (VPres VInd) Sg P3) => "fert"; + (VAct VSim (VPres VInd) Pl P1) => "ferimus"; + (VAct VSim (VPres VInd) Pl P2) => "fertis"; + rest => ferre.act ! rest + }; + ger = ferre.ger; + geriv = ferre.geriv; + imp = table + { + (VImp1 Sg) => "fer"; + (VImp1 Pl) => "ferte"; + (VImp2 Sg P2) => "ferto"; + (VImp2 Sg P3) => "ferto"; + (VImp2 Pl P2) => "fertote"; + rest => ferre.imp ! rest + }; + inf = ferre.inf; + part = ferre.part; + pass = table + { + VPass (VPres VInd) Sg P2 => "ferris"; + VPass (VPres VInd) Sg P3 => "fertur"; + rest => ferre.pass ! rest + }; + sup = ferre.sup; + + + } ; +} \ No newline at end of file diff --git a/src/latin/ExtraLexCaesarAbs.gf b/src/latin/ExtraLexCaesarAbs.gf new file mode 100644 index 000000000..ee3638107 --- /dev/null +++ b/src/latin/ExtraLexCaesarAbs.gf @@ -0,0 +1,417 @@ +abstract ExtraLexCaesarAbs = Cat ** { + fun + a_Prep : Prep; + ab_Prep : Prep; + abdere_V : V; + abducere_V : V; + abesse_V : V; + abicere_V : V; + abscisus_A : A; + absens_A : A; + absimilis_A : A; + abstinere_V2 : V2; + abstrahere_V2 : V2; + ac_Conj : Conj ; + accedere_V : V; + accendere_V : V; + accidere_V : V; + accipere_V : V; + acclivis_A : A; + acclivitas_N : N; + accommodare_V : V; + accommodatus_A : A; + accurrere_V : V; + accusare_V : V; + acervus_N : N; + acies_N : N; + acriter_Adv : Adv; + ad_Prep : Prep; + adaequare_V : V; + adamare_V2 : V2; + adducere_V : V; + adequitare_V : V; + adesse_V : V; + adferre_V : V; + adfectus_A : A; + adfectus_N : N; + adficere_V : V; + adfigere_V : V; + adfinitas_N : N; + adflictare_V : V; + adflictus_A : A; + adgredi_V : V; + adgregare_V : V; + adhibere_V : V; + adhuc_Adv : Adv; + Adiatunnus_PN : PN; + adicere_V : V; + adigere_V : V; + adire_V : V; + aditus_N : N; + adiungere_V : V; + adiuvare_V : V; + administrare_V : V; + admirari_V : V; + admittere_V : V; + admodum_Adv : Adv; + adoriri_V : V; + adpellere_V : V; + adpetere_V : V; + adpropinquare_V : V; + adpulsare_V : V; + adsciscere_V : V; + adsuere_V : V; + adsuefacere_V : V; + adulescentia_N : N; + adulescentulus_N : N; + advenire_V : V; + adventus_N : N; + advertere_V : V; + aedificare_V : V; + aedificium_N : N; + aeger_A : A; + aegre_Adv : Adv; + Aemilius_PN : PN; + aequaliter_Adv : Adv; + aequare_V : V; + aequinoctium_N : N; + aequitas_N : N; + aequum_N : N; + aequus_A : A; + aerarius_A : A; + aerarius_N : N; + aer_f_N : N; + aer_m_N : N; + aes_N : N; + aestas_N : N; + aestimare_V : V; + aestuarium_N : N; + aestus_N : N; + aetas_N : N; +-- afferre_V : V; + ager_N : N; + agere_V : V; + agger_N : N; + agmen_N : N; + alacer_A : A; + alacritas_N : N; + alarius_A : A; + -- alduas_??? : ???; + alere_1_V : V; + alere_2_V : V; + alienus_A : A; + alii_Conj : Conj; + aliquam_Adv : Adv; + aliquanto_Adv : Adv; +-- aliqui_Pron : Pron; + aliquis_Pron : Pron; + aliter_Adv : Adv; + alium_N : N; + alius_A : A; + Allobroges_PN : PN; + Alpes_PN : PN; + alter_A : A; + alterare_V : V; + altitudo_N : N; + altus_A : A; + aluta_N : N; + Ambarri_PN : PN; + Ambiani_PN : PN; + Ambiliati_PN : PN; + Ambivariti_PN : PN; + amentia_N : N; + amicitia_N : N; + amicus_A : A; + amittere_V : V; + amplificare_V : V; + amplitudo_N : N; + amplus_A : A; + an_Conj : Conj; + an_an_Conj : Conj; + anceps_A : A; + ancora_N : N; + Andebrogius_PN : PN; + Andes_PN : PN; + angustiare_V : V; + angustia_N : N; + animadvertere_V : V; + animus_N : N; + annuus_A : A; + ante_Adv : Adv; + ante_Prep : Prep; + antea_Adv : Adv; + antecedere_V : V; + antemna_N : N; + anteponere_V : V; + antiquitus_Adv : Adv; + antiquus_A : A; + aperire_V : V; + apertare_V : V; + appellare_V : V; + Aprilis_PN : PN; + aptus_A : A; + apud_Prep : Prep; + aquatio_N : N; + aquila_N : N; + Aquileia_PN : PN; + Aquitanus_N : N; + Aquitania_PN : PN; + Arar_PN : PN; + arbitrari_V : V; + arbitrium_N : N; + arcessere_V : V; + arduus_A : A; + aries_N : N; + Ariovistus_PN : PN; + armatus_A : A; + arma_N : N; + armamentum_N : N; + armare_V : V; + armatura_N : N; + armus_N : N; + arroganter_Adv : Adv; + arrogantia_N : N; + artus_A : A; + Arverni_PN : PN; + arx_N : N; + ascendere_V : V; + at_Conj : Conj; + atque_Conj : Conj ; + Atrebates_PN : PN; + attingere_V : V; + attribuere_V : V; + Atuatuci_PN : PN; + auctor_N : N; + auctorare_V : V; + auctoritas_N : N; + auctus_A : A; + audacter_Adv : Adv; + audax_A : A; + audere_V : V; + audire_V : V; + auditio_N : N; + augere_V : V; + Aulerci_PN : PN; + Auriga_PN : PN; + Aurunculeius_PN : PN; + Ausci_PN : PN; + aut_Conj : Conj; + autem_Conj : Conj; + auxiliare_V : V; + auxilium_N : N; + avaritia_N : N; + avertere_V : V; + avus_N : N; + Axona_PN : PN; + baculus_N : N; + Baleares_PN : PN; + barbarus_A : A; + barbarus_N : N; + batavus_A : A; + Belgae_PN : PN; + bellare_V : V; + bellicosus_A : A; + Bellovaci_PN : PN; + bellum_N : N; + bellus_A : A; + bene_Adv : Adv; + beneficium_N : N; + Bibrax_PN : PN; + biduum_N : N; + biduus_A : A; + biennis_A : A; + biennium_N : N; + binus_A : A; + bipedalis_A : A; + bipertitus_A :A; + bis_Adv : Adv; + Biturix_PN : PN; + -- boc ??? + Boduognatus_PN : PN; + Boi_PN : PN; + bonitas_N : N; + bracchium_N : N; + Bratuspantium_PN : PN; + brevi_Adv : Adv; + breviare_V : V; + brevis_A : A; + brevitas_N : N; + Britannia_PN : PN; + britannus_A : A; + Brutus_PN : PN; + cadaver_N : N; + cadere_V : V; + Caesar_PN : PN; + caespes_N : N; + calamitas_N : N; + calare_V : V; + calo_N : N; + campus_N : N; + capere_V : V; + captivus_A : A; + captivus_N : N; + captus_N : N; + carina_N : N; + carpere_V : V; + carrus_N : N; + castellum_N : N; + castra_N : N; + casus_N : N; + catena_N : N; + causa_N : N; + causa_Prep : Prep; -- Postposition + cavare_V : V; + cavere_V : V; + cedere_V : V; + celare_V : V; + celer_A : A; + celeritas_N : N; + celeriter_Adv : Adv; + censere_V : V; + census_N : N; + centuriare_V : V; + centurio_N : N; + cernere_V : V; + certare_V : V; + certamen_N : N; + certus_A : A; + ceterus_A : A; + cibarius_A : A; + cibus_N : N; + ciere_V : V; + cingere_V : V; + circinare_V : V; + circinus_N : N; + circiter_Adv : Adv; + circiter_Prep : Prep; + circuitus_N : N; + circum_Adv : Adv; + circum_Prep : Prep; + circumdare_V : V; + circumducere_V : V; + circumiectus_A : A; + circumire_V : V; + circummunire_V : V; + circumsistere_1_V : V; +-- circumsistere_2_V : V; + circumvenire_V : V; + cis_Prep : Prep; + citare_V : V; + citer_A : A; + citra_Adv : Adv; + citus_A : A; + civitas_N : N; + colere_V : V; + conferre_V : V; + --- + conspicere_V : V; + conspirare_V : V; + constanter_Adv : Adv; + constantia_N : N; + constare_V : V; +-- consternare_V : V; + consternere_V : V; + constituere_V : V; + constitutum_N : N; + consuere_V : V; + consuescere_V : V; + consuetudo_N : N; + consul_N : N; + consulatus_N : N; + consulere_V : V; + consultare_V : V; + consultum_N : N; + contemptio_N : N; + contemptus_A : A; + contemptus_N : N; + contendere_V : V; + contentio_N : N; + contexere_V : V; + continens_N : N; + continenter_Adv : Adv; + continere_V2 : V2; + contingere_V : V; + continuatio_N : N; + continuus_A : A; + contra_Adv : Adv; + contrahere_V2 : V2; + contrarius_A : A; + contumelia_N : N; + convallis_N : N; + convenire_V : V; + conversare_V : V; + convertere_V : V; + convincere_V : V; + convocare_V : V; + cooriri_V : V; + copia_N : N; + copiosus_A : A; + copula_N : N; + cora_N : N; + corona_N : N; + corpus_N : N; + cos_N : N; + cotidianus_A : A; + cotidie_Adv : Adv; + Cotta_PN : PN; + crassitudo_N : N; + Crassus_PN : PN; + cratis_N : N; + creare_V : V; + creber_A : A; + credere_V : V; + cremare_V : V; + crescere_V : V; + Creta_N : N; + cruciare_V : V; + cruciatus_N : N; + crudelitas_N : N; + crudeliter_Adv : Adv; + culmen_N : N; + culpa_N : N; + cultura_N : N; + cultus_N : N; + cum_Prep : Prep; + cunctari_V : V; + cunctatio_N : N; + cunctus_A : A; + cuniculus_N : N; + cupere_V : V; + cupiditas_N : N; + cupidus_A : A; + cur_Adv : Adv; + cura_N : N; + curare_V : V; + currere_V : V; + currus_N : N; + custodia_N : N; + damnare_V : V; + damnatus_A : A; + dare_V : V; + datum_N : N; + de_Prep : Prep; + debere_VV : VV; + ducere_V : V; + equitare_V : V; + ferre_V : V; + iacere_V : V; + ire_V : V; + ne_an_Conj : Conj; + nonne_an_Conj : Conj; + num_an_Conj : Conj; + oriri_V : V; + qui_IP : IP; + sistere_1_V : V; + sistere_2_V : V; + specere_V : V; + stare_V : V; + statuere_V : V; + tenere_V2 : V2; + texere_V : V; + trahere_V2 : V2; + utrum_an_Conj : Conj; + venire_V : V; + vertere_V : V; + vincere_V : V; + vocare_V : V; +} \ No newline at end of file diff --git a/src/latin/ExtraLexiconLat.gf b/src/latin/ExtraLexiconLat.gf index 9ba211cce..8d3161fc4 100644 --- a/src/latin/ExtraLexiconLat.gf +++ b/src/latin/ExtraLexiconLat.gf @@ -1,2 +1,28 @@ -concrete ExtraLexiconLat of ExtraLexiconLatAbs = { +concrete ExtraLexiconLat of ExtraLexiconLatAbs = CatLat ** open ParadigmsLat in { + lin + friend_Fem_N = mkN "amica" ; -- -i/-ae m./f. (Langenscheidts) + baby_Fem_N = mkN "infans" "infantis" feminine ; -- Ranta; -antis m./f. (Langenscheidts) + blue_Var_A = mkA "caeruleus" ; -- 3 (Langenscheidts) + boss_Fem_N = mkN "dux" "ducis" feminine ; -- ducis m./f. (Langenscheidts) + bread_Neutr_N = mkN "pane" "panis" neuter ; -- -is m./n. (Langenscheidts) + cat_Var_N = mkN "felis" "felis" feminine ; -- -is f. (Langenscheidts) + cousin_Fem_N = mkN "consobrina" ; -- -i/-ae m./f. (Langenscheidts) + cow_Fem_N = mkN "bos" "bovis" feminine ; -- bovis (gen. pl. boum, dat./abl. pl. bobus/bubus) m./f. (Langenscheidts) + dog_Fem_N = mkN "canis" "canis" feminine ; -- -is m./f. (Langenscheidts) + enemy_Fem_N = mkN "hostis" "hostis" feminine ; -- -is m./f. (Langenscheidts) + policeman_Fem_N = mkN "custos" "custodis" feminine ; -- -odis m./f. (Langenscheidts) + priest_Fem_N = mkN "sacerdos" "sacerdotis" feminine ; -- -dotis m./f. (Langenscheidts) + snake_Fem_N = mkN "serpens" "serpentis" feminine ; -- -entis m./f. (Langenscheidts) + student_Fem_N = mkN "discipula" ; -- -i/-ae m./f. (Langenscheidts) + switch8on_Var_V2 = mkV2 (mkV "exstinguere" ) ; -- -ingo, -inxi, -inctum 3 (Langenscheidts) + bark_Fem_N = mkN "cortex" "corticis" feminine ; -- -icis m./(f.) (Langenscheidts) + blood_Var_N = mkN "sangis" "sanginis" masculine ; -- -inis m. (Langenscheidts) + day_Fem_N = mkN "dies" "diei" feminine ; -- -ei m./f. (Langenscheidts) + horn_Var_N = mkN "cornu" "cornus" neuter ; -- -us n. (Langenscheidts) + liver_Var_N = mkN "iocur" "iocineris" neuter ; -- iecoris/iocineris n. (Langenscheidts) + louse_Fem_N = mkN "pedis" "pedis" feminine ; -- -is m./f. (Langenscheidts) + nose_Neutr_N = mkN "nasum" ; -- -i m./n. (Langenscheidts) + rope_Fem_N = mkN "funis" "funis" feminine ; -- -is m.(/f.) (Langenscheidts) + salt_Neutr_N = mkN "sal" "salis" neuter ; -- salis m./n. (Langenscheidts) + stick_Neutr_N = mkN "baculum" ; -- -i n./m. }; \ No newline at end of file diff --git a/src/latin/ExtraLexiconLatAbs.gf b/src/latin/ExtraLexiconLatAbs.gf index b401b8baa..7a5271948 100644 --- a/src/latin/ExtraLexiconLatAbs.gf +++ b/src/latin/ExtraLexiconLatAbs.gf @@ -1,3 +1,29 @@ -abstract ExtraLexiconLatAbs = { - +abstract ExtraLexiconLatAbs = Cat, Lexicon, ExtraLexCaesarAbs ** { + fun + -- Ambigous entries from main lexicon + friend_Fem_N : N ; + baby_Fem_N : N ; + blue_Var_A : A ; + boss_Fem_N : N ; + bread_Neutr_N : N ; + cat_Var_N : N ; + cousin_Fem_N : N ; + cow_Fem_N : N ; + dog_Fem_N : N ; + enemy_Fem_N : N ; + policeman_Fem_N : N ; + priest_Fem_N : N ; + snake_Fem_N : N ; + student_Fem_N : N ; + switch8on_Var_V2 : V2 ; + bark_Fem_N : N ; + blood_Var_N : N ; + day_Fem_N : N ; + horn_Var_N : N ; + liver_Var_N : N ; + louse_Fem_N : N ; + nose_Neutr_N : N ; + rope_Fem_N : N ; + salt_Neutr_N : N ; + stick_Neutr_N : N ; }; \ No newline at end of file diff --git a/src/latin/GrammarLat.gf b/src/latin/GrammarLat.gf index 583a274f2..31aebc317 100644 --- a/src/latin/GrammarLat.gf +++ b/src/latin/GrammarLat.gf @@ -11,8 +11,8 @@ concrete GrammarLat of Grammar = -- RelativeLat, ConjunctionLat, PhraseLat, - TextX, - TenseX, + TextX-[Adv], + TenseX-[Adv], StructuralLat -- IdiomLat ** { diff --git a/src/latin/IdiomLat.gf b/src/latin/IdiomLat.gf index b8adec832..4ebe790d5 100644 --- a/src/latin/IdiomLat.gf +++ b/src/latin/IdiomLat.gf @@ -1,4 +1,4 @@ ---concrete IdiomLat of Idiom = CatLat ** open Prelude, ResLat in { +concrete IdiomLat of Idiom = CatLat ** open Prelude, ResLat in { -- -- flags optimize=all_subs ; -- @@ -26,5 +26,4 @@ -- -- ImpPl1 vp = {s = "let's" ++ infVP True vp (AgP1 Pl)} ; -- ---} --- +} \ No newline at end of file diff --git a/src/latin/IrregLat.gf b/src/latin/IrregLat.gf index 3c26e864e..8d6b148c1 100644 --- a/src/latin/IrregLat.gf +++ b/src/latin/IrregLat.gf @@ -6,171 +6,16 @@ concrete IrregLat of IrregLatAbs = CatLat ** open Prelude, ParadigmsLat, ResLat -- lin - -- Bayer-Lindauer 93 1 - be_V = - let - pres_stem = "s" ; - pres_ind_base = "su" ; - pres_conj_base = "si" ; - impf_ind_base = "era" ; - impf_conj_base = "esse" ; - fut_I_base = "eri" ; - imp_base = "es" ; - perf_stem = "fu" ; - perf_ind_base = "fu" ; - perf_conj_base = "fueri" ; - pqperf_ind_base = "fuera" ; - pqperf_conj_base = "fuisse" ; - fut_II_base = "fueri" ; - part_stem = "fut" ; - verb = mkVerb "esse" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base - imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ; - in - { - act = - table { - VAct VSim (VPres VInd) n p => - table Number [ table Person [ "sum" ; "es" ; "est" ] ; - table Person [ "sumus" ; "estis" ; "sunt" ] - ] ! n ! p ; - a => verb.act ! a - }; - pass = - \\_ => nonExist ; -- no passive forms - inf = - verb.inf ; - imp = - table { - VImp1 Sg => "es" ; - VImp1 Pl => "este" ; - VImp2 Pl P2 => "estote" ; - a => verb.imp ! a - } ; - sup = - \\_ => nonExist ; -- no supin forms - ger = - \\_ => nonExist ; -- no gerund forms - geriv = - \\_ => nonExist ; -- no gerundive forms - part = table { - VActFut => - verb.part ! VActFut ; - VActPres => - \\_ => nonExist ; -- no such participle - VPassPerf => - \\_ => nonExist -- no such participle - } - } ; + be_V = esseAux ; -- Bayer-Lindauer 93 2.2 - can_VV = - let - pres_stem = "pos" ; - pres_ind_base = "pos" ; - pres_conj_base = "possi" ; - impf_ind_base = "potera" ; - impf_conj_base = "posse" ; - fut_I_base = "poteri" ; - imp_base = "" ; - perf_stem = "potu" ; - perf_ind_base = "potu" ; - perf_conj_base = "potueri" ; - pqperf_ind_base = "potuera" ; - pqperf_conj_base = "potuisse" ; - fut_II_base = "potueri" ; - part_stem = "" ; - verb = mkVerb "posse" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base - imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ; - in - { - act = - table { - VAct VSim (VPres VInd) n p => - table Number [ table Person [ "possum" ; "potes" ; "potest" ] ; - table Person [ "possumus" ; "potestis" ; "possunt" ] - ] ! n ! p ; - a => verb.act ! a - } ; - pass = - \\_ => nonExist ; -- no passive forms - inf = - table { - VInfActFut _ => nonExist ; - a => verb.inf ! a - } ; - imp = - \\_ => nonExist ; - sup = - \\_ => nonExist ; - ger = - \\_ => nonExist ; - geriv = - \\_ => nonExist ; - part = table { - VActFut => - \\_ => nonExist ; -- no such participle - VActPres => - \\_ => nonExist ; -- no such participle - VPassPerf => - \\_ => nonExist -- no such participle - } ; - isAux = False - }; + can_V = + posseAux ; + -- Bayer-Lindauer 94 bring_V = - let - pres_stem = "fer" ; - pres_ind_base = "fer" ; - pres_conj_base = "fera" ; - impf_ind_base = "fereba" ; - impf_conj_base = "ferre" ; - fut_I_base = "fere" ; - imp_base = "fer" ; - perf_stem = "tul" ; - perf_ind_base = "tul" ; - perf_conj_base = "tuleri" ; - pqperf_ind_base = "tulera" ; - pqperf_conj_base = "tulisse" ; - fut_II_base = "tuleri" ; - part_stem = "lat" ; - verb = mkVerb "ferre" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base - imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ; - in - { - act = - table { - VAct VSim (VPres VInd) n p => - table Number [ table Person [ "fero" ; "fers" ; "fert" ] ; - table Person [ "ferimus" ; "fertis" ; "ferunt" ] - ] ! n ! p ; - a => verb.act ! a - } ; - pass = - table { - VPass (VPres VInd) n p => - table Number [ table Person [ "feror" ; "ferris" ; "fertur" ] ; - table Person [ "ferimur" ; "ferimini" ; "feruntur" ] - ] ! n ! p ; - a => verb.pass ! a - } ; - inf = - verb.inf ; - imp = - table { - VImp1 n => table Number [ "fer" ; "ferte" ] ! n ; - VImp2 Sg ( P2 | P3 ) => "ferto" ; - VImp2 Pl P2 => "fertote" ; - a => verb.imp ! a - } ; - sup = - verb.sup ; - ger = - verb.ger ; - geriv = - verb.geriv ; - part = verb.part ; - }; + ferreAux ; -- Bayer-Lindauer 95 want_V = @@ -204,9 +49,9 @@ concrete IrregLat of IrregLatAbs = CatLat ** open Prelude, ParadigmsLat, ResLat pass = \\_ => nonExist ; ger = - verb.ger ; + \\_ => nonExist ; geriv = - verb.geriv ; + \\_ => nonExist ; imp = \\_ => nonExist ; inf = @@ -220,7 +65,7 @@ concrete IrregLat of IrregLatAbs = CatLat ** open Prelude, ParadigmsLat, ResLat \\_ => nonExist } ; sup = - verb.sup ; + \\_ => nonExist ; } ; -- Bayer-Lindauer 96 1 @@ -453,4 +298,155 @@ concrete IrregLat of IrregLatAbs = CatLat ** open Prelude, ParadigmsLat, ResLat } ; sup = \\_ => nonExist ; -- no such supine form } ; + + not8want_V = + let + pres_stem = "nol" ; + pres_ind_base = "nol" ; + pres_conj_base = "noli" ; + impf_ind_base = "noleba" ; + impf_conj_base = "nolle" ; + fut_I_base = "nole" ; + imp_base = "nol" ; + perf_stem = "nolu" ; + perf_ind_base = "nolu" ; + perf_conj_base = "nolueri" ; + pqperf_ind_base = "noluera" ; + pqperf_conj_base = "noluisse" ; + fut_II_base = "nolueri" ; + part_stem = "nolet" ; + verb = mkVerb "nolle" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base + imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ; + in + { + act = + table { + VAct VSim (VPres VInd) n p => + table Number [ table Person [ "nolo" ; "non vis" ; "non vult" ] ; + table Person [ "nolumus" ; "non vultis" ; "nolunt" ] + ] ! n ! p ; + a => verb.act ! a + } ; + pass = + \\_ => nonExist ; + ger = + \\_ => nonExist ; + geriv = + \\_ => nonExist ; + imp = table { + VImp1 Sg => "noli" ; + i => verb.imp ! i + } ; + inf = table { + VInfActFut _ | VInfPassPres | VInfPassPerf _ | VinfPassFut => nonExist ; + i => verb.inf ! i + } ; + part = table { + VActFut => + \\_ => nonExist ; + VActPres => + verb.part ! VActPres ; + VPassPerf => + \\_ => nonExist + } ; + sup = + \\_ => nonExist ; + } ; + + make_V = + let + pres_stem = "faci" ; + pres_ind_base = "faci" ; + pres_conj_base = "facia" ; + impf_ind_base = "facieba" ; + impf_conj_base = "facere" ; + fut_I_base = "facie" ; + imp_base = "faci" ; + perf_stem = "fec" ; + perf_ind_base = "fec" ; + perf_conj_base = "feceri" ; + pqperf_ind_base = "fecera" ; + pqperf_conj_base = "fecisse" ; + fut_II_base = "feceri" ; + part_stem = "fact" ; + verb = mkVerb "facere" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base + imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ; + in + { + act = verb.act ; + pass = + table { + VPass (VPres VInd) Sg P1 => "fio" ; + VPass (VPres VInd) Pl P3 => "fiunt" ; + VPass (VPres VInd) n p => "fi" + actPresEnding n p ; + VPass (VPres VConj) n p => "fia" + actPresEnding n p ; + VPass (VImpf VInd) n p => "fieba" + actPresEnding n p ; + VPass (VImpf VConj) n p => "fiere" + actPresEnding n p ; + VPass VFut Sg P1 => "fiam" ; + VPass VFut n p => "fie" + actPresEnding n p + } ; + ger = + verb.ger ; + geriv = + verb.geriv ; + imp = + table { + VImp1 Sg => "fac" ; + i => verb.imp ! i + } ; + inf = + table { + VInfActFut Masc => "facturus" ; + VInfActFut Fem => "factura" ; + VInfActFut Neutr => "facturum" ; + VInfPassPres => "fieri" ; + VInfPassPerf Masc => "factus" ; + VInfPassPerf Fem => "facta" ; + i => verb.inf ! i + }; + part = + verb.part ; + sup = + table { + VSupAcc => "factum" ; + VSupAbl => "factu" + } ; + } ; + + give_V = + let + pres_stem = "da" ; + pres_ind_base = "da" ; + pres_conj_base = "de" ; + impf_ind_base = "daba" ; + impf_conj_base = "dare" ; + fut_I_base = "dabi" ; + imp_base = "da" ; + perf_stem = "ded" ; + perf_ind_base = "ded" ; + perf_conj_base = "dederi" ; + pqperf_ind_base = "dedera" ; + pqperf_conj_base = "dedisse" ; + fut_II_base = "dederi" ; + part_stem = "dat" ; + verb = mkVerb "dare" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base + imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ; + in + { + act = verb.act ; + pass = + verb.pass ; + ger = + verb.ger ; + geriv = + verb.geriv ; + imp = + verb.imp ; + inf = verb.inf ; + part = + verb.part ; + sup = + verb.sup ; + } ; + } diff --git a/src/latin/IrregLatAbs.gf b/src/latin/IrregLatAbs.gf index 5264e0557..e8821536d 100644 --- a/src/latin/IrregLatAbs.gf +++ b/src/latin/IrregLatAbs.gf @@ -1,11 +1,14 @@ abstract IrregLatAbs = Cat ** { fun be_V : V ; - can_VV : VV ; + can_V : V ; bring_V : V ; want_V : V ; go_V : V; become_V : V; rain_V : V; hate_V : V; + not8want_V : V ; + make_V : V ; + give_V : V ; } diff --git a/src/latin/LangLat.gf b/src/latin/LangLat.gf index a8afb6b63..09e9d919d 100644 --- a/src/latin/LangLat.gf +++ b/src/latin/LangLat.gf @@ -3,8 +3,8 @@ concrete LangLat of Lang = GrammarLat, ParadigmsLat, --- ConjunctionLat, LexiconLat +-- ConstructionLat ** { flags startcat = Phr ; unlexer = text ; lexer = text ; diff --git a/src/latin/LexiconLat.gf b/src/latin/LexiconLat.gf index b8f49d6c8..4e1018133 100644 --- a/src/latin/LexiconLat.gf +++ b/src/latin/LexiconLat.gf @@ -19,19 +19,21 @@ concrete LexiconLat of Lexicon = CatLat ** open NounLat, AdjectiveLat, VerbLat, - Prelude in { + Prelude, + ExtraLat + in { flags optimize=values ; coding = utf8; lin airplane_N = mkN "aeroplanum" ; -- -i n. (http://la.wikipedia.org/wiki/A%C3%ABroplanum / Pons) - answer_V2S = mkV2S ( mkV "respondere" ) R.Dat_Prep ; -- -spondeo, -spondi, -sponsum 2 (Langenscheidts) alicui; ad, contra, adversus aliquid (Stowasser) + answer_V2S = mkV2S ( mkV "respondere" ) Dat_Prep ; -- -spondeo, -spondi, -sponsum 2 (Langenscheidts) alicui; ad, contra, adversus aliquid (Stowasser) apartment_N = mkN "domicilium" ; -- -i n. (Langenscheidts) apple_N = mkN "malum" ; -- -i n. (Langenscheidts) art_N = mkN "ars" "artis" feminine ; -- Ranta; artis f. (Langenscheidts) - ask_V2Q = mkV2Q ( mkV "rogare" ) R.Acc_Prep ; -- rogo 1 (Langenscheidts) aliquem aliquid (Stowasser) - baby_N = mkN "infans" "infantis" ( variants { feminine ; masculine } ); -- Ranta; -antis m./f. (Langenscheidts) + ask_V2Q = mkV2Q ( mkV "rogare" ) Acc_Prep ; -- rogo 1 (Langenscheidts) aliquem aliquid (Stowasser) + baby_N = mkN "infans" "infantis" masculine ; -- Ranta; -antis m./f. (Langenscheidts) bad_A = mkA "malus" ; -- Ranta; peior, pessimus 3 (Langenscheidts) bank_N = mkN "argentaria" ; -- -ae f. (http://la.wikipedia.org/wiki/Argentaria / Pons) beautiful_A = mkA "pulcher" ; -- -chra, -chrum (Langenscheidts) @@ -42,16 +44,16 @@ lin bike_N = mkN "birota" ; -- -ae f. (http://la.wikipedia.org/wiki/Birota / Pons) bird_N = mkN "avis" "avis" feminine ; -- Ranta; -is f. (Langenscheidts) black_A = mkA "niger" ; -- Ranta; -gra, -grum (Langenscheidts) - blue_A = mkA ( variants { "caeruleus" ; "caerulus" } ) ; -- 3 (Langenscheidts) + blue_A = mkA "caerulus" ; -- 3 (Langenscheidts) boat_N = mkN "navicula" ; -- -ae f. (Langenscheidts) book_N = mkN "liber"; -- Ranta; -bri m. (Langenscheidts) boot_N = mkN "calceus" ; -- -i m. (Langenscheidts) - boss_N = mkN "dux" "ducis" ( variants { feminine ; masculine } ) ; -- ducis m./f. (Langenscheidts) + boss_N = mkN "dux" "ducis" masculine ; -- ducis m./f. (Langenscheidts) boy_N = mkN "puer" "pueri" masculine ; -- -eri m. (Langenscheidts) - bread_N = variants { (mkN "panis" "panis" masculine ) ; (mkN "pane" "panis" neuter ) } ; -- -is m./n. (Langenscheidts) + bread_N = mkN "panis" "panis" masculine ; -- -is m./n. (Langenscheidts) break_V2 = mkV2 ( mkV "rumpere" "rumpo" "rupi" "ruptum" ) ; -- Ranta; 3 (Langenscheidts) aliquem (Bayer-Lindauer 110) broad_A = mkA "latus" ; -- 3 (Langenscheidts) - brother_N2 = mkN2 ( mkN "frater" "fratris" masculine ) R.Gen_Prep; -- -tris m. (Langenscheidts) alicuius (Bayer-Lindauer 125.2) + brother_N2 = mkN2 ( mkN "frater" "fratris" masculine ) Gen_Prep; -- -tris m. (Langenscheidts) alicuius (Bayer-Lindauer 125.2) brown_A = mkA "fulvus" ; -- 3 (Langenscheidts) butter_N = mkN "butyrum" ; -- -i n. (http://la.wikipedia.org/wiki/Butyrum / Pons) buy_V2 = mkV2 (mkV "emere") ; -- emo, emi, emptum 3 (Langenscheidts) (Stowasser) ab, de aliquo (Stowasser) @@ -60,7 +62,7 @@ lin cap_N = mkN "galerus" ; -- -i m. (Langenscheidts) car_N = mkN "autoreada" ; -- -ae f. (Pons / http://la.wikipedia.org/wiki/Autocinetum) carpet_N = mkN "stragulum" ; -- -i n. (Pons / http://la.wikipedia.org/wiki/Teges_pavimenti) - cat_N = mkN ( variants {"feles" ; "felis" } ) "felis" feminine ; -- -is f. (Langenscheidts) + cat_N = mkN "feles" "felis" feminine ; -- -is f. (Langenscheidts) ceiling_N = mkN "tegimentum" ; -- -i n. (Langenscheidts) chair_N = mkN "sedes" "sedis" feminine; -- -is f. (Langenscheidts) cheese_N = mkN "caseus" ; -- -i m. (Langenscheidts) @@ -75,29 +77,29 @@ lin come_V = mkV "venire" ; -- veno, veni, ventum 4 (Langenscheidts) computer_N = mkN "computatrum" ; -- -i n. (http://la.wikipedia.org/wiki/Computatrum / Pons) country_N = mkN "terra" ; -- -ae f. (Langenscheidts) - cousin_N = mkN ( variants {"consobrinus" ; "consobrina" } ) ; -- -i/-ae m./f. (Langenscheidts) - cow_N = mkN "bos" "bovis" ( variants { feminine ; masculine } ) ; -- bovis (gen. pl. boum, dat./abl. pl. bobus/bubus) m./f. (Langenscheidts) + cousin_N = mkN "consobrinus" ; -- -i/-ae m./f. (Langenscheidts) + cow_N = mkN "bos" "bovis" masculine ; -- bovis (gen. pl. boum, dat./abl. pl. bobus/bubus) m./f. (Langenscheidts) die_V = mkV "mori" "mortuus" "morturus"; -- morior, mortuus sum, morturus (Langenscheidts) dirty_A = mkA "sordidus" ; -- 3 (Langenscheidts) distance_N3 = mkN3 (mkN "distantia") from_Prep to_Prep ; -- -ae f. (Langenscheidts) ab, ad aliquem; alicuius; aliquem (???) doctor_N = mkN "medicus" ; -- -i m. (Langenscheidts) - dog_N = mkN "canis" "canis" ( variants { masculine ; feminine } ) ; -- -is m./f. (Langenscheidts) + dog_N = mkN "canis" "canis" masculine ; -- -is m./f. (Langenscheidts) door_N = mkN "porta" ; -- -ae f. (Langenscheidts) drink_V2 = mkV2 (mkV "bibere") ; -- bibo, potum 3 (Langenscheidts) aliquem (Bayer-Lindauer 110) easy_A2V = mkA2V (mkA "facilis" "facile" ) for_Prep ; -- -e sup -illimus (Langenscheidts) eat_V2 = mkV2 (mkV "cenare") ; -- ceno 1 (Langenscheidts) aliquem (Bayer-Lindauer 110) empty_A = mkA "vacuus" ; -- 3 (Langenscheidts) - enemy_N = mkN "hostis" "hostis" ( variants { masculine ; feminine } ) ; -- -is m./f. (Langenscheidts) + enemy_N = mkN "hostis" "hostis" masculine ; -- -is m./f. (Langenscheidts) factory_N = mkN "officina" ; -- -ae f. (Langenscheidts) - father_N2 = mkN2 (mkN "pater" "patris" masculine ) R.Gen_Prep ; -- -tris m. gen pl -um (Langenscheidts) alicuius (Bayer-Lindauer 125.2) + father_N2 = mkN2 (mkN "pater" "patris" masculine ) Gen_Prep ; -- -tris m. gen pl -um (Langenscheidts) alicuius (Bayer-Lindauer 125.2) fear_VS = mkVS (mkV "timere") ; -- timeo, timui, --- 2 (Langenscheidts) find_V2 = mkV2 (mkV "reperire") ; -- reperio, repperi, repertum 4 (Langenscheidts) aliquem fish_N = mkN "piscis" "piscis" masculine ; -- -is m. (Langenscheidts) floor_N = mkN "pavimentum" ; -- -i n. (Langenscheidts) forget_V2 = mkV2 (mkV "oblivisci" "obliviscor" "oblitus" ) ; -- obliscor, oblitus sum 3 (Langenscheidts) fridge_N = mkN "frigidarium" ; -- --i n. (Pons / http://la.wikipedia.org/wiki/Armarium_frigidarium) - friend_N = mkN ( variants { "amicus" ; "amica" } ) ; -- -i/-ae m./f. (Langenscheidts) + friend_N = mkN "amicus" ; -- -i/-ae m./f. (Langenscheidts) fruit_N = mkN "fructus" "fructus" masculine; -- -us m. (Langenscheidts) fun_AV = mkAV (mkA "iocosus") ; -- 3 (Langenscheidts) garden_N = mkN "hortus" ; -- -i m. (Langenscheidts) @@ -108,7 +110,7 @@ lin go_V = IrregLat.go_V ; -- eo, i(v)i, itum (Langenscheidts) green_A = mkA "viridis" "viride"; -- -e (Langenscheidts) harbour_N = mkN "portus" "portus" masculine ; -- -us m. (Langenscheidts) - hate_V2 = mkV2 IrregLat.hate_V R.Acc_Prep ; -- odi, osurus/odivi (Langenscheidts) + hate_V2 = mkV2 IrregLat.hate_V Acc_Prep ; -- odi, osurus/odivi (Langenscheidts) hat_N = mkN "petasus" ; -- -i m. (Langenscheidts) hear_V2 = mkV2 (mkV "audire") ; -- 4 (Langenscheidts) hill_N = mkN "collis" "collis" masculine ; -- -is m. (Langenscheidts) @@ -141,7 +143,7 @@ lin meat_N = mkN "carnis" "carnis" feminine ; -- -is f. (Langenscheidts) milk_N = mkN "lac" "lactis" neuter ; -- -- lactis n. (Langenscheidts) moon_N = mkN "luna" ; -- -ae f. (Langenscheidts) - mother_N2 = mkN2 ( mkN "mater" "matris" feminine ) R.Gen_Prep ; -- matris f. (Langenscheidts) + mother_N2 = mkN2 ( mkN "mater" "matris" feminine ) Gen_Prep ; -- matris f. (Langenscheidts) mountain_N = mkN "mons" "montis" masculine ; -- montis m. (Langenscheidts) music_N = mkN "musica" ; -- -ae f. L.. narrow_A = mkA "angustus" ; -- 3 (Langenscheidts) @@ -150,7 +152,7 @@ lin oil_N = mkN "oleum" ; -- -i n. (Langenscheidts) old_A = mkA "vetus" "veteris"; -- (Langenscheidts) open_V2 = mkV2 (mkV "aperire") ; -- aperio, aperui, apertum 4 (Langenscheidts) - paint_V2A = mkV2A (mkV "pingere" "pingo" "pinxi" "pictum" ) R.Acc_Prep ; -- pingo, pinxi, pictum 3 (Langenscheidts) + paint_V2A = mkV2A (mkV "pingere" "pingo" "pinxi" "pictum" ) Acc_Prep ; -- pingo, pinxi, pictum 3 (Langenscheidts) paper_N = mkN "charta" ; -- -ae f. (http://la.wikipedia.org/wiki/Charta / Pons) paris_PN = mkPN (mkN "Lutetia") ; -- -ae f. (http://la.wikipedia.org/wiki/Lutetia) peace_N = mkN "pax" "pacis" feminine ; -- pacis f. (Langenscheidts) @@ -158,8 +160,8 @@ lin planet_N = mkN "planeta" ; -- -ae m. (http://la.wikipedia.org/wiki/Planeta) plastic_N = mkN "plastica" "plasticae" feminine ; -- -ae f. (http://la.wikipedia.org/wiki/Plasticum) play_V2 = mkV2 (mkV "ludere") ; -- ludo, lusi, lusum 3 (Langenscheidts) - policeman_N = mkN "custos" "custodis" ( variants { masculine ; feminine } ) ; -- -odis m./f. (Langenscheidts) - priest_N = mkN "sacerdos" "sacerdotis" ( variants { masculine ; feminine } ) ; -- -dotis m./f. (Langenscheidts) + policeman_N = mkN "custos" "custodis" masculine ; -- -odis m./f. (Langenscheidts) + priest_N = mkN "sacerdos" "sacerdotis" masculine ; -- -dotis m./f. (Langenscheidts) probable_AS = mkAS (mkA "verisimilis" "verisimile") ; -- -e (Langenscheidts) queen_N = mkN "regina" ; -- -ae f. (Langenscheidts) radio_N = mkN "radiophonum" ; -- -i n. (Pons / http://la.wikipedia.org/wiki/Radiophonia) @@ -180,8 +182,8 @@ lin sea_N = mkN "mare" "maris" neuter ; -- -is n. (Langenscheidts) seek_V2 = mkV2 (mkV "quaerere" "quaero" "quaesivi" "quaesitum" ) ; -- quaero, quaesivi, quaesitum 3 (Langenscheidts) see_V2 = mkV2 (mkV "videre") ; -- video, vidi, visum 2 (Langenscheidts) - sell_V3 = mkV3 ( mkV "vendere" "vendo" "vendidi" "venditum" ) R.Acc_Prep R.Dat_Prep ; -- vendo, vendidi, venditum 3 (Langenscheidts) - send_V3 = mkV3 ( mkV "mittere" "mitto" "misi" "missum" ) R.Acc_Prep R.Dat_Prep ; -- mitto, misi, missum 3 (Langenscheidts) + sell_V3 = mkV3 ( mkV "vendere" "vendo" "vendidi" "venditum" ) Acc_Prep Dat_Prep ; -- vendo, vendidi, venditum 3 (Langenscheidts) + send_V3 = mkV3 ( mkV "mittere" "mitto" "misi" "missum" ) Acc_Prep Dat_Prep ; -- mitto, misi, missum 3 (Langenscheidts) sheep_N = mkN "ovis" "ovis" feminine ; -- -is f. (Langenscheidts) ship_N = mkN "navis" "navis" feminine ; -- -is f. acc. -em (-im) abl meist -i (Langenscheidts) shirt_N = mkN "tunica" ; -- -ae f. (Langenscheidts) @@ -193,20 +195,20 @@ lin -- sleep_V = mkV "dormio" "dormivi" "dormitus" "dormire" ; -- Ranta; sleep_V = mkV "dormire" ; -- 4 (Langenscheidts) small_A = mkA "parvus" ; -- 3 (Langenscheidts) - snake_N = mkN "serpens" "serpentis" ( variants { masculine ; feminine } ) ; -- -entis m./f. (Langenscheidts) + snake_N = mkN "serpens" "serpentis" masculine ; -- -entis m./f. (Langenscheidts) sock_N = mkN "impile" "impilis" masculine ; -- -is n. (Pons) speak_V2 = mkV2 (mkV "loqui" "loquor" "locutus" ) ; -- loquor, locutus sum 3 (Langenscheidts) star_N = mkN "stella" ; -- -ae f. (Langenscheidts) steel_N = mkN "chalybs" "chalybis" masculine ; -- chalybis m. (Langenscheidts) stone_N = mkN "lapis" "lapidis" masculine ; -- -idis m. (Langenscheidts) stove_N = mkN "fornax" "formacis" feminine ; -- -acis f. (Langenscheidts) - student_N = mkN ( variants { "discipulus"; "discipula" } ) ; -- -i/-ae m./f. (Langenscheidts) + student_N = mkN "discipulus"; -- -i/-ae m./f. (Langenscheidts) stupid_A = mkA "stultus" ; -- 3 (Langenscheidts) sun_N = mkN "sol" "solis" masculine ; -- solis m. (Langenscheidts) switch8off_V2 = mkV2 (mkV "accendere") ; -- -cendo, -cendi, -censum 3 (Langenscheidts) - switch8on_V2 = mkV2 (mkV ( variants { "exstinguere" ; "extinguere" } ) ); -- -ingo, -inxi, -inctum 3 (Langenscheidts) + switch8on_V2 = mkV2 (mkV "extinguere" ); -- -ingo, -inxi, -inctum 3 (Langenscheidts) table_N = mkN "mensa" ; -- -ae f. (Langenscheidts) - talk_V3 = mkV3 ( lin V speak_V2 ) R.Dat_Prep R.Acc_Prep ; + talk_V3 = mkV3 ( lin V speak_V2 ) Dat_Prep Acc_Prep ; teacher_N = mkN "magister" "magistri" masculine ; -- -tri m. (Langenscheidts) teach_V2 = mkV2 (mkV "docere") ; -- doceo, docui, doctum 2 (Langenscheidts) television_N = mkN "televisio" "televisionis" feminine ; -- -onis f. (Pons) @@ -230,7 +232,7 @@ lin white_A = mkA "albus" ; -- 3 (Langenscheidts) window_N = mkN "fenestra" ; -- -ae f. (Langenscheidts) wine_N = mkN "vinum" ; -- -i n. (Langenscheidts) - win_V2 = mkV2 (mkV "vincere") ; -- vinco, vici, victum 3 (Langenscheidts) + win_V2 = mkV2 (mkV "vincere" "vinco" "vinxi" "victum") ; -- vinco, vici, victum 3 (Langenscheidts) woman_N = mkN "femina" ; -- -ae f. (Langenscheidts) wonder_VQ = mkVQ (mkV "mirari") ; -- 1 (Langenscheidts) wood_N = mkN "lignum" ; -- -i n. (Langenscheidts) @@ -242,14 +244,14 @@ lin now_Adv = mkAdv "nunc" ; -- (Langenscheidts) already_Adv = mkAdv "iam" ; -- (Langenscheidts) song_N = mkN "carmen" "carminis" neuter ; -- -inis n. (Langenscheidts) - add_V3 = mkV3 ( mkV "addere" "addo" "addidi" "additum" ) R.Acc_Prep R.to_P ; -- addo, addidi, additum 3 (Langenscheidts) + add_V3 = mkV3 ( mkV "addere" "addo" "addidi" "additum" ) Acc_Prep to_Prep ; -- addo, addidi, additum 3 (Langenscheidts) number_N = mkN "numerus" ; -- -i m. put_V2 = mkV2 (mkV "ponere" "pono" "posui" "positum" ) ; -- pono, posui, positum 3 (Langenscheidts) stop_V = mkV "sistere" "sisto" "steti" "statum" ; -- sisto, stiti/steti, statum 3 (Langenscheidts) jump_V = mkV "saltare" ; -- 1 (Langenscheidts) - left_Ord = ss "sinister" ; -- -tra, -trum (Langenscheidts) - right_Ord = ss "dexter" ; -- -t(e)ra, -t(e)rum (Langenscheidts) + left_Ord = lin Ord { s = \\g,n,c => (mkA "sinister").s ! R.Posit ! R.Ag g n c } ; -- -tra, -trum (Langenscheidts) + right_Ord = lin Ord { s = \\g,n,c => (mkA "dexter").s ! R.Posit ! R.Ag g n c } ; -- -t(e)ra, -t(e)rum (Langenscheidts) far_Adv = mkAdv "longe" ; -- (Langenscheidts) correct_A = mkA "rectus" ; -- 3 (Langenscheidts) dry_A = mkA "aridus" ; -- 3 (Langenscheidts) @@ -267,13 +269,13 @@ lin animal_N = mkN "animal" "animalis" neuter ; -- -alis n. (Langenscheidts) ashes_N = mkN "cinis" "cineris" masculine ; -- -eris m. (Langenscheidts) & Bayer-Lindauer 33 1.2 back_N = mkN "tergum" ; -- -i n. (Langenscheidts) - bark_N = mkN "cortex" "corticis" ( variants { masculine ; feminine } ) ; -- -icis m./(f.) (Langenscheidts) + bark_N = mkN "cortex" "corticis" masculine ; -- -icis m./(f.) (Langenscheidts) belly_N = mkN "venter" "ventris" masculine ; -- -tris m. (Langenscheidts) - blood_N = variants { mkN "sanguis" "sanguinis" masculine ; mkN "sangis" "sanginis" masculine} ; -- -inis m. (Langenscheidts) + blood_N = mkN "sanguis" "sanguinis" masculine ; -- -inis m. (Langenscheidts) bone_N = mkN "os" "ossis" neuter ; -- ossis n. (Langenscheidts) breast_N = mkN "pectus""pectoris" neuter ; -- pectoris n. (Langenscheidts) cloud_N = mkN "nubes" "nubis" feminine ; -- -is f. (Langenscheidts) - day_N = mkN "dies" "diei" ( variants { masculine ; feminine } ) ; -- -ei m./f. (Langenscheidts) + day_N = mkN "dies" "diei" masculine ; -- -ei m./f. (Langenscheidts) dust_N = mkN "pulvis" "pulveris" masculine; -- -veris m. (Langenscheidts) ear_N = mkN "auris" "auris" feminine; -- -is f. (Langenscheidts) earth_N = mkN "terra" ; -- -ae f. (Langenscheidts) @@ -293,32 +295,32 @@ lin hand_N = mkN "manus" "manus" feminine ; -- -us f. (Langenscheidts) head_N = mkN "caput" "capitis" neuter ; -- -itis n. (Langenscheidts) heart_N = mkN "cor" "cordis" neuter; -- cordis n. (Langenscheidts) - horn_N = mkN ( variants { "cornu" ; "cornus" } ) "cornus" neuter ; -- -us n. (Langenscheidts) + horn_N = mkN "cornus" "cornus" neuter ; -- -us n. (Langenscheidts) husband_N = mkN "maritus" ; -- -i m. (Langenscheidts) ice_N = mkN "glacies" "glaciei" feminine ; -- -ei f. (Langenscheidts) knee_N = mkN "genu" "genus" neuter ; -- -us n. (Langenscheidts) leaf_N = mkN "folium" ; -- -i n. (Langenscheidts) leg_N = bone_N ; - liver_N = variants { ( mkN "iecur" "iecoris" neuter ) ; ( mkN "iocur" "iocineris" neuter ) } ; -- iecoris/iocineris n. (Langenscheidts) - louse_N = mkN "pedis" "pedis" ( variants { masculine ; feminine } ) ; -- -is m./f. (Langenscheidts) + liver_N = mkN "iecur" "iecoris" neuter ; -- iecoris/iocineris n. (Langenscheidts) + louse_N = mkN "pedis" "pedis" masculine ; -- -is m./f. (Langenscheidts) mouth_N = mkN "os" "oris" neuter ; -- oris n. (Langenscheidts) name_N = mkN "nomen" "nominis" neuter ; -- -inis n. (Langenscheidts) neck_N = mkN "cervix" "cervicis" feminine ; -- -icis f. (meist pl.) (Langenscheidts) night_N = mkN "nox" "noctis" feminine ; -- noctis f. (Langenscheidts) - nose_N = mkN ( variants { "nasus" ; "nasum" } ) ; -- -i m./n. (Langenscheidts) + nose_N = mkN "nasus" ; -- -i m./n. (Langenscheidts) person_N = mkN "persona" ; -- -ae f. (Langenscheidts) rain_N = mkN "pluvia" ; -- -ae f. (Langenscheidts) road_N = mkN "via" ; -- -ae f. (Langenscheidts) root_N = mkN "radix" "radicis" feminine ; -- -icis f. (Langenscheidts) - rope_N = mkN "funis" "funis" ( variants { masculine ; feminine } ) ; -- -is m.(/f.) (Langenscheidts) - salt_N = mkN "sal" "salis" ( variants { masculine ; neuter } ) ; -- salis m./n. (Langenscheidts) + rope_N = mkN "funis" "funis" masculine ; -- -is m.(/f.) (Langenscheidts) + salt_N = mkN "sal" "salis" masculine ; -- salis m./n. (Langenscheidts) sand_N = mkN "arena" ; -- -ae f. (Langenscheidts) seed_N = mkN "semen" "seminis" neuter ; -- -inis n. (Langenscheidts) skin_N = mkN "cutis" "cutis" feminine ; -- -is f. (Langenscheidts) sky_N = mkN "caelum" ; -- -i n. (Langenscheidts) smoke_N = mkN "fumus" ; -- -i m. (Langenscheidts) snow_N = mkN "nix" "nivis" feminine ; -- nivis (gen. pl. -ium) f. (Langenscheidts) - stick_N = mkN ( variants { "baculum" ; "baculus" } ) ; -- -i n./m. + stick_N = mkN "baculus" ; -- -i n./m. tail_N = mkN "cauda" ; -- -ae f. (Langenscheidts) tongue_N = mkN "lingua" ; -- -ae f. (Langenscheidts) tooth_N = mkN "dens" "dentis" masculine; -- dentis m. (Langenscheidts) diff --git a/src/latin/MissingLat.gf b/src/latin/MissingLat.gf index 1e4256071..cebb075ef 100644 --- a/src/latin/MissingLat.gf +++ b/src/latin/MissingLat.gf @@ -1,39 +1,22 @@ resource MissingLat = open GrammarLat, Prelude in { -- temporary definitions to enable the compilation of RGL API -oper AdAdv : AdA -> Adv -> Adv = notYet "AdAdv" ; oper AdNum : AdN -> Card -> Card = notYet "AdNum" ; -oper AdVVP : AdV -> VP -> VP = notYet "AdVVP" ; -oper AdjOrd : Ord -> AP = notYet "AdjOrd" ; -oper AdnCAdv : CAdv -> AdN = notYet "AdnCAdv" ; oper AdvCN : CN -> Adv -> CN = notYet "AdvCN" ; oper AdvIAdv : IAdv -> Adv -> IAdv = notYet "AdvIAdv" ; oper AdvIP : IP -> Adv -> IP = notYet "AdvIP" ; -oper AdvS : Adv -> S -> S = notYet "AdvS" ; oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ; -oper ApposCN : CN -> NP -> CN = notYet "ApposCN" ; -oper BaseNP : NP -> NP -> ListNP = notYet "BaseNP" ; oper BaseRS : RS -> RS -> ListRS = notYet "BaseRS" ; oper BaseS : S -> S -> ListS = notYet "BaseS" ; -oper CAdvAP : CAdv -> AP -> NP -> AP = notYet "CAdvAP" ; oper CleftAdv : Adv -> S -> Cl = notYet "CleftAdv" ; oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ; -oper CompAdv : Adv -> Comp = notYet "CompAdv" ; -oper CompCN : CN -> Comp = notYet "CompCN" ; oper CompIP : IP -> IComp = notYet "CompIP" ; -oper CompNP : NP -> Comp = notYet "CompNP" ; -oper ComparA : A -> NP -> AP = notYet "ComparA" ; -oper ComparAdvAdj : CAdv -> A -> NP -> Adv = notYet "ComparAdvAdj" ; -oper ComparAdvAdjS : CAdv -> A -> S -> Adv = notYet "ComparAdvAdjS" ; -oper ComplA2 : A2 -> NP -> AP = notYet "ComplA2" ; oper ComplN2 : N2 -> NP -> CN = notYet "ComplN2" ; oper ComplN3 : N3 -> NP -> N2 = notYet "ComplN3" ; -oper ConjNP : Conj -> ListNP -> NP = notYet "ConjNP" ; oper ConjRS : Conj -> ListRS -> RS = notYet "ConjRS" ; -oper ConsNP : NP -> ListNP -> ListNP = notYet "ConsNP" ; +oper ConjS : Conj -> ListS -> S = notYet "ConjS" ; oper ConsRS : RS -> ListRS -> ListRS = notYet "ConsRS" ; oper ConsS : S -> ListS -> ListS = notYet "ConsS" ; -oper DetNP : Det -> NP = notYet "DetNP" ; oper DetQuantOrd : Quant -> Num -> Ord -> Det = notYet "DetQuantOrd" ; oper EmbedQS : QS -> SC = notYet "EmbedQS" ; oper EmbedS : S -> SC = notYet "EmbedS" ; @@ -42,101 +25,132 @@ oper ExistIP : IP -> QCl = notYet "ExistIP" ; oper ExistNP : NP -> Cl = notYet "ExistNP" ; oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ; oper GenericCl : VP -> Cl = notYet "GenericCl" ; -oper IdRP : RP = notYet "IdRP" ; oper IdetCN : IDet -> CN -> IP = notYet "IdetCN" ; oper IdetIP : IDet -> IP = notYet "IdetIP" ; oper IdetQuant : IQuant -> Num -> IDet = notYet "IdetQuant" ; +oper IdRP : RP = notYet "IdRP" ; +oper ImpersCl : VP -> Cl = notYet "ImpersCl" ; oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ; oper ImpVP : VP -> Imp = notYet "ImpVP" ; -oper ImpersCl : VP -> Cl = notYet "ImpersCl" ; -oper MassNP : CN -> NP = notYet "MassNP" ; -oper NumCard : Card -> Num = notYet "NumCard" ; oper NumDigits : Digits -> Card = notYet "NumDigits" ; -oper NumNumeral : Numeral -> Card = notYet "NumNumeral" ; oper OrdDigits : Digits -> Ord = notYet "OrdDigits" ; -oper OrdNumeral : Numeral -> Ord = notYet "OrdNumeral" ; oper OrdSuperl : A -> Ord = notYet "OrdSuperl" ; -oper PPartNP : NP -> V2 -> NP = notYet "PPartNP" ; -oper PassV2 : V2 -> VP = notYet "PassV2" ; -oper PositAdvAdj : A -> Adv = notYet "PositAdvAdj" ; oper PossPron : Pron -> Quant = notYet "PossPron" ; +oper pot1 : Digit -> Sub100 = notYet "pot1" ; +oper pot110 : Sub100 = notYet "pot110" ; +oper pot111 : Sub100 = notYet "pot111" ; +oper pot1plus : Digit -> Sub10 -> Sub100 = notYet "pot1plus" ; +oper pot1to19 : Digit -> Sub100 = notYet "pot1to19" ; +oper pot2 : Sub10 -> Sub1000 = notYet "pot2" ; +oper pot2plus : Sub10 -> Sub100 -> Sub1000 = notYet "pot2plus" ; +oper pot3 : Sub1000 -> Sub1000000 = notYet "pot3" ; +oper pot3plus : Sub1000 -> Sub1000 -> Sub1000000 = notYet "pot3plus" ; +oper PPartNP : NP -> V2 -> NP = notYet "PPartNP" ; oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ; -oper PredetNP : Predet -> NP -> NP = notYet "PredetNP" ; oper PrepIP : Prep -> IP -> IAdv = notYet "PrepIP" ; oper ProgrVP : VP -> VP = notYet "ProgrVP" ; -oper ReflA2 : A2 -> AP = notYet "ReflA2" ; +oper QuestCl : Cl -> QCl = notYet "QuestCl" ; +oper QuestIAdv : IAdv -> Cl -> QCl = notYet "QuestIAdv" ; +oper QuestIComp : IComp -> NP -> QCl = notYet "QuestIComp" ; +oper QuestSlash : IP -> ClSlash -> QCl = notYet "QuestSlash" ; +oper QuestVP : IP -> VP -> QCl = notYet "QuestVP" ; oper ReflVP : VPSlash -> VP = notYet "ReflVP" ; -oper RelCN : CN -> RS -> CN = notYet "RelCN" ; oper RelCl : Cl -> RCl = notYet "RelCl" ; -oper RelNP : NP -> RS -> NP = notYet "RelNP" ; +oper RelCN : CN -> RS -> CN = notYet "RelCN" ; oper RelSlash : RP -> ClSlash -> RCl = notYet "RelSlash" ; oper RelVP : RP -> VP -> RCl = notYet "RelVP" ; -oper SentAP : AP -> SC -> AP = notYet "SentAP" ; oper SentCN : CN -> SC -> CN = notYet "SentCN" ; -oper Slash2V3 : V3 -> NP -> VPSlash = notYet "Slash2V3" ; oper SlashV2S : V2S -> S -> VPSlash = notYet "SlashV2S" ; oper SlashV2V : V2V -> VP -> VPSlash = notYet "SlashV2V" ; oper SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash = notYet "SlashV2VNP" ; oper SlashVS : NP -> VS -> SSlash -> ClSlash = notYet "SlashVS" ; oper SlashVV : VV -> VPSlash -> VPSlash = notYet "SlashVV" ; oper Use2N3 : N3 -> N2 = notYet "Use2N3" ; -oper UseComparA : A -> AP = notYet "UseComparA" ; +oper UseQCl : Temp -> Pol -> QCl -> QS = notYet "UseQCl" ; oper UseRCl : Temp -> Pol -> RCl -> RS = notYet "UseRCl" ; oper UseSlash : Temp -> Pol -> ClSlash -> SSlash = notYet "UseSlash" ; -oper UttAP : AP -> Utt = notYet "UttAP" ; -oper UttAdv : Adv -> Utt = notYet "UttAdv" ; -oper UttCN : CN -> Utt = notYet "UttCN" ; -oper UttCard : Card -> Utt = notYet "UttCard" ; -oper UttIAdv : IAdv -> Utt = notYet "UttIAdv" ; -oper UttIP : IP -> Utt = notYet "UttIP" ; -oper UttImpPl : Pol -> Imp -> Utt = notYet "UttImpPl" ; -oper UttImpPol : Pol -> Imp -> Utt = notYet "UttImpPol" ; -oper UttImpSg : Pol -> Imp -> Utt = notYet "UttImpSg" ; -oper UttNP : NP -> Utt = notYet "UttNP" ; -oper UttVP : VP -> Utt = notYet "UttVP" ; -oper n2 : Digit = notYet "n2" ; -oper n3 : Digit = notYet "n3" ; -oper n4 : Digit = notYet "n4" ; -oper n5 : Digit = notYet "n5" ; -oper n6 : Digit = notYet "n6" ; -oper n7 : Digit = notYet "n7" ; -oper n8 : Digit = notYet "n8" ; -oper n9 : Digit = notYet "n9" ; -oper num : Sub1000000 -> Numeral = notYet "num" ; -oper pot0 : Digit -> Sub10 = notYet "pot0" ; -oper pot01 : Sub10 = notYet "pot01" ; -oper pot0as1 : Sub10 -> Sub100 = notYet "pot0as1" ; +oper AddAdvQVP : QVP -> IAdv -> QVP = notYet "AddAdvQVP" ; +oper AdjDAP : DAP -> AP -> DAP = notYet "AdjDAP" ; +oper AdNum : AdN -> Card -> Card = notYet "AdNum" ; +oper AdvCN : CN -> Adv -> CN = notYet "AdvCN" ; +oper AdvIAdv : IAdv -> Adv -> IAdv = notYet "AdvIAdv" ; +oper AdvIP : IP -> Adv -> IP = notYet "AdvIP" ; +oper AdvQVP : VP -> IAdv -> QVP = notYet "AdvQVP" ; +oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ; +oper BaseAdV : AdV -> AdV -> ListAdV = notYet "BaseAdV" ; +oper BaseCN : CN -> CN -> ListCN = notYet "BaseCN" ; +oper BaseDAP : DAP -> DAP -> ListDAP = notYet "BaseDAP" ; +oper BaseIAdv : IAdv -> IAdv -> ListIAdv = notYet "BaseIAdv" ; +oper BaseRS : RS -> RS -> ListRS = notYet "BaseRS" ; +oper BaseS : S -> S -> ListS = notYet "BaseS" ; +oper CompIP : IP -> IComp = notYet "CompIP" ; +oper ComplN2 : N2 -> NP -> CN = notYet "ComplN2" ; +oper ComplN3 : N3 -> NP -> N2 = notYet "ComplN3" ; +oper ComplSlashIP : VPSlash -> IP -> QVP = notYet "ComplSlashIP" ; +oper ConjAdV : Conj -> ListAdV -> AdV = notYet "ConjAdV" ; +oper ConjCN : Conj -> ListCN -> CN = notYet "ConjCN" ; +oper ConjDet : Conj -> ListDAP -> Det = notYet "ConjDet" ; +oper ConjIAdv : Conj -> ListIAdv -> IAdv = notYet "ConjIAdv" ; +oper ConjRS : Conj -> ListRS -> RS = notYet "ConjRS" ; +oper ConjS : Conj -> ListS -> S = notYet "ConjS" ; +oper ConsAdV : AdV -> ListAdV -> ListAdV = notYet "ConsAdV" ; +oper ConsCN : CN -> ListCN -> ListCN = notYet "ConsCN" ; +oper ConsDAP : DAP -> ListDAP -> ListDAP = notYet "ConsDAP" ; +oper ConsIAdv : IAdv -> ListIAdv -> ListIAdv = notYet "ConsIAdv" ; +oper ConsRS : RS -> ListRS -> ListRS = notYet "ConsRS" ; +oper ConsS : S -> ListS -> ListS = notYet "ConsS" ; +oper CountNP : Det -> NP -> NP = notYet "CountNP" ; +oper DetDAP : Det -> DAP = notYet "DetDAP" ; +oper DetQuantOrd : Quant -> Num -> Ord -> Det = notYet "DetQuantOrd" ; +oper EmbedQS : QS -> SC = notYet "EmbedQS" ; +oper EmbedS : S -> SC = notYet "EmbedS" ; +oper EmbedVP : VP -> SC = notYet "EmbedVP" ; +oper ExtAdvS : Adv -> S -> S = notYet "ExtAdvS" ; +oper ExtAdvVP : VP -> Adv -> VP = notYet "ExtAdvVP" ; +oper IdetCN : IDet -> CN -> IP = notYet "IdetCN" ; +oper IdetIP : IDet -> IP = notYet "IdetIP" ; +oper IdetQuant : IQuant -> Num -> IDet = notYet "IdetQuant" ; +oper ImpVP : VP -> Imp = notYet "ImpVP" ; +oper NumDigits : Digits -> Card = notYet "NumDigits" ; +oper OrdDigits : Digits -> Ord = notYet "OrdDigits" ; +oper OrdNumeralSuperl : Numeral -> A -> Ord = notYet "OrdNumeralSuperl" ; +oper OrdSuperl : A -> Ord = notYet "OrdSuperl" ; +oper PartNP : CN -> NP -> CN = notYet "PartNP" ; +oper PossNP : CN -> NP -> CN = notYet "PossNP" ; +oper PossPron : Pron -> Quant = notYet "PossPron" ; oper pot1 : Digit -> Sub100 = notYet "pot1" ; oper pot110 : Sub100 = notYet "pot110" ; oper pot111 : Sub100 = notYet "pot111" ; -oper pot1as2 : Sub100 -> Sub1000 = notYet "pot1as2" ; oper pot1plus : Digit -> Sub10 -> Sub100 = notYet "pot1plus" ; oper pot1to19 : Digit -> Sub100 = notYet "pot1to19" ; oper pot2 : Sub10 -> Sub1000 = notYet "pot2" ; -oper pot2as3 : Sub1000 -> Sub1000000 = notYet "pot2as3" ; oper pot2plus : Sub10 -> Sub100 -> Sub1000 = notYet "pot2plus" ; oper pot3 : Sub1000 -> Sub1000000 = notYet "pot3" ; oper pot3plus : Sub1000 -> Sub1000 -> Sub1000000 = notYet "pot3plus" ; +oper PPartNP : NP -> V2 -> NP = notYet "PPartNP" ; +oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ; +oper PrepIP : Prep -> IP -> IAdv = notYet "PrepIP" ; +oper QuestCl : Cl -> QCl = notYet "QuestCl" ; +oper QuestIAdv : IAdv -> Cl -> QCl = notYet "QuestIAdv" ; +oper QuestIComp : IComp -> NP -> QCl = notYet "QuestIComp" ; +oper QuestQVP : IP -> QVP -> QCl = notYet "QuestQVP" ; +oper QuestSlash : IP -> ClSlash -> QCl = notYet "QuestSlash" ; +oper QuestVP : IP -> VP -> QCl = notYet "QuestVP" ; +oper ReflVP : VPSlash -> VP = notYet "ReflVP" ; +oper RelCN : CN -> RS -> CN = notYet "RelCN" ; +oper RelS : S -> RS -> S = notYet "RelS" ; +oper SentCN : CN -> SC -> CN = notYet "SentCN" ; +oper SlashV2S : V2S -> S -> VPSlash = notYet "SlashV2S" ; +oper SlashV2V : V2V -> VP -> VPSlash = notYet "SlashV2V" ; +oper SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash = notYet "SlashV2VNP" ; +oper SlashVS : NP -> VS -> SSlash -> ClSlash = notYet "SlashVS" ; +oper SlashVV : VV -> VPSlash -> VPSlash = notYet "SlashVV" ; +oper SSubjS : S -> Subj -> S -> S = notYet "SSubjS" ; +oper Use2N3 : N3 -> N2 = notYet "Use2N3" ; +oper Use3N3 : N3 -> N2 = notYet "Use3N3" ; +oper UseQCl : Temp -> Pol -> QCl -> QS = notYet "UseQCl" ; +oper UseRCl : Temp -> Pol -> RCl -> RS = notYet "UseRCl" ; +oper UseSlash : Temp -> Pol -> ClSlash -> SSlash = notYet "UseSlash" ; +oper VPSlashPrep : VP -> Prep -> VPSlash = notYet "VPSlashPrep" ; } - -{- -AR 28/3/2017 - -To build: - -$ gf api/TryLat.gf | grep constant | sort -u >missLat.tmp - -$ ghci -Prelude> pgf <- PGF.readPGF "Lang.pgf" -Prelude> ms <- readFile "missLat.tmp" >>= return . map (last . words) . lines -Prelude> let ts = [PGF.showType [] t | m <- ms, Just t <- [PGF.functionType pgf (PGF.mkCId m)]] -Prelude> putStrLn $ unlines ["oper " ++ f ++ " : " ++ t ++ " = notYet \"" ++ f ++ "\" ;" | (f,t) <- zip ms ts] - -To use: - ---# -path=.:alltenses:prelude:../latin -resource ConstructorsLat = Constructors with (Grammar = GrammarLat) ** - open MissingLat in {} - --} \ No newline at end of file diff --git a/src/latin/MissingTranslateLat.gf b/src/latin/MissingTranslateLat.gf new file mode 100644 index 000000000..92e8fcd14 --- /dev/null +++ b/src/latin/MissingTranslateLat.gf @@ -0,0 +1,5 @@ +resource MissingTranslateLat = open GrammarLat, Prelude in { + +-- temporary definitions to enable the compilation of RGL Translate + +} diff --git a/src/latin/MorphoLat.gf b/src/latin/MorphoLat.gf index bfa732ef6..0cf4613c0 100644 --- a/src/latin/MorphoLat.gf +++ b/src/latin/MorphoLat.gf @@ -8,7 +8,7 @@ -- syntax. To build a lexicon, it is better to use $ParadigmsLat$, which -- gives a higher-level access to this module. -resource MorphoLat = ParamX, ResLat ** open Prelude in { +resource MorphoLat = ParamX, ResLat ** open Prelude, Predef in { -- -- flags optimize=all ; -- @@ -149,18 +149,18 @@ oper noun_ngg : Str -> Str -> Gender -> Noun = \verbum,verbi,g -> let s : Noun = case of { - <_ + "a", _ + "ae"> => noun1 verbum ; - <_ + "us", _ + "i"> => noun2us verbum ; - <_ + "um", _ + "i"> => noun2um verbum ; - <_ + ( "er" | "ir" ) , _ + "i"> => noun2er verbum verbi ; - - <_ + "us", _ + "us"> => noun4us verbum ; - <_ + "u", _ + "us"> => noun4u verbum ; - <_ + "es", _ + "ei"> => noun5 verbum ; + <_ + "a" , _ + "ae"> => noun1 verbum ; + <_ + "us" , _ + "i" > => noun2us verbum ; + <_ + "um" , _ + "i" > => noun2um verbum ; + <_ + ( "er" | "ir" ) , _ + "i" > => noun2er verbum verbi ; + <_ + "us" , _ + "us"> => noun4us verbum ; + <_ + "u" , _ + "us"> => noun4u verbum ; + <_ + "es" , _ + "ei"> => noun5 verbum ; + => prefixNoun semi (noun3 "bos" "bovis" Masc) ; _ => noun3 verbum verbi g } in - nounWithGen g s ; + nounWithGender g s ; noun : Str -> Noun = \verbum -> case verbum of { @@ -170,6 +170,7 @@ oper _ + ( "er" | "ir" ) => noun2er verbum ( (Predef.tk 2 verbum) + "ri" ) ; _ + "u" => noun4u verbum ; _ + "es" => noun5 verbum ; + semi + "bos" => prefixNoun semi (noun_ngg "bos" "bovis" Masc) ; _ => Predef.error ("3rd declinsion cannot be applied to just one noun form " ++ verbum) } ; @@ -179,7 +180,7 @@ oper _ + "a" => noun1 verbum ; _ + "us" => noun2us verbum ; _ + "um" => noun2um verbum ; - _ + ( "er" | "ir" ) => + _ + ( "er" | "ir" | "ur" | "tr") => let puer = verbum ; pue = Predef.tk 1 puer ; @@ -189,6 +190,7 @@ oper -- Exception of adjectives where e is part of the word stem 31 3.2 ("asper" | "miser" | "tener" | "frugifer") + _ => "e"; -- "liber" => ( "e" | "" ) ; conflicting with noun liber + _ + "tr" => "t"; _ => "" } ; pu = Predef.tk 1 pue ; @@ -310,6 +312,8 @@ oper -- Usual cases pulch + "er" => pulch + "r" ; bon + "us" => bon ; + cam + "ur" => cam ; + dime + "tr" => bonus ; _ => Predef.error ("adj12 does not apply to" ++ bonus) } ; nbonus = (noun12 bonus) ; @@ -334,9 +338,10 @@ oper (noun1 (bon + "a")) (noun2um (bon + "um")) < compsup.p1 , advs.p1 > - < compsup.p2 , advs.p2 > ; + < compsup.p2 , advs.p2 > + (bon + "o") (bon + "ius") (bon + "issimo") ; - adj3x : (_,_ : Str) -> Adjective = \acer,acris -> + adj3x : (_,_ : Str) -> Adjective = \acer,acris -> -- FISHY?? let ac = Predef.tk 2 acer ; acrise : Str * Str = case acer of { @@ -353,16 +358,104 @@ oper (noun3adj acrise.p2 acris Neutr) < compsuper.p1 , "" > < compsuper.p2 , "" > - ; - + (ac + "riter") (ac + "rius") (ac + "rissimo") ; + + adjgre : Str -> Str -> Str -> Adjective = \bonus,bona,bonum -> + let + first : Str -> Agr => Str = + \stem -> + table { Ag Masc Sg Nom => stem + "os" ; + Ag (Masc | Neutr) Sg Gen => stem + "ou" ; + Ag (Masc | Neutr) Sg Dat => stem + "oi" ; + Ag (Masc | Neutr) Sg Acc => stem + "on" ; + Ag Masc Sg Voc => stem + "e" ; + Ag Fem Sg (Nom | Voc) => stem + "a" ; + Ag Fem Sg Gen => stem + "as" ; + Ag Fem Sg Dat => stem + "ai" ; + Ag Fem Sg Acc => stem + "an" ; + Ag Neutr Sg (Nom | Voc) => stem + "on" ; + Ag Masc Pl (Nom | Voc) => stem + "oi" ; + Ag (Masc | Fem | Neutr) Pl Gen => stem + "on" ; + Ag (Masc | Neutr) Pl Dat => stem + "ois" ; + Ag Masc Pl Acc => stem + "ous" ; + Ag Fem Pl (Nom | Voc) => stem + "ai" ; + Ag Fem Pl Dat => stem + "ais" ; + Ag Fem Pl Acc => stem + "as" ; + Ag Neutr Pl (Nom | Acc | Voc) => stem + "a" ; + Ag _ _ Abl => nonExist + } ; + second : Str -> Agr => Str = + \stem -> + table { Ag (Masc | Fem) Sg Nom => stem + "os" ; + Ag (Masc | Fem | Neutr) Sg Gen => stem + "ou" ; + Ag (Masc | Fem | Neutr) Sg Dat => stem + "oi" ; + Ag (Masc | Fem | Neutr) Sg Acc => stem + "on" ; + Ag (Masc | Fem) Sg Voc => stem + "e" ; + Ag Neutr Sg (Nom | Voc) => stem + "on" ; + Ag (Masc | Fem) Pl (Nom | Voc) => stem + "oi"; + Ag (Masc | Fem | Neutr) Pl Gen => stem + "on" ; + Ag (Masc | Fem | Neutr) Pl Dat => stem + "ois" ; + Ag (Masc | Fem) Pl Acc => stem + "ous" ; + Ag Neutr Pl (Nom | Acc | Voc) => stem + "a" ; + Ag _ _ Abl => nonExist + } ; + third : Str -> Agr => Str = + \stem -> + table { Ag (Masc | Fem | Neutr) Sg (Nom | Voc) => stem + "es" ; + Ag (Masc | Fem | Neutr) Sg Gen => stem + "ous" ; + Ag (Masc | Fem | Neutr) Sg Dat => stem + "ei" ; + Ag (Masc | Fem) Sg Acc => stem + "e" ; + Ag Neutr Sg Acc => stem + "es" ; + Ag (Masc | Fem) Pl (Nom | Acc | Voc) => "eis" ; + Ag (Masc | Fem | Neutr) Pl Gen => "on" ; + Ag (Masc | Fem | Neutr) Pl Dat => "esi" ; + Ag Neutr Pl (Nom | Acc | Voc ) => "e" ; + Ag _ _ Abl => nonExist + } ; + in + { s = case of { + => + table { Posit => first agi ; + Compar => first (agi + "oter") ; + Super => first (agi + "otat") + } ; + => + table { Posit => second arctic ; + Compar => second (arctic + "oter") ; + Super => second (arctic + "otat") + } ; + => + table { Posit => second akapn ; + Compar => second (akapn + "oter") ; + Super => second (akapn + "otat") + } ; + => + table { Posit => third isoscel ; + Compar => first (isoscel + "oter") ; + Super => first (isoscel + "otat") + } ; + => + table { Posit => table { Ag g Sg c => first amethystiz ! Ag g Sg c ; + Ag g Pl c => third amethystiz ! Ag g Sg c + } ; + Compar => \\_ => nonExist ; + Super => \\_ => nonExist + }; + _ => error ("Greek adjective " ++ bonus ++ bona ++ bonum ) -- { s = \\_,_ => "" ; adv = \\_ => ""} ; + } ; + adv = mkAdverb bonus + } ; -- smart paradigms - adj123 : Str -> Str -> Adjective = \bonus,boni -> + adj123 : Str -> Str -> Adjective = \bonus,boni -> case of { <_ + ("us" | "er"), _ + "i" > => adj12 bonus ; <_ + ("us" | "er"), _ + "is"> => adj3x bonus boni ; <_ , _ + "is"> => adj3x bonus boni ; <_ + "is" , _ + "e" > => adj3x bonus boni ; + <_ + "is" , _ + "os"> => adj3x bonus boni ; + -- <_ + "os" , _ + "on"> => adjgre bonus boni boni ; + => adjgre bonus (bon + "ousa") bonus ; _ => Predef.error ("adj123: not applicable to" ++ bonus ++ boni) } ; @@ -372,8 +465,18 @@ oper facil + "is" => adj3x bonus bonus ; feli + "x" => adj3x bonus (feli + "cis") ; _ => adj3x bonus (bonus + "is") ---- any example? - } ; + } ; + adjfull : (bonus,bona,bonum : Str) -> Adjective = \bonus,bona,bonum -> + case of { + <_ + ("er"|"us"|"ur"|"tr"), _ + "a" , _ + "um"> => adj12 bonus ; + <_ + ("er"|"is"), _ + "is" , _ + "e" > => adj3x bonus bonum ; -- FISHY? + <_ + "ior" , _ + "ior", _ + "ius"> => adj3x bonus bonum ; -- FISHY? + <_ + "os" , _ + "os" , _ + "on"> => adjgre bonus bona bonum ; + <_ + "es" , _ + "es" , _ + "es"> => adjgre bonus bona bonum ; + <_ + "os" , _ + ("e"|"a") , _ + "on"> => adjgre bonus bona bonum ; + _ => Predef.error ("Not supported" ++ bonus ++ bona ++ bonum) + } ; ----3 Verbs @@ -605,6 +708,8 @@ oper _ + ( "i" | "u" ) + "o" => verb3i iacere ieci iactus ; -- Bayer-Linduaer 74 1 _ => verb3c iacere ieci iactus } ; + ab + "esse" => prefixVerb ab esseAux ; + circum + "ferre" => prefixVerb circum ferreAux ; _ => Predef.error ("verb_ippp: illegal infinitive form" ++ iacere) } ; @@ -618,6 +723,9 @@ oper _ + "ire" => let iaci = Predef.tk 2 iacere in verb4 iacere ; -- (iaci + "vi") (iaci + "tus") ; _ + "ere" => verb2 iacere ; + circum + "ferre" => prefixVerb circum ferreAux ; + ab + "esse" => prefixVerb ab esseAux ; + prae + "posse" => prefixVerb prae posseAux ; _ => Predef.error ("verb: illegal infinitive form" ++ iacere) } ; } \ No newline at end of file diff --git a/src/latin/NounLat.gf b/src/latin/NounLat.gf index e83a7b449..f30af7726 100644 --- a/src/latin/NounLat.gf +++ b/src/latin/NounLat.gf @@ -3,43 +3,85 @@ concrete NounLat of Noun = CatLat ** open ResLat, Prelude, ConjunctionLat in { flags optimize=all_subs ; lin - DetCN det cn = -- Det -> CN -> NP +-- DetCN : Det -> CN -> NP ; -- the man + DetCN det cn = { - s = \\c => det.s ! cn.g ! c ++ cn.preap.s ! (Ag cn.g det.n c) ++ cn.s ! det.n ! c ++ cn.postap.s ! (Ag cn.g det.n c) ; + s = \\c => cn.s ! det.n ! c ; n = det.n ; g = cn.g ; p = P3 ; + adv = cn.adv ; + preap = cn.preap ; + postap = cn.postap ; + det = det } ; - UsePN pn = lin NP { s = pn.s ! Sg ; g = pn.g ; n = Sg ; p = P3 } ; - UsePron p = -- Pron -> Np +-- UsePN : PN -> NP ; -- John + UsePN pn = + lin NP + { + s = pn.s ! Sg ; + g = pn.g ; + n = Sg ; + p = P3 ; + adv = "" ; + preap, postap = { s = \\_ => "" } ; + det = { s,sp = \\_,_ => "" ; n = Sg } + } ; + +-- UsePron : Pron -> NP ; -- he + UsePron p = { - g = p.g ; - n = p.n ; + g = p.pers.g ; + n = p.pers.n ; p = p.p ; s = \\c => case c of { - Nom => p.pers ! PronDrop ! PronRefl ; -- Drop pronoun in nominative case - _ => p.pers ! PronNonDrop ! PronRefl -- but don't drop it otherwise + Nom => p.pers.s ! PronDrop ! PronNonRefl ; -- Drop pronoun in nominative case + _ => p.pers.s ! PronNonDrop ! PronNonRefl -- but don't drop it otherwise } ! c ; + adv = "" ; + preap, postap = { s = \\_ => "" } ; + det = { s,sp = \\_,_ => "" ; n = p.pers.n } ; } ; --- PredetNP pred np = { --- s = \\c => pred.s ++ np.s ! c ; --- a = np.a --- } ; --- + +-- PredetNP : Predet -> NP -> NP ; -- only the man + PredetNP predet np = + np ** { + det = np.det ** { s = \\g,c => predet.s ++ np.det.s ! g ! c } + } ; + +-- PPartNP : NP -> V2 -> NP ; -- the man seen -- PPartNP np v2 = { -- s = \\c => np.s ! c ++ v2.s ! VPPart ; -- a = np.a -- } ; --- --- RelNP np rs = { --- s = \\c => np.s ! c ++ "," ++ rs.s ! np.a ; --- a = np.a --- } ; + -- --- AdvNP : NP -> Adv -> NP ; -- Paris today - AdvNP np adv = { - s = \\c => np.s ! c ++ adv.s ; - g = np.g ; n = np.n; p = np.p - } ; +-- AdvNP : NP -> Adv -> NP ; -- Paris today + AdvNP np adv = np ** { adv = np.adv ++ (adv.s ! Posit) } ; + -- { + -- s = \\c => np.s ! c ; + -- g = np.g ; n = np.n; p = np.p ; + -- adv = cc2 np.adv adv ; + -- preap = np.preap ; + -- postap = np.postap ; + -- det = np.det; + -- } ; + +-- ExtAdvNP: NP -> Adv -> NP ; -- boys, such as .. + ExtAdvNP = AdvNP ; + +-- RelNP : NP -> RS -> NP ; -- Paris, which is here + RelNP np rs = np ** { adv = rs.s ++ np.adv } ; + +-- DetNP : Det -> NP ; -- these five + DetNP det = { + s = det.s ! Neutr ; + g = Neutr ; + n = det.n ; + p = P3 ; + adv = "" ; + preap, postap = { s = \\_ => "" } ; + det = { s,sp = \\_,_ => "" ; n = det.n } ; + } ; -- -- DetQuantOrd quant num ord = { -- s = quant.s ! num.hasCard ! num.n ++ num.s ++ ord.s ; @@ -53,10 +95,7 @@ concrete NounLat of Noun = CatLat ** open ResLat, Prelude, ConjunctionLat in { n = num.n } ; - -- DetNP det = { - -- s = det.sp ! Neutr ; - -- g = Neutr ; n = det.n ; p = P3 - -- } ; + -- PossPron p = { -- s = \\_,_ => p.s ! Gen ; @@ -66,13 +105,14 @@ concrete NounLat of Noun = CatLat ** open ResLat, Prelude, ConjunctionLat in { NumSg = {s = \\_,_ => [] ; n = Sg} ; NumPl = {s = \\_,_ => [] ; n = Pl} ; --- NumCard n = n ** {hasCard = True} ; + NumCard n = n ; -- -- NumDigits n = {s = n.s ! NCard ; n = n.n} ; --- OrdDigits n = {s = n.s ! NOrd} ; --- --- NumNumeral numeral = {s = numeral.s ! NCard; n = numeral.n} ; --- OrdNumeral numeral = {s = numeral.s ! NOrd} ; + -- OrdDigits n = {s = n.s ! NOrd} ; + -- + lin + NumNumeral numeral = numeral.card ; + OrdNumeral numeral = numeral.ord ; -- -- AdNum adn num = {s = adn.s ++ num.s ; n = num.n} ; -- @@ -88,16 +128,24 @@ concrete NounLat of Noun = CatLat ** open ResLat, Prelude, ConjunctionLat in { sp = \\_ => [] ; } ; - -- MassNP cn = { - -- s = cn.s ! Sg ; - -- a = Ag cn.g Sg - -- } ; + MassNP cn = + { + s = cn.s ! Sg ; + -- s = case cn.massable of { True => cn.s ! Sg ; False => \\_ => nonExist } ; + g = cn.g ; + n = Sg ; + p = P3 ; + adv = cn.adv ; + preap = cn.preap ; + postap = cn.postap ; + det = { s,sp = \\_,_ => "" ; n = Sg } ; + }; UseN n = -- N -> CN - lin CN ( n ** {preap, postap = {s = \\_ => "" } } ) ; + lin CN ( n ** {preap, postap = {s = \\_ => "" } ; adv = "" }) ; -- massable = n.massable } ) ; UseN2 n2 = -- N2 -> CN - lin CN ( n2 ** {preap, postap = {s = \\_ => "" } } ) ; + lin CN ( n2 ** {preap, postap = {s = \\_ => "" } ; adv = "" }) ; -- massable = n2.massable } ) ; -----b UseN3 n = n ; -- -- Use2N3 f = { @@ -119,21 +167,10 @@ concrete NounLat of Noun = CatLat ** open ResLat, Prelude, ConjunctionLat in { -- c2 = f.c3 -- } ; - param - AdjPos = Pre | Post ; lin + -- by default add adjective after the noun, otherwise use AdjCNPre AdjCN ap cn = -- AP -> CN -> CN - let pos = variants { Post ; Pre } - in - { - -- s = \\n,c => preOrPost ap.isPre (ap.s ! cn.g ! n ! c) (cn.s ! n ! c) ; - -- s = \\n,c => ( cn.s ! n ! c ) ++ ( ap.s ! AdjPhr cn.g n c) ; -- always add adjectives after noun? - s = cn.s ; - postap = case pos of { Pre => cn.postap ; Post => { s = \\a => ap.s ! a ++ cn.postap.s ! a } } ; - preap = case pos of { Pre => { s = \\a => ap.s ! a ++ cn.preap.s ! a } ; Post => cn.preap } ; - -- variants { postap = ConsAP postap ap ; preap = ConsAP preap ap } ; -- Nice if that would work - g = cn.g - } ; + addAdjToCN (lin AP ap) (lin CN cn) Post ; -- RelCN cn rs = { -- s = \\n,c => cn.s ! n ! c ++ rs.s ! agrgP3 n cn.g ; @@ -143,7 +180,14 @@ concrete NounLat of Noun = CatLat ** open ResLat, Prelude, ConjunctionLat in { -- AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s ; g = cn.g} ; -- SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s ; g = cn.g} ; --- --- ApposCN cn np = {s = \\n,c => cn.s ! n ! Nom ++ np.s ! c ; g = cn.g} ; --- + -- + -- ApposCN : CN -> NP -> CN + ApposCN cn np = + { + s = \\n,c => cn.s ! n ! c ++ np.det.s ! np.g ! c ++ np.preap.s ! (Ag np.g n c) ++ np.s ! c ++ np.postap .s ! (Ag np.g n c) ++ np.det.sp ! np.g ! c ; + g = cn.g ; + preap = cn.preap ; + postap = cn.postap ; + adv = cn.adv + } ; -- massable = cn.massable } ; } diff --git a/src/latin/NumeralLat.gf b/src/latin/NumeralLat.gf index b2dc98e42..d50034e86 100644 --- a/src/latin/NumeralLat.gf +++ b/src/latin/NumeralLat.gf @@ -1,42 +1,36 @@ -concrete NumeralLat of Numeral = CatLat ** open ResLat in { --- ---lincat --- Digit = {s : DForm => CardOrd => Str} ; --- Sub10 = {s : DForm => CardOrd => Str ; n : Number} ; --- Sub100 = {s : CardOrd => Str ; n : Number} ; --- Sub1000 = {s : CardOrd => Str ; n : Number} ; --- Sub1000000 = {s : CardOrd => Str ; n : Number} ; --- ---lin num x = x ; ---lin n2 = let two = mkNum "two" "twelve" "twenty" "second" in --- {s = \\f,c => case of { --- => "twelfth" ; --- _ => two.s ! f ! c --- } --- } ; --- ---lin n3 = mkNum "three" "thirteen" "thirty" "third" ; ---lin n4 = mkNum "four" "fourteen" "forty" "fourth" ; ---lin n5 = mkNum "five" "fifteen" "fifty" "fifth" ; ---lin n6 = regNum "six" ; ---lin n7 = regNum "seven" ; ---lin n8 = mkNum "eight" "eighteen" "eighty" "eighth" ; ---lin n9 = mkNum "nine" "nineteen" "ninety" "ninth" ; --- ---lin pot01 = mkNum "one" "eleven" "ten" "first" ** {n = Sg} ; ---lin pot0 d = d ** {n = Pl} ; +concrete NumeralLat of Numeral = CatLat ** open ResLat,ParadigmsLat in { + lincat + Digit = Numeral ; + Sub10 = Numeral ; + Sub100 = Numeral ; + Sub1000 = Numeral ; + Sub1000000 = Numeral ; + + lin + num x = x ; + n2 = lin Numeral ( mkNum "duo" "secundus" ) ; + n3 = lin Numeral ( mkNum "tres" "tertius" ) ; + n4 = lin Numeral ( mkNum "quattuor" "quartus" ) ; + n5 = lin Numeral ( mkNum "quinque" "quintus" ) ; + n6 = lin Numeral ( mkNum "sex" "sextus" ) ; + n7 = lin Numeral ( mkNum "septem" "septimus" ) ; + n8 = lin Numeral ( mkNum "octo" "ocatvus" ) ; + n9 = lin Numeral ( mkNum "novem" "nonus" ) ; + + lin pot01 = lin Numeral ( mkNum "unus" "primus" ) ; + lin pot0 d = d ; --lin pot110 = regCardOrd "ten" ** {n = Pl} ; --lin pot111 = regCardOrd "eleven" ** {n = Pl} ; --lin pot1to19 d = {s = d.s ! teen} ** {n = Pl} ; ---lin pot0as1 n = {s = n.s ! unit} ** {n = n.n} ; + lin pot0as1 n = n ; --lin pot1 d = {s = d.s ! ten} ** {n = Pl} ; --lin pot1plus d e = { -- s = \\c => d.s ! ten ! NCard ++ "-" ++ e.s ! unit ! c ; n = Pl} ; ---lin pot1as2 n = n ; + pot1as2 n = n ; --lin pot2 d = {s = \\c => d.s ! unit ! NCard ++ mkCard c "hundred"} ** {n = Pl} ; --lin pot2plus d e = { -- s = \\c => d.s ! unit ! NCard ++ "hundred" ++ "and" ++ e.s ! c ; n = Pl} ; ---lin pot2as3 n = n ; + pot2as3 n = n ; --lin pot3 n = { -- s = \\c => n.s ! NCard ++ mkCard c "thousand" ; n = Pl} ; --lin pot3plus n m = { diff --git a/src/latin/ParadigmsLat.gf b/src/latin/ParadigmsLat.gf index 5773ab1ec..c0fc1b1c9 100644 --- a/src/latin/ParadigmsLat.gf +++ b/src/latin/ParadigmsLat.gf @@ -24,9 +24,15 @@ resource ParadigmsLat = open -- To abstract over gender names, we define the following identifiers. oper - masculine : Gender ; - feminine : Gender ; - neuter : Gender ; + masculine : Gender = Masc ; + feminine : Gender = Fem ; + neuter : Gender = Neutr ; + nom : Case = Nom ; + acc : Case = Acc ; + gen : Case = Gen ; + dat : Case = Dat ; + abl : Case = Abl ; + voc : Case = ResLat.Voc ; mkN = overload { mkN : (verbum : Str) -> N @@ -36,21 +42,28 @@ oper } ; mkA = overload { - mkA : (verbum : Str) -> A + mkA : (verbum : Str) -> A -- Nominative masculine = \n -> lin A ( adj n ** {isPre = False } ) ; - mkA : (verbum, verbi : Str) -> A + mkA : (verbum, verbi : Str) -> A -- Nominative and Genitive masculine = \x,y -> lin A ( adj123 x y ** {isPre = False } ) ; - mkA : (bonus,bona,bonum : N) -> A - = \x,y,z -> - let compsup = comp_super x ; - advs : Str * Str = - case x.s!Sg!Nom of { - -- Bayer-Lindauer 50 4 - idon + #vowel + "us" => < "magis" , "maxime" > ; - _ => < "" , "" > - }; - in - lin A ( mkAdjective x y z < compsup.p1 , advs.p2 > < compsup.p2 , advs.p2> ** {isPre = False } ) ; + -- mkA : (bonus,bona,bonum : N) -> A + -- = \x,y,z -> + -- let compsup = comp_super x ; + -- advs : Str * Str = + -- case x.s!Sg!Nom of { + -- -- Bayer-Lindauer 50 4 + -- idon + #vowel + "us" => < "magis" , "maxime" > ; + -- _ => < "" , "" > + -- }; + -- in + -- lin A ( mkAdjective x y z < compsup.p1 , advs.p2 > < compsup.p2 , advs.p2> ** {isPre = False } ) ; + mkA : (bonus,bona,bonum : Str) -> A -- Nominative masculine, feminine and neuter + = \x,y,z -> lin A (adjfull x y z ) ; + mkA : (verbum : Str) -> (comparable : Bool) -> A + = \n,b -> lin A ( case b of { + True => adj n ; + False => let a = adj n in { s = table { Posit => a.s ! Posit ; _ => \\_ => nonExist } ; adv = a.adv } + } ** { isPre = False } ) } ; @@ -63,9 +76,12 @@ oper = \v,x,y -> lin V ( verb_ippp v x y nonExist ) ; } ; - V0 : Type = V ; - mkV0 : V -> V0 = \v -> lin V0 v ; -- Same as in english, don't know if it's working - + V0 : Type = V; + mkV0 = overload { + mkV0 : V -> V0 = \v -> lin V0 v ; -- Same as in english, don't know if it's working + mkV0 : Str -> V0 = \v -> lin V0 (mkImpersonal v) ; + } ; + mkV2 = overload { mkV2 : (amare : Str) -> V2 = \v -> lin V2 ( verb v ** { c = lin Prep ( mkPrep "" Acc ) } ) ; @@ -75,13 +91,26 @@ oper = \v,p -> lin V2 ( v ** { c = p } ) ; } ; - masculine = Masc ; - feminine = Fem ; - neuter = Neutr ; - mkAdv : Str -> Adv - = \s -> lin Adv {s = s} ; + mkAdv = overload { + mkAdv : Str -> Adv + = \s -> lin Adv (mkAdverb s) ; + mkAdv : (pos,comp,super : Str) -> Adv + = \p,c,s -> lin Adv (mkFullAdverb p c s); + mkAdv : (pos,comp : Str) -> Adv + = \p,c -> lin Adv (mkFullAdverb p c nonExist); + }; + + pluralN = ResLat.pluralN ; + singularN = ResLat.singularN ; + mkConj : Str -> Str -> Number -> Coordinator -> Conjunction = mkConjunction ; + + mkPrep : Str -> Case -> Preposition = mkPreposition ; + + mkPron = mkPronoun ; + + mkNum = mkNumeral ; -- To be implemented, just place holders mkPN : N -> PN = \n -> lin PN n ; mkN2 : N -> Prep -> N2 = \n,p -> lin N2 ( n ** { c = p } ); diff --git a/src/latin/PhraseLat.gf b/src/latin/PhraseLat.gf index ce66c7393..527384e70 100644 --- a/src/latin/PhraseLat.gf +++ b/src/latin/PhraseLat.gf @@ -1,24 +1,37 @@ concrete PhraseLat of Phrase = CatLat ** open Prelude, ResLat in { - lin PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ; -- -- UttS : S -> Utt - UttS s = { s = s.s }; + UttS s = { s = combineSentence s ! SPreS ! PreS ! SOV }; -- UttQS : QS -> Utt UttQS qs = {s = qs.s ! QDir } ; +-- UttImpSg : Pol -> Imp -> Utt + UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! VImp1 Sg } ; +-- UttImpPl : Pol -> Imp -> Utt + UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! VImp1 Pl } ; +-- UttImpPol : Pol -> Imp -> Utt + UttImpPol pol imp = UttImpSg pol imp ; +-- UttIP : IP -> Utt + UttIP ip = {s = ip.s ! Nom} ; --- Acc also +-- UttIAdv : IAdv -> Utt + UttIAdv iadv = iadv ; +-- UttNP : NP -> Utt + UttNP np = {s = np.adv ++ np.det.s ! np.g ! Nom ++ np.preap.s ! (Ag np.g np.n Nom) ++ np.s ! Nom ++ np.postap.s ! (Ag np.g np.n Nom) ++ np.det.sp ! np.g ! Nom} ; +-- UttVP : VP -> Utt + UttVP vp = ss (vp.inf ! VInfActPres) ; --- UttImpSg pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Sg False} ; --- UttImpPl pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Pl False} ; --- UttImpPol pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Sg True} ; --- --- UttIP ip = {s = ip.s ! Nom} ; --- Acc also --- UttIAdv iadv = iadv ; --- UttNP np = {s = np.s ! Nom} ; --- UttVP vp = {s = infVP False vp (agrP3 Sg)} ; --- UttAdv adv = adv ; --- +-- UttAdv : Adv -> Utt + UttAdv adv = ss (adv.s ! Posit) ; +-- UttAP : AP -> Utt + UttAP ap = ss (ap.s ! Ag Masc Sg Nom ); +-- UttCard : Card -> Utt + UttCard card = ss (card.s ! Masc ! Nom); +-- UttCN : CN -> Utt + UttCN cn = ss (cn.s ! Sg ! Nom) ; +-- UttInterj : Interj -> Utt + UttInterj interj = interj ; NoPConj = {s = []} ; PConjConj conj = {s = conj.s2} ; --- -- diff --git a/src/latin/QuestionLat.gf b/src/latin/QuestionLat.gf index 9af0b5200..6a039d248 100644 --- a/src/latin/QuestionLat.gf +++ b/src/latin/QuestionLat.gf @@ -3,29 +3,35 @@ concrete QuestionLat of Question = CatLat ** open ResLat, IrregLat, Prelude in { -- flags optimize=all_subs ; --` lin --- QuestCl : Cl -> QCl ; -- does John walk - QuestCl cl = { - s = \\t,a,p => - let cls = cl.s ! t ! a ! p - in table { - QDir => cls ! VQTrue ! VSO ; -- cls ! OQuest ; - QIndir => "" -- "if" ++ cls ! ODir -- TODO - } - } ; + -- QuestCl : Cl -> QCl ; -- does John walk + -- TO FIX + -- QuestCl cl = { + -- s = \\t,a,p => + -- let cls = (combineClause cl PreS).s ! t ! a ! p + -- in table { + -- QDir => cls ! VQTrue ! VSO ! PreV ; -- cls ! OQuest ; + -- QIndir => "" -- "if" ++ cls ! ODir -- TODO + -- } + -- } ; --- QuestVP : IP -> VP -> QCl ; -- who walks - QuestVP ip vp = - let qcl = mkQuestion { s = ip.s ! Nom } ( mkClause emptyNP vp ) - in {s = \\t,a,b,qd => qcl.s ! t ! a ! b ! qd} ; + -- QuestVP : IP -> VP -> QCl ; -- who walks + -- TO FIX + -- QuestVP ip vp = + -- let qcl = mkQuestion { s = ip.s ! Nom } ( mkClause emptyNP vp ) + -- in {s = \\t,a,b,qd => qcl.s ! t ! a ! b ! qd} ; --- QuestSlash : IP -> ClSlash -> QCl ; -- whom does John love - QuestSlash ip slash = - mkQuestion (ss ( ip.s ! Acc) ) slash ; + -- QuestSlash : IP -> ClSlash -> QCl ; -- whom does John love + -- TO FIX + + -- QuestSlash ip slash = + -- mkQuestion (ss ( ip.s ! Acc) ) slash ; - QuestIAdv iadv cl = mkQuestion iadv cl ; + -- TO FIX + -- QuestIAdv iadv cl = mkQuestion iadv cl ; -- - QuestIComp icomp np = - mkQuestion icomp (mkClause np (predV be_V) ) ; + -- TO FIX + -- QuestIComp icomp np = + -- mkQuestion icomp (mkClause np (predV be_V) ) ; -- -- -- PrepIP p ip = {s = p.s ++ ip.s ! Acc} ; diff --git a/src/latin/RelativeLat.gf b/src/latin/RelativeLat.gf index de25508e0..960aeff58 100644 --- a/src/latin/RelativeLat.gf +++ b/src/latin/RelativeLat.gf @@ -1,4 +1,4 @@ ---concrete RelativeLat of Relative = CatLat ** open ResLat in { +concrete RelativeLat of Relative = CatLat ** open ResLat in { -- -- flags optimize=all_subs ; -- @@ -51,4 +51,4 @@ -- a = RNoAg -- } ; -- ---} +} diff --git a/src/latin/ResLat.gf b/src/latin/ResLat.gf index 29f17181d..24ae61f3b 100644 --- a/src/latin/ResLat.gf +++ b/src/latin/ResLat.gf @@ -2,7 +2,7 @@ --1 Latin auxiliary operations. -resource ResLat = ParamX ** open Prelude,TenseX in { +resource ResLat = ParamX ** open Prelude, Predef, (C=CommonX) in { param Case = Nom | Acc | Gen | Dat | Abl | Voc ; @@ -12,36 +12,47 @@ param oper consonant : pattern Str = #( "p" | "b" | "f" | "v" | "m" | "t" | "d" | "s" | "z" | "n" | "r" | "c" | "g" | "l" | "q" | "qu" | "h" ); - Noun : Type = {s : Number => Case => Str ; g : Gender} ; + Noun : Type = {s : Number => Case => Str ; g : Gender } ; -- massable : Bool } ; NounPhrase : Type = { s : Case => Str ; g : Gender ; n : Number ; p : Person ; + adv : Str ; + preap : {s : Agr => Str } ; + postap : {s : Agr => Str } ; + det : Determiner } ; param - Order = SVO | VSO | VOS | OSV | OVS | SOV ; + Order = SVO | VSO | VOS | OSV | OVS | SOV ; + AdvPos = PreS | PreV | PreO | PreNeg | InV | InS ; -- | InO + SAdvPos = SPreS | SPreV | SPreO | SPreNeg ; param Agr = Ag Gender Number Case ; -- Agreement for NP et al. oper Adjective : Type = { s : Degree => Agr => Str ; -- comp_adv : Str ; --- super_adv : Str + -- super_adv : Str + adv : Adverb ; } ; - ComplexNoun : Type = + CommonNoun : Type = { s : Number => Case => Str ; g : Gender ; + adv : Str ; preap : {s : Agr => Str } ; - postap : {s : Agr => Str } ; - } ; + postap : {s : Agr => Str } + -- massable : Bool + } ; + -- nouns - useCNasN : ComplexNoun -> Noun = \cn -> + useCNasN : CommonNoun -> Noun = \cn -> { s = cn.s ; - g = cn.g ; + g = cn.g +-- massable = cn.massable; } ; pluralN : Noun -> Noun = \n -> @@ -52,11 +63,39 @@ param }; g = n.g ; preap = n.preap ; - postap = n.postap ; + postap = n.postap +-- massable = n.massable ; }; - - mkNoun : (n1,_,_,_,_,_,_,_,_,n10 : Str) -> Gender -> Noun = + + singularN : Noun -> Noun = \n -> + lin N { + s = table { + Sg => n.s ! Sg ; + Pl => \\_ => nonExist -- no plural forms + }; + g = n.g ; + preap = n.preap ; + postap = n.postap +-- massable = n.massable ; + }; + + param + AdjPos = Pre | Post ; + oper + addAdjToCN : AdjectivePhrase -> CommonNoun -> AdjPos -> CommonNoun = \ap,cn,pos -> + { + s = cn.s ; + postap = case pos of { Pre => cn.postap ; Post => { s = \\a => ap.s ! a ++ cn.postap.s ! a } } ; + preap = case pos of { Pre => { s = \\a => ap.s ! a ++ cn.preap.s ! a } ; Post => cn.preap } ; + g = cn.g ; + adv = cn.adv +-- massable = cn.massable + } ; + + mkNoun : (n1,_,_,_,_,_,_,_,_,n10 : Str) -> Gender -> Noun = \sn,sa,sg,sd,sab,sv,pn,pa,pg,pd,g -> { +-- mkNoun : (n1,_,_,_,_,_,_,_,_,n10 : Str) -> Gender -> Bool -> Noun = + --\sn,sa,sg,sd,sab,sv,pn,pa,pg,pd,g,m -> { s = table { Sg => table { Nom => sn ; @@ -74,31 +113,51 @@ param } } ; g = g +-- massable = m } ; -- to change the default gender - nounWithGen : Gender -> Noun -> Noun = \g,n -> - {s = n.s ; g = g} ; + nounWithGender : Gender -> Noun -> Noun = \g,n -> + {s = n.s ; g = g } ; -- massable = n.massable ;} ; + -- nounMassable : Bool -> Noun -> Noun = \m,n -> + -- {s = n.s ; g = n.g ; massable = m } ; + + prefixNoun : Str -> Noun -> Noun = + \p,n -> + { s = \\num,cas => addPrefix p (n.s ! num ! cas) ; g = n.g }; + + regNP : (_,_,_,_,_,_ : Str) -> Gender -> Number -> NounPhrase = \nom,acc,gen,dat,abl,voc,g,n -> { s = table Case [ nom ; acc ; gen ; dat ; abl ; voc ] ; g = g ; n = n ; - p = P3 + p = P3; + adv = "" ; + preap, postap = { s = \\_ => "" } ; + det = { s = \\_,_ => "" ; sp = \\_,_ => "" ; n = n} ; } ; - - emptyNP : NounPhrase = { s = \\_ => ""; g = Masc; n = Sg; p = P1 }; + + dummyNP : Str -> NounPhrase = \s -> regNP s s s s s s Masc Sg ; + + emptyNP : NounPhrase = { s = \\_ => ""; g = Masc; n = Sg; p = P1 ; adv = "" ; preap, postap = { s = \\_ => "" } ; det = { s = \\_,_ => "" ; sp = \\_,_ => "" ; n = Sg } ;}; -- also used for adjectives and so on -- adjectives - mkAdjective : (_,_,_ : Noun) -> + AdjectivePhrase : Type = { + s : Agr => Str ; +-- isPre : Bool ; -- should have no use in latin because adjectives can appear variably before and after nouns + } ; + mkAdjective : (bonus,bona,bonum : Noun) -> ( (Agr => Str) * Str ) -> - ( (Agr => Str) * Str ) -> Adjective = - \bonus,bona,bonum,melior,optimus -> + ( (Agr => Str) * Str ) -> + (bono,bonius,bonissimo : Str) -> + Adjective = + \bonus,bona,bonum,melior,optimus,bono,bonius,bonissimo -> { s = table { Posit => table { @@ -110,7 +169,8 @@ param Superl => optimus.p1 } ; comp_adv = melior.p2 ; - super_adv = optimus.p2 + super_adv = optimus.p2 ; + adv = { s = table { Posit => bono ; Compar => bonius ; Superl => bonissimo } }; } ; @@ -128,7 +188,7 @@ param emptyAdj : Adjective = - { s = \\_,_ => "" ; comp_adv = "" ; super_adv = "" } ; + { s = \\_,_ => "" ; comp_adv = "" ; super_adv = "" ; adv = { s = \\_ => "" } } ; -- verbs @@ -149,11 +209,16 @@ param oper VerbPhrase : Type = { - fin : VActForm => VQForm => Str ; + s : VActForm => VQForm => Str ; + part : VPartForm =>Agr => Str ; inf : VInfForm => Str ; + imp : VImpForm => Str ; obj : Str ; - adj : Agr => Str - } ; + compl : Agr => Str ; -- general complement. Agr might be ignored except for adjectives + adv : Str + } ; + + ObjectVerbPhrase : Type = VerbPhrase ** {c : Preposition} ; Verb : Type = { act : VActForm => Str ; @@ -203,10 +268,11 @@ param useVPasV : VerbPhrase -> Verb = \vp -> { - act = \\a => vp.obj ++ vp.fin ! a ! VQFalse; + act = \\a => vp.obj ++ vp.s ! a ! VQFalse; pass = \\_ => nonExist ; - inf = \\a => vp.obj ++ vp.inf ! a ; - imp = \\_ => nonExist ; + -- inf = \\a => vp.obj ++ vp.inf ! a ; + inf = vp.inf ; + imp = vp.imp ; ger = \\_ => nonExist ; geriv = \\_ => nonExist ; sup = \\_ => nonExist ; @@ -378,25 +444,26 @@ param pres_stem + fill.p1 + "ndo" } ; geriv = - ( mkAdjective - ( mkNoun ( pres_stem + fill.p1 + "ndus" ) ( pres_stem + fill.p1 + "ndum" ) ( pres_stem + fill.p1 + "ndi" ) - ( pres_stem + fill.p1 + "ndo" ) ( pres_stem + fill.p1 + "ndo" ) ( pres_stem + fill.p1 + "nde" ) - ( pres_stem + fill.p1 + "ndi" ) ( pres_stem + fill.p1 + "ndos" ) ( pres_stem + fill.p1 + "ndorum" ) - ( pres_stem + fill.p1 + "ndis" ) - Masc ) - ( mkNoun ( pres_stem + fill.p1 + "nda" ) ( pres_stem + fill.p1 + "ndam" ) ( pres_stem + fill.p1 + "ndae" ) - ( pres_stem + fill.p1 + "ndae" ) ( pres_stem + fill.p1 + "nda" ) ( pres_stem + fill.p1 + "nda" ) - ( pres_stem + fill.p1 + "ndae" ) ( pres_stem + fill.p1 + "ndas" ) (pres_stem + fill.p1 +"ndarum" ) - ( pres_stem + fill.p1 + "ndis" ) - Fem ) - ( mkNoun ( pres_stem + fill.p1 + "ndum" ) ( pres_stem + fill.p1 + "ndum" ) ( pres_stem + fill.p1 + "ndi" ) - ( pres_stem + fill.p1 + "ndo" ) ( pres_stem + fill.p1 + "ndo" ) ( pres_stem + fill.p1 + "ndum" ) - ( pres_stem + fill.p1 + "nda" ) ( pres_stem + fill.p1 + "nda" ) ( pres_stem + fill.p1 + "ndorum" ) - ( pres_stem + fill.p1 + "ndis" ) - Neutr ) - < \\_ => "" , "" > - < \\_ => "" , "" > - ).s!Posit ; + ( mkAdjective + ( mkNoun ( pres_stem + fill.p1 + "ndus" ) ( pres_stem + fill.p1 + "ndum" ) ( pres_stem + fill.p1 + "ndi" ) + ( pres_stem + fill.p1 + "ndo" ) ( pres_stem + fill.p1 + "ndo" ) ( pres_stem + fill.p1 + "nde" ) + ( pres_stem + fill.p1 + "ndi" ) ( pres_stem + fill.p1 + "ndos" ) ( pres_stem + fill.p1 + "ndorum" ) + ( pres_stem + fill.p1 + "ndis" ) + Masc ) + ( mkNoun ( pres_stem + fill.p1 + "nda" ) ( pres_stem + fill.p1 + "ndam" ) ( pres_stem + fill.p1 + "ndae" ) + ( pres_stem + fill.p1 + "ndae" ) ( pres_stem + fill.p1 + "nda" ) ( pres_stem + fill.p1 + "nda" ) + ( pres_stem + fill.p1 + "ndae" ) ( pres_stem + fill.p1 + "ndas" ) (pres_stem + fill.p1 +"ndarum" ) + ( pres_stem + fill.p1 + "ndis" ) + Fem ) + ( mkNoun ( pres_stem + fill.p1 + "ndum" ) ( pres_stem + fill.p1 + "ndum" ) ( pres_stem + fill.p1 + "ndi" ) + ( pres_stem + fill.p1 + "ndo" ) ( pres_stem + fill.p1 + "ndo" ) ( pres_stem + fill.p1 + "ndum" ) + ( pres_stem + fill.p1 + "nda" ) ( pres_stem + fill.p1 + "nda" ) ( pres_stem + fill.p1 + "ndorum" ) + ( pres_stem + fill.p1 + "ndis" ) + Neutr ) + < \\_ => "" , "" > -- Comparative + < \\_ => "" , "" > -- Superlative + "" "" "" -- Adverb part + ).s!Posit ; sup = table { VSupAcc => -- Supin @@ -436,6 +503,7 @@ param Neutr ) < \\_ => "" , "" > < \\_ => "" , "" > + "" "" "" ).s!Posit ; VPassPerf => ( mkAdjective @@ -453,6 +521,7 @@ param Neutr ) < \\_ => "" , "" > < \\_ => "" , "" > + "" "" "" ).s!Posit } } ; @@ -607,6 +676,7 @@ param Neutr ) < \\_ => "" , "" > < \\_ => "" , "" > + "" "" "" ).s!Posit ; sup = table { @@ -648,6 +718,7 @@ param Neutr ) < \\_ => "" , "" > < \\_ => "" , "" > + "" "" "" ).s!Posit ; VPassPerf => ( mkAdjective @@ -668,10 +739,27 @@ param Neutr ) < \\_ => "" , "" > < \\_ => "" , "" > + "" "" "" ).s!Posit } } ; + -- at the moment only fills present tense + mkImpersonal : Str -> Verb = \s -> + { + act = table { + VAct VSim (VPres VInd) Sg P1 => s ; + _ => nonExist + } ; + pass = \\_ => nonExist ; + imp = \\_ => nonExist ; + inf = \\_ => nonExist ; + ger = \\_ => nonExist ; + geriv = \\_ => nonExist ; + part = \\_,_ => nonExist ; + sup = \\_ => nonExist ; + } ; + actPresEnding : Number -> Person -> Str = useEndingTable <"m", "s", "t", "mus", "tis", "nt"> ; @@ -690,7 +778,7 @@ param } in (useEndingTable endings n p) + passPresEnding n p ; - + useEndingTable : (Str*Str*Str*Str*Str*Str) -> Number -> Person -> Str = \es,n,p -> case n of { Sg => case p of { @@ -705,6 +793,210 @@ param } } ; + + addPrefix : Str -> Str -> Str = + \prefix,verb -> + case of { +

=> p + verb ; +

=> prefix + "sti" + r; +

=> prefix + "s" + verb; +

=> prefix + "iect" + r; +

=> prefix + "ic" + r; +

=> p + "ccept" + r ; +

=> p + "cci" + r ; +

=> p + "spi" + r ; +

=> prefix + verb; +

=> p + "stit" + r ; +

=> p + verb ; +

=> p + "ti" + r ; +

=> p + "c" + verb ; +

=> p + "t" + verb ; +

=> p + "l" + verb ; + _ => prefix + verb + } ;-- TODO too simple e.g. ab+fuit = afuit + + prefixVerb2 : Str -> Verb2 -> Verb2 = + \prefix,verb -> + let v = { act = verb.act ; pass = verb.pass ; inf = verb.inf ; imp = verb.imp ; ger = verb.ger ; geriv = verb.geriv ; sup = verb.sup ; part = verb.part } + in + (prefixVerb prefix v) ** { c = verb.c }; + + prefixVerb : Str -> Verb -> Verb = + \prefix,verb -> + { + act = \\form => addPrefix prefix (verb.act ! form) ; + pass = \\form => addPrefix prefix (verb.pass ! form) ; + inf = \\form => addPrefix prefix (verb.inf ! form) ; + imp = \\form => addPrefix prefix (verb.imp ! form) ; + ger = \\form => addPrefix prefix (verb.ger ! form) ; + geriv = \\agr => addPrefix prefix (verb.geriv ! agr) ; + sup = \\form => addPrefix prefix (verb.sup ! form) ; + part = \\form,agr => addPrefix prefix (verb.part ! form ! agr) ; + } ; + + + esseAux : Verb = -- Bayer-Lindauer 93 1 + let + pres_stem = "s" ; + pres_ind_base = "su" ; + pres_conj_base = "si" ; + impf_ind_base = "era" ; + impf_conj_base = "esse" ; + fut_I_base = "eri" ; + imp_base = "es" ; + perf_stem = "fu" ; + perf_ind_base = "fu" ; + perf_conj_base = "fueri" ; + pqperf_ind_base = "fuera" ; + pqperf_conj_base = "fuisse" ; + fut_II_base = "fueri" ; + part_stem = "fut" ; + verb = mkVerb "esse" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base + imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ; + in + { + act = + table { + VAct VSim (VPres VInd) n p => + table Number [ table Person [ "sum" ; "es" ; "est" ] ; + table Person [ "sumus" ; "estis" ; "sunt" ] + ] ! n ! p ; + a => verb.act ! a + }; + pass = + \\_ => nonExist ; -- no passive forms + inf = + verb.inf ; + imp = + table { + VImp1 Sg => "es" ; + VImp1 Pl => "este" ; + VImp2 Pl P2 => "estote" ; + a => verb.imp ! a + } ; + sup = + \\_ => nonExist ; -- no supin forms + ger = + \\_ => nonExist ; -- no gerund forms + geriv = + \\_ => nonExist ; -- no gerundive forms + part = table { + VActFut => + verb.part ! VActFut ; + VActPres => + \\_ => nonExist ; -- no such participle + VPassPerf => + \\_ => nonExist -- no such participle + } + } ; + + ferreAux : Verb = + let + pres_stem = "fer" ; + pres_ind_base = "fer" ; + pres_conj_base = "fera" ; + impf_ind_base = "fereba" ; + impf_conj_base = "ferre" ; + fut_I_base = "fere" ; + imp_base = "fer" ; + perf_stem = "tul" ; + perf_ind_base = "tul" ; + perf_conj_base = "tuleri" ; + pqperf_ind_base = "tulera" ; + pqperf_conj_base = "tulisse" ; + fut_II_base = "tuleri" ; + part_stem = "lat" ; + verb = mkVerb "ferre" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base + imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ; + in + { + act = + table { + VAct VSim (VPres VInd) n p => + table Number [ table Person [ "fero" ; "fers" ; "fert" ] ; + table Person [ "ferimus" ; "fertis" ; "ferunt" ] + ] ! n ! p ; + a => verb.act ! a + } ; + pass = + table { + VPass (VPres VInd) n p => + table Number [ table Person [ "feror" ; "ferris" ; "fertur" ] ; + table Person [ "ferimur" ; "ferimini" ; "feruntur" ] + ] ! n ! p ; + a => verb.pass ! a + } ; + inf = + verb.inf ; + imp = + table { + VImp1 n => table Number [ "fer" ; "ferte" ] ! n ; + VImp2 Sg ( P2 | P3 ) => "ferto" ; + VImp2 Pl P2 => "fertote" ; + a => verb.imp ! a + } ; + sup = + verb.sup ; + ger = + verb.ger ; + geriv = + verb.geriv ; + part = verb.part ; + }; + + posseAux : Verb = + let + pres_stem = "pos" ; + pres_ind_base = "pos" ; + pres_conj_base = "possi" ; + impf_ind_base = "potera" ; + impf_conj_base = "posse" ; + fut_I_base = "poteri" ; + imp_base = "" ; + perf_stem = "potu" ; + perf_ind_base = "potu" ; + perf_conj_base = "potueri" ; + pqperf_ind_base = "potuera" ; + pqperf_conj_base = "potuisse" ; + fut_II_base = "potueri" ; + part_stem = "" ; + verb = mkVerb "posse" pres_stem pres_ind_base pres_conj_base impf_ind_base impf_conj_base fut_I_base + imp_base perf_stem perf_ind_base perf_conj_base pqperf_ind_base pqperf_conj_base fut_II_base part_stem ; + in + { + act = + table { + VAct VSim (VPres VInd) n p => + table Number [ table Person [ "possum" ; "potes" ; "potest" ] ; + table Person [ "possumus" ; "potestis" ; "possunt" ] + ] ! n ! p ; + a => verb.act ! a + } ; + pass = + \\_ => nonExist ; -- no passive forms + inf = + table { + VInfActFut _ => nonExist ; + a => verb.inf ! a + } ; + imp = + \\_ => nonExist ; + sup = + \\_ => nonExist ; + ger = + \\_ => nonExist ; + geriv = + \\_ => nonExist ; + part = table { + VActFut => + \\_ => nonExist ; -- no such participle + VActPres => + \\_ => nonExist ; -- no such participle + VPassPerf => + \\_ => nonExist -- no such participle + } ; + }; + -- pronouns param @@ -717,15 +1009,31 @@ param -- PronIndef PronIndefUsage PronIndefPol PronIndefMeaning ; oper - - Pronoun : Type = { - pers : PronDropForm => PronReflForm => Case => Str ; - poss : PronReflForm => Agr => Str ; + + PersonalPronoun = { + s : PronDropForm => PronReflForm => Case => Str ; g : Gender ; - n : Number ; - p : Person ; + n : Number } ; + PossessivePronoun = { + s : PronReflForm => Agr => Str ; + } ; + + -- Pronoun : Type = { + -- pers : PronDropForm => PronReflForm => Case => Str ; + -- poss : PronReflForm => Agr => Str ; + -- g : Gender ; + -- n : Number ; + -- p : Person ; + -- } ; + + Pronoun : Type = { + pers : PersonalPronoun ; + poss : PossessivePronoun ; + p : Person + } ; + pronForms = overload { pronForms : (_,_,_,_,_ : Str) -> Case => Str = \ego,me,mei,mihi,mee -> table Case [ego ; me ; mei ; mihi ; mee ; ego] ; @@ -839,90 +1147,170 @@ oper createPronouns g n p ; in { - pers = prons.p1 ; - poss = prons.p2 ; - g = g ; - n = n ; + pers = { s = prons.p1 ; g = g ; n = n } ; + poss = { s = prons.p2 } ; p = p } ; -- prepositions - Preposition : Type = {s : Str ; c : Case} ; + Preposition : Type = {s : Str ; c : Case ; isPost : Bool } ; --- Bayer-Lindauer $149ff. - about_P = lin Prep (mkPrep "de" Gen ) ; -- L... - at_P = lin Prep (mkPrep "ad" Acc ) ; -- L... - on_P = lin Prep ( mkPrep "ad" Gen ) ; -- L... - to_P = lin Prep ( mkPrep "ad" Acc ) ; -- L... - Gen_Prep = lin Prep ( mkPrep "" Gen ) ; - Acc_Prep = lin Prep ( mkPrep "" Acc ) ; - Dat_Prep = lin Prep ( mkPrep "" Dat ) ; - Abl_Prep = lin Prep ( mkPrep "" Abl ) ; - - VPSlash = VerbPhrase ** {c2 : Preposition} ; + -- conjunctions +param Coordinator = And | Or | If | Neither | Because | Comma | Colon | Empty ; +oper + Conjunction : Type = { s1 : Str ; s2 : Str ; n : Number ; c : Coordinator }; + mkConjunction : Str -> Str -> Number -> Coordinator -> Conjunction = \s1,s2,num,coord -> { s1 = s1; s2 = s2 ; n = num ; c = coord } ; + + VPSlash = VerbPhrase ** {c : Preposition} ; predV : Verb -> VerbPhrase = \v -> { - fin = \\a,q => v.act ! a ++ case q of { VQTrue => Prelude.BIND ++ "ne"; VQFalse => "" }; + s = \\a,q => v.act ! a ++ case q of { VQTrue => Prelude.BIND ++ "ne"; VQFalse => "" }; + part = v.part; + imp = v.imp ; inf = v.inf ; obj = [] ; - adj = \\a => [] + compl = \\a => [] ; + adv = "" } ; predV2 : Verb2 -> VPSlash = \v -> - predV v ** {c2 = v.c} ; + predV v ** {c = v.c} ; predV3 : Verb3 -> VPSlash = \v - -> predV v ** {c2 = v.c2; c3 = v.c3 } ; + -> predV v ** {c = v.c; c2 = v.c2 } ; appPrep : Preposition -> (Case => Str) -> Str = \c,s -> c.s ++ s ! c.c ; - insertObj : Str -> VerbPhrase -> VerbPhrase = \obj,vp -> { - fin = vp.fin ; + insertObj : NounPhrase -> Preposition -> VerbPhrase -> VerbPhrase = \np,prep,vp -> { + s = vp.s ; + part = vp.part ; + imp = vp.imp ; inf = vp.inf ; - obj = obj ++ vp.obj ; - adj = vp.adj + obj = np.det.s ! np.g ! prep.c ++ np.preap.s ! (Ag np.g np.n prep.c) ++ (appPrep prep np.s) ++ np.postap.s ! (Ag np.g np.n prep.c) ++ np.det.sp ! np.g ! prep.c ++ vp.obj ; + compl = vp.compl ; + adv = vp.adv ++ np.adv } ; - insertObjc: Str -> VPSlash -> VPSlash = \obj,vp -> { - fin = vp.fin ; + insertObjc: NounPhrase -> VPSlash -> VPSlash = \np,vp -> { + s = vp.s ; + part = vp.part ; + imp = vp.imp ; inf = vp.inf ; - obj = obj ++ vp.obj ; - adj = vp.adj ; - c2 = vp.c2 + obj = np.det.s ! np.g ! vp.c.c ++ np.preap.s ! (Ag np.g np.n vp.c.c) ++ (appPrep vp.c np.s) ++ np.postap.s ! (Ag np.g np.n vp.c.c) ++ np.det.sp ! np.g ! vp.c.c ++ vp.obj ; + compl = vp.compl ; + c = vp.c ; + adv = vp.adv ++ np.adv } ; insertAdj : (Agr => Str) -> VerbPhrase -> VerbPhrase = \adj,vp -> { - fin = vp.fin ; + s = vp.s ; + part = vp.part ; + imp = vp.imp ; inf = vp.inf ; obj = vp.obj ; - adj = \\a => adj ! a ++ vp.adj ! a + compl = \\a => adj ! a ++ vp.compl ! a ; + adv = vp.adv } ; + insertAdv : Adverb -> VerbPhrase -> VerbPhrase = \a,vp -> { + s = vp.s ; + part = vp.part ; + imp = vp.imp ; + inf = vp.inf ; + obj = vp.obj ; + compl = vp.compl ; + adv = vp.adv ++ (a.s ! Posit) + } ; + -- clauses - Clause = {s : Tense => Anteriority => Polarity => VQForm => Order => Str} ; - QClause = {s : Tense => Anteriority => Polarity => QForm => Str} ; + Sentence = + { + s,o,v,neg : AdvPos => Str ; -- Subject, verbphrase, object and negation particle plus potential adverb + t : C.Tense ; -- tense marker + p : C.Pol ; -- polarity marker + sadv : Str -- sentence adverbĀ” + } ; + + Clause = {s,o : AdvPos => Str ; v : Tense => Anteriority => VQForm => AdvPos => Str ; neg : Polarity => AdvPos => Str ; adv : Str } ; + QClause = {s : C.Tense => Anteriority => C.Pol => QForm => Str} ; - -- The VQForm parameter defines if the ordinary verbform or the quistion form with suffix "-ne" will be used - mkClause : NounPhrase -> VerbPhrase -> Clause = \np,vp -> { - s = \\tense,anter,pol,vqf,order => case order of { - SVO => np.s ! Nom ++ negation pol ++ vp.adj ! Ag np.g Sg Nom ++ vp.inf ! VInfActPres ++ vp.fin ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf ++ vp.obj ; - VSO => negation pol ++ vp.adj ! Ag np.g Sg Nom ++ vp.fin ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf ++ np.s ! Nom ++ vp.obj ; - VOS => negation pol ++ vp.adj ! Ag np.g Sg Nom ++ vp.fin ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf ++ vp.obj ++ np.s ! Nom ; - OSV => vp.obj ++ np.s ! Nom ++ negation pol ++ vp.adj ! Ag np.g Sg Nom ++ vp.fin ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf ; - OVS => vp.obj ++ negation pol ++ vp.adj ! Ag np.g Sg Nom ++ vp.fin ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf ++ np.s ! Nom ; - SOV => np.s ! Nom ++ vp.obj ++ negation pol ++ vp.adj ! Ag np.g Sg Nom ++ vp.fin ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf - } - -- np.s ! Nom ++ vp.obj ++ vp.adj ! np.g ! np.n ++ negation p ++ vp.fin ! VAct a t np.n np.p + mkClause : NounPhrase -> VerbPhrase -> Clause = \np,vp -> + let + -- combines adverbs from noun phrase and verb phrase + adv = np.adv ++ vp.adv ; + -- helper functions to either place the adverb in the designated position + -- or an empty string instead + pres : AdvPos -> Str = \ap -> case ap of { PreS => adv ; _ => [] } ; + prev : AdvPos -> Str = \ap -> case ap of { PreV => adv ; _ => [] } ; + preo : AdvPos -> Str = \ap -> case ap of { PreO => adv ; _ => [] } ; + preneg : AdvPos -> Str = \ap -> case ap of { PreNeg => adv ; _ => [] } ; + ins : AdvPos -> Str = \ap -> case ap of { InS => adv ; _ => [] } ; + inv : AdvPos -> Str = \ap -> case ap of { InV => adv ; _ => [] } + in + { + -- subject part of the clause: + -- ap is the adverb position in the clause + s = \\ap => + pres ap ++ -- adverbs can be placed in the beginning of the clause + np.det.s ! np.g ! Nom ++ -- the determiner, if any + np.preap.s ! (Ag np.g np.n Nom) ++ -- adjectives which come before the subject noun, agreeing with it + ins ap ++ -- adverbs can be placed within the subject noun phrase + np.s ! Nom ++ -- the noun of the subject noun phrase in nominative + np.postap .s ! (Ag np.g np.n Nom) ++ -- adjectives which come after the subject noun, agreeing with it + np.det.sp ! np.g ! Nom ; -- second part of split determiners + -- verb part of the clause: + -- tense and anter(ority) for the verb tense + -- vqf is the VQForm parameter which defines if the ordinary verbform or the quistion form with suffix "-ne" will be used + -- ap is the adverb position in the clause + v = \\tense,anter,vqf,ap => + prev ap ++ -- adverbs can be placed in the before the verb phrase + vp.compl ! Ag np.g np.n Nom ++ -- verb phrase complement, e.g. predicative expression, agreeing with the subject + inv ap ++ -- adverbs can be placed within the verb phrase + -- verb form with conversion between different forms of tense and aspect + vp.s ! VAct ( anteriorityToVAnter anter ) ( tenseToVTense tense ) np.n np.p ! vqf ; + -- object part of the clause + o = \\ap => preo ap ++ vp.obj ; + -- optional negation particle, adverbs can be placed before the negation + neg = \\pol,ap => preneg ap ++ negation pol ; + adv = "" + } ; + + combineClause : Clause -> C.Tense -> Anteriority -> C.Pol -> VQForm -> Sentence = \cl,tense,anter,pol,vqf -> + { s = cl.s ; + o = cl.o ; + v = cl.v ! tense.t ! anter ! vqf ; + neg = cl.neg ! pol.p ; + sadv = "" ; + t = tense ; + p = pol } ; + combineSentence : Sentence -> ( SAdvPos => AdvPos => Order => Str ) = \s -> + let + pres : SAdvPos -> Str = \ap -> case ap of { SPreS => s.sadv ; _ => [] } ; + prev : SAdvPos -> Str = \ap -> case ap of { SPreV => s.sadv ; _ => [] } ; + preo : SAdvPos -> Str = \ap -> case ap of { SPreO => s.sadv ; _ => [] } ; + preneg : SAdvPos -> Str = \ap -> case ap of { SPreNeg => s.sadv ; _ => [] } + in + \\sap,ap,order => case order of { + SVO => s.t.s ++ s.p.s ++ pres sap ++ s.s ! ap ++ preneg sap ++ s.neg ! ap ++ prev sap ++ s.v ! ap ++ preo sap ++ s.o ! ap; + VSO => s.t.s ++ s.p.s ++ preneg sap ++ s.neg ! ap ++ prev sap ++ s.v ! ap ++ pres sap ++ s.s ! ap ++ preo sap ++ s.o ! ap; + VOS => s.t.s ++ s.p.s ++ preneg sap ++ s.neg ! ap ++ prev sap ++ s.v ! ap ++ preo sap ++ s.o ! ap ++ pres sap ++ s.s ! ap ; + OSV => s.t.s ++ s.p.s ++ preo sap ++ s.o ! ap ++ pres sap ++ s.s ! ap ++ preneg sap ++ s.neg ! ap ++ prev sap ++ s.v ! ap; + OVS => s.t.s ++ s.p.s ++ preo sap ++ s.o ! ap ++ preneg sap ++ s.neg ! ap ++ prev sap ++ s.v ! ap ++ pres sap ++ s.s ! ap ; + SOV => s.t.s ++ s.p.s ++ pres sap ++ s.s ! ap ++ preo sap ++ s.o ! ap ++ preneg sap ++ s.neg ! ap ++ prev sap ++ s.v ! ap + } ; + + + -- questions mkQuestion : SS -> Clause -> QClause = \ss,cl -> { - s = \\tense,anter,pol,form => case form of { - QDir => ss.s ++ cl.s ! tense ! anter ! pol ! VQFalse ! OVS; - QIndir => ss.s ++ cl.s ! tense ! anter ! pol ! VQFalse ! OSV - } - } ; + s = \\tense,anter,pol,form => case form of { + QDir => ss.s ++ (combineSentence (combineClause cl tense anter pol VQFalse)) ! SPreS ! PreS ! OVS ; + QIndir => ss.s ++ (combineSentence (combineClause cl tense anter pol VQFalse)) ! SPreO ! PreO ! OSV + } + }; negation : Polarity -> Str = \p -> case p of { Pos => [] ; @@ -932,7 +1320,7 @@ oper -- determiners Determiner : Type = { - s : Gender => Case => Str ; -- s,sp : Gender => Case => Str ; Don't know what sp is for + s,sp : Gender => Case => Str ; -- sp for split determiners (not clear if really needed) n : Number } ; @@ -940,6 +1328,7 @@ oper { n = n ; s = \\g,c => a.s ! Posit ! Ag g n c ; + sp = \\_,_ => "" } ; Quantifier : Type = { @@ -985,11 +1374,62 @@ oper "illa" "illorum" "illis") ; - mkPrep : Str -> Case -> Preposition = \s,c -> lin Preposition {s = s ; c = c} ; + mkPreposition : Str -> Case -> Preposition = \s,c -> {s = s ; c = c; isPost = False} ; - mkAdv : Str -> { s: Str } = \adv -> { s = adv } ; + mkPostposition : Str -> Case -> Preposition = \s,c -> {s = s ; c = c ; isPost = True } ; -param - Unit = one | ten | hundred | thousand | ten_thousand | hundred_thousand ; + -- adverbs + Adverb : Type = { s : Degree => Str} ; + mkAdverb : Str -> Adverb = \adv -> + { s = table { Posit => adv ; _ => nonExist } } ; + mkFullAdverb : (pos,comp,sup : Str) -> Adverb = \p,c,s -> + { s = table { Posit => p ; Compar => c ; Super => s } }; + -- numerals + param + CardOrd = NCard | NOrd ; + Unit = one | ten | hundred | thousand | ten_thousand | hundred_thousand ; + oper + Cardinal : Type = {s : Gender => Case => Str ; n : Number}; + Ordinal : Type = { s : Gender => Number => Case => Str } ; + Numeral : Type = { card : Cardinal ; ord : Ordinal } ; + + mkNumeral : Str -> Str -> Numeral = \c,o -> -- cardinal and ordinal form + let + cardFlex : Gender => Case => Str = case c of { "unus" => \\gen,cas => case of { + => "unus" ; => "unum" ; => "uno" ; + => "una" ; => "unam" ; + => "unum" ; => "uno" ; + <_, Gen> => "unius" ; <_, Dat> => "uni" + } ; + "duo" => table { + Masc | Neutr => table Case [ "duo" ; "duo" ; "duorum" ; "duobus" ; "duobus" ; "duo" ] ; + Fem => table Case [ "duae" ; "duas" ; "duarum" ; "duabus" ; "duabus" ; "duae" ] } ; + "tres" => \\gen,cas => case of { + => "tria" ; <_, Nom | Acc | Voc > => "tres" ; + <_, Gen> => "trium" ; <_, Dat | Abl > => "tribus" + } ; + "milia" => table { + Neutr => table Case [ "milia" ; "milia" ; "milium" ; "milibus" ; "milibus" ; "milia" ] ; + _ => \\_ => nonExist + } ; + _ => \\_,_ => c + } ; + ordFlex : Gender => Number => Case => Str = + case o of { + stem + "us" => table { + Masc => table Number [ table Case [ stem + "us" ; stem + "um" ; stem + "i" ; stem + "o" ; stem + "o" ; stem + "e" ] ; + table Case [ stem + "i" ; stem + "os" ; stem + "orum" ; stem + "is" ; stem + "is" ; stem + "i" ] ; + ]; + Fem => table Number [ table Case [ stem + "a" ; stem + "am" ; stem + "ae" ; stem + "ae" ; stem + "a" ; stem + "a" ] ; + table Case [ stem + "ae" ; stem + "as" ; stem + "arum" ; stem + "is" ; stem + "is" ; stem + "ae" ] ; + ] ; + Neutr => table Number [ table Case [ stem + "um" ; stem + "um" ; stem + "i" ; stem + "o" ; stem + "o" ; stem + "um" ] ; + table Case [ stem + "a" ; stem + "a" ; stem + "orum" ; stem + "is" ; stem + "is" ; stem + "a" ] ; + ] + } ; + _ => error "unsupported ordinal form" + } + in + { card = { s = cardFlex ; n = case c of { "unus" => Sg ; _ => Pl } } ; ord = { s = ordFlex } } ; } diff --git a/src/latin/SentenceLat.gf b/src/latin/SentenceLat.gf index 422858422..9e09bff47 100644 --- a/src/latin/SentenceLat.gf +++ b/src/latin/SentenceLat.gf @@ -45,12 +45,13 @@ concrete SentenceLat of Sentence = CatLat ** open Prelude, ResLat in { -- EmbedVP vp = {s = infVP False vp (agrP3 Sg)} ; --- agr -- UseCl t p cl = -- Temp -> Pol-> Cl -> S - { - s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! VQFalse ! SOV - } ; - UseQCl t p cl = { - s = \\q => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! q - } ; + (combineClause cl (lin Tense t) t.a (lin Pol p) VQFalse) ; + + -- TO FIX + --UseQCl t p cl = + -- s = \\q => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p ! q + -- { s = \\q => combineSentence (combineClause cl t t.a p VQFalse) ! PreV ! VSO } ; + -- UseRCl t p cl = { -- s = \\r => t.s ++ p.s ++ cl.s ! t.t ! t.a ! ctr p.p ! r ; -- c = cl.c @@ -60,11 +61,13 @@ concrete SentenceLat of Sentence = CatLat ** open Prelude, ResLat in { -- c2 = cl.c2 -- } ; -- --- AdvS a s = {s = a.s ++ "," ++ s.s} ; + -- AdvS : Adv -> S -> S + AdvS adv s = { s = s.s ; o = s.o ; v = s.v ; neg = s.neg ; t = s.t ; p = s.p ; sadv = adv.s ! Posit ++ s.sadv } ; -- This covers subjunctive clauses, but they can also be added to the end. --- SSubjS : S -> Subj -> S -> S ; -- I go home if she comes - SSubjS s1 subj s2 = ss ( subj.s ++ s2.s ++ s1.s ); + -- SSubjS : S -> Subj -> S -> S ; -- I go home if she comes + -- TO FIX +-- SSubjS s1 subj s2 = { s = \\_ => subj.s ++ s2.s ! PreS ++ s1.s ! PreS ; sadv = lin Adv (mkAdverb []) } ; -- RelS s r = {s = s.s ++ "," ++ r.s ! agrP3 Sg} ; -- diff --git a/src/latin/StructuralLat.gf b/src/latin/StructuralLat.gf index 216d9a165..f639cfd71 100644 --- a/src/latin/StructuralLat.gf +++ b/src/latin/StructuralLat.gf @@ -1,5 +1,5 @@ -concrete StructuralLat of Structural = CatLat ** - open ResLat, ParadigmsLat, Prelude, IrregLat, ConstructX in +concrete StructuralLat of Structural = CatLat ** + open ResLat, ParadigmsLat, Prelude, IrregLat, (C=ConstructX) in { flags optimize=all ; @@ -11,68 +11,68 @@ concrete StructuralLat of Structural = CatLat ** almost_AdA, almost_AdN = ss "quasi" ; -- L... although_Subj = ss "quamquam" ; -- L... always_AdV = ss "semper" ; -- L... - and_Conj = sd2 [] "et" ** {n = Pl} ; -- L... + and_Conj = mkConj [] "et" Pl And ; -- L... -----b and_Conj = ss "and" ** {n = Pl} ; because_Subj = ss "cum" ; -- L... before_Prep = mkPrep "ante" Acc ; -- acc. L... behind_Prep = mkPrep "a tergo" Acc ; -- acc. L... between_Prep = mkPrep "inter" Acc ; -- acc. L... - both7and_DConj = sd2 "et" "et" ** {n = Pl} ; --L... + both7and_DConj = mkConj "et" "et" Pl And; --L... but_PConj = ss "sed" ; -- L... by8agent_Prep = mkPrep "per" Abl ; -- L... - by8means_Prep = Abl_Prep ; -- L... - can8know_VV, can_VV = IrregLat.can_VV ; --L... + by8means_Prep = mkPrep "" Abl ; -- L... + can8know_VV, can_VV = mkVV IrregLat.can_V True ; --L... during_Prep = mkPrep "inter" Acc ; -- L... - either7or_DConj = sd2 "aut" "aut" ** {n = Sg} ; -- L... - everybody_NP = regNP "quisque" "quemque" "cuiusque" "cuique" "quoque" "quisque" ( Masc | Fem ) Sg ;-- regNP "quisquae" Sg ; -- L... + either7or_DConj = mkConj "aut" "aut" Sg Or ; -- L... + everybody_NP = regNP "quisque" "quemque" "cuiusque" "cuique" "quoque" "quisque" Masc Sg ;-- regNP "quisquae" Sg ; -- L... every_Det = mkDeterminer ( mkA "omnis" ) Pl ; -- Pons everything_NP = regNP "omnia" "omnia" "omnium" "omnis" "omnis" "omnia" Neutr Pl ; --regNP "omnia" Pl ; -- L... - everywhere_Adv = ss "ubique" ; -- L... + everywhere_Adv = mkAdv "ubique" ; -- L... few_Det = mkDeterminer ( mkA "paulus" ) Pl ; -- L... ----- first_Ord = ss "first" ; DEPRECATED for_Prep = mkPrep "pro" Abl ; -- abl. L... from_Prep = mkPrep "de" Abl ; -- abl. L... he_Pron = mkPronoun Masc Sg P3 ; - here_Adv = ss "hic" ; -- L... - here7to_Adv = ss "huc" ; -- L... - here7from_Adv = ss "hinc" ; -- L... + here_Adv = mkAdv "hic" ; -- L... + here7to_Adv = mkAdv "huc" ; -- L... + here7from_Adv = mkAdv "hinc" ; -- L... how_IAdv = ss "qui" ; -- L... how8many_IDet = mkDeterminer (mkA "quantus" ) Pl ; -- Pons how8much_IAdv = ss "quantum" ; -- L... if_Subj = ss "si" ; -- L... in8front_Prep = mkPrep "ante" Acc ; -- acc. L... i_Pron = mkPronoun Masc Sg P1 ; - in_Prep = mkPrep "in" ( variants { Abl ; Acc } ) ; -- L... + in_Prep = mkPrep "in" Acc ; -- L..., abl. in extra it_Pron = mkPronoun Neutr Sg P3 ; - less_CAdv = mkCAdv "minus" "quam" ; -- L... + less_CAdv = C.mkCAdv "minus" "quam" ; -- L... many_Det = mkDeterminer ( mkA "multus" ) Pl ; -- L... - more_CAdv = mkCAdv "magis" "quam" ; -- L... + more_CAdv = C.mkCAdv "magis" "quam" ; -- L... most_Predet = ss "plurimi" ; -- L... much_Det = mkDeterminer ( mkA "multus" ) Sg ; -- L... must_VV = mkVV ( mkV "debere" ) True ; -- L... -----b no_Phr = ss "immo" ; no_Utt = ss "non est" ; -- should be expressed by a short negated sentence L... - on_Prep = mkPrep "in" ( Acc | Abl ) ; -- L... + on_Prep = mkPrep "in" Acc ; -- L... ------ one_Quant = mkDeterminer Sg "one" ; -- DEPRECATED only_Predet = ss "solum" ; -- L... - or_Conj = sd2 [] "aut" ** {n = Sg} ; -- L... + or_Conj = mkConj [] "aut" Sg Or ; -- L... otherwise_PConj = ss "praeterea" ; -- Pons part_Prep = mkPrep [] Gen ; -- Bayer-Lindauer 127 please_Voc = ss "queso" ; -- L... possess_Prep = mkPrep [] Gen ; -- Bayer-Lindauer 125.2 - quite_Adv = ss "admodum" ; -- or by comparation L... + quite_Adv = ss "admodum" ; -- actually AdA, can be expressed by comparation L... she_Pron = mkPronoun Fem Sg P3 ; so_AdA = ss "sic" ; -- L... - somebody_NP = regNP "aliquis" "aliquem" "alicuius" "clicui" "aliquo" "aliquis" ( Masc | Fem ) Sg ; -- Bayer-Lindauer 60.1 + somebody_NP = regNP "aliquis" "aliquem" "alicuius" "clicui" "aliquo" "aliquis" Masc Sg ; -- Bayer-Lindauer 60.1 someSg_Det = mkDeterminer ( mkA "aliquis" ) Sg ; -- L... somePl_Det = mkDeterminer ( mkA "nonnullus" ) Pl ; --L ... something_NP = regNP "aliquid" "aliquid" "alicuius rei" "alicui rei" "aliqua re" "aliquid" Masc Sg ; -- Bayer-Lindauer 60.1 - somewhere_Adv = ss "usquam" ; -- L... + somewhere_Adv = mkAdv "usquam" ; -- L... that_Quant = ille_Quantifier ; that_Subj = ss "ut" ; -- L... - there_Adv = ss "ibi" ; -- loc. L... - there7to_Adv = ss "eo" ; -- Pons - there7from_Adv = ss "inde" ; -- Pons + there_Adv = mkAdv "ibi" ; -- loc. L... + there7to_Adv = mkAdv "eo" ; -- Pons + there7from_Adv = mkAdv "inde" ; -- Pons therefore_PConj = ss "ergo" ; -- L... they_Pron = mkPronoun Masc Pl P3 ; this_Quant = hic_Quantifier ; @@ -109,18 +109,18 @@ concrete StructuralLat of Structural = CatLat ** yes_Utt = ss "sane" ; -- L... youSg_Pron = mkPronoun Masc Sg P2 ; youPl_Pron = mkPronoun Masc Pl P2 ; - youPol_Pron = youSg_Pron | youPl_Pron ; + youPol_Pron = youSg_Pron ; -- only use singular no_Quant = { s , sp = ( mkA "nullus" ).s ! Posit } ; -- nullus L... not_Predet = ss "non" ; -- L... - if_then_Conj = {s1 = "si" ; s2 = "" ; n = Sg } ; -- no word in s2 field L... + if_then_Conj = mkConj "si" [] Sg If ; -- no word in s2 field L... at_least_AdN = ss "saltem" ; -- L... at_most_AdN = ss "summum" ; -- Pons - nobody_NP = regNP "nemo" "neminem" "neminis" "nemini" "nemine" "nemo" ( Masc | Fem ) Sg ; -- Bayer Lindauer 60.4 + nobody_NP = regNP "nemo" "neminem" "neminis" "nemini" "nemine" "nemo" Masc Sg ; -- Bayer Lindauer 60.4 nothing_NP = regNP "nihil" "nihil" "nullius rei" "nulli rei" "nulla re" "nihil" Neutr Sg ; -- Bayer-Lindauer 60.4 except_Prep = mkPrep "praeter" Acc ; -- L... - as_CAdv = mkCAdv "ita" "ut" ; -- L ... + as_CAdv = C.mkCAdv "ita" "ut" ; -- L ... have_V2 = mkV2 (mkV "habere") ; -- habeo, -ui, -itum 2 (Langenscheidts) diff --git a/src/latin/SymbolLat.gf b/src/latin/SymbolLat.gf index 3461339b2..6dffa96d3 100644 --- a/src/latin/SymbolLat.gf +++ b/src/latin/SymbolLat.gf @@ -1,12 +1,12 @@ --# -path=.:../abstract:../common -concrete SymbolLat of Symbol = CatLat ** open Prelude, ResLat in { --- ---lin --- SymbPN i = {s = \\c => i.s ; g = Neutr} ; --- c --- IntPN i = {s = \\c => i.s ; g = Neutr} ; --- c --- FloatPN i = {s = \\c => i.s ; g = Neutr} ; --- c --- NumPN i = {s = \\c => i.s ; g = Neutr} ; --- c +concrete SymbolLat of Symbol = CatLat ** open Prelude, ResLat, ParadigmsLat, TenseX in { + +lin + SymbPN i = {s = \\n,c => i.s ; g = Neutr} ; --- c + IntPN i = {s = \\n,c => i.s ; g = Neutr} ; --- c + FloatPN i = {s = \\n,c => i.s ; g = Neutr} ; --- c + NumPN i = {s = \\n,c => i.s ! Neutr ! c; g = Neutr} ; --- c -- CNIntNP cn i = { -- s = \\c => (cn.s ! Sg ! Nom ++ i.s) ; -- a = agrgP3 Sg cn.g @@ -20,20 +20,17 @@ concrete SymbolLat of Symbol = CatLat ** open Prelude, ResLat in { -- a = agrgP3 Sg cn.g -- } ; -- --- SymbS sy = sy ; --- --- SymbNum sy = {s = sy.s ; n = Pl ; hasCard = True} ; --- SymbOrd sy = {s = sy.s ++ "th"} ; --- ---lincat --- --- Symb, [Symb] = SS ; --- ---lin --- --- MkSymb s = s ; + SymbS sy = { s = \\_ => sy.s ; neg = \\_ => "" ; o = \\_ => "" ; p = PPos ; sadv = "" ; t = TPres ; v = \\_ => "" } ; -- + -- SymbNum sy = {s = sy.s ; n = Pl ; hasCard = True} ; + SymbOrd sy = { s = \\g,n,c => sy.s } ; -- does not inflect properly + +lincat + Symb, [Symb] = SS ; + +lin + MkSymb s = s ; + -- BaseSymb = infixSS "and" ; -- ConsSymb = infixSS "," ; --- } diff --git a/src/latin/VerbLat.gf b/src/latin/VerbLat.gf index 4d40568ba..c25c85220 100644 --- a/src/latin/VerbLat.gf +++ b/src/latin/VerbLat.gf @@ -1,5 +1,5 @@ --1 Construction rules for latin verb phrases -concrete VerbLat of Verb = CatLat ** open (S=StructuralLat),ResLat,IrregLat in { +concrete VerbLat of Verb = CatLat ** open (S=StructuralLat),ResLat,IrregLat,ExtraLat,Predef,Prelude in { flags optimize=all_subs ; @@ -11,88 +11,107 @@ concrete VerbLat of Verb = CatLat ** open (S=StructuralLat),ResLat,IrregLat in { -- ComplVV : VV -> VP -> VP ; -- want to run ComplVV v vp = - { - fin = vp.fin ; - inf = v.inf ; - obj = vp.obj ; - adj = vp.adj - }; + vp ** { + s = \\af,qf => v.act ! af ; + compl = \\ag => vp.compl ! ag ++ vp.inf ! VInfActPres + } ; -- ComplVS : VS -> S -> VP ; -- say that she runs - ComplVS v s = insertObj (S.that_Subj.s ++ s.s) (predV v) ; + ComplVS v s = insertObj ( dummyNP (S.that_Subj.s ++ s.s ! PreS)) Nom_Prep (predV v) ; -- ComplVQ : VQ -> QS -> VP ; -- wonder who runs - ComplVQ v q = insertObj ( q.s ! QIndir) (predV v) ; + ComplVQ v q = insertObj (dummyNP (q.s ! QIndir)) Nom_Prep (predV v) ; -- ComplVA : VA -> AP -> VP ; -- they become red - ComplVA v ap = (predV v) ** { adj = ap.s } ; + ComplVA v ap = (predV v) ** { compl = ap.s } ; -- SlashV2a : V2 -> VPSlash ; -- love (it) SlashV2a v = lin VP (predV2 v) ; --- Slash2V3 v np = - -- insertObjc (\\_ => v.c2 ++ np.s ! Acc) (predV v ** {c2 = v.c3}) ; +-- Slash2V3 : V3 -> NP -> VPSlash ; -- give it (to her) + Slash2V3 v np = lin VP (insertObjc np (predV3 v ** { c = v.c2 } ) ); -- Slash3V3 : V3 -> NP -> VPSlash ; -- give (it) to her - Slash3V3 v np = - lin VP ( insertObjc ( v.c2.s ++ np.s ! v.c2.c ) ( predV3 v ) ) ; + Slash3V3 v np = lin VP ( insertObjc np ( predV3 v ** { c = v.c} ) ) ; +-- SlashV2V : V2V -> VP -> VPSlash ; -- beg (her) to go -- SlashV2V v vp = insertObjc (\\a => infVP v.isAux vp a) (predVc v) ; +-- SlashV2S : V2S -> S -> VPSlash ; -- answer (to him) that it is good -- SlashV2S v s = insertObjc (\\_ => conjThat ++ s.s) (predVc v) ; -- SlashV2Q : V2Q -> QS -> VPSlash ; -- ask (him) who came - SlashV2Q v q = lin VP (insertObjc (q.s ! QIndir) (predV2 v) ) ; + SlashV2Q v q = lin VP (insertObjc (dummyNP (q.s ! QIndir)) (predV2 v) ) ; -- SlashV2A : V2A -> AP -> VPSlash ; -- paint (it) red SlashV2A v ap = lin VP ( (predV2 v) ** { adj = ap.s } ) ; -- ComplSlash : VPSlash -> NP -> VP ; -- love it ComplSlash vp np = -- VPSlash -> NP -> VP - insertObj (appPrep vp.c2 np.s) vp ; + insertObj np vp.c vp ; +-- SlashVV : VV -> VPSlash -> VPSlash ; -- want to buy -- SlashVV vv vp = -- insertObj (\\a => infVP vv.isAux vp a) (predVV vv) ** -- {c2 = vp.c2} ; +-- SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash ; -- beg me to buy -- SlashV2VNP vv np vp = -- insertObjPre (\\_ => vv.c2 ++ np.s ! Acc) -- (insertObjc (\\a => infVP vv.isAux vp a) (predVc vv)) ** -- {c2 = vp.c2} ; --2 Other ways of forming verb phrases - + +-- ReflVP : VPSlash -> VP ; -- love himself -- ReflVP v = insertObjPre (\\a => v.c2 ++ reflPron ! a) v ; --- UseComp : Comp -> VP +-- UseComp : Comp -> VP ; -- be warm UseComp comp = insertAdj comp.s (predV be_V) ; --- PassV2 v = insertObj (\\_ => v.s ! VPPart) (predAux auxBe) ; +-- PassV2 : V2 -> VP ; -- be loved + PassV2 v = predV ( + v ** { + act = table { VAct anter tense number person => + case anter of { + VSim => v.pass ! VPass tense number person ; + VAnt => "" --error "using participles is not implemented yet" + } + } + } ); -- AdvVP : VP -> Adv -> VP ; -- sleep here - AdvVP vp adv = insertObj adv.s vp ; + AdvVP vp adv = insertAdv adv vp ; -- ExtAdvVP vp adv = vp --- AdVVP adv vp = insertObj adv.s vp ; +-- AdVVP : AdV -> VP -> VP ; -- always sleep + AdVVP adv vp = vp ** { adv = vp.adv ++ adv.s } ; --- AdvVPSlash : VPSlash -> Adv -> VPSlash ; -- use (it) here - --- AdVVPSlash : AdV -> VPSlash -> VPSlash ; -- always use (it) - +-- AdvVPSlash : VPSlash -> Adv -> VPSlash ; -- use (it) here + AdvVPSlash vp adv = vp ** { adv = (adv.s ! Posit) ++ vp.adv } ; + +-- AdVVPSlash : AdV -> VPSlash -> VPSlash ; -- always use (it) + AdVVPSlash adv vp = vp ** { adv = vp.adv ++ adv.s } ; + -- VPSlashPrep : VP -> Prep -> VPSlash ; -- live in (it) --2 Complements to copula --- CompAP : AP -> Comp +-- CompAP : AP -> Comp ; -- (be) small CompAP ap = ap ; + +-- CompNP : NP -> Comp ; -- (be) the man + CompNP np = {s = \\_ => let a = Ag np.g np.n Nom in np.preap.s ! a ++ np.s ! Nom ++ np.postap.s ! a } ; --- CompNP np = {s = \\_ => np.s ! Acc} ; +-- CompAdv : Adv -> Comp ; -- (be) here + CompAdv a = {s = \\_ => a.s ! Posit } ; --- CompAdv a = {s = \\_ => a.s} ; +-- CompCN : CN -> Comp ; -- (be) a man/men + CompCN cn = {s = table { Ag g n c => cn.preap.s ! Ag cn.g n Nom ++ cn.s ! n ! Nom ++ cn.postap.s ! Ag cn.g n Nom} }; --- CompCN --- UseCopula v = v +-- UseCopula : VP ; -- be + UseCopula = predV be_V ; } diff --git a/src/latin/dict/BigLat.gf b/src/latin/dict/BigLat.gf deleted file mode 100644 index 3ea3d6752..000000000 --- a/src/latin/dict/BigLat.gf +++ /dev/null @@ -1 +0,0 @@ -concrete BigLat of BigLatAbs = GrammarLat, DictLat ; \ No newline at end of file diff --git a/src/latin/dict/BigLatAbs.gf b/src/latin/dict/BigLatAbs.gf deleted file mode 100644 index 79a5df401..000000000 --- a/src/latin/dict/BigLatAbs.gf +++ /dev/null @@ -1 +0,0 @@ -abstract BigLatAbs = Grammar, DictLatAbs ; \ No newline at end of file diff --git a/src/latin/dict/BigLatEng.gf b/src/latin/dict/BigLatEng.gf deleted file mode 100644 index 8226ceea7..000000000 --- a/src/latin/dict/BigLatEng.gf +++ /dev/null @@ -1 +0,0 @@ -concrete BigLatEng of BigLatAbs = GrammarEng, DictLatEng ; \ No newline at end of file diff --git a/src/latin/dict/MkLatin.hs b/src/latin/dict/MkLatin.hs deleted file mode 100644 index 06ca73e87..000000000 --- a/src/latin/dict/MkLatin.hs +++ /dev/null @@ -1,81 +0,0 @@ -import Data.Char -import Data.List - -main = mkLatin - -mkLatin = do - ws <- readFile "DICTPAGE.RAW" >>= return . lines - let fcs = mkDict ws - let fs = [unwords [status st ++ "fun",f,":",cat,";","--",eng] | [st, f,cat,_,eng] <- fcs] - let ls = [unwords [status st ++ "lin",f,"=",lat,";"] | [st, f,_,lat,_] <- fcs] - - writeFile "DictLatAbs.gf" "abstract DictLatAbs = Cat ** {" - appendFile "DictLatAbs.gf" "\n-- extracted from http://archives.nd.edu/whitaker/dictpage.htm\n" - appendFile "DictLatAbs.gf" (unlines fs) - appendFile "DictLatAbs.gf" "}" - - writeFile "DictLat.gf" "concrete DictLat of DictLatAbs = CatLat ** open ParadigmsLat in {" - appendFile "DictLat.gf" "\n-- extracted from http://archives.nd.edu/whitaker/dictpage.htm\n" - appendFile "DictLat.gf" (unlines ls) - appendFile "DictLat.gf" "}" - - let es = [unwords [status st ++ "lin",f,"=",mkEng cat eng,";"] | [st, f,cat,_,eng] <- fcs] - writeFile "DictLatEng.gf" "concrete DictLatEng of DictLatAbs = CatEng ** open ParadigmsEng in {" - appendFile "DictLatEng.gf" "\n-- extracted from http://archives.nd.edu/whitaker/dictpage.htm\n" - appendFile "DictLatEng.gf" (unlines es) - appendFile "DictLatEng.gf" "}" - - ---- putStrLn $ unlines ls - -mkDict :: [String] -> [[String]] -- fun, cat, lat, eng -mkDict = map mkOne . zip [10001 ..] . map cleanUp - where - cleanUp s = let (lat,eng) = break (=='[') s in - (words (filter (\c -> c==' ' || isLetter c) lat), eng) - mkOne (i,(lws,eng)) = addId i (mkLat lws) ++ [eng] - mkLat lws = case lws of - x:y:"N":_:g:_ -> f [x, "N", lin "mkN" [show x,show y, (snd (gender g))]] where f = if fst (gender g) then ok else todo - x:y:"N": g:_ -> f [x, "N", lin "mkN" [show x,show y, (snd (gender g))]] where f = if fst (gender g) then ok else todo - x:"gen":z:"ADJ":_ -> ok [x, "A", lin "mkA" [show x]] - x:y:z:"ADJ":_ -> ok [x, "A", lin "mkA" [show x]] - x:"ADV":_ -> ok [x, "Adv", lin "mkAdv" [show x]] - x:y:z:u:"V":_:"INTRANS":_ -> okv [y, "V", lin "mkV" [show y,show x,show z,show u]] - x:y:z:u:"V":_:"TRANS":_ -> okv [y, "V2", lin "mkV2" ["(" ++ lin "mkV" [show y,show x,show z,show u] ++ ")"]] - x:y:z:u:"V":_:"DEP":_ -> todo [y, "V", lin "depV" ["(" ++ lin "mkV" [show y,show x,show z,show u] ++ ")"]] - x:y:z:u:"V":_ -> okv [y, "V", lin "mkV" [show y,show x,show z,show u]] - - _ -> todo ["TODO","",unwords lws] - - addId i (st:f:c:rest) = st:(f ++ "_" ++ show i ++ "_" ++ c):c:rest - - gender g = case g of - "M" -> (True, "masculine") - "F" -> (True, "feminine") - "N" -> (True, "neuter") - "C" -> (True, "masculine {-C-}") - _ -> (False, g ++ "{-??-}") - - fun x c = x ++ "_" ++ c - lin f xs = unwords (f:xs) - todo xs = "1":xs - ok xs = "0":xs - okv r@(f:_) = if elem (take 3 (reverse f)) ["era","ere","eri"] then ok r else todo r - -status st = case st of - "0" -> "" - _ -> "-- " - - --- build an English version: TODO better analysis of the notation -mkEng cat eng = unwords $ intersperse "|" $ map mkOne engs - where - mkOne s = unwords ["mk" ++ cat, show s] - engs = [clean (takeWhile (flip notElem "\r,;") (drop 11 eng))] ---- TODO - clean s = case s of - '\\':r:cs -> clean cs - c:cs -> c:clean cs - _ -> s - --- [DXXFS] :: counting-board; side-board; slab table; panel; square stone on top of column; --- [EEQEE] :: Father; (Aramaic); bishop of Syriac/Coptic church; (false read obba/decanter); diff --git a/src/latin/dict/README b/src/latin/dict/README deleted file mode 100644 index 372a21ee0..000000000 --- a/src/latin/dict/README +++ /dev/null @@ -1,33 +0,0 @@ -Aarne Ranta 2017-01-19 - -A script for building a Latin dictionary from William Whitaker's Words - -Source: http://archives.nd.edu/whitaker/dictpage.zip - -See also: https://en.wikipedia.org/wiki/William_Whitaker's_Words - -License: BSD for the script. Unknown for the source, therefore not redistributed here. - -Usage: - - runghc MkLatin.hs - -Output: - - DictLatAbs.gf - DictLat.gf - -Uses Herbert Lange's RGL implementation of Latin (darcs version of 2017-01-19 with ParadigmsLat.mkAdv added by AR) - -Coverage of first version: 90%; 3938 missing out of 39227 entries. Marked with leading "--" -Reasons for uncovered entries -- uncommon category (e.g. structural words) -- missing case in ParadigmsLat.gf, e.g. deponent verbs - -Matching for adjectives (A) uncertain, because we only use ParadigmsLat.gf.mkA : Str -> A - -Verb subcat information is uncertain, too. It is based on the src's TRANS and INTRANS flags. - - - -