Modul:Verb: Unterschied zwischen den Versionen
Aus KGS-Wiki
Sn (Diskussion | Beiträge) (RenderTemplate) |
Sn (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(108 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 = {' | local IMPERATIV= 5 | ||
local PERSONEN = {'1S','2S','3S','1P','2P','3P'} | |||
local PRAES = 1 | local PRAES = 1 | ||
local PERF = 2 | 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) | function bildeInfinitive(params) | ||
local formen = {{},{}, {}} | |||
local formen = {{},{}} | |||
formen[PRAES][IND_AKT] = inf | formen[PRAES][IND_AKT] = inf | ||
if inf:match(praes:sub(-1,-1) .. "r[ei]$") then | if inf:match(praes:sub(-1,-1) .. "r[ei]$") then | ||
Zeile 50: | Zeile 38: | ||
end | end | ||
formen[PERF][IND_AKT] = perf .. "isse" | formen[PERF][IND_AKT] = perf .. "isse" | ||
formen[PERF][IND_PASS] = ppp .. "us/a/um | 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 | 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 | |||
formen['ImpS'] = praes .. "!" | |||
formen['ImpP'] = praes .. "te!" | |||
else | |||
formen['ImpS'] = praes .. "e!" | |||
formen['ImpP'] = praes .. "ite!" | |||
end | |||
else | |||
if praes:match("[aei]$") then | |||
formen['ImpS'] = praes .. "re!" | |||
formen['ImpP'] = praes .. "mini!" | |||
else | |||
formen['ImpS'] = praes .. "ere!" | |||
formen['ImpP'] = praes .. "imini!" | |||
end | |||
end | end | ||
return formen | return formen | ||
Zeile 105: | 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 121: | 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 137: | 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 168: | 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 188: | 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 211: | 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 | ||
Zeile 239: | Zeile 242: | ||
table = table .. ' !! Passiv' | table = table .. ' !! Passiv' | ||
end | end | ||
table = table .. '\n|-\n! Präsens | table = table .. '\n|-\n! Präsens' | ||
if praesGV:match("A") then | if praesGV:match("A") then | ||
table = table .. ' || ' .. | table = table .. '\n| lang="la" | ' .. formen[PRAES][IND_AKT] | ||
end | end | ||
if praesGV:match("P") then | if praesGV:match("P") then | ||
table = table .. ' || ' .. | table = table .. '\n| lang="la" | ' .. formen[PRAES][IND_PASS] | ||
end | end | ||
table = table .. '\n|-\n! Perfekt | table = table .. '\n|-\n! Perfekt' | ||
if perfGV:match("A") then | if perfGV:match("A") then | ||
table = table .. ' || ' .. | table = table .. '\n| lang="la" | ' .. formen[PERF][IND_AKT] | ||
end | end | ||
if perfGV:match("P") then | if perfGV:match("P") then | ||
table = table .. ' || ' .. | 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 | end | ||
table = table .. '\n|}\n' | table = table .. '\n|}\n' | ||
Zeile 257: | Zeile 265: | ||
end | end | ||
function | 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 | 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. | 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' | |||
end | 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 17. November 2024, 10:30 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
formen['ImpS'] = praes .. "!"
formen['ImpP'] = praes .. "te!"
else
formen['ImpS'] = praes .. "e!"
formen['ImpP'] = praes .. "ite!"
end
else
if praes:match("[aei]$") then
formen['ImpS'] = praes .. "re!"
formen['ImpP'] = praes .. "mini!"
else
formen['ImpS'] = praes .. "ere!"
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