use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers};
pub use super::us104::Us104Key;
pub struct Jis109Key;
impl KeyboardLayout for Jis109Key {
fn map_keycode(
keycode: KeyCode,
modifiers: &Modifiers,
handle_ctrl: HandleControl,
) -> DecodedKey {
match keycode {
KeyCode::BackTick => {
if modifiers.is_shifted() {
DecodedKey::Unicode('`')
} else {
DecodedKey::Unicode('@')
}
}
KeyCode::Escape => DecodedKey::Unicode(0x1B.into()),
KeyCode::Key1 => {
if modifiers.is_shifted() {
DecodedKey::Unicode('!')
} else {
DecodedKey::Unicode('1')
}
}
KeyCode::Key2 => {
if modifiers.is_shifted() {
DecodedKey::Unicode('"')
} else {
DecodedKey::Unicode('2')
}
}
KeyCode::Key3 => {
if modifiers.is_shifted() {
DecodedKey::Unicode('#')
} else {
DecodedKey::Unicode('3')
}
}
KeyCode::Key4 => {
if modifiers.is_shifted() {
DecodedKey::Unicode('$')
} else {
DecodedKey::Unicode('4')
}
}
KeyCode::Key5 => {
if modifiers.is_shifted() {
DecodedKey::Unicode('%')
} else {
DecodedKey::Unicode('5')
}
}
KeyCode::Key6 => {
if modifiers.is_shifted() {
DecodedKey::Unicode('&')
} else {
DecodedKey::Unicode('6')
}
}
KeyCode::Key7 => {
if modifiers.is_shifted() {
DecodedKey::Unicode('\'')
} else {
DecodedKey::Unicode('7')
}
}
KeyCode::Key8 => {
if modifiers.is_shifted() {
DecodedKey::Unicode('(')
} else {
DecodedKey::Unicode('8')
}
}
KeyCode::Key9 => {
if modifiers.is_shifted() {
DecodedKey::Unicode(')')
} else {
DecodedKey::Unicode('9')
}
}
KeyCode::Key0 => {
if modifiers.is_shifted() {
DecodedKey::Unicode(' ')
} else {
DecodedKey::Unicode('0')
}
}
KeyCode::Minus => {
if modifiers.is_shifted() {
DecodedKey::Unicode('=')
} else {
DecodedKey::Unicode('-')
}
}
KeyCode::Equals => {
if modifiers.is_shifted() {
DecodedKey::Unicode('+')
} else {
DecodedKey::Unicode(';')
}
}
KeyCode::BracketSquareLeft => {
if modifiers.is_shifted() {
DecodedKey::Unicode('{')
} else {
DecodedKey::Unicode('[')
}
}
KeyCode::BracketSquareRight => {
if modifiers.is_shifted() {
DecodedKey::Unicode('}')
} else {
DecodedKey::Unicode(']')
}
}
KeyCode::BackSlash => {
if modifiers.is_shifted() {
DecodedKey::Unicode('|')
} else {
DecodedKey::Unicode('\\')
}
}
KeyCode::SemiColon => {
if modifiers.is_shifted() {
DecodedKey::Unicode('*')
} else {
DecodedKey::Unicode(':')
}
}
KeyCode::Quote => {
if modifiers.is_shifted() {
DecodedKey::Unicode('~')
} else {
DecodedKey::Unicode('^')
}
}
e => <Us104Key as KeyboardLayout>::map_keycode(e, modifiers, handle_ctrl),
}
}
}