diff options
| author | Teddy Wing | 2018-10-18 02:52:21 +0200 |
|---|---|---|
| committer | Teddy Wing | 2018-10-18 02:52:21 +0200 |
| commit | caea7bde66206d151075b11a33cc0ac446d448ab (patch) | |
| tree | 2aa92920f326d53beceb8345ed30d058861c5fb8 /src | |
| parent | 72b7f6fb839e8ce5ce208a14534e3f79d2ae6904 (diff) | |
| download | dome-key-map-caea7bde66206d151075b11a33cc0ac446d448ab.tar.bz2 | |
Parse `NXKey`s
Add a new parser for `NXKey`s. I originally thought I was going to add
this to the `key_code()` parser, but that one parses to `KeyCode`s.
Seemed like it would be easier to make a brand new parser to handle the
different type.
Need to add tests for this.
Diffstat (limited to 'src')
| -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>, |
