mirror of
https://github.com/curioustorvald/Terrarum-sans-bitmap.git
synced 2026-03-10 05:11:51 +09:00
I think I've nailed down the RAsup rendering
This commit is contained in:
BIN
assets/devanagari_variable.tga
LFS
BIN
assets/devanagari_variable.tga
LFS
Binary file not shown.
@@ -45,6 +45,7 @@ data class GlyphProps(
|
||||
const val STACK_DOWN = 1
|
||||
const val STACK_BEFORE_N_AFTER = 2
|
||||
const val STACK_UP_N_DOWN = 3
|
||||
const val STACK_DONT = 4
|
||||
|
||||
const val DIA_OVERLAY = 2
|
||||
// const val DIA_JOINER = 2
|
||||
|
||||
@@ -713,7 +713,12 @@ class TerrarumSansBitmap(
|
||||
else writeOnTop = writeOnTop.ushr(28) and 15
|
||||
}
|
||||
|
||||
val stackWhere = (0..1).fold(0) { acc, y -> acc or ((pixmap.getPixel(codeStartX, codeStartY + y + 18).and(255) != 0).toInt() shl y) }
|
||||
val stackWhere0 = pixmap.getPixel(codeStartX, codeStartY + 18).tagify()
|
||||
val stackWhere1 = pixmap.getPixel(codeStartX, codeStartY + 19).tagify()
|
||||
|
||||
val stackWhere = if (stackWhere0 == 0x00FF00FF && stackWhere1 == 0x00FF00FF)
|
||||
GlyphProps.STACK_DONT
|
||||
else (0..1).fold(0) { acc, y -> acc or ((pixmap.getPixel(codeStartX, codeStartY + y + 18).and(255) != 0).toInt() shl y) }
|
||||
|
||||
glyphProps[code] = GlyphProps(width, isLowHeight, nudgeX, nudgeY, diacriticsAnchors, alignWhere, writeOnTop, stackWhere, IntArray(15), hasKernData, isKernYtype, kerningMask, directiveOpcode, directiveArg1, directiveArg2)
|
||||
|
||||
@@ -745,7 +750,7 @@ class TerrarumSansBitmap(
|
||||
// if (diacriticsAnchors.any { it.xUsed || it.yUsed }) dbgprn("${code.charInfo()} ${diacriticsAnchors.filter { it.xUsed || it.yUsed }.joinToString()}")
|
||||
// if (directiveOpcode != 0) dbgprn("Directive opcode ${directiveOpcode.toString(2)}: ${code.charInfo()}")
|
||||
// if (glyphProps[code]?.isPragma("replacewith") == true) dbgprn("Replacer: ${code.charInfo()} into ${glyphProps[code]!!.extInfo.map { it.toString(16) }.joinToString()}")
|
||||
|
||||
// if (stackWhere == GlyphProps.STACK_DONT) dbgprn("Diacritics Don't stack: ${code.charInfo()}")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1037,6 +1042,16 @@ class TerrarumSansBitmap(
|
||||
val seq2 = CodepointSequence()
|
||||
|
||||
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
|
||||
|
||||
fun changeRaStatus(n: Int) {
|
||||
yankedDevanagariRaStatus[0] = yankedDevanagariRaStatus[1]
|
||||
yankedDevanagariRaStatus[1] = n
|
||||
}
|
||||
fun resetRaStatus() {
|
||||
yankedDevanagariRaStatus[0] = 0
|
||||
yankedDevanagariRaStatus[1] = 0
|
||||
}
|
||||
|
||||
fun emptyOutYanked() {
|
||||
while (!yankedCharacters.empty()) {
|
||||
@@ -1170,7 +1185,7 @@ class TerrarumSansBitmap(
|
||||
// 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) {
|
||||
seq.addAll(toRaAppended(c))
|
||||
seq.addAll(ligateIndicConsonants(c, cNext2))
|
||||
i += 2
|
||||
}
|
||||
// Unicode Devanagari Rendering Rule R5
|
||||
@@ -1179,18 +1194,38 @@ class TerrarumSansBitmap(
|
||||
i += 1
|
||||
}
|
||||
// Unicode Devanagari Rendering Rule R2-R4
|
||||
else if (c == DEVANAGARI_RA && cNext == DEVANAGARI_VIRAMA && cNext2 != DEVANAGARI_RA) {
|
||||
yankedCharacters.push(i to c)
|
||||
i += 1
|
||||
// in Regex: RA (vir C)+ V* ᴿ [not V && not vir]
|
||||
else if (yankedDevanagariRaStatus[1] == 1 && c == DEVANAGARI_VIRAMA) {
|
||||
if (yankedDevanagariRaStatus[0] != 0)
|
||||
seq.add(c)
|
||||
changeRaStatus(2)
|
||||
}
|
||||
else if (yankedDevanagariRaStatus[1] == 2 && devanagariConsonants.contains(c)) {
|
||||
seq.add(c)
|
||||
changeRaStatus(1)
|
||||
}
|
||||
else if ((yankedDevanagariRaStatus[1] == 1 || yankedDevanagariRaStatus[1] == 3) && devanagariVerbs.contains(c)) {
|
||||
seq.add(c)
|
||||
changeRaStatus(3)
|
||||
}
|
||||
// else if (yankedDevanagariRaStatus == 3 && !devanagariVerbs.contains(c)) {
|
||||
else if (yankedDevanagariRaStatus[1] > 0 && yankedCharacters.peek().second == DEVANAGARI_RA) { // termination or illegal state for Devanagari RA
|
||||
yankedCharacters.pop()
|
||||
seq.add(DEVANAGARI_RA_SUPER)
|
||||
resetRaStatus()
|
||||
i-- // scan this character again next time
|
||||
}
|
||||
else if (c == DEVANAGARI_RA && cNext == DEVANAGARI_VIRAMA && devanagariConsonants.contains(c)) {
|
||||
yankedCharacters.push(i to c)
|
||||
changeRaStatus(1)
|
||||
}
|
||||
// Unicode Devanagari Rendering Rule R2-R4
|
||||
else if (!isDevanagari(c) && !yankedCharacters.empty()) {
|
||||
emptyOutYanked()
|
||||
seq.add(c)
|
||||
resetRaStatus()
|
||||
}
|
||||
// WIP
|
||||
// END of devanagari string replacer
|
||||
|
||||
// rearrange {letter, before-and-after diacritics} as {before-diacritics, letter, after-diacritics}
|
||||
else if (glyphProps[c]?.stackWhere == GlyphProps.STACK_BEFORE_N_AFTER) {
|
||||
val diacriticsProp = glyphProps[c]!!
|
||||
@@ -1710,6 +1745,7 @@ class TerrarumSansBitmap(
|
||||
private val TAMIL_SHRII = 0xF00EE
|
||||
|
||||
private val devanagariConsonants = ((0x0915..0x0939) + (0x0958..0x095F) + (0x0978..0x097F) + (0xF0105..0xF01FF)).toIntArray()
|
||||
private val devanagariVerbs = ((0x093A..0x093C) + (0x093E..0x094C) + (0x094E..0x094F)).toIntArray()
|
||||
|
||||
private val devanagariBaseConsonants = 0x0915..0x0939
|
||||
private val devanagariBaseConsonantsWithNukta = 0x0958..0x095F
|
||||
|
||||
BIN
testing.PNG
BIN
testing.PNG
Binary file not shown.
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 24 KiB |
@@ -1,8 +1,11 @@
|
||||
|
||||
फ़ॊण्ज़ीणू क्की क्कि र्क र्त्सा र्र्ल ऱ्ड क्राप् ठ्री त्र् स्त्रक्ष्य
|
||||
ह्णह्नह्मह्यह्लह्वह्र णनमयलव ज़्लतान छात्त्र छात्र क्ष्र ज्ञ्र
|
||||
ङ्यछ्यट्यठ्यड्यढ्यद्यश्यह्य ढा ऱुमिक्युब हुहू दुदू द्गद्घद्द ढ्ढढ्वद्व
|
||||
क्यङ्यछ्यट्यठ्यड्यढ्यद्यश्यह्य ढा ऱुमिक्युब हुहू दुदू द्गद्घद्द ढ्ढढ्वद्व
|
||||
ग्र्क्र क्श्र त्रत्त्र क्ष्र्प ढ्य्ब न्न्ग
|
||||
तत्र अग्निः अस्ति। अष्टाध्यायी प्च प्छ
|
||||
र्त्सार्पै « R.T.SAA R.PAI (RAsup must be above last 2 stems)
|
||||
ऱ्त्साऱ्पै « RR.T.SAA RR.PAI (must use eyelash-RA)
|
||||
शर्करा « RAsup must be above KA
|
||||
अंग्रेजी
|
||||
अंग्रेजी
|
||||
ख्य
|
||||
மோநௌ « check the sanity of glyph reordering
|
||||
Binary file not shown.
Reference in New Issue
Block a user