Skip to content

Commit 2522fc6

Browse files
committed
Narrow the symbols from preedit
1 parent 54b93da commit 2522fc6

3 files changed

Lines changed: 28 additions & 2 deletions

File tree

app/src/main/java/jp/deadend/noname/skk/SKKUserDictionary.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,17 @@ class SKKUserDictionary private constructor(
5252
override fun getCandidates(rawKey: String): List<String>? =
5353
getEntry(rawKey)?.candidates?.distinct()
5454

55+
fun getAllCandidates(): List<String> = mLock.withLock {
56+
val store = mStore ?: return@withLock listOf()
57+
val list = mutableListOf<String>()
58+
val browser = store.cursor() ?: return@withLock listOf()
59+
while (true) {
60+
val tuple = browser.next() ?: break
61+
parseValue(tuple.key, tuple.value)?.candidates?.let { list.addAll(it) }
62+
}
63+
return@withLock list.distinct()
64+
}
65+
5566
fun addEntry(key: String, value: String, okurigana: String) = mLock.withLock {
5667
val store = mStore ?: return@withLock
5768
val hiraganaKey = katakana2hiragana(key)

app/src/main/java/jp/deadend/noname/skk/engine/SKKCandidates.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -526,4 +526,13 @@ class SKKCandidates(private val engine: SKKEngine, private val service: SKKServi
526526
isSpecial = false
527527
mFoundKeys.clear()
528528
}
529+
530+
internal fun loadAllSymbols() {
531+
val list = engine.mSymbolDict.getAllCandidates()
532+
mList = list
533+
mCompletionList = list.map { "" }
534+
mQuery = ""
535+
mIndex = 0
536+
setView(list, mQuery, mIndex)
537+
}
529538
}

app/src/main/java/jp/deadend/noname/skk/engine/SKKPreeditState.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,14 @@ object SKKPreeditState : SKKState {
8989

9090
when (codeLower) {
9191
' '.code, '>'.code, ':'.code -> {
92-
if (mCandidates.isSpecial) // カテゴリ選択なので絞り込みなどない
93-
return pickCandidatesViewManually(mCandidates.mIndex)
92+
if (mCandidates.isSpecial) {
93+
return if (codeLower == ':'.code) {
94+
mCandidates.loadAllSymbols() // カテゴリ未選択なので全候補から絞る
95+
changeState(SKKNarrowingState)
96+
} else {
97+
pickCandidatesViewManually(mCandidates.mIndex)
98+
}
99+
}
94100

95101
// 変換開始
96102
// 最後に単体の'n'で終わっている場合、'ん'に変換

0 commit comments

Comments
 (0)