Icona de documentació de mòdul Documentació del mòdul[mostra] [modifica] [refresca]

A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]


Aquest mòdul exporta utilitats vàries generals que poden ser utilitzades per altres mòduls.

format_categories modifica

format_categories(categories, lang, sort_key)

Formata una llista (taula) de categories retornant una cadena de text consistent en totes les categories amb el format [[Categoria:...]] aplicat a cada una, més la clau d'ordenació. Si l'espai de noms no és el principal, no retorna res. Si no es proporciona una clau d'ordenació (sort_key):

  1. Genera una clau d'ordenació a partir del títol de pàgina (o subpàgina) eliminant certs caràcters inicials, com els guions usats en sufixos.
  2. Si existeix una regla d'ordenació per la llengua donada, fa les substitucions o supressions definides en la regla d'aquesta llengua.
  3. Si la clau d'ordenació final acaba sent idèntica al títol de la pàgina, llavors s'omet completament i així no interfereix amb l'ordenació definida per defecte amb DEFAULTSORT o ORDENA.

template_categorize modifica

{{#invoke:utilities|template_categorize}}

Aquesta funció és utilitzada per la plantilla {{categoritza}}..

local p = {}

function p.ordenacio(base, langcode)
	local taula = mw.loadData("Module:llengua/ordre")
	if not langcode then
		langcode = "mul" -- ordenació multilingüe per alfabet llatí
	end
	local llengua_taula = taula[langcode]
	if not llengua_taula then
		llengua_taula = taula["mul"]
	end
	
	-- Generate a default sort key
	local sort_base = base
	if llengua_taula.sort_key_module ~= nil then
		sort_base = require("Module:" .. llengua_taula.sort_key_module).ordena(base)
	else
		-- Remove initial hyphens and *
		base = mw.ustring.gsub(base, "^[-־ـ*]+(.)",
			"%1")
		-- Remove anything in parentheses, as long as they are either preceded or followed by something
		base = mw.ustring.gsub(base, "(.)%([^()]+%)", "%1")
		base = mw.ustring.gsub(base, "%([^()]+%)(.)", "%1")
		-- If there are language-specific rules to generate the key, use those
		if llengua_taula.sort_key then
			local lower_base = mw.ustring.lower(base)
			sort_base = lower_base
			for i, from in ipairs(llengua_taula.sort_key.from) do
				local to = llengua_taula.sort_key.to[i] or ""
				sort_base = mw.ustring.gsub(sort_base, from, to)
			end
			if sort_base ~= lower_base then
				sort_base = sort_base .. lower_base
			end
			if lower_base ~= base then
				sort_base = sort_base .. base
			end
		else
			sort_base = base
		end
	end
	
	return sort_base
end

-- Format the categories with the appropriate sort key
function p.format_categories(categories, lang, sort_key, sort_base)
	local NAMESPACE = mw.title.getCurrentTitle().nsText
	
	if NAMESPACE == "" or lang.type == 'annex' then
		local SUBPAGENAME = mw.title.getCurrentTitle().subpageText
		
		if not sort_key then
			sort_key = p.ordenacio(sort_base or SUBPAGENAME, lang.code)
		end
		
		-- If the resulting key is the same as the wiki software's default, remove it
		if sort_key == SUBPAGENAME or sort_key == "" then
			sort_key = nil
		end
		
		local out_categories = {}
		for key, cat in ipairs(categories) do
			out_categories[key] = "[[Categoria:" .. cat .. (sort_key and "|" .. sort_key or "") .. "]]"
		end
		
		return table.concat(out_categories, "")
	else
		return ""
	end
end

-- Utilitzada per {{categoritza}} i {{catllengua}}
function p.template_categorize(frame)
	local NAMESPACE = mw.title.getCurrentTitle().nsText
	local format = frame.args["format"]
	local args = frame:getParent().args
	
	local langcode = args[1]; if langcode == "" then langcode = nil end
	local sort_key = args["ordre"]; if sort_key == "" then sort_key = nil end
	local categories = {}
	
	local lang = require("Module:llengua").getByCode(langcode or "")
	if not langcode or lang.name == langcode then
		if NAMESPACE == "Plantilla" then return "" end
		error("El codi de llengua \"" .. (langcode or '-') .. "\" no és vàlid.")
	end
	
	local sufix = ""
	if format == "pos" then
		sufix = " en " .. lang.name
	end
	
	local i = 2
	local cat = args[i]
	
	while cat do
		if cat ~= "" then
			table.insert(categories, mw.ustring.gsub(cat, "^%l", mw.ustring.upper) .. sufix)
		end
		
		i = i + 1
		cat = args[i]
	end
	
	return p.format_categories(categories, lang, sort_key)
end

function p.catfix(langcode, sc)
	if not langcode then
		return nil
	end
	
	return "<span id=\"catfix\" style=\"display:none;\" class=\"CATFIX-" .. mw.uri.anchorEncode(langcode) .. "\">" ..
		require("Module:enllaç").tag_text("&nbsp;", langcode, sc, nil) ..
		"</span>"
end

-- Converteix una llista en una taula amb valor true per cada element
function p.llista (list)
	local set = {}
	for _, l in ipairs(list) do set[l] = true end
	return set
end

-- Afegeix una subplantilla de rastreig, copiat de [[:en:Module:debug]]
-- Vegeu https://en.wiktionary.org/wiki/Template:tracking
function p.track(key)
	if type(key) == "table" then key = key.args[1] end -- des de plantilles via invoke o des de mòduls via require
	local frame = mw.getCurrentFrame()
	pcall(frame.expandTemplate, frame, { title = 'rastreig/' .. key })
end

-- Funció equivalent a pairs() però ordenat per key
function p.spairs(t)
	local keys = {}
	for k in pairs(t) do keys[#keys+1] = k end
	table.sort(keys)
	local i = 0
	return function()
		i = i + 1
		if keys[i] then
			return keys[i], t[keys[i]]
		end
	end
end

return p