fixed a bad RAsup positioning (hopefully)

This commit is contained in:
minjaesong
2022-02-13 18:13:31 +09:00
parent dd851cdbc9
commit 1445404005
5 changed files with 70 additions and 37 deletions

Binary file not shown.

View File

@@ -30,6 +30,7 @@ import com.badlogic.gdx.graphics.Pixmap
import com.badlogic.gdx.graphics.Texture
import com.badlogic.gdx.graphics.g2d.*
import com.badlogic.gdx.utils.GdxRuntimeException
import com.ibm.icu.impl.Normalizer2Impl.Hangul.isHangul
import net.torvald.terrarumsansbitmap.DiacriticsAnchor
import net.torvald.terrarumsansbitmap.GlyphProps
import net.torvald.terrarumsansbitmap.gdx.TerrarumSansBitmap.Companion.charInfo
@@ -1312,7 +1313,7 @@ class TerrarumSansBitmap(
// reposition devanagari RA-initials into RAsup
i = 0
// dbgprn("seq3 = ${seq3.map { "${it.toCh()}${ZWNJ.toChar()}" }.joinToString(" ")}")
dbgprnLig("seq3 = ${seq3.map { "${it.toCh()}${ZWNJ.toChar()}" }.joinToString(" ")}")
val yankedCharacters = Stack<Pair<Int, CodePoint>>() // Stack of <Position, CodePoint>; codepoint use -1 if not applicable
var yankedDevanagariRaStatus = intArrayOf(0,0) // 0: none, 1: consonants, 2: virama, 3: vowel for this syllable
@@ -1340,44 +1341,54 @@ class TerrarumSansBitmap(
val c = seq3[i]
val cNext = seq3.getOrElse(i+1) { -1 }
val cNext2 = seq3.getOrElse(i+2) { -1 }
// val cNext3 = seq3.getOrElse(i+3) { -1 }
// dbgprn(" र${yankedDevanagariRaStatus[1]} Chars: ${cPrev2.toCh()}${ZWNJ.toChar()} ${cPrev.toCh()}${ZWNJ.toChar()} [ ${c.toCh()}${ZWNJ.toChar()} ] ${cNext.toCh()}${ZWNJ.toChar()} ${cNext2.toCh()}${ZWNJ.toChar()}")
dbgprnLig("${yankedDevanagariRaStatus[1]} Chars: ${cPrev2.toCh()}${ZWNJ.toChar()} ${cPrev.toCh()}${ZWNJ.toChar()} [ ${c.toCh()}${ZWNJ.toChar()} ] ${cNext.toCh()}${ZWNJ.toChar()} ${cNext2.toCh()}${ZWNJ.toChar()}")
// in Regex: RA vir VL* (C vir C (vir C)*)? VR* ᴿ [not V && not vir]
// TERMINATOR: right vowel | non-half consonant before any consonants
if (yankedDevanagariRaStatus[1] == 0 && c == DEVANAGARI_RA && cNext == DEVANAGARI_VIRAMA) {
// dbgprn(" Yanking RA (0 -> 1)")
dbgprnLig(" Yanking RA (0 -> 1)")
yankedCharacters.push(i to c)
changeRaStatus(1)
}
else if (yankedDevanagariRaStatus[1] == 1 && yankedDevanagariRaStatus[0] == 0 && c == DEVANAGARI_VIRAMA) {
// dbgprn(" First Virama (1 -> 2)")
dbgprnLig(" First Virama (1 -> 2)")
changeRaStatus(2)
}
else if (yankedDevanagariRaStatus[1] == 2 && devanagariConsonants.contains(c)) {
// dbgprn(" Consonants after Virama (2 -> 1)")
dbgprnLig(" Consonants after Virama (2 -> 1)")
seq4.add(c)
changeRaStatus(1)
}
else if (yankedDevanagariRaStatus[1] == 3 && devanagariConsonants.contains(c)) {
// dbgprn(" Consonants after Left Vowel (3 -> 1)")
else if (yankedDevanagariRaStatus[1] in listOf(1,3) && devanariConsonantsHalfs.contains(c)) {
dbgprnLig(" Consonants Half Form (${yankedDevanagariRaStatus[1]} -> 3)")
seq4.add(c)
changeRaStatus(3)
}
else if (yankedDevanagariRaStatus[1] == 5 && devanagariConsonants.contains(c)) {
dbgprnLig(" Consonants after Left Vowel (5 -> 1)")
seq4.add(c)
changeRaStatus(1)
}
else if ((yankedDevanagariRaStatus[1] > 0) && devanagariRightVowels.contains(c)) {
// dbgprn(" Right Vowels (${yankedDevanagariRaStatus[1]} -> 4)")
dbgprnLig(" Right Vowels (${yankedDevanagariRaStatus[1]} -> 4)")
seq4.add(c)
changeRaStatus(4)
}
else if ((yankedDevanagariRaStatus[1] in 1..3) && devanagariVowels.contains(c)) {
// dbgprn(" Left Vowels (${yankedDevanagariRaStatus[1]} -> 3)")
dbgprnLig(" Left Vowels (${yankedDevanagariRaStatus[1]} -> 5)")
seq4.add(c)
changeRaStatus(3)
changeRaStatus(5)
}
else if (yankedDevanagariRaStatus[1] > 0 && devanariConsonantsHalfs.contains(cPrev) && devanagariConsonants.contains(c)) {
dbgprnLig(" Consonant Tail after Halfs (${yankedDevanagariRaStatus[1]} -> 9)")
seq4.add(c)
changeRaStatus(9)
}
// -- termination or illegal state for Devanagari RA
else if (yankedDevanagariRaStatus[1] > 0) {
// dbgprn(" Popping out RAsup")
dbgprnLig(" Popping out RAsup")
yankedCharacters.pop()
seq4.add(DEVANAGARI_RA_SUPER)
resetRaStatus()
@@ -1399,7 +1410,9 @@ class TerrarumSansBitmap(
return seq4
}
private fun CodePoint.toCh() = if (this in 0xF0100..0xF02FF) this.puaToUni() else if (this < 65536) "${this.toChar()}" else this.toHex()
private fun dbgprnLig(i: Any) { if (false) println("[${this.javaClass.simpleName}] $i") }
private fun CodePoint.toCh() = if (this >= 0xF0000) this.puaToUni() else if (this < 65536) "${this.toChar()}" else this.toHex()
// nuke this function when the time that compiled bytecode exceeds 64 kb finally arrives
private fun CodePoint.puaToUni() = when (this) {
@@ -1411,6 +1424,9 @@ class TerrarumSansBitmap(
0xF0105 -> "हू"
0xF010B -> "˓"
in 0xF0140..0xF0164 -> "${(this - 0xf0140 + 0x915).toChar()}"
in 0xF0230..0xF0254 -> "${(this - 0xf0230 + 0x915).toChar()}${DEVANAGARI_VIRAMA.toChar()}${ZWJ.toChar()}"
in 0xF0320..0xF0344 -> "${(this - 0xf0320 + 0x915).toChar()}${DEVANAGARI_VIRAMA.toChar()}\u0930"
in 0xF0410..0xF0434 -> "${(this - 0xf0410 + 0x915).toChar()}${DEVANAGARI_VIRAMA.toChar()}\u0930${ZWJ.toChar()}"
else -> this.toHex()
}
@@ -2056,24 +2072,6 @@ class TerrarumSansBitmap(
private val TAMIL_SHRII = 0xF00EE
private val TAMIL_I = 0xBBF
private val devanagariConsonants = ((0x0915..0x0939) + (0x0958..0x095F) + (0x0978..0x097F) + (0xF0140..0xF04FF)).toHashSet()
private val devanagariVowels = ((0x093A..0x093C) + (0x093E..0x094C) + (0x094E..0x094F)).toHashSet()
private val devanagariRightVowels = ((0x093A..0x093C) + (0x093E) + (0x0940..0x094C) + 0x094F).toHashSet()
private val devanagariBaseConsonants = 0x0915..0x0939
private val devanagariBaseConsonantsWithNukta = 0x0958..0x095F
private val devanagariBaseConsonantsExtended = 0x0978..0x097F
private val devanagariPresentationConsonants = 0xF0140..0xF022F
private val devanagariPresentationConsonantsHalf = 0xF0230..0xF031F
private val devanagariPresentationConsonantsWithRa = 0xF0320..0xF040F
private val devanagariPresentationConsonantsWithRaHalf = 0xF0410..0xF04FF
private val devanagariConsonantsNonLig = (devanagariBaseConsonants +
devanagariBaseConsonantsWithNukta + devanagariBaseConsonantsExtended +
devanagariPresentationConsonants + devanagariPresentationConsonantsWithRa).toHashSet()
private val devanariConsonantsHalfs = ((0xF0105..0xF012F) + (0xF0137..0xF013F) + (0xF01C0..0xF01FF)).toHashSet()
private val DEVANAGARI_VIRAMA = 0x94D
private val DEVANAGARI_RA = 0x930.toDevaInternal()
@@ -2117,9 +2115,28 @@ class TerrarumSansBitmap(
private val MARWARI_LIG_DD_R = 0xF0118
private val devanagariConsonants = ((0x0915..0x0939) + (0x0958..0x095F) + (0x0978..0x097F) +
(0xF0140..0xF04FF) + (0xF0106..0xF0109)).toHashSet()
private val devanagariVowels = ((0x093A..0x093C) + (0x093E..0x094C) + (0x094E..0x094F)).toHashSet()
private val devanagariRightVowels = ((0x093A..0x093C) + (0x093E) + (0x0940..0x094C) + 0x094F).toHashSet()
private val devanagariBaseConsonants = 0x0915..0x0939
private val devanagariBaseConsonantsWithNukta = 0x0958..0x095F
private val devanagariBaseConsonantsExtended = 0x0978..0x097F
private val devanagariPresentationConsonants = 0xF0140..0xF022F
private val devanagariPresentationConsonantsHalf = 0xF0230..0xF031F
private val devanagariPresentationConsonantsWithRa = 0xF0320..0xF040F
private val devanagariPresentationConsonantsWithRaHalf = 0xF0410..0xF04FF
private val devanagariConsonantsNonLig = (devanagariBaseConsonants +
devanagariBaseConsonantsWithNukta + devanagariBaseConsonantsExtended +
devanagariPresentationConsonants + devanagariPresentationConsonantsWithRa).toHashSet()
private val devanariConsonantsHalfs = (devanagariPresentationConsonantsHalf +
devanagariPresentationConsonantsWithRaHalf + listOf(DEVANAGARI_HALF_RYA, DEVANAGARI_OPEN_HALF_YA)).toHashSet()
private val DEVANAGARI_HALF_FORMS = 0xF0230 // starting point for Devanagari half forms
private val DEVANAGARI_LIG_X_R = 0xF0410 // starting point for Devanagari ligature CONSONANT+RA
private fun Int.toDevaInternal(): Int {
if (this in 0x0915..0x0939) return this - 0x0915 + 0xF0140

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 45 KiB

View File

@@ -28,4 +28,20 @@
श श्च श्च्य श्छ श्न श्प श्म श्य श्र श्ल श्व श्व्य
ष ष्क ष्क्र ष्ट ष्ट्य ष्ट्र ष्ट्व ष्ठ ष्ठ्य ष्ण ष्ण्य ष्प ष्प्र ष्म ष्य ष्व
स स्क स्त स्त्य स्त्र स्त्र्य स्त्व स्थ स्थ्य स्न स्प स्फ स्म स्म्य स्य स्र स्व स्स्व
ह ह्ण ह्न ह्म ह्य ह्र ह्ल ह्व
ह ह्ण ह्न ह्म ह्य ह्र ह्ल ह्व
विकिपीडिया सभी विषयों पर प्रामाणिक और उपयोग, परिवर्तन
व पुनर्वितरण के लिए स्वतन्त्र ज्ञानकोश बनाने का एक बहुभाषीय
प्रकल्प है। यह यथासम्भव निष्पक्ष दृष्टिकोण वाली सूचना प्रसारित
करने के लिए कृतसंकल्प है। सर्वप्रथम अंग्रेज़ी विकिपीडिया
जनवरी 2001 में आरम्भ किया गया था, और हिन्दी
विकिपीडिया का शुभारम्भ जुलाई 2003 में हुआ। सहायता पृष्ठ
पर जाएं और प्रयोगस्थल में प्रयोग करके देखें कि आप स्वयं
किसी लेख को कैसे परिवर्तित कर सकते हैं।
र्ज्यह
परिवर्तन
र्ग्यह
अर्ग्यिह
अर्त्स्न्यौह
अर्त्स्न्यिह

Binary file not shown.