--[[
Questo modulo è in appoggio al template Videogioco, per gestirne le funzioni di
categorizzazione automatica
]]
local p = {}
local anomalyerrors_msg = {} ▼
local cfg = mw.loadData("Modulo:Videogioco/Configurazione")
local getArgs = require('Module:Arguments').getArgs
local function build_reverse_alias(table_name)
local reverse_alias = {}
for alias, name in pairs(cfg['alias_' .. table_name]) do
if not reverse_alias[name] then reverse_alias[name] = {} end
table.insert(reverse_alias[name], alias)
end
return reverse_alias
end
-- ========================================================================
-- Sostituisce name con il suo alias se presente nella tabella alias
-- ========================================================================
local function get_category(name, table_name)
name = cfg['alias_' .. table_name][name] or name
return cfg[table_name][name]
end
-- ========================================================================
-- Ritorna una lista di categorie per la sequenza di parametri con
-- nome base 'base_name' consultando la tabella 'table'.
-- 'alias_table' è una tabella di nomi alternativi per i valori dei
-- parametri, 'max_index' il numero massimo dell'indice del parametro
-- da controllare
-- ========================================================================
local function categorizza(args, base_name, table_name, max_indexlowercase, lowercasemust_exist)
local categories = {}
if local name_value = args[base_name] then or args[base_name .. '1']
if name_value then
local name_value = args[base_name]
if lowercase then name_value = mw.ustring.lower(name_value) end
local category = get_category(name_value, table_name)
if category then
if category then categories[category] = true end
elseif must_exist then
local index = 1
errors_msg[#errors_msg+1] = ' anno di pubblicazioneValore non valido per ' .. base_name▼
local flag_stop = false
end
local previous_present = true
local anomalyindex = false2
while true do
while not flag_stop do
local name name_value = args[base_name .. tostring(index)]
if args[name]name_value then
if lowercase then name_value = mw.ustring.lower(name_value) end ▼
local name_value = args[name]
local category = get_category(name_value, table_name) ▼
▲ if lowercase then name_value = mw.ustring.lower(name_value) end
if category then
▲ local category = get_category(name_value, table_name)
if category then categories[category] = true end
elseif must_exist then
if index > 2 and not previous_present then anomaly = true end
errors_msg[#errors_msg+1] = 'Valore non valido per ' .. base_name .. tostring(index)
previous_present = true
end
else
else
previous_present = false
break
end
index = index + 1
if not previous_present and index > max_index then flag_stop = true end
end
if args[base_name] and args[base_name .. '1'] then anomaly = true end
return categories , anomaly▼
if args[base_name .. '2'] and not (args[base_name] or args[base_name .. '1']) then anomaly = true end
▲ return categories, anomaly
end
----------------------------------------------------------------------------------
-- categorizza
----------------------------------------------------------------------------------
function p.categorie(frame)
local args = getArgs(frame, {parentOnly = not frame.args.debug})
local current_page = mw.title.getCurrentTitle()
local current_namespace = current_page.namespace
if current_namespace ~= 0 and not frame.args.debug then return '' end
local errors_msgcategories = {}
local categoriesanomaly = {}
categories. serie, anomaly.seriesviluppo = categorizza(args, ' seriesviluppo', ' serieaziende' , 3) ▼
categories.sviluppo, anomaly.sviluppopubblicazione = categorizza(args, 'sviluppopubblicazione', 'aziende', 6)
categories.pubblicazione, anomaly.pubblicazioneserie = categorizza(args, 'pubblicazioneserie', 'aziendeserie', 3)
if args.anno then
▲ categories.serie, anomaly.serie = categorizza(args, 'serie', 'serie', 3)
if args categories.anno then= {}
local anno = tonumber(args.anno)
categories.anno = {}
local if anno == tonumber(args.anno)nil then
errors_msg[#errors_msg+1] = 'anno di pubblicazione non valido'
if elseif anno =<= nil1970 then
▲ errors_msg[#errors_msg+1] = 'anno di pubblicazione non valido'
categories.anno['Videogiochi fino al 1970'] = true ▼
elseif anno <= 1970 then
else
▲ categories.anno['Videogiochi fino al 1970'] = true
categories.anno['Videogiochi del ' .. anno] = true ▼
else
end
▲ categories.anno['Videogiochi del ' .. anno] = true
end
categories.tema = categorizza(args, 'tema', 'tema', true)
categories.tema, anomaly categories.temagenere = categorizza(args, 'temagenere', 'temagenere', 3true, true)
categories.genere, anomaly categories.generepiattaforme = categorizza(args, 'generepiattaforma', 'generepiattaforma', 3false, true)
categories.piattaforme, anomaly.piattaformedistribuzione = categorizza(args, 'piattaformadistribuzionedigitale', 'piattaformadistribuzione', 19false, true)
categories.distribuzione, anomaly.distribuzione = categorizza(args, 'distribuzionedigitale', 'distribuzione', 3)
for cat_name,cat_list in pairs(categories) do
for cat_namecat,cat_list_ in pairs(categoriescat_list) do
for cat,_ in pairs(cat_list) do ▼
end
end
end
▲ for cat,_ in pairs( cat_listcat_dict) do
cat_list[#cat_list+1] = '[[Categoria:' .. cat .. ']]' ▼
for cat,_ in pairs(cat_dict) do
▲ cat_list[#cat_list+1] = '[[Categoria:' .. cat .. ']]'
end
cat_list[#cat_list+1] = '[[Categoria:Errori di compilazione del template Videogioco]]' ▼
if anomaly.sviluppo or anomaly.pubblicazione or anomaly.serie or anomaly.tema or anomaly.piattaforme or anomaly.distribuzione or anomaly.genere then
cat_list[#cat_list+1] = '[[Categoria:Errori di compilazione del template Videogioco - ordine parametri]]'
if #cat_list == 0 then return '' end ▼
end
return frame.args.debug and mw.text.nowiki(table.concat(cat_list)) or table.concat(cat_list) ▼
▲ cat_list[#cat_list+1] = '[[Categoria:Errori di compilazione del template Videogioco]]'
end
▲ if #cat_list == 0 then return '' end
▲ return frame.args.debug and mw.text.nowiki(table.concat(cat_list)) or table.concat(cat_list)
end
----------------------------------------------------------------------------------
-- Ritorna la configurazione della tabella per le aziende di videogiochi
----------------------------------------------------------------------------------
function p.aziendetabella_configurazione(frame)
local args = getArgs(frame)
local table_name = args[1]
if not(table_name) then return '' end
local reverse_alias = build_reverse_alias(table_name)
local root = mw.html.create('table')
root
:addClass('wikitable sortable')
:tag('tr')
:tag('th'):wikitext(table_name):done()
:tag('th'):wikitext('Alias'):done()
:tag('th'):wikitext('Categoria'):done()
for name, cat_name in pairs(cfg[table_name]) do
local name_code = '<nowiki>' .. name .. '</nowiki>'
local cat_code = '[[:Categoria:' .. cat_name .. ']]'
local alias_code = ' '
if reverse_alias[name] then
local alias_code = '<nowiki>' .. table.joinconcat(reverse_alias[name], '</nowiki>, <nowiki>') .. '</nowiki>'
end
root:tag('tr')
:tag('td'):wikitext(name_code):done()
:tag('td'):wikitext(alias_code):done()
:tag('td'):wikitext(cat_code):done()
end
return tostring(root)
end
return p
|