keyboard_codes/parser/
aliases.rs1use lazy_static::lazy_static;
2use std::collections::HashMap;
3
4lazy_static! {
5 pub static ref MODIFIER_ALIASES: HashMap<&'static str, &'static str> = {
7 let mut map = HashMap::new();
8
9 map.insert("ctrl", "Control");
11 map.insert("ctl", "Control");
12
13 map.insert("shft", "Shift");
15
16 map.insert("altgr", "Alt");
18 map.insert("opt", "Alt");
19 map.insert("option", "Alt");
20
21 map.insert("win", "Meta");
23 map.insert("windows", "Meta");
24 map.insert("cmd", "Meta");
25 map.insert("command", "Meta");
26 map.insert("super", "Meta");
27
28 map.insert("lctrl", "LeftControl");
30 map.insert("lctl", "LeftControl");
31 map.insert("lshift", "LeftShift");
32 map.insert("lshft", "LeftShift");
33 map.insert("lalt", "LeftAlt");
34 map.insert("lopt", "LeftAlt");
35 map.insert("loption", "LeftAlt");
36 map.insert("lmeta", "LeftMeta");
37 map.insert("lwin", "LeftMeta");
38 map.insert("lcmd", "LeftMeta");
39 map.insert("lcommand", "LeftMeta");
40
41 map.insert("rctrl", "RightControl");
43 map.insert("rctl", "RightControl");
44 map.insert("rshift", "RightShift");
45 map.insert("rshft", "RightShift");
46 map.insert("ralt", "RightAlt");
47 map.insert("ropt", "RightAlt");
48 map.insert("roption", "RightAlt");
49 map.insert("rmeta", "RightMeta");
50 map.insert("rwin", "RightMeta");
51 map.insert("rcmd", "RightMeta");
52 map.insert("rcommand", "RightMeta");
53
54 map
55 };
56
57 pub static ref KEY_ALIASES: HashMap<&'static str, &'static str> = {
59 let mut map = HashMap::new();
60
61 map.insert("esc", "Escape");
63 map.insert("return", "Enter");
64 map.insert("back", "Backspace");
65 map.insert("bs", "Backspace");
66 map.insert("del", "Delete");
67 map.insert("ins", "Insert");
68
69 map.insert("pgup", "PageUp");
71 map.insert("pgdn", "PageDown");
72 map.insert("pagedown", "PageDown");
73
74 map.insert("left", "ArrowLeft");
76 map.insert("right", "ArrowRight");
77 map.insert("up", "ArrowUp");
78 map.insert("down", "ArrowDown");
79
80 map.insert("0", "D0");
82 map.insert("1", "D1");
83 map.insert("2", "D2");
84 map.insert("3", "D3");
85 map.insert("4", "D4");
86 map.insert("5", "D5");
87 map.insert("6", "D6");
88 map.insert("7", "D7");
89 map.insert("8", "D8");
90 map.insert("9", "D9");
91
92 map
93 };
94}
95
96pub fn normalize_modifier_name(input: &str) -> &str {
98 let input_lower = input.to_lowercase();
99 MODIFIER_ALIASES
100 .get(input_lower.as_str())
101 .copied()
102 .unwrap_or(input)
103}
104
105pub fn normalize_key_name(input: &str) -> &str {
107 let input_lower = input.to_lowercase();
108 KEY_ALIASES
109 .get(input_lower.as_str())
110 .copied()
111 .unwrap_or(input)
112}
113
114#[cfg(test)]
115mod tests {
116 use super::*;
117
118 #[test]
119 fn test_normalize_modifier_name() {
120 assert_eq!(normalize_modifier_name("ctrl"), "Control");
121 assert_eq!(normalize_modifier_name("Cmd"), "Meta");
122 assert_eq!(normalize_modifier_name("unknown"), "unknown");
123 }
124
125 #[test]
126 fn test_normalize_key_name() {
127 assert_eq!(normalize_key_name("esc"), "Escape");
128 assert_eq!(normalize_key_name("return"), "Enter");
129 assert_eq!(normalize_key_name("left"), "ArrowLeft");
130 assert_eq!(normalize_key_name("0"), "D0");
131 }
132}