Files
gf-rgl/src/icelandic/MorphoIce.gf

1085 lines
40 KiB
Plaintext

--# -path=.:../../prelude
--1 A Simple Icelandic Resource Morphology
-- This resource morphology contains definitions needed in the resource
-- syntax. To build a lexicon, it is better to use $ParadigmsIce$, which
-- gives a higher-level access to this module.
resource MorphoIce = ResIce ** open Prelude, (Predef=Predef), ResIce in {
flags optimize=all ;
oper
-----------------------------
-- Neuter Noun Declensions --
-----------------------------
dAuga : (SgNom,PlGen : Str) -> NForms = \auga,augna ->
let
aug = init auga ;
uaug = a2ö aug
in nForms8
auga auga auga auga
(uaug + "u") (uaug + "u") (uaug + "um") augna ;
dKvæði : (SgNom,PlDat : Str) -> NForms = \kvæði,kvæðum ->
let kvæð = init kvæði
in nForms8
kvæði kvæði kvæði (kvæði + "s")
kvæði kvæði kvæðum (kvæð + "a") ;
dBarn : (_,_ : Str) -> NForms = \barn,börn ->
nForms8
barn barn (barn + "i") (barn + "s")
börn börn (börn + "um") (barn + "a") ;
dSumar : (_,_ : Str) -> NForms = \sumar,sumur ->
let sum = init (init sumar)
in nForms8
sumar sumar (sum + "ri") (sumar + "s")
sumur sumur (sum + "rum") (sum + "ra") ;
dTré : Str -> NForms = \tré ->
let tr = init tré
in nForms8
tré tré tré (tré + "s")
tré tré (tr + "jám") (tr + "jáa") ;
-------------------------------
-- Feminine Noun Declensions --
-------------------------------
dSaga : (SgNom,PlGen : Str) -> NForms = \saga,sagna ->
let
sag = init saga ;
sög = a2ö sag ;
sögu = sög + "u"
in nForms8
saga sögu sögu sögu
(sög + "ur") (sög + "ur") (sög + "um") sagna ;
dÞökk : (_,_ : Str) -> NForms = \þökk,þakkir ->
let þakk = init (init þakkir)
in nForms8
þökk þökk þökk (þakk + "ar")
þakkir þakkir (þökk + "um") (þakk + "a") ;
dVerslun : (_,_ : Str) -> NForms = \verslun,verslanir ->
let verslan = init (init verslanir)
in nForms8
verslun verslun verslun (verslun + "ar")
verslanir verslanir (verslun + "um") (verslan + "a") ;
dKeppni : (_,_ : Str) -> NForms = \keppni,keppnir ->
let keppn = init keppni
in nForms8
keppni keppni keppni keppni
keppnir keppnir (keppn + "um") (keppn + "a") ;
dFjöður : (_,_ : Str) -> NForms = \fjöður,fjaðrir ->
let
fjöð = init (init fjöður) ;
fjaðr = init (init fjaðrir)
in nForms8
fjöður fjöður fjöður (fjaðr + "ar")
fjaðrir fjaðrir (fjöð + "rum") (fjaðr + "a") ;
dBrúður : (_,_ : Str) -> NForms = \brúður,brúðir ->
let brúð = init (init brúður)
in nForms8
brúður (brúð + "i") (brúð + "i") (brúð + "ar")
brúðir brúðir (brúð + "um") (brúð + "a") ;
dFylking : (_,_ : Str) -> NForms = \fylking,fylkingar ->
nForms8
fylking (fylking + "u") (fylking + "u") fylkingar
fylkingar fylkingar (fylking + "um") (fylking + "a") ;
dNál : (_,_ : Str) -> NForms = \nál,nálar ->
nForms8
nál nál nál nálar
nálar nálar (nál + "um") (nál + "a") ;
dLifur : (_,_ : Str) -> NForms = \lifur,lifrar ->
let lifr = init (init lifrar)
in nForms8
lifur lifur lifur lifrar
lifrar lifrar (lifr + "um") (lifr + "a") ;
dÆður : (_,_ : Str) -> NForms = \æður,æðar ->
let æð = init (init æður)
in nForms8
æður (æð + "i") (æð + "i") æðar
æðar æðar (æð + "um") (æð + "a") ;
dHeiði : (_,_ : Str) -> NForms = \heiði,heiðar ->
let heið = init heiði
in nForms8
heiði heiði heiði heiðar
heiðar heiðar (heið + "um") (heið + "a") ;
dLygi : (_,_ : Str) -> NForms = \lygi,lygar ->
let lyg = init lygi
in nForms8
lygi lygi lygi lygi
lygar lygar (lyg + "um") (lyg + "ar") ;
dNögl : (_,_,_ : Str) -> NForms = \nögl,naglar,neglur ->
let
nagl = init (init naglar)
in nForms8
nögl nögl nögl naglar
neglur neglur (nögl + "um") (nagl + "a") ;
dMörk : (SgNom,PlNom,PlGen : Str) -> NForms = \mörk,merkur,marka ->
nForms8
mörk mörk mörk merkur
merkur merkur (mörk + "um") marka ;
dMóðir : (_,_ : Str) -> NForms = \móðir,mæður ->
let
móð = init (init móðir) ;
móður = móð + "ur" ;
mæð = init (init mæður)
in nForms8
móðir móður móður móður
mæður mæður (mæð + "rum") (mæð + "ra") ;
dKona : (_,PlGen : Str) -> NForms = \kona,kvenna ->
let
kon = init kona
in nForms8
kona (kon + "u") (kon + "u") (kon + "u")
(kon + "ur") (kon + "ur") (kon + "um") kvenna ;
dTá : (_,_ : Str) -> NForms = \tá,tær ->
nForms8
tá tá tá (tá + "ar")
tær tær (tá + "um") (tá + "a") ;
dÁ : (_,_ : Str) -> NForms = \á,ár ->
nForms8
á á á ár
ár ár (á + "m") (á + "a") ;
dMús : (_,_ : Str) -> NForms = \mús,mýs ->
nForms8
mús mús mús (mús + "ar")
mýs mýs (mús + "um") (mús + "a") ;
--------------------------------
-- Masculine Noun Declensions --
--------------------------------
dSími : Str -> NForms = \sími ->
let
sím = init sími ;
usím = a2ö sím ;
síma = sím + "a"
in nForms8
sími síma síma síma
(sím + "ar") síma (usím + "um") síma ;
dNemandi : (_,_ : Str) -> NForms = \nemandi,nemendur ->
let
nemand = init nemandi ;
nemanda = nemand + "a" ;
nemend = init (init nemendur)
in nForms8
nemandi nemanda nemanda nemanda
nemendur nemendur (nemend + "um") (nemend + "a") ;
dDani : (_,_ : Str) -> NForms = \dani,danir ->
let
dan = init dani ;
udan = a2ö dan ;
dana = dan + "a"
in nForms8
dani dana dana dana
danir dana (udan + "um") dana ;
dArmur : (_,_ : Str) -> NForms = \armur,armar ->
let
arm = init (init armur) ;
örm = a2ö arm
in nForms8
armur arm (arm + "i") (arm + "s")
armar (arm + "a") (örm + "um") (arm + "a") ;
dHöfundur : (_,_ : Str) -> NForms = \höfundur,höfundar ->
let
höfund = init (init höfundur)
in nForms8
höfundur höfund (höfund + "i") höfundar
höfundar (höfund + "a") (höfund + "um") (höfund + "a") ;
dAkur : (_,_ : Str) -> NForms = \akur,akrar ->
let
akr = init (init akrar) ;
ökr = a2ö akr
in nForms8
akur akur (akr + "i") (akur + "s")
akrar (akr + "a") (ökr + "um") (akr + "a") ;
dFótur : (_,_ : Str) -> NForms = \fótur,fætur ->
let
fót = init (init fótur) ;
fæt = init (init fætur)
in nForms8
fótur fót (fæt + "i") (fót + "ar")
fætur fætur (fót + "um") (fót + "a") ;
dMaður : (_,_,_ : Str) -> NForms = \maður,manns,menn ->
let
mann = init manns
in nForms8
maður mann (mann + "i") (mann + "s")
menn menn ((a2ö mann) + "um") (mann + "a") ;
dFaðir : (_,_,_ : Str) -> NForms = \faðir,föður,feður ->
let
föð = init (init föður) ;
feð = init (init feður)
in nForms8
faðir föður föður föður
feður feður (feð + "rum") (feð + "ra") ;
dStóll : Str -> NForms = \stóll ->
let
stól = init stóll
in nForms8
stóll stól stól (stól + "s")
(stól + "ar") (stól + "a") (stól + "um") (stól + "a") ;
dSöfnuður : (_,_,_ : Str) -> NForms = \söfnuður,safnaðar,söfnuðir ->
let
söfnuð = init (init söfnuðir) ;
safnað = init (init safnaðar)
in nForms8
söfnuður söfnuð (söfnuð + "i") (safnað + "ar")
söfnuðir (söfnuð + "i") (söfnuð + "um") (safnað + "a") ;
dHiminn : (_,_ : Str) -> NForms = \himinn,himnar ->
let
himin = init himinn ;
himn = init (init himnar) ;
uhimn = a2ö himn
in nForms8
himinn himin (himn + "i") (himin + "s")
himnar (himn + "a") (uhimn + "um") (himn + "a") ;
dMór : (_,_ : Str) -> NForms = \mór,móar ->
let
mó = init mór ;
móa = init móar ;
móu = a2u móa
in nForms8
mór mó mó (mó + "s")
móar móa (móu + "m") (mó + "a") ;
dDalur : (_,_ : Str) -> NForms = \dalur,dalir ->
let
dal = init (init dalur) ;
döl = a2ö dal
in nForms8
dalur dal dal (dal + "s")
dalir (dal + "i") (döl + "um") (dal + "a") ;
dBiskup : Str -> NForms = \biskup ->
nForms8
biskup biskup (biskup + "i") (doubleS biskup)
(biskup + "ar") (biskup + "ar") (biskup + "um") (biskup + "a") ;
dFjörður : (_,_,_ : Str) -> NForms =\fjörður,fjarðar,firðir ->
let
fjörð = init (init fjörður) ;
fjarð = init (init fjarðar) ;
firð = init (init firðir)
in nForms8
fjörður fjörð (firð + "i") (fjarð + "ar")
firðir (firð + "i") (fjörð + "um") (fjarð + "a") ;
-----------------------
-- Noun Construction --
-----------------------
nForms2NeutrNoun : NForms -> Noun = \nfs -> nForms2Noun nfs (nForms2Suffix nfs Neutr) Neutr ;
nForms2MascNoun : NForms -> Noun = \nfs -> nForms2Noun nfs (nForms2Suffix nfs Masc) Masc ;
nForms2FemNoun : NForms -> Noun = \nfs -> nForms2Noun nfs (nForms2Suffix nfs Fem) Fem ;
nForms2Noun : NForms -> NForms -> Gender -> Noun = \free,suffix,g -> {
s = table {
Sg => table {
Suffix => caseList (suffix ! 0) (suffix ! 1) (suffix ! 2) (suffix ! 3) ;
_ => caseList (free ! 0) (free ! 1) (free ! 2) (free ! 3)
} ;
Pl => table {
Suffix => caseList (suffix ! 4) (suffix ! 5) (suffix ! 6) (suffix ! 7) ;
_ => caseList (free ! 4) (free ! 5) (free ! 6) (free ! 7)
}
} ;
g = g
} ;
-----------------------------------
-- Suffixed Article Construction --
-----------------------------------
nForms2Suffix : NForms -> Gender -> NForms = \nfs,g ->
let
sgNom = suffixSgNom (nfs ! 0) (nfs ! 4) g ;
sgAcc = suffixSgAcc (nfs ! 1) (nfs ! 4) g ;
sgDat = suffixSgDat (nfs ! 2) (nfs ! 4) g ;
sgGen = suffixSgGen (nfs ! 3) g ;
plNom = suffixPlNom (nfs ! 4) g ;
plAcc = suffixPlAcc (nfs ! 5) g ;
plDat = suffixPlDat (nfs ! 6) g ;
plGen = suffixPlGen (nfs ! 7) g
in nForms8
sgNom sgAcc sgDat sgGen
plNom plAcc plDat plGen ;
-- The plural form is given to deterimine if "-ur" is a part of the stem, i.e. an extened "-r", for
-- feminine nouns. In that case the "-u-" drops before the suffixed article. The "-u-" also drops
-- for neuter nouns, but that seems to be in general for neuter nouns with "-ur" in the stem - I
-- am no entirely sure about this and can't find much in literature about this...
-- hinn - hin - hið
suffixSgNom : (Nom,Pl : Str) -> Gender -> Str = \s,p,g -> case <s,p,g> of {
<_ + ("a" | "i" | "u" | "é"),_,Masc> => s + "nn" ;
<_,_,Masc> => s + "inn" ;
<_ + ("a" | "i" | "u" | "é"),_,Fem> => s + "n" ;
<front + "ur",_ + ("rar" | "rur" | "rir"),Fem> => front + "rin" ;
<_,_,Fem> => s + "in" ;
<_ + ("a" | "i" | "u" | "é"),_,Neutr> => s + "ð" ;
<front + "ur",_,Neutr> => front + "rið" ;
<_,_,Neutr> => s + "ið"
} ;
-- hinn - hina - hið
suffixSgAcc : (Acc,Pl : Str) -> Gender -> Str = \s,p,g -> case <s,p,g> of {
<_ + ("a" | "i" | "u" | "é"),_,Masc> => s + "nn" ;
<_,_,Masc> => s + "inn" ;
<front + "ur",_ + ("rar" | "rur" | "rir"),Fem> => front + "rina" ;
<_ + #consonant,_,Fem> => s + "ina" ;
<_,_,Fem> => s + "na" ;
<_ + ("a" | "i" | "u" | "é"),_,Neutr> => s + "ð" ;
<front + "ur",_,Neutr> => front + "rið" ;
<_,_,Neutr> => s + "ið"
} ;
-- hinum - hinni - hinu
suffixSgDat : (Dat,Pl : Str) -> Gender -> Str = \s,p,g -> case <s,p,g> of {
<_,_,Masc> => s + "num" ;
<front + "ur",_ + ("rar" | "rur" | "rir"),Fem> => front + "rinni" ;
<_ + #consonant,_,Fem> => s + "inni" ;
<_,_,Fem> => s + "nni" ;
<_,_,Neutr> => s + "nu"
} ;
-- hins - hinnar - hins
suffixSgGen : Str -> Gender -> Str = \s,g -> case <s,g> of {
<_ + ("a" | "i" | "u" | "é"),Masc> => s + "ns" ;
<_,Masc> => s + "ins" ;
<_ + #consonant,Fem> => s + "innar" ;
<_,Fem> => s + "nnar" ;
<_ + ("a" | "i" | "u" | "é"),Neutr> => s + "ns" ;
<_,Neutr> => s + "ins"
} ;
-- hinir - hinar - hin
suffixPlNom : Str -> Gender -> Str = \s,g -> case <s,g> of {
<_ + "nn", Masc> => s + "irnir" ;
<_ , Masc> => s + "nir" ;
<_ , Fem> => s + "nar" ;
<_ + ("a" | "i" | "u" | "é"),Neutr> => s + "n" ;
<front + "ur",Neutr> => front + "rin" ;
<_,Neutr> => s + "in"
} ;
-- hina - hinar - hin
suffixPlAcc : Str -> Gender -> Str = \s,g -> case <s,g> of {
<_ + "nn",Masc> => s + "ina" ;
<_,Masc> => s + "na" ;
<_,Fem> => s + "nar" ;
<_ + ("a" | "i" | "u" | "é"),Neutr> => s + "n" ;
<front + "ur",Neutr> => front + "rin" ;
<_,Neutr> => s + "in"
} ;
-- hinum
suffixPlDat : Str -> Gender -> Str = \s,g -> case <s,g> of {
<stem + "m", _> => stem + "num" ;
<_,_> => s + "unum"
} ;
-- hinna
suffixPlGen : Str -> Gender -> Str = \s,g -> case <s,g> of {
<front + end@("á" | "ó" | "ú") + "a",_> => front + end + "nna" ; -- not entirely sure if this goes for all masculine and neuter nouns
<_, _> => s + "nna"
} ;
---------------------------
-- Adjective Declensions --
---------------------------
--------------------------
-- Positive declensions --
--------------------------
-- takes in the stem - i.e. Sg.Fem.Nom - except in the case of an u-umlaut
dPositW : Str -> AForms = \góð -> dPositWW (góð + "i") (addJ ((a2ö góð) + "u")) ;
-- takes in the Sg.Mas.Nom and Pl.Mas.Nom
dPositWW : (_,_ : Str) -> AForms = \góði,góðu ->
let
góð = init góði ;
góða = addJ (góð + "a") ;
mas = nForms8 góði góða góða góða góðu góðu góðu góðu ;
fem = nForms8 góða góðu góðu góðu góðu góðu góðu góðu ;
neut = nForms8 góða góða góða góða góðu góðu góðu góðu
in nForms2AForms mas fem neut ;
-- used in dFalur
-- -d+t = t, e.g., vondur - vond - vont (not vondt)
-- and similarily -ð+t = t, góður - góð - gott (not goðt) - also the ó goes to o for some reason here...
ðtdt : Str -> Str = \vondur -> case vondur of {
front + "ó" + ("dur" | "ður") => front + "o" + "t" ;
front + ("dur" | "ður") => front + "t" ;
front@(_ + #consonant) + "tur" => front ;
front + "ur" => front
} ;
dFalur : (_,_ : Str) -> AForms = \falur,föl ->
let
fal = init (init falur) ;
falt = ðtdt falur ;
mas = nForms8
falur (fal + "an") (föl + "um") (fal + "s")
(fal + "ir") (fal + "a") (föl + "um") (fal + "ra") ;
fem = nForms8
föl (fal + "a") (föl + "ri") (fal + "rar")
(fal + "ar") (fal + "ar") (föl + "um") (fal + "ra") ;
neut = nForms8
(falt + "t") (falt + "t") (föl + "u") (fal + "s")
föl föl (föl + "um") (fal + "ra") ;
in nForms2AForms mas fem neut ;
dFagur : (_,_ : Str) -> AForms = \fagur,fögur ->
let
fög = init (init fögur) ;
fag = init (init fagur) ;
mas = nForms8
fagur (fag + "ran") (fög + "rum") (fagur + "s")
(fag + "rir") (fag + "ra") (fög + "rum") (fagur + "ra") ;
fem = nForms8
fögur (fag + "ra") (fagur + "ri") (fagur + "rar")
(fag + "rar") (fag + "rar") (fög + "rum") (fagur + "ra") ;
neut = nForms8
(fagur + "t") (fagur + "t") (fög + "ru") (fag + "urs")
(fög + "ur") (fög + "ur") (fög + "rum") (fagur + "ra") ;
in nForms2AForms mas fem neut ;
-- takes in the stem - Sg.Fem.Nom
dSmár : Str -> AForms = \smá ->
let
mas = nForms8
(smá + "r") (smá + "an") (smá + "um") (smá + "s")
(smá + "ir") (smá + "a") (smá + "um") (smá + "rra") ;
fem = nForms8
smá (smá + "a") (smá + "rri") (smá + "rrar")
(smá + "ar") (smá + "ar") (smá + "um") (smá + "rrar") ;
neut = nForms8
(smá + "tt") (smá + "tt") (smá + "u") (smá + "s")
smá smá (smá + "um") (smá + "rra") ;
in nForms2AForms mas fem neut ;
dFarinn : Str -> AForms = \farinn ->
let
farin = init farinn ;
far = init (init farin) ;
för = a2ö far ;
mas = nForms8
(farin + "n") (farin + "n") (för + "num") (farin + "s")
(far + "nir") (far + "na") (för + "num") (farin + "na") ;
fem = nForms8
farin (far + "na") (farin + "ni") (farin + "nar")
(far + "nar") (far + "nar") (för + "num") (farin + "na") ;
neut = nForms8
(far + "ið") (far + "ið") (för + "nu") (farin + "s")
farin farin (för + "num") (farin + "na") ;
in nForms2AForms mas fem neut ;
dLítill : Str -> AForms = \lítill ->
let
lítil = init lítill ;
líti = init lítil ;
litl = í2i ((init líti) + "l") ;
mas = nForms8
lítill (líti + "nn") (litl + "um") (lítil + "s")
(litl + "ir") (litl + "a") (litl + "um") (lítil + "la") ;
fem = nForms8
lítil (litl + "a") (lítil + "li") (lítil + "lar")
(litl + "ar") (litl + "ar") (litl + "um") (lítil + "la") ;
neut = nForms8
(líti + "ð") (líti + "ð") (litl + "u") (lítil + "s")
lítil lítil (litl + "um") (lítil + "la") ;
in nForms2AForms mas fem neut ;
-- This only applies to adjective that are really the present particple of a verb,
-- which has the tendency to "change" into an adjective at times. So this will be
-- mostly (only) used with verb paradigms - but kept here.
dTalinn : Str -> AForms = \talinn ->
let
talin = init talinn ;
tal = init (init talin) ;
tald = dorð tal ;
töl = a2ö tal ;
töl = dorð töl ;
mas = nForms8
(talin + "n") (talin + "n") (töl + "dum") (talin + "s")
(tal + "dir") (tal + "da") (töl + "dum") (talin + "na") ;
fem = nForms8
talin (tal + "da") (talin + "ni") (talin + "nar")
(tal + "dar") (tal + "dar") (töl + "dum") (talin + "na") ;
neut = nForms8
(tal + "ið") (tal + "ið") (töl + "du") (talin + "s")
talin talin (töl + "dum") (tal + "inna") ;
in nForms2AForms mas fem neut ;
dSeinn : Str -> AForms = \seinn ->
let
sein = init seinn ;
mas = nForms8
seinn (sein + "an") (sein + "um") (sein + "s")
(sein + "ir") (sein + "a") (sein + "um") (sein + "na") ;
fem = nForms8
sein (sein + "a") (sein + "ni") (sein + "nar")
(sein + "ar") (sein + "ar") (sein + "um") (sein +"na") ;
neut = nForms8
(sein + "t") (sein + "t") (sein + "u") (sein + "s")
sein sein (sein + "um") (sein + "na") ;
in nForms2AForms mas fem neut ;
-- takes in the stem - Sg.Fem.Nom
dNýr : Str -> AForms = \ný ->
let
mas = nForms8
(ný + "r") (ný + "jan") (ný + "jum") (ný + "s")
(ný + "ir") (ný + "ja") (ný + "jum") (ný + "rra") ;
fem = nForms8
ný (ný + "ja") (ný + "rri") (ný + "rrar")
(ný + "jar") (ný + "jar") (ný + "jum") (ný + "rra") ;
neut = nForms8
(ný + "tt") (ný + "tt") (ný + "ju") (ný + "s")
ný ný (ný + "jum") (ný + "rra") ;
in nForms2AForms mas fem neut ;
dDýr : Str -> AForms = \dýr ->
let
udýr = a2ö dýr ;
mas = nForms8
dýr (dýr + "an") (udýr + "um") (dýr + "s")
(dýr + "ir") (dýr + "a") (udýr + "um") (dýr + "ra") ;
fem = nForms8
udýr (dýr + "a") (dýr + "ri") (dýr + "rar")
(dýr + "ar") (dýr + "ar") (udýr + "um") (dýr + "ra") ;
neut = nForms8
(dýr + "t") (dýr + "t") (udýr + "u") (dýr + "s")
udýr udýr (udýr + "um") (dýr + "ra") ;
in nForms2AForms mas fem neut ;
-- Currently not used, I am not sure if all words ening in -all and -ull behave like this.
dGamall : (_,_ : Str) -> AForms = \gamall,gömul ->
let
gamal = init gamall ;
gaml = (init (init gamal)) + "l" ;
göml = (init (init gömul)) + "l" ;
mas = nForms8
gamall (gaml + "an") (göml + "um") (gamal + "s")
(gaml + "ir") (gaml + "a") (göml + "um") (gamal + "la") ;
fem = nForms8
gömul (gaml + "a") (gamal + "li") (gamal + "lar")
(gaml + "ar") (gaml + "ar") (göml + "um") (gamal + "la") ;
neut = nForms8
(gamal + "t") (gamal + "t") (göml + "u") (gamal + "s")
gömul gömul (göml + "um") (gamal + "la") ;
in nForms2AForms mas fem neut ;
-----------------------------
-- Comparitive declensions --
-----------------------------
-- Here declension operations are named after their suffixed ending
-- and are given the stem of the word as input. The masculine and feminine
-- are identical in all cases and numbers.
dAri : Str -> AForms = \gul ->
let
gulari = gul + "ari" ;
gulara = gul + "ara" ;
mas = nForms8
gulari gulari gulari gulari
gulari gulari gulari gulari ;
neut = nForms8
gulara gulara gulara gulara
gulari gulari gulari gulari ;
in nForms2AForms mas mas neut ;
dRi : Str -> AForms = \þynn ->
let
þynnri = þynn + "ri" ;
þynnra = þynn + "ra" ;
mas = nForms8
þynnri þynnri þynnri þynnri
þynnri þynnri þynnri þynnri ;
neut = nForms8
þynnra þynnra þynnra þynnra
þynnri þynnri þynnri þynnri ;
in nForms2AForms mas mas neut ;
dI : Str -> AForms = \seinn ->
let
seinni = seinn + "i" ;
seinna = seinn + "a" ;
mas = nForms8
seinni seinni seinni seinni
seinni seinni seinni seinni ;
neut = nForms8
seinna seinna seinna seinna
seinni seinni seinni seinni ;
in nForms2AForms mas mas neut ;
-----------------------------
-- Superlative declensions --
-----------------------------
dFalastur : (_,_ : Str) -> AForms = \falastur,fölust ->
let
falast = init (init falastur) ;
mas = nForms8
falastur (falast + "an") (fölust + "um") (falast + "s")
(falast + "ir") (falast + "a") (fölust + "um") (falast + "ra") ;
fem = nForms8
fölust (falast + "a") (falast + "ri") (falast + "rar")
(falast + "ar") (falast + "ar") (fölust + "um") (falast + "ra") ;
neut = nForms8
falast falast (fölust + "u") (falast + "s")
fölust fölust (fölust + "um") (falast + "ra") ;
in nForms2AForms mas fem neut ;
dSuperlW : (_,_ : Str) -> AForms = \falast,fölust ->
let
falasti = falast + "i" ;
falasta = falast + "a" ;
fölustu = fölust + "u" ;
mas = nForms8
falasti falasta falasta falasta
fölustu fölustu fölustu fölustu ;
fem = nForms8
falasta fölustu fölustu fölustu
fölustu fölustu fölustu fölustu ;
neut = nForms8
falasta falasta falasta falasta
fölustu fölustu fölustu fölustu ;
in nForms2AForms mas fem neut ;
----------------------------
-- Adjective Construction --
----------------------------
aForms2Adjective : (x1,_,_,_,x5 : AForms) -> Str -> Adj = \positw,posits,compar,superlw,superls,aadv -> {
s = table {
APosit Weak Sg Masc c => caseList (positw ! Masc ! 0) (positw ! Masc ! 1) (positw ! Masc ! 2) (positw ! Masc ! 3) ! c ;
APosit Weak Sg Fem c => caseList (positw ! Fem ! 0) (positw ! Fem ! 1) (positw ! Fem ! 2) (positw ! Fem ! 3) ! c ;
APosit Weak Sg Neutr c => caseList (positw ! Neutr ! 0) (positw ! Neutr ! 1) (positw ! Neutr ! 2) (positw ! Neutr ! 3) ! c ;
APosit Weak Pl _ c => caseList (positw ! Masc ! 4) (positw ! Masc ! 5) (positw ! Masc ! 6) (positw ! Masc ! 7) ! c ;
APosit Strong Sg Masc c => caseList (posits ! Masc ! 0) (posits ! Masc ! 1) (posits ! Masc ! 2) (posits ! Masc ! 3) ! c ;
APosit Strong Sg Fem c => caseList (posits ! Fem ! 0) (posits ! Fem ! 1) (posits ! Fem ! 2) (posits ! Fem ! 3) ! c ;
APosit Strong Sg Neutr c => caseList (posits ! Neutr ! 0) (posits ! Neutr ! 1) (posits ! Neutr ! 2) (posits ! Neutr ! 3) ! c ;
APosit Strong Pl Masc c => caseList (posits ! Masc ! 4) (posits ! Masc ! 5) (posits ! Masc ! 6) (posits ! Masc ! 7) ! c ;
APosit Strong Pl Fem c => caseList (posits ! Fem ! 4) (posits ! Fem ! 5) (posits ! Fem ! 6) (posits ! Fem ! 7) ! c ;
APosit Strong Pl Neutr c => caseList (posits ! Neutr ! 4) (posits ! Neutr ! 5) (posits ! Neutr ! 6) (posits ! Neutr ! 7) ! c ;
ACompar Sg Masc c => caseList (compar ! Masc ! 0) (compar ! Masc ! 1) (compar ! Masc ! 2) (compar ! Masc ! 3) ! c ;
ACompar Sg Fem c => caseList (compar ! Fem ! 0) (compar ! Fem ! 1) (compar ! Fem ! 2) (compar ! Fem ! 3) ! c ;
ACompar Sg Neutr c => caseList (compar ! Neutr ! 0) (compar ! Neutr ! 1) (compar ! Neutr ! 2) (compar ! Neutr ! 3) ! c ;
ACompar Pl _ c => caseList (compar ! Masc ! 4) (compar ! Masc ! 5) (compar ! Masc ! 6) (compar ! Masc ! 7) ! c ;
ASuperl Weak Sg Masc c => caseList (superlw ! Masc ! 0) (superlw ! Masc ! 1) (superlw ! Masc ! 2) (superlw ! Masc ! 3) ! c ;
ASuperl Weak Sg Fem c => caseList (superlw ! Fem ! 0) (superlw ! Fem ! 1) (superlw ! Fem ! 2) (superlw ! Fem ! 3) ! c ;
ASuperl Weak Sg Neutr c => caseList (superlw ! Neutr ! 0) (superlw ! Neutr ! 1) (superlw ! Neutr ! 2) (superlw ! Neutr ! 3) ! c ;
ASuperl Weak Pl _ c => caseList (superlw ! Masc ! 4) (superlw ! Masc ! 5) (superlw ! Masc ! 6) (superlw ! Masc ! 7) ! c ;
ASuperl Strong Sg Masc c => caseList (superls ! Masc ! 0) (superls ! Masc ! 1) (superls ! Masc ! 2) (superls ! Masc ! 3) ! c ;
ASuperl Strong Sg Fem c => caseList (superls ! Fem ! 0) (superls ! Fem ! 1) (superls ! Fem ! 2) (superls ! Fem ! 3) ! c ;
ASuperl Strong Sg Neutr c => caseList (superls ! Neutr ! 0) (superls ! Neutr ! 1) (superls ! Neutr ! 2) (superls ! Neutr ! 3) ! c ;
ASuperl Strong Pl Masc c => caseList (superls ! Masc ! 4) (superls ! Masc ! 5) (superls ! Masc ! 6) (superls ! Masc ! 7) ! c ;
ASuperl Strong Pl Fem c => caseList (superls ! Fem ! 4) (superls ! Fem ! 5) (superls ! Fem ! 6) (superls ! Fem ! 7) ! c ;
ASuperl Strong Pl Neutr c => caseList (superls ! Neutr ! 4) (superls ! Neutr ! 5) (superls ! Neutr ! 6) (superls ! Neutr ! 7) ! c
} ;
adv = aadv
} ;
----------------------
-- Verb Conjugation --
----------------------
--------------------------------
-- Weak/regular verb patterns --
--------------------------------
-- the principal part for weak patterns is :
-- infinitive - first person singular past tense indicative mood - past participle
-- the present participle is not used in these patterns
-- telja - taldi - talinn
cTelja : (_,_,_ : Str) -> MForms = \telja,tel,taldi ->
let
telj = init telja ;
tald = init taldi ;
töld = a2ö tald ;
teld = tel + (getðiditi taldi) ;
presInd = tForms6 tel (tel + "ur") (tel + "ur") (telj + "um") (telj + "ið") (telj + "a") ;
pastInd = tForms6 taldi (taldi + "r") taldi (töld + "um") (töld + "uð") (töld + "u") ;
presSub = tForms6 (telj + "i") (telj + "ir") (telj + "i") (telj + "um") (telj + "ið") (telj + "i") ;
pastSub = tForms6 (teld + "i") (teld + "ir") (teld + "i") (teld + "um") (teld + "uð") (teld + "u")
in tForms2MForms presInd pastInd presSub pastSub ;
-- dæma - dæmdi - dæmdur
-- duga - dugði - dugaður (does not contain the past participle)
cDæma : (_,_,_ : Str) -> MForms = \dæma,dæmi,dæmdi ->
let
dæm = init dæma ;
udæm = a2ö dæm ;
dæmd = init dæmdi ;
udæmd = a2ö dæmd ;
presInd = tForms6 dæmi (dæmi + "r") (dæmi + "r") (udæm + "um") (dæmi + "ð") dæma ;
pastInd = tForms6 dæmdi (dæmdi + "r") dæmdi (udæmd + "um") (udæmd + "uð") (udæmd + "u") ;
presSub = tForms6 dæmi (dæmi + "r") dæmi (udæm + "um") (dæmi + "ð") dæmi ;
pastSub = tForms6 dæmdi (dæmdi + "r") dæmdi (udæmd + "um") (udæmd + "uð") (udæmd + "u")
in tForms2MForms presInd pastInd presSub pastSub ;
-- kalla - kallaði - kallaður
cKalla : (_,_ : Str) -> MForms = \kalla,kallaði ->
let
kall = init kalla ;
köll = a2ö kall ;
kölluð = köll + "uð";
presInd = tForms6 kalla (kalla + "r") (kalla + "r") (köll + "um") (kall + "ið") kalla ;
pastInd = tForms6 kallaði (kallaði + "r") kallaði (kölluð + "um") (kölluð + "u") (kölluð + "u") ;
presSub = tForms6 (kall + "i") (kall + "ir") (kall + "i") (köll + "um") (kall + "ið") (kall + "i") ;
pastSub = tForms6 kallaði (kallaði + "r") kallaði (kölluð + "um") (kölluð + "uð") (kölluð + "u")
in tForms2MForms presInd pastInd presSub pastSub ;
------------------------------------
-- Strong/irregular verb patterns --
------------------------------------
-- the principal part for strong patterns is :
-- infinitive - first person singular past tense indicative mood - first person plural past tense indicative mood - past participle
-- the present participle is not used in these patterns..
-- bíta beit bitum
cBíta : (_,_,_ : Str) -> MForms = \bíta,beit,bitum ->
let
bít = init bíta ;
bei = init beit ;
bit = init (init bitum) ;
presInd = tForms6 bít (bít + "ur") (bít + "ur") (bít + "um") (bít + "ið") (bít + "a") ;
pastInd = tForms6 beit (bei + "st") beit bitum (bit + "uð") (bit + "u") ;
presSub = tForms6 (bít + "i") (bít + "ir") (bít + "i") (bít + "um") (bít + "ið") (bít + "i") ;
pastSub = tForms6 (bit + "i") (bit + "ir") (bit + "i") (bit + "um") (bit + "uð") (bit + "u")
in tForms2MForms presInd pastInd presSub pastSub ;
-- bjóða býð bauð buðum byði
cBjóða : (_,_,_,_,_ : Str) -> MForms = \bjóða,býð,bauð,buðum,byði ->
let
bjóð = init bjóða ;
buð = init (init buðum) ;
byð = init byði ;
presInd = tForms6 býð (býð + "ur") (býð + "ur") (bjóð + "um") (bjóð + "ið") (bjóð + "a") ;
pastInd = tForms6 bauð (bauð + "st") bauð buðum (buð + "uð") (buð + "u") ;
presSub = tForms6 (bjóð + "i") (bjóð + "ir") (bjóð + "i") (bjóð + "um") (bjóð + "ið") (bjóð + "i") ;
pastSub = tForms6 byði (byð + "ir") byði (byð + "um") (byð + "uð") (byð + "u")
in tForms2MForms presInd pastInd presSub pastSub ;
-- bresta brast brustum brostið
cBresta : (_,_,_,_,_ : Str) -> MForms = \bresta,brest,brast,brustum,brysti ->
let
brust = init (init brustum) ;
bra = init (init brast) ;
bryst = init brysti ;
presInd = tForms6 brest (brest + "ur") (brest + "ur") (brest + "um") (brest + "ið") (brest + "a") ;
pastInd = tForms6 brast (bra + "st") brast brustum (brust + "uð") (brust + "u") ;
presSub = tForms6 (brest + "i") (brest + "ir") (brest + "i") (brest + "um") (brest + "ið") (brest + "i") ;
pastSub = tForms6 brysti (bryst + "ir") brysti (bryst + "um") (bryst + "uð") (bryst + "u")
in tForms2MForms presInd pastInd presSub pastSub ;
-- fara fór fórum farið
cFara : (_,_,_,_,_ : Str) -> MForms = \fara,fer,fór,fórum,færi ->
let
far = init (fara) ;
för = a2ö far ;
fær = init færi ;
presInd = tForms6 fer (fer + "ð") fer (för + "um") (far + "ið") (far + "a") ;
pastInd = tForms6 fór (fór + "st") fór fórum (fór + "uð") (fór + "u") ;
presSub = tForms6 (far + "i") (far + "ið") (far + "i") (för + "um") (far + "ið") (far + "i") ;
pastSub = tForms6 færi (fær + "ir") færi (fær + "um") (fær + "uð") (fær + "u")
in tForms2MForms presInd pastInd presSub pastSub ;
cAusa : (_,_,_,_,_ : Str) -> MForms = \ausa,eys,jós,jusum,ysi ->
let
aus = init ausa ;
jusu = init jusum ;
ys = init ysi ;
presInd = tForms6 eys (eys + "t") eys (aus + "um") (aus + "ið") ausa ;
pastInd = tForms6 jós (jós + "t") jós jusum (jusu + "ð") jusu ;
presSub = tForms6 (aus + "i") (aus + "ir") (aus + "i") (aus + "um") (aus + "ið") (aus + "i") ;
pastSub = tForms6 ysi (ysi + "r") ysi (ys + "um") (ys + "uð") (ys + "u")
in tForms2MForms presInd pastInd presSub pastSub ;
-------------------------------------------
-- Preterite Present Verbs and -ri verbs--
-------------------------------------------
cVera : (_,_,_,_,_ : Str) -> MForms = \er,var,voru,sé,væri ->
let
vær = init væri ;
presInd = tForms6 er (er + "t") er (er + "um") (er + "uð") (er + "u") ;
pastInd = tForms6 var (var + "st") var (voru + "m") (voru + "ð") voru ;
presSub = tForms6 sé (sé + "rt") sé (sé + "um") (sé + "uð") (sé + "u") ;
pastSub = tForms6 væri (væri + "r") væri (vær + "um") (vær + "uð") (vær + "u")
in tForms2MForms presInd pastInd presSub pastSub ;
cMuna : (_,_,_,_,_ : Str) -> MForms = \muna,man,mundi,muni,myndi ->
let
mun = init muna ;
munj = init muni ;
mund = init mundi ;
mynd = init myndi ;
presInd = tForms6 man (p2End man) man (mun + "um") (mun + "ið") (mun + "a") ;
pastInd = tForms6 mundi (mund + "ir") (mund + "i") (mund + "um") (mund + "uð") (mund + "u") ;
presSub = tForms6 muni (muni + "r") muni (munj + "um") (munj + "ið") (munj + "i") ;
pastSub = tForms6 myndi (mynd + "ir") (mynd + "i") (mynd + "um") (mynd + "ið") (mynd + "u")
in tForms2MForms presInd pastInd presSub pastSub ;
-- in the 2nd person singular present indicative
-- the case ending seems to be either -st or t. These
-- preterite present verbs are only so many 10 (or 11 countin vera)
-- so it can be easily pattern matched for all cases.
p2End : Str -> Str = \man -> case man of {
front + "an" => man + "st" ;
front + "á" => man + "tt" ;
front + "eit" => front + "eist" ;
_ => man + "t"
} ;
cRóa : (_,_,_,_ : Str) -> MForms = \róa,ræ,reri,rói ->
let
ró = init róa ;
rer = init reri ;
presInd = tForms6 ræ (ræ + "rð") (ræ + "r") (ró + "um") (ró + "ið") róa ;
pastInd = tForms6 reri (reri + "r") reri (rer + "um") (rer + "uð") (rer + "u") ;
presSub = tForms6 rói (rói + "r") rói (ró + "um") (rói + "ð") rói ;
pastSub = tForms6 reri (reri + "r") reri (rer + "um") (rer + "uð") (rer + "u")
in tForms2MForms presInd pastInd presSub pastSub ;
-----------------------
-- Verb Construction --
-----------------------
vForms2Verb : Str -> MForms -> (x5,x6,x7,x8 : Str) -> (x9,x10 : AForms) -> Verb =
\inf,mforms,impSg,impPl,presPart,sup,pastPartW,pastPartS ->
let
presInd = mforms ! Indicative ! DPres ;
pastInd = mforms ! Indicative ! DPast ;
presSub = mforms ! Subjunctive ! DPres ;
pastSub = mforms ! Subjunctive ! DPast
in {
s = table {
VInf => inf ;
VPres v Indicative Sg p => persList (mkVoice v (presInd ! 0)) (mkVoice v (presInd ! 1)) (mkVoice v (presInd ! 2)) ! p;
VPres v Indicative Pl p => persList (mkVoice v (presInd ! 3)) (mkVoice v (presInd ! 4)) (mkVoice v (presInd ! 5)) ! p;
VPast v Indicative Sg p => persList (mkVoice v (pastInd ! 0)) (mkVoice v (pastInd ! 1)) (mkVoice v (pastInd ! 2)) ! p;
VPast v Indicative Pl p => persList (mkVoice v (presInd ! 3)) (mkVoice v (pastInd ! 4)) (mkVoice v (pastInd ! 5)) ! p;
VPres v Subjunctive Sg p => persList (mkVoice v (presSub ! 0)) (mkVoice v (presSub ! 1)) (mkVoice v (presSub ! 2)) ! p;
VPres v Subjunctive Pl p => persList (mkVoice v (presSub ! 3)) (mkVoice v (presSub ! 4)) (mkVoice v (presSub ! 5)) ! p;
VPast v Subjunctive Sg p => persList (mkVoice v (pastSub ! 0)) (mkVoice v (pastSub ! 1)) (mkVoice v (pastSub ! 2)) ! p;
VPast v Subjunctive Pl p => persList (mkVoice v (presSub ! 3)) (mkVoice v (pastSub ! 4)) (mkVoice v (pastSub ! 5)) ! p;
VImp v Sg => mkVoice v impSg ;
VImp v Pl => mkVoice v impPl
} ;
p = table {
PWeak Sg Masc c => caseList (pastPartW ! Masc ! 0) (pastPartW ! Masc ! 1) (pastPartW ! Masc ! 2) (pastPartW ! Masc ! 3) ! c ;
PWeak Sg Fem c => caseList (pastPartW ! Fem ! 0) (pastPartW ! Fem ! 1) (pastPartW ! Fem ! 2) (pastPartW ! Fem ! 3) ! c ;
PWeak Sg Neutr c => caseList (pastPartW ! Neutr ! 0) (pastPartW ! Neutr ! 1) (pastPartW ! Neutr ! 2) (pastPartW ! Neutr ! 3) ! c ;
PWeak Pl _ c => caseList (pastPartW ! Masc ! 4) (pastPartW ! Masc ! 5) (pastPartW ! Masc ! 6) (pastPartW ! Masc ! 7) ! c ;
PStrong Sg Masc c => caseList (pastPartS ! Masc ! 0) (pastPartS ! Masc ! 1) (pastPartS ! Masc ! 2) (pastPartS ! Masc ! 3) ! c ;
PStrong Sg Fem c => caseList (pastPartS ! Fem ! 0) (pastPartS ! Fem ! 1) (pastPartS ! Fem ! 2) (pastPartS ! Fem ! 3) ! c ;
PStrong Sg Neutr c => caseList (pastPartS ! Neutr ! 0) (pastPartS ! Neutr ! 1) (pastPartS ! Neutr ! 2) (pastPartS ! Neutr ! 3) ! c ;
PStrong Pl Masc c => caseList (pastPartS ! Masc ! 4) (pastPartS ! Masc ! 5) (pastPartS ! Masc ! 6) (pastPartS ! Masc ! 7) ! c ;
PStrong Pl Fem c => caseList (pastPartS ! Fem ! 4) (pastPartS ! Fem ! 5) (pastPartS ! Fem ! 6) (pastPartS ! Fem ! 7) ! c ;
PStrong Pl Neutr c => caseList (pastPartS ! Neutr ! 4) (pastPartS ! Neutr ! 5) (pastPartS ! Neutr ! 6) (pastPartS ! Neutr ! 7) ! c ;
PPres => presPart
} ;
sup =\\v => mkVoice v sup
} ;
----------------------
-- Noun Auxiliaries --
----------------------
vowel : pattern Str = #("a" | "á" | "e" | "é" | "i" | "í" | "o" | "ó" | "u" | "ú" | "y" | "ý" | "æ" | "ö" | "au" | "ei" | "ey") ;
consonant : pattern Str = #("b" | "d" | "ð" | "f" | "g" | "h" | "j" | "k" | "l" | "m" | "n" | "p" | "r" | "s" | "t" | "v" | "x" | "þ") ;
-- This function is still naive. Only takes into count words where only one "a" changes to "ö".
-- Therefore words like "banani - bönunum" are not included. And even in such cases there it
-- can be ambiguous ho the shift should be, e.g., "ananas" - "ananösum" and "arabi" - "aröbum"
-- but "banani" - "bönunum". But maybe such cases should be caught with more input variables
-- in the patternmatching of paradigms and in the noun declensions above.
-- It must also be taken account for compound words. Then only the last word should decline and
-- experience any shift in a to ö.
a2ö : Str -> Str = \barn -> case barn of {
-- is this powerful enough?
front + "a" + back@(#consonant*) => front + "ö" + back ;
_ => barn
} ;
a2u : Str -> Str = \s -> case s of {
front + "a" + back@(#consonant*) => front + "u" + back ;
_ => s
} ;
-- I am fairly certain it works the same way as a2ö
-- currently not used - keep or trash?
ö2a : Str -> Str = \þökk -> case þökk of {
front + "ö" + back@(#consonant*) => front + "a" + back ;
_ => þökk
} ;
doubleS : Str -> Str = \s -> case s of {
front + "s" => s ;
_ => s + "s"
} ;
NForms : Type = Predef.Ints 7 => Str ;
-- another (maybe) possible option (and maybe more optimal) would be to have nForms just two, Sg.Nom and Pl.Nom
nForms8 : (x1,_,_,_,_,_,_,x8 : Str) -> NForms =
\sgNom,sgAcc,sgDat,sgGen,plNom,plAcc,plDat,plGen -> table {
0 => sgNom ;
1 => sgAcc ;
2 => sgDat ;
3 => sgGen ;
4 => plNom ;
5 => plAcc ;
6 => plDat ;
7 => plGen
} ;
---------------------------
-- Adjective Auxiliaries --
---------------------------
-- Not to be confused with ResIce.AForm
-- I find this name fitting but it can lead to confusions.
AForms : Type = Gender => NForms ;
nForms2AForms : (x1,_,x3 : NForms) -> AForms = \mas,fem,neut -> table {
Masc => mas ;
Fem => fem ;
Neutr => neut
} ;
í2i : Str -> Str = \lítl -> case lítl of {
front + "í" + back@(#consonant*) => front + "i" + back ;
_ => lítl
} ;
addJ : Str -> Str = \nýa -> case nýa of {
front + vow@("ý" | "æ") + end@("a" | "u") => front + vow + "j" + end ;
_ => nýa
} ;
-- read as d or ð, not d(eclension) orð...
dorð : Str -> Str = \tal -> case tal of {
_ + ("l" | "m" | "n") => tal + "d" ;
_ + "r" => tal + "ð" ;
_ => tal
} ;
----------------------
-- Verb Auxiliaries --
----------------------
-- There are 12 word forms for both the Indicative,
-- and Subjunctive moods, and there are 6 word forms
-- for both the present and the past for each.
TForms : Type = Predef.Ints 5 => Str ;
MForms : Type = Mood => DTense => TForms ;
tForms6 : (x1,_,_,_,_,x6 : Str) -> TForms =
\sgP1,sgP2,sgP3,plP1,plP2,plP3 -> table {
0 => sgP1 ;
1 => sgP2 ;
2 => sgP3 ;
3 => plP1 ;
4 => plP2 ;
5 => plP3
} ;
tForms2MForms : (x1,_,_,x4 : TForms) -> MForms =
\presInd,pastInd,presSub,pastSub -> table {
Indicative => table {
DPres => presInd ;
DPast => pastInd
} ;
Subjunctive => table {
DPres => presSub ;
DPast => pastSub
}
} ;
-- for past weak/regular verbs
ðiditi : Str -> Str = \stem -> case stem of {
-- ði
_ + #vowel => stem + "ði" ;
front + ("f" | "j") => front + "ði" ;
_ + #vowel + ("r" | "rf" | "rg") => stem + "ði" ;
_ + "rr" => stem + "ði" ; -- somethimes - otherwise + "ti", e.g., sperra-sperrti
-- ti
front@(_ + #consonant) + "t" => front + "i" ;
_ + ("p" | "t" | "k") => stem + "ti" ;
front@(_ + "r") + "ð" => front + "ti" ;
front@(_ + ("l" | "n")) + "d" => front + "ti" ; -- usually otherwise + "di", e.g., ýlda-ýldi, senda-sendi
_ + ("ll" | "nn") => stem + "ti" ; -- usually otherwise + "di", e.g, brenna-brenndi,fella felldi
-- di
front@(_ + #vowel) + "ð" => front + "ddi" ;
_ + "dd" => stem + "i" ;
_ => stem + "di"
} ;
-- get the past ending (of week verbs) - only used for cTelja patterns
getðiditi : Str -> Str = \s -> case s of {
_ + "ði" => "ði" ;
_ + "di" => "di" ;
_ + "ti" => "ti"
} ;
param
DTense = DPast | DPres ;
} ;