Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0ea7bf8c1b | ||
|
|
f5bc1f8178 | ||
|
|
2a39ff0d35 | ||
|
|
ecffe22d01 | ||
|
|
e1c48ace6b | ||
|
|
efff35f0e3 | ||
|
|
f10962ceda | ||
|
|
37d21c6f6c | ||
|
|
ff7c0f8df3 | ||
|
|
c863148f13 | ||
|
|
69e12f0205 | ||
|
|
6bf4a5a995 |
4
BuildJAR_TerrarumSansBitmap.iml
Executable file → Normal file
@@ -5,9 +5,9 @@
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="jdk" jdkName="1.8.0_242" jdkType="JavaSDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="KotlinJavaRuntime" level="project" />
|
||||
<orderEntry type="library" name="lib" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="lib" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
2
FontTestGDX/FontTestGDX.iml
Executable file → Normal file
@@ -5,7 +5,7 @@
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="jdk" jdkName="1.8.0_242" jdkType="JavaSDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module" module-name="BuildJAR_TerrarumSansBitmap" />
|
||||
<orderEntry type="library" name="KotlinJavaRuntime" level="project" />
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Copyright (c) 2017-2023 see CONTRIBUTORS.txt
|
||||
Copyright (c) 2017-2024 CuriousTorvald (minjaesong)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 130 B |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 130 B |
BIN
assets/devanagari_variable.tga
LFS
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 130 B |
BIN
assets/hangul_johab.tga
LFS
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 130 B |
BIN
assets/latinExtD_variable.tga
LFS
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 130 B |
BIN
demo.PNG
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 152 KiB |
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Terrarum Sans Bitmap
|
||||
*
|
||||
* Copyright (c) 2017-2022 see CONTRIBUTORS.txt
|
||||
* Copyright (c) 2017-2024 see CONTRIBUTORS.txt
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -1290,6 +1290,7 @@ class TerrarumSansBitmap(
|
||||
|
||||
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 sawLeftI = false
|
||||
fun changeRaStatus(n: Int) {
|
||||
yankedDevanagariRaStatus[0] = yankedDevanagariRaStatus[1]
|
||||
yankedDevanagariRaStatus[1] = n
|
||||
@@ -1297,13 +1298,15 @@ class TerrarumSansBitmap(
|
||||
fun resetRaStatus() {
|
||||
yankedDevanagariRaStatus[0] = 0
|
||||
yankedDevanagariRaStatus[1] = 0
|
||||
|
||||
sawLeftI = false
|
||||
}
|
||||
|
||||
fun emptyOutYanked() {
|
||||
while (!yankedCharacters.empty()) {
|
||||
val poppedChar = yankedCharacters.pop()
|
||||
if (poppedChar.second == DEVANAGARI_RA)
|
||||
if (seq4.last() in devanagariSuperscripts)
|
||||
if (seq4.last() in devanagariSuperscripts || sawLeftI)
|
||||
seq4.add(DEVANAGARI_RA_SUPER_COMPLEX)
|
||||
else
|
||||
seq4.add(DEVANAGARI_RA_SUPER)
|
||||
@@ -1337,7 +1340,7 @@ class TerrarumSansBitmap(
|
||||
seq4.add(c)
|
||||
changeRaStatus(1)
|
||||
}
|
||||
else if (yankedDevanagariRaStatus[1] in listOf(1,3) && devanariConsonantsHalfs.contains(c)) {
|
||||
else if (yankedDevanagariRaStatus[1] in listOf(1,3,5) && devanariConsonantsHalfs.contains(c)) {
|
||||
dbgprnLig(" Consonants Half Form (${yankedDevanagariRaStatus[1]} -> 3)")
|
||||
seq4.add(c)
|
||||
changeRaStatus(3)
|
||||
@@ -1346,6 +1349,16 @@ class TerrarumSansBitmap(
|
||||
dbgprnLig(" Consonants after Left Vowel (5 -> 1)")
|
||||
seq4.add(c)
|
||||
changeRaStatus(1)
|
||||
|
||||
if (yankedDevanagariRaStatus[1] > 0) {
|
||||
dbgprnLig(" Popping out RAsup (2)")
|
||||
yankedCharacters.pop()
|
||||
if (seq4.last() in devanagariSuperscripts || sawLeftI)
|
||||
seq4.add(DEVANAGARI_RA_SUPER_COMPLEX)
|
||||
else
|
||||
seq4.add(DEVANAGARI_RA_SUPER)
|
||||
resetRaStatus()
|
||||
}
|
||||
}
|
||||
else if ((yankedDevanagariRaStatus[1] > 0) && devanagariRightVowels.contains(c)) {
|
||||
dbgprnLig(" Right Vowels (${yankedDevanagariRaStatus[1]} -> 4)")
|
||||
@@ -1354,6 +1367,7 @@ class TerrarumSansBitmap(
|
||||
}
|
||||
else if ((yankedDevanagariRaStatus[1] in 1..3) && devanagariVowels.contains(c)) {
|
||||
dbgprnLig(" Left Vowels (${yankedDevanagariRaStatus[1]} -> 5)")
|
||||
sawLeftI = true
|
||||
seq4.add(c)
|
||||
changeRaStatus(5)
|
||||
}
|
||||
@@ -1366,7 +1380,7 @@ class TerrarumSansBitmap(
|
||||
else if (yankedDevanagariRaStatus[1] > 0) {
|
||||
dbgprnLig(" Popping out RAsup")
|
||||
yankedCharacters.pop()
|
||||
if (seq4.last() in devanagariSuperscripts)
|
||||
if (seq4.last() in devanagariSuperscripts || sawLeftI)
|
||||
seq4.add(DEVANAGARI_RA_SUPER_COMPLEX)
|
||||
else
|
||||
seq4.add(DEVANAGARI_RA_SUPER)
|
||||
@@ -1388,7 +1402,7 @@ class TerrarumSansBitmap(
|
||||
|
||||
seq4.add(0) // add dummy terminator
|
||||
|
||||
// println(seq4.joinToString(" "))
|
||||
// println("seq4 = " + seq4.joinToString(" ") { it.toCh() })
|
||||
|
||||
// replace devanagari I/II with variants
|
||||
i = 0
|
||||
@@ -1453,6 +1467,7 @@ class TerrarumSansBitmap(
|
||||
i++
|
||||
}
|
||||
|
||||
// println("seq5 = " + seq5.joinToString(" ") { it.toCh() })
|
||||
|
||||
return seq5
|
||||
}
|
||||
@@ -1478,14 +1493,21 @@ class TerrarumSansBitmap(
|
||||
0xF0104 -> "Hu"
|
||||
0xF0105 -> "Huu"
|
||||
0xF010B -> "ᴿᵃ"
|
||||
0xF010C -> "ᴿ¹"
|
||||
0xF010D -> "ᴿ²"
|
||||
0xF010E -> "DDRA"
|
||||
0xF010F -> "ᶴ"
|
||||
0xF024C -> "Resh"
|
||||
in 0xF0110..0xF011F -> "I-${(this - 0xF0110 + 1)}"
|
||||
in 0xF0120..0xF012F -> "II-${(this - 0xF0120 + 1)}"
|
||||
in 0xF0140 until 0xF0140+devaSyll.size -> devaSyll[this - 0xF0140]
|
||||
in 0xF0230 until 0xF0230+devaSyll.size -> devaSyll[this - 0xF0230] + "ʰ"
|
||||
in 0xF0320 until 0xF0320+devaSyll.size -> devaSyll[this - 0xF0320] + ".R"
|
||||
in 0xF0410 until 0xF0410+devaSyll.size -> devaSyll[this - 0xF0410] + ".Rʰ"
|
||||
else -> this.toHex()
|
||||
else -> "<${this.toHex()}>"
|
||||
}
|
||||
|
||||
|
||||
/** Takes input string, do normalisation, and returns sequence of codepoints (Int)
|
||||
*
|
||||
* UTF-16 to ArrayList of Int. UTF-16 is because of Java
|
||||
@@ -2277,9 +2299,9 @@ class TerrarumSansBitmap(
|
||||
// ㅣ
|
||||
private val jungseongI = arrayOf(21,61).toSortedSet()
|
||||
// ㅗ ㅛ ㅜ ㅠ
|
||||
private val jungseongOU = arrayOf(9,13,14,18,34,35,39,45,51,53,54,64,80,83).toSortedSet()
|
||||
private val jungseongOU = arrayOf(9,13,14,18,34,35,39,45,51,53,54,64,73,80,83).toSortedSet()
|
||||
// ㅘ ㅙ ㅞ
|
||||
private val jungseongOUComplex = (arrayOf(10,11,16) + (22..33).toList() + arrayOf(36,37,38) + (41..44).toList() + arrayOf(46,47,48,49,50) + (56..59).toList() + arrayOf(63) + (67..79).toList() + arrayOf(81,82) + (84..93).toList()).toSortedSet()
|
||||
private val jungseongOUComplex = (arrayOf(10,11,16) + (22..33).toList() + arrayOf(36,37,38) + (41..44).toList() + (46..50).toList() + (56..59).toList() + arrayOf(63) + (67..72).toList() + (74..79).toList() + (81..83).toList() + (85..91).toList() + arrayOf(93, 94)).toSortedSet()
|
||||
// ㅐ ㅒ ㅔ ㅖ etc
|
||||
private val jungseongRightie = arrayOf(2,4,6,8,11,16,32,33,37,42,44,48,50,71,72,75,78,79,83,86,87,88,94).toSortedSet()
|
||||
// ㅚ *ㅝ* ㅟ
|
||||
@@ -2289,7 +2311,7 @@ class TerrarumSansBitmap(
|
||||
// ㅢ
|
||||
private val jungseongYI = arrayOf(20,60,65).toSortedSet()
|
||||
// ㅜ ㅝ ㅞ ㅟ ㅠ
|
||||
private val jungseongUU = arrayOf(14,15,16,17,18,27,30,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,59,67,68,77,78,79,80,81,82,83,84,91).toSortedSet()
|
||||
private val jungseongUU = arrayOf(14,15,16,17,18,27,30,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,59,67,68,73,77,78,79,80,81,82,83,84,91).toSortedSet()
|
||||
|
||||
private val jungseongWide = (jungseongOU.toList() + jungseongEU.toList()).toSortedSet()
|
||||
|
||||
@@ -2316,15 +2338,15 @@ class TerrarumSansBitmap(
|
||||
private fun getHanInitialRow(i: Int, p: Int, f: Int): Int {
|
||||
var ret =
|
||||
if (p in jungseongI) 3
|
||||
else if (p in jungseongOUComplex) 7
|
||||
else if (p in jungseongOEWI) 11
|
||||
else if (p in jungseongOUComplex) 7
|
||||
else if (p in jungseongOU) 5
|
||||
else if (p in jungseongEU) 9
|
||||
else if (p in jungseongYI) 13
|
||||
else 1
|
||||
|
||||
if (f != 0) ret += 1
|
||||
|
||||
//println("getHanInitialRow $i $p $f -> $ret")
|
||||
return if (p in jungseongUU && i in choseongGiyeoks) giyeokRemapping[ret] ?: throw NullPointerException("i=$i p=$p f=$f ret=$ret") else ret
|
||||
}
|
||||
|
||||
|
||||