From b3c1327dc48097210a1e1ce20e5ed60448f82977 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Wed, 26 Jan 2022 14:41:54 +0900 Subject: [PATCH] IPA intonation graph implementation --- .../gdx/TerrarumSansBitmap.kt | 45 +++++++++++++++--- testing.PNG | Bin 29695 -> 29926 bytes testtext.txt | 3 +- 3 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt b/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt index 7cfe43c..5a7b982 100755 --- a/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt +++ b/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt @@ -1042,6 +1042,7 @@ class TerrarumSansBitmap( private fun CodepointSequence.normalise(): CodepointSequence { val seq = CodepointSequence() val seq2 = CodepointSequence() + val seq3 = CodepointSequence() val yankedCharacters = Stack>() // Stack of ; codepoint use -1 if not applicable var yankedDevanagariRaStatus = intArrayOf(0,0) // 0: none, 1: consonants, 2: virama, 3: vowel for this syllable @@ -1302,10 +1303,10 @@ class TerrarumSansBitmap( // second scan - // swap position of {letter, diacritics that comes before the letter} - // reposition [cluster, align-before, align-after] into [align-before, cluster, align-after] i = 0 while (i <= seq.lastIndex) { + // swap position of {letter, diacritics that comes before the letter} + // reposition [cluster, align-before, align-after] into [align-before, cluster, align-after] if (i > 0 && (glyphProps[seq[i]] ?: nullProp).alignWhere == GlyphProps.ALIGN_BEFORE) { val vowel = seq[i] // dbgprn("Vowel realign: index $i, ${vowel.charInfo()}") @@ -1337,20 +1338,45 @@ class TerrarumSansBitmap( } + // continuous ligation + i = 0 + while (i < seq.size) { + + val cPrev = seq.getOrElse(i-1) { -1 } + val c = seq[i] + val cNext = seq.getOrElse(i+1) { -1 } + + // ligate IPA intonation graph + if (c in 0x2E5..0x2E9 && cNext in 0x2E5..0x2E9) { + seq2.add(0x200A) + seq2.add(getIntonationGraph(c-0x2E5, cNext-0x2E5)) + } + else if (cPrev in 0x2E5..0x2E9 && c in 0x2E5..0x2E9 && cNext !in 0x2E5..0x2E9) { + seq2.add(0xFFE39) + } + else { + seq2.add(c) + } + + i++ + } + + // unpack replacewith - seq.forEach { + // also ligate IPA intonation graph + seq2.forEach { if (glyphProps[it]?.isPragma("replacewith") == true) { // dbgprn("Replacing ${it.charInfo()} into: ${glyphProps[it]!!.extInfo.map { it.toString(16) }.joinToString()}") glyphProps[it]!!.forEachExtInfo { - seq2.add(it) + seq3.add(it) } } else { - seq2.add(it) + seq3.add(it) } } - return seq2 + return seq3 } /** Takes input string, do normalisation, and returns sequence of codepoints (Int) @@ -2023,6 +2049,13 @@ class TerrarumSansBitmap( } } + /** + * @param tone1 0..4 where 0 is extra-high + */ + private fun getIntonationGraph(tone1: Int, tone2: Int): CodePoint { + return 0xFFE20 + tone1 * 5 + tone2 + } + private fun Int.toHex() = "U+${this.toString(16).padStart(4, '0').toUpperCase()}" diff --git a/testing.PNG b/testing.PNG index 2db982957a06a920bd1a5e1e9b3a0adc53f88dcf..6ed812c01d9a57646aa2ce28dcb64a9c5daacc13 100755 GIT binary patch literal 29926 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 literal 29695 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 S=FJB$M-CqMtN8o5EB_0Q@I4U# diff --git a/testtext.txt b/testtext.txt index 79fd4d5..b7b9d5a 100755 --- a/testtext.txt +++ b/testtext.txt @@ -17,4 +17,5 @@ भारतीय अक्षर जटिल हैं क्ष्फ क्षफ अऺ कृकॄ ऄअआऑऒओऔ ॲॳॴॵॶॷ -˥˦˧˨˩˥˧˦˨˨˩˧˩˦˥˦˩˧˩˨˩˩˩ \ No newline at end of file +˩˥˦˧˨˩˥˧˦˨˨˩˧˩˦˥˦˩˧˩˨˩ +˩ \ No newline at end of file