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/parser.rs | |
| 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/parser.rs')
| -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>, | 
