yaxi/keyboard/
mod.rs

1use crate::display::error::Error;
2
3// page 86 @ https://www.x.org/docs/XProtocol/proto.pdf
4
5#[non_exhaustive]
6pub struct CharacterSet;
7
8impl CharacterSet {
9    pub const LATIN1: u8 = 0;
10    pub const LATIN2: u8 = 1;
11    pub const LATIN3: u8 = 2;
12    pub const LATIN4: u8 = 3;
13    pub const KANA: u8 = 4;
14    pub const ARABIC: u8 = 5;
15    pub const CYRILLIC: u8 = 6;
16    pub const GREEK: u8 = 7;
17    pub const TECHNICAL: u8 = 8;
18    pub const SPECIAL: u8 = 9;
19    pub const PUBLISHING: u8 = 10;
20    pub const APL: u8 = 11;
21    pub const HEBREW: u8 = 12;
22    pub const THAI: u8 = 13;
23    pub const KOREAN: u8 = 14;
24    pub const LATIN5: u8 = 15;
25    pub const LATIN6: u8 = 16;
26    pub const LATIN7: u8 = 17;
27    pub const LATIN8: u8 = 18;
28    pub const LATIN9: u8 = 19;
29    pub const CURRENCY: u8 = 32;
30    pub const C3270: u8 = 253;
31    pub const XKB: u8 = 254;
32    pub const KEYBOARD: u8 = 255;
33}
34
35#[derive(Debug, Clone, Copy, PartialEq)]
36pub struct Keysym {
37    value: u32,
38}
39
40impl Keysym {
41    pub fn new(value: u32) -> Keysym {
42        Keysym { value }
43    }
44
45    /// get the character representation of a keysym
46    pub fn character(&self) -> Result<char, Error> {
47        match ((self.value & 0xff00) >> 8) as u8 {
48            CharacterSet::LATIN1 => {
49                char::from_u32((self.value & 0xff) + 0x20 - 32).ok_or(Error::InvalidKeysym)
50            }
51            _ => Err(Error::InvalidKeysym),
52        }
53    }
54}