@@ -5,6 +5,9 @@ use crate::{DecodedKey, HandleControl, KeyCode, KeyboardLayout, Modifiers};
55/// A standard Japan 106-key (or 109-key including Windows keys) keyboard.
66///
77/// 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.
811pub struct Jis109Key ;
912
1013impl KeyboardLayout for Jis109Key {
@@ -16,11 +19,8 @@ impl KeyboardLayout for Jis109Key {
1619 ) -> DecodedKey {
1720 match keycode {
1821 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 )
2424 }
2525 KeyCode :: Escape => DecodedKey :: Unicode ( 0x1B . into ( ) ) ,
2626 KeyCode :: Key1 => {
@@ -88,7 +88,7 @@ impl KeyboardLayout for Jis109Key {
8888 }
8989 KeyCode :: Key0 => {
9090 if modifiers. is_shifted ( ) {
91- DecodedKey :: Unicode ( ' ' )
91+ DecodedKey :: Unicode ( '~ ' )
9292 } else {
9393 DecodedKey :: Unicode ( '0' )
9494 }
@@ -102,46 +102,73 @@ impl KeyboardLayout for Jis109Key {
102102 }
103103 KeyCode :: OemPlus => {
104104 if modifiers. is_shifted ( ) {
105- DecodedKey :: Unicode ( '+ ' )
105+ DecodedKey :: Unicode ( '¯ ' )
106106 } else {
107- DecodedKey :: Unicode ( '; ' )
107+ DecodedKey :: Unicode ( '^ ' )
108108 }
109109 }
110110 KeyCode :: Oem4 => {
111+ if modifiers. is_shifted ( ) {
112+ DecodedKey :: Unicode ( '`' )
113+ } else {
114+ DecodedKey :: Unicode ( '@' )
115+ }
116+ }
117+ KeyCode :: Oem6 => {
111118 if modifiers. is_shifted ( ) {
112119 DecodedKey :: Unicode ( '{' )
113120 } else {
114121 DecodedKey :: Unicode ( '[' )
115122 }
116123 }
117- KeyCode :: Oem6 => {
124+ KeyCode :: Oem7 => {
118125 if modifiers. is_shifted ( ) {
119126 DecodedKey :: Unicode ( '}' )
120127 } else {
121128 DecodedKey :: Unicode ( ']' )
122129 }
123130 }
124- KeyCode :: Oem7 => {
131+ KeyCode :: Oem1 => {
125132 if modifiers. is_shifted ( ) {
126- DecodedKey :: Unicode ( '| ' )
133+ DecodedKey :: Unicode ( '+ ' )
127134 } else {
128- DecodedKey :: Unicode ( '\\ ' )
135+ DecodedKey :: Unicode ( '; ' )
129136 }
130137 }
131- KeyCode :: Oem1 => {
138+ KeyCode :: Oem3 => {
132139 if modifiers. is_shifted ( ) {
133140 DecodedKey :: Unicode ( '*' )
134141 } else {
135142 DecodedKey :: Unicode ( ':' )
136143 }
137144 }
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 => {
139158 if modifiers. is_shifted ( ) {
140- DecodedKey :: Unicode ( '~ ' )
159+ DecodedKey :: Unicode ( '_ ' )
141160 } 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 ( '¥' )
143169 }
144170 }
171+
145172 e => {
146173 let us = super :: Us104Key ;
147174 us. map_keycode ( e, modifiers, handle_ctrl)
0 commit comments