Module:InputsHDBZ
Jump to navigation
Jump to search
Documentation for this module may be created at Module:InputsHDBZ/doc
local p = {}
-- List of valid inputs to be used for p.toIcons
local validInputs = {
-- Connectors
["~"] = "[[File:UNI_Input_Follow_up.png|x22px|~]]", -- Follow-up
["%+"] = "[[File:UNI_Input_Plus.png|x22px|+]]", -- Plus
["/"] = "[[File:UNI_Input_Or.png|x22px|/]]", -- Or
-- Motions
["360"] = "[[File:UNI_Input_360.png|x22px|360]]",
["41236"] = "[[File:UNI_Input_4.png|x22px|4]][[File:UNI_Input_1.png|x22px|1]][[File:UNI_Input_2.png|x22px|2]][[File:UNI_Input_3.png|x22px|3]][[File:UNI_Input_6.png|x22px|6]]",
["63214"] = "[[File:UNI_Input_6.png|x22px|6]][[File:UNI_Input_3.png|x22px|3]][[File:UNI_Input_2.png|x22px|2]][[File:UNI_Input_1.png|x22px|1]][[File:UNI_Input_4.png|x22px|4]]",
["632146"] = "[[File:UNI_Input_6.png|x22px|6]][[File:UNI_Input_3.png|x22px|3]][[File:UNI_Input_2.png|x22px|2]][[File:UNI_Input_1.png|x22px|1]][[File:UNI_Input_4.png|x22px|4]][[File:UNI_Input_6.png|x22px|6]]",
["236236"] = "[[File:UNI_Input_2.png|x22px|2]][[File:UNI_Input_3.png|x22px|3]][[File:UNI_Input_6.png|x22px|6]][[File:UNI_Input_2.png|x22px|2]][[File:UNI_Input_3.png|x22px|3]][[File:UNI_Input_6.png|x22px|6]]",
["214214"] = "[[File:UNI_Input_2.png|x22px|2]][[File:UNI_Input_1.png|x22px|1]][[File:UNI_Input_4.png|x22px|4]][[File:UNI_Input_2.png|x22px|2]][[File:UNI_Input_1.png|x22px|1]][[File:UNI_Input_4.png|x22px|4]]",
["236"] = "[[File:UNI_Input_2.png|x22px|2]][[File:UNI_Input_3.png|x22px|3]][[File:UNI_Input_6.png|x22px|6]]",
["214"] = "[[File:UNI_Input_2.png|x22px|2]][[File:UNI_Input_1.png|x22px|1]][[File:UNI_Input_4.png|x22px|4]]",
["623"] = "[[File:UNI_Input_6.png|x22px|6]][[File:UNI_Input_2.png|x22px|2]][[File:UNI_Input_3.png|x22px|3]]",
["421"] = "[[File:UNI_Input_4.png|x22px|4]][[File:UNI_Input_2.png|x22px|2]][[File:UNI_Input_1.png|x22px|1]]",
["22"] = "[[File:UNI_Input_2.png|x22px|2]][[File:UNI_Input_2.png|x22px|2]]",
["66"] = "[[File:UNI_Input_66.png|x22px|66]]",
["646"] = "[[File:UNI_Input_6.png|x22px|6]][[File:UNI_Input_4.png|x22px|4]][[File:UNI_Input_6.png|x22px|6]]",
["[4]6"] = "[[File:UNI_Input_Hold.png|x22px|]][[File:UNI_Input_4.png|x22px|[4]]][[File:UNI_Input_Then.png|x22px|]][[File:UNI_Input_6.png|x22px|6]]",
["[6]4"] = "[[File:UNI_Input_Hold.png|x22px|]][[File:UNI_Input_6.png|x22px|[6]]][[File:UNI_Input_Then.png|x22px|]][[File:UNI_Input_4.png|x22px|4]]",
["[2]8"] = "[[File:UNI_Input_Hold.png|x22px|]][[File:UNI_Input_2.png|x22px|[2]]][[File:UNI_Input_Then.png|x22px|]][[File:UNI_Input_8.png|x22px|8]]",
["[8]2"] = "[[File:UNI_Input_Hold.png|x22px|]][[File:UNI_Input_8.png|x22px|[8]]][[File:UNI_Input_Then.png|x22px|]][[File:UNI_Input_2.png|x22px|2]]",
-- Directions
["5"] = "", -- Neutral (No image needed)
["6"] = "[[File:UNI_Input_6.png|x22px|6]]", -- Forward
["3"] = "[[File:UNI_Input_3.png|x22px|3]]", -- Down-foward
["2"] = "[[File:UNI_Input_2.png|x22px|2]]", -- Down
["1"] = "[[File:UNI_Input_1.png|x22px|1]]", -- Down-back
["4"] = "[[File:UNI_Input_4.png|x22px|4]]", -- Back
["9"] = "[[File:UNI_Input_9.png|x22px|9]]", -- Up-Forward
["8"] = "[[File:UNI_Input_8.png|x22px|8]]", -- Up
["7"] = "[[File:UNI_Input_7.png|x22px|7]]", -- Up-back
-- Special Notation
["land"] = "[[File:UNI_Input_land.png|x22px|land]]", -- Land
["jc"] = "[[File:UNI_Input_jc.png |x22px|jc]]", -- Jump cancel
-- Prefixes
["d"] = "[[File:UNI_Input_Delay.png|x22px|d]]", -- Delay
["j"] = "[[File:UNI_Input_Jump.png |x22px|j]]", -- Jump
["w"] = "[[File:UNI_Input_Whiff.png|x22px|w]]", -- Whiff
-- Buttons with '5' in alt text
["5LK"] = "[[File:HDBZ_Input_LK.png|x22px|5LK]]",
["5MK"] = "[[File:HDBZ_Input_MK.png|x22px|5MK]]",
["5HK"] = "[[File:HDBZ_Input_HK.png|x22px|5HK]]",
["5LP"] = "[[File:HDBZ_Input_LP.png|x22px|5LP]]",
["5MP"] = "[[File:HDBZ_Input_MP.png|x22px|5MP]]",
["5HP"] = "[[File:HDBZ_Input_HP.png|x22px|5HP]]",
["5PP"] = "[[File:HDBZ_Input_PP.png|x22px|5PP]]",
["5KK"] = "[[File:HDBZ_Input_KK.png|x22px|5KK]]",
["5X"] = "[[File:UNI_Input_X.png|x22px|5X]]",
-- Buttons
["LK"] = "[[File:HDBZ_Input_LK.png |x22px|LK]]",
["MK"] = "[[File:HDBZ_Input_MK.png |x22px|MK]]",
["HK"] = "[[File:HDBZ_Input_HK.png |x22px|HK]]",
["LP"] = "[[File:HDBZ_Input_LP.png |x22px|LP]]",
["MP"] = "[[File:HDBZ_Input_MP.png |x22px|MP]]",
["HP"] = "[[File:HDBZ_Input_HP.png |x22px|HP]]",
["PP"] = "[[File:HDBZ_Input_PP.png |x22px|Any Punch]] + [[File:HDBZ_Input_PP.png |x22px|Any Punch]]",
["KK"] = "[[File:HDBZ_Input_KK.png |x22px|Any Kick]] + [[File:HDBZ_Input_KK.png |x22px|Any Kick]]",
["X"] = "[[File:UNI_Input_X.png |x22px|X]]",
["P"] = "[[File:HDBZ_Input_PP.png |x22px|Any Punch]]",
["K"] = "[[File:HDBZ_Input_KK.png |x22px|Any Kick]]",
-- Hold Buttons
["[LK]"] = "[[File:UNI_Input_Hold.png|x22px|]][[File:HDBZ_Input_LK.png|x22px|[LK]]]",
["[MK]"] = "[[File:UNI_Input_Hold.png|x22px|]][[File:HDBZ_Input_MK.png|x22px|[MK]]]",
["[HK]"] = "[[File:UNI_Input_Hold.png|x22px|]][[File:HDBZ_Input_HK.png|x22px|[HK]]]",
["[LP]"] = "[[File:UNI_Input_Hold.png|x22px|]][[File:HDBZ_Input_LP.png|x22px|[LP]]]",
["[MP]"] = "[[File:UNI_Input_Hold.png|x22px|]][[File:HDBZ_Input_MP.png|x22px|[MP]]]",
["[HP]"] = "[[File:UNI_Input_Hold.png|x22px|]][[File:HDBZ_Input_HP.png|x22px|[HP]]]",
["[PP]"] = "[[File:UNI_Input_Hold.png|x22px|]][[File:HDBZ_Input_PP.png|x22px|[Any Punch]]] + [[File:HDBZ_Input_PP.png|x22px|[Any Punch]]]",
["[KK]"] = "[[File:UNI_Input_Hold.png|x22px|]][[File:HDBZ_Input_KK.png|x22px|[Any Kick]]] + [[File:HDBZ_Input_KK.png|x22px|[Any Kick]]]",
["[X]"] = "[[File:UNI_Input_Hold.png|x22px|]][[File:UNI_Input_X.png|x22px|[X]]]",
["[P]"] = "[[File:UNI_Input_Hold.png|x22px|]][[File:HDBZ_Input_PP.png|x22px|[Any Punch]]]",
["[K]"] = "[[File:UNI_Input_Hold.png|x22px|]][[File:HDBZ_Input_KK.png|x22px|[Any Kick]]]",
-- Close Buttons
["cLK"] = "[[File:HDBZ_Input_LK.png |x22px|cLK]]",
["cMK"] = "[[File:HDBZ_Input_MK.png |x22px|cMK]]",
["cHK"] = "[[File:HDBZ_Input_HK.png |x22px|cHK]]",
["cLP"] = "[[File:HDBZ_Input_LP.png |x22px|cLP]]",
["cMP"] = "[[File:HDBZ_Input_MP.png |x22px|cMP]]",
["cHP"] = "[[File:HDBZ_Input_HP.png |x22px|cHP]]",
["cPP"] = "[[File:HDBZ_Input_PP.png |x22px|Close Any Punch]] + [[File:HDBZ_Input_KK.png|x22px|[Close Any Punch]]]",
["cKK"] = "[[File:HDBZ_Input_KK.png |x22px|Close Any Kick]] + [[File:HDBZ_Input_KK.png|x22px|[Close Any Kick]]]",
["cX"] = "[[File:UNI_Input_X.png |x22px|cX]]",
["cP"] = "[[File:HDBZ_Input_PP.png |x22px|Close Any Punch]]",
["cK"] = "[[File:HDBZ_Input_KK.png |x22px|Close Any Kick]]",
-- Release Buttons
["]LK["] = "[[File:UNI_Input_Release.png|x22px|]][[File:HDBZ_Input_LK.png|x22px|]LK[]]",
["]MK["] = "[[File:UNI_Input_Release.png|x22px|]][[File:HDBZ_Input_MK.png|x22px|]MK[]]",
["]HK["] = "[[File:UNI_Input_Release.png|x22px|]][[File:HDBZ_Input_HK.png|x22px|]HK[]]",
["]LP["] = "[[File:UNI_Input_Release.png|x22px|]][[File:HDBZ_Input_LP.png|x22px|]LP[]]",
["]MP["] = "[[File:UNI_Input_Release.png|x22px|]][[File:HDBZ_Input_MP.png|x22px|]MP[]]",
["]HP["] = "[[File:UNI_Input_Release.png|x22px|]][[File:HDBZ_Input_HP.png|x22px|]HP[]]",
["]PP["] = "[[File:UNI_Input_Release.png|x22px|]][[File:HDBZ_Input_PP.png|x22px|]Any Punch[]] + [[File:HDBZ_Input_PP.png|x22px|]Any Punch[]]",
["]KK["] = "[[File:UNI_Input_Release.png|x22px|]][[File:HDBZ_Input_KK.png|x22px|]Any Kick[]] + [[File:HDBZ_Input_KK.png|x22px|]Any Kick[]]",
["]X["] = "[[File:UNI_Input_Release.png|x22px|]][[File:UNI_Input_Hold.png|x22px|]X[]]",
["]P["] = "[[File:UNI_Input_Release.png|x22px|]][[File:HDBZ_Input_PP.png|x22px|]Any Punch[]]",
["]K["] = "[[File:UNI_Input_Release.png|x22px|]][[File:HDBZ_Input_KK.png|x22px|]Any Kick[]]",
[" "] = "[[File:UNI_Input_next.png|x22px|>]]" -- Next Input
}
-- Change a string of characters to a list of images in wikitext format (reference above table)
function p.toIcons(frame)
-- Get string
local inputText = frame.args[1]
local ret = ""
-- Check if current inputText is matching with any validInputs
local checkInputText = type(validInputs[inputText]) == "function" and validInputs[inputText]() or validInputs[inputText] or nil
-- If it doesn't match, then keep checking down
if checkInputText==nil then
-- If text contains spaces, split it down
if string.find(inputText, " ") then
local inputTextAsList = splitKeepDelimiter(inputText, " ")
for i,v in ipairs(inputTextAsList) do
ret = ret..p.toIcons({args={v}})
end
-- If text contains '~', split it down
elseif string.find(inputText,"~") then
local inputTextAsList = splitKeepDelimiter(inputText, "~")
for i,v in ipairs(inputTextAsList) do
ret = ret..p.toIcons({args={v}})
end
-- If text contains '+', split it down
elseif string.find(inputText,"%+") then
local inputTextAsList = splitKeepDelimiter(inputText, "%+")
for i,v in ipairs(inputTextAsList) do
ret = ret..p.toIcons({args={v}})
end
-- If text contains '/', split it down
elseif string.find(inputText,"/") then
local inputTextAsList = splitKeepDelimiter(inputText, "/")
for i,v in ipairs(inputTextAsList) do
ret = ret..p.toIcons({args={v}})
end
-- If text contain a digit then a letter, then split at that point
elseif string.find(inputText,"%d%a") then
local frontEnd,backEnd = string.find(inputText,"%d%a")
ret = ret..p.toIcons({args={string.sub(inputText,1,frontEnd)}})..p.toIcons({args={string.sub(inputText,backEnd)}})
-- If text contain a digit then a left square bracket, then split at that point
elseif string.find(inputText,"%d%[") then
local frontEnd,backEnd = string.find(inputText,"%d%[")
ret = ret..p.toIcons({args={string.sub(inputText,1,frontEnd)}})..p.toIcons({args={string.sub(inputText,backEnd)}})
-- If text contain a digit then a right square bracket and is not already surrounded, then split at that point
elseif string.find(inputText,"%d%]") and not string.find(inputText,"%[%d%]") then
local frontEnd,backEnd = string.find(inputText,"%d%]")
ret = ret..p.toIcons({args={string.sub(inputText,1,frontEnd)}})..p.toIcons({args={string.sub(inputText,backEnd)}})
-- If text starts with d, j, w, A, B, C, D, then split after that first character
elseif string.sub(inputText,1,1) == "d" or
string.sub(inputText,1,1) == "j" or
string.sub(inputText,1,1) == "w" or
string.sub(inputText,1,1) == "A" or
string.sub(inputText,1,1) == "B" or
string.sub(inputText,1,1) == "C" or
string.sub(inputText,1,1) == "D" then
ret = ret..p.toIcons({args={string.sub(inputText,1,1)}})..p.toIcons({args={string.sub(inputText,2)}})
-- Otherwise, return the text in parenthesis (Which I don't want to happen, because this would look bad if parsed poorly!!!)
else
ret = "("..inputText..")"
end
else
ret = checkInputText
end
-- Return the result
return ret
end
-- Split string 's' at every 'delimiter' into an array
function splitKeepDelimiter(s, delimiter)
-- Array to return
local result = {}
-- Boolean to check if this is the firstSplit (only applicable when keeping delimiter)
local firstSplit = true
-- Iterate through the string finding every section split with delimiter
for match in (s..delimiter):gmatch("(.-)"..delimiter) do
-- Don't add the delimiter until after the first split
if firstSplit then
firstSplit = false
else
table.insert(result, delimiter)
end
-- Remove a '%' character if it's leftover from a delimiter
local matchWithEscapedRemoved = match
if string.find(string.sub(match,-1, string.len(match)),"%%") then
matchWithEscapedRemoved = string.sub(match, 1, -2)
end
-- Add the match to the result array
table.insert(result, matchWithEscapedRemoved)
end
-- Return the result
return result
end
return p