diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index d8f0866..d571c65 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -10,7 +10,7 @@
-
+
@@ -32,8 +32,8 @@
-
-
+
+
@@ -81,26 +81,35 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
@@ -132,7 +141,6 @@
- fun getWidth
fun dispo
xHei
not copy
@@ -162,6 +170,7 @@
ArrayList<Int>
har.toInt()
println
+ !!
.141
@@ -183,10 +192,10 @@
-
-
+
+
@@ -823,13 +832,6 @@
-
-
-
-
-
-
-
@@ -849,13 +851,6 @@
-
-
-
-
-
-
-
@@ -877,13 +872,6 @@
-
-
-
-
-
-
-
@@ -903,10 +891,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
diff --git a/FontTestGDX/demotext.txt b/FontTestGDX/demotext.txt
index 61155e1..abb62c3 100644
--- a/FontTestGDX/demotext.txt
+++ b/FontTestGDX/demotext.txt
@@ -36,6 +36,7 @@ How multilingual? Real multilingual!
ΔΙΑΦΥΛΆΞΤΕ ΓΕΝΙΚΆ ΤΗ ΖΩΉ ΣΑΣ ΑΠΌ ΒΑΘΕΙΆ ΨΥΧΙΚΆ ΤΡΑΎΜΑΤΑ
სწრაფი ყავისფერი მელა გადაახტა ზარმაც ძაღლს
Kæmi ný öxi hér, ykist þjófum nú bæði víl og ádrepa
+ Ꝺꝼuaꞅcail Íoꞅa Úꞃṁac na hÓiᵹe Beannaiꞇe póꞃ Éaḃa aᵹus Áꝺaiṁ
Ċuaiġ bé ṁórṡáċ le dlúṫspád fíorḟinn trí hata mo ḋea-ṗorcáin ḃig
あめつちほしそら やまかはみねたに くもきりむろこけ ひといぬうへすゑ ゆわさるおふせよ えの𛀁をなれゐて
トリナクコヱス ユメサマセ ミヨアケワタル ヒンカシヲ ソライロハエテ オキツヘニ ホフネムレヰヌ モヤノウチ
diff --git a/assets/insular_variable.tga b/assets/insular_variable.tga
index a906a01..ee5186c 100644
Binary files a/assets/insular_variable.tga and b/assets/insular_variable.tga differ
diff --git a/assets/kana.tga b/assets/kana.tga
index 79adc10..4325d3b 100644
Binary files a/assets/kana.tga and b/assets/kana.tga differ
diff --git a/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt b/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt
index 0ccda55..31b3cc1 100644
--- a/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt
+++ b/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt
@@ -116,7 +116,7 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
private fun isRunic(c: Int) = c in codeRange[SHEET_RUNIC]
private fun isExtA(c: Int) = c in codeRange[SHEET_EXTA_VARW]
private fun isExtB(c: Int) = c in codeRange[SHEET_EXTB_VARW]
- private fun isKana(c: Int) = c in codeRange[SHEET_KANA]
+ private fun isKana(c: Int) = c in codeRange[SHEET_KANA] || c in 0x31F0..0x31FF || c in 0x1B000..0x1B001
private fun isCJKPunct(c: Int) = c in codeRange[SHEET_CJK_PUNCT]
private fun isUniHan(c: Int) = c in codeRange[SHEET_UNIHAN]
private fun isCyrilic(c: Int) = c in codeRange[SHEET_CYRILIC_VARW]
@@ -136,6 +136,7 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
private fun isColourCode(c: Int) = c in 0x100000..0x10FFFF
private fun isCharsetOverride(c: Int) = c in 0xFFFF8..0xFFFFF
private fun isCherokee(c: Int) = c in codeRange[SHEET_TSALAGI_VARW]
+ private fun isInsular(c: Int) = c == 0x1D79 || c in 0xA779..0xA787
private fun extAindexX(c: Int) = (c - 0x100) % 16
@@ -150,7 +151,7 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
private fun kanaIndexX(c: Int) = (c - 0x3040) % 16
private fun kanaIndexY(c: Int) =
if (c in 0x31F0..0x31FF) 12
- else if (c in 0x31F0..0x31FF) 13
+ else if (c in 0x1B000..0x1B00F) 13
else (c - 0x3040) / 16
private fun cjkPunctIndexX(c: Int) = (c - 0x3000) % 16
@@ -192,6 +193,11 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
private fun cherokeeIndexX(c: Int) = (c - 0x13A0) % 16
private fun cherokeeIndexY(c: Int) = (c - 0x13A0) / 16
+ private fun insularIndexX(c: Int) =
+ if (c == 0x1D79) 0 else (c - 0xA770) % 16
+ private fun insularIndexY(c: Int) =
+ if (c == 0x1D79) 0 else (c - 0xA770) / 16
+
private fun getColour(codePoint: Int): Color { // input: 0x10ARGB, out: RGBA8888
if (colourBuffer.containsKey(codePoint))
return colourBuffer[codePoint]!!
@@ -228,7 +234,8 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
SHEET_LATIN_EXT_ADD_VARW,
SHEET_BULGARIAN_VARW,
SHEET_SERBIAN_VARW,
- SHEET_TSALAGI_VARW
+ SHEET_TSALAGI_VARW,
+ SHEET_INSUAR_VARW
)
private val fontParentDir = if (fontDir.endsWith('/') || fontDir.endsWith('\\')) fontDir else "$fontDir/"
@@ -253,7 +260,8 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
"puae000-e0ff.tga",
"cyrilic_bulgarian_variable.tga",
"cyrilic_serbian_variable.tga",
- "tsalagi_variable.tga"
+ "tsalagi_variable.tga",
+ "insular_variable.tga"
)
private val codeRange = arrayOf( // MUST BE MATCHING WITH SHEET INDICES!!
0..0xFF,
@@ -276,7 +284,8 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
0xE000..0xE0FF,
0xF00000..0xF0005F, // assign them to PUA
0xF00060..0xF000BF, // assign them to PUA
- 0x13A0..0x13F5
+ 0x13A0..0x13F5,
+ 0xA770..0xA787
)
private val glyphProps: HashMap = HashMap()
private val sheets: Array
@@ -724,6 +733,8 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
return SHEET_LATIN_EXT_ADD_VARW
else if (isCherokee(c))
return SHEET_TSALAGI_VARW
+ else if (isInsular(c))
+ return SHEET_INSUAR_VARW
else
return SHEET_UNKNOWN
// fixed width
@@ -805,6 +816,10 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
sheetX = cherokeeIndexX(ch)
sheetY = cherokeeIndexY(ch)
}
+ SHEET_INSUAR_VARW -> {
+ sheetX = insularIndexX(ch)
+ sheetY = insularIndexY(ch)
+ }
else -> {
sheetX = ch % 16
sheetY = ch / 16
@@ -868,6 +883,15 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
(0xD800..0xDFFF).forEach { glyphProps[it] = GlyphProps(0, 0) }
(0x100000..0x10FFFF).forEach { glyphProps[it] = GlyphProps(0, 0) }
(0xFFFF8..0xFFFFF).forEach { glyphProps[it] = GlyphProps(0, 0) }
+
+
+ // manually build width table of Kana Supplements
+ (0x31F0..0x31FF).forEach { glyphProps[it] = GlyphProps(W_KANA, 0) }
+ (0x1B000..0x1B001).forEach { glyphProps[it] = GlyphProps(W_KANA, 0) }
+
+ // manually add width of one orphan insular letter
+ // WARNING: glyphs in 0xA770..0xA778 has invalid data, further care is required
+ glyphProps[0x1D79] = GlyphProps(9, 0)
}
private val glyphLayout = GlyphLayout()
@@ -1001,6 +1025,7 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
internal val SHEET_BULGARIAN_VARW = 18
internal val SHEET_SERBIAN_VARW = 19
internal val SHEET_TSALAGI_VARW = 20
+ internal val SHEET_INSUAR_VARW = 21
internal val SHEET_UNKNOWN = 254