Modul:Verb: Unterschied zwischen den Versionen
Aus KGS-Wiki
Sn (Diskussion | Beiträge) K (Links hinzugff) |
Sn (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(121 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
local p = {} | local p = {} | ||
local utils = require('Modul:LateinUtils') | |||
local IND_AKT = 1 | local IND_AKT = 1 | ||
Zeile 5: | Zeile 6: | ||
local IND_PASS = 3 | local IND_PASS = 3 | ||
local KONJ_PASS= 4 | local KONJ_PASS= 4 | ||
local PERSONEN = {'1 | local IMPERATIV= 5 | ||
local PERSONEN = {'1S','2S','3S','1P','2P','3P'} | |||
local | local PRAES = 1 | ||
local | 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 | end | ||
function bildePraesens(params) | function bildePraesens(params) | ||
local | local formen = createFormTable(praesGV) | ||
local | local endungen = {} | ||
endungen[IND_AKT] = OST | |||
endungen[KONJ_AKT] = MST | |||
endungen[IND_PASS] = ORRISTUR | |||
endungen[KONJ_PASS]= RRISTUR | |||
if not praes:match("[aei]$") then | if not praes:match("[aei]$") then | ||
for person = 1, 6, 1 do | for person = 1, 6, 1 do | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'IA', praes .. 'i' .. endungen[IND_AKT][person]) | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'IP', praes .. 'i' .. endungen[IND_PASS][person]) | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'KA', praes .. 'a' .. endungen[KONJ_AKT][person]) | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'KP', praes .. 'a' .. endungen[KONJ_PASS][person]) | ||
end | end | ||
formen | setIfPossible(formen, '1SIA', praes .. 'o') | ||
formen | setIfPossible(formen, '1SIP', praes .. 'or') | ||
formen | setIfPossible(formen, '2SIP', praes .. 'eris') | ||
formen | setIfPossible(formen, '3PIA', praes .. 'unt') | ||
formen | setIfPossible(formen, '3PIP', praes .. 'untur') | ||
end | end | ||
if praes:match("a$") then | if praes:match("a$") then | ||
formen | setIfPossible(formen, '1SIA', praes:sub(1,-2) .. 'o') | ||
formen | setIfPossible(formen, '1SIP', praes:sub(1,-2) .. 'or') | ||
formen | setIfPossible(formen, '1SKA', praes:sub(1,-2) .. 'em') | ||
formen | setIfPossible(formen, '1SKP', praes:sub(1,-2) .. 'er') | ||
for person = 2, 6, 1 do | for person = 2, 6, 1 do | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'IA', praes .. endungen[IND_AKT][person]) | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'IP', praes .. endungen[IND_PASS][person]) | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'KA', praes:sub(1,-2) .. 'e' .. endungen[KONJ_AKT][person]) | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'KP', praes:sub(1,-2) .. 'e' .. endungen[KONJ_PASS][person]) | ||
end | end | ||
end | end | ||
if praes:match("[ei]$") then | if praes:match("[ei]$") then | ||
for person = 1, 6, 1 do | for person = 1, 6, 1 do | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'IA', praes .. endungen[IND_AKT][person]) | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'IP', praes .. endungen[IND_PASS][person]) | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'KA', praes .. 'a' .. endungen[KONJ_AKT][person]) | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'KP', praes .. 'a' .. endungen[KONJ_PASS][person]) | ||
end | end | ||
if not praes:match("e$") then | if not praes:match("e$") then | ||
formen | setIfPossible(formen, '3PIA', praes .. 'unt') | ||
formen | setIfPossible(formen, '3PIP', praes .. 'untur') | ||
end | 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 | end | ||
return formen | return formen | ||
Zeile 72: | Zeile 137: | ||
function bildeImperfekt(params) | function bildeImperfekt(params) | ||
local | local formen = createFormTable(praesGV) | ||
local | local endungen = {} | ||
endungen[IND_AKT] = MST | |||
endungen[KONJ_AKT] = MST | |||
endungen[IND_PASS] = RRISTUR | |||
endungen[KONJ_PASS]= RRISTUR | |||
local ind_stamm = praes .. 'ba' | local ind_stamm = praes .. 'ba' | ||
local konj_stamm = inf | local konj_stamm = inf | ||
Zeile 88: | Zeile 150: | ||
end | end | ||
if | if inf:match("[^r]i$") or inf:match("[^aei]ri") then | ||
konj_stamm = | konj_stamm = inf:sub(1,-2) .. 'ere' | ||
end | end | ||
if inf:match("ri$") then | if inf:match("[aei]ri$") then | ||
konj_stamm = praes .. 're' | konj_stamm = praes .. 're' | ||
end | end | ||
for person = 1, 6, 1 do | for person = 1, 6, 1 do | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'IA', ind_stamm .. endungen[IND_AKT][person]) | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'IP', ind_stamm .. endungen[IND_PASS][person]) | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'KA', konj_stamm .. endungen[KONJ_AKT][person]) | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'KP', konj_stamm .. endungen[KONJ_PASS][person]) | ||
end | end | ||
return formen | return formen | ||
Zeile 104: | Zeile 166: | ||
function bildeFuturI(params) | function bildeFuturI(params) | ||
local | local formen = createFormTable(praesGV, 'I') | ||
local | local endungen = {} | ||
endungen[IND_AKT] = MST | |||
endungen[IND_PASS] = RRISTUR | |||
if praes:match("[ae]$") then | if praes:match("[ae]$") then | ||
formen | setIfPossible(formen, '1SIA', praes .. 'bo') | ||
formen | setIfPossible(formen, '1SIP', praes .. 'bor') | ||
for person = 2, 5, 1 do | for person = 2, 5, 1 do | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'IA', praes .. 'bi' .. endungen[IND_AKT][person]) | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'IP', praes .. 'bi' .. endungen[IND_PASS][person]) | ||
end | end | ||
formen | setIfPossible(formen, '2SIP', praes .. 'beris') | ||
formen | setIfPossible(formen, '3PIA', praes .. 'bunt') | ||
formen | setIfPossible(formen, '3PIP', praes .. 'buntur') | ||
else | else | ||
formen | setIfPossible(formen, '1SIA', praes .. 'am') | ||
formen | setIfPossible(formen, '1SIP', praes .. 'ar') | ||
for person = 2, 6, 1 do | for person = 2, 6, 1 do | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'IA', praes .. 'e' .. endungen[IND_AKT][person]) | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'IP', praes .. 'e' .. endungen[IND_PASS][person]) | ||
end | end | ||
end | end | ||
Zeile 135: | Zeile 192: | ||
function bildePerfekt(params) | function bildePerfekt(params) | ||
local | local formen = createFormTable(perfGV) | ||
local | 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 | for person = 1, 6, 1 do | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'IA', perf .. endungen[IND_AKT][person]) | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'KA', perf .. 'eri' .. endungen[KONJ_AKT][person]) | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'IP', ppp .. endungen[IND_PASS][person]) | ||
formen | setIfPossible(formen, PERSONEN[person] .. 'KP', ppp .. endungen[KONJ_PASS][person]) | ||
end | end | ||
return formen | return formen | ||
Zeile 155: | Zeile 208: | ||
function bildePlusquamperfekt(params) | 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'} | |||
local formen = | |||
local endungen = {' | 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]) | |||
for person = 1, | setIfPossible(formen, PERSONEN[person] .. 'KP', ppp .. endungen[person] .. ' esse' .. MST[person]) | ||
formen | |||
formen | |||
formen | |||
formen | |||
end | end | ||
return formen | return formen | ||
Zeile 178: | Zeile 221: | ||
function bildeFuturII(params) | 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'} | |||
local formen = | |||
local endungen = {' | for person = 1, 6, 1 do | ||
for | setIfPossible(formen, PERSONEN[person] .. 'IA', perf .. 'eri' .. MST[person]) | ||
formen[ | setIfPossible(formen, PERSONEN[person] .. 'IP', ppp .. endungen[person] .. ' eri' .. MST[person]) | ||
end | end | ||
setIfPossible(formen, '1SIA', perf .. 'ero') | |||
setIfPossible(formen, '1SIP', ppp .. 'us/a/um ero') | |||
setIfPossible(formen, '3PIP', ppp .. 'i/ae/a erunt') | |||
formen | |||
formen | |||
return formen | return formen | ||
end | end | ||
function | 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 | end | ||
function | 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 | end | ||
function p.render(frame) | function p.render(frame) | ||
params | 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 | end | ||
if | 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 | 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 | end | ||
return pagecontent | |||
end | 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 | return p |
Aktuelle Version vom 18. Oktober 2024, 06:02 Uhr
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