mirror of
https://github.com/mii443/AzooKeyKanaKanjiConverter.git
synced 2025-08-22 15:05:26 +00:00
feat: support roman version of pruning
This commit is contained in:
@ -52,9 +52,21 @@ struct TypoCorrectionGenerator {
|
||||
stablePrefix.append(contentsOf: item.string)
|
||||
case .roman2kana:
|
||||
// TODO: impl
|
||||
break loop
|
||||
var stableIndex = item.string.endIndex
|
||||
for suffix in Roman2Kana.unstableSuffixes {
|
||||
if item.string.hasSuffix(suffix) {
|
||||
stableIndex = min(stableIndex, item.string.endIndex - suffix.count)
|
||||
}
|
||||
}
|
||||
if stableIndex == item.string.endIndex {
|
||||
stablePrefix.append(contentsOf: item.string)
|
||||
} else {
|
||||
// 全体が安定でない場合は、そこでbreakする
|
||||
stablePrefix.append(contentsOf: item.string[0 ..< stableIndex])
|
||||
break loop
|
||||
}
|
||||
}
|
||||
// 安定なprefixが
|
||||
// 安定なprefixがtargetをprefixに持つ場合、このstack内のアイテムについてもunreachableであることが分かるので、除去する
|
||||
if stablePrefix.hasPrefix(target) {
|
||||
return false
|
||||
}
|
||||
|
@ -10,6 +10,11 @@ import Foundation
|
||||
import SwiftUtils
|
||||
|
||||
enum Roman2Kana {
|
||||
static let unstableSuffixes: Set<[Character]> = hiraganaChanges.keys.flatMapSet { characters in
|
||||
characters.indices.map { i in
|
||||
Array(characters[...i])
|
||||
}
|
||||
}
|
||||
static let katakanaChanges: [String: String] = Dictionary(uniqueKeysWithValues: hiraganaChanges.map { (String($0.key), String($0.value).toKatakana()) })
|
||||
static let hiraganaChanges: [[Character]: [Character]] = Dictionary(uniqueKeysWithValues: [
|
||||
"a": "あ",
|
||||
|
@ -52,6 +52,24 @@ final class ConverterTests: XCTestCase {
|
||||
let results = await converter.requestCandidates(c, options: requestOptions())
|
||||
XCTAssertEqual(results.mainResults.first?.text, "幼少期からテニス水泳野球少林寺拳法など様々なスポーツを経験しながら育ち小学校時代はロサンゼルス近郊に滞在しておりゴルフやテニスを習っていた")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func testRoman2KanaFullConversion() async throws {
|
||||
do {
|
||||
let converter = await KanaKanjiConverter()
|
||||
var c = ComposingText()
|
||||
c.insertAtCursorPosition("azuーkiーhasinjidainokiーboーdoapuridesu", inputStyle: .roman2kana)
|
||||
let results = await converter.requestCandidates(c, options: requestOptions())
|
||||
XCTAssertEqual(results.mainResults.first?.text, "azooKeyは新時代のキーボードアプリです")
|
||||
}
|
||||
do {
|
||||
let converter = await KanaKanjiConverter()
|
||||
var c = ComposingText()
|
||||
c.insertAtCursorPosition("youshoukikaratenisusuieiyakyuushourinjikenpounadosamazamanasupoーtuwokeikennsinagarasodatishougakkouzidaiharosanzerusukinkounitaizaisiteorigoruhuyatenisuwonaratteita", inputStyle: .roman2kana)
|
||||
let results = await converter.requestCandidates(c, options: requestOptions())
|
||||
XCTAssertEqual(results.mainResults.first?.text, "幼少期からテニス水泳野球少林寺拳法など様々なスポーツを経験しながら育ち小学校時代はロサンゼルス近郊に滞在しておりゴルフやテニスを習っていた")
|
||||
}
|
||||
}
|
||||
|
||||
// 1文字ずつ変換する
|
||||
|
Reference in New Issue
Block a user