Modulo:Sort

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

Questo modulo serve a ordinare una stringa rispetto a un certo carattere divisore.

Gli argomenti in input sono:

  1. primo parametro posizionale: la stringa da ordinare;
  2. order: può essere asc (default) o desc, per ordinare la stringa, rispettivamente, secondo un ordine crescente o decrescente;
  3. split: il carattere divisore, di default è l'andata a capo;
  4. join: il carattere per riunire la stringa, di default è uguale al valore di split.

split e join riconoscono le sequenze di caratteri %s e %n come, rispettivamente, uno spazio e un'andata a capo. Questa soluzione è particolarmente utile per l'input dei parametri dei template, in quanto gli spazi agli estremi non vengono considerati.

Il modulo è usato dal template {{Ordina}}.


local p = {}

local function check_char(v)
	if v == '' or v == nil then return end
	return v:gsub("%%n", "\n"):gsub("%%s", " ")
end

function p.sort(frame)
	local text = mw.text.trim(frame.args[1] or '')
	local order = frame.args.order
	local split_char = check_char(frame.args.split) or '\n'
	local join_char = check_char(frame.args.join) or split_char

	-- Divide la stringa in input e ricava un array di elementi
	local items = mw.text.split(text, split_char, true)

	-- Ordina l'array di elementi in base al tipo di ordinamento richiesto
	table.sort(items, function (a, b)
		a, b = mw.text.trim(a), mw.text.trim(b)
		if order == 'desc' then return a > b else return b > a end
	end)

	-- Restituisce un'unica stringa
	return mw.text.trim(table.concat(items, join_char))
end

return p