Modul:Verb
Aus KGS-Wiki
Dieses Modul erzeugt lateinische Konjugationstabellen aus gegebenen Stämmen.
Beispiel
{{subst:#invoke:Verb|render|dare|20|da|ded|28|dat|47|PraesGV=AP|PerfGV=AP}}
für ein Vollverb mit Aktiv und Passiv in Präsens- und Perfektstämmen{{subst:#invoke:Verb|render|sequi||sequ|||secut||PraesGV=P|PerfGV=P}}
für ein Deponens{{subst:#invoke:Verb|render|gaudere|4|gaude|||gavis||PraesGV=AP|PerfGV=P}}
für ein Semideponens, das in Perfektstämmen nur Passivformen bildet{{subst:#invoke:Verb|render|facere|17|faci|fec|27|||PraesGV=A|PerfGV=A}}
für ein Defectivum, das nur aktivische Formen bildet.
{{subst:
|
Immer nur mit subst einbinden, damit die Formen im Seitenquelltext landen und für die Suchfunktion auffindbar sind.
|
---|---|
#invoke:Verb|
|
Name des Moduls |
render|
|
rufe die Funktion render auf
|
irrumare|
|
Infinitiv |
0|
|
Optional: Lektion, in der der Infinitiv eingeführt wurde |
irruma|
|
Präsensstamm |
irrumav|
|
Perfektstamm |
0|
|
Optional: Lektion, in der der Perfektstamm eingeführt wurde |
irrumat|
|
Stamm des PPP |
0|
|
Optional: Lektion, in der das PPP eingeführt wurde |
PraesGV=AP
|
Optional: Verfügbare Genera verbi in den präsentischen Zeiten.
|
PerfGV=AP}}
|
Optional: Verfügbare Genera verbi in den perfektischen Zeiten.
|
Hinweis
Dieses Modul sollte immer mit subst:
eingebunden werden, damit alle Formen im durchsuchbaren Seitenquelltext landen und eine Suche nach dem auch zu dare führt.
local p = {}
local utils = require('Modul:LateinUtils')
local IND_AKT = 1
local KONJ_AKT = 2
local IND_PASS = 3
local KONJ_PASS= 4
local IMPERATIV= 5
local PERSONEN = {'1S','2S','3S','1P','2P','3P'}
local PRAES = 1
local PERF = 2
local FUTUR = 3
local OST = {'o', 's', 't', 'mus', 'tis', 'nt'}
local MST = {'m', 's', 't', 'mus', 'tis', 'nt'}
local ORRISTUR = {'or', 'ris', 'tur', 'mur', 'mini', 'ntur'}
local RRISTUR = {'r', 'ris', 'tur', 'mur', 'mini', 'ntur'}
local frame = mw.getCurrentFrame()
local inf = frame.args[1] or frame:getParent().args[1] or 'Infinitiv';
local lInf = frame.args[2] or frame:getParent().args[2] or 0;
local praes = frame.args[3] or frame:getParent().args[3] or 'Präsensstamm + ';
local perf = frame.args[4] or frame:getParent().args[4] or 'Perfektstamm + ';
local lPerf = frame.args[5] or frame:getParent().args[5] or 0;
local ppp = frame.args[6] or frame:getParent().args[6] or 'PPP-Stamm + ';
local lPPP = frame.args[7] or frame:getParent().args[7] or 0;
local praesGV= frame.args.PraesGV or frame:getParent().args.PraesGV or 'AP';
local perfGV = frame.args.PerfGV or frame:getParent().args.PerfGV or 'AP';
function bildeInfinitive(params)
local formen = {{},{}, {}}
formen[PRAES][IND_AKT] = inf
if inf:match(praes:sub(-1,-1) .. "r[ei]$") then
formen[PRAES][IND_PASS] = praes .. "ri"
elseif praes:match("i$") then
formen[PRAES][IND_PASS] = praes
else
formen[PRAES][IND_PASS] = praes .. "i"
end
formen[PERF][IND_AKT] = perf .. "isse"
formen[PERF][IND_PASS] = ppp .. "um/am/um esse"
formen[FUTUR][IND_AKT] = ppp .. "urum/am/um esse"
formen[FUTUR][IND_PASS] = ppp .. "um iri"
return formen
end
function bildePartizipien(params)
local formen = {}
if praes:match("[ae]$") then
formen[PRAES] = praes .. "ns, " .. praes .. "ntis"
else
formen[PRAES] = praes .. "ens, " .. praes .. "entis"
end
formen[PERF] = ppp .. "us/a/um"
formen[FUTUR] = ppp .. "urus/a/um"
return formen
end
function bildeND(params)
local formen = {}
if praes:match("[ae]$") then
formen[1] = praes .. "ndi"
formen[2] = praes .. "ndus/a/um"
else
formen[1] = praes .. "endi"
formen[2] = praes .. "endus/a/um"
end
return formen
end
function bildePraesens(params)
local formen = createFormTable(praesGV)
local endungen = {}
endungen[IND_AKT] = OST
endungen[KONJ_AKT] = MST
endungen[IND_PASS] = ORRISTUR
endungen[KONJ_PASS]= RRISTUR
if not praes:match("[aei]$") then
for person = 1, 6, 1 do
setIfPossible(formen, PERSONEN[person] .. 'IA', praes .. 'i' .. endungen[IND_AKT][person])
setIfPossible(formen, PERSONEN[person] .. 'IP', praes .. 'i' .. endungen[IND_PASS][person])
setIfPossible(formen, PERSONEN[person] .. 'KA', praes .. 'a' .. endungen[KONJ_AKT][person])
setIfPossible(formen, PERSONEN[person] .. 'KP', praes .. 'a' .. endungen[KONJ_PASS][person])
end
setIfPossible(formen, '1SIA', praes .. 'o')
setIfPossible(formen, '1SIP', praes .. 'or')
setIfPossible(formen, '2SIP', praes .. 'eris')
setIfPossible(formen, '3PIA', praes .. 'unt')
setIfPossible(formen, '3PIP', praes .. 'untur')
end
if praes:match("a$") then
setIfPossible(formen, '1SIA', praes:sub(1,-2) .. 'o')
setIfPossible(formen, '1SIP', praes:sub(1,-2) .. 'or')
setIfPossible(formen, '1SKA', praes:sub(1,-2) .. 'em')
setIfPossible(formen, '1SKP', praes:sub(1,-2) .. 'er')
for person = 2, 6, 1 do
setIfPossible(formen, PERSONEN[person] .. 'IA', praes .. endungen[IND_AKT][person])
setIfPossible(formen, PERSONEN[person] .. 'IP', praes .. endungen[IND_PASS][person])
setIfPossible(formen, PERSONEN[person] .. 'KA', praes:sub(1,-2) .. 'e' .. endungen[KONJ_AKT][person])
setIfPossible(formen, PERSONEN[person] .. 'KP', praes:sub(1,-2) .. 'e' .. endungen[KONJ_PASS][person])
end
end
if praes:match("[ei]$") then
for person = 1, 6, 1 do
setIfPossible(formen, PERSONEN[person] .. 'IA', praes .. endungen[IND_AKT][person])
setIfPossible(formen, PERSONEN[person] .. 'IP', praes .. endungen[IND_PASS][person])
setIfPossible(formen, PERSONEN[person] .. 'KA', praes .. 'a' .. endungen[KONJ_AKT][person])
setIfPossible(formen, PERSONEN[person] .. 'KP', praes .. 'a' .. endungen[KONJ_PASS][person])
end
if not praes:match("e$") then
setIfPossible(formen, '3PIA', praes .. 'unt')
setIfPossible(formen, '3PIP', praes .. 'untur')
end
end
if praes:match("i$") and not inf:match("ir[ei]$") then
setIfPossible(formen, '2SIP', praes:sub(1,-2) .. 'eris')
end
if praesGV:match("A") then
if praes:match("[aei]$") then
setIfPossible(formen, 'ImpS', praes .. "!")
setIfPossible(formen, 'ImpP', praes .. "te!")
else
setIfPossible(formen, 'ImpS', praes .. "e!")
setIfPossible(formen, 'ImpP', praes .. "ite!")
end
else
if praes:match("[aei]$") then
setIfPossible(formen, 'ImpS', praes .. "re!")
setIfPossible(formen, 'ImpP', praes .. "mini!")
else
setIfPossible(formen, 'ImpS', praes .. "ere!")
setIfPossible(formen, 'ImpP', praes .. "imini!")
end
end
return formen
end
function bildeImperfekt(params)
local formen = createFormTable(praesGV)
local endungen = {}
endungen[IND_AKT] = MST
endungen[KONJ_AKT] = MST
endungen[IND_PASS] = RRISTUR
endungen[KONJ_PASS]= RRISTUR
local ind_stamm = praes .. 'ba'
local konj_stamm = inf
if not praes:match("[ae]$") then
ind_stamm = praes .. 'eba'
end
if inf:match("[^r]i$") or inf:match("[^aei]ri") then
konj_stamm = inf:sub(1,-2) .. 'ere'
end
if inf:match("[aei]ri$") then
konj_stamm = praes .. 're'
end
for person = 1, 6, 1 do
setIfPossible(formen, PERSONEN[person] .. 'IA', ind_stamm .. endungen[IND_AKT][person])
setIfPossible(formen, PERSONEN[person] .. 'IP', ind_stamm .. endungen[IND_PASS][person])
setIfPossible(formen, PERSONEN[person] .. 'KA', konj_stamm .. endungen[KONJ_AKT][person])
setIfPossible(formen, PERSONEN[person] .. 'KP', konj_stamm .. endungen[KONJ_PASS][person])
end
return formen
end
function bildeFuturI(params)
local formen = createFormTable(praesGV, 'I')
local endungen = {}
endungen[IND_AKT] = MST
endungen[IND_PASS] = RRISTUR
if praes:match("[ae]$") then
setIfPossible(formen, '1SIA', praes .. 'bo')
setIfPossible(formen, '1SIP', praes .. 'bor')
for person = 2, 5, 1 do
setIfPossible(formen, PERSONEN[person] .. 'IA', praes .. 'bi' .. endungen[IND_AKT][person])
setIfPossible(formen, PERSONEN[person] .. 'IP', praes .. 'bi' .. endungen[IND_PASS][person])
end
setIfPossible(formen, '2SIP', praes .. 'beris')
setIfPossible(formen, '3PIA', praes .. 'bunt')
setIfPossible(formen, '3PIP', praes .. 'buntur')
else
setIfPossible(formen, '1SIA', praes .. 'am')
setIfPossible(formen, '1SIP', praes .. 'ar')
for person = 2, 6, 1 do
setIfPossible(formen, PERSONEN[person] .. 'IA', praes .. 'e' .. endungen[IND_AKT][person])
setIfPossible(formen, PERSONEN[person] .. 'IP', praes .. 'e' .. endungen[IND_PASS][person])
end
end
return formen
end
function bildePerfekt(params)
local formen = createFormTable(perfGV)
local endungen = {}
endungen[IND_AKT] = {'i', 'isti', 'it', 'imus', 'istis', 'erunt'}
endungen[KONJ_AKT] = MST
endungen[IND_PASS] = {'us/a/um sum', 'us/a/um es', 'us/a/um est', 'i/ae/a sumus', 'i/ae/a estis', 'i/ae/a sunt'}
endungen[KONJ_PASS]= {'us/a/um sim', 'us/a/um sis', 'us/a/um sit', 'i/ae/a simus', 'i/ae/a sitis', 'i/ae/a sint'}
for person = 1, 6, 1 do
setIfPossible(formen, PERSONEN[person] .. 'IA', perf .. endungen[IND_AKT][person])
setIfPossible(formen, PERSONEN[person] .. 'KA', perf .. 'eri' .. endungen[KONJ_AKT][person])
setIfPossible(formen, PERSONEN[person] .. 'IP', ppp .. endungen[IND_PASS][person])
setIfPossible(formen, PERSONEN[person] .. 'KP', ppp .. endungen[KONJ_PASS][person])
end
return formen
end
function bildePlusquamperfekt(params)
local formen = createFormTable(perfGV)
local endungen = {'us/a/um', 'us/a/um', 'us/a/um', 'i/ae/a', 'i/ae/a', 'i/ae/a'}
for person = 1, 6, 1 do
setIfPossible(formen, PERSONEN[person] .. 'IA', perf .. 'era' .. MST[person])
setIfPossible(formen, PERSONEN[person] .. 'KA', perf .. 'isse' .. MST[person])
setIfPossible(formen, PERSONEN[person] .. 'IP', ppp .. endungen[person] .. ' era' .. MST[person])
setIfPossible(formen, PERSONEN[person] .. 'KP', ppp .. endungen[person] .. ' esse' .. MST[person])
end
return formen
end
function bildeFuturII(params)
local formen = createFormTable(praesGV, 'I')
local endungen = {'us/a/um', 'us/a/um', 'us/a/um', 'i/ae/a', 'i/ae/a', 'i/ae/a'}
for person = 1, 6, 1 do
setIfPossible(formen, PERSONEN[person] .. 'IA', perf .. 'eri' .. MST[person])
setIfPossible(formen, PERSONEN[person] .. 'IP', ppp .. endungen[person] .. ' eri' .. MST[person])
end
setIfPossible(formen, '1SIA', perf .. 'ero')
setIfPossible(formen, '1SIP', ppp .. 'us/a/um ero')
setIfPossible(formen, '3PIP', ppp .. 'i/ae/a erunt')
return formen
end
function renderInfinitive(formen, praesGV, perfGV)
local table = ""
table = table .. '{| class="wikitable mw-collapsible"\n'
table = table .. '|+ [[Infinitiv]]e\n! !! Aktiv'
if praesGV == "AP" or perfGV == "AP" then
table = table .. ' !! Passiv'
end
table = table .. '\n|-\n! Präsens'
if praesGV:match("A") then
table = table .. '\n| lang="la" | ' .. formen[PRAES][IND_AKT]
end
if praesGV:match("P") then
table = table .. '\n| lang="la" | ' .. formen[PRAES][IND_PASS]
end
table = table .. '\n|-\n! Perfekt'
if perfGV:match("A") then
table = table .. '\n| lang="la" | ' .. formen[PERF][IND_AKT]
end
if perfGV:match("P") then
table = table .. '\n| lang="la" | ' .. formen[PERF][IND_PASS]
end
table = table .. '\n|-\n! Futur'
table = table .. '\n| lang="la" | ' .. formen[FUTUR][IND_AKT]
if praesGV:match("AP") or perfGV:match("AP") then
table = table .. '\n| lang="la" | ' .. formen[FUTUR][IND_PASS]
end
table = table .. '\n|}\n'
return table
end
function renderPartizipien(formen, perfGV)
local table = ''
table = table .. '{| class="wikitable mw-collapsible"\n'
table = table .. '|+ [[Partizip]]ien\n'
table = table .. '! [[Partizip Präsens Aktiv|P<span class="ft-collapsible">artizip </span>P<span class="ft-collapsible">räsens </span>A<span class="ft-collapsible">ktiv</span>]]'
table = table .. '\n| lang="la" | ' .. formen[PRAES] .. '\n'
if perfGV == "AP" then
table = table .. '|-\n! [[Partizip Perfekt Passiv|P<span class="ft-collapsible">artizip </span>P<span class="ft-collapsible">erfekt </span>P<span class="ft-collapsible">assiv</span>]]'
table = table .. '\n| lang="la" | ' .. formen[PERF] .. '\n'
elseif perfGV == "P" then
table = table .. '|-\n! [[Partizip Perfekt Deponens|P<span class="ft-collapsible">artizip </span>P<span class="ft-collapsible">erfekt </span>D<span class="ft-collapsible">eponens</span>]]'
table = table .. '\n| lang="la" | ' .. formen[PERF] .. '\n'
end
table = table .. '|-\n! [[Partizip Futur Aktiv|P<span class="ft-collapsible">artizip </span>F<span class="ft-collapsible">utur </span>A<span class="ft-collapsible">ktiv</span>]]'
table = table .. '\n| lang="la" | ' .. formen[FUTUR] .. '\n'
table = table .. '|}'
return table
end
function renderND(formen)
local table = ''
table = table .. '{| class="wikitable mw-collapsible"\n'
table = table .. "|+ ''nd''-Formen\n"
table = table .. "! [[Gerundium]] !! [[Gerundivum]]\n"
table = table .. '|-\n| lang="la" | ' .. formen[1] .. '\n| lang="la" | ' .. formen[2] .. '\n|}'
return table
end
function setIfPossible(array,key,value)
if array[key] then
array[key] = value
end
end
function createFormTable(gv, modi)
modi = modi or 'IK'
local formen = {}
for g in gv:gmatch('.') do
for m in modi:gmatch('.') do
for p = 1,3,1 do
formen[p .. 'S' .. m .. g] = 'null'
formen[p .. 'P' .. m .. g] = 'null'
end
end
end
return formen
end
function p.render(frame)
local pagecontent = ''
lektionen = {}
if tonumber(lInf) ~= 0 then
table.insert(lektionen, lInf)
end
if tonumber(lPerf) ~= 0 then
table.insert(lektionen, lPerf)
end
if tonumber(lPPP) ~= 0 then
table.insert(lektionen, lPPP)
end
pagecontent = pagecontent .. p.renderBox(frame)
pagecontent = pagecontent .. p.renderFormen(frame)
pagecontent = pagecontent .. utils.renderFooter(inf, bildePraesens(params)['1SI' .. praesGV:sub(1,1)], lektionen)
return pagecontent
end
function p.renderBox(frame)
local pagecontent = ""
local stammformen = {inf, bildePraesens(params)['1SI' .. praesGV:sub(1,1)], bildePerfekt(params)['1SI' .. perfGV:sub(1,1)]}
if not ppp:match("PPP") and perfGV == "AP" then
table.insert(stammformen, ppp .. "um")
stammformen["lPPP"] = lPPP
end
stammformen["lInf"] = lInf
stammformen["lPerf"]= lPerf
if not mw.isSubsting() then
pagecontent = pagecontent .. utils.renderTemplate("Achtung", {"Dieses Modul sollte nur mit <code>{{subst:#invoke:Verb|...}}</code> eingebunden werden! "})
end
pagecontent = pagecontent .. "{{DISPLAYTITLE:" .. inf .. "}}\n"
pagecontent = pagecontent .. utils.renderTemplate("Legende Verb", {}) .. "\n"
pagecontent = pagecontent .. utils.renderWortwolke(inf) .. "\n"
pagecontent = pagecontent .. utils.renderVokabelbox('Stammformen', stammformen)
pagecontent = pagecontent .. '\n'
if praesGV == "P" and perfGV == "P" then
pagecontent = pagecontent .. utils.renderTemplate("Deponens", {}) .. '\n'
elseif praesGV == "P" or perfGV == "P" then
pagecontent = pagecontent .. utils.renderTemplate("Semideponens", {}) .. '\n'
end
return pagecontent
end
function p.renderFormen(frame)
local pagecontent = ""
--params = init()
pagecontent = pagecontent .. "\n\n== Infinite Formen ==\n\n"
pagecontent = pagecontent .. renderInfinitive(bildeInfinitive(params), praesGV, perfGV)
pagecontent = pagecontent .. '\n\n'
pagecontent = pagecontent .. renderPartizipien(bildePartizipien(params), perfGV)
pagecontent = pagecontent .. '\n\n'
pagecontent = pagecontent .. renderND(bildeND(params))
pagecontent = pagecontent .. "\n\n== Formen mit Präsensstamm ==\n\n"
pagecontent = pagecontent .. utils.renderFT('Verb', bildePraesens(params), {Tempus = 'Präsens'})
pagecontent = pagecontent .. '\n\n'
pagecontent = pagecontent .. utils.renderFT('Verb', bildeImperfekt(params), {Tempus = 'Imperfekt'})
pagecontent = pagecontent .. '\n\n'
pagecontent = pagecontent .. utils.renderFT('Verb', bildeFuturI(params), {Tempus = 'Futur I'})
pagecontent = pagecontent .. "\n\n== Formen mit Perfektstamm/PPP ==\n\n"
pagecontent = pagecontent .. utils.renderFT('Verb', bildePerfekt(params), {Tempus = 'Perfekt'})
pagecontent = pagecontent .. '\n\n'
pagecontent = pagecontent .. utils.renderFT('Verb', bildePlusquamperfekt(params), {Tempus = 'Plusquamperfekt'})
pagecontent = pagecontent .. '\n\n'
pagecontent = pagecontent .. utils.renderFT('Verb', bildeFuturII(params), {Tempus = 'Futur II'})
return pagecontent
end
return p