Differenze tra le versioni di "Modulo:Wikilib/forms"

Added utility function
(Refactoring of getlink *** sovrascritto il testo esistente ***)
(Added utility function)
 
local f = {}
local tab = require('Modulo:Wikilib/tables') -- luacheck: no unused
local genUtil = require('Modulo:Wikilib/gens')
local alt = mw.loadData('Modulo:AltForms/data')
--]]
f.allFormsData = function()
local all = table.cloneLoadData(alt)
local useless = require('Modulo:UselessForms/data')
 
--[[
No need for ipairs because integer keys
are used only to index Pokémon by ndex
--]]
for k, v in pairs(useless) do
if all[k] then
 
--[[
This Pokémon is in both useless and altForms
Right now only Pikachu
--]]
all[k] = table.recursiveMerge(all[k], v)
 
--[[
gamesOrder is a pain in the neck
right now, with Pikachu, it is possible to
simply concatenate the two tables and remove
the second 'base'
--]]
all[k].gamesOrder = table.noDuplicates(table.merge(
all[k].gamesOrder, v.gamesOrder))
v.gamesOrder
))
 
else
all[k] = v
end
end
 
return all
end
 
f.allformsdata, f.all_forms_data = f.allFormsData, f.allFormsData
f.allFormsData, f.allFormsData
 
--[[
--]]
f.loadUseless = function(merge)
if merge then
alt = f.allFormsData()
else
alt = mw.loadData('Modulo:UselessForms/data')
end
end
 
--]]
f.getabbr = function(name, extform)
if alt[tonumber(name) or name:lower()] then
extform = string.lower(extform or '')
name = tonumber(name) or name:lower()
return alt[name].ext[extform] or 'base'
end
return name:match('(%u+%a*)$') or 'base'
end
 
--]]
f.getnameabbr = function(name, extform)
if alt[tonumber(name) or name:lower()] then
extform = string.lower(extform or '')
name = tonumber(name) or name:lower()
return name, alt[name].ext[extform] or 'base'
end
local poke, abbr = name:match("^([%lé%-♂♀'%s%.&#;%d]+)(%u*%a*)$")
return tonumber(poke) or poke or '', abbr or 'base'
end
 
--]]
f.getlink = function(poke, black, extform)
black = black and 'black' or ''
local poke, extform = f.getnameabbr(poke, extform)
if extform == '' or extform == 'base' then
return ''
end
return alt[poke] and alt[poke][black .. 'links'][extform] or ''
end
 
--]]
f.getNdexForm = function(poke)
poke = string.lower(poke or '')
if not alt[poke] then
return 0
end
for k, tab in pairs(alt) do
if type(k) == 'number' and tab == alt[poke] then
return k
end
end
end
 
-- Converte la sigla vuota in 'base'
f.toBase = function(abbr)
return abbr == '' and 'base' or abbr
end
 
-- Converte la sigla 'base' nella sigla vuota
f.toEmptyAbbr = function(abbr)
return abbr == 'base' and '' or abbr
end
 
--]]
f.hasMega = function(poke)
poke = string.lower(poke or '')
if alt.mega then
return table.search(alt.mega, poke) or return table.search(alt.megaxymega, poke)
or table.search(alt.archeomegaxy, poke)
or table.search(alt.archeo, poke)
end
end
return false
end
 
--]]
f.hasAlola = function(poke)
poke = string.lower(poke or '')
if alt.alola then
return table.search(alt.alola, poke)
end
return false
end
 
--]]
f.formSpan = function(poke, abbr)
return alt[poke].since[abbr], (
alt[poke]['until']
and alt[poke]['until'][abbr]
or genUtil.latest.game
)
end
 
f.formspan, f.form_span = f.formSpan, f.formSpan
 
--[[
 
Parse an argument that should be a Pokémon name or ndex followed by a form
abbreviation so that it can be used to index a data module.
If name is a Pokémon name (not an ndex) it should be lowercase but the first
letter, that can be both upper or lower case.
 
--]]
f.nameToDataindex = function(name)
local trueName, extform = f.getnameabbr(string.fl(string.trim(name)))
-- If the Pokémon isn't in altForms/data, should return the plain name
-- The return when extform == 'base' settles problems with number and concat
if extform == 'base' or not alt[tonumber(trueName) or trueName] then
return trueName
end
return trueName .. f.toEmptyAbbr(extform)
end
 
return f