From bde4ab9020f99e97104de44788dc7d86ac35164a Mon Sep 17 00:00:00 2001 From: Marvin Elsen Date: Fri, 20 Sep 2024 15:49:13 +0200 Subject: [PATCH] Fix formatting to Pinyin with tone marks for capital vowels --- build.gradle.kts | 2 +- .../marvinelsen/chinese/transliteration/Syllable.kt | 4 ++-- .../chinese/transliteration/SyllableTest.kt | 11 +++++++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index e06c3bb..9f72698 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } group = "com.marvinelsen" -version = "1.0.0" +version = "1.0.1" repositories { mavenCentral() diff --git a/src/main/kotlin/com/marvinelsen/chinese/transliteration/Syllable.kt b/src/main/kotlin/com/marvinelsen/chinese/transliteration/Syllable.kt index dbfcf63..1a57358 100644 --- a/src/main/kotlin/com/marvinelsen/chinese/transliteration/Syllable.kt +++ b/src/main/kotlin/com/marvinelsen/chinese/transliteration/Syllable.kt @@ -88,13 +88,13 @@ data class Syllable( "'$pinyinSyllableWithoutTone is not a valid Pinyin syllable." } - if (pinyinSyllableWithoutTone == "r" && tone == Tone.FIFTH) { + if (pinyinSyllableWithoutTone.lowercase() == "r" && tone == Tone.FIFTH) { return pinyinSyllableWithoutTone } val sanitizedPinyinSyllableWithoutTone = pinyinSyllableWithoutTone.replace("v", "ü").replace("u:", "ü") - val characterToIndex = sanitizedPinyinSyllableWithoutTone.withIndex().associate { it.value to it.index } + val characterToIndex = sanitizedPinyinSyllableWithoutTone.lowercase().withIndex().associate { it.value to it.index } val vowelIndex = when { 'a' in characterToIndex -> characterToIndex['a']!! 'o' in characterToIndex -> characterToIndex['o']!! diff --git a/src/test/kotlin/com/marvinelsen/chinese/transliteration/SyllableTest.kt b/src/test/kotlin/com/marvinelsen/chinese/transliteration/SyllableTest.kt index ce9d6f6..53ff3aa 100644 --- a/src/test/kotlin/com/marvinelsen/chinese/transliteration/SyllableTest.kt +++ b/src/test/kotlin/com/marvinelsen/chinese/transliteration/SyllableTest.kt @@ -18,6 +18,9 @@ class SyllableTest : ShouldSpec({ "nü3" to Syllable("nü", Tone.THIRD), "nu:3" to Syllable("nu:", Tone.THIRD), "r5" to Syllable("r", Tone.FIFTH), + "R5" to Syllable("R", Tone.FIFTH), + "er2" to Syllable("er", Tone.SECOND), + "Er2" to Syllable("Er", Tone.SECOND), ) { (pinyinWithNumber, expectedSyllable) -> Syllable.fromPinyinWithToneNumber(pinyinWithNumber) shouldBe expectedSyllable } @@ -56,6 +59,9 @@ class SyllableTest : ShouldSpec({ Syllable("nu:", Tone.THIRD) to "ㄋㄩˇ", Syllable("nv", Tone.THIRD) to "ㄋㄩˇ", Syllable("r", Tone.FIFTH) to "˙ㄦ", + Syllable("R", Tone.FIFTH) to "˙ㄦ", + Syllable("er", Tone.SECOND) to "ㄦˊ", + Syllable("Er", Tone.SECOND) to "ㄦˊ", ) { (syllable, expectedZhuyin) -> syllable.format(TransliterationSystem.ZHUYIN) shouldBe expectedZhuyin } @@ -73,6 +79,9 @@ class SyllableTest : ShouldSpec({ Syllable("nu:", Tone.THIRD) to "nu:3", Syllable("nv", Tone.THIRD) to "nv3", Syllable("r", Tone.FIFTH) to "r5", + Syllable("R", Tone.FIFTH) to "R5", + Syllable("er", Tone.SECOND) to "er2", + Syllable("Er", Tone.SECOND) to "Er2", ) { (syllable, expectedPinyinWithToneNumbers) -> syllable.format(TransliterationSystem.PINYIN_WITH_TONE_NUMBERS) shouldBe expectedPinyinWithToneNumbers } @@ -92,6 +101,8 @@ class SyllableTest : ShouldSpec({ Syllable("nu:", Tone.THIRD) to "nǚ", Syllable("nv", Tone.THIRD) to "nǚ", Syllable("r", Tone.FIFTH) to "r", + Syllable("er", Tone.SECOND) to "ér", + Syllable("Er", Tone.SECOND) to "Ér", ) { (syllable, expectedPinyinWithToneMarks) -> syllable.format(TransliterationSystem.PINYIN_WITH_TONE_MARKS) shouldBe expectedPinyinWithToneMarks }