Modulo Lua di supporto a Modulo:Bio. Contiene la configurazione dei parametri del modulo.


local config = {}

--[[
Configurazione dei parametri del Modulo:Bio.
Definisce quali sono gli unici parametri accettati.
]]
config.params = {
	["Titolo"] = true,
	["Nome"] = true,
	["Cognome"] = true,
	["Soprannome"] = true,
	["PostSoprannome"] = true,
	["Pseudonimo"] = true,
	["PostPseudonimo"] = true,
	["PostCognome"] = true,
	["PostCognomeVirgola"] = true,
	["ForzaOrdinamento"] = true,
	["PreData"] = true,
	["Sesso"] = true,
	["LuogoNascita"] = true,
	["LuogoNascitaLink"] = true,
	["LuogoNascitaAlt"] = true,
	["GiornoMeseNascita"] = true,
	["AnnoNascita"] = true,
	["NoteNascita"] = true,
	["LuogoMorte"] = true,
	["LuogoMorteLink"] = true,
	["LuogoMorteAlt"] = true,
	["GiornoMeseMorte"] = true,
	["AnnoMorte"] = true,
	["NoteMorte"] = true,
	["Floruit"] = true,
	["PreAttività"] = true,
	["Epoca"] = true,
	["Epoca2"] = true,
	["Attività"] = true,
	["Attività2"] = true,
	["Attività3"] = true,
	["AttivitàAltre"] = true,
	["Nazionalità"] = true,
	["NazionalitàNaturalizzato"] = true,
	["Cittadinanza"] = true,
	["PostNazionalità"] = true,
	["Categorie"] = true,
	["FineIncipit"] = true,
	["Punto"] = true,
	["Immagine"] = true,
	["Didascalia"] = true,
	["Didascalia2"] = true,
	["DimImmagine"] = true,
	["CognomePrima"] = true,
	["Debug"] = true
}

--[[
Configurazione dei controlli effettuati sui parametri (ogni parametro può averne più di uno).
Ogni controllo è configurabile tramite:
* "param ": il parametro su cui effettuare il controllo
* "valuetest": il controllo da effettuare sul valore del parametro, può valere:
  * un pattern Lua: è accettato il valore se soddisfa il pattern Lua descritto
  * una funzione Lua: funzione Lua che esegue il controllo di validità,
    da usare quando i pattern Lua non sono sufficienti o per controlli più complessi.
* "errmsg": il messaggio di errore da visualizzare, è facoltativo.
  Se assente la voce sarà comunque categorizzata tra le voci con errori.
Nel caso della funzione, deve accettare due parametri: il valore del parametro e
la tabella con gli altri argomenti (per fare controlli in relazione agli altri parametri).
Deve ritornare true se il valore del parametro è valido altrimenti false.
Esempio: scommentando la seguente funzione checkNome e aggiungendo la riga:
	{ param = "Nome", valuetest = checkNome },
saranno categorizzate come errore la pagine con Nome contenente "soprannominato" o "al secolo".
Inoltre non verrà visualizzato il messaggio di errore (errmsg è assente).
]]
--local function checkNome(value, args)
--	return value:find("soprannominato") == nil and
--		   value:find("al secolo") == nil
--end

local function checkEpoca(value, args)
	return mw.loadData("Modulo:Bio/Configurazione").epoche[value] ~= nil
end

local function checkLen1000(value, args)
	-- ignora eventuali tag span, solitamente generati da template inclusi
	return value:gsub("<span.+</span>", ""):len() < 1000
end

local function checkQuestionMark(value, args)
	-- non è valida una squenza di uno o più punti interrogativi
	return not value:match("^[%?]+$")
end

local function checkEllipsis(value, args)
	return value ~= "..."
end

local function checkPeriod(value, args)
	return not value:match("^%.")
end

-- Applicato su AnnoMorte per verificare che in presenza di AnnoNascita sia uguale o posteriore
local function checkMorteDopoNascita(value, args)
	local annoNascita, annoMorte
	local ret = true
	if args["AnnoNascita"] then
		annoNascita = tonumber(args["AnnoNascita"])
		annoMorte = tonumber(value)
		if annoNascita and annoMorte then
			ret = annoMorte >= annoNascita
		end
	end
	return ret
end

-- Per controllare la dipendenza da un altro parametro
local function hasParam(param)
	return function(value, args)
		return args[param] ~= nil
	end	
end

-- Per controllare il conflitto con un altro parametro
local function unusedParam(param)
	return function(value, args)
		return args[param] == nil
	end	
end

-- Per controllare che un altro parametro abbia valore diverso
local function diffParam(param)
	return function(value, args)
		return value ~= args[param]
	end	
end

config.validators = {
	{ param = "Sesso", valuetest = "^[MF]$", errmsg = "il valore del parametro Sesso non è valido, accettato solo 'M' o 'F'" },
	{ param = "Epoca", valuetest = checkEpoca, errmsg = "il valore del parametro Epoca non è valido" },
	{ param = "Epoca2", valuetest = checkEpoca, errmsg = "il valore del parametro Epoca2 non è valido" },
	{ param = "Epoca2", valuetest = hasParam("Epoca"), errmsg = "Epoca2 è usato ma Epoca è vuoto" },
	{ param = "Epoca2", valuetest = diffParam("Epoca"), errmsg = "Epoca2 ha lo stesso valore di Epoca" },
	{ param = "Punto", valuetest = "^no$", errmsg = "il valore del parametro Punto non è valido, accettato solo 'no'" },
	{ param = "DimImmagine", valuetest = "^%d+$", errmsg = "il valore del parametro DimImmagine non è valido, inserire la dimensione senza px" },
	{ param = "Categorie", valuetest = "^no$", errmsg = "il valore del parametro Categorie non è valido, accettato solo 'no'" },
	{ param = "PostNazionalità", valuetest = checkPeriod, errmsg = "PostNazionalità inizia con il punto. Spostarne il contenuto alla riga successiva dopo la chiusura del template Bio"  },
	{ param = "PostNazionalità", valuetest = checkLen1000 },
	{ param = "FineIncipit", valuetest = checkLen1000 },
	{ param = "PostCognomeVirgola", valuetest = unusedParam("PostCognome"), errmsg = "PostCognome e PostCognomeVirgola non possono essere utilizzati insieme" },
	{ param = "AnnoNascita", valuetest = checkQuestionMark, errmsg = "il valore in AnnoNascita non è valido: se sconosciuto va lasciato vuoto e il template visualizzerà i punti di sospensione" },
	{ param = "AnnoNascita", valuetest = checkEllipsis, errmsg = "il valore '...' in AnnoNascita non è valido: se sconosciuto va lasciato vuoto e il template visualizzerà i punti di sospensione" },
	{ param = "AnnoMorte", valuetest = checkEllipsis, errmsg = "il valore '...' in AnnoMorte non è valido: se sconosciuto va utilizzato '?' e il template visualizzerà i punti di sospensione" },
	{ param = "AnnoMorte", valuetest = checkMorteDopoNascita, errmsg = "il valore del parametro AnnoMorte è anteriore ad AnnoNascita" },
	{ param = "LuogoNascitaLink", valuetest = hasParam("LuogoNascita"), errmsg = "LuogoNascitaLink è usato ma LuogoNascita è vuoto" },
	{ param = "LuogoNascitaLink", valuetest = diffParam("LuogoNascita"), errmsg = "LuogoNascitaLink va usato solo se diverso da LuogoNascita" },
	{ param = "LuogoNascitaAlt", valuetest = hasParam("LuogoNascita"), errmsg = "LuogoNascitaAlt è usato ma LuogoNascita è vuoto" },
	{ param = "LuogoMorteLink", valuetest = hasParam("LuogoMorte"), errmsg = "LuogoMorteLink è usato ma LuogoMorte è vuoto" },
	{ param = "LuogoMorteLink", valuetest = diffParam("LuogoMorte"), errmsg = "LuogoMorteLink va usato solo se diverso da LuogoMorte" },
	{ param = "LuogoMorteAlt", valuetest = hasParam("LuogoMorte"), errmsg = "LuogoMorteAlt è usato ma LuogoMorte è vuoto" },
	{ param = "LuogoMorte", valuetest = hasParam("AnnoMorte"), errmsg = "LuogoMorte è usato ma AnnoMorte è vuoto" },
	{ param = "GiornoMeseMorte", valuetest = hasParam("AnnoMorte"), errmsg = "GiornoMeseMorte è usato ma AnnoMorte è vuoto" },
	{ param = "Floruit", valuetest = unusedParam("AnnoNascita"), errmsg = "AnnoNascita e Floruit non possono essere utilizzati insieme" },
	{ param = "Attività3", valuetest = hasParam("Attività2"), errmsg = "Attività3 è usato ma Attività2 è vuoto" }
}

return config