Modul:tagg

Definition från Wiktionary, den fria ordlistan.
Hoppa till navigering Hoppa till sök

Dokumentation för denna modul finns på /dok (redigera), /test


Den här modulen används för att generera innehåll till {{tagg}}.

  • På undersidan /data finns metadata som styr hur olika taggar hanteras.
  • På undersidan /test finns enhetstest som man ska förhandsgranska sina ändringar i modulen mot innan man sparar.

Vissa taggar specialbehandlas på ett mer avancerat sätt och de återfinns i modulens kod under kommentaren "-- Specialbehandla vissa taggars visningstext".

local sort = require("Modul:sort")
local lang = require("Modul:lang")

local taggdata = mw.loadData("Modul:tagg/data")

local export = {}

local function ucFirst(str)
	return mw.ustring.gsub(str, "^%l", mw.ustring.upper)
end

function export.getWikitext(frame)
	-- Get these parameters from template instantiation
	local params = {
		[1] = {list = true},
		["kat"] = {list = true},
		["språk"] = {default = "svenska"},
		["text"] = {},
		["titel"] = {default = mw.title.getCurrentTitle().text},  -- This parameter is present for testing purposes, should not be needed in actual usecases
	}

	local args = require("Modul:parameters").process(frame:getParent().args, params)
	local language = ucFirst(lang.getLanguage(args["språk"]))
	local lang_code = lang.getCode(args["språk"])
	local text = args["text"]
	local pagename = args["titel"]
	local sort_key = sort.getSortKey(lang_code, pagename)

	function katString(kat)
		return "[[Kategori:" .. language .. "/" .. ucFirst(kat) .. "|" .. sort_key .. "]]"
	end

	local texter = {}  -- visas inom ''(parenteser)''
	local kategorier = {}

	-- Parse the labels
	for i, tagg in ipairs(args[1]) do
		local data = taggdata.taggar[tagg] or {}

		for _, kategori in ipairs(data.kat or {tagg}) do
			kategorier[#kategorier + 1] = katString(kategori)
		end

		local visa = data.visa or tagg
		if visa ~= "" then
			-- Specialbehandla vissa taggars visningstext
			local reflexiva_pronomen = {
				["Bokmål"] = {"seg", "%s seg"},
				["Bosniska"] = {"se", "%s se"},
				["Bottniska"] = {"sig", "%s sig"},
				["Danska"] = {"sig", "%s sig"},
				["Engelska"] = {"oneself", "%s oneself"},
				["Interlingua"] = {"se", "%s se"},
				["Isländska"] = {"sig", "%s sig"},
				["Makedonska"] = {"се", "%s се"},
				["Nynorska"] = {"seg", "%s seg"},
				["Polska"] = {"się", "%s się"},
				["Svenska"] = {"sig", "%s sig"},
				["Tjeckiska"] = {"se", "%s se"},
				["Tyska"] = {"sich", "sich %s"},
				["Älvdalska"] = {"sig", "%s sig"},
			}
			if tagg == "reflexivt" and reflexiva_pronomen[language] then
				if not string.find(pagename, "%f[%a]" .. reflexiva_pronomen[language][1] .. "%f[%A]") then
					visa = visa .. ": '''" .. string.format(reflexiva_pronomen[language][2], pagename) .. "'''"
				end
			end
			if tagg == "reflexivt" and language == "Franska" then
				if not string.find(pagename, "%f[%a]s\'") and -- Sidnamn innehåller aldrig ’ (sned apostrof), endast ' (enkel apostrof)
				   not string.find(pagename, "%f[%a]se%f[%A]") then
				   	if string.find("h", mw.ustring.sub(pagename, 1, 1)) then
				   	elseif string.find("aeiouéèàùâêîôûëïüÿ", mw.ustring.sub(pagename, 1, 1)) then
						visa = visa .. ": '''s’" .. pagename .. "'''"
				   	else
						visa = visa .. ": '''se " .. pagename .. "'''"
					end
				end
			end
			texter[#texter + 1] = visa
		end
	end

	if text then
		texter[#texter+1] = text
	end

	-- Parse kat-parameters
	for _, kategori in ipairs(args["kat"]) do
		kategorier[#kategorier + 1] = katString(kategori)
	end

	result = table.concat(kategorier, "")
	if #texter > 0 then
		result = result .. " ''(" .. table.concat(texter, ", ") .. ")'' "
	end

	return result
end

return export