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 mw.ustring.sub(s,geslang-2,geslang) == "tun"
then
slang = geslang - 3
else
if geslang >= 7 then
slang = geslang - 4
else
return ""
end
end
local vorne = ""
if slang >= 14 then
vorne = mw.ustring.sub(s,1,14)
if (vorne == "hintereinander")
then
vlang = 14
return vorne
end
end
if slang >= 13 then
vorne = mw.ustring.sub(s,1,13)
if (vorne == "durcheinander" or
vorne == "gegeneinander" or
vorne == "nebeneinander" or
vorne == "untereinander" or
vorne == "widereinander")
then
vlang = 13
return vorne
end
end
if slang >= 12 then
vorne = mw.ustring.sub(s,1,12)
if vorne == "übereinander"
then
vlang = 12
return vorne
end
end
if slang>= 11 then
vorne = mw.ustring.sub(s,1,11)
if (vorne == "aufeinander" or
vorne == "auseinander" or
vorne == "beieinander" or
vorne == "miteinander" or
vorne == "voneinander")
then
vlang = 11
return vorne
end
end
if slang >= 10 then
vorne = mw.ustring.sub(s,1,10)
if (vorne == "aneinander" or
vorne == "dazwischen" or
vorne == "hintenüber" or
vorne == "ineinander" or
vorne == "zueinander")
then
vlang = 10
return vorne
end
end
if slang >= 9 then
vorne = mw.ustring.sub(s,1,9)
if (vorne == "gegenüber" or
vorne == "hernieder" or
vorne == "hinterher")
then
vlang = 9
return vorne
end
end
if slang >= 8 then
vorne = mw.ustring.sub(s,1,8)
if (vorne == "aufwärts" or
vorne == "beiseite" or
vorne == "dahinter" or
vorne == "drauflos" or
vorne == "einwärts" or
vorne == "entgegen" or
vorne == "herunter" or
vorne == "hindurch" or
vorne == "hinunter" or
vorne == "vornüber" or
vorne == "vorwärts" or
vorne == "zunichte" or
vorne == "zusammen" or
vorne == "zwischen")
then
vlang = 8
return vorne
end
end
if slang >= 7 then
vorne = mw.ustring.sub(s,1,7)
if (vorne == "abwärts" or
vorne == "dagegen" or
vorne == "daneben" or
vorne == "darüber" or
vorne == "entlang" or
vorne == "entzwei" or
vorne == "fürlieb" or
vorne == "herüber" or
vorne == "hierher" or
vorne == "hinüber" or
vorne == "instand" or
vorne == "schwarz" or
vorne == "trocken" or
vorne == "überein" or
vorne == "vorüber" or
vorne == "zurecht" or
vorne == "zuwider")
then
vlang = 7
return vorne
end
end
if slang >= 6 then
vorne = mw.ustring.sub(s,1,6)
if (vorne == "bereit" or
vorne == "einher" or
vorne == "falsch" or
vorne == "fertig" or
vorne == "gerade" or
vorne == "gleich" or
vorne == "herauf" or
vorne == "heraus" or
vorne == "herbei" or
vorne == "herein" or
vorne == "hervor" or
vorne == "hinauf" or
vorne == "hinaus" or
vorne == "hinein" or
vorne == "hintan" or
vorne == "hinter" or
vorne == "hinweg" or
vorne == "kaputt" or
vorne == "nieder" or
vorne == "runter" or
vorne == "scharf" or
vorne == "schief" or
vorne == "schutz" or
vorne == "voraus" or
vorne == "vorbei" or
vorne == "vorher" or
vorne == "weiter" or
vorne == "wieder" or
vorne == "zurück")
then
vlang = 6
return vorne
end
end
if slang >= 5 then
vorne = mw.ustring.sub(s,1,5)
if (vorne == "abhin" or
vorne == "anhin" or
vorne == "bauch" or
vorne == "bevor" or
vorne == "blond" or
vorne == "breit" or
vorne == "dabei" or
vorne == "dafür" or
vorne == "daher" or
vorne == "dahin" or
vorne == "daran" or
vorne == "davon" or
vorne == "davor" or
vorne == "dicht" or
vorne == "drauf" or
vorne == "drein" or
vorne == "durch" or
vorne == "empor" or
vorne == "flach" or
vorne == "flott" or
vorne == "fremd" or
vorne == "gegen" or
vorne == "glatt" or
vorne == "herab" or
vorne == "heran" or
vorne == "herum" or
vorne == "hinab" or
vorne == "hinan" or
vorne == "hinzu" or
vorne == "klein" or
vorne == "krank" or
vorne == "näher" or
vorne == "offen" or
vorne == "reich" or
vorne == "rüber" or
vorne == "schön" or
vorne == "still" or
vorne == "übrig" or
vorne == "umher" or
vorne == "unter" or
vorne == "voran" or
vorne == "weich")
then
vlang = 5
return vorne
end
end
if slang >= 4 then
vorne = mw.ustring.sub(s,1,4)
if (vorne == "acht" or
vorne == "blau" or
vorne == "bloß" or
vorne == "dazu" or
vorne == "dort" or
vorne == "dran" or
vorne == "fehl" or
vorne == "feil" or
vorne == "fein" or
vorne == "fern" or
vorne == "fest" or
vorne == "fort" or
vorne == "frei" or
vorne == "gelb" or
vorne == "groß" or
vorne == "grün" or
vorne == "heim" or
vorne == "hier" or
vorne == "hoch" or
vorne == "kahl" or
vorne == "kalt" or
vorne == "klar" or
vorne == "kurz" or
vorne == "lieb" or
vorne == "leer" or
vorne == "mies" or
vorne == "miss" or
vorne == "nach" or
vorne == "nahe" or
vorne == "nass" or
vorne == "quer" or
vorne == "raus" or
vorne == "rein" or
vorne == "rück" or
vorne == "satt" or
vorne == "seil" or
vorne == "über" or
vorne == "voll" or
vorne == "wahr" or
vorne == "warm" or
vorne == "weis" or
vorne == "weiß" or
vorne == "wohl")
then
vlang = 4
return vorne
end
end
if slang >= 3 then
vorne = mw.ustring.sub(s,1,3)
if (vorne == "auf" or
vorne == "aus" or
vorne == "bei" or
vorne == "dar" or
vorne == "ein" or
vorne == "ent" or
vorne == "gut" or
vorne == "her" or
vorne == "hin" or
vorne == "los" or
vorne == "mit" or
vorne == "out" or
vorne == "rum" or
vorne == "tot" or
vorne == "ver" or
vorne == "vor" or
vorne == "weg" or
vorne == "zer")
then
vlang = 3
return vorne
end
end
if slang >= 2 then
vorne = mw.ustring.sub(s,1,2)
if (vorne == "ab" or
vorne == "an" or
vorne == "be" or
vorne == "da" or
vorne == "er" or
vorne == "re" or
vorne == "um" or
vorne == "zu")
then
vlang = 2
return vorne
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
-- Herkunftsangabe für zweiteilige Verben erzeugen
-- Aufruf von einer Vorlage: {{#invoke:Verb|herkunft|lemma|params}}
function Verb.herkunft(frame)
local lemma = frame.args[1] -- Verb
local art = frame.args[2] -- Trennbarkeit
local wortart = frame.args[3] -- Wortart (W=)
local vorspann = frame.args[4] -- Vorspann (V=)
local ableitung = frame.args[5] -- Ableitung (A=)
local wortart2 = frame.args[6] -- Wortart zur Ableitung (W2=)
local strlen = mw.ustring.len(lemma)
local Blank = "%s" -- whitespace
local blgef = mw.ustring.find(lemma, Blank, 1)
local retp = ""
local partikel = ""
local dativ = "dem "
if (vorspann >= "A") then
partikel = vorspann
else
partikel = Verb.vorsilbe(lemma)
end
local vlen = mw.ustring.len(partikel)
local verbname = mw.ustring.sub(lemma,vlen+1,strlen)
if (art == nil) then
art = "t"
end
if (art == "t") then
if (wortart > " ") then
if (wortart == "Präposition" or wortart == "Adverb") then
wortart = "Partikel"
dativ = "der "
elseif (wortart == "Partikel" or wortart == "Partikelverb"
or wortart == "Interjektion") then
dativ = "der "
end
end
if (blgef) then -- Wortverbindung
if (partikel == "") then
partikel = mw.ustring.sub(lemma,1,blgef-1)
verbname = mw.ustring.sub(lemma,blgef+1,strlen)
end
if (wortart == "") then
local first = mw.ustring.sub(partikel,1,1)
if (first < "a" or first == "Ä" or first == "Ö" or
first == "Ü") then
wortart = "Substantiv"
else
wortart = "Adjektiv"
end
end
retp = retp .. "[[Wortverbindung]] aus " .. dativ
retp = retp .. " [[" .. wortart .. "]] "
retp = retp .. "''[[" .. partikel .. "]]'' und dem Verb ''[["
retp = retp .. verbname
retp = retp .. "]]''"
return retp
end
retp = retp .. "gebildet aus "
if (wortart > " ") then
retp = retp .. dativ .. "[[" .. wortart .. "]] "
retp = retp .. "''[[" .. partikel .. "]]'' als [[Verbzusatz]]"
else
retp = retp .. "dem [[Verbzusatz]] ''[[" .. partikel .. "]]''"
end
if (wortart2 > " ") then -- fiktives Verb
retp = retp .. " und der Ableitung zum [[" .. wortart2 .. "]] "
retp = retp .. "''[[" .. ableitung .. "]]'' durch [[Konversion]]"
else
retp = retp .. " und dem [[Verb]] ''[[" .. verbname .. "]]''"
end
elseif (art == "u") then
if ((vorspann == nil or vorspann == "") and ableitung > " ") then
vorspann = ableitung
vlen = mw.ustring.len(vorspann)
verbname = mw.ustring.sub(lemma,vlen+1,strlen)
end
retp = "[[Derivation]] ([[Ableitung]]) "
if (wortart == "Adjektiv" or wortart == "Substantiv" or
wortart == "Verb") then
retp = retp .. "zum [[" .. wortart .. "]] ''[["
retp = retp .. ableitung .. "]]'' mit "
else
retp = retp .. "zum [[Verb]] ''[["
retp = retp .. verbname .."]]'' mit "
end
retp = retp .. "dem [[Derivatem]] ([[Ableitungsmorphem]]) "
if (verbname == "eln") then
retp = retp .. "''[[-el]]'' und der [[Flexionsendung]] ''[[-n]]''"
elseif (verbname == "en" or verbname == "n") then
retp = "[[Derivation]] ([[Ableitung]]) "
retp = retp .. "vom [[" .. wortart .."]] "
retp = retp .. "''[[" .. ableitung .. "]]'' durch [[Konversion]] "
retp = retp .. "mit der [[Flexionsendung]] ''[[-" .. verbname .. "]]''"
elseif (verbname == "ifizieren") then
retp = retp .. "''[[-ifizier]]'' und der [[Flexionsendung]] ''[[-en]]''"
elseif (verbname == "isieren") then
retp = retp .. "''[[-isier]]'' und der [[Flexionsendung]] ''[[-en]]''"
elseif (verbname == "ieren") then
retp = retp .. "''[[-ier]]'' und der [[Flexionsendung]] ''[[-en]]''"
else
if (ableitung > " " and
mw.ustring.sub(lemma,1,vlen) == mw.ustring.lower(ableitung)) then
retp = "[[untrennbar]]e [[Zusammensetzung]] aus " .. dativ
retp = retp .. "[[" .. wortart .. "]] ''[["
retp = retp .. vorspann .."]]'' und dem Verb ''[["
retp = retp .. verbname .. "]]''"
else
retp = retp .. "''[[" .. partikel .. "-]]''"
end
end
end
return retp
end
return Verb