use lazy_static::lazy_static;
use std::collections::HashMap;
lazy_static! {
pub static ref MODIFIER_ALIASES: HashMap<&'static str, &'static str> = {
let mut map = HashMap::new();
map.insert("ctrl", "Control");
map.insert("ctl", "Control");
map.insert("shft", "Shift");
map.insert("altgr", "Alt");
map.insert("opt", "Alt");
map.insert("option", "Alt");
map.insert("win", "Meta");
map.insert("windows", "Meta");
map.insert("cmd", "Meta");
map.insert("command", "Meta");
map.insert("super", "Meta");
map.insert("lctrl", "LeftControl");
map.insert("lctl", "LeftControl");
map.insert("lshift", "LeftShift");
map.insert("lshft", "LeftShift");
map.insert("lalt", "LeftAlt");
map.insert("lopt", "LeftAlt");
map.insert("loption", "LeftAlt");
map.insert("lmeta", "LeftMeta");
map.insert("lwin", "LeftMeta");
map.insert("lcmd", "LeftMeta");
map.insert("lcommand", "LeftMeta");
map.insert("rctrl", "RightControl");
map.insert("rctl", "RightControl");
map.insert("rshift", "RightShift");
map.insert("rshft", "RightShift");
map.insert("ralt", "RightAlt");
map.insert("ropt", "RightAlt");
map.insert("roption", "RightAlt");
map.insert("rmeta", "RightMeta");
map.insert("rwin", "RightMeta");
map.insert("rcmd", "RightMeta");
map.insert("rcommand", "RightMeta");
map
};
pub static ref KEY_ALIASES: HashMap<&'static str, &'static str> = {
let mut map = HashMap::new();
map.insert("esc", "Escape");
map.insert("return", "Enter");
map.insert("back", "Backspace");
map.insert("bs", "Backspace");
map.insert("del", "Delete");
map.insert("ins", "Insert");
map.insert("pgup", "PageUp");
map.insert("pgdn", "PageDown");
map.insert("pagedown", "PageDown");
map.insert("left", "ArrowLeft");
map.insert("right", "ArrowRight");
map.insert("up", "ArrowUp");
map.insert("down", "ArrowDown");
map.insert("0", "D0");
map.insert("1", "D1");
map.insert("2", "D2");
map.insert("3", "D3");
map.insert("4", "D4");
map.insert("5", "D5");
map.insert("6", "D6");
map.insert("7", "D7");
map.insert("8", "D8");
map.insert("9", "D9");
map
};
}
pub fn normalize_modifier_name(input: &str) -> &str {
let input_lower = input.to_lowercase();
MODIFIER_ALIASES
.get(input_lower.as_str())
.copied()
.unwrap_or(input)
}
pub fn normalize_key_name(input: &str) -> &str {
let input_lower = input.to_lowercase();
KEY_ALIASES
.get(input_lower.as_str())
.copied()
.unwrap_or(input)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_normalize_modifier_name() {
assert_eq!(normalize_modifier_name("ctrl"), "Control");
assert_eq!(normalize_modifier_name("Cmd"), "Meta");
assert_eq!(normalize_modifier_name("unknown"), "unknown");
}
#[test]
fn test_normalize_key_name() {
assert_eq!(normalize_key_name("esc"), "Escape");
assert_eq!(normalize_key_name("return"), "Enter");
assert_eq!(normalize_key_name("left"), "ArrowLeft");
assert_eq!(normalize_key_name("0"), "D0");
}
}