@@ -138,6 +138,52 @@ class SKKEngine(
138138 fun processKey (keyCode : Int ) = state.processKey(this , keyCode)
139139
140140 fun handleKanaKey () = state.handleKanaKey(this )
141+
142+ fun handleKatakanaKey () {
143+ when (state) {
144+ SKKHiraganaState -> changeState(SKKKatakanaState )
145+ SKKKatakanaState -> changeState(SKKHiraganaState )
146+ SKKKanjiState -> {
147+ // ▽モードでカタカナ変換(従来の q 動作を引き継ぐ)
148+ if (mKanjiKey.isNotEmpty()) {
149+ val str = if (kanaState == SKKHiraganaState ) {
150+ hiragana2katakana(mKanjiKey.toString())
151+ } else {
152+ mKanjiKey.toString()
153+ }
154+ if (str != null ) commitTextSKK(str)
155+ mKanjiKey.setLength(0 )
156+ }
157+ changeState(kanaState)
158+ }
159+
160+ else -> {}
161+ }
162+ }
163+
164+ fun handleASCIIKey () {
165+ if (mComposing.length != 1 || mComposing[0 ] != ' z' ) {
166+ // ▽モード(KanjiState)では l で Abbrev モードに遷移(SKK 原本の動作)
167+ if (state == = SKKKanjiState ) {
168+ changeState(SKKAbbrevState )
169+ } else {
170+ changeState(SKKASCIIState , true )
171+ }
172+ }
173+ // 「→」を入力するための z+l 例外はそのまま維持
174+ }
175+
176+ fun handleZenkakuKey () {
177+ changeState(SKKZenkakuState )
178+ }
179+
180+ fun tryStartAbbrev (): Boolean {
181+ if (mComposing.isEmpty()) {
182+ changeState(SKKAbbrevState )
183+ return true
184+ }
185+ return false
186+ }
141187
142188 fun handleBackKey (): Boolean {
143189 if (! mRegistrationStack.isEmpty()) {
@@ -1151,36 +1197,13 @@ class SKKEngine(
11511197
11521198 internal fun changeInputMode (keyCode : Int ): Boolean {
11531199 // 入力モード変更操作.変更したらtrue
1200+ // 他のケースは SKKService.onKeyDown に集約済み。
1201+ // 現在は Ctrl-Q (全角カナ/半角カナ切り替え) のみここで行う。
11541202 when (keyCode) {
1155- ' q' .code -> {
1156- changeState(if (kanaState == = SKKHiraganaState ) SKKKatakanaState else SKKHiraganaState )
1157- return true
1158- }
1159-
11601203 17 /* Ctrl-Q */ -> {
11611204 changeState(SKKHanKanaState )
11621205 return true
11631206 }
1164-
1165- ' l' .code -> {
1166- if (mComposing.length != 1 || mComposing[0 ] != ' z' ) {
1167- if (state == = SKKKanjiState ) {
1168- changeState(SKKAbbrevState )
1169- } else {
1170- changeState(SKKASCIIState , true )
1171- }
1172- return true
1173- }
1174- } // 「→」を入力するための例外
1175- ' L' .code -> {
1176- changeState(SKKZenkakuState )
1177- return true
1178- }
1179-
1180- ' /' .code -> if (mComposing.isEmpty()) {
1181- changeState(SKKAbbrevState )
1182- return true
1183- }
11841207 }
11851208
11861209 return false
0 commit comments