Module:Characters
From Liquipedia Smash Wiki
local p = {}
local Array = require('Module:Array')
local Game = require('Module:Game')
local Lua = require('Module:Lua')
local Namespace = require('Module:Namespace')
local String = require('Module:StringUtils')
local Variables = require('Module:Variables')
local charList = Lua.import('Module:CharacterStandardization', { loadData = true })
local gameList = Lua.import('Module:GameName/data', { loadData = true }).shortname
function p.standardize(frame)
return p._standardize(frame.args[1])
end
function p.standardizeArray(frame)
if not (frame.args and frame.args[1]) then
return ''
end
local input = Array.parseCommaSeparatedString(frame.args[1])
local output = ''
if input[1] then
output = ''
for i=1, #input do
if String.isNotEmpty(input[i]) then
output = output .. ',' .. (p._standardize(input[i]) or '')
end
end
return output
else
return ''
end
end
function p._standardize(charInput)
if String.isNotEmpty(charInput) then
local char = charInput
-- remove whitespace
char = String.trim(char)
-- unstrip nowiki strip markers
char = mw.text.unstripNoWiki(char)
-- remove spaces
char = char:gsub("%W+", "")
-- lowercase
char = char:lower()
char = charList[char]
if char then
return char
else
mw.log('Unknown character abbreviation in standardize: ' .. charInput)
return 'Unknown'
end
else
return
end
end
function p.GetIcon(CharacterIcons, character, large)
if (character == nil) then
return ''
end
-- Standardize the character name first
local stdCharName = p._standardize(character)
-- Then try to look it up
local icon = CharacterIcons[stdCharName]
if (icon ~= nil) then
-- Size
if (large) then
icon = string.gsub(icon, '18x18px', '25x25px')
end
return icon
else
if character and stdCharName then
mw.log('GetIcon failed: ' .. character, 'Standardized: ' .. stdCharName)
elseif character then
mw.log('GetIcon failed: ' .. character, 'Standardized: Not found')
else
mw.log('GetIcon failed: Nil, Standardized: Not found')
end
return CharacterIcons['Unknown'] .. ' [[Category:Pages with unknown character icons]]'
end
end
function p.GetIconAndNameLua(icon, game)
return p.GetIconAndName{icon, game}
end
function p.GetIconAndName(frame)
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
local CharacterIcons
-- Argument 1 is character, argument 2 is game
-- If a slash is used, what follows denotes the game (e.g. fox/melee)
if args[2] then
args.game = args[2]
elseif args[1] and string.find(args[1], '/', 1, true) then
local index = string.find(args[1], '/', 1, true)
args.game = string.sub( args[1], index+1, -1 )
args[1] = string.sub( args[1], 1, index-1 )
end
-- If no game is set, look for a variable
args.game = args.game or Variables.varDefault('tournament_game')
args.game = Game.toIdentifier{game = args.game}
CharacterIcons = Lua.import('Module:CharacterIcons/' .. string.lower(args.game), { loadData = true })
return p._GetIconAndName(CharacterIcons, args[1], args.large or false)
end
function p._GetIconAndName(CharacterIcons, character, large)
if (character == nil) then
return ''
end
-- Standardize the character name first
local stdCharName = p._standardize(character)
-- Then try to look it up
local icon = p.GetIcon(CharacterIcons, stdCharName, large)
-- Requested "Unknown" in the first place
if character == 'Unknown' then
return CharacterIcons['Unknown']
-- Valid character requested
elseif (stdCharName and stdCharName ~= 'Unknown') then
icon = string.gsub(icon, '|link=]]', '|link=|' .. stdCharName .. ']]')
return icon
-- Fallback
else
mw.log('_GetIconAndName failed: ' .. character)
return CharacterIcons['Unknown'] .. ' [[Category:Pages with unknown character icons]]'
end
end
function p.InfoboxCharacter(frame)
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
local CharacterIcons
if args[2] then
args.game = args[2]
end
args.game = args.game or Variables.varDefault('tournament_game')
args.game = Game.toIdentifier{game = args.game}
CharacterIcons = Lua.import('Module:CharacterIcons/' .. args.game, { loadData = true })
return p._InfoboxCharacter(CharacterIcons, args[1], args.game)
end
function p._InfoboxCharacter(CharacterIcons, character, game)
if (character == nil) then
return ''
end
local stdCharName = p._standardize(character)
local icon = p.GetIcon(CharacterIcons, stdCharName)
-- Only do this in mainspace
if Namespace.isMain() then
if (stdCharName ~= 'Unknown') then
return icon .. ' ' .. stdCharName .. '[[Category:' .. stdCharName .. ' Players ' .. '(' .. gameList[tostring(game)] .. ')' .. ']]'
else
mw.log('_InfoboxCharacter failed: ' .. character, 'Standardized: ' .. stdCharName)
return CharacterIcons['Unknown'] .. ' [[Category:Pages with unknown character icons]]'
end
else
if (stdCharName ~= 'Unknown') then
return icon .. ' ' .. stdCharName
else
mw.log('_InfoboxCharacter failed: ' .. character, 'Standardized: ' .. stdCharName)
return CharacterIcons['Unknown'] .. ' [[Category:Pages with unknown character icons]]'
end
end
end
return p