From b3a48b23ee7b3cf0e43ffb123b6adcca981803c6 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 16 Nov 2021 17:04:49 +0900 Subject: [PATCH] added diacritics placeholders to PUA --- assets/internal_variable.tga | Bin 0 -> 327698 bytes .../gdx/TerrarumSansBitmap.kt | 22 ++++++++++++++---- work_files/internal_variable.psd | Bin 0 -> 270720 bytes 3 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 assets/internal_variable.tga create mode 100644 work_files/internal_variable.psd diff --git a/assets/internal_variable.tga b/assets/internal_variable.tga new file mode 100644 index 0000000000000000000000000000000000000000..a70d1690fcf04f078e85cd83263d42a32c5770bb GIT binary patch literal 327698 zcmeI&OA3Q95CG8FlXTI8^kzM}wWV<}I3Pxe)aOQL$mrxj{D7t0%DfHF;r^JT4F|6> zjvLD6lGgh9L=FfLAV7cs0RjXF5I9_*_5HoI{_qL90D+4LjK5F$Y5)DEukl5uZ<+)y zEl}5eMTl|D+Y=x_fB*pk{~?e)>$CiS%-Spn5ZGJ5J!5ZC=Ob{eK(=PH{8Be@Y>by` z$_Qw>}6EDAQm3%m49b`Dm7n%kr^aOn?9Z0t5*3 z5s1&~Pdsg_n~8&Cy!u225+Kk`pmp80)_0q@3lktffB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF r5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXFoI>CYt5b6n literal 0 HcmV?d00001 diff --git a/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt b/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt index 0608fcb..f3f8157 100755 --- a/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt +++ b/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt @@ -565,6 +565,8 @@ class TerrarumSansBitmap( return SHEET_EXTD_VARW else if (isCurrencies(c)) return SHEET_CURRENCIES_VARW + else if (isInternalSymbols(c)) + return SHEET_INTERNAL_VARW else return SHEET_UNKNOWN // fixed width @@ -678,6 +680,10 @@ class TerrarumSansBitmap( sheetX = currenciesIndexX(ch) sheetY = currenciesIndexY(ch) } + SHEET_INTERNAL_VARW -> { + sheetX = internalIndexX(ch) + sheetY = internalIndexY(ch) + } else -> { sheetX = ch % 16 sheetY = ch / 16 @@ -1400,6 +1406,7 @@ class TerrarumSansBitmap( internal val SHEET_EXTC_VARW = 26 internal val SHEET_EXTD_VARW = 27 internal val SHEET_CURRENCIES_VARW = 28 + internal val SHEET_INTERNAL_VARW = 29 internal val SHEET_UNKNOWN = 254 @@ -1442,7 +1449,8 @@ class TerrarumSansBitmap( SHEET_GREEK_POLY_VARW, SHEET_EXTC_VARW, SHEET_EXTD_VARW, - SHEET_CURRENCIES_VARW + SHEET_CURRENCIES_VARW, + SHEET_INTERNAL_VARW ) private val autoShiftDownOnLowercase = arrayOf( SHEET_DIACRITICAL_MARKS_VARW @@ -1477,7 +1485,8 @@ class TerrarumSansBitmap( "greek_polytonic_xyswap_variable.tga", "latinExtC_variable.tga", "latinExtD_variable.tga", - "currencies_variable.tga" + "currencies_variable.tga", + "internal_variable.tga" ) private val codeRange = arrayOf( // MUST BE MATCHING WITH SHEET INDICES!! 0..0xFF, // SHEET_ASCII_VARW @@ -1508,7 +1517,8 @@ class TerrarumSansBitmap( 0x1F00..0x1FFF, // SHEET_GREEK_POLY_VARW 0x2C60..0x2C7F, // SHEET_EXTC_VARW 0xA720..0xA7FF, // SHEET_EXTD_VARW - 0x20A0..0x20CF // SHEET_CURRENCIES_VARW + 0x20A0..0x20CF, // SHEET_CURRENCIES_VARW + 0xFFE00..0xFFF9F // SHEET_INTERNAL_VARW ) private val codeRangeHangulCompat = 0x3130..0x318F @@ -1661,6 +1671,7 @@ class TerrarumSansBitmap( private fun isExtD(c: CodePoint) = c in codeRange[SHEET_EXTD_VARW] private fun isHangulCompat(c: CodePoint) = c in codeRangeHangulCompat private fun isCurrencies(c: CodePoint) = c in codeRange[SHEET_CURRENCIES_VARW] + private fun isInternalSymbols(c: CodePoint) = c in codeRange[SHEET_INTERNAL_VARW] // underscored name: not a charset private fun _isCaps(c: CodePoint) = Character.isUpperCase(c) || isKartvelianCaps(c) @@ -1745,6 +1756,9 @@ class TerrarumSansBitmap( private fun currenciesIndexX(c: CodePoint) = (c - 0x20A0) % 16 private fun currenciesIndexY(c: CodePoint) = (c - 0x20A0) / 16 + + private fun internalIndexX(c: CodePoint) = (c - 0xFFE00) % 16 + private fun internalIndexY(c: CodePoint) = (c - 0xFFE00) / 16 /* #!/usr/bin/python3 @@ -1756,7 +1770,7 @@ for c in s: print(','.join(a)) */ // acegijmnopqrsuvwxyzɱɳʙɾɽʒʂʐʋɹɻɥɟɡɢʛȵɲŋɴʀɕʑçʝxɣχʁʜʍɰʟɨʉɯuʊøɘɵɤəɛœɜɞʌɔæɐɶɑɒɚɝɩɪʅʈʏʞⱥⱦⱱⱳⱴⱶⱷⱸⱺⱻꜥꜩꜫꜭꜯꜰꜱꜳꜵꜷꜹꜻꜽꜿꝋꝍꝏꝑꝓꝕꝗꝙꝛꝝꝟꝡꝫꝯꝳꝴꝵꝶꝷꝺꝼꝿꞁꞃꞅꞇꞑꞓꞔꞛꞝꞟꞡꞥꞧꞩꞮꞷꟺ\uA7AF\uA7B9\uA7C3\uA7CAƍƞơƣƨưƴƶƹƺƽƿ - private val lowHeightLetters = intArrayOf(0x61,0x63,0x65,0x67,0x69,0x6a,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x75,0x76,0x77,0x78,0x79,0x7a,0x271,0x273,0x299,0x27e,0x27d,0x292,0x282,0x290,0x28b,0x279,0x27b,0x265,0x25f,0x261,0x262,0x29b,0x235,0x272,0x14b,0x274,0x280,0x255,0x291,0xe7,0x29d,0x78,0x263,0x3c7,0x281,0x29c,0x28d,0x270,0x29f,0x268,0x289,0x26f,0x75,0x28a,0xf8,0x258,0x275,0x264,0x259,0x25b,0x153,0x25c,0x25e,0x28c,0x254,0xe6,0x250,0x276,0x251,0x252,0x25a,0x25d,0x269,0x26a,0x285,0x288,0x28f,0x29e,0x2c65,0x2c66,0x2c71,0x2c73,0x2c74,0x2c76,0x2c77,0x2c78,0x2c7a,0x2c7b,0xa725,0xa729,0xa72b,0xa72d,0xa72f,0xa730,0xa731,0xa733,0xa735,0xa737,0xa739,0xa73b,0xa73d,0xa73f,0xa74b,0xa74d,0xa74f,0xa751,0xa753,0xa755,0xa757,0xa759,0xa75b,0xa75d,0xa75f,0xa761,0xa76b,0xa76f,0xa773,0xa774,0xa775,0xa776,0xa777,0xa77a,0xa77c,0xa77f,0xa781,0xa783,0xa785,0xa787,0xa791,0xa793,0xa794,0xa79b,0xa79d,0xa79f,0xa7a1,0xa7a5,0xa7a7,0xa7a9,0xa7ae,0xa7b7,0xa7fa,0xa7af,0xa7b9,0xa7c3,0xa7ca,0x18d,0x19e,0x1a1,0x1a3,0x1a8,0x1b0,0x1b4,0x1b6,0x1b9,0x1ba,0x1bd,0x1bf).toSortedSet() + private val lowHeightLetters = intArrayOf(0x61,0x63,0x65,0x67,0x69,0x6a,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x75,0x76,0x77,0x78,0x79,0x7a,0x271,0x273,0x299,0x27e,0x27d,0x292,0x282,0x290,0x28b,0x279,0x27b,0x265,0x25f,0x261,0x262,0x29b,0x235,0x272,0x14b,0x274,0x280,0x255,0x291,0xe7,0x29d,0x78,0x263,0x3c7,0x281,0x29c,0x28d,0x270,0x29f,0x268,0x289,0x26f,0x75,0x28a,0xf8,0x258,0x275,0x264,0x259,0x25b,0x153,0x25c,0x25e,0x28c,0x254,0xe6,0x250,0x276,0x251,0x252,0x25a,0x25d,0x269,0x26a,0x285,0x288,0x28f,0x29e,0x2c65,0x2c66,0x2c71,0x2c73,0x2c74,0x2c76,0x2c77,0x2c78,0x2c7a,0x2c7b,0xa725,0xa729,0xa72b,0xa72d,0xa72f,0xa730,0xa731,0xa733,0xa735,0xa737,0xa739,0xa73b,0xa73d,0xa73f,0xa74b,0xa74d,0xa74f,0xa751,0xa753,0xa755,0xa757,0xa759,0xa75b,0xa75d,0xa75f,0xa761,0xa76b,0xa76f,0xa773,0xa774,0xa775,0xa776,0xa777,0xa77a,0xa77c,0xa77f,0xa781,0xa783,0xa785,0xa787,0xa791,0xa793,0xa794,0xa79b,0xa79d,0xa79f,0xa7a1,0xa7a5,0xa7a7,0xa7a9,0xa7ae,0xa7b7,0xa7fa,0xa7af,0xa7b9,0xa7c3,0xa7ca,0x18d,0x19e,0x1a1,0x1a3,0x1a8,0x1b0,0x1b4,0x1b6,0x1b9,0x1ba,0x1bd,0x1bf,0xFFE00).toSortedSet() // TŢŤƬƮȚͲΤТҬᛏṪṬṮṰⲦϮϯⴶꚌꚐᎢᛠꓔ private val kernTees = intArrayOf(0x54,0x162,0x164,0x1ac,0x1ae,0x21a,0x372,0x3a4,0x422,0x4ac,0x16cf,0x1e6a,0x1e6c,0x1e6e,0x1e70,0x2ca6,0x3ee,0x3ef,0x2d36,0xa68c,0xa690,0x13a2,0x16e0,0xa4d4).toSortedSet() // ŦȾYÝŶŸɎΎΫΥҮҰᛉᛘẎỲỴỶỸὙὛὝὟῪΎꓬȲ diff --git a/work_files/internal_variable.psd b/work_files/internal_variable.psd new file mode 100644 index 0000000000000000000000000000000000000000..b4b5d0bf1f21000860da95a38f39be2fc5773586 GIT binary patch literal 270720 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 literal 0 HcmV?d00001