Module:Key press

-- This module implements.

local kbdPrefix = ' '

local kbdSuffix = ' '

local keyText = { ['shiftqueue'] = '⇧ Shift-queue ', ['double'] = '↓↓ Double-tapping ', ['double-tapping'] 	= '↓↓ Double-tapping ', ['autoattack/never'] = '◎ Never ', ['autoattack/standard'] = '◉ Standard ', ['autoattack/always'] = '◎ Always ', ['hotkey'] = ' Hotkey ', ['hotkeys'] = ' Hotkeys ', ['disablehelp'] = '☐ Disabled Help ', ['enablehelp'] = '▣ Enabled Help ', ['ping'] = '‼ Ping ', ['pingx'] = '✖ Ping (Danger) ', ['mouseleft'] = ' Left Click', ['mouseright'] = ' Right Click', ['mousemid'] = ' Middle Click', ['mousescroll'] = ' ↕ Scroll Wheel', ['mousescrollup'] = ' ↑ Scroll Up', ['mousescrolldown'] = ' ↓ Scroll Down', ['mouse'] = ' Mouse', ['portraitcast'] = ' Portrait-casting', ['selfcast'] = ' Self-casting', ['legacy'] = ' L egacy Keys ', ['drag'] = '⇱⇲ Drag', ['scroll'] = '↕ Scroll', ['hold'] = '⤓ Hold', ['blank'] = ' ', ['caps lock'] = '⇪ Caps Lock', ['shift'] = '⇧ Shift', ['enter'] = '↵ Enter', ['cmd'] = '⌘ Cmd', ['command'] = '⌘ Command', ['opt'] = '⌥ Opt', ['option'] = '⌥ Option', ['tab'] = 'Tab ↹', ['backspace'] = '← Backspace', ['win'] = '⊞ Win', ['menu'] = '≣ Menu', ['up'] = '↑', ['down'] = '↓', ['left'] = '←', ['right'] = '→', ['asterisk'] = '&#42;', ['hash'] = '&#35;', ['colon'] = '&#58;', ['pipe'] = '&#124;', ['semicolon'] = '&#59;', ['equals'] = '&#61;', }

local keyAlias = { -- ['alternate name for key (alias)'] = 'name for key used in key table' ['*'] = 'asterisk', ['#'] = 'hash', [':'] = 'colon', [';'] = 'semicolon', }

local Collection = {} Collection.__index = Collection do function Collection:add(item) if item ~= nil then self.n = self.n + 1 self[self.n] = item end end function Collection:join(sep) return table.concat(self, sep) end function Collection:sort(comp) table.sort(self, comp) end function Collection.new return setmetatable({n = 0}, Collection) end end

local function keyPress(args) local chainNames = { 'chain first', 'chain second', 'chain third', 'chain fourth', 'chain fifth', 'chain sixth', 'chain seventh', 'chain eighth', 'chain ninth', }	local result = Collection.new local chainDefault = args.chain or '+' for i, id in ipairs(args) do		if i > 1 then result:add(args[chainNames[i - 1]] or chainDefault) end local lc = id:lower local text = keyText[lc] or keyText[keyAlias[lc]] or id result:add(kbdPrefix .. text .. kbdSuffix) end return result:join end

local function keypress(frame) -- Called by "...". -- Using the template doubles the post‐expand include size. return keyPress(frame:getParent.args) end

local function press(frame) -- Called by "". return keyPress(frame.args) end

return { keypress = keypress, press = press, }