Modulo:Sort

From Semi del Verbo
Jump to navigation Jump to search

La documentazione per questo modulo può essere creata in Modulo:Sort/man

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