diff --git a/assets/cyrilic_bulgarian_variable.tga b/assets/cyrilic_bulgarian_variable.tga index 8839264..0b7625d 100755 --- a/assets/cyrilic_bulgarian_variable.tga +++ b/assets/cyrilic_bulgarian_variable.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:97a1a2549218e98e75f98d1f39462b60d14cfe44eb5be6265b08194902ac6134 +oid sha256:9f64ff317340cab121019f977fdc7925f9d46695fd07f9f52b61170ba8458920 size 122898 diff --git a/assets/cyrilic_serbian_variable.tga b/assets/cyrilic_serbian_variable.tga index 18c0271..0077280 100755 --- a/assets/cyrilic_serbian_variable.tga +++ b/assets/cyrilic_serbian_variable.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e50f1b0703dcd9888bf7e4d06f3df43604fcf32e3b85f7f9d969f2fdff285df1 +oid sha256:f596efb47acf07991623de8112c7e0388983982ceefb9f5acda45c8c7afb1f58 size 122898 diff --git a/assets/cyrilic_variable.tga b/assets/cyrilic_variable.tga index 3a32dc9..54f9139 100755 --- a/assets/cyrilic_variable.tga +++ b/assets/cyrilic_variable.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:17dd6d5500c1b903938924092b3220e2b0fc8945dfef890c0fdcfd44fadce67d +oid sha256:45938715499aff569d00df3fc551d76f0d71be0c1b0cd9809b4c2f2d1d71868e size 389138 diff --git a/demo.PNG b/demo.PNG index d8d0cef..e66a328 100644 Binary files a/demo.PNG and b/demo.PNG differ diff --git a/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt b/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt index fbdfe90..70e0c27 100755 --- a/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt +++ b/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt @@ -173,7 +173,7 @@ class TerrarumSansBitmap( private val glyphProps = HashMap() private val sheets: Array - private var charsetOverride = 0 +// private var charsetOverride = 0 private val tempDir = System.getProperty("java.io.tmpdir") // private val tempFiles = ArrayList() @@ -375,8 +375,9 @@ class TerrarumSansBitmap( var index = 0 while (index <= textBuffer.lastIndex) { try { - val c = textBuffer[index] + var c = textBuffer[index] val sheetID = getSheetType(c) + val (sheetX, sheetY) = if (index == 0) getSheetwisePosition(0, c) else getSheetwisePosition(textBuffer[index - 1], c) @@ -390,9 +391,6 @@ class TerrarumSansBitmap( renderCol = getColour(c) } } - else if (isCharsetOverride(c)) { - charsetOverride = c - CHARSET_OVERRIDE_DEFAULT - } else if (sheetID == SHEET_HANGUL) { // Flookahead for {I, P, F} @@ -491,9 +489,9 @@ class TerrarumSansBitmap( } fun getSheetType(c: CodePoint): Int { - if (charsetOverride == 1 && isBulgarian(c)) + if (isBulgarian(c)) return SHEET_BULGARIAN_VARW - else if (charsetOverride == 2 && isBulgarian(c)) + else if (isSerbian(c)) return SHEET_SERBIAN_VARW else if (isHangul(c)) return SHEET_HANGUL @@ -525,7 +523,8 @@ class TerrarumSansBitmap( SHEET_IPA_VARW -> ipaIndexY(ch) SHEET_RUNIC -> runicIndexY(ch) SHEET_LATIN_EXT_ADD_VARW -> latinExtAddY(ch) - SHEET_BULGARIAN_VARW, SHEET_SERBIAN_VARW -> cyrilicIndexY(ch) + SHEET_BULGARIAN_VARW -> bulgarianIndexY(ch) + SHEET_SERBIAN_VARW -> serbianIndexY(ch) SHEET_TSALAGI_VARW -> cherokeeIndexY(ch) SHEET_PHONETIC_EXT_VARW -> phoneticExtIndexY(ch) SHEET_DEVANAGARI_VARW -> devanagariIndexY(ch) @@ -656,6 +655,7 @@ class TerrarumSansBitmap( // if (stackWhere == GlyphProps.STACK_DONT) dbgprn("Diacritics Don't stack: ${code.charInfo()}") // if (stackWhere == GlyphProps.STACK_DOWN) dbgprn("Diacritics stack down: ${code.charInfo()}") // if (writeOnTop > -1 && alignWhere == GlyphProps.ALIGN_RIGHT && width > 0) dbgprn("Diacritics aligned to the right with width of $width: ${code.charInfo()}") +// if (code in 0xF0000 until 0xF0060) dbgprn("Code ${code.toString(16)} width: $width") } } @@ -742,7 +742,8 @@ class TerrarumSansBitmap( val kerning = getKerning(lastNonDiacriticChar, thisChar) - //dbgprn("char: ${thisChar.charInfo()}\nproperties: $thisProp") +// if (thisChar in 0xF0000 until 0xF0060) +// dbgprn("char: ${thisChar.charInfo()}\nproperties: $thisProp") var alignmentOffset = when (thisProp.alignWhere) { @@ -954,6 +955,7 @@ class TerrarumSansBitmap( val seq2 = CodepointSequence() val seq3 = CodepointSequence() val seq4 = CodepointSequence() + val seq5 = CodepointSequence() val dis = this.utf16to32() var i = 0 @@ -1390,7 +1392,6 @@ class TerrarumSansBitmap( // replace devanagari I/II with variants i = 0 - var lenacc = 0 while (i < seq4.size) { val cPrev = seq4.getOrElse(i - 1) { -1 } val c = seq4[i] @@ -1434,7 +1435,26 @@ class TerrarumSansBitmap( i++ } - return seq4 + + // process charset overriding + i = 0 + var charsetOverride = 0 + while (i < seq4.size) { + val c = seq4[i] + if (isCharsetOverride(c)) + charsetOverride = c - CHARSET_OVERRIDE_DEFAULT + else { + if (c in altCharsetCodepointDomains[charsetOverride]) + seq5.add(c + altCharsetCodepointOffsets[charsetOverride]) + else + seq5.add(c) + } + + i++ + } + + + return seq5 } private fun dbgprnLig(i: Any) { if (false) println("[${this.javaClass.simpleName}] $i") } @@ -2113,6 +2133,18 @@ class TerrarumSansBitmap( ) private val codeRangeHangulCompat = 0x3130..0x318F + private val altCharsetCodepointOffsets = arrayOf( + 0, // null + 0xF0000 - 0x400, // bulgarian + 0xF0060 - 0x400 // serbian + ) + + private val altCharsetCodepointDomains = arrayOf( + 0..0x10FFFF, + 0x400..0x45F, + 0x400..0x45F + ) + private val diacriticDotRemoval = hashMapOf( 'i'.toInt() to 0x131, 'j'.toInt() to 0x237 @@ -2364,7 +2396,8 @@ class TerrarumSansBitmap( // END Hangul // private fun isHangul(c: CodePoint) = c in codeRange[SHEET_HANGUL] || c in codeRangeHangulCompat - private fun isBulgarian(c: CodePoint) = c in 0x400..0x45F + private fun isBulgarian(c: CodePoint) = c in 0xF0000..0xF005F + private fun isSerbian(c: CodePoint) = c in 0xF0060..0xF00BF fun isColourCode(c: CodePoint) = c == 0x100000 || c in 0x10F000..0x10FFFF private fun isCharsetOverride(c: CodePoint) = c in 0xFFFC0..0xFFFFF private fun isDevanagari(c: CodePoint) = c in codeRange[SHEET_DEVANAGARI_VARW] @@ -2383,6 +2416,8 @@ class TerrarumSansBitmap( else (c - 0x3040) / 16 private fun cjkPunctIndexY(c: CodePoint) = (c - 0x3000) / 16 private fun cyrilicIndexY(c: CodePoint) = (c - 0x400) / 16 + private fun bulgarianIndexY(c: CodePoint) = (c - 0xF0000) / 16 + private fun serbianIndexY(c: CodePoint) = (c - 0xF0060) / 16 private fun fullwidthUniIndexY(c: CodePoint) = (c - 0xFF00) / 16 private fun uniPunctIndexY(c: CodePoint) = (c - 0x2000) / 16 private fun unihanIndexY(c: CodePoint) = (c - 0x3400) / 256 diff --git a/work_files/ascii_variable.psd b/work_files/ascii_variable.psd index d88c4b1..f1b29f5 100644 --- a/work_files/ascii_variable.psd +++ b/work_files/ascii_variable.psd @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ea4c54274a77564895e226d5ff904612dcec2cdee02ed9ff0e744970b4aff16d -size 317810 +oid sha256:e1cad7ddef5ac5f136ac43ef449b9669000c19ba09b6b4e62f2bcfbaa9962c9e +size 317843 diff --git a/work_files/cyrilic_bulgarian_variable.psd b/work_files/cyrilic_bulgarian_variable.psd index 4bd7bab..d3ed0a4 100644 --- a/work_files/cyrilic_bulgarian_variable.psd +++ b/work_files/cyrilic_bulgarian_variable.psd @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:80e9c9c1ecc2f4ab9bcaebc9554e0fa23878f3fa8ed3a1a81b7828baf1552408 -size 112753 +oid sha256:eb34bdbb0b93fa84bf302bdbe890d05310108ff715cdb62b60cd4de50a5ac058 +size 113821 diff --git a/work_files/cyrilic_serbian_variable.psd b/work_files/cyrilic_serbian_variable.psd index 2277b1c..2c19332 100644 --- a/work_files/cyrilic_serbian_variable.psd +++ b/work_files/cyrilic_serbian_variable.psd @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5e9b28265d3e7ce8cbf4bdc6d34f70b1240ca9b79e04c2682da47e7320f2134c -size 112232 +oid sha256:08349c826755096f11f3dd439a4ca5bd60f1d1363c573acfb34ddde6cea73392 +size 117945 diff --git a/work_files/cyrilic_variable.psd b/work_files/cyrilic_variable.psd index bd7e651..a45fb72 100644 --- a/work_files/cyrilic_variable.psd +++ b/work_files/cyrilic_variable.psd @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db12a5d1cb86d7743c8264af6f547c7a004647d8a970152222ea8103e43f70ed -size 397091 +oid sha256:6a0c5b079f8ec7687f86784ff4dc3d9e853a5ecc6daac1c3b59a9a99d01d5891 +size 398673 diff --git a/work_files/letterlike_symbols_variable.psd b/work_files/letterlike_symbols_variable.psd index b1bf5cc..b324dff 100644 --- a/work_files/letterlike_symbols_variable.psd +++ b/work_files/letterlike_symbols_variable.psd @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:104ae53d662e5edde01d546260982f774aef0c10754b643f8da1378e4cdc267c -size 135972 +oid sha256:00eafc52c56890bde197ce66b9229eb3f54f0237f2daa2b608f841c378edbcb0 +size 362909 diff --git a/work_files/unipunct_variable.psd b/work_files/unipunct_variable.psd index 839a04a..7b2cae3 100644 Binary files a/work_files/unipunct_variable.psd and b/work_files/unipunct_variable.psd differ