diff options
| -rw-r--r-- | src/parser.rs | 59 |
1 files changed, 57 insertions, 2 deletions
diff --git a/src/parser.rs b/src/parser.rs index 95cca4d..2473eee 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -16,7 +16,7 @@ use combine::parser::repeat::take_until; use combine::stream::state::{SourcePosition, State}; use autopilot_internal::cg_event_mask_for_flags; -use key_code::{NXKey, dkess_press_key}; +use key_code::{self, NXKey, dkess_press_key}; #[repr(C)] #[derive(Clone, Debug, Hash, Eq, PartialEq)] @@ -326,7 +326,10 @@ where or( try(( many(key_modifier()), - key_code().map(|code| KeyboardKey::KeyCode(code)), + or( + key_code().map(|code| KeyboardKey::KeyCode(code)), + nx_key().map(|code| KeyboardKey::NXKey(code)), + ), )), try(( many1(key_modifier()), @@ -437,6 +440,58 @@ where // <Bslash> } +fn nx_key<I>() -> impl Parser<Input = I, Output = NXKey> +where + I: Stream<Item = char>, + I::Error: ParseError<I::Item, I::Range, I::Position>, +{ + choice!( + try(string_case_insensitive("VolumeUp")) + .map(|_| key_code::NX_KEYTYPE_SOUND_UP), + try(string_case_insensitive("VolumeDown")) + .map(|_| key_code::NX_KEYTYPE_SOUND_DOWN), + try(string_case_insensitive("Mute")) + .map(|_| key_code::NX_KEYTYPE_MUTE), + try(string_case_insensitive("BrightnessUp")) + .map(|_| key_code::NX_KEYTYPE_BRIGHTNESS_UP), + try(string_case_insensitive("BrightnessDown")) + .map(|_| key_code::NX_KEYTYPE_BRIGHTNESS_DOWN), + try(string_case_insensitive("Help")) + .map(|_| key_code::NX_KEYTYPE_HELP), + try(string_case_insensitive("Power")) + .map(|_| key_code::NX_POWER_KEY), + try(string_case_insensitive("NumLock")) + .map(|_| key_code::NX_KEYTYPE_NUM_LOCK), + + try(string_case_insensitive("ContrastUp")) + .map(|_| key_code::NX_KEYTYPE_CONTRAST_UP), + try(string_case_insensitive("ContrastDown")) + .map(|_| key_code::NX_KEYTYPE_CONTRAST_DOWN), + try(string_case_insensitive("Eject")) + .map(|_| key_code::NX_KEYTYPE_EJECT), + try(string_case_insensitive("VidMirror")) + .map(|_| key_code::NX_KEYTYPE_VIDMIRROR), + + try(string_case_insensitive("Play")) + .map(|_| key_code::NX_KEYTYPE_PLAY), + try(string_case_insensitive("Next")) + .map(|_| key_code::NX_KEYTYPE_NEXT), + try(string_case_insensitive("Previous")) + .map(|_| key_code::NX_KEYTYPE_PREVIOUS), + try(string_case_insensitive("Fast")) + .map(|_| key_code::NX_KEYTYPE_FAST), + try(string_case_insensitive("Rewind")) + .map(|_| key_code::NX_KEYTYPE_REWIND), + + try(string_case_insensitive("IlluminationUp")) + .map(|_| key_code::NX_KEYTYPE_ILLUMINATION_UP), + try(string_case_insensitive("IlluminationDown")) + .map(|_| key_code::NX_KEYTYPE_ILLUMINATION_DOWN), + try(string_case_insensitive("IlluminationToggle")) + .map(|_| key_code::NX_KEYTYPE_ILLUMINATION_TOGGLE) + ) +} + fn whitespace_separator<I>() -> impl Parser<Input = I> where I: Stream<Item = char>, |
