diff --git a/assets/ascii_variable.tga b/assets/ascii_variable.tga index 1edecef..dd7f2ca 100755 --- a/assets/ascii_variable.tga +++ b/assets/ascii_variable.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:48371438337ea73de6067bd70ac77ae2d1b59db379fc25d13b25d135fe0449d0 +oid sha256:8ac70bb0fcb78b25371b5cbe434cf3394c78ab7d06f8b0ffdbd39480619e2f92 size 327698 diff --git a/src/net/torvald/terrarumsansbitmap/MovableType.kt b/src/net/torvald/terrarumsansbitmap/MovableType.kt index 36afe31..80eb179 100644 --- a/src/net/torvald/terrarumsansbitmap/MovableType.kt +++ b/src/net/torvald/terrarumsansbitmap/MovableType.kt @@ -6,6 +6,7 @@ import com.badlogic.gdx.utils.Disposable import net.torvald.terrarumsansbitmap.gdx.CodePoint import net.torvald.terrarumsansbitmap.gdx.CodepointSequence import net.torvald.terrarumsansbitmap.gdx.TerrarumSansBitmap +import net.torvald.terrarumsansbitmap.gdx.TerrarumSansBitmap.Companion.FIXED_BLOCK_1 import net.torvald.terrarumsansbitmap.gdx.TerrarumSansBitmap.Companion.getHash import kotlin.math.* import kotlin.properties.Delegates @@ -67,7 +68,7 @@ class MovableType( // println("Paper width: $paperWidth") val lines = inputText.tokenise() -// lines.debugprint() + lines.debugprint() lines.forEachIndexed { linenum, it -> // println("Processing input text line ${linenum + 1} (word count: ${it.size})...") @@ -913,6 +914,8 @@ class MovableType( "{SHY}" else if (it == ZWSP) "{ZWSP}" + else if (it in FIXED_BLOCK_1..FIXED_BLOCK_1+15) + " " else if (it in GLUE_NEGATIVE_ONE..GLUE_POSITIVE_SIXTEEN) " " else if (it in 0xF0541..0xF055A) { diff --git a/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt b/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt index cc73881..d000e27 100755 --- a/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt +++ b/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt @@ -192,6 +192,7 @@ class TerrarumSansBitmap( /** Props of all printable Unicode points. */ private val glyphProps = HashMap() + private val textReplaces = HashMap() private val sheets: Array // private var charsetOverride = 0 @@ -267,6 +268,8 @@ class TerrarumSansBitmap( buildWidthTableFixed() buildWidthTableInternal() + setupDynamicTextReplacer() + glyphProps[0xAD] = GlyphProps(-15) // what the fuck's going on that made this necessary?? @@ -772,6 +775,13 @@ class TerrarumSansBitmap( } } + private fun setupDynamicTextReplacer() { + // replace NBSP into a block of same width + val spaceWidth = glyphProps[32]?.width ?: throw IllegalStateException() + if (spaceWidth > 16) throw InternalError("Space (U+0020) character is too wide ($spaceWidth)") + textReplaces[0xA0] = FIXED_BLOCK_1 + (spaceWidth - 1) + } + fun getWidth(text: String) = getWidthNormalised(text.toCodePoints()) fun getWidth(s: CodepointSequence) = getWidthNormalised(s.normalise()) @@ -1055,9 +1065,14 @@ class TerrarumSansBitmap( seq0.add(0) while (i < dis.size) { - val c = dis[i] + var c = dis[i] val cNext = dis.getOrElse(i+1) { -1 } + // replace characters in-line + textReplaces[c]?.let { + c = it + } + // turn Unicode Devanagari consonants into the internal counterpart if (c in 0x0915..0x0939 || c in 0x0958..0x095F) if (cNext == DEVANAGARI_NUQTA) { diff --git a/work_files/ascii_variable.psd b/work_files/ascii_variable.psd index a334fe9..9368851 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:67e36c0d986ce8c62bdc9a0bbfe900bcb73819885e2f91803537a26d0c33d3d0 -size 317905 +oid sha256:bdb1eb7504373d64208269310c34cce6dca345636698b53f28570d7fffd8f192 +size 348790