Zum Inhalt springen

„Modul:Wortbedeutungen“ – Versionsunterschied

aus AufEinWort, der freien Forschung
K Reperaturcode
Markierung: Zurückgesetzt
K wieder Reparatur
Markierung: Zurückgesetzt
Zeile 5: Zeile 5:
-- Hilfsfunktion zum Extrahieren der Zielseite einer Sprachvorstufe
-- Hilfsfunktion zum Extrahieren der Zielseite einer Sprachvorstufe
local function extrahiereZielseite(content, n)
local function extrahiereZielseite(content, n)
     local muster = string.format("%d%-Sprachvorstufe::([^|%%]]+)|?[^%%]]*%]%]", n)
    -- Versuch mit [[n-Sprachvorstufe::Ziel|Anzeigetext]]
    local ziel = content:match(muster)
     local ziel = content:match(string.format("%[%[%d%-Sprachvorstufe::([^|%%]]+)|[^%%]]-%]%]", n))
     if not ziel then
     if not ziel then
         -- Fallback, falls kein | vorhanden ist
         -- Versuch mit [[n-Sprachvorstufe::Ziel]]
         muster = string.format("%d%-Sprachvorstufe::([^%%]]+)%]%]", n)
         ziel = content:match(string.format("%[%[%d%-Sprachvorstufe::([^%%]]+)%]%]", n))
        ziel = content:match(muster)
     end
     end
     return ziel
     return ziel

Version vom 17. April 2025, 13:37 Uhr

Die Dokumentation für dieses Modul kann unter Modul:Wortbedeutungen/Doku erstellt werden

-- Modul:Wortbedeutungen

local p = {}

-- Hilfsfunktion zum Extrahieren der Zielseite einer Sprachvorstufe
local function extrahiereZielseite(content, n)
    -- Versuch mit [[n-Sprachvorstufe::Ziel|Anzeigetext]]
    local ziel = content:match(string.format("%[%[%d%-Sprachvorstufe::([^|%%]]+)|[^%%]]-%]%]", n))
    if not ziel then
        -- Versuch mit [[n-Sprachvorstufe::Ziel]]
        ziel = content:match(string.format("%[%[%d%-Sprachvorstufe::([^%%]]+)%]%]", n))
    end
    return ziel
end

-- Hilfsfunktion zum Extrahieren der letzten Sprachstufe aus dem Inhalt
local function extrahiereSprachstufe(content)
    local raw = content:match("%[%[Sprachstufe::([^%]]+)%]%]")
    if not raw then return nil end
    return raw:match("([^.]+%.)%s*$")
end

-- Hilfsfunktion zum Sammeln aller Werte eines Properties
local function sammleWerte(content, property)
    local werte = {}
    for wert in content:gmatch("%[%[" .. property .. "::([^%]]+)%]%]") do
        table.insert(werte, wert)
    end
    return werte
end

-- Kombinierte Anzeige
function p.zeigNBD(frame)
    local n = tonumber(frame.args[1]) or 1
    local title = mw.title.getCurrentTitle()
    local content = title:getContent() or ""
    local ziel = extrahiereZielseite(content, n)
    if not ziel then return string.format("[Fehlende %d-Sprachvorstufe]", n) end

    local zielTitel = mw.title.new(ziel)
    if not zielTitel then return string.format("[Seite '%s' nicht gefunden]", ziel) end

    local zielContent = zielTitel:getContent() or ""
    local stufe = extrahiereSprachstufe(zielContent) or "[Sprachstufe?]"
    local b = sammleWerte(zielContent, "Wortbedeutung")
    local d = sammleWerte(zielContent, "Dingbedeutung")

    local ergebnis = ziel
    if #b > 0 then ergebnis = ergebnis .. " '" .. table.concat(b, ", ") .. "'" end
    if #d > 0 then ergebnis = ergebnis .. " '" .. table.concat(d, ", ") .. "'" end
    return stufe .. " " .. ergebnis
end

-- Einzelne Anzeigen
function p.zeig(frame)
    local n = tonumber(frame.args[1]) or 1
    local title = mw.title.getCurrentTitle()
    local content = title:getContent() or ""
    local ziel = extrahiereZielseite(content, n)
    if not ziel then return string.format("[Fehlende %d-Sprachvorstufe]", n) end

    local zielTitel = mw.title.new(ziel)
    if not zielTitel then return string.format("[Seite '%s' nicht gefunden]", ziel) end

    local zielContent = zielTitel:getContent() or ""
    local stufe = extrahiereSprachstufe(zielContent) or "[Sprachstufe?]"
    return stufe .. " " .. ziel
end

function p.zeigB(frame)
    local n = tonumber(frame.args[1]) or 1
    local title = mw.title.getCurrentTitle()
    local content = title:getContent() or ""
    local ziel = extrahiereZielseite(content, n)
    if not ziel then return string.format("[Fehlende %d-Sprachvorstufe]", n) end

    local zielTitel = mw.title.new(ziel)
    if not zielTitel then return string.format("[Seite '%s' nicht gefunden]", ziel) end

    local zielContent = zielTitel:getContent() or ""
    local b = sammleWerte(zielContent, "Wortbedeutung")
    if #b > 0 then
        return table.concat(b, ", ")
    else
        return string.format("[Keine Wortbedeutung gefunden in %s]", ziel)
    end
end

function p.zeigD(frame)
    local n = tonumber(frame.args[1]) or 1
    local title = mw.title.getCurrentTitle()
    local content = title:getContent() or ""
    local ziel = extrahiereZielseite(content, n)
    if not ziel then return string.format("[Fehlende %d-Sprachvorstufe]", n) end

    local zielTitel = mw.title.new(ziel)
    if not zielTitel then return string.format("[Seite '%s' nicht gefunden]", ziel) end

    local zielContent = zielTitel:getContent() or ""
    local d = sammleWerte(zielContent, "Dingbedeutung")
    if #d > 0 then
        return table.concat(d, ", ")
    else
        return string.format("[Keine Dingbedeutung gefunden in %s]", ziel)
    end
end

return p