mirror of
https://github.com/curioustorvald/Terrarum-sans-bitmap.git
synced 2026-06-18 03:14:04 +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.Texture
|
||||||
import com.badlogic.gdx.graphics.g2d.*
|
import com.badlogic.gdx.graphics.g2d.*
|
||||||
import com.badlogic.gdx.utils.GdxRuntimeException
|
import com.badlogic.gdx.utils.GdxRuntimeException
|
||||||
|
import com.ibm.icu.impl.Normalizer2Impl.Hangul.isHangul
|
||||||
import net.torvald.terrarumsansbitmap.DiacriticsAnchor
|
import net.torvald.terrarumsansbitmap.DiacriticsAnchor
|
||||||
import net.torvald.terrarumsansbitmap.GlyphProps
|
import net.torvald.terrarumsansbitmap.GlyphProps
|
||||||
import net.torvald.terrarumsansbitmap.gdx.TerrarumSansBitmap.Companion.charInfo
|
import net.torvald.terrarumsansbitmap.gdx.TerrarumSansBitmap.Companion.charInfo
|
||||||
@@ -1312,7 +1313,7 @@ class TerrarumSansBitmap(
|
|||||||
|
|
||||||
// reposition devanagari RA-initials into RAsup
|
// reposition devanagari RA-initials into RAsup
|
||||||
i = 0
|
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
|
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
|
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 c = seq3[i]
|
||||||
val cNext = seq3.getOrElse(i+1) { -1 }
|
val cNext = seq3.getOrElse(i+1) { -1 }
|
||||||
val cNext2 = seq3.getOrElse(i+2) { -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]
|
// 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) {
|
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)
|
yankedCharacters.push(i to c)
|
||||||
changeRaStatus(1)
|
changeRaStatus(1)
|
||||||
}
|
}
|
||||||
else if (yankedDevanagariRaStatus[1] == 1 && yankedDevanagariRaStatus[0] == 0 && c == DEVANAGARI_VIRAMA) {
|
else if (yankedDevanagariRaStatus[1] == 1 && yankedDevanagariRaStatus[0] == 0 && c == DEVANAGARI_VIRAMA) {
|
||||||
// dbgprn(" First Virama (1 -> 2)")
|
dbgprnLig(" First Virama (1 -> 2)")
|
||||||
changeRaStatus(2)
|
changeRaStatus(2)
|
||||||
}
|
}
|
||||||
else if (yankedDevanagariRaStatus[1] == 2 && devanagariConsonants.contains(c)) {
|
else if (yankedDevanagariRaStatus[1] == 2 && devanagariConsonants.contains(c)) {
|
||||||
// dbgprn(" Consonants after Virama (2 -> 1)")
|
dbgprnLig(" Consonants after Virama (2 -> 1)")
|
||||||
seq4.add(c)
|
seq4.add(c)
|
||||||
changeRaStatus(1)
|
changeRaStatus(1)
|
||||||
}
|
}
|
||||||
else if (yankedDevanagariRaStatus[1] == 3 && devanagariConsonants.contains(c)) {
|
else if (yankedDevanagariRaStatus[1] in listOf(1,3) && devanariConsonantsHalfs.contains(c)) {
|
||||||
// dbgprn(" Consonants after Left Vowel (3 -> 1)")
|
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)
|
seq4.add(c)
|
||||||
changeRaStatus(1)
|
changeRaStatus(1)
|
||||||
}
|
}
|
||||||
else if ((yankedDevanagariRaStatus[1] > 0) && devanagariRightVowels.contains(c)) {
|
else if ((yankedDevanagariRaStatus[1] > 0) && devanagariRightVowels.contains(c)) {
|
||||||
// dbgprn(" Right Vowels (${yankedDevanagariRaStatus[1]} -> 4)")
|
dbgprnLig(" Right Vowels (${yankedDevanagariRaStatus[1]} -> 4)")
|
||||||
seq4.add(c)
|
seq4.add(c)
|
||||||
changeRaStatus(4)
|
changeRaStatus(4)
|
||||||
}
|
}
|
||||||
else if ((yankedDevanagariRaStatus[1] in 1..3) && devanagariVowels.contains(c)) {
|
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)
|
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
|
// -- termination or illegal state for Devanagari RA
|
||||||
else if (yankedDevanagariRaStatus[1] > 0) {
|
else if (yankedDevanagariRaStatus[1] > 0) {
|
||||||
// dbgprn(" Popping out RAsup")
|
dbgprnLig(" Popping out RAsup")
|
||||||
yankedCharacters.pop()
|
yankedCharacters.pop()
|
||||||
seq4.add(DEVANAGARI_RA_SUPER)
|
seq4.add(DEVANAGARI_RA_SUPER)
|
||||||
resetRaStatus()
|
resetRaStatus()
|
||||||
@@ -1399,7 +1410,9 @@ class TerrarumSansBitmap(
|
|||||||
return seq4
|
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
|
// nuke this function when the time that compiled bytecode exceeds 64 kb finally arrives
|
||||||
private fun CodePoint.puaToUni() = when (this) {
|
private fun CodePoint.puaToUni() = when (this) {
|
||||||
@@ -1411,6 +1424,9 @@ class TerrarumSansBitmap(
|
|||||||
0xF0105 -> "हू"
|
0xF0105 -> "हू"
|
||||||
0xF010B -> "˓"
|
0xF010B -> "˓"
|
||||||
in 0xF0140..0xF0164 -> "${(this - 0xf0140 + 0x915).toChar()}"
|
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()
|
else -> this.toHex()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2056,24 +2072,6 @@ class TerrarumSansBitmap(
|
|||||||
private val TAMIL_SHRII = 0xF00EE
|
private val TAMIL_SHRII = 0xF00EE
|
||||||
private val TAMIL_I = 0xBBF
|
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_VIRAMA = 0x94D
|
||||||
private val DEVANAGARI_RA = 0x930.toDevaInternal()
|
private val DEVANAGARI_RA = 0x930.toDevaInternal()
|
||||||
@@ -2117,9 +2115,28 @@ class TerrarumSansBitmap(
|
|||||||
private val MARWARI_LIG_DD_R = 0xF0118
|
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 {
|
private fun Int.toDevaInternal(): Int {
|
||||||
if (this in 0x0915..0x0939) return this - 0x0915 + 0xF0140
|
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 |
16
testtext.txt
16
testtext.txt
@@ -29,3 +29,19 @@
|
|||||||
ष ष्क ष्क्र ष्ट ष्ट्य ष्ट्र ष्ट्व ष्ठ ष्ठ्य ष्ण ष्ण्य ष्प ष्प्र ष्म ष्य ष्व
|
ष ष्क ष्क्र ष्ट ष्ट्य ष्ट्र ष्ट्व ष्ठ ष्ठ्य ष्ण ष्ण्य ष्प ष्प्र ष्म ष्य ष्व
|
||||||
स स्क स्त स्त्य स्त्र स्त्र्य स्त्व स्थ स्थ्य स्न स्प स्फ स्म स्म्य स्य स्र स्व स्स्व
|
स स्क स्त स्त्य स्त्र स्त्र्य स्त्व स्थ स्थ्य स्न स्प स्फ स्म स्म्य स्य स्र स्व स्स्व
|
||||||
ह ह्ण ह्न ह्म ह्य ह्र ह्ल ह्व
|
ह ह्ण ह्न ह्म ह्य ह्र ह्ल ह्व
|
||||||
|
|
||||||
|
विकिपीडिया सभी विषयों पर प्रामाणिक और उपयोग, परिवर्तन
|
||||||
|
व पुनर्वितरण के लिए स्वतन्त्र ज्ञानकोश बनाने का एक बहुभाषीय
|
||||||
|
प्रकल्प है। यह यथासम्भव निष्पक्ष दृष्टिकोण वाली सूचना प्रसारित
|
||||||
|
करने के लिए कृतसंकल्प है। सर्वप्रथम अंग्रेज़ी विकिपीडिया
|
||||||
|
जनवरी 2001 में आरम्भ किया गया था, और हिन्दी
|
||||||
|
विकिपीडिया का शुभारम्भ जुलाई 2003 में हुआ। सहायता पृष्ठ
|
||||||
|
पर जाएं और प्रयोगस्थल में प्रयोग करके देखें कि आप स्वयं
|
||||||
|
किसी लेख को कैसे परिवर्तित कर सकते हैं।
|
||||||
|
|
||||||
|
र्ज्यह
|
||||||
|
परिवर्तन
|
||||||
|
र्ग्यह
|
||||||
|
अर्ग्यिह
|
||||||
|
अर्त्स्न्यौह
|
||||||
|
अर्त्स्न्यिह
|
||||||
Binary file not shown.
Reference in New Issue
Block a user