Modul:Verb: Unterschied zwischen den Versionen

Aus KGS-Wiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 252: Zeile 252:
     praesens = bildePraesens(params)
     praesens = bildePraesens(params)
     perfekt = bildePerfekt(params)
     perfekt = bildePerfekt(params)
     tables = "'''Stammformen:''' " .. params.inf .. ", " .. praesens[praesTemp][1] .. ", " .. perfekt[perfTemp][1]
     tables = ";Stammformen: " .. params.inf .. ", " .. praesens[praesTemp][1] .. ", " .. perfekt[perfTemp][1]
     if not params.ppp:match("PPP") then
     if not params.ppp:match("PPP") then
         tables = tables .. ", " .. params.ppp .. "um\n\n"
         tables = tables .. ", " .. params.ppp .. "um"
     end
     end
     tables = tables .. "== Übersetzungen ==\n\n"
    tables = tables .. '\n\n'
     tables = tables .. "== Feste Wendungen ==\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 .. "== Formen mit Präsensstamm ==\n\n"
     tables = tables .. "== Formen mit Präsensstamm ==\n\n"
     tables = tables .. render('Präsens', praesens, params.praesGV, params.perfGV)
     tables = tables .. render('Präsens', praesens, params.praesGV, params.perfGV)

Version vom 11. März 2024, 22:38 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 IND_AKT  = 1
local KONJ_AKT = 2
local IND_PASS = 3
local KONJ_PASS= 4
local PERSONEN = {'1. Person Singular', '2. Person Singular', '3. Person Singular';
                  '1. Person Plural',   '2. Person Plural',   '3. Person Plural'}
local PRAES = 0
local PERF = 1

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 bildePraesens(params)
    local praes = params.praes
    local formen = {}
    local endungen = {{'o', 's', 't', 'mus', 'tis', 'nt'};
                      {'m', 's', 't', 'mus', 'tis', 'nt'};
                      {'or', 'ris', 'tur', 'mur', 'mini', 'ntur'};
                      {'r', 'ris', 'tur', 'mur', 'mini', 'ntur'}}
    for i = 1, 4, 1 do
        formen[i] = {}
    end
    if not praes:match("[aei]$") then
        for person = 1, 6, 1 do
            formen[IND_AKT][person] = praes .. 'i' .. endungen[IND_AKT][person]
            formen[IND_PASS][person] = praes .. 'i' .. endungen[IND_PASS][person]
            formen[KONJ_AKT][person] = praes .. 'a' .. endungen[KONJ_AKT][person]
            formen[KONJ_PASS][person] = praes .. 'a' .. endungen[KONJ_PASS][person]
        end
        formen[IND_AKT][1] = praes .. 'o'
        formen[IND_PASS][1] = praes .. 'or'
        formen[IND_PASS][2] = praes .. 'eris'
        formen[IND_AKT][6] = praes .. 'unt'
        formen[IND_PASS][6] = praes .. 'untur'
    end
    if praes:match("a$") then
        formen[IND_AKT][1] = praes:sub(1,-2) .. 'o'
        formen[IND_PASS][1] = praes:sub(1,-2) .. 'or'
        formen[KONJ_AKT][1] = praes:sub(1,-2) .. 'em'
        formen[KONJ_PASS][1] = praes:sub(1,-2) .. 'er'
        for person = 2, 6, 1 do
            formen[IND_AKT][person] = praes .. endungen[IND_AKT][person]
            formen[IND_PASS][person] = praes .. endungen[IND_PASS][person]
            formen[KONJ_AKT][person] = praes:sub(1,-2) .. 'e' .. endungen[KONJ_AKT][person]
            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
            formen[IND_AKT][person] = praes .. endungen[IND_AKT][person]
            formen[IND_PASS][person] = praes .. endungen[IND_PASS][person]
            formen[KONJ_AKT][person] = praes .. 'a' .. endungen[KONJ_AKT][person]
            formen[KONJ_PASS][person] = praes .. 'a' .. endungen[KONJ_PASS][person]
        end
        if not praes:match("e$") then
            formen[IND_AKT][6] = praes .. 'unt'
            formen[IND_PASS][6] = praes .. 'untur'
        end
    end
    return formen
end

function bildeImperfekt(params)
    local inf = params.inf
    local praes = params.praes
    local formen = {}
    local endungen = {{'m', 's', 't', 'mus', 'tis', 'nt'};
                      {'m', 's', 't', 'mus', 'tis', 'nt'};
                      {'r', 'ris', 'tur', 'mur', 'mini', 'ntur'};
                      {'r', 'ris', 'tur', 'mur', 'mini', 'ntur'}}
    for i = 1, 4, 1 do
        formen[i] = {}
    end
    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
    for person = 1, 6, 1 do
        formen[IND_AKT][person] = ind_stamm .. endungen[IND_AKT][person]
        formen[IND_PASS][person] = ind_stamm .. endungen[IND_PASS][person]
        formen[KONJ_AKT][person] = konj_stamm .. endungen[KONJ_AKT][person]
        formen[KONJ_PASS][person] = konj_stamm .. endungen[KONJ_PASS][person]
    end
    return formen
end

function bildeFuturI(params)
    local praes = params.praes
    local formen = {}
    local endungen = {{'o', 's', 't', 'mus', 'tis', 'nt'};
                      {};
                      {'r', 'ris', 'tur', 'mur', 'mini', 'ntur'};
                      {}}
    for i = 1, 4, 1 do
        formen[i] = {}
    end
    if praes:match("[ae]$") then
        formen[IND_AKT][1] = praes .. 'bo'
        formen[IND_PASS][1] = praes .. 'bor'
        for person = 2, 5, 1 do
            formen[IND_AKT][person] = praes .. 'bi' .. endungen[IND_AKT][person]
            formen[IND_PASS][person] = praes .. 'bi' .. endungen[IND_PASS][person]
        end
        formen[IND_PASS][2] = praes .. 'beris'
        formen[IND_AKT][6] = praes .. 'bunt'
        formen[IND_PASS][6] = praes .. 'buntur'
    else
        formen[IND_AKT][1] = praes .. 'am'
        formen[IND_PASS][1] = praes .. 'ar'
        for person = 2, 6, 1 do
            formen[IND_AKT][person] = praes .. 'e' .. endungen[IND_AKT][person]
            formen[IND_PASS][person] = praes .. 'e' .. endungen[IND_PASS][person]
        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 render(tempus, formen, praesGV, perfGV)
    local step = 1
    if tempus:match("Futur") then
        step = 2
    end    
    local table = ''
    table = table .. '{| class="wikitable mw-collapsible"\n'
    table = table .. '|+ ' .. tempus .. '\n! Person !! Indikativ Aktiv'
    if step == 1 then
        table = table .. ' !! Konjunktiv Aktiv'
    end
    if praesGV == 'AP' then
        table = table .. ' !! Indikativ Passiv'
    if step == 1 then
        table = table .. ' !! Konjunktiv Passiv'
    end
    end
    if praesGV:match('A') then
        minTemp = 1
    else
        minTemp = 3
    end
    if praesGV:match('P') then
        maxTemp = 4
    else
        maxTemp = 2
    end
    table = table .. '\n|-\n'
    for person = 1, 6, 1 do
        table = table .. '! ' .. PERSONEN[person] .. '\n'
        for tm = minTemp, maxTemp, step do
            table = table .. ' || ' .. formen[tm][person]
        end
        table = table .. '\n|-\n'
    end
    table = table .. '|}'
    return table
end

function p.render(frame)
    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
    praesens = bildePraesens(params)
    perfekt = bildePerfekt(params)
    tables = ";Stammformen: " .. params.inf .. ", " .. praesens[praesTemp][1] .. ", " .. perfekt[perfTemp][1]
    if not params.ppp:match("PPP") then
        tables = tables .. ", " .. 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 .. "== 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 .. "* {{Navigium|" .. params.inf .. "}}\n"
    tables = tables .. "* {{Georges|" .. praesens[praesTemp][1] .. "}}\n"
    return tables
end

return p