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$">
|
<content url="file://$MODULE_DIR$">
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="jdk" jdkName="1.8.0_242" jdkType="JavaSDK" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
<orderEntry type="library" name="KotlinJavaRuntime" level="project" />
|
<orderEntry type="library" name="KotlinJavaRuntime" level="project" />
|
||||||
<orderEntry type="library" name="lib" level="project" />
|
<orderEntry type="library" scope="PROVIDED" name="lib" level="project" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
||||||
2
FontTestGDX/FontTestGDX.iml
Executable file → Normal file
@@ -5,7 +5,7 @@
|
|||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="jdk" jdkName="1.8.0_242" jdkType="JavaSDK" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
<orderEntry type="module" module-name="BuildJAR_TerrarumSansBitmap" />
|
<orderEntry type="module" module-name="BuildJAR_TerrarumSansBitmap" />
|
||||||
<orderEntry type="library" name="KotlinJavaRuntime" level="project" />
|
<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
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
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
|
* 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
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
* 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
|
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 yankedDevanagariRaStatus = intArrayOf(0,0) // 0: none, 1: consonants, 2: virama, 3: vowel for this syllable
|
||||||
|
var sawLeftI = false
|
||||||
fun changeRaStatus(n: Int) {
|
fun changeRaStatus(n: Int) {
|
||||||
yankedDevanagariRaStatus[0] = yankedDevanagariRaStatus[1]
|
yankedDevanagariRaStatus[0] = yankedDevanagariRaStatus[1]
|
||||||
yankedDevanagariRaStatus[1] = n
|
yankedDevanagariRaStatus[1] = n
|
||||||
@@ -1297,13 +1298,15 @@ class TerrarumSansBitmap(
|
|||||||
fun resetRaStatus() {
|
fun resetRaStatus() {
|
||||||
yankedDevanagariRaStatus[0] = 0
|
yankedDevanagariRaStatus[0] = 0
|
||||||
yankedDevanagariRaStatus[1] = 0
|
yankedDevanagariRaStatus[1] = 0
|
||||||
|
|
||||||
|
sawLeftI = false
|
||||||
}
|
}
|
||||||
|
|
||||||
fun emptyOutYanked() {
|
fun emptyOutYanked() {
|
||||||
while (!yankedCharacters.empty()) {
|
while (!yankedCharacters.empty()) {
|
||||||
val poppedChar = yankedCharacters.pop()
|
val poppedChar = yankedCharacters.pop()
|
||||||
if (poppedChar.second == DEVANAGARI_RA)
|
if (poppedChar.second == DEVANAGARI_RA)
|
||||||
if (seq4.last() in devanagariSuperscripts)
|
if (seq4.last() in devanagariSuperscripts || sawLeftI)
|
||||||
seq4.add(DEVANAGARI_RA_SUPER_COMPLEX)
|
seq4.add(DEVANAGARI_RA_SUPER_COMPLEX)
|
||||||
else
|
else
|
||||||
seq4.add(DEVANAGARI_RA_SUPER)
|
seq4.add(DEVANAGARI_RA_SUPER)
|
||||||
@@ -1337,7 +1340,7 @@ class TerrarumSansBitmap(
|
|||||||
seq4.add(c)
|
seq4.add(c)
|
||||||
changeRaStatus(1)
|
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)")
|
dbgprnLig(" Consonants Half Form (${yankedDevanagariRaStatus[1]} -> 3)")
|
||||||
seq4.add(c)
|
seq4.add(c)
|
||||||
changeRaStatus(3)
|
changeRaStatus(3)
|
||||||
@@ -1346,6 +1349,16 @@ class TerrarumSansBitmap(
|
|||||||
dbgprnLig(" Consonants after Left Vowel (5 -> 1)")
|
dbgprnLig(" Consonants after Left Vowel (5 -> 1)")
|
||||||
seq4.add(c)
|
seq4.add(c)
|
||||||
changeRaStatus(1)
|
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)) {
|
else if ((yankedDevanagariRaStatus[1] > 0) && devanagariRightVowels.contains(c)) {
|
||||||
dbgprnLig(" Right Vowels (${yankedDevanagariRaStatus[1]} -> 4)")
|
dbgprnLig(" Right Vowels (${yankedDevanagariRaStatus[1]} -> 4)")
|
||||||
@@ -1354,6 +1367,7 @@ class TerrarumSansBitmap(
|
|||||||
}
|
}
|
||||||
else if ((yankedDevanagariRaStatus[1] in 1..3) && devanagariVowels.contains(c)) {
|
else if ((yankedDevanagariRaStatus[1] in 1..3) && devanagariVowels.contains(c)) {
|
||||||
dbgprnLig(" Left Vowels (${yankedDevanagariRaStatus[1]} -> 5)")
|
dbgprnLig(" Left Vowels (${yankedDevanagariRaStatus[1]} -> 5)")
|
||||||
|
sawLeftI = true
|
||||||
seq4.add(c)
|
seq4.add(c)
|
||||||
changeRaStatus(5)
|
changeRaStatus(5)
|
||||||
}
|
}
|
||||||
@@ -1366,7 +1380,7 @@ class TerrarumSansBitmap(
|
|||||||
else if (yankedDevanagariRaStatus[1] > 0) {
|
else if (yankedDevanagariRaStatus[1] > 0) {
|
||||||
dbgprnLig(" Popping out RAsup")
|
dbgprnLig(" Popping out RAsup")
|
||||||
yankedCharacters.pop()
|
yankedCharacters.pop()
|
||||||
if (seq4.last() in devanagariSuperscripts)
|
if (seq4.last() in devanagariSuperscripts || sawLeftI)
|
||||||
seq4.add(DEVANAGARI_RA_SUPER_COMPLEX)
|
seq4.add(DEVANAGARI_RA_SUPER_COMPLEX)
|
||||||
else
|
else
|
||||||
seq4.add(DEVANAGARI_RA_SUPER)
|
seq4.add(DEVANAGARI_RA_SUPER)
|
||||||
@@ -1388,7 +1402,7 @@ class TerrarumSansBitmap(
|
|||||||
|
|
||||||
seq4.add(0) // add dummy terminator
|
seq4.add(0) // add dummy terminator
|
||||||
|
|
||||||
// println(seq4.joinToString(" "))
|
// println("seq4 = " + seq4.joinToString(" ") { it.toCh() })
|
||||||
|
|
||||||
// replace devanagari I/II with variants
|
// replace devanagari I/II with variants
|
||||||
i = 0
|
i = 0
|
||||||
@@ -1453,6 +1467,7 @@ class TerrarumSansBitmap(
|
|||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// println("seq5 = " + seq5.joinToString(" ") { it.toCh() })
|
||||||
|
|
||||||
return seq5
|
return seq5
|
||||||
}
|
}
|
||||||
@@ -1478,14 +1493,21 @@ class TerrarumSansBitmap(
|
|||||||
0xF0104 -> "Hu"
|
0xF0104 -> "Hu"
|
||||||
0xF0105 -> "Huu"
|
0xF0105 -> "Huu"
|
||||||
0xF010B -> "ᴿᵃ"
|
0xF010B -> "ᴿᵃ"
|
||||||
|
0xF010C -> "ᴿ¹"
|
||||||
|
0xF010D -> "ᴿ²"
|
||||||
|
0xF010E -> "DDRA"
|
||||||
|
0xF010F -> "ᶴ"
|
||||||
0xF024C -> "Resh"
|
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 0xF0140 until 0xF0140+devaSyll.size -> devaSyll[this - 0xF0140]
|
||||||
in 0xF0230 until 0xF0230+devaSyll.size -> devaSyll[this - 0xF0230] + "ʰ"
|
in 0xF0230 until 0xF0230+devaSyll.size -> devaSyll[this - 0xF0230] + "ʰ"
|
||||||
in 0xF0320 until 0xF0320+devaSyll.size -> devaSyll[this - 0xF0320] + ".R"
|
in 0xF0320 until 0xF0320+devaSyll.size -> devaSyll[this - 0xF0320] + ".R"
|
||||||
in 0xF0410 until 0xF0410+devaSyll.size -> devaSyll[this - 0xF0410] + ".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)
|
/** Takes input string, do normalisation, and returns sequence of codepoints (Int)
|
||||||
*
|
*
|
||||||
* UTF-16 to ArrayList of Int. UTF-16 is because of Java
|
* 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 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
|
// ㅐ ㅒ ㅔ ㅖ 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()
|
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 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()
|
private val jungseongWide = (jungseongOU.toList() + jungseongEU.toList()).toSortedSet()
|
||||||
|
|
||||||
@@ -2316,15 +2338,15 @@ class TerrarumSansBitmap(
|
|||||||
private fun getHanInitialRow(i: Int, p: Int, f: Int): Int {
|
private fun getHanInitialRow(i: Int, p: Int, f: Int): Int {
|
||||||
var ret =
|
var ret =
|
||||||
if (p in jungseongI) 3
|
if (p in jungseongI) 3
|
||||||
else if (p in jungseongOUComplex) 7
|
|
||||||
else if (p in jungseongOEWI) 11
|
else if (p in jungseongOEWI) 11
|
||||||
|
else if (p in jungseongOUComplex) 7
|
||||||
else if (p in jungseongOU) 5
|
else if (p in jungseongOU) 5
|
||||||
else if (p in jungseongEU) 9
|
else if (p in jungseongEU) 9
|
||||||
else if (p in jungseongYI) 13
|
else if (p in jungseongYI) 13
|
||||||
else 1
|
else 1
|
||||||
|
|
||||||
if (f != 0) ret += 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
|
return if (p in jungseongUU && i in choseongGiyeoks) giyeokRemapping[ret] ?: throw NullPointerException("i=$i p=$p f=$f ret=$ret") else ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||