Mòdul:utilitats
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
modificaformat_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
):
- 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.
- Si existeix una regla d'ordenació per la llengua donada, fa les substitucions o supressions definides en la regla d'aquesta llengua.
- 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(lang, sc)
if next(lang) == nil then
return nil
end
local langname = mw.language.getContentLanguage():ucfirst(lang.name)
return "<span id=\"catfix\" style=\"display:none;\" class=\"CATFIX-" .. mw.uri.anchorEncode(langname) .. "\">" ..
require("Module:enllaç").tag_text(" ", lang.code, sc or lang.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