Modulo:Sandbox/Horcrux/AggNaz

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
local getArgs = require('Modulo:Arguments').getArgs
local cfg = mw.title.new('Modulo:Sandbox/Horcrux/AggNaz/Configurazione.json'):getContent()

local p = {}

-- La funzione aggiunge uno spazio dopo l'articolo o preposizione se questo/a non termina con un apice
local function aggiungiSpazioFinale(artPrep)
	if artPrep:sub(-1) ~= '\''
	then return artPrep .. ' '
	else return artPrep
	end
end

-- Funzione per visualizzare i dati di configurazione in una tabella wiki
function p.visualizza(frame)
	local tabellaNazioni = mw.text.jsonDecode(cfg)
	local tabellaHTML = '<table class="wikitable sortable">'
		for _, header in ipairs({'Codice', 'Nome', 'Articolo', 'in ...', 'di ...', 'M singolare', 'F singolare', 'M plurale', 'F plurale'}) do
			tabellaHTML = tabellaHTML .. '<th>' .. header .. '</th>'
		end
	
	for nazione, tabellaNazione in pairs(tabellaNazioni) do
		tabellaHTML = tabellaHTML .. '<tr>'
			tabellaHTML = tabellaHTML .. '<td>' .. nazione .. '</td>'
		for _, comando in ipairs({'st', 'art', 'in', 'di', 'ms', 'fs', 'mp', 'fp'}) do
			tabellaHTML = tabellaHTML .. '<td>' .. tabellaNazione[comando] .. '</td>'
		end
		tabellaHTML = tabellaHTML .. '</tr>'
	end
	
	return tabellaHTML .. '</table>'
end

-- Funzione da invocare nel template AggNaz
function p.AggNaz(frame)
	local args = getArgs(frame)
	local comando = args[1]:lower()
	local nazione = args[2]:upper()
	local tabelleNazioni = mw.text.jsonDecode(cfg)
	
	if tabelleNazioni[nazione] == nil then
		local syn = mw.title.new('Modulo:Sandbox/Horcrux/AggNaz/Sinonimi.json'):getContent()
		local tabellaSinonimi = mw.text.jsonDecode(syn)
		for candidato, sinonimi in pairs(tabellaSinonimi) do
			for _, sinonimo in ipairs(tabellaSinonimi[candidato]) do
				if sinonimo:lower() == nazione:lower() then
					nazione = candidato
				end
			end
		end
	end
	
	local tabellaNazione = tabelleNazioni[nazione]
	if tabellaNazione == nil then return ''
	elseif comando == 'ok' then return '1'
	end
	
	if comando == 'art' or comando == 'in' or comando == 'di' then
		return aggiungiSpazioFinale(tabellaNazione[comando])
	else
		return tabellaNazione[comando]
	end
end

return p