Modul:Wörterbuch: Unterschied zwischen den Versionen
Aus FürthWiki
(+ Attribute) |
(+ Wörterbuch-Funktionen setEntry(), getEntry(), getEntryPages()) |
||
| Zeile 1: | Zeile 1: | ||
local p = {} | local p = {} | ||
local com = require("Modul:Common") | |||
local smw = require("Modul:SMW") | |||
local wik = require("Modul:Wiki") | |||
function p.Mehrzahl(frame) | function p.Mehrzahl(frame) | ||
| Zeile 25: | Zeile 29: | ||
query = mw.smw.ask(query) or {{}} | query = mw.smw.ask(query) or {{}} | ||
return query[1]["Mehrzahl"] or mehrzahl[ez] or ez | return query[1]["Mehrzahl"] or mehrzahl[ez] or ez | ||
end | |||
function p.setEntry(entry, val, attrlist) | |||
-- Kommandozeilen zum Debuggen: | |||
-- attrlist={}; p.setEntry("e", "v", attrlist); mw.logObject(attrlist) | |||
if not com.isEmpty(val) then | |||
entry = entry .. "=" .. val | |||
if attrlist ~= nil then | |||
smw.addAttrToList(attrlist, "Wörterbuch", entry) | |||
else | |||
mw.smw.set{["Wörterbuch"] = entry} | |||
end | |||
end | |||
end | |||
function p.getEntry(page, entry) | |||
-- Kommandozeilen zum Debuggen: | |||
-- mw.logObject(p.getEntry("Testberuf","MehrzahlFemininum")) | |||
local val | |||
page = page or wik.fullpagename() | |||
local query = mw.smw.ask("[[" .. page .. "]]|?Wörterbuch") or {} | |||
query = query[1]["Wörterbuch"] | |||
if query ~= nil then | |||
val = {} | |||
for i, q in ipairs(query) do | |||
local delim_start, delim_end = string.find(q, "=") | |||
val[string.sub(q, 1, delim_start - 1)] = | |||
string.sub(q, delim_end + 1) | |||
end | |||
if entry ~= nil then | |||
val = val[entry] | |||
end | |||
end | |||
return val | |||
end | |||
function p.getEntry(page, entry) | |||
-- Kommandozeilen zum Debuggen: | |||
-- mw.logObject(p.getEntry("Testberuf","MehrzahlFemininum")) | |||
local val | |||
page = page or wik.fullpagename() | |||
local query = mw.smw.ask("[[" .. page .. "]]|?Wörterbuch") or {} | |||
query = query[1]["Wörterbuch"] | |||
if query ~= nil then | |||
val = {} | |||
for i, q in ipairs(query) do | |||
local delim_start, delim_end = string.find(q, "=") | |||
val[string.sub(q, 1, delim_start - 1)] = | |||
string.sub(q, delim_end + 1) | |||
end | |||
if entry ~= nil then | |||
val = val[entry] | |||
end | |||
end | |||
return val | |||
end | |||
function p.getEntryPages(entry, val, category) | |||
-- Kommandozeilen zum Debuggen: | |||
-- mw.logObject(p.getEntryPages("MehrzahlFemininum", "MF", "Berufe")) | |||
local pagelist | |||
entry = entry or "" | |||
val = val or "" | |||
pattern = entry .. "=" .. val | |||
-- SDB-Abfrage mit Wildcard, damit auch ohne entry/val funzt | |||
local query = "[[Wörterbuch::~*" .. pattern .. "*]]" .. | |||
"|?#-=fullpagename|?Wörterbuch|mainlabel=-" | |||
if category ~= nil then | |||
query = "[[Kategorie:" .. category .. "]]" .. query | |||
end | |||
query = mw.smw.ask(query) or {} | |||
-- Alle query-Ergebnisse durchgehen | |||
for _, q in ipairs(query) do | |||
for _, e in ipairs(q["Wörterbuch"]) do | |||
-- exakte entry/val-Überprüfung | |||
local found = false | |||
local fa, fe = string.find(e, pattern) | |||
if entry == "" then | |||
found = (val ~= "" and fe == #e) | |||
elseif val == "" then | |||
found = (fa == 1) | |||
else | |||
found = (fa == 1 and fe == #e) | |||
end | |||
-- Listeneintrag, wenn gefunden | |||
if found then | |||
if pagelist == nil then -- initialer table-init | |||
pagelist = {} | |||
end | |||
if pagelist[q.fullpagename] == nil then -- fullpagename in liste eintragen | |||
table.insert(pagelist, q.fullpagename) | |||
end | |||
local delim_start, delim_end = string.find(e, "=") -- fullpagename nochmal mit entry=val eintragen | |||
pagelist[q.fullpagename] = { | |||
[string.sub(e, 1, delim_start - 1)] = | |||
string.sub(e, delim_end + 1)} | |||
end | |||
end | |||
end | |||
return pagelist | |||
end | end | ||
return p | return p | ||
Version vom 21. Februar 2026, 12:33 Uhr
Dieses Modul beinhaltet übergreifende Wörterbücher.
mehrzahl() / Mehrzahl()
Gibt Mehrzahl-Wort einer Kategorie zurück. Beispiele und Tests:
-mehrzahl("Person")-ergibt-Personen--mehrzahl("Gewässer")-ergibt-Gewässer--mehrzahl("")-ergibt---mehrzahl()-ergibt--
Unterseiten
local p = {}
local com = require("Modul:Common")
local smw = require("Modul:SMW")
local wik = require("Modul:Wiki")
function p.Mehrzahl(frame)
return p.mehrzahl(frame.args[1] or "")
end
function p.mehrzahl(ez)
local mehrzahl = { -- ACHTUNG!
["Attribut"] = "Attribute", -- Die Mehrzahl-Einträge beim Attribut haben Vorrang!
["Audio"] = "Audios",
["Buchreihe"] = "Buchreihen",
["Faktenbox"] = "Faktenboxen",
["Grundstück"] = "Grundstücke",
["Jahrestag"] = "Jahrestage",
["Monat"] = "Monate",
["Publikation"] = "Publikationen",
["Stadtwiki"] = "Stadtwikis",
["Video"] = "Videos",
}
-- Attribut-Wörterbuch abfragen
local query = {"[[Attribut:+]]" ..
"[[SubObjektTyp::AttributKlasse]]" ..
"[[Einzahl::" .. ez .. "]]",
"?Mehrzahl", mainlabel = "-"}
query = mw.smw.ask(query) or {{}}
return query[1]["Mehrzahl"] or mehrzahl[ez] or ez
end
function p.setEntry(entry, val, attrlist)
-- Kommandozeilen zum Debuggen:
-- attrlist={}; p.setEntry("e", "v", attrlist); mw.logObject(attrlist)
if not com.isEmpty(val) then
entry = entry .. "=" .. val
if attrlist ~= nil then
smw.addAttrToList(attrlist, "Wörterbuch", entry)
else
mw.smw.set{["Wörterbuch"] = entry}
end
end
end
function p.getEntry(page, entry)
-- Kommandozeilen zum Debuggen:
-- mw.logObject(p.getEntry("Testberuf","MehrzahlFemininum"))
local val
page = page or wik.fullpagename()
local query = mw.smw.ask("[[" .. page .. "]]|?Wörterbuch") or {}
query = query[1]["Wörterbuch"]
if query ~= nil then
val = {}
for i, q in ipairs(query) do
local delim_start, delim_end = string.find(q, "=")
val[string.sub(q, 1, delim_start - 1)] =
string.sub(q, delim_end + 1)
end
if entry ~= nil then
val = val[entry]
end
end
return val
end
function p.getEntry(page, entry)
-- Kommandozeilen zum Debuggen:
-- mw.logObject(p.getEntry("Testberuf","MehrzahlFemininum"))
local val
page = page or wik.fullpagename()
local query = mw.smw.ask("[[" .. page .. "]]|?Wörterbuch") or {}
query = query[1]["Wörterbuch"]
if query ~= nil then
val = {}
for i, q in ipairs(query) do
local delim_start, delim_end = string.find(q, "=")
val[string.sub(q, 1, delim_start - 1)] =
string.sub(q, delim_end + 1)
end
if entry ~= nil then
val = val[entry]
end
end
return val
end
function p.getEntryPages(entry, val, category)
-- Kommandozeilen zum Debuggen:
-- mw.logObject(p.getEntryPages("MehrzahlFemininum", "MF", "Berufe"))
local pagelist
entry = entry or ""
val = val or ""
pattern = entry .. "=" .. val
-- SDB-Abfrage mit Wildcard, damit auch ohne entry/val funzt
local query = "[[Wörterbuch::~*" .. pattern .. "*]]" ..
"|?#-=fullpagename|?Wörterbuch|mainlabel=-"
if category ~= nil then
query = "[[Kategorie:" .. category .. "]]" .. query
end
query = mw.smw.ask(query) or {}
-- Alle query-Ergebnisse durchgehen
for _, q in ipairs(query) do
for _, e in ipairs(q["Wörterbuch"]) do
-- exakte entry/val-Überprüfung
local found = false
local fa, fe = string.find(e, pattern)
if entry == "" then
found = (val ~= "" and fe == #e)
elseif val == "" then
found = (fa == 1)
else
found = (fa == 1 and fe == #e)
end
-- Listeneintrag, wenn gefunden
if found then
if pagelist == nil then -- initialer table-init
pagelist = {}
end
if pagelist[q.fullpagename] == nil then -- fullpagename in liste eintragen
table.insert(pagelist, q.fullpagename)
end
local delim_start, delim_end = string.find(e, "=") -- fullpagename nochmal mit entry=val eintragen
pagelist[q.fullpagename] = {
[string.sub(e, 1, delim_start - 1)] =
string.sub(e, delim_end + 1)}
end
end
end
return pagelist
end
return p