From 0a36ed9ab142b54be6ddac6583b38bb17889d1f9 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Mon, 30 Jan 2023 19:24:33 +0800 Subject: [PATCH] Tekkon // Add new auto-correction cases (with unit tests). --- .../Tekkon/Tekkon_SyllableComposer.swift | 13 ++++++ .../Tests/TekkonTests/BasicTests.swift | 40 +++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/Packages/vChewing_Tekkon/Sources/Tekkon/Tekkon_SyllableComposer.swift b/Packages/vChewing_Tekkon/Sources/Tekkon/Tekkon_SyllableComposer.swift index b17478c2..a92c1328 100644 --- a/Packages/vChewing_Tekkon/Sources/Tekkon/Tekkon_SyllableComposer.swift +++ b/Packages/vChewing_Tekkon/Sources/Tekkon/Tekkon_SyllableComposer.swift @@ -230,6 +230,19 @@ extension Tekkon { if ["ㄨㄛ", "ㄨㄥ"].contains(semivowel.value + vowel.value) { semivowel.clear() } default: break } + if [.vowel, .intonation].contains(thePhone.type), "ㄓㄔㄕㄗㄘㄙ".contains(consonant.value) { + switch semivowel.value { + case "ㄧ": semivowel.clear() + case "ㄩ": + switch consonant { + case _ where "ㄓㄗ".contains(consonant.value): consonant = "ㄐ" + case _ where "ㄔㄘ".contains(consonant.value): consonant = "ㄑ" + case _ where "ㄕㄙ".contains(consonant.value): consonant = "ㄒ" + default: break + } + default: break + } + } } switch thePhone.type { case .consonant: consonant = thePhone diff --git a/Packages/vChewing_Tekkon/Tests/TekkonTests/BasicTests.swift b/Packages/vChewing_Tekkon/Tests/TekkonTests/BasicTests.swift index ad27ce26..a63ecc6d 100644 --- a/Packages/vChewing_Tekkon/Tests/TekkonTests/BasicTests.swift +++ b/Packages/vChewing_Tekkon/Tests/TekkonTests/BasicTests.swift @@ -173,6 +173,46 @@ final class TekkonTestsBasic: XCTestCase { // 測試這種情形:「如果傳入的字串不包含任何半形英數內容的話,那麼應該直接將傳入的字串原樣返回」。 XCTAssertEqual(Tekkon.cnvHanyuPinyinToPhona(targetJoined: "ㄅㄧㄢˋ-˙ㄌㄜ-ㄊㄧㄢ"), "ㄅㄧㄢˋ-˙ㄌㄜ-ㄊㄧㄢ") } + + func testPhonabetCombinationCorrection() throws { + var composer = Tekkon.Composer(arrange: .ofDachen, correction: true) + composer.receiveKey(fromPhonabet: "ㄓ") + composer.receiveKey(fromPhonabet: "ㄧ") + composer.receiveKey(fromPhonabet: "ˋ") + XCTAssertEqual(composer.value, "ㄓˋ") + + composer.clear() + composer.receiveKey(fromPhonabet: "ㄓ") + composer.receiveKey(fromPhonabet: "ㄩ") + composer.receiveKey(fromPhonabet: "ˋ") + XCTAssertEqual(composer.value, "ㄐㄩˋ") + + composer.clear() + composer.receiveKey(fromPhonabet: "ㄓ") + composer.receiveKey(fromPhonabet: "ㄧ") + composer.receiveKey(fromPhonabet: "ㄢ") + XCTAssertEqual(composer.value, "ㄓㄢ") + + composer.clear() + composer.receiveKey(fromPhonabet: "ㄓ") + composer.receiveKey(fromPhonabet: "ㄩ") + composer.receiveKey(fromPhonabet: "ㄢ") + XCTAssertEqual(composer.value, "ㄐㄩㄢ") + + composer.clear() + composer.receiveKey(fromPhonabet: "ㄓ") + composer.receiveKey(fromPhonabet: "ㄧ") + composer.receiveKey(fromPhonabet: "ㄢ") + composer.receiveKey(fromPhonabet: "ˋ") + XCTAssertEqual(composer.value, "ㄓㄢˋ") + + composer.clear() + composer.receiveKey(fromPhonabet: "ㄓ") + composer.receiveKey(fromPhonabet: "ㄩ") + composer.receiveKey(fromPhonabet: "ㄢ") + composer.receiveKey(fromPhonabet: "ˋ") + XCTAssertEqual(composer.value, "ㄐㄩㄢˋ") + } } // MARK: Testing Pinyin Arrangements