mirror of
https://github.com/curioustorvald/Terrarum-sans-bitmap.git
synced 2026-06-12 00:44:05 +09:00
support for polytonic greek
This commit is contained in:
Binary file not shown.
BIN
assets/greek_polytonic_xyswap_variable.tga
Normal file
BIN
assets/greek_polytonic_xyswap_variable.tga
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 320 KiB |
BIN
demo.PNG
BIN
demo.PNG
Binary file not shown.
|
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 138 KiB |
@@ -106,8 +106,8 @@ How multilingual? Real multilingual!
|
|||||||
Unicode References:
|
Unicode References:
|
||||||
|
|
||||||
Basic Latin Latin-1 Latin Extension A Latin Extionsion B IPA Extension Greek Cyrillic
|
Basic Latin Latin-1 Latin Extension A Latin Extionsion B IPA Extension Greek Cyrillic
|
||||||
Cyrillic Supplement Armenian Devanagari Bengali Thai Georgian Hangul Jamo Runic Cherokee
|
Cyrillic Supplement Armenian Devanagari Bengali Thai Georgian Hangul Jamo Cherokee Runic
|
||||||
Georgian Extended General Punctuations Superscripts and Subscripts CJK Symbols Kana
|
Georgian Extended Greek Extended General Punctuations Superscripts and Subscripts CJK Symbols Kana
|
||||||
Kana Phonetic Extension CJK Unihan Extension A CJK Unihan Hangul Jamo Extended-A Hangul Syllables
|
Kana Phonetic Extension CJK Unihan Extension A CJK Unihan Hangul Jamo Extended-A Hangul Syllables
|
||||||
Hangul Jamo Extended-B Fullwidth Forms Kana Supplement
|
Hangul Jamo Extended-B Fullwidth Forms Kana Supplement
|
||||||
|
|
||||||
|
|||||||
@@ -193,6 +193,7 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
|
|||||||
private fun isNagariBengali(c: Int) = c in codeRange[SHEET_NAGARI_BENGALI_VARW]
|
private fun isNagariBengali(c: Int) = c in codeRange[SHEET_NAGARI_BENGALI_VARW]
|
||||||
private fun isKartvelianCaps(c: Int) = c in codeRange[SHEET_KARTULI_CAPS_VARW]
|
private fun isKartvelianCaps(c: Int) = c in codeRange[SHEET_KARTULI_CAPS_VARW]
|
||||||
private fun isDiacriticalMarks(c: Int) = c in codeRange[SHEET_DIACRITICAL_MARKS_VARW]
|
private fun isDiacriticalMarks(c: Int) = c in codeRange[SHEET_DIACRITICAL_MARKS_VARW]
|
||||||
|
private fun isPolytonicGreek(c: Int) = c in codeRange[SHEET_GREEK_POLY_VARW]
|
||||||
|
|
||||||
private fun isCaps(c: Int) = Character.isUpperCase(c) || isKartvelianCaps(c)
|
private fun isCaps(c: Int) = Character.isUpperCase(c) || isKartvelianCaps(c)
|
||||||
|
|
||||||
@@ -265,6 +266,9 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
|
|||||||
private fun diacriticalMarksIndexX(c: Int) = (c - 0x300) % 16
|
private fun diacriticalMarksIndexX(c: Int) = (c - 0x300) % 16
|
||||||
private fun diacriticalMarksIndexY(c: Int) = (c - 0x300) / 16
|
private fun diacriticalMarksIndexY(c: Int) = (c - 0x300) / 16
|
||||||
|
|
||||||
|
private fun polytonicGreekIndexX(c: Int) = (c - 0x1F00) % 16
|
||||||
|
private fun polytonicGreekIndexY(c: Int) = (c - 0x1F00) / 16
|
||||||
|
|
||||||
private val lowHeightLetters = "acegijmnopqrsuvwxyzɱɳʙɾɽʒʂʐʋɹɻɥɟɡɢʛȵɲŋɴʀɕʑçʝxɣχʁʜʍɰʟɨʉɯuʊøɘɵɤəɛœɜɞʌɔæɐɶɑɒɚɝɩɪʅʈʏʞ".toSortedSet()
|
private val lowHeightLetters = "acegijmnopqrsuvwxyzɱɳʙɾɽʒʂʐʋɹɻɥɟɡɢʛȵɲŋɴʀɕʑçʝxɣχʁʜʍɰʟɨʉɯuʊøɘɵɤəɛœɜɞʌɔæɐɶɑɒɚɝɩɪʅʈʏʞ".toSortedSet()
|
||||||
/**
|
/**
|
||||||
* lowercase AND the height is equal to x-height (e.g. lowercase B, D, F, H, K, L, ... does not count
|
* lowercase AND the height is equal to x-height (e.g. lowercase B, D, F, H, K, L, ... does not count
|
||||||
@@ -312,7 +316,8 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
|
|||||||
SHEET_INSUAR_VARW,
|
SHEET_INSUAR_VARW,
|
||||||
SHEET_NAGARI_BENGALI_VARW,
|
SHEET_NAGARI_BENGALI_VARW,
|
||||||
SHEET_KARTULI_CAPS_VARW,
|
SHEET_KARTULI_CAPS_VARW,
|
||||||
SHEET_DIACRITICAL_MARKS_VARW
|
SHEET_DIACRITICAL_MARKS_VARW,
|
||||||
|
SHEET_GREEK_POLY_VARW
|
||||||
)
|
)
|
||||||
private val autoShiftDownOnLowercase = arrayOf(
|
private val autoShiftDownOnLowercase = arrayOf(
|
||||||
SHEET_DIACRITICAL_MARKS_VARW
|
SHEET_DIACRITICAL_MARKS_VARW
|
||||||
@@ -344,7 +349,8 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
|
|||||||
"insular_variable.tga",
|
"insular_variable.tga",
|
||||||
"devanagari_bengali_variable.tga",
|
"devanagari_bengali_variable.tga",
|
||||||
"kartuli_allcaps_variable.tga",
|
"kartuli_allcaps_variable.tga",
|
||||||
"diacritical_marks_variable.tga"
|
"diacritical_marks_variable.tga",
|
||||||
|
"greek_polytonic_xyswap_variable.tga"
|
||||||
)
|
)
|
||||||
private val codeRange = arrayOf( // MUST BE MATCHING WITH SHEET INDICES!!
|
private val codeRange = arrayOf( // MUST BE MATCHING WITH SHEET INDICES!!
|
||||||
0..0xFF,
|
0..0xFF,
|
||||||
@@ -371,7 +377,8 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
|
|||||||
0xA770..0xA787, // if it work, don't fix it (yet--wait until Latin Extended C)
|
0xA770..0xA787, // if it work, don't fix it (yet--wait until Latin Extended C)
|
||||||
0x900..0x9FF,
|
0x900..0x9FF,
|
||||||
0x1C90..0x1CBF,
|
0x1C90..0x1CBF,
|
||||||
0x300..0x36F
|
0x300..0x36F,
|
||||||
|
0x1F00..0x1FFF
|
||||||
)
|
)
|
||||||
private val glyphProps: HashMap<Int, GlyphProps> = HashMap()
|
private val glyphProps: HashMap<Int, GlyphProps> = HashMap()
|
||||||
private val sheets: Array<TextureRegionPack>
|
private val sheets: Array<TextureRegionPack>
|
||||||
@@ -399,10 +406,20 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
|
|||||||
|
|
||||||
|
|
||||||
if (isVariable) {
|
if (isVariable) {
|
||||||
println("[TerrarumSansBitmap] loading texture $it [VARIABLE]")
|
if (isXYSwapped) {
|
||||||
|
println("[TerrarumSansBitmap] loading texture $it [VARIABLE, XYSWAP]")
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
println("[TerrarumSansBitmap] loading texture $it [VARIABLE]")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
println("[TerrarumSansBitmap] loading texture $it")
|
if (isXYSwapped) {
|
||||||
|
println("[TerrarumSansBitmap] loading texture $it [XYSWAP]")
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
println("[TerrarumSansBitmap] loading texture $it")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -803,6 +820,8 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
|
|||||||
return SHEET_KARTULI_CAPS_VARW
|
return SHEET_KARTULI_CAPS_VARW
|
||||||
else if (isDiacriticalMarks(c))
|
else if (isDiacriticalMarks(c))
|
||||||
return SHEET_DIACRITICAL_MARKS_VARW
|
return SHEET_DIACRITICAL_MARKS_VARW
|
||||||
|
else if (isPolytonicGreek(c))
|
||||||
|
return SHEET_GREEK_POLY_VARW
|
||||||
else
|
else
|
||||||
return SHEET_UNKNOWN
|
return SHEET_UNKNOWN
|
||||||
// fixed width
|
// fixed width
|
||||||
@@ -900,6 +919,10 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
|
|||||||
sheetX = diacriticalMarksIndexX(ch)
|
sheetX = diacriticalMarksIndexX(ch)
|
||||||
sheetY = diacriticalMarksIndexY(ch)
|
sheetY = diacriticalMarksIndexY(ch)
|
||||||
}
|
}
|
||||||
|
SHEET_GREEK_POLY_VARW -> {
|
||||||
|
sheetX = polytonicGreekIndexX(ch)
|
||||||
|
sheetY = polytonicGreekIndexY(ch)
|
||||||
|
}
|
||||||
else -> {
|
else -> {
|
||||||
sheetX = ch % 16
|
sheetX = ch % 16
|
||||||
sheetY = ch / 16
|
sheetY = ch / 16
|
||||||
@@ -1308,6 +1331,7 @@ class GameFontBase(fontDir: String, val noShadow: Boolean = false, val flipY: Bo
|
|||||||
internal val SHEET_NAGARI_BENGALI_VARW=22
|
internal val SHEET_NAGARI_BENGALI_VARW=22
|
||||||
internal val SHEET_KARTULI_CAPS_VARW = 23
|
internal val SHEET_KARTULI_CAPS_VARW = 23
|
||||||
internal val SHEET_DIACRITICAL_MARKS_VARW = 24
|
internal val SHEET_DIACRITICAL_MARKS_VARW = 24
|
||||||
|
internal val SHEET_GREEK_POLY_VARW = 25
|
||||||
|
|
||||||
internal val SHEET_UNKNOWN = 254
|
internal val SHEET_UNKNOWN = 254
|
||||||
|
|
||||||
|
|||||||
@@ -77,11 +77,11 @@ class TextureRegionPack(
|
|||||||
else {
|
else {
|
||||||
regions = Array<TextureRegion>(horizontalCount * verticalCount, {
|
regions = Array<TextureRegion>(horizontalCount * verticalCount, {
|
||||||
val region = TextureRegion()
|
val region = TextureRegion()
|
||||||
val rx = (it % verticalCount * (tileW + hGap)) + hFrame
|
val rx = (it / verticalCount * (tileW + hGap)) + hFrame
|
||||||
val ry = (it / verticalCount * (tileH + vGap)) + vFrame
|
val ry = (it % verticalCount * (tileH + vGap)) + vFrame
|
||||||
|
|
||||||
region.setRegion(texture)
|
region.setRegion(texture)
|
||||||
region.setRegion(ry, rx, tileW, tileH)
|
region.setRegion(rx, ry, tileW, tileH)
|
||||||
|
|
||||||
region.flip(false, globalFlipY)
|
region.flip(false, globalFlipY)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user