Skip to main content

keyboard_codes/parser/
aliases.rs

1use lazy_static::lazy_static;
2use std::collections::HashMap;
3
4lazy_static! {
5    /// Modifier alias mapping (alias -> standard name)
6    pub static ref MODIFIER_ALIASES: HashMap<&'static str, &'static str> = {
7        let mut map = HashMap::new();
8
9        // Control aliases
10        map.insert("ctrl", "Control");
11        map.insert("ctl", "Control");
12
13        // Shift aliases
14        map.insert("shft", "Shift");
15
16        // Alt aliases
17        map.insert("altgr", "Alt");
18        map.insert("opt", "Alt");
19        map.insert("option", "Alt");
20
21        // Meta aliases (cross-platform compatibility)
22        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        // Left modifier aliases
29        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        // Right modifier aliases
42        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    /// Key alias mapping (alias -> standard name)
58    pub static ref KEY_ALIASES: HashMap<&'static str, &'static str> = {
59        let mut map = HashMap::new();
60
61        // Function key aliases
62        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        // Navigation key aliases
70        map.insert("pgup", "PageUp");
71        map.insert("pgdn", "PageDown");
72        map.insert("pagedown", "PageDown");
73
74        // Arrow key aliases
75        map.insert("left", "ArrowLeft");
76        map.insert("right", "ArrowRight");
77        map.insert("up", "ArrowUp");
78        map.insert("down", "ArrowDown");
79
80        // Digit key aliases
81        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
96/// Normalize modifier name using alias mapping
97pub 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
105/// Normalize key name using alias mapping
106pub 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}