Mòdul:llista de termes

De Viccionari
Salta a la navegació Salta a la cerca
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]


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.
  • 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 corresponent
  • filtre=true Activa el filtre per eliminar la pròpia pàgina 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= | |...}} Tot seguit hi va la llista de termes amb un número 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, on x és el número de terme corresponent: mostra un qualificador com a informació addicional entre parèntesis per aquell terme.
  • altx, on x é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("Mòdul:enllaç")
local m_util = require("Mòdul:utilitats")

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 lang = pargs["lang"]
	if lang then
		compat = true
	else
		lang = args["lang"]
		if lang then
			compat = true
		else
			lang = pargs[1]
		end
	end
	
	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, langcode = (lang=="mul" and "xx" or lang), tr = parameter.tr}, 'negreta')
				else
					text = text .. m_links.full_link({term = parameter.term, alt = parameter.alt, langcode = (lang=="mul" and "xx" or lang), tr = parameter.tr})
				end
				if args.alfagrama then
					if alphagram(noDiacritics(parameter.term)) == parameter.term then
						text = text .. " <sup>(alfagrama)</sup>"
					end
				end
			end
		end
	end
	
	--return process
	local titol = args[1]
	if count > 1 and args[2] ~= "literal" then
		titol = require("Mòdul: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
	
	--anul·lat provisionalment per compatibilitat durant la transició de les plantilles
	--error("Cal proporcionar un terme com a mínim.")
	return titol
end

return p