Modul:Wörterbuch

Version vom 21. Februar 2026, 12:56 Uhr von HeikoBot (Diskussion | Beiträge) (fix getEntryPages())
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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
		local woerterbuch = q["Wörterbuch"] or {}
		if type(woerterbuch) == "string" then
			woerterbuch = {woerterbuch}
		end
		for _, e in ipairs(woerterbuch) 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