Modul:Verb: Unterschied zwischen den Versionen

Aus KGS-Wiki
KKeine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(98 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 6: Zeile 7:
local KONJ_PASS= 4
local KONJ_PASS= 4
local IMPERATIV= 5
local IMPERATIV= 5
local PERSONEN = {'1. Person Singular', '2. Person Singular', '3. Person Singular';
local PERSONEN = {'1S','2S','3S','1P','2P','3P'}
                  '1. Person Plural',   '2. Person Plural',   '3. Person Plural'}
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'}


function init(frame)
local frame = mw.getCurrentFrame()
    return {
local inf    = frame.args[1] or frame:getParent().args[1] or 'Infinitiv';
        inf    = frame.args[1] or frame:getParent().args[1] or 'Infinitiv';
local lInf  = frame.args[2] or frame:getParent().args[2] or 0;
        praes  = frame.args[2] or frame:getParent().args[2] or 'Präsensstamm + ';
local praes  = frame.args[3] or frame:getParent().args[3] or 'Präsensstamm + ';
        perf  = frame.args[3] or frame:getParent().args[3] or 'Perfektstamm + ';
local perf  = frame.args[4] or frame:getParent().args[4] or 'Perfektstamm + ';
        ppp    = frame.args[4] or frame:getParent().args[4] or 'PPP-Stamm + ';
local lPerf  = frame.args[5] or frame:getParent().args[5] or 0;
        praesGV= frame.args.PraesGV or frame:getParent().args.PraesGV or 'AP';
local ppp    = frame.args[6] or frame:getParent().args[6] or 'PPP-Stamm + ';
        perfGV = frame.args.PraesGV or frame:getParent().args.PerfGV or 'AP';
local lPPP  = frame.args[7] or frame:getParent().args[7] or 0;
    }
local praesGV= frame.args.PraesGV or frame:getParent().args.PraesGV or 'AP';
end
local perfGV = frame.args.PerfGV or frame:getParent().args.PerfGV or 'AP';
 
function renderTemplate(frame, name, params)
local templateText
if mw.isSubsting() then
table.sort(params)
templateText = '{{' .. name
for k,v in ipairs(params) do
templateText = templateText .. '|' .. k .. '=' .. v
end
templateText = templateText .. '}}'
else
templateText = frame:expandTemplate({title=name, args=params})
end
return templateText
end


function bildeInfinitive(params)
function bildeInfinitive(params)
local inf = params.inf
local formen = {{},{}, {}}
local praes = params.praes
local perf = params.perf
local ppp = params.ppp
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 52: Zeile 38:
end
end
formen[PERF][IND_AKT] = perf .. "isse"
formen[PERF][IND_AKT] = perf .. "isse"
formen[PERF][IND_PASS] = ppp .. "us/a/um esse"
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 praes = params.praes
     local formen = createFormTable(praesGV)
     local formen = {}
     local endungen = {}
     local endungen = {{'o', 's', 't', 'mus', 'tis', 'nt'};
     endungen[IND_AKT]  = OST
                      {'m', 's', 't', 'mus', 'tis', 'nt'};
     endungen[KONJ_AKT] = MST
                      {'or', 'ris', 'tur', 'mur', 'mini', 'ntur'};
    endungen[IND_PASS] = ORRISTUR
                      {'r', 'ris', 'tur', 'mur', 'mini', 'ntur'}}
     endungen[KONJ_PASS]= RRISTUR
     for i = 1, 5, 1 do
        formen[i] = {}
     end
     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[IND_AKT][person] = praes .. 'i' .. endungen[IND_AKT][person]
             setIfPossible(formen, PERSONEN[person] .. 'IA', praes .. 'i' .. endungen[IND_AKT][person])
             formen[IND_PASS][person] = praes .. 'i' .. endungen[IND_PASS][person]
             setIfPossible(formen, PERSONEN[person] .. 'IP', praes .. 'i' .. endungen[IND_PASS][person])
             formen[KONJ_AKT][person] = praes .. 'a' .. endungen[KONJ_AKT][person]
             setIfPossible(formen, PERSONEN[person] .. 'KA', praes .. 'a' .. endungen[KONJ_AKT][person])
             formen[KONJ_PASS][person] = praes .. 'a' .. endungen[KONJ_PASS][person]
             setIfPossible(formen, PERSONEN[person] .. 'KP', praes .. 'a' .. endungen[KONJ_PASS][person])
         end
         end
         formen[IND_AKT][1] = praes .. 'o'
         setIfPossible(formen, '1SIA', praes .. 'o')
         formen[IND_PASS][1] = praes .. 'or'
         setIfPossible(formen, '1SIP', praes .. 'or')
         formen[IND_PASS][2] = praes .. 'eris'
         setIfPossible(formen, '2SIP', praes .. 'eris')
         formen[IND_AKT][6] = praes .. 'unt'
         setIfPossible(formen, '3PIA', praes .. 'unt')
         formen[IND_PASS][6] = praes .. 'untur'
         setIfPossible(formen, '3PIP', praes .. 'untur')
     end
     end
     if praes:match("a$") then
     if praes:match("a$") then
         formen[IND_AKT][1] = praes:sub(1,-2) .. 'o'
         setIfPossible(formen, '1SIA', praes:sub(1,-2) .. 'o')
         formen[IND_PASS][1] = praes:sub(1,-2) .. 'or'
         setIfPossible(formen, '1SIP', praes:sub(1,-2) .. 'or')
         formen[KONJ_AKT][1] = praes:sub(1,-2) .. 'em'
         setIfPossible(formen, '1SKA', praes:sub(1,-2) .. 'em')
         formen[KONJ_PASS][1] = praes:sub(1,-2) .. 'er'
         setIfPossible(formen, '1SKP', praes:sub(1,-2) .. 'er')
         for person = 2, 6, 1 do
         for person = 2, 6, 1 do
             formen[IND_AKT][person] = praes .. endungen[IND_AKT][person]
             setIfPossible(formen, PERSONEN[person] .. 'IA', praes .. endungen[IND_AKT][person])
             formen[IND_PASS][person] = praes .. endungen[IND_PASS][person]
             setIfPossible(formen, PERSONEN[person] .. 'IP', praes .. endungen[IND_PASS][person])
             formen[KONJ_AKT][person] = praes:sub(1,-2) .. 'e' .. endungen[KONJ_AKT][person]
             setIfPossible(formen, PERSONEN[person] .. 'KA', praes:sub(1,-2) .. 'e' .. endungen[KONJ_AKT][person])
             formen[KONJ_PASS][person] = praes:sub(1,-2) .. 'e' .. endungen[KONJ_PASS][person]
             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[IND_AKT][person] = praes .. endungen[IND_AKT][person]
             setIfPossible(formen, PERSONEN[person] .. 'IA', praes .. endungen[IND_AKT][person])
             formen[IND_PASS][person] = praes .. endungen[IND_PASS][person]
             setIfPossible(formen, PERSONEN[person] .. 'IP', praes .. endungen[IND_PASS][person])
             formen[KONJ_AKT][person] = praes .. 'a' .. endungen[KONJ_AKT][person]
             setIfPossible(formen, PERSONEN[person] .. 'KA', praes .. 'a' .. endungen[KONJ_AKT][person])
             formen[KONJ_PASS][person] = praes .. 'a' .. endungen[KONJ_PASS][person]
             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[IND_AKT][6] = praes .. 'unt'
             setIfPossible(formen, '3PIA', praes .. 'unt')
             formen[IND_PASS][6] = praes .. 'untur'
             setIfPossible(formen, '3PIP', praes .. 'untur')
         end
         end
     end
     end
     if params.praesGV:match("A") then
     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
     if praes:match("[aei]$") then
     formen[IMPERATIV][2] = praes .. "!"
     formen['ImpS'] = praes .. "!"
     formen[IMPERATIV][5] = praes .. "te!"
     formen['ImpP'] = praes .. "te!"
     else
     else
     formen[IMPERATIV][2] = praes .. "e!"
     formen['ImpS'] = praes .. "e!"
     formen[IMPERATIV][5] = praes .. "ite!"
     formen['ImpP'] = praes .. "ite!"
     end
     end
     else
     else
     if praes:match("[aei]$") then
     if praes:match("[aei]$") then
     formen[IMPERATIV][2] = praes .. "re!"
     formen['ImpS'] = praes .. "re!"
     formen[IMPERATIV][5] = praes .. "mini!"
     formen['ImpP'] = praes .. "mini!"
     else
     else
     formen[IMPERATIV][2] = praes .. "ere!"
     formen['ImpS'] = praes .. "ere!"
     formen[IMPERATIV][5] = praes .. "imini!"
     formen['ImpP'] = praes .. "imini!"
     end
     end
     end
     end
Zeile 124: Zeile 137:


function bildeImperfekt(params)
function bildeImperfekt(params)
     local inf = params.inf
     local formen = createFormTable(praesGV)
     local praes = params.praes
     local endungen = {}
     local formen = {}
     endungen[IND_AKT]  = MST
     local endungen = {{'m', 's', 't', 'mus', 'tis', 'nt'};
     endungen[KONJ_AKT] = MST
                      {'m', 's', 't', 'mus', 'tis', 'nt'};
     endungen[IND_PASS] = RRISTUR
                      {'r', 'ris', 'tur', 'mur', 'mini', 'ntur'};
    endungen[KONJ_PASS]= RRISTUR
                      {'r', 'ris', 'tur', 'mur', 'mini', 'ntur'}}
 
     for i = 1, 4, 1 do
        formen[i] = {}
    end
     local ind_stamm = praes .. 'ba'
     local ind_stamm = praes .. 'ba'
     local konj_stamm = inf
     local konj_stamm = inf
Zeile 140: Zeile 150:
     end
     end
      
      
     if not inf:match("r[ei]$") then
     if inf:match("[^r]i$") or inf:match("[^aei]ri") then
         konj_stamm = praes .. 'ere'
         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[IND_AKT][person] = ind_stamm .. endungen[IND_AKT][person]
         setIfPossible(formen, PERSONEN[person] .. 'IA', ind_stamm .. endungen[IND_AKT][person])
         formen[IND_PASS][person] = ind_stamm .. endungen[IND_PASS][person]
         setIfPossible(formen, PERSONEN[person] .. 'IP', ind_stamm .. endungen[IND_PASS][person])
         formen[KONJ_AKT][person] = konj_stamm .. endungen[KONJ_AKT][person]
         setIfPossible(formen, PERSONEN[person] .. 'KA', konj_stamm .. endungen[KONJ_AKT][person])
         formen[KONJ_PASS][person] = konj_stamm .. endungen[KONJ_PASS][person]
         setIfPossible(formen, PERSONEN[person] .. 'KP', konj_stamm .. endungen[KONJ_PASS][person])
     end
     end
     return formen
     return formen
Zeile 156: Zeile 166:


function bildeFuturI(params)
function bildeFuturI(params)
     local praes = params.praes
     local formen = createFormTable(praesGV, 'I')
     local formen = {}
     local endungen = {}
     local endungen = {{'o', 's', 't', 'mus', 'tis', 'nt'};
     endungen[IND_AKT]  = MST
                      {};
     endungen[IND_PASS] = RRISTUR
                      {'r', 'ris', 'tur', 'mur', 'mini', 'ntur'};
                      {}}
     for i = 1, 4, 1 do
        formen[i] = {}
    end
     if praes:match("[ae]$") then
     if praes:match("[ae]$") then
         formen[IND_AKT][1] = praes .. 'bo'
         setIfPossible(formen, '1SIA', praes .. 'bo')
         formen[IND_PASS][1] = praes .. 'bor'
         setIfPossible(formen, '1SIP', praes .. 'bor')
         for person = 2, 5, 1 do
         for person = 2, 5, 1 do
             formen[IND_AKT][person] = praes .. 'bi' .. endungen[IND_AKT][person]
             setIfPossible(formen, PERSONEN[person] .. 'IA', praes .. 'bi' .. endungen[IND_AKT][person])
             formen[IND_PASS][person] = praes .. 'bi' .. endungen[IND_PASS][person]
             setIfPossible(formen, PERSONEN[person] .. 'IP', praes .. 'bi' .. endungen[IND_PASS][person])
         end
         end
         formen[IND_PASS][2] = praes .. 'beris'
         setIfPossible(formen, '2SIP', praes .. 'beris')
         formen[IND_AKT][6] = praes .. 'bunt'
         setIfPossible(formen, '3PIA', praes .. 'bunt')
         formen[IND_PASS][6] = praes .. 'buntur'
         setIfPossible(formen, '3PIP', praes .. 'buntur')
     else
     else
         formen[IND_AKT][1] = praes .. 'am'
         setIfPossible(formen, '1SIA', praes .. 'am')
         formen[IND_PASS][1] = praes .. 'ar'
         setIfPossible(formen, '1SIP', praes .. 'ar')
         for person = 2, 6, 1 do
         for person = 2, 6, 1 do
             formen[IND_AKT][person] = praes .. 'e' .. endungen[IND_AKT][person]
             setIfPossible(formen, PERSONEN[person] .. 'IA', praes .. 'e' .. endungen[IND_AKT][person])
             formen[IND_PASS][person] = praes .. 'e' .. endungen[IND_PASS][person]
             setIfPossible(formen, PERSONEN[person] .. 'IP', praes .. 'e' .. endungen[IND_PASS][person])
         end
         end
     end
     end
Zeile 187: Zeile 192:


function bildePerfekt(params)
function bildePerfekt(params)
     local perf = params.perf
     local formen = createFormTable(perfGV)
     local ppp = params.ppp
     local endungen = {}
    local formen = {}
     endungen[IND_AKT]  = {'i', 'isti', 'it', 'imus', 'istis', 'erunt'}
     local endungen = {{'i', 'isti', 'it', 'imus', 'istis', 'erunt'};
    endungen[KONJ_AKT] = MST
                      {'m', 's', 't', 'mus', 'tis', 'nt'};
    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'}
                      {'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'}
                      {'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
     for person = 1, 6, 1 do
         formen[IND_AKT][person] = perf .. endungen[IND_AKT][person]
         setIfPossible(formen, PERSONEN[person] .. 'IA', perf .. endungen[IND_AKT][person])
         formen[KONJ_AKT][person] = perf .. 'eri' .. endungen[KONJ_AKT][person]
         setIfPossible(formen, PERSONEN[person] .. 'KA', perf .. 'eri' .. endungen[KONJ_AKT][person])
         formen[IND_PASS][person] = ppp .. endungen[IND_PASS][person]
         setIfPossible(formen, PERSONEN[person] .. 'IP', ppp .. endungen[IND_PASS][person])
         formen[KONJ_PASS][person] = ppp .. endungen[KONJ_PASS][person]
         setIfPossible(formen, PERSONEN[person] .. 'KP', ppp .. endungen[KONJ_PASS][person])
     end
     end
     return formen
     return formen
Zeile 207: Zeile 208:


function bildePlusquamperfekt(params)
function bildePlusquamperfekt(params)
    local perf = params.perf
     local formen = createFormTable(perfGV)
    local ppp = params.ppp
     local endungen = {'us/a/um', 'us/a/um', 'us/a/um', 'i/ae/a', 'i/ae/a', 'i/ae/a'}
     local formen = {}
 
     local endungen = {'m', 's', 't', 'mus', 'tis', 'nt'}
     for person = 1, 6, 1 do
    for i = 1, 4, 1 do
         setIfPossible(formen, PERSONEN[person] .. 'IA', perf .. 'era' .. MST[person])
        formen[i] = {}
         setIfPossible(formen, PERSONEN[person] .. 'KA', perf .. 'isse' .. MST[person])
    end
         setIfPossible(formen, PERSONEN[person] .. 'IP', ppp .. endungen[person] .. ' era' .. MST[person])
     for person = 1, 3, 1 do
         setIfPossible(formen, PERSONEN[person] .. 'KP', ppp .. endungen[person] .. ' esse' .. MST[person])
         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
     end
     return formen
     return formen
Zeile 230: Zeile 221:


function bildeFuturII(params)
function bildeFuturII(params)
    local perf = params.perf
     local formen = createFormTable(praesGV, 'I')
    local ppp = params.ppp
     local endungen = {'us/a/um', 'us/a/um', 'us/a/um', 'i/ae/a', 'i/ae/a', 'i/ae/a'}
     local formen = {}
 
     local endungen = {'m', 's', 't', 'mus', 'tis', 'nt'}
     for person = 1, 6, 1 do
     for i = 1, 4, 1 do
         setIfPossible(formen, PERSONEN[person] .. 'IA', perf .. 'eri' .. MST[person])
         formen[i] = {}
        setIfPossible(formen, PERSONEN[person] .. 'IP', ppp .. endungen[person] .. ' eri' .. MST[person])
     end
     end
     for person = 1, 3, 1 do
      
        formen[IND_AKT][person] = perf .. 'eri' .. endungen[person]
    setIfPossible(formen, '1SIA', perf .. 'ero')
        formen[IND_PASS][person] = ppp .. 'us/a/um eri' .. endungen[person]
     setIfPossible(formen, '1SIP', ppp .. 'us/a/um ero')
    end
     setIfPossible(formen, '3PIP', ppp .. 'i/ae/a erunt')
    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
     return formen
end
end
Zeile 258: Zeile 242:
table = table .. ' !! Passiv'
table = table .. ' !! Passiv'
end
end
table = table .. '\n|-\n! Präsens\n'
table = table .. '\n|-\n! Präsens'
if praesGV:match("A") then
if praesGV:match("A") then
table = table .. ' || ' .. enclose(formen[PRAES][IND_AKT])
table = table .. '\n| lang="la" | ' .. formen[PRAES][IND_AKT]
end
end
if praesGV:match("P") then
if praesGV:match("P") then
table = table .. ' || ' .. enclose(formen[PRAES][IND_PASS])
table = table .. '\n| lang="la" | ' .. formen[PRAES][IND_PASS]
end
end
table = table .. '\n|-\n! Perfekt\n'
table = table .. '\n|-\n! Perfekt'
if perfGV:match("A") then
if perfGV:match("A") then
table = table .. ' || ' .. enclose(formen[PERF][IND_AKT])
table = table .. '\n| lang="la" | ' .. formen[PERF][IND_AKT]
end
end
if perfGV:match("P") then
if perfGV:match("P") then
table = table .. ' || ' .. enclose(formen[PERF][IND_PASS])
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 276: Zeile 265:
end
end


function render(tempus, formen, praesGV, perfGV)
function renderPartizipien(formen, perfGV)
    local step = 1
local table = ''
    if tempus:match("Futur") then
table = table .. '{| class="wikitable mw-collapsible"\n'
        step = 2
table = table .. '|+ [[Partizip]]ien\n'
    end   
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>]]'
    local table = ''
table = table .. '\n| lang="la" | ' .. formen[PRAES] .. '\n'
    table = table .. '{| class="wikitable mw-collapsible"\n'
if perfGV == "AP" then
    table = table .. '|+ ' .. tempus .. '\n! Person !! Indikativ Aktiv'
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>]]'
    if step == 1 then
table = table .. '\n| lang="la" | ' .. formen[PERF] .. '\n'
        table = table .. ' !! Konjunktiv Aktiv'
elseif perfGV == "P" then
    end
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>]]'
    if praesGV == 'AP' then
table = table .. '\n| lang="la" | ' .. formen[PERF] .. '\n'
        table = table .. ' !! Indikativ Passiv'
end
    if step == 1 then
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 .. ' !! Konjunktiv Passiv'
table = table .. '\n| lang="la" | ' .. formen[FUTUR] .. '\n'
    end
table = table .. '|}'
    end
return table
    if praesGV:match('A') then
end
        minTemp = 1
 
    else
function renderND(formen)
        minTemp = 3
local table = ''
    end
table = table .. '{| class="wikitable mw-collapsible"\n'
    if praesGV:match('P') then
table = table .. "|+ ''nd''-Formen\n"
        maxTemp = 4
table = table .. "! [[Gerundium]] !! [[Gerundivum]]\n"
    else
table = table .. '|-\n| lang="la" | ' .. formen[1] .. '\n| lang="la" | ' .. formen[2] .. '\n|}'
        maxTemp = 2
return table
    end
end
    table = table .. '\n|-\n'
 
    for person = 1, 6, 1 do
function setIfPossible(array,key,value)
        table = table .. '! ' .. PERSONEN[person] .. '\n'
if array[key] then
        for tm = minTemp, maxTemp, step do
array[key] = value
            table = table .. ' || ' .. enclose(formen[tm][person])
end
        end
        table = table .. '\n|-\n'
    end
    table = table .. '|}'
    return table
end
end


function enclose(text)
function createFormTable(gv, modi)
    return mw.html.create('span'):attr('lang', 'la'):wikitext(text)
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)
local tables = ""
local pagecontent = ''
    params = init(frame)
lektionen = {}
    if params.praesGV:match('A') then
if tonumber(lInf) ~= 0 then
        praesTemp = 1
table.insert(lektionen, lInf)
     else
end
        praesTemp = 3
if tonumber(lPerf) ~= 0 then
     end
table.insert(lektionen, lPerf)
     if params.perfGV:match('A') then
end
        perfTemp = 1
if tonumber(lPPP) ~= 0 then
    else
table.insert(lektionen, lPPP)
        perfTemp = 3
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
     infinitive = bildeInfinitive(params)
     stammformen["lInf"] = lInf
     praesens = bildePraesens(params)
     stammformen["lPerf"]= lPerf
    perfekt = bildePerfekt(params)
     if not mw.isSubsting() then
     if not mw.isSubsting() then
     tables = tables .. renderTemplate(frame, "Achtung", {"Dieses Modul sollte nur mit <code>{{subst:#invoke:Verb|...}}</code> eingebunden werden! "})
     pagecontent = pagecontent .. utils.renderTemplate("Achtung", {"Dieses Modul sollte nur mit <code>{{subst:#invoke:Verb|...}}</code> eingebunden werden! "})
     end
     end
     tables = tables .. "{{DISPLAYTITLE:" .. params.inf .. "}}\n"
     pagecontent = pagecontent .. "{{DISPLAYTITLE:" .. inf .. "}}\n"
     tables = tables .. renderTemplate(frame, "Thumbnailbox", {INHALT= renderTemplate(frame, "Wortwolke", {params.inf, ""})}) .. "\n"
     pagecontent = pagecontent .. utils.renderTemplate("Legende Verb", {}) .. "\n"
     tables = tables .. ";[[Stammformen]]: " .. enclose(params.inf) .. ", " .. enclose(praesens[praesTemp][1]) .. ", " .. enclose(perfekt[perfTemp][1])
     pagecontent = pagecontent .. utils.renderWortwolke(inf) .. "\n"
     if not params.ppp:match("PPP") and params.perfGV == "AP" then
    pagecontent = pagecontent .. utils.renderVokabelbox('Stammformen', stammformen)
        tables = tables .. ", " .. enclose(params.ppp ..
    pagecontent = pagecontent .. '\n'
"um")
     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
    tables = tables .. '\n\n'
return pagecontent
    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, params.praesGV, params.perfGV)
    tables = tables .. '\n\n'
    tables = tables .. render('[[Imperfekt]]', bildeImperfekt(params), params.praesGV, params.perfGV)
    tables = tables .. '\n\n'
    tables = tables .. render('[[Futur I]]', bildeFuturI(params), params.praesGV, params.perfGV)
    tables = tables .. '\n\n'
    tables = tables .. "== Formen mit Perfektstamm/PPP ==\n\n"
    tables = tables .. render('[[Perfekt]]', perfekt, params.praesGV, params.perfGV)
    tables = tables .. '\n\n'
    tables = tables .. render('[[Plusquamperfekt]]', bildePlusquamperfekt(params), params.praesGV, params.perfGV)
    tables = tables .. '\n\n'
    tables = tables .. render('[[Futur II]]', bildeFuturII(params), params.praesGV, params.perfGV)
    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
end


function p.parseArray(frame)
function p.renderFormen(frame)
res = {}
local pagecontent = ""
     for k, v in string.gmatch(frame.args[1], "([^,]+):([^,]+)") do
    --params = init()
    res[k] = v
    pagecontent = pagecontent .. "\n\n== Infinite Formen ==\n\n"
     end
    pagecontent = pagecontent .. renderInfinitive(bildeInfinitive(params), praesGV, perfGV)
return mw.af.export(res)
    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.
Erläuterung
{{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.
Erlaubte Werte
  • AP: Verb bildet Aktiv- und Passivformen (Standard)
  • A: Verb bildet nur Aktivformen
  • P: Verb bildet nur Passivformen (Deponens)
PerfGV=AP}} Optional: Verfügbare Genera verbi in den perfektischen Zeiten.
Erlaubte Werte
  • AP: Verb bildet Aktiv- und Passivformen (Standard)
  • A: Verb bildet nur Aktivformen
  • P: Verb bildet nur Passivformen (Deponens)
👉
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