Modul:Verb: Unterschied zwischen den Versionen
Aus KGS-Wiki
Sn (Diskussion | Beiträge) (Futur 1) |
Sn (Diskussion | Beiträge) (Futur 1) |
||
Zeile 174: | Zeile 174: | ||
endungen[IND_AKT] = MST | endungen[IND_AKT] = MST | ||
endungen[IND_PASS] = RRISTUR | endungen[IND_PASS] = RRISTUR | ||
formen[IND_AKT] = {} | if params.praesGV:match("A") then | ||
formen[IND_PASS] = {} | formen[IND_AKT] = {} | ||
end | |||
if params.praesGV:match("P") then | |||
formen[IND_PASS] = {} | |||
end | |||
if praes:match("[ae]$") then | if praes:match("[ae]$") then | ||
formen[IND_AKT] | setIfPossible(formen[IND_AKT], 1, praes .. 'bo') | ||
formen[IND_PASS] | setIfPossible(formen[IND_PASS], 1, praes .. 'bor') | ||
for person = 2, 5, 1 do | for person = 2, 5, 1 do | ||
for tm,_ in pairs(formen) do | for tm,_ in pairs(formen) do | ||
formen[tm] | setIfPossible(formen[tm], person, praes .. 'bi' .. endungen[tm][person]) | ||
end | end | ||
end | end | ||
formen[IND_PASS] | setIfPossible(formen[IND_PASS], 2, praes .. 'beris') | ||
formen[IND_AKT] | setIfPossible(formen[IND_AKT], 6, praes .. 'bunt') | ||
formen[IND_PASS] | setIfPossible(formen[IND_PASS], 6, praes .. 'buntur') | ||
else | else | ||
formen[IND_AKT] | setIfPossible(formen[IND_AKT], 1, praes .. 'am') | ||
formen[IND_PASS] | setIfPossible(formen[IND_PASS], 1, praes .. 'ar') | ||
for person = 2, 6, 1 do | for person = 2, 6, 1 do | ||
for | for m,_ in pairs(formen) do | ||
formen[ | setIfPossible(formen[m], person, praes .. 'e' .. endungen[m][person]) | ||
end | end | ||
end | end |
Version vom 11. Mai 2024, 15:03 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 IND_AKT = 1
local KONJ_AKT = 2
local IND_PASS = 3
local KONJ_PASS= 4
local IMPERATIV= 5
local PERSONEN = {'1. Person Singular', '2. Person Singular', '3. Person Singular';
'1. Person Plural', '2. Person Plural', '3. Person Plural'}
local MODI = {}
MODI[IND_AKT] = "Indikativ Aktiv"
MODI[KONJ_AKT] = "Konjunktiv Aktiv"
MODI[IND_PASS] = "Indikativ Passiv"
MODI[KONJ_PASS]= "Konjunktiv Passiv"
MODI[IMPERATIV]= "Imperativ"
local PRAES = 1
local PERF = 2
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'}
function init(frame)
return {
inf = frame.args[1] or frame:getParent().args[1] or 'Infinitiv';
praes = frame.args[2] or frame:getParent().args[2] or 'Präsensstamm + ';
perf = frame.args[3] or frame:getParent().args[3] or 'Perfektstamm + ';
ppp = frame.args[4] or frame:getParent().args[4] or 'PPP-Stamm + ';
praesGV= frame.args.PraesGV or frame:getParent().args.PraesGV or 'AP';
perfGV = frame.args.PraesGV or frame:getParent().args.PerfGV or 'AP';
}
end
function renderTemplate(frame, name, params)
local templateText
if mw.isSubsting() then
table.sort(params)
templateText = '{{' .. name
for k,v in pairs(params) do
templateText = templateText .. '|' .. k .. '=' .. v
end
templateText = templateText .. '}}'
else
templateText = frame:expandTemplate({title=name, args=params})
end
return templateText
end
function bildeInfinitive(params)
local inf = params.inf
local praes = params.praes
local perf = params.perf
local ppp = params.ppp
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 .. "us/a/um esse"
return formen
end
function bildePraesens(params)
local praes = params.praes
local formen = createFormTable(params.praesGV)
local endungen = {}
endungen[IND_AKT] = OST
endungen[KONJ_AKT] = MST
endungen[IND_PASS] = ORRISTUR
endungen[KONJ_PASS]= RRISTUR
formen[IMPERATIV] = {}
if not praes:match("[aei]$") then
for person = 1, 6, 1 do
setIfPossible(formen[IND_AKT], person, praes .. 'i' .. endungen[IND_AKT][person])
setIfPossible(formen[IND_PASS], person, praes .. 'i' .. endungen[IND_PASS][person])
setIfPossible(formen[KONJ_AKT], person, praes .. 'a' .. endungen[KONJ_AKT][person])
setIfPossible(formen[KONJ_PASS],person, praes .. 'a' .. endungen[KONJ_PASS][person])
end
setIfPossible(formen[IND_AKT], 1, praes .. 'o')
setIfPossible(formen[IND_PASS], 1, praes .. 'or')
setIfPossible(formen[IND_PASS], 2, praes .. 'eris')
setIfPossible(formen[IND_AKT], 6, praes .. 'unt')
setIfPossible(formen[IND_PASS], 6, praes .. 'untur')
end
if praes:match("a$") then
setIfPossible(formen[IND_AKT], 1, praes:sub(1,-2) .. 'o')
setIfPossible(formen[IND_PASS], 1, praes:sub(1,-2) .. 'or')
setIfPossible(formen[KONJ_AKT], 1, praes:sub(1,-2) .. 'em')
setIfPossible(formen[KONJ_PASS],1, praes:sub(1,-2) .. 'er')
for person = 2, 6, 1 do
setIfPossible(formen[IND_AKT], person, praes .. endungen[IND_AKT][person])
setIfPossible(formen[IND_PASS], person, praes .. endungen[IND_PASS][person])
setIfPossible(formen[KONJ_AKT], person, praes:sub(1,-2) .. 'e' .. endungen[KONJ_AKT][person])
setIfPossible(formen[KONJ_PASS],person, praes:sub(1,-2) .. 'e' .. endungen[KONJ_PASS][person])
end
end
if praes:match("[ei]$") then
for person = 1, 6, 1 do
setIfPossible(formen[IND_AKT], person, praes .. endungen[IND_AKT][person])
setIfPossible(formen[IND_PASS], person, praes .. endungen[IND_PASS][person])
setIfPossible(formen[KONJ_AKT], person, praes .. 'a' .. endungen[KONJ_AKT][person])
setIfPossible(formen[KONJ_PASS],person, praes .. 'a' .. endungen[KONJ_PASS][person])
end
if not praes:match("e$") then
setIfPossible(formen[IND_AKT], 6, praes .. 'unt')
setIfPossible(formen[IND_PASS], 6, praes .. 'untur')
end
end
if params.praesGV:match("A") then
if praes:match("[aei]$") then
setIfPossible(formen[IMPERATIV],2, praes .. "!")
setIfPossible(formen[IMPERATIV],5, praes .. "te!")
else
setIfPossible(formen[IMPERATIV],2, praes .. "e!")
setIfPossible(formen[IMPERATIV],5, praes .. "ite!")
end
else
if praes:match("[aei]$") then
setIfPossible(formen[IMPERATIV],2, praes .. "re!")
setIfPossible(formen[IMPERATIV],5, praes .. "mini!")
else
setIfPossible(formen[IMPERATIV],2, praes .. "ere!")
setIfPossible(formen[IMPERATIV],5, praes .. "imini!")
end
end
return formen
end
function bildeImperfekt(params)
local inf = params.inf
local praes = params.praes
local formen = createFormTable(params.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 not inf:match("r[ei]$") then
konj_stamm = praes .. 'ere'
end
if inf:match("ri$") then
konj_stamm = praes .. 're'
end
local staemme = {}
staemme[IND_AKT] = ind_stamm
staemme[IND_PASS] = ind_stamm
staemme[KONJ_AKT] = konj_stamm
staemme[KONJ_PASS]= konj_stamm
for person = 1, 6, 1 do
for tm,_ in pairs(formen) do
setIfPossible(formen[tm], person, staemme[tm] .. endungen[tm][person])
end
end
return formen
end
function bildeFuturI(params)
local praes = params.praes
local formen = {}
local endungen = {}
endungen[IND_AKT] = MST
endungen[IND_PASS] = RRISTUR
if params.praesGV:match("A") then
formen[IND_AKT] = {}
end
if params.praesGV:match("P") then
formen[IND_PASS] = {}
end
if praes:match("[ae]$") then
setIfPossible(formen[IND_AKT], 1, praes .. 'bo')
setIfPossible(formen[IND_PASS], 1, praes .. 'bor')
for person = 2, 5, 1 do
for tm,_ in pairs(formen) do
setIfPossible(formen[tm], person, praes .. 'bi' .. endungen[tm][person])
end
end
setIfPossible(formen[IND_PASS], 2, praes .. 'beris')
setIfPossible(formen[IND_AKT], 6, praes .. 'bunt')
setIfPossible(formen[IND_PASS], 6, praes .. 'buntur')
else
setIfPossible(formen[IND_AKT], 1, praes .. 'am')
setIfPossible(formen[IND_PASS], 1, praes .. 'ar')
for person = 2, 6, 1 do
for m,_ in pairs(formen) do
setIfPossible(formen[m], person, praes .. 'e' .. endungen[m][person])
end
end
end
return formen
end
function bildePerfekt(params)
local perf = params.perf
local ppp = params.ppp
local formen = {}
local endungen = {{'i', 'isti', 'it', 'imus', 'istis', 'erunt'};
{'m', 's', 't', 'mus', 'tis', 'nt'};
{'us/a/um sum', 'us/a/um es', 'us/a/um est', 'i/ae/a sumus', 'i/ae/a estis', 'i/ae/a sunt'};
{'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 i = 1, 4, 1 do
formen[i] = {}
end
for person = 1, 6, 1 do
formen[IND_AKT][person] = perf .. endungen[IND_AKT][person]
formen[KONJ_AKT][person] = perf .. 'eri' .. endungen[KONJ_AKT][person]
formen[IND_PASS][person] = ppp .. endungen[IND_PASS][person]
formen[KONJ_PASS][person] = ppp .. endungen[KONJ_PASS][person]
end
return formen
end
function bildePlusquamperfekt(params)
local perf = params.perf
local ppp = params.ppp
local formen = {}
local endungen = {'m', 's', 't', 'mus', 'tis', 'nt'}
for i = 1, 4, 1 do
formen[i] = {}
end
for person = 1, 3, 1 do
formen[IND_AKT][person] = perf .. 'era' .. endungen[person]
formen[KONJ_AKT][person] = perf .. 'isse' .. endungen[person]
formen[IND_PASS][person] = ppp .. 'us/a/um era' .. endungen[person]
formen[KONJ_PASS][person] = ppp .. 'us/a/um esse' .. endungen[person]
end
for person = 4, 6, 1 do
formen[IND_AKT][person] = perf .. 'era' .. endungen[person]
formen[KONJ_AKT][person] = perf .. 'isse' .. endungen[person]
formen[IND_PASS][person] = ppp .. 'i/ae/a era' .. endungen[person]
formen[KONJ_PASS][person] = ppp .. 'i/ae/a esse' .. endungen[person]
end
return formen
end
function bildeFuturII(params)
local perf = params.perf
local ppp = params.ppp
local formen = {}
local endungen = {'m', 's', 't', 'mus', 'tis', 'nt'}
for i = 1, 4, 1 do
formen[i] = {}
end
for person = 1, 3, 1 do
formen[IND_AKT][person] = perf .. 'eri' .. endungen[person]
formen[IND_PASS][person] = ppp .. 'us/a/um eri' .. endungen[person]
end
for person = 4, 6, 1 do
formen[IND_AKT][person] = perf .. 'eri' .. endungen[person]
formen[IND_PASS][person] = ppp .. 'i/ae/a eri' .. endungen[person]
end
formen[IND_AKT][1] = perf .. 'ero'
formen[IND_PASS][1] = ppp .. 'us/a/um ero'
formen[IND_PASS][6] = 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\n'
if praesGV:match("A") then
table = table .. ' || ' .. enclose(formen[PRAES][IND_AKT])
end
if praesGV:match("P") then
table = table .. ' || ' .. enclose(formen[PRAES][IND_PASS])
end
table = table .. '\n|-\n! Perfekt\n'
if perfGV:match("A") then
table = table .. ' || ' .. enclose(formen[PERF][IND_AKT])
end
if perfGV:match("P") then
table = table .. ' || ' .. enclose(formen[PERF][IND_PASS])
end
table = table .. '\n|}\n'
return table
end
function render(tempus, formen)
local table = ''
table = table .. '{| class="wikitable mw-collapsible"\n'
table = table .. '|+ ' .. tempus .. '\n! Person'
for k,_ in pairs(formen) do
table = table .. ' !! ' .. MODI[k]
end
table = table .. '\n|-\n'
for person = 1, 6, 1 do
table = table .. '! ' .. PERSONEN[person] .. '\n'
for tm,_ in pairs(formen) do
table = table .. ' || ' .. enclose(formen[tm][person])
end
table = table .. '\n|-\n'
end
table = table .. '|}'
return table
end
function enclose(text)
return tostring(mw.html.create('span'):attr('lang', 'la'):wikitext(text))
end
function setIfPossible(maybeArray,index,value)
if maybeArray then
maybeArray[index] = value
end
end
function createFormTable(gv)
local formen = {}
if gv:match("A") then
formen[IND_AKT] = {}
formen[KONJ_AKT] = {}
end
if gv:match("P") then
formen[IND_PASS] = {}
formen[KONJ_PASS] = {}
end
return formen
end
function p.render(frame)
local tables = ""
params = init(frame)
if params.praesGV:match('A') then
praesTemp = 1
else
praesTemp = 3
end
if params.perfGV:match('A') then
perfTemp = 1
else
perfTemp = 3
end
infinitive = bildeInfinitive(params)
praesens = bildePraesens(params)
perfekt = bildePerfekt(params)
if not mw.isSubsting() then
tables = tables .. renderTemplate(frame, "Achtung", {"Dieses Modul sollte nur mit <code>{{subst:#invoke:Verb|...}}</code> eingebunden werden! "})
end
tables = tables .. "{{DISPLAYTITLE:" .. params.inf .. "}}\n"
tables = tables .. renderTemplate(frame, "Thumbnailbox", {INHALT= renderTemplate(frame, "Wortwolke", {params.inf, ""})}) .. "\n"
tables = tables .. ";[[Stammformen]]: " .. enclose(params.inf) .. ", " .. enclose(praesens[praesTemp][1]) .. ", " .. enclose(perfekt[perfTemp][1])
if not params.ppp:match("PPP") and params.perfGV == "AP" then
tables = tables .. ", " .. enclose(params.ppp ..
"um")
end
tables = tables .. '\n\n'
tables = tables .. ";Bedeutungen\n\n"
tables = tables .. ";Feste Wendungen\n\n"
tables = tables .. ";Aufbau\n\n"
tables = tables .. ";Verwandte Wörter\n\n"
tables = tables .. ";In anderen Sprachen\n\n"
tables = tables .. "== Infinite Formen ==\n\n"
tables = tables .. renderInfinitive(infinitive, params.praesGV, params.perfGV)
tables = tables .. "== Formen mit Präsensstamm ==\n\n"
tables = tables .. render('[[Präsens]]', praesens)
tables = tables .. '\n\n'
tables = tables .. render('[[Imperfekt]]', bildeImperfekt(params))
tables = tables .. '\n\n'
tables = tables .. render('[[Futur I]]', bildeFuturI(params))
tables = tables .. '\n\n'
tables = tables .. "== Formen mit Perfektstamm/PPP ==\n\n"
tables = tables .. render('[[Perfekt]]', perfekt)
tables = tables .. '\n\n'
tables = tables .. render('[[Plusquamperfekt]]', bildePlusquamperfekt(params))
tables = tables .. '\n\n'
tables = tables .. render('[[Futur II]]', bildeFuturII(params))
tables = tables .. '\n\n'
tables = tables .. "== Weblinks ==\n\n"
tables = tables .. "* " .. renderTemplate(frame, 'Navigium', {params.inf}) .. "\n"
tables = tables .. "* " .. renderTemplate(frame, "Georges", {praesens[praesTemp][1]}) .. "\n"
tables = tables .. "[[Kategorie:Verb (Latein)/" .. params.inf:sub(0,1) .. "]]"
return tables
end
function p.parseArray(frame)
res = {}
for k, v in string.gmatch(frame.args[1], "([^,]+):([^,]+)") do
res[k] = v
end
return mw.af.export(res)
end
return p