Vai al contenuto

Modulo:Categoria sportivi

Questa pagina è protetta dallo spostamento
Questa pagina è protetta
Da Wikipedia, l'enciclopedia libera.

Questo modulo serve a generare il titolo di una categoria di sportivi (giocatori o allenatori).

Esempi d'uso

Come si può notare dagli esempi seguenti, il modulo tenta di disambiguare la categoria nel modo più specifico possibile. Quando le categorie disambiguate non esistono, restituisce il titolo base della categoria.

Codice Risultato (con wikilink)
{{#invoke:categoria sportivi|main|G|calcio|della Juventus F.C.|M}} Categoria:Calciatori della Juventus F.C.
{{#invoke:categoria sportivi|main|G|football americano|dei New York Giants}} Categoria:Giocatori dei New York Giants
{{#invoke:categoria sportivi|main|G|baseball|dei New York Giants}} Categoria:Giocatori dei New York Giants (baseball)
{{#invoke:categoria sportivi|main|G|calcio a 5|della Lupe Calcio a 5|F}} Categoria:Giocatrici della Lupe Calcio a 5
{{#invoke:categoria sportivi|main|G|hockey su ghiaccio|della Società di Prova}} Categoria:Hockeisti su ghiaccio della Società di Prova
{{#invoke:categoria sportivi|main|G|calcio a 5|della Società di Prova|F}} Categoria:Giocatrici della Società di Prova
{{#invoke:categoria sportivi|main|A|calcio|dell'A.E.P. Īraklīs 1908}} Categoria:Allenatori dell'A.E.P. Īraklīs 1908
{{#invoke:categoria sportivi|main|A|basket|dell'A.E.P. Īraklīs 1908}} Categoria:Allenatori dell'A.E.P. Īraklīs 1908 (pallacanestro maschile)
{{#invoke:categoria sportivi|main|A|pallacanestro|della Pallacanestro Palestrina}} Categoria:Allenatori della Pallacanestro Palestrina
{{#invoke:categoria sportivi|main|A|pallacanestro|dell'A.O. Aigaleō}} Categoria:Allenatori dell'A.O. Aigaleō (pallacanestro)
{{#invoke:categoria sportivi|main|A|calcio|della Pallavolo Femminile Matera|F}} Categoria:Allenatori della Pallavolo Femminile Matera
{{#invoke:categoria sportivi|main|A|calcio|dell'A.S. Nancy-Lorraine|F}} Categoria:Allenatori dell'A.S. Nancy-Lorraine (femminile)
{{#invoke:categoria sportivi|main|A|calcio|dell'I.L. Sandviken|F}} Categoria:Allenatori dell'I.L. Sandviken (calcio femminile)
{{#invoke:categoria sportivi|main|A|rugby a 15|della Società di Prova}} Categoria:Allenatori della Società di Prova
{{#invoke:categoria sportivi|main|S|calcio|dell'A.C. Milan|F}} Categoria:Stagioni dell'A.C. Milan (femminile)

--[[
Questo modulo serve per generare il titolo di una categoria per squadra sportiva (giocatori, allenatori, stagioni). Viene usato dal Template:Band sport.
]]
local p = {}

local sport_aliases = {
	['basket'] = 'pallacanestro',
	['boxe'] = 'pugilato',
	['rugby a XIII'] = 'rugby a 13',
	['rugby a XV'] = 'rugby a 15',
	['rugby league'] = 'rugby a 13',
	['rugby union'] = 'rugby a 15',
	['volley'] = 'pallavolo'
}

local players_names = {
	['automobilismo'] = {['M'] = 'Piloti', ['F'] = 'Piloti'},
	['bob'] = {['M'] = 'Bobbisti', ['F'] = 'Bobbiste'},
	['calcio'] = {['M'] = 'Calciatori', ['F'] = 'Calciatrici'},
	['canottaggio'] = {['M'] = 'Canottieri', ['F'] = 'Canottiere'},
	['ginnastica'] = {['M'] = 'Ginnasti', ['F'] = 'Ginnaste'},
	['hockey in-line'] = {['M'] = 'Hockeisti in-line', ['F'] = 'Hockeiste in-line'},
	['hockey su ghiaccio'] = {['M'] = 'Hockeisti su ghiaccio', ['F'] = 'Hockeiste su ghiaccio'},
	['hockey su pista'] = {['M'] = 'Hockeisti su pista', ['F'] = 'Hockeiste su pista'},
	['hockey su prato'] = {['M'] = 'Hockeisti su prato', ['F'] = 'Hockeiste su prato'},
	['hockey su slittino'] = {['M'] = 'Hockeisti su slittino', ['F'] = 'Hockeiste su slittino'},
	['nuoto'] = {['M'] = 'Nuotatori', ['F'] = 'Nuotatrici'},
	['pallacanestro'] = {['M'] = 'Cestisti', ['F'] = 'Cestiste'},
	['pallanuoto'] = {['M'] = 'Pallanuotisti', ['F'] = 'Pallanuotiste'},
	['pallavolo'] = {['M'] = 'Pallavolisti', ['F'] = 'Pallavoliste'},
	['pugilato'] = {['M'] = 'Pugili', ['F'] = 'Pugilesse'},
	['rugby a 13'] = {['M'] = 'Rugbisti a 13', ['F'] = 'Rugbiste a 13'},
	['rugby a 15'] = {['M'] = 'Rugbisti a 15', ['F'] = 'Rugbiste a 15'},
	['tuffi'] = {['M'] = 'Tuffatori', ['F'] = 'Tuffatrici'},
	['vela'] = {['M'] = 'Velisti', ['F'] = 'Veliste'}
}

local function page_exists(target, namespace)
	return mw.title.makeTitle( namespace or '', target ).exists
end

local function disambiguate(title, disambiguator)
	return string.format('%s (%s)', title, disambiguator)
end

--[[
main

Questa funzione restituisce la categoria di sportivi a partire da:
*posizione ("A", "G", "S" rispettivamente per allenatore, giocatore, stagione);
*sport (es. "calcio");
*suffisso relativo alla società di appartenenza (es. "della Juventus F.C.")
*sesso dello sportivo.

Uso:
{{#invoke:categoria sportivi|main|pos|sport|società|sesso}}
]]
function p.main( frame )
	local pos = frame.args[1]:upper()			-- 'A' o 'G'
	local sport = frame.args[2]
	local club = frame.args[3]
	local sex = (frame.args[4] or ''):upper()	-- 'M' o 'F'
	
	sport = sport_aliases[sport] or sport
	if sex ~= 'F' then sex = 'M' end
	
	local subject = pos == 'A' and 'Allenatori'
				or pos == 'G' and (sex == 'F' and 'Giocatrici' or 'Giocatori')
				or pos == 'S' and 'Stagioni'
	local base_category = string.format('Categoria:%s %s', subject, club)
	
	-- cerca eventuali disambiguazioni per la categoria
	local candidate_categories = {}
	local function add_candidate(x) table.insert(candidate_categories,x) end
	if pos == 'G' then
		if players_names[sport] then
			return 'Categoria:' .. players_names[sport][sex] .. ' ' .. club
		else
			add_candidate(disambiguate(base_category, sport))
		end
	elseif pos == 'A' or pos == 'S' then
		local sexAdj = sex == 'F' and 'femminile' or sex == 'M' and 'maschile'
		add_candidate(disambiguate(base_category, sport .. ' ' .. sexAdj))
		add_candidate(disambiguate(base_category, sexAdj))
		add_candidate(disambiguate(base_category, sport))
	end
	
	-- se esiste una delle categorie disambiguate (l'ordine in cui sono state aggiunte è importante!)
	-- allora ritorna quest'ultima
	for _, candidate in ipairs(candidate_categories) do
		if page_exists(candidate) then
			return candidate
		end
	end
	
	-- altrimenti restitituisci il titolo base della categoria (senza disambiguazione)
	return base_category
end

return p