mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-24 21:15:12 +00:00
Added cyrillic to normal/tiny fonts
This commit is contained in:
parent
413c27402c
commit
030e2d68d6
3 changed files with 95 additions and 1 deletions
|
@ -2,6 +2,7 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include "data/dynos_cmap.cpp.h"
|
#include "data/dynos_cmap.cpp.h"
|
||||||
|
|
||||||
#define SPRITE_INDEX_START_CHAR '!'
|
#define SPRITE_INDEX_START_CHAR '!'
|
||||||
|
@ -82,6 +83,80 @@ struct SmCodeGlyph sSmCodeGlyphs[] = {
|
||||||
|
|
||||||
{ "¡", '!', 0, 0 },
|
{ "¡", '!', 0, 0 },
|
||||||
{ "¿", '?', 0.3750f, 0 },
|
{ "¿", '?', 0.3750f, 0 },
|
||||||
|
|
||||||
|
{ "Б", 15, 0, 0 },
|
||||||
|
{ "Г", 14, 0, 0 },
|
||||||
|
{ "Д", 17, 0, 0 },
|
||||||
|
{ "Ж", 17, 0, 0 },
|
||||||
|
{ "З", 13, 0, 0 },
|
||||||
|
{ "И", 15, 0, 0 },
|
||||||
|
{ "Й", 15, 0, 0 },
|
||||||
|
{ "Л", 13, 0, 0 },
|
||||||
|
{ "П", 14, 0, 0 },
|
||||||
|
{ "У", 12, 0, 0 },
|
||||||
|
{ "Ф", 17, 0, 0 },
|
||||||
|
{ "Ц", 14, 0, 0 },
|
||||||
|
{ "Ч", 11, 0, 0 },
|
||||||
|
{ "Ш", 17, 0, 0 },
|
||||||
|
{ "Щ", 17, 0, 0 },
|
||||||
|
{ "Ъ", 13, 0, 0 },
|
||||||
|
{ "Ы", 17, 0, 0 },
|
||||||
|
{ "Ь", 12, 0, 0 },
|
||||||
|
{ "Ѣ", 14, 0, 0 },
|
||||||
|
{ "Э", 13, 0, 0 },
|
||||||
|
{ "Ю", 17, 0, 0 },
|
||||||
|
{ "Я", 13, 0, 0 },
|
||||||
|
{ "Є", 12, 0, 0 },
|
||||||
|
|
||||||
|
{ "а", 13, 0, 0 },
|
||||||
|
{ "б", 11, 0, 0 },
|
||||||
|
{ "в", 11, 0, 0 },
|
||||||
|
{ "г", 10, 0, 0 },
|
||||||
|
{ "д", 12, 0, 0 },
|
||||||
|
{ "ж", 15, 0, 0 },
|
||||||
|
{ "з", 13, 0, 0 },
|
||||||
|
{ "и", 12, 0, 0 },
|
||||||
|
{ "й", 12, 0, 0 },
|
||||||
|
{ "к", 9, 0, 0 },
|
||||||
|
{ "л", 10, 0, 0 },
|
||||||
|
{ "м", 11, 0, 0 },
|
||||||
|
{ "н", 11, 0, 0 },
|
||||||
|
{ "п", 11, 0, 0 },
|
||||||
|
{ "т", 11, 0, 0 },
|
||||||
|
{ "ф", 14, 0, 0 },
|
||||||
|
{ "ц", 11, 0, 0 },
|
||||||
|
{ "ч", 9, 0, 0 },
|
||||||
|
{ "ш", 17, 0, 0 },
|
||||||
|
{ "щ", 17, 0, 0 },
|
||||||
|
{ "ъ", 14, 0, 0 },
|
||||||
|
{ "ы", 17, 0, 0 },
|
||||||
|
{ "ь", 12, 0, 0 },
|
||||||
|
{ "ѣ", 13, 0, 0 },
|
||||||
|
{ "э", 12, 0, 0 },
|
||||||
|
{ "ю", 16, 0, 0 },
|
||||||
|
{ "я", 12, 0, 0 },
|
||||||
|
{ "є", 12, 0, 0 },
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SmCodeGlyph sSmCodeDuplicateGlyphs[] = {
|
||||||
|
{ "А", 'A', 0, 0 },
|
||||||
|
{ "В", 'B', 0, 0 },
|
||||||
|
{ "Е", 'E', 0, 0 },
|
||||||
|
{ "К", 'K', 0, 0 },
|
||||||
|
{ "М", 'M', 0, 0 },
|
||||||
|
{ "Н", 'H', 0, 0 },
|
||||||
|
{ "О", 'O', 0, 0 },
|
||||||
|
{ "Р", 'P', 0, 0 },
|
||||||
|
{ "С", 'C', 0, 0 },
|
||||||
|
{ "Т", 'T', 0, 0 },
|
||||||
|
{ "Х", 'X', 0, 0 },
|
||||||
|
{ "е", 'e', 0, 0 },
|
||||||
|
{ "о", 'o', 0, 0 },
|
||||||
|
{ "р", 'p', 0, 0 },
|
||||||
|
{ "с", 'c', 0, 0 },
|
||||||
|
{ "у", 'y', 0, 0 },
|
||||||
|
{ "х", 'x', 0, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static void* sCharMap = NULL;
|
static void* sCharMap = NULL;
|
||||||
|
@ -123,6 +198,22 @@ void djui_unicode_init(void) {
|
||||||
struct SmCodeGlyph* glyph = &sSmCodeGlyphs[i];
|
struct SmCodeGlyph* glyph = &sSmCodeGlyphs[i];
|
||||||
glyph->spriteIndex = (128 + i) - SPRITE_INDEX_START_CHAR;
|
glyph->spriteIndex = (128 + i) - SPRITE_INDEX_START_CHAR;
|
||||||
|
|
||||||
|
u64 key = convert_unicode_char_to_u64(glyph->unicode);
|
||||||
|
s32 bytes = count_bytes_for_char(glyph->unicode);
|
||||||
|
assert(bytes >= 2 && bytes <= 4);
|
||||||
|
assert(key > 127);
|
||||||
|
hmap_put(sCharMap, key, glyph);
|
||||||
|
printf(">>> %llu\n", key);
|
||||||
|
}
|
||||||
|
|
||||||
|
// add duplicate glyphs
|
||||||
|
size_t dupCount = sizeof(sSmCodeDuplicateGlyphs) / sizeof(sSmCodeDuplicateGlyphs[0]);
|
||||||
|
for (size_t i = 0; i < dupCount; i++) {
|
||||||
|
struct SmCodeGlyph* glyph = &sSmCodeDuplicateGlyphs[i];
|
||||||
|
assert((u32)glyph->base < 128);
|
||||||
|
assert((u32)glyph->base > SPRITE_INDEX_START_CHAR);
|
||||||
|
glyph->spriteIndex = ((u32)glyph->base) - SPRITE_INDEX_START_CHAR;
|
||||||
|
|
||||||
u64 key = convert_unicode_char_to_u64(glyph->unicode);
|
u64 key = convert_unicode_char_to_u64(glyph->unicode);
|
||||||
s32 bytes = count_bytes_for_char(glyph->unicode);
|
s32 bytes = count_bytes_for_char(glyph->unicode);
|
||||||
assert(bytes >= 2 && bytes <= 4);
|
assert(bytes >= 2 && bytes <= 4);
|
||||||
|
@ -178,6 +269,9 @@ f32 djui_unicode_get_sprite_width(char* text, const f32 font_widths[]) {
|
||||||
// use the custom width
|
// use the custom width
|
||||||
return glyph->width;
|
return glyph->width;
|
||||||
}
|
}
|
||||||
|
if ((u8)glyph->base < (u8)'!') {
|
||||||
|
return glyph->base;
|
||||||
|
}
|
||||||
// use the base width
|
// use the base width
|
||||||
return font_widths[(u8)glyph->base - SPRITE_INDEX_START_CHAR];
|
return font_widths[(u8)glyph->base - SPRITE_INDEX_START_CHAR];
|
||||||
}
|
}
|
||||||
|
@ -255,7 +349,7 @@ char djui_unicode_get_base_char(char* text) {
|
||||||
if ((u8)*text < 128) { return *text; }
|
if ((u8)*text < 128) { return *text; }
|
||||||
u64 key = convert_unicode_char_to_u64(text);
|
u64 key = convert_unicode_char_to_u64(text);
|
||||||
struct SmCodeGlyph* glyph = hmap_get(sCharMap, key);
|
struct SmCodeGlyph* glyph = hmap_get(sCharMap, key);
|
||||||
return (glyph != NULL) ? glyph->base : '?';
|
return (glyph != NULL || ((u8)glyph->base < (u8)'!')) ? glyph->base : '?';
|
||||||
}
|
}
|
||||||
|
|
||||||
void djui_unicode_get_char(char* text, char* output) {
|
void djui_unicode_get_char(char* text, char* output) {
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 14 KiB |
Binary file not shown.
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 4.7 KiB |
Loading…
Reference in a new issue