mirror of
https://github.com/curioustorvald/Terrarum-sans-bitmap.git
synced 2026-03-07 11:51:50 +09:00
fixed a bad RAsup positioning (hopefully)
This commit is contained in:
BIN
assets/devanagari_variable.tga
LFS
BIN
assets/devanagari_variable.tga
LFS
Binary file not shown.
@@ -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
|
||||
|
||||
BIN
testing.PNG
BIN
testing.PNG
Binary file not shown.
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 45 KiB |
18
testtext.txt
18
testtext.txt
@@ -28,4 +28,20 @@
|
||||
श श्च श्च्य श्छ श्न श्प श्म श्य श्र श्ल श्व श्व्य
|
||||
ष ष्क ष्क्र ष्ट ष्ट्य ष्ट्र ष्ट्व ष्ठ ष्ठ्य ष्ण ष्ण्य ष्प ष्प्र ष्म ष्य ष्व
|
||||
स स्क स्त स्त्य स्त्र स्त्र्य स्त्व स्थ स्थ्य स्न स्प स्फ स्म स्म्य स्य स्र स्व स्स्व
|
||||
ह ह्ण ह्न ह्म ह्य ह्र ह्ल ह्व
|
||||
ह ह्ण ह्न ह्म ह्य ह्र ह्ल ह्व
|
||||
|
||||
विकिपीडिया सभी विषयों पर प्रामाणिक और उपयोग, परिवर्तन
|
||||
व पुनर्वितरण के लिए स्वतन्त्र ज्ञानकोश बनाने का एक बहुभाषीय
|
||||
प्रकल्प है। यह यथासम्भव निष्पक्ष दृष्टिकोण वाली सूचना प्रसारित
|
||||
करने के लिए कृतसंकल्प है। सर्वप्रथम अंग्रेज़ी विकिपीडिया
|
||||
जनवरी 2001 में आरम्भ किया गया था, और हिन्दी
|
||||
विकिपीडिया का शुभारम्भ जुलाई 2003 में हुआ। सहायता पृष्ठ
|
||||
पर जाएं और प्रयोगस्थल में प्रयोग करके देखें कि आप स्वयं
|
||||
किसी लेख को कैसे परिवर्तित कर सकते हैं।
|
||||
|
||||
र्ज्यह
|
||||
परिवर्तन
|
||||
र्ग्यह
|
||||
अर्ग्यिह
|
||||
अर्त्स्न्यौह
|
||||
अर्त्स्न्यिह
|
||||
Binary file not shown.
Reference in New Issue
Block a user