Modulo:Spr
Vai alla navigazione
Vai alla ricerca
Questo modulo non ha ancora un manuale. Creane uno!
-- Modulo per il Template Spr
local s = {}
-- stylua: ignore start
local tab = require('Modulo:Wikilib/tables')
local w = require('Modulo:Wikilib')
local gens = require('Modulo:Wikilib/gens')
local wdata = require('Modulo:Wikilib/data')
-- stylua: ignore end
--[[
Table che mantiene le associazioni tra il secondo parametro in lowercase e le
sigle dei giochi negli sprite
--]]
local gamesAbbr = {
verde = "verde",
["rosso e blu"] = "rb",
giallo = "gia",
oro = "or",
argento = "ar",
cristallo = "cr",
["rubino e zaffiro"] = "rz",
["rosso fuoco e verde foglia"] = "rfvf",
smeraldo = "sme",
["diamante e perla"] = "dp",
platino = "pt",
["heartgold e soulsilver"] = "hgss",
["nero e bianco"] = "nb",
["nero 2 e bianco 2"] = "nb2",
["x e y"] = "xy",
["rubino omega e zaffiro alpha"] = "roza",
["sole e luna"] = "sl",
["ultrasole e ultraluna"] = "usul",
["let's go pikachu e let's go eevee"] = "lgpe",
["spada e scudo"] = "spsc",
["diamante lucente e perla splendente"] = "dlps",
["leggende pokémon arceus"] = "lpa",
["scarlatto e violetto"] = "sv",
colosseum = "colo",
-- XD is not necessary
stadium = "stad",
["stadium 2"] = "stad2",
}
-- Alias per la table di cui sopra
tab.tableKeysAlias(gamesAbbr, {
"verde",
"rosso e blu",
"oro",
"cristallo",
"rubino e zaffiro",
"rosso fuoco e verde foglia",
"smeraldo",
"diamante e perla",
"heartgold e soulsilver",
"nero e bianco",
"nero 2 e bianco 2",
"x e y",
"rubino omega e zaffiro alpha",
"sole e luna",
"ultrasole e ultraluna",
"let's go pikachu e let's go eevee",
"spada e scudo",
"diamante lucente e perla splendente",
"leggende pokémon arceus",
"scarlatto e violetto",
"stadium 2",
}, {
{ "rosso e verde", "rv", "v" },
{ "rosso", "blu", "r", "b" },
{ "oro e argento", "oa" },
{ "c" },
{ "rubino", "zaffiro", "ru", "za", "z" },
{ "rosso fuoco", "verde foglia", "rf", "vf" },
{ "s" },
{ "diamante", "perla", "d", "p" },
{
"oro heartgold e argento soulsilver",
"heartgold",
"oro heartgold",
"soulsilver",
"argento soulsilver",
"hg",
"ss",
},
{ "nero", "bianco", "n", "bi" },
{ "nero 2", "bianco 2", "n2", "b2", "n2b2" },
{ "x", "y", "xy" },
{ "rubino omega", "zaffiro alpha", "ro", "za" },
{ "sole", "luna", "so", "l" },
{ "ultrasole", "ultraluna", "us", "ul" },
{
"let's go",
"let's go pikachu",
"let's go eevee",
"let's go pikachu e eevee",
"pikachu",
"eevee",
"pikachu e eevee",
"lgpe",
"pe",
},
{ "spada", "scudo", "sp", "sc" },
{ "diamante lucente", "perla splendente", "dl", "ps" },
{ "leggende arceus", "leggende pokemon arceus", "lpa" },
{ "scarlatto", "violetto", "sa", "vi" },
{ "stad 2" },
})
--[[
Table per convertire dalle sigle usate negli sprite a quelle usate nella
funzione getGen.games del modulo Wikilib/gens
--]]
local gamesAbbrGen = {
verde = "rb",
gia = "g",
stad = "st",
ar = "oa",
cr = "c",
stad2 = "st2",
sme = "s",
nb2 = "n2b2",
}
gamesAbbrGen["or"] = gamesAbbrGen.ar
--[[
Table usata per ordinare le parole che compongono la variante dello sprite.
L'ordine relativo di 'male' e 'female' è irrilevante, poiché non possono
coesistere.
--]]
local variantPiecesOrder = { "female", "male", "back", "shiny" }
-- Sigle per le varianti sesso/shiny/dietro degli sprite
local variants = {
male = "m",
female = "f",
shiny = "sh",
back = "d",
["male shiny"] = "msh",
["female shiny"] = "fsh",
["back shiny"] = "dsh",
["male back"] = "md",
["female back"] = "fd",
["male back shiny"] = "mdsh",
["female back shiny"] = "fdsh",
}
-- Table per i giochi che hanno gli sprite in .gif
local gifs =
{ "cr", "sme", "nb", "nb2", "xy", "roza", "sl", "usul", "lgpe", "spsc" }
-- Table per le dimensioni degli sprite
local sizes = {
stad = "|120px",
stad2 = "|120px",
xy = "|150px",
roza = "|150px",
sl = "|150px",
usul = "|150px",
lgpe = "|150px",
spsc = "|150px",
lpa = "|150px",
sv = "|150px",
}
-- Table per le stringhe da interpolare a seconda del gioco
local interpStrings = {
current = "[[File:${ndex}.png${size}]]",
md = "[[File:MDP${ndex}.png]]",
rb = "[[File:Spr${game}${variant}${ndex}.${ext}${size}]]",
}
-- Alias per la table di cui sopra
tab.tableKeysAlias(interpStrings, { "rb" }, {
{
"verde",
"gia",
"or",
"ar",
"oa",
"cr",
"oac",
"rz",
"rfvf",
"sme",
"dp",
"pt",
"hgss",
"nb",
"nb2",
"xy",
"roza",
"sl",
"usul",
"lgpe",
"spsc",
"dlps",
"lpa",
"sv",
"colo",
"xd",
"stad",
"stad2",
},
})
--[[
Ritorna gif se il gioco è presente nella table gifs, con l'unica eccezione
degli sprite shiny e restrostanti di smeraldo che sono in png. Negli altri
casi png.
--]]
local getExtension = function(game, variant)
if
game == "sme" and variant:find("[dsh]")
or not tab.search(gifs, game)
then
return "png"
end
return "gif"
end
--[[
Link agli sprite, chiamata da lua.
La variante è obbligatoria per i giochi dalla quarta generazione in poi,
mentre la dimensione è sempre opzionale.
La variante può contenere le parole 'female', 'male', 'back' e 'shiny' in
qualsiasi ordine e in qualsiasi numero, con la sola restrizione che 'male' e
'female' non possono coesistere.
--]]
s.sprLua = function(ndex, game, variant, size)
game = string.lower(game or "current")
variant = string.trim(variant or ""):lower()
game = gamesAbbr[game] or game
local gen = gens.getGen.game(gamesAbbrGen[game] or game)
--[[
I giochi di seconda generazione hanno 'oac' come gioco negli sprite
posteriori.
--]]
if gen and gen == 2 and variant:find("back") then
game = "oac"
end
variant = tab.unique(mw.text.split(variant, "%s+"))
table.sort(variant, function(a, b)
return tab.search(variantPiecesOrder, a)
< tab.search(variantPiecesOrder, b)
end)
--[[
Prima della quarta generazione non c'erano differenze di genere negli
sprite.
NB: la stringa 'male' è trovata sia in 'male' che in 'female'.
--]]
if gen and gen < 4 and variant[1]:find("male") then
-- Elimina il genere dalla variante
table.remove(variant, 1)
end
-- If the Pokémon is female only and the gen recent enough, add female
if
gen
and gen > 4
and tab.search(wdata.onlyFemales, tonumber(ndex))
and variant[1] == "male"
then
variant[1] = "female"
end
variant = table.concat(variant, " ")
return w.interp(interpStrings[game], {
game = game,
variant = variants[variant] or "",
ndex = ndex or "001",
ext = getExtension(game, variant),
size = size and "|" .. size or sizes[game] or "",
})
end
s.spr_lua = s.sprLua
--[[
Link agli sprite, chiamata da Wikicode (adapter per lua)
- Primo argomento: numero di dex nazionale, con eventuale sigla della forma
alternativa
- Secondo argomento: gioco
- Terzo argomento: variante (sesso, retro, shiny)
- Quarto argomento (opzionale): dimensione
Esempio: {{#invoke: Spr | spr | 479L | Platino | shiny back | 30px}}
--]]
s.spr = function(frame)
local p = w.trimAll(mw.clone(frame.args))
return s.sprLua(p[1], p[2], p[3], p[4])
end
s.Spr = s.spr
return s