Modulo:Trattato

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
local Date = require('Modulo:Data').Date
local getArgs = require('Module:Arguments').getArgs
local numero_romano = require('Module:Numero romano').main
local  get_nome = require( "Modulo:Lingue").get_nome

local p = {}


local function cat_lingue(args)

	local function add_lingua(lingua, lingue)
		local nome_lingua,_ = get_nome(lingua)
		if nome_lingua ~= '' then 
			lingue[#lingue+1] = mw.ustring.format("Categoria:Trattati internazionali in %s", nome_lingua)
			return true
		end
		return false
	end

	local lingue = {}
	local pos = 1
	local lingua_sconosciuta = false
	if args.Lingua then 
		if not add_lingua(args.Lingua, lingue) then 
			lingua_sconosciuta = true
		end
		pos = 2
	end
	while true do
		local lingua = args['Lingua' .. tostring(pos)]
		if lingua then
			if not add_lingua(lingua, lingue) then 
				lingua_sconosciuta = true
			end
		else
			break
		end
		pos = pos +1
	end
	if lingua_sconosciuta then
		lingue[#lingue+1] = "Categoria:Errori di compilazione del template Trattato"
	end
	return lingue
end


local function cat_anno(args)
	local data_firma = args['Data firma']
	if not data_firma then return '' end
	data_firma = mw.ustring.gsub(data_firma, '%[', '')
	data_firma = mw.ustring.gsub(data_firma, '%]', '')
	local avanti_cristo = 0
	data_firma, avanti_cristo = mw.ustring.gsub(data_firma, " ?a%.C%.$", "")
	local _, _, anno_firma = mw.ustring.find(data_firma, "(%d+)$")
	if anno_firma == nil then return '' end
	anno_firma = tonumber(anno_firma)
	local categoria_start = '[[Categoria:Trattati internazionali '
	local preposizione = "del "	
	if (avanti_cristo == 0 and anno_firma < 1800) or avanti_cristo == 1 then
		local century = numero_romano({math.floor( (anno_firma+99)/100 )})
		if century == "VIII" or century == "XI" then preposizione = "dell'" end
		if avanti_cristo == 1 then 
			return mw.ustring.format("Categoria:Trattati internazionali %s%s secolo a.C.", preposizione, century)
		else
			return mw.ustring.format("Categoria:Trattati internazionali %s%s secolo", preposizione, century)
		end
	end
	local decennio_firma = math.floor(anno_firma/10)*10
	return mw.ustring.format("Categoria:Trattati internazionali degli anni %d", decennio_firma)
end

function p.categorie(frame)
	local args = getArgs(frame, {wrappers='Template:Trattato'})
	local current_namespace =  mw.title.getCurrentTitle().namespace
	local debug = args.debug or false
	-- disattiva la categorizzazione automatica fuori da ns0
	if current_namespace ~= 0 and not debug then return '' end
	local forza_categorie = args['forza categorie']
	if forza_categorie then return forza_categorie end
	local cat_list = cat_lingue(args)
	local cat_anno = cat_anno(args)
	if cat_anno then
		cat_list[#cat_list+1] = cat_anno
	end
	if cat_anno == '' then return '' end
	for pos,categoria in ipairs(cat_list) do 
		if debug then 
			cat_list[pos] = mw.ustring.format("[[:%s]]", categoria)
		else
			cat_list[pos] = mw.ustring.format("[[%s]]", categoria) 
		end
	end
	return table.concat(cat_list, '')
end

return p