keyboard_codes/parser/
mod.rs1mod aliases;
4mod shortcut;
5
6pub use aliases::{normalize_key_name, normalize_modifier_name};
7pub use shortcut::{
8 parse_input, parse_shortcut_flexible, parse_shortcut_sequence, parse_shortcut_with_aliases,
9 Shortcut,
10};
11
12pub use crate::mapping::standard::{parse_key_ignore_case, parse_modifier_ignore_case};
14
15pub fn parse_modifier_with_aliases(s: &str) -> Result<crate::Modifier, crate::KeyParseError> {
17 if s.is_empty() {
18 return Err(crate::KeyParseError::UnknownModifier(
19 "empty string".to_string(),
20 ));
21 }
22
23 let input_lower = s.to_lowercase();
24
25 if let Some(&standard_name) = aliases::MODIFIER_ALIASES.get(input_lower.as_str()) {
27 return crate::mapping::standard::STANDARD_MODIFIER_MAPPINGS
29 .iter()
30 .find(|(name, _, _, _, _)| name.eq_ignore_ascii_case(standard_name))
31 .map(|(_, modifier, _, _, _)| *modifier)
32 .ok_or_else(|| crate::KeyParseError::UnknownModifier(s.to_string()));
33 }
34
35 parse_modifier_ignore_case(s)
37}
38
39pub fn parse_keyboard_input(input: &str) -> Result<crate::KeyboardInput, crate::KeyParseError> {
41 crate::KeyboardInput::parse_with_aliases(input)
42}