@@ -5,6 +5,9 @@ use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers};
5
5
/// A standard Japan 106-key (or 109-key including Windows keys) keyboard.
6
6
///
7
7
/// Has a small space bar, to fit in extra keys.
8
+ ///
9
+ /// We used <https://www.win.tue.nl/~aeb/linux/kbd/scancodes-8.html> as a
10
+ /// reference.
8
11
pub struct Jis109Key ;
9
12
10
13
impl KeyboardLayout for Jis109Key {
@@ -16,11 +19,8 @@ impl KeyboardLayout for Jis109Key {
16
19
) -> DecodedKey {
17
20
match keycode {
18
21
KeyCode :: Oem8 => {
19
- if modifiers. is_shifted ( ) {
20
- DecodedKey :: Unicode ( '`' )
21
- } else {
22
- DecodedKey :: Unicode ( '@' )
23
- }
22
+ // hankaku/zenkaku/kanji
23
+ DecodedKey :: RawKey ( KeyCode :: Oem8 )
24
24
}
25
25
KeyCode :: Escape => DecodedKey :: Unicode ( 0x1B . into ( ) ) ,
26
26
KeyCode :: Key1 => {
@@ -88,7 +88,7 @@ impl KeyboardLayout for Jis109Key {
88
88
}
89
89
KeyCode :: Key0 => {
90
90
if modifiers. is_shifted ( ) {
91
- DecodedKey :: Unicode ( ' ' )
91
+ DecodedKey :: Unicode ( '~ ' )
92
92
} else {
93
93
DecodedKey :: Unicode ( '0' )
94
94
}
@@ -102,46 +102,73 @@ impl KeyboardLayout for Jis109Key {
102
102
}
103
103
KeyCode :: OemPlus => {
104
104
if modifiers. is_shifted ( ) {
105
- DecodedKey :: Unicode ( '+ ' )
105
+ DecodedKey :: Unicode ( '¯ ' )
106
106
} else {
107
- DecodedKey :: Unicode ( '; ' )
107
+ DecodedKey :: Unicode ( '^ ' )
108
108
}
109
109
}
110
110
KeyCode :: Oem4 => {
111
+ if modifiers. is_shifted ( ) {
112
+ DecodedKey :: Unicode ( '`' )
113
+ } else {
114
+ DecodedKey :: Unicode ( '@' )
115
+ }
116
+ }
117
+ KeyCode :: Oem6 => {
111
118
if modifiers. is_shifted ( ) {
112
119
DecodedKey :: Unicode ( '{' )
113
120
} else {
114
121
DecodedKey :: Unicode ( '[' )
115
122
}
116
123
}
117
- KeyCode :: Oem6 => {
124
+ KeyCode :: Oem7 => {
118
125
if modifiers. is_shifted ( ) {
119
126
DecodedKey :: Unicode ( '}' )
120
127
} else {
121
128
DecodedKey :: Unicode ( ']' )
122
129
}
123
130
}
124
- KeyCode :: Oem7 => {
131
+ KeyCode :: Oem1 => {
125
132
if modifiers. is_shifted ( ) {
126
- DecodedKey :: Unicode ( '| ' )
133
+ DecodedKey :: Unicode ( '+ ' )
127
134
} else {
128
- DecodedKey :: Unicode ( '\\ ' )
135
+ DecodedKey :: Unicode ( '; ' )
129
136
}
130
137
}
131
- KeyCode :: Oem1 => {
138
+ KeyCode :: Oem3 => {
132
139
if modifiers. is_shifted ( ) {
133
140
DecodedKey :: Unicode ( '*' )
134
141
} else {
135
142
DecodedKey :: Unicode ( ':' )
136
143
}
137
144
}
138
- KeyCode :: Oem3 => {
145
+ KeyCode :: Oem9 => {
146
+ // Muhenkan
147
+ DecodedKey :: RawKey ( keycode)
148
+ }
149
+ KeyCode :: Oem10 => {
150
+ // Henkan/Zenkouho
151
+ DecodedKey :: RawKey ( keycode)
152
+ }
153
+ KeyCode :: Oem11 => {
154
+ // Hiragana/Katakana
155
+ DecodedKey :: RawKey ( keycode)
156
+ }
157
+ KeyCode :: Oem12 => {
139
158
if modifiers. is_shifted ( ) {
140
- DecodedKey :: Unicode ( '~ ' )
159
+ DecodedKey :: Unicode ( '_ ' )
141
160
} else {
142
- DecodedKey :: Unicode ( '^' )
161
+ DecodedKey :: Unicode ( '\\' )
162
+ }
163
+ }
164
+ KeyCode :: Oem13 => {
165
+ if modifiers. is_shifted ( ) {
166
+ DecodedKey :: Unicode ( '|' )
167
+ } else {
168
+ DecodedKey :: Unicode ( '¥' )
143
169
}
144
170
}
171
+
145
172
e => {
146
173
let us = super :: Us104Key ;
147
174
us. map_keycode ( e, modifiers, handle_ctrl)
0 commit comments