From 4c0582184fa24863f8373ffdf29e1c52f23c962f Mon Sep 17 00:00:00 2001 From: minjaesong Date: Wed, 19 Jan 2022 14:20:56 +0900 Subject: [PATCH] moar ligs --- assets/devanagari_variable.tga | 2 +- .../gdx/TerrarumSansBitmap.kt | 26 +++++++++++++++--- testing.PNG | Bin 17724 -> 18263 bytes testtext.txt | 2 +- work_files/devanagari_variable.psd | 4 +-- 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/assets/devanagari_variable.tga b/assets/devanagari_variable.tga index c8e750a..62ee182 100644 --- a/assets/devanagari_variable.tga +++ b/assets/devanagari_variable.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:58117e3b5b600d922970998e271ba0c7e01e4ff9620ce37b89119b044c75e01f +oid sha256:7ce47ae3d3faca39ae9baf26ab852cc29a9734f867da8caeac996717da55f091 size 409618 diff --git a/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt b/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt index 140d3ff..5346f27 100755 --- a/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt +++ b/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt @@ -1161,6 +1161,12 @@ class TerrarumSansBitmap( else if (c == DEVANAGARI_RRA && cNext == DEVANAGARI_UU) { seq.add(DEVANAGARI_SYLL_RRUU); i += 1 } + else if (c == DEVANAGARI_HA && cNext == DEVANAGARI_U) { + seq.add(DEVANAGARI_SYLL_HU); i += 1 + } + else if (c == DEVANAGARI_HA && cNext == DEVANAGARI_UU) { + seq.add(DEVANAGARI_SYLL_HUU); i += 1 + } // Unicode Devanagari Rendering Rule R6-R8 // (this must precede the ligaturing-machine coded on the 2nd pass, otherwise the rules below will cause undesirable effects) else if (devanagariConsonants.contains(c) && cNext == DEVANAGARI_VIRAMA && cNext2 == DEVANAGARI_RA) { @@ -1712,17 +1718,21 @@ class TerrarumSansBitmap( private val DEVANAGARI_VIRAMA = 0x94D private val DEVANAGARI_RA = 0x930 - private val DEVANAGARI_RRA = 0x931 private val DEVANAGARI_YA = 0x92F + private val DEVANAGARI_RRA = 0x931 + private val DEVANAGARI_VA = 0x0935 + private val DEVANAGARI_HA = 0x939 private val DEVANAGARI_U = 0x941 private val DEVANAGARI_UU = 0x942 private val DEVANAGARI_SYLL_RU = 0xF0100 private val DEVANAGARI_SYLL_RUU = 0xF0101 - private val DEVANAGARI_SYLL_RRU = 0xF0140 - private val DEVANAGARI_SYLL_RRUU = 0xF0141 + private val DEVANAGARI_SYLL_RRU = 0xF0102 + private val DEVANAGARI_SYLL_RRUU = 0xF0103 + private val DEVANAGARI_SYLL_HU = 0xF0130 + private val DEVANAGARI_SYLL_HUU = 0xF0131 - private val DEVANAGARI_OPEN_YA = 0xF0103 + private val DEVANAGARI_OPEN_YA = 0xF0137 private val DEVANAGARI_RA_SUPER = 0xF0104 private val DEVANAGARI_EYELASH_RA = 0xF012A @@ -1784,10 +1794,12 @@ class TerrarumSansBitmap( 0x0919 -> /* Devanagari NGA */ when (c2) { 0x0917 -> return listOf(0xF0182) // NG.G 0x092E -> return listOf(0xF0183) // NG.M + DEVANAGARI_VA -> return listOf(0xF019C) // NG.V DEVANAGARI_YA -> return c1.toHalfFormOrVirama() + DEVANAGARI_OPEN_YA // NG.Y else -> return c1.toHalfFormOrVirama() + c2 } 0x091B -> /* Devanagari CHA */ when (c2) { + DEVANAGARI_VA -> return listOf(0xF019D) // CH.V DEVANAGARI_YA -> return c1.toHalfFormOrVirama() + DEVANAGARI_OPEN_YA // CH.Y else -> return c1.toHalfFormOrVirama() + c2 } @@ -1800,22 +1812,26 @@ class TerrarumSansBitmap( 0x091F -> /* Devanagari TTA */ when (c2) { 0x091F -> return listOf(0xF0185) // TT.TT 0x0920 -> return listOf(0xF0186) // TT.TTH + DEVANAGARI_VA -> return listOf(0xF019E) // TT.V DEVANAGARI_YA -> return c1.toHalfFormOrVirama() + DEVANAGARI_OPEN_YA // TT.Y else -> return c1.toHalfFormOrVirama() + c2 } 0x0920 -> /* Devanagari TTHA */ when (c2) { 0x0920 -> return listOf(0xF0187) // TTH.TTH + DEVANAGARI_VA -> return listOf(0xF019F) // TTH.V DEVANAGARI_YA -> return c1.toHalfFormOrVirama() + DEVANAGARI_OPEN_YA // TTH.Y else -> return c1.toHalfFormOrVirama() + c2 } 0x0921 -> /* Devanagari DDA */ when (c2) { 0x0921 -> return listOf(0xF0188) // DD.DD 0x0922 -> return listOf(0xF0189) // DD.DDH + DEVANAGARI_VA -> return listOf(0xF01A0) // DD.V DEVANAGARI_YA -> return c1.toHalfFormOrVirama() + DEVANAGARI_OPEN_YA // DD.Y else -> return c1.toHalfFormOrVirama() + c2 } 0x0922 -> /* Devanagari DDHA */ when (c2) { 0x0922 -> return listOf(0xF018A) // DDH.DDH + DEVANAGARI_VA -> return listOf(0xF01A1) // DDH.V DEVANAGARI_YA -> return c1.toHalfFormOrVirama() + DEVANAGARI_OPEN_YA // DDH.Y else -> return c1.toHalfFormOrVirama() + c2 } @@ -1825,6 +1841,8 @@ class TerrarumSansBitmap( else -> return c1.toHalfFormOrVirama() + c2 } 0x0926 -> /* Devanagari DA */ when (c2) { + 0x0917 -> return listOf(0xF019A) // D.G + 0x0918 -> return listOf(0xF019B) // D.GH 0x0926 -> return listOf(0xF018C) // D.D 0x0927 -> return listOf(0xF018D) // D.DH 0x092C -> return listOf(0xF018E) // D.B diff --git a/testing.PNG b/testing.PNG index 077e5cf67552cf075b83960d48dbe40416cd7e60..7575d5de8a8da0ddca724d348891994e597febe6 100755 GIT binary patch delta 4453 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 Fe*-*9r6B+S diff --git a/testtext.txt b/testtext.txt index 68902e0..324dbb6 100755 --- a/testtext.txt +++ b/testtext.txt @@ -1,4 +1,4 @@ फ़ॊण्ज़ीणू क्की क्कि र्क र्त्सा र्र्ल ऱ्ड क्राप् ठ्री त्र् स्त्रक्ष्य ह्णह्नह्मह्यह्लह्वह्र णनमयलव ज़्लतान छात्त्र छात्र क्ष्र ज्ञ्र -ङ्यछ्यट्यठ्यड्यढ्यद्यश्यह्य ढा ऱुमिक्यूब \ No newline at end of file +ङ्यछ्यट्यठ्यड्यढ्यद्यश्यह्य ढा ऱुमिक्युब हुहू दुदू द्गद्घद्द ढ्ढढ्वद्व \ No newline at end of file diff --git a/work_files/devanagari_variable.psd b/work_files/devanagari_variable.psd index 20e5cb8..043f716 100644 --- a/work_files/devanagari_variable.psd +++ b/work_files/devanagari_variable.psd @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:348299c30b81f3288924c6764cecac7b27e8b6627c768e5cb1b898155970cab9 -size 450110 +oid sha256:1a58a848383d361b441f39f5309887fb7066039575dabad984893fcd2a1cd89c +size 455972