Module:InputsHDBZ: Difference between revisions

From Mizuumi Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
Line 48: Line 48:
["d"] = "[[File:UNI_Input_Delay.png|x22px|d]]", -- Delay
["d"] = "[[File:UNI_Input_Delay.png|x22px|d]]", -- Delay
["j"] = "[[File:UNI_Input_Jump.png |x22px|j]]", -- Jump
["j"] = "[[File:UNI_Input_Jump.png |x22px|j]]", -- Jump
["J"] = "[[File:UNI_Input_Jump.png |x22px|j]]", -- Jump
["j."] = "[[File:UNI_Input_Jump.png |x22px|j]]", -- Jump
["J."] = "[[File:UNI_Input_Jump.png |x22px|j]]", -- Jump
["w"] = "[[File:UNI_Input_Whiff.png|x22px|w]]", -- Whiff
["w"] = "[[File:UNI_Input_Whiff.png|x22px|w]]", -- Whiff

Latest revision as of 15:42, 16 June 2024

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
	["J"]	= "[[File:UNI_Input_Jump.png |x22px|j]]", -- Jump
	["j."]	= "[[File:UNI_Input_Jump.png |x22px|j]]", -- Jump
	["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