Fix formatting to Pinyin with tone marks for capital vowels #4

Merged
marvinelsen merged 1 commits from fix-capital-vowels into main 2024-09-20 13:51:32 +00:00
3 changed files with 14 additions and 3 deletions

View File

@ -5,7 +5,7 @@ plugins {
} }
group = "com.marvinelsen" group = "com.marvinelsen"
version = "1.0.0" version = "1.0.1"
repositories { repositories {
mavenCentral() mavenCentral()

View File

@ -88,13 +88,13 @@ data class Syllable(
"'$pinyinSyllableWithoutTone is not a valid Pinyin syllable." "'$pinyinSyllableWithoutTone is not a valid Pinyin syllable."
} }
if (pinyinSyllableWithoutTone == "r" && tone == Tone.FIFTH) { if (pinyinSyllableWithoutTone.lowercase() == "r" && tone == Tone.FIFTH) {
return pinyinSyllableWithoutTone return pinyinSyllableWithoutTone
} }
val sanitizedPinyinSyllableWithoutTone = pinyinSyllableWithoutTone.replace("v", "ü").replace("u:", "ü") 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 { val vowelIndex = when {
'a' in characterToIndex -> characterToIndex['a']!! 'a' in characterToIndex -> characterToIndex['a']!!
'o' in characterToIndex -> characterToIndex['o']!! 'o' in characterToIndex -> characterToIndex['o']!!

View File

@ -18,6 +18,9 @@ class SyllableTest : ShouldSpec({
"nü3" to Syllable("", Tone.THIRD), "nü3" to Syllable("", Tone.THIRD),
"nu:3" to Syllable("nu:", Tone.THIRD), "nu:3" to Syllable("nu:", Tone.THIRD),
"r5" to Syllable("r", Tone.FIFTH), "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) -> ) { (pinyinWithNumber, expectedSyllable) ->
Syllable.fromPinyinWithToneNumber(pinyinWithNumber) shouldBe expectedSyllable Syllable.fromPinyinWithToneNumber(pinyinWithNumber) shouldBe expectedSyllable
} }
@ -56,6 +59,9 @@ class SyllableTest : ShouldSpec({
Syllable("nu:", Tone.THIRD) to "ㄋㄩˇ", Syllable("nu:", Tone.THIRD) to "ㄋㄩˇ",
Syllable("nv", Tone.THIRD) to "ㄋㄩˇ", Syllable("nv", Tone.THIRD) to "ㄋㄩˇ",
Syllable("r", Tone.FIFTH) to "˙ㄦ", Syllable("r", Tone.FIFTH) to "˙ㄦ",
Syllable("R", Tone.FIFTH) to "˙ㄦ",
Syllable("er", Tone.SECOND) to "ㄦˊ",
Syllable("Er", Tone.SECOND) to "ㄦˊ",
) { (syllable, expectedZhuyin) -> ) { (syllable, expectedZhuyin) ->
syllable.format(TransliterationSystem.ZHUYIN) shouldBe expectedZhuyin syllable.format(TransliterationSystem.ZHUYIN) shouldBe expectedZhuyin
} }
@ -73,6 +79,9 @@ class SyllableTest : ShouldSpec({
Syllable("nu:", Tone.THIRD) to "nu:3", Syllable("nu:", Tone.THIRD) to "nu:3",
Syllable("nv", Tone.THIRD) to "nv3", Syllable("nv", Tone.THIRD) to "nv3",
Syllable("r", Tone.FIFTH) to "r5", 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, expectedPinyinWithToneNumbers) ->
syllable.format(TransliterationSystem.PINYIN_WITH_TONE_NUMBERS) shouldBe expectedPinyinWithToneNumbers syllable.format(TransliterationSystem.PINYIN_WITH_TONE_NUMBERS) shouldBe expectedPinyinWithToneNumbers
} }
@ -92,6 +101,8 @@ class SyllableTest : ShouldSpec({
Syllable("nu:", Tone.THIRD) to "nǚ", Syllable("nu:", Tone.THIRD) to "nǚ",
Syllable("nv", Tone.THIRD) to "nǚ", Syllable("nv", Tone.THIRD) to "nǚ",
Syllable("r", Tone.FIFTH) to "r", Syllable("r", Tone.FIFTH) to "r",
Syllable("er", Tone.SECOND) to "ér",
Syllable("Er", Tone.SECOND) to "Ér",
) { (syllable, expectedPinyinWithToneMarks) -> ) { (syllable, expectedPinyinWithToneMarks) ->
syllable.format(TransliterationSystem.PINYIN_WITH_TONE_MARKS) shouldBe expectedPinyinWithToneMarks syllable.format(TransliterationSystem.PINYIN_WITH_TONE_MARKS) shouldBe expectedPinyinWithToneMarks
} }