Modul:Verb
Die Dokumentation für dieses Modul kann unter Modul:Verb/Doku erstellt werden
local Verb = {}
-- this function enables the module to be called from a template
function Verb.main(frame)
if type(Verb[frame.args[1]]) == 'function'
then
return Verb[frame.args[1]](frame.args[2], frame.args[3])
else
return Verb[frame.args[1]][frame.args[2]]
end
end
-- Grundform für Gerundivum erzeugen
-- Aufruf von einer Vorlage: {{#invoke:Verb|gerundivum|lemma|params}}
function Verb.gerundivum(frame)
local s = frame.args[1]
local par2 = frame.args[2]
local geslang = mw.ustring.len(s)
local prefixe = 0
local teil1 = ""
local teil2 = ""
local lteil1 = 0
local lteil2 = 0
local retp = "" -- returnstring
if (par2) then
prefixe = tonumber((mw.ustring.sub(par2,1,1)))
end
if prefixe > 0
then
teil1 = Verb.vorsilbe(s)
lteil1 = mw.ustring.len(teil1)
if prefixe > 1
then
teil2 = Verb.vorsilbe(mw.ustring.sub(s,lteil1+1,geslang))
lteil2 = mw.ustring.len(teil2)
end
retp = teil1 .. teil2 .. "zu"
end
if mw.ustring.sub(s,geslang-2,geslang) == "tun"
then
s = mw.ustring.sub(s,1,geslang-3) .. "tuen"
geslang = geslang + 1
end
if prefixe == 0
then
retp = s .. "|zu=zu"
else
retp = retp .. mw.ustring.sub(s,lteil1+lteil2+1,geslang)
end
return retp
end
-- Variable Daten für regelmäßige Konjugationen erzeugen
-- Aufruf von einer Vorlage: {{#invoke:Verb|vorsilbe|lemma|params}}
function Verb.konjugation(frame)
local s = frame.args[1]
local par2 = frame.args[2]
local geslang = mw.ustring.len(s)
local prefixe = 0
local ge = ""
local restlang = geslang - 4
local rstring = mw.ustring.sub(s,1,restlang)
local teil1 = ""
local teil2 = ""
local retp = "" -- returnstring
local v2 = ""
local mt = "|Infinitiv=einteilig|Nebensatzkonjugation=einteilig"
if par2 then
prefixe = tonumber((mw.ustring.sub(par2,1,1)))
if mw.ustring.len(par2) > 1 then
ge = "ge"
end
end
if (mw.ustring.sub(s,geslang - 4,geslang - 3) == "ch")
then
v2 = "ch|"
restlang = restlang - 1
else
v2 = mw.ustring.sub(s,geslang - 3,geslang - 3) .. "|"
end
local v3 = mw.ustring.sub(s,geslang - 2,geslang - 2) .. "|"
local v4 = mw.ustring.sub(s,geslang - 1,geslang - 1) .. "|"
local v5 = mw.ustring.sub(s,geslang,geslang) .. "|"
if prefixe > 0
then
teil1 = Verb.vorsilbe(s)
lteil1 = mw.ustring.len(teil1)
retp = "Teil 1=" .. teil1 .. "|"
restlang = restlang - lteil1
rstring = mw.ustring.sub(s,lteil1 + 1,lteil1 + restlang)
if prefixe > 1
then
teil2 = Verb.vorsilbe(mw.ustring.sub(s,lteil1+1,geslang))
lteil2 = mw.ustring.len(teil2)
retp = retp .. "Teil 2=" .. teil2 .. "|"
restlang = restlang - lteil2
rstring = mw.ustring.sub(rstring,lteil2 + 1,lteil2 + restlang)
end
end
local v1 = mw.ustring.sub(rstring,1,restlang) .. "|"
retp = retp .. v1 .. v2 .. v3 ..v4 .. v5
-- Partizip II generieren
local elim = Verb.PIIt(s)
if prefixe == 0
then
retp = retp .. ge .. mw.ustring.sub(s,1,geslang - elim) .. "t"
elseif prefixe == 1
then
retp = retp .. teil1 .. ge
retp = retp .. mw.ustring.sub(s,lteil1+1,geslang - elim) .. "t"
retp = retp .. mt
elseif prefixe == 2
then
retp = retp .. teil1 .. teil2 .. ge
retp = retp .. mw.ustring.sub(s,lteil1+lteil2+1,geslang - elim) .. "t"
retp = retp .. mt
end
return retp
end
-- Präfixe von trennbaren Verben ermitteln
-- Aufruf von einer Vorlage: {{#invoke:Verb|main|vorsilbe|lemma}}
function Verb.vorsilbe(s)
local geslang = mw.ustring.len(s)
local slang = 0
local vlang = 0
if geslang < 7 then
if mw.ustring.sub(s,geslang-2,geslang) == "tun"
then
slang = geslang - 3
else
return ""
end
else
slang = geslang - 4
end
if slang >= 14 then
if (mw.ustring.sub(s,1,14) == "hintereinander")
then
vlang = 14
return mw.ustring.sub(s,1,vlang)
end
end
if slang >= 13 then
if (mw.ustring.sub(s,1,13) == "durcheinander" or
mw.ustring.sub(s,1,13) == "gegeneinander" or
mw.ustring.sub(s,1,13) == "nebeneinander" or
mw.ustring.sub(s,1,13) == "untereinander" or
mw.ustring.sub(s,1,13) == "widereinander")
then
vlang = 13
return mw.ustring.sub(s,1,vlang)
end
end
if slang >= 12 then
if mw.ustring.sub(s,1,12) == "übereinander"
then
vlang = 12
return mw.ustring.sub(s,1,vlang)
end
end
if slang>= 11 then
if (mw.ustring.sub(s,1,11) == "aufeinander" or
mw.ustring.sub(s,1,11) == "auseinander" or
mw.ustring.sub(s,1,11) == "beieinander" or
mw.ustring.sub(s,1,11) == "miteinander" or
mw.ustring.sub(s,1,11) == "voneinander")
then
vlang = 11
return mw.ustring.sub(s,1,vlang)
end
end
if slang >= 10 then
if (mw.ustring.sub(s,1,10) == "aneinander" or
mw.ustring.sub(s,1,10) == "dazwischen" or
mw.ustring.sub(s,1,10) == "hintenüber" or
mw.ustring.sub(s,1,10) == "ineinander" or
mw.ustring.sub(s,1,10) == "zueinander")
then
vlang = 10
return mw.ustring.sub(s,1,vlang)
end
end
if slang >= 9 then
if (mw.ustring.sub(s,1,9) == "gegenüber" or
mw.ustring.sub(s,1,9) == "hernieder" or
mw.ustring.sub(s,1,9) == "hinterher") then
vlang = 9
return mw.ustring.sub(s,1,vlang)
end
end
if slang >= 8 then
if (mw.ustring.sub(s,1,8) == "beiseite" or
mw.ustring.sub(s,1,8) == "dahinter" or
mw.ustring.sub(s,1,8) == "drauflos" or
mw.ustring.sub(s,1,8) == "einwärts" or
mw.ustring.sub(s,1,8) == "entgegen" or
mw.ustring.sub(s,1,8) == "herunter" or
mw.ustring.sub(s,1,8) == "hindurch" or
mw.ustring.sub(s,1,8) == "hinunter" or
mw.ustring.sub(s,1,8) == "vornüber" or
mw.ustring.sub(s,1,8) == "zunichte" or
mw.ustring.sub(s,1,8) == "zusammen" or
mw.ustring.sub(s,1,8) == "zwischen")
then
vlang = 8
return mw.ustring.sub(s,1,vlang)
end
end
if slang >= 7 then
if (mw.ustring.sub(s,1,7) == "dagegen" or
mw.ustring.sub(s,1,7) == "daneben" or
mw.ustring.sub(s,1,7) == "darüber" or
mw.ustring.sub(s,1,7) == "entlang" or
mw.ustring.sub(s,1,7) == "entzwei" or
mw.ustring.sub(s,1,7) == "fürlieb" or
mw.ustring.sub(s,1,7) == "herüber" or
mw.ustring.sub(s,1,7) == "hierher" or
mw.ustring.sub(s,1,7) == "hinüber" or
mw.ustring.sub(s,1,7) == "instand" or
mw.ustring.sub(s,1,7) == "schwarz" or
mw.ustring.sub(s,1,7) == "trocken" or
mw.ustring.sub(s,1,7) == "überein" or
mw.ustring.sub(s,1,7) == "vorüber" or
mw.ustring.sub(s,1,7) == "zurecht")
then
vlang = 7
return mw.ustring.sub(s,1,vlang)
end
end
if slang >= 6 then
if (mw.ustring.sub(s,1,6) == "einher" or
mw.ustring.sub(s,1,6) == "falsch" or
mw.ustring.sub(s,1,6) == "fertig" or
mw.ustring.sub(s,1,6) == "gerade" or
mw.ustring.sub(s,1,6) == "gleich" or
mw.ustring.sub(s,1,6) == "herauf" or
mw.ustring.sub(s,1,6) == "heraus" or
mw.ustring.sub(s,1,6) == "herbei" or
mw.ustring.sub(s,1,6) == "herein" or
mw.ustring.sub(s,1,6) == "hervor" or
mw.ustring.sub(s,1,6) == "hinauf" or
mw.ustring.sub(s,1,6) == "hinaus" or
mw.ustring.sub(s,1,6) == "hinein" or
mw.ustring.sub(s,1,6) == "hinter" or
mw.ustring.sub(s,1,6) == "hinweg" or
mw.ustring.sub(s,1,6) == "kaputt" or
mw.ustring.sub(s,1,6) == "nieder" or
mw.ustring.sub(s,1,6) == "runter" or
mw.ustring.sub(s,1,6) == "scharf" or
mw.ustring.sub(s,1,6) == "schutz" or
mw.ustring.sub(s,1,6) == "voraus" or
mw.ustring.sub(s,1,6) == "vorbei" or
mw.ustring.sub(s,1,6) == "vorher" or
mw.ustring.sub(s,1,6) == "weiter" or
mw.ustring.sub(s,1,6) == "wieder" or
mw.ustring.sub(s,1,6) == "zurück")
then
vlang = 6
return mw.ustring.sub(s,1,vlang)
end
end
if slang >= 5 then
if (mw.ustring.sub(s,1,5) == "bauch" or
mw.ustring.sub(s,1,5) == "blond" or
mw.ustring.sub(s,1,5) == "breit" or
mw.ustring.sub(s,1,5) == "dafür" or
mw.ustring.sub(s,1,5) == "daher" or
mw.ustring.sub(s,1,5) == "dahin" or
mw.ustring.sub(s,1,5) == "daran" or
mw.ustring.sub(s,1,5) == "davon" or
mw.ustring.sub(s,1,5) == "davor" or
mw.ustring.sub(s,1,5) == "drein" or
mw.ustring.sub(s,1,5) == "durch" or
mw.ustring.sub(s,1,5) == "empor" or
mw.ustring.sub(s,1,5) == "flott" or
mw.ustring.sub(s,1,5) == "fremd" or
mw.ustring.sub(s,1,5) == "gegen" or
mw.ustring.sub(s,1,5) == "glatt" or
mw.ustring.sub(s,1,5) == "herab" or
mw.ustring.sub(s,1,5) == "heran" or
mw.ustring.sub(s,1,5) == "herum" or
mw.ustring.sub(s,1,5) == "hinab" or
mw.ustring.sub(s,1,5) == "hinan" or
mw.ustring.sub(s,1,5) == "hinzu" or
mw.ustring.sub(s,1,5) == "klein" or
mw.ustring.sub(s,1,5) == "krank" or
mw.ustring.sub(s,1,5) == "näher" or
mw.ustring.sub(s,1,5) == "schön" or
mw.ustring.sub(s,1,5) == "still" or
mw.ustring.sub(s,1,5) == "übrig" or
mw.ustring.sub(s,1,5) == "umher" or
mw.ustring.sub(s,1,5) == "unter" or
mw.ustring.sub(s,1,5) == "voran" or
mw.ustring.sub(s,1,5) == "weich")
then
vlang = 5
return mw.ustring.sub(s,1,vlang)
end
end
if slang >= 4 then
if (mw.ustring.sub(s,1,4) == "acht" or
mw.ustring.sub(s,1,4) == "blau" or
mw.ustring.sub(s,1,4) == "bloß" or
mw.ustring.sub(s,1,4) == "dazu" or
mw.ustring.sub(s,1,4) == "dort" or
mw.ustring.sub(s,1,4) == "dran" or
mw.ustring.sub(s,1,4) == "fehl" or
mw.ustring.sub(s,1,4) == "feil" or
mw.ustring.sub(s,1,4) == "fein" or
mw.ustring.sub(s,1,4) == "fern" or
mw.ustring.sub(s,1,4) == "fest" or
mw.ustring.sub(s,1,4) == "fort" or
mw.ustring.sub(s,1,4) == "frei" or
mw.ustring.sub(s,1,4) == "gelb" or
mw.ustring.sub(s,1,4) == "groß" or
mw.ustring.sub(s,1,4) == "grün" or
mw.ustring.sub(s,1,4) == "heim" or
mw.ustring.sub(s,1,4) == "hoch" or
mw.ustring.sub(s,1,4) == "kahl" or
mw.ustring.sub(s,1,4) == "kalt" or
mw.ustring.sub(s,1,4) == "kurz" or
mw.ustring.sub(s,1,4) == "lieb" or
mw.ustring.sub(s,1,4) == "leer" or
mw.ustring.sub(s,1,4) == "mies" or
mw.ustring.sub(s,1,4) == "miss" or
mw.ustring.sub(s,1,4) == "nach" or
mw.ustring.sub(s,1,4) == "nass" or
mw.ustring.sub(s,1,4) == "raus" or
mw.ustring.sub(s,1,4) == "rein" or
mw.ustring.sub(s,1,4) == "rück" or
mw.ustring.sub(s,1,4) == "satt" or
mw.ustring.sub(s,1,4) == "seil" or
mw.ustring.sub(s,1,4) == "über" or
mw.ustring.sub(s,1,4) == "voll" or
mw.ustring.sub(s,1,4) == "wahr" or
mw.ustring.sub(s,1,4) == "warm" or
mw.ustring.sub(s,1,4) == "weis" or
mw.ustring.sub(s,1,4) == "weiß")
then
vlang = 4
return mw.ustring.sub(s,1,vlang)
end
end
if slang >= 3 then
if (mw.ustring.sub(s,1,3) == "auf" or
mw.ustring.sub(s,1,3) == "aus" or
mw.ustring.sub(s,1,3) == "bei" or
mw.ustring.sub(s,1,3) == "dar" or
mw.ustring.sub(s,1,3) == "ein" or
mw.ustring.sub(s,1,3) == "gut" or
mw.ustring.sub(s,1,3) == "her" or
mw.ustring.sub(s,1,3) == "hin" or
mw.ustring.sub(s,1,3) == "los" or
mw.ustring.sub(s,1,3) == "mit" or
mw.ustring.sub(s,1,3) == "out" or
mw.ustring.sub(s,1,3) == "rum" or
mw.ustring.sub(s,1,3) == "tot" or
mw.ustring.sub(s,1,3) == "vor" or
mw.ustring.sub(s,1,3) == "weg")
then
vlang = 3
return mw.ustring.sub(s,1,vlang)
end
end
if slang >= 2 then
if (mw.ustring.sub(s,1,2) == "ab" or
mw.ustring.sub(s,1,2) == "an" or
mw.ustring.sub(s,1,2) == "da" or
mw.ustring.sub(s,1,2) == "um" or
mw.ustring.sub(s,1,2) == "zu")
then
vlang = 2
return mw.ustring.sub(s,1,vlang)
end
end
return mw.ustring.sub(s,1,vlang)
end
-- Zu eliminierende Zeichen bei der Bildung des Partizip II
-- Aufruf von einer Vorlage: {{#invoke:Verb|main|PIIt|lemma}}
function Verb.PIIt(s)
local gl = mw.ustring.len(s)
local elim = 0
if mw.ustring.len(s) < 5 then
return elim
end
local sm2 = gl - 1
local sm3 = gl - 2
local sm4 = gl - 3
local sm5 = gl - 4
if (mw.ustring.sub(s,sm2,gl) == "ln" or
mw.ustring.sub(s,sm2,gl) == "rn")
then
elim = 1
return elim
end
if (mw.ustring.sub(s,sm3,gl) == "den" or
mw.ustring.sub(s,sm3,gl) == "ten")
then
elim = 1
return elim
end
if mw.ustring.sub(s,sm3,gl) == "nen" then
if (mw.ustring.sub(s,sm5,sm4) == "ch" or
mw.ustring.sub(s,sm5,sm4) == "ck" or
mw.ustring.sub(s,sm5,sm4) == "eb" or
mw.ustring.sub(s,sm5,sm4) == "eg" or
mw.ustring.sub(s,sm5,sm4) == "ff" or
mw.ustring.sub(s,sm5,sm4) == "ig" or
mw.ustring.sub(s,sm5,sm4) == "pp" or
mw.ustring.sub(s,sm5,sm4) == "rd" or
mw.ustring.sub(s,sm5,sm4) == "uf" or
mw.ustring.sub(s,sm5,sm4) == "ug")
then
elim = 1
else
elim = 2
end
return elim
end
if mw.ustring.sub(s,sm3,gl) == "men" then
if (mw.ustring.sub(s,sm5,sm4) == "at" or
mw.ustring.sub(s,sm5,sm4) == "id" or
mw.ustring.sub(s,sm5,sm4) == "is")
then
elim = 1
else
elim = 2
end
return elim
end
if mw.ustring.sub(s,sm2,gl) == "en"
then
elim = 2
end
return elim
end
return Verb