From 78181618f30059138abfde7fb08ce266ea1db667 Mon Sep 17 00:00:00 2001 From: aarne Date: Wed, 17 Sep 2008 14:30:29 +0000 Subject: [PATCH] personal pronouns in latin --- lib/next-resource/latin/ResLatin.gf | 100 +++++++++++++++++++++++++--- 1 file changed, 90 insertions(+), 10 deletions(-) diff --git a/lib/next-resource/latin/ResLatin.gf b/lib/next-resource/latin/ResLatin.gf index 7d50cea9a..ec40269d8 100644 --- a/lib/next-resource/latin/ResLatin.gf +++ b/lib/next-resource/latin/ResLatin.gf @@ -240,17 +240,15 @@ oper oper Verb : Type = { act : VActForm => Str ; -{- - pass : VPassForm => Str ; +-- pass : VPassForm => Str ; inf : VAnter => Str ; - imp : VImpForm => Str ; - ger : VGerund => Str ; - sup : VSupine => Str ; - partActPres : Adjective ; - partActFut : Adjective ; - partPassPerf : Adjective ; - partPassFut : Adjective --} +-- imp : VImpForm => Str ; +-- ger : VGerund => Str ; +-- sup : VSupine => Str ; +-- partActPres : Adjective ; +-- partActFut : Adjective ; +-- partPassPerf : Adjective ; +-- partPassFut : Adjective ; } ; mkVerb : @@ -277,6 +275,10 @@ oper VAct VAnt VFut Sg P1 => celav + "ero" ; VAct VAnt VFut n p => celav + "eri" + actPresEnding n p } ; + inf = table { + VSim => celare ; + VAnt => celav + "isse" + } } ; actPresEnding : Number -> Person -> Str = @@ -299,6 +301,20 @@ oper } } ; + esseV : Verb = + let + esse = mkVerb "es" "si" "era" "sum" "esse" "fui" "*futus" + "ero" "erunt" "eri" ; + in { + act = table { + VAct VSim (VPres VInd) Sg P2 => "es" ; + VAct VSim (VPres VInd) Pl P1 => "sumus" ; + VAct VSim (VPres VInd) Pl P3 => "sunt" ; + v => esse.act ! v + } ; + inf = esse.inf + } ; + verb1 : Str -> Verb = \celare -> let cela = Predef.tk 2 celare ; @@ -350,4 +366,68 @@ oper in mkVerb senti sentia sentie sentio sentire sensi sensus (senti + "am") (senti + "ent") sentie ; + +-- smart paradigms + + verb_pppi : (iacio,ieci,iactus,iacere : Str) -> Verb = + \iacio,ieci,iactus,iacere -> + case iacere of { + _ + "are" => verb1 iacere ; + _ + "ire" => verb4 iacere ieci iactus ; + _ + "ere" => case iacio of { + _ + "eo" => verb2 iacere ; + _ + "io" => verb3i iacere ieci iactus ; + _ => verb3 iacere ieci iactus + } ; + _ => Predef.error ("verb_pppi: illegal infinitive form" ++ iacere) + } ; + + verb : (iacere : Str) -> Verb = + \iacere -> + case iacere of { + _ + "are" => verb1 iacere ; + _ + "ire" => let iaci = Predef.tk 2 iacere + in verb4 iacere (iaci + "vi") (iaci + "tus") ; + _ + "ere" => verb2 iacere ; + _ => Predef.error ("verb: illegal infinitive form" ++ iacere) + } ; + +-- pronouns + + Pronoun : Type = { + s : Case => Str ; + g : Gender ; + n : Number ; + p : Person ; + } ; + + mkPronoun : (_,_,_,_,_ : Str) -> Gender -> Number -> Person -> Pronoun = + \ego,me,mei,mihi,mee,g,n,p -> { + s = pronForms ego me mei mihi mee ; + g = g ; + n = n ; + p = p + } ; + + pronForms : (_,_,_,_,_ : Str) -> Case => Str = + \ego,me,mei,mihi,mee -> table Case [ego ; me ; mei ; mihi ; mee ; ego] ; + + personalPronoun : Gender -> Number -> Person -> Pronoun = \g,n,p -> { + s = case of { + <_,Sg,P1> => pronForms "ego" "me" "mei" "mihi" "me" ; + <_,Sg,P2> => pronForms "tu" "te" "tui" "tibi" "te" ; + <_,Pl,P1> => pronForms "nos" "nos" "nostri" "nobis" "nobis" ; --- nostrum + <_,Pl,P2> => pronForms "vos" "vos" "vestri" "vobis" "vobis" ; --- vestrum + => pronForms "is" "eum" "eius" "ei" "eo" ; + => pronForms "ea" "eam" "eius" "ei" "ea" ; + => pronForms "id" "id" "eius" "ei" "eo" ; + => pronForms "ii" "eos" "eorum" "iis" "iis" ; + => pronForms "ii" "eas" "earum" "iis" "iis" ; + => pronForms "ea" "ea" "eorum" "iis" "iis" + } ; + g = g ; + n = n ; + p = p + } ; + }