Skip to content

Commit

Permalink
Fix conversion from/to 3 kanas
Browse files Browse the repository at this point in the history
  • Loading branch information
tamo committed Jan 27, 2025
1 parent c6fd405 commit d01912a
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 12 deletions.
26 changes: 15 additions & 11 deletions app/src/main/java/jp/deadend/noname/skk/engine/SKKEngine.kt
Original file line number Diff line number Diff line change
Expand Up @@ -656,11 +656,14 @@ class SKKEngine(
// if (isPersonalizedLearning) のチェックはこの場合しないでおく
mUserDict.addEntry(regInfo.key, regEntryStr, regInfo.okurigana)
mUserDict.commitChanges()
val text = regInfo.entry.append(regInfo.okurigana).toString()
commitTextSKK(if (kanaState === SKKHiraganaState) text else {
val zen = hirakana2katakana(text)
if (state === SKKHanKanaState) zenkaku2hankaku(zen) else zen
} ?: "") // entry は生で登録するが okurigana はひらがな
// entry は生で登録するが okurigana はひらがな
val okuri = regInfo.okurigana ?: ""
commitTextSKK(regInfo.entry.toString() + when (kanaState) {
SKKHiraganaState -> okuri
SKKKatakanaState -> hirakana2katakana(okuri)
SKKHanKanaState -> zenkaku2hankaku(hirakana2katakana(okuri))
else -> throw RuntimeException("kanaState: $kanaState")
})
}
reset()
if (!mRegistrationStack.isEmpty()) setComposingTextSKK("")
Expand Down Expand Up @@ -788,8 +791,7 @@ class SKKEngine(
number
)
)
setComposingTextSKK(katakana2hiragana(candidate + (mOkurigana ?: ""))!!)
// setComposingTextSKK はひらがなを期待している
setComposingTextSKK(candidate + (mOkurigana ?: ""))
}

internal fun pickCurrentCandidate(backspace: Boolean = false) {
Expand Down Expand Up @@ -823,10 +825,12 @@ class SKKEngine(
else candidate.deleteCharAt(candidate.lastIndex)
}
val concat = candidate.toString() + okuri.toString()
val text = if (kanaState === SKKHiraganaState) concat else {
val zen = hirakana2katakana(concat)!!
if (kanaState === SKKHanKanaState) zenkaku2hankaku(zen)!! else zen
}
val text = when (kanaState) {
SKKHiraganaState -> concat
SKKKatakanaState -> hirakana2katakana(concat, reversed = true) ?: ""
SKKHanKanaState -> zenkaku2hankaku(hirakana2katakana(concat)) ?: ""
else -> throw RuntimeException("kanaState: $kanaState")
} // カナかなは互換性あるけど半角カナと全角かなは互換性ない感覚があるので reverse しない
commitTextSKK(text)
if (mRegistrationStack.isEmpty()) {
mLastConversion = ConversionInfo(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,12 @@ object SKKKanjiState : SKKState {

17 /* Ctrl-Q */ -> {
if (mKanjiKey.isNotEmpty()) {
val str = zenkaku2hankaku(hirakana2katakana(mKanjiKey.toString()))
val zenkata = hirakana2katakana(mKanjiKey.toString())
val str = if (kanaState === SKKHanKanaState) {
zenkata // 半角カナで半角を出すのはエンターだから Ctrl-Q は全角カナが自然だと思う
} else {
zenkaku2hankaku(zenkata)
}
if (str != null) commitTextSKK(str)
mKanjiKey.setLength(0)
}
Expand Down

0 comments on commit d01912a

Please sign in to comment.