Mòdul:llista de termes
A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]
Mòdul de suport per a plantilles que mostren una llista de termes separats per comes, com {{homòfons}}, {{anagrames}}, {{vegeu}}.
La sintaxi per invocar des d'una plantilla és: {{#invoke:llista de termes|show|títol|estil|lang=|filtre=}}
1=
El primer paràmetre és el títol de la llista.2=
El segon paràmetre opcional és l'estil del títol.- Si és igual a
literal
es mostrarà sense cap modificació. En cas contrari canviarà a plural si la llista de terme és major a un, i hi afegirà dos punts. - Si és igual a
bold
es mostrarà en negreta.
- Si és igual a
lang=
Defineix el codi de llengua. Si no existeix buscarà el mateix paràmetre en la plantilla. Si tampoc existeix assumiràlang=mul
com a multilingüe. Amb aquest paràmetre s'enllacen els termes a la secció de llengua corresponentfiltre=true
Activa el filtre per eliminar la pàgina actual de la llista de terme. D'aquesta forma permet copiar fàcilment la mateixa llista quan s'inclou en diferents pàgines.nodiacritics=true
Ampliació del filtre per eliminar de la llista les variacions del títol de la pàgina amb diacrítics. Per exemple, veuré no és un anagrama de veure.
La sintaxi per cridar la plantilla és: {{plantilla|<lang>| |...}}
El primer paràmetre és el codi de llengua. Tot seguit hi va la llista de termes amb un nombre de paràmetres il·limitat. La llista s'ordena automàticament segons les regles d'ordenació de cada llengua.
Paràmetres addicionals en la plantilla:
qx
, onx
és el número de terme corresponent: mostra un qualificador com a informació addicional entre parèntesis per aquell terme.altx
, onx
és el número de terme corresponent: mostra un text alternatiu a l'enllaçat. En cas que no existeixi el paràmetre pel terme corresponent, es mostra el text alternatiu sense enllaç.
Vegeu uns exemples a {{homòfons}}. El codi original és de en:Module:homophones, adaptat i ampliat.
local p = {}
local m_links = require("Module:enllaç")
local m_util = require("Module:utilitats")
local m_languages = require("Module:llengua")
local function noDiacritics(word)
return mw.ustring.gsub(mw.ustring.lower(word), "([àáèéíïòóúüç])", function (vowel) return mw.ustring.toNFD(vowel):sub(1, 1) end)
end
-- en cas de concurrència l'ordre de table.sort no és estable, depèn del locale
local function codepoint(str)
local cp = {}
for i = 1, mw.ustring.len(str) do
table.insert(cp, string.format("%03d", mw.ustring.codepoint(str, i)))
end
return table.concat(cp)
end
local function alphagram(word)
local letters = {}
for letter in mw.ustring.gmatch(word, "(.)") do
table.insert(letters, letter)
end
table.sort(letters)
return table.concat(letters)
end
function p.show(frame)
local args = frame.args
local pargs = frame:getParent().args
local compat -- compatibility with parameter lang
local langcode = args["lang"]
if langcode then
compat = true
else
langcode = pargs[1]
end
local lang = {}
if langcode == "xx" then -- used by template:vegeu
lang.code = "xx"
lang.name = "qualsevol"
else
lang = m_languages.getByCode(langcode)
if lang.code == lang.name then
error("El primer paràmetre no és un codi de llengua vàlid")
end
end
lang.sc = args.sc or lang.sc
local text = ""
local terms = {} -- because args is unmodifiable
--copy all unnamed parameters to terms
local list = 1
for i, param in ipairs(pargs) do
if compat or (not compat and i > 1) then
terms[list] = {}
terms[list]["term"] = param
list = list + 1
end
end
--copy all named parameters to terms
--make the term empty string if only the alternate text exists
for name, param in pairs(pargs) do
local regex = mw.ustring.match(tostring(name),"^alt%d+$")
if regex then
local index = tonumber((name:gsub("alt", "")))
if not terms[index] then
terms[index] = {}
terms[index]["term"] = ""
end
terms[index]["alt"] = param
end
regex = mw.ustring.match(tostring(name),"^q%d+$")
if regex then
local index = tonumber((name:gsub("q", "")))
terms[index]["tr"] = param
end
end
-- sort order
for i, v in ipairs(terms) do
terms[i]["sort"] = m_util.ordenacio(terms[i]["alt"] or terms[i]["term"], lang)
end
table.sort(terms, function(a, b) return codepoint(a.sort) < codepoint(b.sort) end)
--main process
local comma = false
local count = 0
local pagename = mw.title.getCurrentTitle().subpageText
local pagename_nodiacritics = noDiacritics(pagename)
for i, parameter in ipairs(terms) do
if not (
(args.filtre and pagename == parameter.term)
or (args.nodiacritics and pagename_nodiacritics == noDiacritics(parameter.term))
) then
count = count + 1
if comma then
text = text .. ", "
else
comma = true
end
if parameter.term == "" then
text = text .. parameter.alt
else
if args[2] == 'literal' then
text = text .. m_links.full_link({term = parameter.term, alt = parameter.alt, lang = lang, tr = parameter.tr}, 'negreta')
else
text = text .. m_links.full_link({term = parameter.term, alt = parameter.alt, lang = lang, tr = parameter.tr})
end
if args.alfagrama then
if alphagram(noDiacritics(parameter.term)) == parameter.term then
text = text .. " <sup>(alfagrama)</sup>"
elseif string.reverse(string.lower(parameter.term)) == pagename_nodiacritics then
text = text .. " <sup>(revers)</sup>"
end
end
end
end
end
--return process
local titol = args[1]
if count > 1 and args[2] ~= "literal" then
titol = require("Module:ca-lema").forma_plural_nominal(args[1], "-")
end
if args[2] == "bold" then
titol = "<b>" .. titol .. "</b>"
end
if count > 0 then
return titol .. (args[2] == "literal" and " " or ": ") .. text
elseif mw.title.getCurrentTitle().nsText == "Plantilla" then
return titol .. (args[2] == "literal" and " " or ": ") .. "[[terme#ca|terme]]"
end
--if this line is parsed, there are no terms at all and the namespace is not Template
error("Cal proporcionar un terme com a mínim.")
return titol
end
return p