Files
gf-rgl/src/basque/AditzTrinkoak.gf

647 lines
24 KiB
Plaintext

resource AditzTrinkoak = open Prelude, Predef, ParamEus in {
-- Synthetic verbs are in this module
-- I have not implemented allocutive forms.
-- For that I'd have to keep track of up to S whether there is somewhere a familiar 2nd person
-- (e.g. "I am afraid of you/your mother"; "You(r mother) is nice", "I gave an apple to you(r mother)"),
-- and that affects the verb form of a main clause, regardless who is subject/object there.
oper
VForms : Type = { indep : Str ; stem : Str } ;
noVForm : VForms = { indep = Prelude.nonExist ; stem = Prelude.nonExist } ;
-- Obs. this is pretty rough heuristic, use 2-argument version for good results
mkVForms = overload {
mkVForms : Str -> VForms = \du ->
let due : Str = case du of {
_ + "en" => init du ; -- zen / ze+la
_ + "on" => init du ; -- zitzaion / zitzaio+la
_ + "an" => init du ; -- zitzaidan / zitzaida+la
_ + "gu" => du ; -- dugu / dugu+la
_ + "u" => du + "e" ; -- du / due+n
_ + "z" => du + "e" ; -- naiz / naize+n
_ + "un" => du + "a" ; -- dun / duna+la
_ + "uk" => init du + "a" ; -- duk / dua+la
x + "t" => x + "da" ; -- dut / duda+n
_ + "r" => du + "re" ; -- dator / datorre+n
-- _ + ("e"|"i"|"o"|"a")
-- => du ; -- dio / dio+n
-- _ => du + "e" }
_ => du }
in { indep = du ; stem = due } ;
mkVForms : (_,_ : Str) -> VForms = \dut,duda ->
{ indep = dut ; stem = duda } ;
} ;
IntransV : Type = AuxForm => Agr => VForms ; -- Agr = nori or nork
TransV : Type = Agr => IntransV ; -- Agr = nor
DitransV : Type = Agr => TransV ; -- Agr = nori
------------------------------------------------------------------------------
syntIntransVerb : AuxType -> IntransV = \val ->
case val of {
Da Izan => izanDa ;
Da Egon => egonDa ;
Da Joan => joanDa ;
Da Ibili => ibiliDa ;
Da Etorri => etorriDa ;
_ => Predef.error "Not an intransitive verb"
} ;
syntTransVerb : AuxType -> TransV = \val ->
case val of {
Du Ukan => ukanDu ;
Du Jakin => jakinDu ;
Du Eduki => edukiDu ;
Zaio => ukanZaio ;
_ => Predef.error "Not a transitive verb"
} ;
------------------------------------------------------------------------------
-- General building blocks for the forms of ukan
-- All thanks to https://upload.wikimedia.org/wikipedia/commons/3/36/Nor_Nori_Nork_taula_osoa.png
norkUkanFirst : Agr => Str = table { -- Past, pot, cond etc.
Ni => "n" ; Gu => "gen" ;
Hi _ => "h" ;
Zu => "zen" ; Zuek => "zen" ;
Hau => "z" ; Hauek => "z" } ;
norkUkanLast : Agr => Str = table {
Ni => "t" ; Gu => "gu" ;
Hi Masc => "k" ; Hi Fem => "n" ;
Zu => "zu" ; Zuek => "zue" ;
Hau => [] ; Hauek => "te" } ;
norkUkanMid : Agr => Str = table {
Hi Masc => "a" ; Hi Fem => "na" ;
Ni => "da" ; Hauek => "e" ;
x => norkUkanLast ! x } ;
norkUkanImp : Agr => Str = table {
Ni => nonExist ; Gu => nonExist ;
x => norkUkanFirst ! x } ;
noriUkanLast : Agr => Str = table {
Hau => "o" ; Hauek => "e" ;
x => norkUkanLast ! x } ;
noriUkanMid : Agr => Str = table {
Hau => "o" ; Hauek => "e" ;
x => norkUkanMid ! x } ;
norUkanPres : Agr => Str = table {
Ni => "nau" ; Gu => "gaitu" ;
Hi _ => "hau" ;
Zu => "zaitu" ; Zuek => "zaituzte" ;
Hau => "du" ; Hauek => "ditu" } ;
norUkanNonpres : Agr => Str = table {
Ni => "nindu" ; Gu => "gintu" ;
Hi _ => "hindu" ;
Zu => "zintu" ; Zuek => "zintuzte" ;
Hau => nonExist ; Hauek => nonExist } ; -- formed separately
norUkanZaioNonpres : Agr => Str = table {
Ni => "nin" ; Gu => "gin" ;
Hi _ => "hin" ;
Zu => "zin" ; Zuek => "zin" ;
Hau => "zi" ; Hauek => "zi" } ;
norUkanCond : Agr => Str = table {
Zuek => "zintu" ; x => norUkanNonpres ! x } ;
{-
=============================================================================
Izan [NOR]
=============================================================================
-}
-- common copula
izanDa : IntransV =
table {APast => table {Ni => mkVForms "nintzen" ;
Hi _ => mkVForms "hintzen" ;
Zu => mkVForms "zinen" ;
Hau => mkVForms "zen" ;
Gu => mkVForms "ginen" ;
Zuek => mkVForms "zineten" ;
Hauek => mkVForms "ziren" } ;
ACond => table {Ni => mkVForms "nintzateke" ;
Hi _ => mkVForms "hintzateke" ;
Zu => mkVForms "zinateke" ;
Hau => mkVForms "litzateke" ;
Gu => mkVForms "ginateke" ;
Zuek => mkVForms "zinatekete" ;
Hauek => mkVForms "lirateke" } ;
APres => table {Ni => mkVForms "naiz" ;
Hi _ => mkVForms "haiz" ;
Zu => mkVForms "zara" "zare" ;
Hau => mkVForms "da" "de" ;
Gu => mkVForms "gara" "gare" ;
Zuek => mkVForms "zarete" ;
Hauek => mkVForms "dira" "dire" } ;
AImp => table {Ni => noVForm ;
Hi _ => mkVForms "hadi" ;
Zu => mkVForms "zaitez" ;
Hau => mkVForms "bedi" ;
Gu => noVForm ;
Zuek => mkVForms "zaitezte" ;
Hauek => mkVForms "bitez" }
} ;
{-
=============================================================================
Ukan [NOR] [NORK]
=============================================================================
-}
ukanDu : TransV = \\nor,tns,nork => mkVForms (
case tns of {
APast =>
case nor of { -- Special forms for past when nor is Hau or Hauek
Hau => norkPast_norHau ! nork ;
Hauek => norkPast_norHauek ! nork ;
_ => let nindu : Str = norPast ! nor ;
te : Str = norkPast ! nork ;
in nindu + te + "n" } ;
ACond =>
case nor of { -- Special forms for conditional when nor is Hau or Hauek
Hau => norkCond_norHau ! nork ;
Hauek => norkCond_norHauek ! nork ;
_ => let gintu : Str = norCond ! nor ;
z : Str = case nor of {(Gu|Zu|Zuek) => "z" ; _ => [] } ;
te : Str = norkCond ! nork ;
in gintu + z + "ke" + te } ;
APres => let gaitu : Str = norPres ! nor ;
zte : Str = norkPres ! nork ;
in gaitu + zte ;
AImp => let ga = norImp ! nor ;
it = case nor of { (Gu|Hauek) => "it" ; _ => [] } ;
k = norkImp ! nork ;
in ga + it + "za" + k
}) where {
norkCond : Agr => Str = \\nork => case <nor,nork> of {
<Zuek,y> => "te" + norkUkanLast ! y ; -- zintu z ke te t
<_,x> => norkUkanLast ! x } ;
norkPres : Agr => Str = \\nork => case <nor,nork> of {
<Gu,Hauek> => "zte" ; -- If Nork is Hauek and Nor is plural,
<Zu,Hauek> => "zte" ; -- the morpheme "te" changes into "zte"
<Hauek,Hauek> => "zte" ;
<_,x> => norkUkanLast ! x } ;
norkPast : Agr => Str = \\nork => case <nor,nork> of {
<Zuek,Hau> => "" ;
<_,Hau> => "e" ;
<Gu,Hauek> => "zte" ;
<Zu,Hauek> => "zte" ;
<Hauek,Hauek> => "zte" ;
<_,x> => norkUkanMid ! x } ;
norkImp : Agr => Str = norkUkanImp ;
norPres : Agr => Str = norUkanPres ;
norPast : Agr => Str = norUkanNonpres ;
norCond : Agr => Str = norUkanCond ;
norImp : Agr => Str = table { Ni => "na" ; Gu => "ga" ;
Hau => "be" ; Hauek => "b" ;
_ => nonExist } ;
--norCondZ : Agr => Str = table {
-- (Gu|Zu|Zuek) => "z" ; _ => [] } ;
norkPast_norHau = table { Ni => "nuen" ; Gu => "genuen" ;
Hi _ => "huen" ;
Zu => "zenuen" ; Zuek => "zenuten" ;
Hau => "zuen" ; Hauek => "zuten" } ;
norkPast_norHauek = table { Ni => "nituen" ; Gu => "genituen" ;
Hi _ => "hituen" ;
Zu => "zenituen" ; Zuek => "zenituzten" ;
Hau => "zituen" ; Hauek => "zituzten" } ;
norkCond_norHau = table { Hi _ => "hinduke" ; Zuek => "zenukete" ;
Hau => "luke" ; Hauek => "lukete" ;
x => (tk 2 (norkPast_norHau ! x)) + "ke" } ; -- nu+en -> nu+ke
norkCond_norHauek = table { Hi _ => "hindukete" ; Zuek => "zenituzkete" ;
Hau => "lituzke" ; Hauek => "lituzkete" ;
x => (tk 2 (norkPast_norHauek ! x)) + "zke" } --nitu+en -> nitu+zke
} ;
{-
=============================================================================
Ukan [NOR] [NORI]
=============================================================================
-}
ukanZaio : TransV = \\nor,tns,nori => mkVForms (tenses ! tns)
where {
norPast : Agr => Str = norUkanZaioNonpres ;
noriPast : Agr => Str = noriUkanMid ;
norCond : Agr => Str = table {
Hau => "li" ; Hauek => "li" ;
x => norPast ! x } ;
noriCond : Agr => Str = noriPast ;
norPres : Agr => Str = table {
Ni => "na" ; Gu => "ga" ;
Hi _ => "ha" ;
Zu => "za" ; Zuek => "za" ;
Hau => [] ; Hauek => [] } ;
noriPres : Agr => Str = \\nori => case <nor,nori> of {
<Zuek,Ni> => "da" ; -- zai+t, zai+zki+t etc., but `za+tzai+zki_da_te', if nor is Zuek
<_,x> => noriUkanLast ! x } ;
---
te : Str = case nor of { Zuek => "te" ; _ => [] } ;
zki : Str = case nor of { (Zu|Zuek|Gu|Hauek) => "zki" ; _ => [] } ;
tenses : AuxForm => Str = table {
APast => let zin : Str = norPast ! nor ;
da : Str = noriPast ! nori ;
in zin + "tzai" + zki + da + te + "n" ;
ACond => let zin : Str = norCond ! nor ;
da : Str = noriCond ! nori ;
in zin + "tzai" + zki + da + "ke" + te ;
aPres => let za : Str = norPres ! nor ;
tzai : Str = case getPers nor of { P3 => "zai" ; _ => "tzai" } ;
da : Str = noriPres ! nori ;
in za + tzai + zki + da + te } ;
} ;
{-
=============================================================================
Ukan [NOR] [NORI] [NORK]
=============================================================================
-}
ukanDio : DitransV = \\nori,nor,tns,nork => mkVForms (tenses ! tns)
where {
-- Map from Number to prefix morpheme in Nor position.
-- Specific to Nor-Nori-Nork, different forms in other auxiliaries.
norPres : Number => Str = table { Sg => "di" ;
Pl => "dizki" } ;
norPast : Number => Str = \\n => drop 1 (norPres ! n) ;
------
-- Map from Agr to morpheme in Nori position.
noriPres : Agr => Str = \\nori => case <nork,nori> of {
<Hau,Ni> => "t" ; -- If nork is Hau, then the form ends in "t"
<_,x> => noriUkanMid ! x } ;
noriPast : Agr => Str = noriUkanMid ;
------
-- Map from Agr to morpheme in Nork position
norkPres : Agr => Str = norkUkanLast ;
norkPast : Agr => Str = norkUkanFirst ;
norkCond : Agr => Str = table { (Hau|Hauek) => "l" ;
x => norkPast ! x } ;
---
te = case nork of { (Zuek|Hauek) => "te" ; _ => [] } ;
tenses : AuxForm => Str = table {
ACond => let zen = norkCond ! nork ;
izki = norPast ! getNum nor ; -- same forms for past and cond
da = noriPast ! nori ; -- same forms for past and cond
in zen + izki + da + "ke" + te ;
APast => let zen = norkPast ! nork ;
izki = norPast ! getNum nor ;
da = noriPast ! nori ;
in zen + izki + da + te + "n" ;
aPres => let dizki = norPres ! getNum nor ;
da = noriPres ! nori ; --form of nori depends on nork
zue = norkPres ! nork
in dizki + da + zue }
} ;
{-
=============================================================================
Egon
=============================================================================
-}
-- stative copula, like Spanish estar
egonDa : IntransV =
table { APast => table {
Ni => mkVForms "nengoen" ;
Hi _ => mkVForms "hengoen" ;
Zu => mkVForms "zeunden" ;
Hau => mkVForms "zegoen" ;
Gu => mkVForms "geunden" ;
Zuek => mkVForms "zeundeten" ;
Hauek => mkVForms "zeuden" } ;
APres => table {
Ni => mkVForms "nago" ;
Hi _ => mkVForms "hago" "hagoe" ;
Zu => mkVForms "zaude" ;
Hau => mkVForms "dago" "dagoe" ;
Gu => mkVForms "gaude" ;
Zuek => mkVForms "zaudete" ;
Hauek => mkVForms "daude" } ;
AImp => table {
(Ni|Gu) => noVForm ;
Hi _ => mkVForms "hago" "hagoe" ;
Zu => mkVForms "zaude" ;
Hau => mkVForms "bego" "begoe" ;
Zuek => mkVForms "zaudete" ;
Hauek => mkVForms "beude" } ;
ACond => \\_ => mkVForms "TODO"
} ;
{-
=============================================================================
Eduki
=============================================================================
-}
edukiDu : TransV = table {
-- Nor,Nork
Ni => table {
APres => table {
Gu => noVForm ;
Hauek => mkVForms "naukate" ;
Ni => noVForm ;
Zuek => mkVForms "naukazue" ;
Hau => mkVForms "nauka" ;
Hi Masc => mkVForms "naukak" ;
Hi Fem => mkVForms "naukan" ;
Zu => mkVForms "naukazu" } ;
tns => \\agr => ukanDu ! Ni ! tns ! agr
} ;
Gu => table {
APres => table { -- Pres
Gu => noVForm ;
Hauek => mkVForms "gauzkate" ;
Ni => noVForm ;
Zuek => mkVForms "gauzkazue" ;
Hau => mkVForms "gauzka" ;
Hi _ => noVForm ;
Zu => mkVForms "gauzkazu" } ;
tns => \\agr => ukanDu ! Ni ! tns ! agr
} ;
Hauek => table {
APres => table { -- Pres
Gu => mkVForms "dauzkagu" ;
Hauek => mkVForms "dauzkate" ;
Ni => mkVForms "dauzkat" ;
Zuek => mkVForms "dauzkazue" ;
Hau => mkVForms "dauzka" ;
Hi Masc => mkVForms "dauzkak" ;
Hi Fem => mkVForms "dauzkan" ;
Zu => mkVForms "dauzkazu" } ;
tns => \\agr => ukanDu ! Ni ! tns ! agr
} ;
Zuek => table {
APres => table {
Gu => mkVForms "zauzkategu" ;
Hauek => mkVForms "zauzkatete" ;
Ni => mkVForms "zauzkatet" ;
Zuek => noVForm ;
Hau => mkVForms "zauzkate" ;
Hi _ => noVForm ;
Zu => noVForm } ;
tns => \\agr => ukanDu ! Ni ! tns ! agr
} ;
Hau => table {
APres => table {
Gu => mkVForms "daukagu" ;
Hauek => mkVForms "daukate" ;
Ni => mkVForms "daukat" ;
Zuek => mkVForms "daukazue" ;
Hau => mkVForms "dauka" ;
Hi Masc => mkVForms "daukak" ;
Hi Fem => mkVForms "daukan" ;
Zu => mkVForms "daukazu" } ;
tns => \\agr => ukanDu ! Ni ! tns ! agr
} ;
Hi _ => table {
APres => table {
Gu => mkVForms "haukagu" ;
Hauek => mkVForms "haukate" ;
Ni => mkVForms "haukat" ;
Zuek => noVForm ;
Hau => mkVForms "hauka" ;
Hi _ => noVForm ;
Zu => noVForm } ;
tns => \\agr => ukanDu ! Ni ! tns ! agr
} ;
Zu => table {
APres => table {
Gu => mkVForms "zauzkagu" ;
Hauek => noVForm ;
Ni => mkVForms "zauzkat" ;
Zuek => noVForm ;
Hau => mkVForms "zauzka" ;
Hi _ => noVForm ;
Zu => noVForm } ;
tns => \\agr => ukanDu ! Ni ! tns ! agr
}
} ;
{-
=============================================================================
Etorri
=============================================================================
-}
etorriDa : IntransV =
\\tns,subjAgr =>
case <tns,subjAgr> of {
<APres,Ni> => mkVForms "nator" ;
<APres,Hi _> => mkVForms "hator" ;
<APres,Zu> => mkVForms "zatoz" ;
<APres,Hau> => mkVForms "dator" ;
<APres,Gu> => mkVForms "gatoz" ;
<APres,Zuek> => mkVForms "zatozte" ;
<APres,Hauek> => mkVForms "datoz" ;
<AImp,(Ni|Gu)> => noVForm ;
<AImp,Hi _> => mkVForms "hator" ;
<AImp,Zu> => mkVForms "zatoz" ;
<AImp,Zuek> => mkVForms "zatozte" ;
<AImp,Hau> => mkVForms "betor" ;
<AImp,Hauek> => mkVForms "betoz" ;
_ => izanDa ! tns ! subjAgr
} ;
{-
=============================================================================
Joan
=============================================================================
-}
joanDa : IntransV =
\\tns,subjAgr =>
case <tns,subjAgr> of {
<APres,Ni> => mkVForms "noa" ;
<APres,Hi _> => mkVForms "hoa" ;
<APres,Zu> => mkVForms "zoaz" ;
<APres,Hau> => mkVForms "doa" ;
<APres,Gu> => mkVForms "goaz" ;
<APres,Zuek> => mkVForms "zoazte" ;
<APres,Hauek> => mkVForms "doaz" ;
<APast,Ni> => mkVForms "nindoan" ;
<APast,Hi _> => mkVForms "hindoan" ;
<APast,Zu> => mkVForms "zindoazen" ;
<APast,Hau> => mkVForms "zihoan" ;
<APast,Gu> => mkVForms "gindoazen" ;
<APast,Zuek> => mkVForms "zindoazten" ;
<APast,Hauek> => mkVForms "zihoazen" ;
<AImp,(Ni|Gu)> => noVForm ;
<AImp,Hi _> => mkVForms "hoa" ;
<AImp,Zu> => mkVForms "zoaz" ;
<AImp,Zuek> => mkVForms "zoazte" ;
<AImp,Hau> => mkVForms "bihoa" ;
<AImp,Hauek> => mkVForms "bihoaz" ;
_ => izanDa ! tns ! subjAgr
} ;
{-
=============================================================================
Ekarri
=============================================================================
-}
{-
=============================================================================
Ibili
=============================================================================
-}
ibiliDa : IntransV = --TODO: check forms
table {
APast => table {
Ni => mkVForms "nenbilen" ;
Hi _ => mkVForms "henbilen" ;
Zu => mkVForms "zenbiltzan" ;
Hau => mkVForms "zebilen" ;
Gu => mkVForms "genbiltzan" ;
Zuek => mkVForms "zenbiltzaten" ;
Hauek => mkVForms "zebiltzan" } ;
ACond => table {
Ni => mkVForms "nenbilke" ;
Hi _ => mkVForms "henbilke" ;
Zu => mkVForms "zenbilzke" ;
Hau => mkVForms "lebilke" ;
Gu => mkVForms "genbiltzke" ;
Zuek => mkVForms "zenbiltzketen" ;
Hauek => mkVForms "lebilzke" } ;
APres => table {
Ni => mkVForms "nabil" ;
Hi _ => mkVForms "habil" ;
Zu => mkVForms "zabiltza" ;
Hau => mkVForms "dabil" ;
Gu => mkVForms "gabiltza" ;
Zuek => mkVForms "zabiltzate" ;
Hauek => mkVForms "dabiltza" } ;
AImp => table {
Ni => noVForm ;
Hi _ => mkVForms "habil" ;
Zu => mkVForms "zabiltza" ;
Hau => mkVForms "bebil" ;
Gu => noVForm ;
Zuek => mkVForms "zabiltzate" ;
Hauek => mkVForms "bebiltza" }
} ;
{-
=============================================================================
Jakin
=============================================================================
-}
jakinDu : TransV =
\\dobjAgr,tns,subjAgr =>
case <dobjAgr,tns,subjAgr> of {
<Hau,APres,Ni> => mkVForms "dakit" ;
<Hau,APres,Zu> => mkVForms "dakizu" ;
<Hau,APres,Hau> => mkVForms "daki" ;
<Hau,APres,Gu> => mkVForms "dakigu" ;
<Hau,APres,Zuek> => mkVForms "dakizue" ;
<Hau,APres,Hauek> => mkVForms "dakite" ;
<Hau,APast,Ni> => mkVForms "nekien" ;
<Hau,APast,Zu> => mkVForms "zenekien" ;
<Hau,APast,Hau> => mkVForms "zekien" ;
<Hau,APast,Gu> => mkVForms "genekien" ;
<Hau,APast,Zuek> => mkVForms "zenekiten" ;
<Hau,APast,Hauek> => mkVForms "zekiten" ;
<_,AImp,(Ni|Gu)> => noVForm ;
<Hau,AImp,Hau> => mkVForms "beki" ;
<Hauek,AImp,Hau> => mkVForms "bekizki" ;
<Hau,AImp,Hauek> => mkVForms "bekite" ;
<Hauek,AImp,Hauek> => mkVForms "bekizkite" ;
_ => ukanDu ! dobjAgr ! tns ! subjAgr
} ;
{-
=============================================================================
Eman
=============================================================================
-}
{-
=============================================================================
Esan
=============================================================================
-}
{-
=============================================================================
Erabili
=============================================================================
-}
{-
=============================================================================
Egin
=============================================================================
-}
}