Adopt OpenLoco's UTF-8 handling

This commit is contained in:
Gymnasiast 2018-09-21 20:38:50 +02:00
parent cdcd0b017c
commit 7d7d0aeab5
6 changed files with 412 additions and 676 deletions

View File

@ -930,7 +930,7 @@ static void window_multiplayer_groups_scrollpaint(rct_window* w, rct_drawpixelin
{ {
char* lineCh = buffer; char* lineCh = buffer;
lineCh = utf8_write_codepoint(lineCh, FORMAT_WINDOW_COLOUR_2); lineCh = utf8_write_codepoint(lineCh, FORMAT_WINDOW_COLOUR_2);
lineCh = utf8_write_codepoint(lineCh, FORMAT_TICK); lineCh = utf8_write_codepoint(lineCh, UnicodeChar::tick);
gfx_draw_string(dpi, buffer, COLOUR_BLACK, 0, y); gfx_draw_string(dpi, buffer, COLOUR_BLACK, 0, y);
} }
} }

View File

@ -74,325 +74,306 @@ int32_t font_sprite_get_codepoint_offset(int32_t codepoint)
{ {
switch (codepoint) switch (codepoint)
{ {
case FORMAT_ENDQUOTES: case UnicodeChar::quote_close:
return 34 - 32; return 34 - 32;
case FORMAT_UP: case UnicodeChar::up:
return 160 - 32; return 160 - 32;
case FORMAT_INVERTEDEXCLAMATION:
return 161 - 32;
case FORMAT_POUND:
return 163 - 32;
case FORMAT_YEN: case UnicodeChar::down:
return 165 - 32;
case FORMAT_COPYRIGHT:
return 169 - 32;
case FORMAT_DOWN:
return 170 - 32; return 170 - 32;
case FORMAT_LEFTGUILLEMET: case UnicodeChar::tick:
return 171 - 32;
case FORMAT_TICK:
return 172 - 32; return 172 - 32;
case FORMAT_CROSS: case UnicodeChar::cross:
return 173 - 32; return 173 - 32;
case FORMAT_RIGHT: case UnicodeChar::right:
return 175 - 32; return 175 - 32;
case FORMAT_DEGREE: case UnicodeChar::railway:
return 176 - 32;
case FORMAT_SYMBOL_RAILWAY:
return 177 - 32; return 177 - 32;
case FORMAT_SQUARED:
return 178 - 32;
case FORMAT_OPENQUOTES: case UnicodeChar::quote_open:
return 180 - 32; return 180 - 32;
case FORMAT_EURO: case UnicodeChar::euro:
return 181 - 32; return 181 - 32;
case FORMAT_SYMBOL_ROAD: case UnicodeChar::road:
return 182 - 32; return 182 - 32;
case FORMAT_SYMBOL_FLAG: case UnicodeChar::air:
return 183 - 32; return 183 - 32;
case FORMAT_APPROX: case UnicodeChar::water:
return 184 - 32; return 184 - 32;
case FORMAT_POWERNEGATIVEONE: case UnicodeChar::superscript_minus_one:
return 185 - 32; return 185 - 32;
case FORMAT_BULLET: case UnicodeChar::bullet:
return 186 - 32; return 186 - 32;
case FORMAT_RIGHTGUILLEMET: case UnicodeChar::small_up:
return 187 - 32;
case FORMAT_SMALLUP:
return 188 - 32; return 188 - 32;
case FORMAT_SMALLDOWN: case UnicodeChar::small_down:
return 189 - 32; return 189 - 32;
case FORMAT_LEFT: case UnicodeChar::left:
return 190 - 32; return 190 - 32;
case FORMAT_INVERTEDQUESTION:
return 191 - 32;
case UNICODE_A_OGONEK_UC: case UnicodeChar::a_ogonek_uc:
return RCT2_A_OGONEK_UC - 32; return RCT2_A_OGONEK_UC - 32;
case UNICODE_C_ACUTE_UC: case UnicodeChar::c_acute_uc:
return RCT2_C_ACUTE_UC - 32; return RCT2_C_ACUTE_UC - 32;
case UNICODE_E_OGONEK_UC: case UnicodeChar::e_ogonek_uc:
return RCT2_E_OGONEK_UC - 32; return RCT2_E_OGONEK_UC - 32;
case UNICODE_N_ACUTE_UC: case UnicodeChar::n_acute_uc:
return RCT2_N_ACUTE_UC - 32; return RCT2_N_ACUTE_UC - 32;
case UNICODE_L_STROKE_UC: case UnicodeChar::l_stroke_uc:
return RCT2_L_STROKE_UC - 32; return RCT2_L_STROKE_UC - 32;
case UNICODE_S_ACUTE_UC: case UnicodeChar::s_acute_uc:
return RCT2_S_ACUTE_UC - 32; return RCT2_S_ACUTE_UC - 32;
case UNICODE_Z_DOT_UC: case UnicodeChar::z_dot_uc:
return RCT2_Z_DOT_UC - 32; return RCT2_Z_DOT_UC - 32;
case UNICODE_Z_ACUTE_UC: case UnicodeChar::z_acute_uc:
return RCT2_Z_ACUTE_UC - 32; return RCT2_Z_ACUTE_UC - 32;
case UNICODE_A_OGONEK: case UnicodeChar::a_ogonek:
return RCT2_A_OGONEK - 32; return RCT2_A_OGONEK - 32;
case UNICODE_C_ACUTE: case UnicodeChar::c_acute:
return RCT2_C_ACUTE - 32; return RCT2_C_ACUTE - 32;
case UNICODE_E_OGONEK: case UnicodeChar::e_ogonek:
return RCT2_E_OGONEK - 32; return RCT2_E_OGONEK - 32;
case UNICODE_N_ACUTE: case UnicodeChar::n_acute:
return RCT2_N_ACUTE - 32; return RCT2_N_ACUTE - 32;
case UNICODE_L_STROKE: case UnicodeChar::l_stroke:
return RCT2_L_STROKE - 32; return RCT2_L_STROKE - 32;
case UNICODE_S_ACUTE: case UnicodeChar::s_acute:
return RCT2_S_ACUTE - 32; return RCT2_S_ACUTE - 32;
case UNICODE_Z_DOT: case UnicodeChar::z_dot:
return RCT2_Z_DOT - 32; return RCT2_Z_DOT - 32;
case UNICODE_Z_ACUTE: case UnicodeChar::z_acute:
return RCT2_Z_ACUTE - 32; return RCT2_Z_ACUTE - 32;
// Render capital sharp-S (ẞ) with lowercase sprite (ß) // Render capital sharp-S (ẞ) with lowercase sprite (ß)
case UNICODE_CAPITAL_SHARP_S: case UnicodeChar::sharp_s_uc:
return 223 - 32; return 223 - 32;
// Norwegian/Danish // Norwegian/Danish
case UNICODE_AE_UC: case UnicodeChar::ae_uc:
return SPR_G2_AE_UPPER - SPR_CHAR_START; return SPR_G2_AE_UPPER - SPR_CHAR_START;
case UNICODE_O_STROKE_UC: case UnicodeChar::o_stroke_uc:
return SPR_G2_O_STROKE_UPPER - SPR_CHAR_START; return SPR_G2_O_STROKE_UPPER - SPR_CHAR_START;
case UNICODE_AE: case UnicodeChar::ae:
return SPR_G2_AE_LOWER - SPR_CHAR_START; return SPR_G2_AE_LOWER - SPR_CHAR_START;
case UNICODE_O_STROKE: case UnicodeChar::o_stroke:
return SPR_G2_O_STROKE_LOWER - SPR_CHAR_START; return SPR_G2_O_STROKE_LOWER - SPR_CHAR_START;
case UNICODE_DINGBATS_PLUS: case UnicodeChar::plus:
return 11; return 11;
case UNICODE_DINGBATS_MINUS: case UnicodeChar::minus:
return 13; return 13;
// Cyrillic // Cyrillic
case UNICODE_CYRILLIC_A_UC: case UnicodeChar::cyrillic_a_uc:
return 'A' - 32; return 'A' - 32;
case UNICODE_CYRILLIC_BE_UC: case UnicodeChar::cyrillic_be_uc:
return SPR_G2_CYRILLIC_BE_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_BE_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_VE_UC: case UnicodeChar::cyrillic_ve_uc:
return 'B' - 32; return 'B' - 32;
case UNICODE_CYRILLIC_GHE_UC: case UnicodeChar::cyrillic_ghe_uc:
return SPR_G2_CYRILLIC_GHE_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_GHE_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_DE_UC: case UnicodeChar::cyrillic_de_uc:
return SPR_G2_CYRILLIC_DE_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_DE_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_IE_UC: case UnicodeChar::cyrillic_ie_uc:
return 'E' - 32; return 'E' - 32;
case UNICODE_CYRILLIC_ZHE_UC: case UnicodeChar::cyrillic_zhe_uc:
return SPR_G2_CYRILLIC_ZHE_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_ZHE_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_ZE_UC: case UnicodeChar::cyrillic_ze_uc:
return SPR_G2_CYRILLIC_ZE_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_ZE_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_I_UC: case UnicodeChar::cyrillic_i_uc:
return SPR_G2_CYRILLIC_I_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_I_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_SHORT_I_UC: case UnicodeChar::cyrillic_short_i_uc:
return SPR_G2_CYRILLIC_SHORT_I_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_SHORT_I_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_KA_UC: case UnicodeChar::cyrillic_ka_uc:
return 'K' - 32; return 'K' - 32;
case UNICODE_CYRILLIC_EL_UC: case UnicodeChar::cyrillic_el_uc:
return SPR_G2_CYRILLIC_EL_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_EL_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_EM_UC: case UnicodeChar::cyrillic_em_uc:
return 'M' - 32; return 'M' - 32;
case UNICODE_CYRILLIC_EN_UC: case UnicodeChar::cyrillic_en_uc:
return 'H' - 32; return 'H' - 32;
case UNICODE_CYRILLIC_O_UC: case UnicodeChar::cyrillic_o_uc:
return 'O' - 32; return 'O' - 32;
case UNICODE_CYRILLIC_PE_UC: case UnicodeChar::cyrillic_pe_uc:
return SPR_G2_CYRILLIC_PE_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_PE_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_ER_UC: case UnicodeChar::cyrillic_er_uc:
return 'P' - 32; return 'P' - 32;
case UNICODE_CYRILLIC_ES_UC: case UnicodeChar::cyrillic_es_uc:
return 'C' - 32; return 'C' - 32;
case UNICODE_CYRILLIC_TE_UC: case UnicodeChar::cyrillic_te_uc:
return 'T' - 32; return 'T' - 32;
case UNICODE_CYRILLIC_U_UC: case UnicodeChar::cyrillic_u_uc:
return SPR_G2_CYRILLIC_U_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_U_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_EF_UC: case UnicodeChar::cyrillic_ef_uc:
return SPR_G2_CYRILLIC_EF_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_EF_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_HA_UC: case UnicodeChar::cyrillic_ha_uc:
return 'X' - 32; return 'X' - 32;
case UNICODE_CYRILLIC_TSE_UC: case UnicodeChar::cyrillic_tse_uc:
return SPR_G2_CYRILLIC_TSE_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_TSE_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_CHE_UC: case UnicodeChar::cyrillic_che_uc:
return SPR_G2_CYRILLIC_CHE_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_CHE_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_SHA_UC: case UnicodeChar::cyrillic_sha_uc:
return SPR_G2_CYRILLIC_SHA_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_SHA_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_SHCHA_UC: case UnicodeChar::cyrillic_shcha_uc:
return SPR_G2_CYRILLIC_SHCHA_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_SHCHA_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_HARD_SIGN_UC: case UnicodeChar::cyrillic_hard_sign_uc:
return SPR_G2_CYRILLIC_HARD_SIGN_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_HARD_SIGN_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_YERU_UC: case UnicodeChar::cyrillic_yeru_uc:
return SPR_G2_CYRILLIC_YERU_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_YERU_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_SOFT_SIGN_UC: case UnicodeChar::cyrillic_soft_sign_uc:
return SPR_G2_CYRILLIC_SOFT_SIGN_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_SOFT_SIGN_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_E_UC: case UnicodeChar::cyrillic_e_uc:
return SPR_G2_CYRILLIC_E_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_E_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_YU_UC: case UnicodeChar::cyrillic_yu_uc:
return SPR_G2_CYRILLIC_YU_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_YU_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_YA_UC: case UnicodeChar::cyrillic_ya_uc:
return SPR_G2_CYRILLIC_YA_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_YA_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_A: case UnicodeChar::cyrillic_a:
return 'a' - 32; return 'a' - 32;
case UNICODE_CYRILLIC_BE: case UnicodeChar::cyrillic_be:
return SPR_G2_CYRILLIC_BE_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_BE_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_VE: case UnicodeChar::cyrillic_ve:
return SPR_G2_CYRILLIC_VE_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_VE_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_GHE: case UnicodeChar::cyrillic_ghe:
return SPR_G2_CYRILLIC_GHE_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_GHE_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_DE: case UnicodeChar::cyrillic_de:
return SPR_G2_CYRILLIC_DE_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_DE_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_IE: case UnicodeChar::cyrillic_ie:
return 'e' - 32; return 'e' - 32;
case UNICODE_CYRILLIC_ZHE: case UnicodeChar::cyrillic_zhe:
return SPR_G2_CYRILLIC_ZHE_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_ZHE_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_ZE: case UnicodeChar::cyrillic_ze:
return SPR_G2_CYRILLIC_ZE_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_ZE_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_I: case UnicodeChar::cyrillic_i:
return SPR_G2_CYRILLIC_I_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_I_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_SHORT_I: case UnicodeChar::cyrillic_short_i:
return SPR_G2_CYRILLIC_SHORT_I_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_SHORT_I_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_KA: case UnicodeChar::cyrillic_ka:
return SPR_G2_CYRILLIC_KA_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_KA_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_EL: case UnicodeChar::cyrillic_el:
return SPR_G2_CYRILLIC_EL_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_EL_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_EM: case UnicodeChar::cyrillic_em:
return SPR_G2_CYRILLIC_EM_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_EM_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_EN: case UnicodeChar::cyrillic_en:
return SPR_G2_CYRILLIC_EN_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_EN_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_O: case UnicodeChar::cyrillic_o:
return 'o' - 32; return 'o' - 32;
case UNICODE_CYRILLIC_PE: case UnicodeChar::cyrillic_pe:
return SPR_G2_CYRILLIC_PE_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_PE_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_ER: case UnicodeChar::cyrillic_er:
return 'p' - 32; return 'p' - 32;
case UNICODE_CYRILLIC_ES: case UnicodeChar::cyrillic_es:
return 'c' - 32; return 'c' - 32;
case UNICODE_CYRILLIC_TE: case UnicodeChar::cyrillic_te:
return SPR_G2_CYRILLIC_TE_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_TE_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_U: case UnicodeChar::cyrillic_u:
return 'y' - 32; return 'y' - 32;
case UNICODE_CYRILLIC_EF: case UnicodeChar::cyrillic_ef:
return SPR_G2_CYRILLIC_EF_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_EF_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_HA: case UnicodeChar::cyrillic_ha:
return 'x' - 32; return 'x' - 32;
case UNICODE_CYRILLIC_TSE: case UnicodeChar::cyrillic_tse:
return SPR_G2_CYRILLIC_TSE_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_TSE_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_CHE: case UnicodeChar::cyrillic_che:
return SPR_G2_CYRILLIC_CHE_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_CHE_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_SHA: case UnicodeChar::cyrillic_sha:
return SPR_G2_CYRILLIC_SHA_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_SHA_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_SHCHA: case UnicodeChar::cyrillic_shcha:
return SPR_G2_CYRILLIC_SHCHA_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_SHCHA_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_HARD_SIGN: case UnicodeChar::cyrillic_hard_sign:
// Not a typo, there is no glyph, use the upper case variant. // Not a typo, there is no glyph, use the upper case variant.
return SPR_G2_CYRILLIC_HARD_SIGN_UPPER - SPR_CHAR_START; return SPR_G2_CYRILLIC_HARD_SIGN_UPPER - SPR_CHAR_START;
case UNICODE_CYRILLIC_YERU: case UnicodeChar::cyrillic_yeru:
return SPR_G2_CYRILLIC_YERU_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_YERU_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_SOFT_SIGN: case UnicodeChar::cyrillic_soft_sign:
return SPR_G2_CYRILLIC_SOFT_SIGN_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_SOFT_SIGN_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_E: case UnicodeChar::cyrillic_e:
return SPR_G2_CYRILLIC_E_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_E_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_YU: case UnicodeChar::cyrillic_yu:
return SPR_G2_CYRILLIC_YU_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_YU_LOWER - SPR_CHAR_START;
case UNICODE_CYRILLIC_YA: case UnicodeChar::cyrillic_ya:
return SPR_G2_CYRILLIC_YA_LOWER - SPR_CHAR_START; return SPR_G2_CYRILLIC_YA_LOWER - SPR_CHAR_START;
// Looks just like Ë. // Looks just like Ë.
case UNICODE_CYRILLIC_IO_UC: case UnicodeChar::cyrillic_io_uc:
return 171; return 171;
case UNICODE_CYRILLIC_IO: case UnicodeChar::cyrillic_io:
return 203; return 203;
case FORMAT_GERMAN_OPENQUOTES: case UnicodeChar::german_quote_open:
return SPR_G2_GERMAN_OPENQUOTES - SPR_CHAR_START; return SPR_G2_GERMAN_OPENQUOTES - SPR_CHAR_START;
case FORMAT_SINGLE_OPENQUOTE: case UnicodeChar::single_quote_open:
return 64; return 64;
case FORMAT_SINGLE_ENDQUOTE: case UnicodeChar::single_quote_end:
return 7; return 7;
case FORMAT_GERMAN_SINGLE_OPENQUOTE: case UnicodeChar::single_german_quote_open:
return 12; return 12;
case UNICODE_GUILDER_SIGN: case UnicodeChar::guilder:
return SPR_G2_GUILDER_SIGN - SPR_CHAR_START; return SPR_G2_GUILDER_SIGN - SPR_CHAR_START;
// Turkish // Turkish
case UNICODE_G_BREVE_UC: case UnicodeChar::g_breve_uc:
return SPR_G2_G_BREVE_UPPER - SPR_CHAR_START; return SPR_G2_G_BREVE_UPPER - SPR_CHAR_START;
case UNICODE_I_WITH_DOT_UC: case UnicodeChar::i_with_dot_uc:
return SPR_G2_I_WITH_DOT_UPPER - SPR_CHAR_START; return SPR_G2_I_WITH_DOT_UPPER - SPR_CHAR_START;
case UNICODE_S_CEDILLA_UC: case UnicodeChar::s_cedilla_uc:
return SPR_G2_S_CEDILLA_UPPER - SPR_CHAR_START; return SPR_G2_S_CEDILLA_UPPER - SPR_CHAR_START;
case UNICODE_G_BREVE: case UnicodeChar::g_breve:
return SPR_G2_G_BREVE_LOWER - SPR_CHAR_START; return SPR_G2_G_BREVE_LOWER - SPR_CHAR_START;
case UNICODE_I_WITHOUT_DOT: case UnicodeChar::i_without_dot:
return SPR_G2_I_WITHOUT_DOT_LOWER - SPR_CHAR_START; return SPR_G2_I_WITHOUT_DOT_LOWER - SPR_CHAR_START;
case UNICODE_S_CEDILLA: case UnicodeChar::s_cedilla:
return SPR_G2_S_CEDILLA_LOWER - SPR_CHAR_START; return SPR_G2_S_CEDILLA_LOWER - SPR_CHAR_START;
case UNICODE_INTERPUNCT: case UnicodeChar::interpunct:
return SPR_G2_INTERPUNCT - SPR_CHAR_START; return SPR_G2_INTERPUNCT - SPR_CHAR_START;
case UNICODE_ELLIPSIS: case UnicodeChar::ellipsis:
return SPR_G2_ELLIPSIS - SPR_CHAR_START; return SPR_G2_ELLIPSIS - SPR_CHAR_START;
// Romanian // Romanian
case UNICODE_A_BREVE_UC: case UnicodeChar::a_breve_uc:
return SPR_G2_A_BREVE_UPPER - SPR_CHAR_START; return SPR_G2_A_BREVE_UPPER - SPR_CHAR_START;
case UNICODE_A_BREVE: case UnicodeChar::a_breve:
// Render as â, there is no visual difference on this scale. // Render as â, there is no visual difference on this scale.
return 194; return 194;
case UNICODE_S_COMMA_UC: case UnicodeChar::s_comma_uc:
// Also no visual difference. // Also no visual difference.
return SPR_G2_S_CEDILLA_UPPER - SPR_CHAR_START; return SPR_G2_S_CEDILLA_UPPER - SPR_CHAR_START;
case UNICODE_S_COMMA: case UnicodeChar::s_comma:
return SPR_G2_S_CEDILLA_LOWER - SPR_CHAR_START; return SPR_G2_S_CEDILLA_LOWER - SPR_CHAR_START;
case UNICODE_T_COMMA_UC: case UnicodeChar::t_comma_uc:
return SPR_G2_T_COMMA_UPPER - SPR_CHAR_START; return SPR_G2_T_COMMA_UPPER - SPR_CHAR_START;
case UNICODE_T_COMMA: case UnicodeChar::t_comma:
return SPR_G2_T_COMMA_LOWER - SPR_CHAR_START; return SPR_G2_T_COMMA_LOWER - SPR_CHAR_START;
// This is to catch capitalised versions of the guilder sign // This is to catch capitalised versions of the guilder sign
case UNICODE_F_WITH_HOOK_UC: case UnicodeChar::f_with_hook_uc:
return 'F' - 32; return 'F' - 32;
// Czech // Czech
case UNICODE_C_CARON_UC: case UnicodeChar::c_caron_uc:
return SPR_G2_C_CARON_UPPER - SPR_CHAR_START; return SPR_G2_C_CARON_UPPER - SPR_CHAR_START;
case UNICODE_C_CARON: case UnicodeChar::c_caron:
return SPR_G2_C_CARON_LOWER - SPR_CHAR_START; return SPR_G2_C_CARON_LOWER - SPR_CHAR_START;
case UNICODE_Y_ACUTE_UC: case UnicodeChar::y_acute_uc:
return SPR_G2_Y_ACUTE_UPPER - SPR_CHAR_START; return SPR_G2_Y_ACUTE_UPPER - SPR_CHAR_START;
case UNICODE_Y_ACUTE: case UnicodeChar::y_acute:
return SPR_G2_Y_ACUTE_LOWER - SPR_CHAR_START; return SPR_G2_Y_ACUTE_LOWER - SPR_CHAR_START;
// Hungarian // Hungarian
case UNICODE_O_DOUBLE_ACUTE_UC: case UnicodeChar::o_double_acute_uc:
return SPR_G2_O_DOUBLE_ACUTE_UPPER - SPR_CHAR_START; return SPR_G2_O_DOUBLE_ACUTE_UPPER - SPR_CHAR_START;
case UNICODE_O_DOUBLE_ACUTE: case UnicodeChar::o_double_acute:
return SPR_G2_O_DOUBLE_ACUTE_LOWER - SPR_CHAR_START; return SPR_G2_O_DOUBLE_ACUTE_LOWER - SPR_CHAR_START;
case UNICODE_U_DOUBLE_ACUTE_UC: case UnicodeChar::u_double_acute_uc:
return SPR_G2_U_DOUBLE_ACUTE_UPPER - SPR_CHAR_START; return SPR_G2_U_DOUBLE_ACUTE_UPPER - SPR_CHAR_START;
case UNICODE_U_DOUBLE_ACUTE: case UnicodeChar::u_double_acute:
return SPR_G2_U_DOUBLE_ACUTE_LOWER - SPR_CHAR_START; return SPR_G2_U_DOUBLE_ACUTE_LOWER - SPR_CHAR_START;
default: default:
@ -502,93 +483,98 @@ bool font_supports_string_sprite(const utf8* text)
bool supported = false; bool supported = false;
switch (codepoint) switch (codepoint)
{ {
case FORMAT_ENDQUOTES: // Latin alphabet
case FORMAT_UP: case UnicodeChar::ae_uc:
case FORMAT_INVERTEDEXCLAMATION: case UnicodeChar::o_stroke_uc:
case FORMAT_POUND: case UnicodeChar::y_acute_uc:
case FORMAT_YEN: case UnicodeChar::ae:
case FORMAT_COPYRIGHT: case UnicodeChar::o_stroke:
case FORMAT_DOWN: case UnicodeChar::y_acute:
case FORMAT_LEFTGUILLEMET: case UnicodeChar::a_breve_uc:
case FORMAT_TICK: case UnicodeChar::a_breve:
case FORMAT_CROSS: case UnicodeChar::a_ogonek_uc:
case FORMAT_RIGHT: case UnicodeChar::a_ogonek:
case FORMAT_DEGREE: case UnicodeChar::c_acute_uc:
case FORMAT_SYMBOL_RAILWAY: case UnicodeChar::c_acute:
case FORMAT_SQUARED: case UnicodeChar::c_caron_uc:
case FORMAT_OPENQUOTES: case UnicodeChar::c_caron:
case FORMAT_EURO: case UnicodeChar::e_ogonek_uc:
case FORMAT_SYMBOL_ROAD: case UnicodeChar::e_ogonek:
case FORMAT_SYMBOL_FLAG: case UnicodeChar::g_breve_uc:
case FORMAT_APPROX: case UnicodeChar::g_breve:
case FORMAT_POWERNEGATIVEONE: case UnicodeChar::i_with_dot_uc:
case FORMAT_BULLET: case UnicodeChar::i_without_dot:
case FORMAT_RIGHTGUILLEMET: case UnicodeChar::l_stroke_uc:
case FORMAT_SMALLUP: case UnicodeChar::l_stroke:
case FORMAT_SMALLDOWN: case UnicodeChar::n_acute_uc:
case FORMAT_LEFT: case UnicodeChar::n_acute:
case FORMAT_INVERTEDQUESTION: case UnicodeChar::o_double_acute_uc:
case UnicodeChar::o_double_acute:
case UnicodeChar::s_acute_uc:
case UnicodeChar::s_acute:
case UnicodeChar::s_cedilla_uc:
case UnicodeChar::s_cedilla:
case UnicodeChar::u_double_acute_uc:
case UnicodeChar::u_double_acute:
case UnicodeChar::z_acute_uc:
case UnicodeChar::z_acute:
case UnicodeChar::z_dot_uc:
case UnicodeChar::z_dot:
case UnicodeChar::f_with_hook_uc:
case UnicodeChar::s_comma_uc:
case UnicodeChar::s_comma:
case UnicodeChar::t_comma_uc:
case UnicodeChar::t_comma:
case UnicodeChar::sharp_s_uc:
case UNICODE_A_OGONEK_UC: // Cyrillic alphabet
case UNICODE_C_ACUTE_UC: case UnicodeChar::cyrillic_io_uc:
case UNICODE_E_OGONEK_UC: case UnicodeChar::cyrillic_io:
case UNICODE_N_ACUTE_UC:
case UNICODE_L_STROKE_UC:
case UNICODE_S_ACUTE_UC:
case UNICODE_Z_DOT_UC:
case UNICODE_Z_ACUTE_UC:
case UNICODE_A_OGONEK: // Punctuation
case UNICODE_C_ACUTE: case UnicodeChar::leftguillemet:
case UNICODE_E_OGONEK: case UnicodeChar::rightguillemet:
case UNICODE_N_ACUTE: case UnicodeChar::interpunct:
case UNICODE_L_STROKE: case UnicodeChar::single_quote_open:
case UNICODE_S_ACUTE: case UnicodeChar::single_quote_end:
case UNICODE_Z_DOT: case UnicodeChar::single_german_quote_open:
case UNICODE_Z_ACUTE: case UnicodeChar::german_quote_open:
case UnicodeChar::bullet:
case UnicodeChar::ellipsis:
case UnicodeChar::quote_open:
case UnicodeChar::quote_close:
case UNICODE_CYRILLIC_IO_UC: // Currency
case UNICODE_CYRILLIC_IO: case UnicodeChar::guilder:
case UnicodeChar::euro:
case FORMAT_GERMAN_OPENQUOTES: // Dingbats
case FORMAT_SINGLE_OPENQUOTE: case UnicodeChar::up:
case FORMAT_SINGLE_ENDQUOTE: case UnicodeChar::small_up:
case FORMAT_GERMAN_SINGLE_OPENQUOTE: case UnicodeChar::right:
case UnicodeChar::down:
case UnicodeChar::small_down:
case UnicodeChar::left:
case UnicodeChar::air:
case UnicodeChar::tick:
case UnicodeChar::plus:
case UnicodeChar::minus:
case UNICODE_GUILDER_SIGN: // Emoji
case UnicodeChar::cross:
case UnicodeChar::variation_selector:
case UnicodeChar::water:
case UnicodeChar::road:
case UnicodeChar::railway:
case UNICODE_G_BREVE_UC: // Misc
case UNICODE_I_WITH_DOT_UC: case UnicodeChar::superscript_minus_one:
case UNICODE_S_CEDILLA_UC:
case UNICODE_G_BREVE:
case UNICODE_I_WITHOUT_DOT:
case UNICODE_S_CEDILLA:
case UNICODE_INTERPUNCT:
case UNICODE_ELLIPSIS:
case UNICODE_A_BREVE_UC:
case UNICODE_A_BREVE:
case UNICODE_S_COMMA_UC:
case UNICODE_S_COMMA:
case UNICODE_T_COMMA_UC:
case UNICODE_T_COMMA:
case UNICODE_C_CARON_UC:
case UNICODE_C_CARON:
case UNICODE_Y_ACUTE_UC:
case UNICODE_Y_ACUTE:
case UNICODE_O_DOUBLE_ACUTE_UC:
case UNICODE_O_DOUBLE_ACUTE:
case UNICODE_U_DOUBLE_ACUTE_UC:
case UNICODE_U_DOUBLE_ACUTE:
supported = true; supported = true;
break; break;
default: default:
if ((codepoint >= 32 && codepoint < 256) if ((codepoint >= 32 && codepoint < 256)
|| (codepoint >= UNICODE_CYRILLIC_A_UC && codepoint <= UNICODE_CYRILLIC_YA)) || (codepoint >= UnicodeChar::cyrillic_a_uc && codepoint <= UnicodeChar::cyrillic_ya))
{ {
supported = true; supported = true;
} }

View File

@ -15,13 +15,10 @@
#include <cstdlib> #include <cstdlib>
// clang-format off // clang-format off
const encoding_convert_entry RCT2ToUnicodeTable[256] = const encoding_convert_entry RCT2ToUnicodeTable[] =
{ {
{ 0, 0 },
{ 1, FORMAT_MOVE_X }, { 1, FORMAT_MOVE_X },
{ 2, FORMAT_ADJUST_PALETTE }, { 2, FORMAT_ADJUST_PALETTE },
{ 3, 3 },
{ 4, 4 },
{ 5, FORMAT_NEWLINE }, { 5, FORMAT_NEWLINE },
{ 6, FORMAT_NEWLINE_SMALLER }, { 6, FORMAT_NEWLINE_SMALLER },
{ 7, FORMAT_TINYFONT }, { 7, FORMAT_TINYFONT },
@ -33,113 +30,8 @@ const encoding_convert_entry RCT2ToUnicodeTable[256] =
{ 13, FORMAT_WINDOW_COLOUR_1 }, { 13, FORMAT_WINDOW_COLOUR_1 },
{ 14, FORMAT_WINDOW_COLOUR_2 }, { 14, FORMAT_WINDOW_COLOUR_2 },
{ 15, FORMAT_WINDOW_COLOUR_3 }, { 15, FORMAT_WINDOW_COLOUR_3 },
{ 16, 16 },
{ 17, FORMAT_NEWLINE_X_Y }, { 17, FORMAT_NEWLINE_X_Y },
{ 18, 18 },
{ 19, 19 },
{ 20, 20 },
{ 21, 21 },
{ 22, 22 },
{ 23, FORMAT_INLINE_SPRITE }, { 23, FORMAT_INLINE_SPRITE },
{ 24, 24 },
{ 25, 25 },
{ 26, 26 },
{ 27, 27 },
{ 28, 28 },
{ 29, 29 },
{ 30, 30 },
{ 31, 31 },
{ 32, 32 },
{ 33, 33 },
{ 34, 34 },
{ 35, 35 },
{ 36, 36 },
{ 37, 37 },
{ 38, 38 },
{ 39, 39 },
{ 40, 40 },
{ 41, 41 },
{ 42, 42 },
{ 43, 43 },
{ 44, 44 },
{ 45, 45 },
{ 46, 46 },
{ 47, 47 },
{ 48, 48 },
{ 49, 49 },
{ 50, 50 },
{ 51, 51 },
{ 52, 52 },
{ 53, 53 },
{ 54, 54 },
{ 55, 55 },
{ 56, 56 },
{ 57, 57 },
{ 58, 58 },
{ 59, 59 },
{ 60, 60 },
{ 61, 61 },
{ 62, 62 },
{ 63, 63 },
{ 64, 64 },
{ 65, 65 },
{ 66, 66 },
{ 67, 67 },
{ 68, 68 },
{ 69, 69 },
{ 70, 70 },
{ 71, 71 },
{ 72, 72 },
{ 73, 73 },
{ 74, 74 },
{ 75, 75 },
{ 76, 76 },
{ 77, 77 },
{ 78, 78 },
{ 79, 79 },
{ 80, 80 },
{ 81, 81 },
{ 82, 82 },
{ 83, 83 },
{ 84, 84 },
{ 85, 85 },
{ 86, 86 },
{ 87, 87 },
{ 88, 88 },
{ 89, 89 },
{ 90, 90 },
{ 91, 91 },
{ 92, 92 },
{ 93, 93 },
{ 94, 94 },
{ 95, 95 },
{ 96, 96 },
{ 97, 97 },
{ 98, 98 },
{ 99, 99 },
{ 100, 100 },
{ 101, 101 },
{ 102, 102 },
{ 103, 103 },
{ 104, 104 },
{ 105, 105 },
{ 106, 106 },
{ 107, 107 },
{ 108, 108 },
{ 109, 109 },
{ 110, 110 },
{ 111, 111 },
{ 112, 112 },
{ 113, 113 },
{ 114, 114 },
{ 115, 115 },
{ 116, 116 },
{ 117, 117 },
{ 118, 118 },
{ 119, 119 },
{ 120, 120 },
{ 121, 121 },
{ 122, 122 },
{ 123, FORMAT_COMMA32 }, { 123, FORMAT_COMMA32 },
{ 124, FORMAT_INT32 }, { 124, FORMAT_INT32 },
{ 125, FORMAT_COMMA2DP32 }, { 125, FORMAT_COMMA2DP32 },
@ -173,106 +65,38 @@ const encoding_convert_entry RCT2ToUnicodeTable[256] =
{ 153, FORMAT_LIGHTPINK }, { 153, FORMAT_LIGHTPINK },
{ 154, FORMAT_PEARLAQUA }, { 154, FORMAT_PEARLAQUA },
{ 155, FORMAT_PALESILVER }, { 155, FORMAT_PALESILVER },
{ 156, 156 }, { RCT2_A_OGONEK_UC, UnicodeChar::a_ogonek_uc },
{ 157, 157 }, { 160, UnicodeChar::up },
{ 158, 158 }, { RCT2_C_ACUTE_UC, UnicodeChar::c_acute_uc },
{ RCT2_A_OGONEK_UC, UNICODE_A_OGONEK_UC }, { RCT2_E_OGONEK_UC, UnicodeChar::e_ogonek_uc },
{ 160, FORMAT_UP }, { RCT2_L_STROKE_UC, UnicodeChar::l_stroke_uc },
{ 161, FORMAT_INVERTEDEXCLAMATION }, { 170, UnicodeChar::down },
{ RCT2_C_ACUTE_UC, UNICODE_C_ACUTE_UC }, { 172, UnicodeChar::tick },
{ 163, FORMAT_POUND }, { 173, UnicodeChar::cross },
{ 164, 164 }, { 175, UnicodeChar::right },
{ 165, FORMAT_YEN }, { 177, UnicodeChar::railway },
{ RCT2_E_OGONEK_UC, UNICODE_E_OGONEK_UC }, { 180, UnicodeChar::quote_open },
{ RCT2_L_STROKE_UC, UNICODE_L_STROKE_UC }, { 181, UnicodeChar::euro },
{ 168, 168 }, { 182, UnicodeChar::road },
{ 169, FORMAT_COPYRIGHT }, { 183, UnicodeChar::air },
{ 170, FORMAT_DOWN }, { 184, UnicodeChar::water },
{ 171, FORMAT_LEFTGUILLEMET }, { 185, UnicodeChar::superscript_minus_one},
{ 172, FORMAT_TICK }, { 186, UnicodeChar::bullet },
{ 173, FORMAT_CROSS }, { 188, UnicodeChar::small_up },
{ 174, 174 }, { 189, UnicodeChar::small_down },
{ 175, FORMAT_RIGHT }, { 190, UnicodeChar::left },
{ 176, FORMAT_DEGREE }, { RCT2_N_ACUTE_UC, UnicodeChar::n_acute_uc },
{ 177, FORMAT_SYMBOL_RAILWAY }, { RCT2_S_ACUTE_UC, UnicodeChar::s_acute_uc },
{ 178, FORMAT_SQUARED }, { RCT2_Z_ACUTE_UC, UnicodeChar::z_acute_uc },
{ 179, 179 }, { RCT2_Z_DOT_UC, UnicodeChar::z_dot_uc },
{ 180, FORMAT_OPENQUOTES }, { RCT2_A_OGONEK, UnicodeChar::a_ogonek },
{ 181, FORMAT_EURO }, { RCT2_C_ACUTE, UnicodeChar::c_acute },
{ 182, FORMAT_SYMBOL_ROAD }, { RCT2_E_OGONEK, UnicodeChar::e_ogonek },
{ 183, FORMAT_SYMBOL_FLAG }, { RCT2_N_ACUTE, UnicodeChar::n_acute },
{ 184, FORMAT_APPROX }, { RCT2_L_STROKE, UnicodeChar::l_stroke },
{ 185, FORMAT_POWERNEGATIVEONE }, { RCT2_S_ACUTE, UnicodeChar::s_acute },
{ 186, FORMAT_BULLET }, { RCT2_Z_DOT, UnicodeChar::z_dot },
{ 187, FORMAT_RIGHTGUILLEMET }, { RCT2_Z_ACUTE, UnicodeChar::z_acute },
{ 188, FORMAT_SMALLUP },
{ 189, FORMAT_SMALLDOWN },
{ 190, FORMAT_LEFT },
{ 191, FORMAT_INVERTEDQUESTION },
{ 192, 192 },
{ 193, 193 },
{ 194, 194 },
{ 195, 195 },
{ 196, 196 },
{ 197, 197 },
{ RCT2_N_ACUTE_UC, UNICODE_N_ACUTE_UC },
{ 199, 199 },
{ 200, 200 },
{ 201, 201 },
{ 202, 202 },
{ 203, 203 },
{ 204, 204 },
{ 205, 205 },
{ 206, 206 },
{ 207, 207 },
{ RCT2_S_ACUTE_UC, UNICODE_S_ACUTE_UC },
{ 209, 209 },
{ 210, 210 },
{ 211, 211 },
{ 212, 212 },
{ 213, 213 },
{ 214, 214 },
{ RCT2_Z_ACUTE_UC, UNICODE_Z_ACUTE_UC },
{ RCT2_Z_DOT_UC, UNICODE_Z_DOT_UC },
{ 217, 217 },
{ 218, 218 },
{ 219, 219 },
{ 220, 220 },
{ RCT2_A_OGONEK, UNICODE_A_OGONEK },
{ RCT2_C_ACUTE, UNICODE_C_ACUTE },
{ 223, 223 },
{ 224, 224 },
{ 225, 225 },
{ 226, 226 },
{ 227, 227 },
{ 228, 228 },
{ 229, 229 },
{ RCT2_E_OGONEK, UNICODE_E_OGONEK },
{ 231, 231 },
{ 232, 232 },
{ 233, 233 },
{ 234, 234 },
{ 235, 235 },
{ 236, 236 },
{ 237, 237 },
{ 238, 238 },
{ 239, 239 },
{ RCT2_N_ACUTE, UNICODE_N_ACUTE },
{ 241, 241 },
{ 242, 242 },
{ 243, 243 },
{ 244, 244 },
{ 245, 245 },
{ 246, 246 },
{ RCT2_L_STROKE, UNICODE_L_STROKE },
{ RCT2_S_ACUTE, UNICODE_S_ACUTE },
{ 249, 249 },
{ 250, 250 },
{ 251, 251 },
{ 252, 252 },
{ RCT2_Z_DOT, UNICODE_Z_DOT },
{ RCT2_Z_ACUTE, UNICODE_Z_ACUTE },
{ 255, 255 }
}; };
static int32_t encoding_search_compare(const void *pKey, const void *pEntry) static int32_t encoding_search_compare(const void *pKey, const void *pEntry)

View File

@ -17,7 +17,7 @@ struct encoding_convert_entry
uint32_t unicode; uint32_t unicode;
}; };
extern const encoding_convert_entry RCT2ToUnicodeTable[256]; extern const encoding_convert_entry RCT2ToUnicodeTable[];
wchar_t encoding_convert_rct2_to_unicode(wchar_t rct2str); wchar_t encoding_convert_rct2_to_unicode(wchar_t rct2str);
uint32_t encoding_convert_unicode_to_rct2(uint32_t unicode); uint32_t encoding_convert_unicode_to_rct2(uint32_t unicode);

View File

@ -38,7 +38,6 @@ static constexpr const format_code_token format_code_tokens[] = {
{ FORMAT_WINDOW_COLOUR_3, "WINDOW_COLOUR_3" }, { FORMAT_WINDOW_COLOUR_3, "WINDOW_COLOUR_3" },
{ FORMAT_NEWLINE_X_Y, "NEWLINE_X_Y" }, { FORMAT_NEWLINE_X_Y, "NEWLINE_X_Y" },
{ FORMAT_INLINE_SPRITE, "INLINE_SPRITE" }, { FORMAT_INLINE_SPRITE, "INLINE_SPRITE" },
{ FORMAT_ENDQUOTES, "ENDQUOTES" },
{ FORMAT_COMMA32, "COMMA32" }, { FORMAT_COMMA32, "COMMA32" },
{ FORMAT_INT32, "INT32" }, { FORMAT_INT32, "INT32" },
{ FORMAT_COMMA2DP32, "COMMA2DP32" }, { FORMAT_COMMA2DP32, "COMMA2DP32" },
@ -72,27 +71,6 @@ static constexpr const format_code_token format_code_tokens[] = {
{ FORMAT_LIGHTPINK, "LIGHTPINK" }, { FORMAT_LIGHTPINK, "LIGHTPINK" },
{ FORMAT_PEARLAQUA, "PEARLAQUA" }, { FORMAT_PEARLAQUA, "PEARLAQUA" },
{ FORMAT_PALESILVER, "PALESILVER" }, { FORMAT_PALESILVER, "PALESILVER" },
{ FORMAT_UP, "UP" },
{ FORMAT_POUND, "POUND" },
{ FORMAT_YEN, "YEN" },
{ FORMAT_COPYRIGHT, "COPYRIGHT" },
{ FORMAT_DOWN, "DOWN" },
{ FORMAT_LEFTGUILLEMET, "LEFTGUILLEMET" },
{ FORMAT_TICK, "TICK" },
{ FORMAT_CROSS, "CROSS" },
{ FORMAT_RIGHT, "RIGHT" },
{ FORMAT_DEGREE, "DEGREE" },
{ FORMAT_SQUARED, "SQUARED" },
{ FORMAT_OPENQUOTES, "OPENQUOTES" },
{ FORMAT_EURO, "EURO" },
{ FORMAT_APPROX, "APPROX" },
{ FORMAT_POWERNEGATIVEONE, "POWERNEGATIVEONE" },
{ FORMAT_BULLET, "BULLET" },
{ FORMAT_RIGHTGUILLEMET, "RIGHTGUILLEMET" },
{ FORMAT_SMALLUP, "SMALLUP" },
{ FORMAT_SMALLDOWN, "SMALLDOWN" },
{ FORMAT_LEFT, "LEFT" },
{ FORMAT_INVERTEDQUESTION, "INVERTEDQUESTION" },
{ FORMAT_COMMA1DP16, "COMMA1DP16" } { FORMAT_COMMA1DP16, "COMMA1DP16" }
}; };
// clang-format on // clang-format on
@ -121,21 +99,21 @@ bool utf8_should_use_sprite_for_codepoint(int32_t codepoint)
{ {
switch (codepoint) switch (codepoint)
{ {
case FORMAT_UP: case UnicodeChar::up:
case FORMAT_DOWN: case UnicodeChar::down:
case FORMAT_LEFTGUILLEMET: case UnicodeChar::leftguillemet:
case FORMAT_TICK: case UnicodeChar::tick:
case FORMAT_CROSS: case UnicodeChar::cross:
case FORMAT_RIGHT: case UnicodeChar::right:
case FORMAT_RIGHTGUILLEMET: case UnicodeChar::rightguillemet:
case FORMAT_SMALLUP: case UnicodeChar::small_up:
case FORMAT_SMALLDOWN: case UnicodeChar::small_down:
case FORMAT_LEFT: case UnicodeChar::left:
case FORMAT_OPENQUOTES: case UnicodeChar::quote_open:
case FORMAT_ENDQUOTES: case UnicodeChar::quote_close:
case FORMAT_GERMAN_OPENQUOTES: case UnicodeChar::german_quote_open:
case UNICODE_DINGBATS_PLUS: case UnicodeChar::plus:
case UNICODE_DINGBATS_MINUS: case UnicodeChar::minus:
return true; return true;
default: default:
return false; return false;

View File

@ -7,8 +7,7 @@
* OpenRCT2 is licensed under the GNU General Public License version 3. * OpenRCT2 is licensed under the GNU General Public License version 3.
*****************************************************************************/ *****************************************************************************/
#ifndef _FORMAT_CODES_H_ #pragma once
#define _FORMAT_CODES_H_
#include "../common.h" #include "../common.h"
@ -94,45 +93,6 @@ enum
FORMAT_PALESILVER, FORMAT_PALESILVER,
FORMAT_COLOUR_CODE_END = FORMAT_PALESILVER, FORMAT_COLOUR_CODE_END = FORMAT_PALESILVER,
// Extra non-ASCII characters
FORMAT_INVERTEDEXCLAMATION = 161,
FORMAT_POUND = 163,
FORMAT_YEN = 165,
FORMAT_COPYRIGHT = 169,
FORMAT_LEFTGUILLEMET = 171,
FORMAT_DEGREE = 176,
FORMAT_SQUARED = 178,
FORMAT_RIGHTGUILLEMET = 187,
FORMAT_INVERTEDQUESTION = 191,
FORMAT_SINGLE_OPENQUOTE = 8216,
FORMAT_SINGLE_ENDQUOTE = 8217,
FORMAT_GERMAN_SINGLE_OPENQUOTE = 8218,
FORMAT_OPENQUOTES = 8220,
FORMAT_ENDQUOTES = 8221,
FORMAT_GERMAN_OPENQUOTES = 8222,
FORMAT_BULLET = 8226,
FORMAT_POWERNEGATIVEONE = 8315,
FORMAT_EURO = 8364,
FORMAT_APPROX = 8776,
FORMAT_UP = 9650,
FORMAT_RIGHT = 9654,
FORMAT_DOWN = 9660,
FORMAT_LEFT = 9664,
FORMAT_SMALLUP = 9652,
FORMAT_SMALLDOWN = 9662,
FORMAT_TICK = 10003,
FORMAT_CROSS = 0x274C,
FORMAT_SYMBOL_RAILWAY = 128740,
FORMAT_SYMBOL_ROAD = 128739,
FORMAT_SYMBOL_FLAG = 128681,
// Format codes that need suitable Unicode allocations // Format codes that need suitable Unicode allocations
FORMAT_COMMA1DP16 = 20004 FORMAT_COMMA1DP16 = 20004
}; };
@ -158,171 +118,159 @@ enum RCT2Polish
RCT2_Z_ACUTE = 254, // 0xFE RCT2_Z_ACUTE = 254, // 0xFE
}; };
enum UnicodePolish namespace UnicodeChar
{ {
UNICODE_A_OGONEK_UC = 260, // Latin alphabet
UNICODE_C_ACUTE_UC = 262, constexpr char32_t ae_uc = 0xC6;
UNICODE_E_OGONEK_UC = 280, constexpr char32_t o_stroke_uc = 0xD8;
UNICODE_N_ACUTE_UC = 323, constexpr char32_t y_acute_uc = 0xDD;
UNICODE_L_STROKE_UC = 321, constexpr char32_t ae = 0xE6;
UNICODE_S_ACUTE_UC = 346, constexpr char32_t o_stroke = 0xF8;
UNICODE_Z_DOT_UC = 379, constexpr char32_t y_acute = 0xFD;
UNICODE_Z_ACUTE_UC = 377, constexpr char32_t a_breve_uc = 0x102;
constexpr char32_t a_breve = 0x103;
constexpr char32_t a_ogonek_uc = 0x104;
constexpr char32_t a_ogonek = 0x105;
constexpr char32_t c_acute_uc = 0x106;
constexpr char32_t c_acute = 0x107;
constexpr char32_t c_caron_uc = 0x10C;
constexpr char32_t c_caron = 0x10D;
constexpr char32_t e_ogonek_uc = 0x118;
constexpr char32_t e_ogonek = 0x119;
constexpr char32_t g_breve_uc = 0x11E;
constexpr char32_t g_breve = 0x11F;
constexpr char32_t i_with_dot_uc = 0x130;
constexpr char32_t i_without_dot = 0x131;
constexpr char32_t l_stroke_uc = 0x141;
constexpr char32_t l_stroke = 0x142;
constexpr char32_t n_acute_uc = 0x143;
constexpr char32_t n_acute = 0x144;
constexpr char32_t o_double_acute_uc = 0x150;
constexpr char32_t o_double_acute = 0x151;
constexpr char32_t s_acute_uc = 0x15A;
constexpr char32_t s_acute = 0x15B;
constexpr char32_t s_cedilla_uc = 0x15E;
constexpr char32_t s_cedilla = 0x15F;
constexpr char32_t u_double_acute_uc = 0x170;
constexpr char32_t u_double_acute = 0x171;
constexpr char32_t z_acute_uc = 0x179;
constexpr char32_t z_acute = 0x17A;
constexpr char32_t z_dot_uc = 0x17B;
constexpr char32_t z_dot = 0x17C;
constexpr char32_t f_with_hook_uc = 0x191;
constexpr char32_t s_comma_uc = 0x218;
constexpr char32_t s_comma = 0x219;
constexpr char32_t t_comma_uc = 0x21A;
constexpr char32_t t_comma = 0x21B;
constexpr char32_t sharp_s_uc = 0x1E9E;
UNICODE_A_OGONEK = 261, // Cyrillic alphabet
UNICODE_C_ACUTE = 263, constexpr char32_t cyrillic_io_uc = 0x401;
UNICODE_E_OGONEK = 281, constexpr char32_t cyrillic_a_uc = 0x410;
UNICODE_N_ACUTE = 324, constexpr char32_t cyrillic_be_uc = 0x411;
UNICODE_L_STROKE = 322, constexpr char32_t cyrillic_ve_uc = 0x412;
UNICODE_S_ACUTE = 347, constexpr char32_t cyrillic_ghe_uc = 0x413;
UNICODE_Z_DOT = 380, constexpr char32_t cyrillic_de_uc = 0x414;
UNICODE_Z_ACUTE = 378, constexpr char32_t cyrillic_ie_uc = 0x415;
}; constexpr char32_t cyrillic_zhe_uc = 0x416;
constexpr char32_t cyrillic_ze_uc = 0x417;
constexpr char32_t cyrillic_i_uc = 0x418;
constexpr char32_t cyrillic_short_i_uc = 0x419;
constexpr char32_t cyrillic_ka_uc = 0x41A;
constexpr char32_t cyrillic_el_uc = 0x41B;
constexpr char32_t cyrillic_em_uc = 0x41C;
constexpr char32_t cyrillic_en_uc = 0x41D;
constexpr char32_t cyrillic_o_uc = 0x41E;
constexpr char32_t cyrillic_pe_uc = 0x41F;
constexpr char32_t cyrillic_er_uc = 0x420;
constexpr char32_t cyrillic_es_uc = 0x421;
constexpr char32_t cyrillic_te_uc = 0x422;
constexpr char32_t cyrillic_u_uc = 0x423;
constexpr char32_t cyrillic_ef_uc = 0x424;
constexpr char32_t cyrillic_ha_uc = 0x425;
constexpr char32_t cyrillic_tse_uc = 0x426;
constexpr char32_t cyrillic_che_uc = 0x427;
constexpr char32_t cyrillic_sha_uc = 0x428;
constexpr char32_t cyrillic_shcha_uc = 0x429;
constexpr char32_t cyrillic_hard_sign_uc = 0x42A;
constexpr char32_t cyrillic_yeru_uc = 0x42B;
constexpr char32_t cyrillic_soft_sign_uc = 0x42C;
constexpr char32_t cyrillic_e_uc = 0x42D;
constexpr char32_t cyrillic_yu_uc = 0x42E;
constexpr char32_t cyrillic_ya_uc = 0x42F;
enum UnicodeCatalan constexpr char32_t cyrillic_a = 0x430;
{ constexpr char32_t cyrillic_be = 0x431;
UNICODE_INTERPUNCT = 183, constexpr char32_t cyrillic_ve = 0x432;
}; constexpr char32_t cyrillic_ghe = 0x433;
constexpr char32_t cyrillic_de = 0x434;
constexpr char32_t cyrillic_ie = 0x435;
constexpr char32_t cyrillic_zhe = 0x436;
constexpr char32_t cyrillic_ze = 0x437;
constexpr char32_t cyrillic_i = 0x438;
constexpr char32_t cyrillic_short_i = 0x439;
constexpr char32_t cyrillic_ka = 0x43A;
constexpr char32_t cyrillic_el = 0x43B;
constexpr char32_t cyrillic_em = 0x43C;
constexpr char32_t cyrillic_en = 0x43D;
constexpr char32_t cyrillic_o = 0x43E;
constexpr char32_t cyrillic_pe = 0x43F;
constexpr char32_t cyrillic_er = 0x440;
constexpr char32_t cyrillic_es = 0x441;
constexpr char32_t cyrillic_te = 0x442;
constexpr char32_t cyrillic_u = 0x443;
constexpr char32_t cyrillic_ef = 0x444;
constexpr char32_t cyrillic_ha = 0x445;
constexpr char32_t cyrillic_tse = 0x446;
constexpr char32_t cyrillic_che = 0x447;
constexpr char32_t cyrillic_sha = 0x448;
constexpr char32_t cyrillic_shcha = 0x449;
constexpr char32_t cyrillic_hard_sign = 0x44A;
constexpr char32_t cyrillic_yeru = 0x44B;
constexpr char32_t cyrillic_soft_sign = 0x44C;
constexpr char32_t cyrillic_e = 0x44D;
constexpr char32_t cyrillic_yu = 0x44E;
constexpr char32_t cyrillic_ya = 0x44F;
enum UnicodeGerman constexpr char32_t cyrillic_io = 0x451;
{
UNICODE_CAPITAL_SHARP_S = 0x1E9E,
};
enum UnicodeNorwegianDanish // Punctuation
{ constexpr char32_t leftguillemet = 0xAB;
UNICODE_AE_UC = 198, constexpr char32_t rightguillemet = 0xBB;
UNICODE_O_STROKE_UC = 216, constexpr char32_t interpunct = 0x49F;
UNICODE_AE = 230, constexpr char32_t single_quote_open = 0x2018;
UNICODE_O_STROKE = 248, constexpr char32_t single_quote_end = 0x2019;
}; constexpr char32_t single_german_quote_open = 0x201A;
constexpr char32_t german_quote_open = 0x201E;
constexpr char32_t bullet = 0x2022;
constexpr char32_t ellipsis = 0x2026;
constexpr char32_t quote_open = 0x201C;
constexpr char32_t quote_close = 0x201D;
enum UnicodeCyrillic // Currency
{ constexpr char32_t guilder = 0x192;
UNICODE_CYRILLIC_A_UC = 1040, constexpr char32_t euro = 0x20AC;
UNICODE_CYRILLIC_BE_UC = 1041,
UNICODE_CYRILLIC_VE_UC = 1042,
UNICODE_CYRILLIC_GHE_UC = 1043,
UNICODE_CYRILLIC_DE_UC = 1044,
UNICODE_CYRILLIC_IE_UC = 1045,
UNICODE_CYRILLIC_ZHE_UC = 1046,
UNICODE_CYRILLIC_ZE_UC = 1047,
UNICODE_CYRILLIC_I_UC = 1048,
UNICODE_CYRILLIC_SHORT_I_UC = 1049,
UNICODE_CYRILLIC_KA_UC = 1050,
UNICODE_CYRILLIC_EL_UC = 1051,
UNICODE_CYRILLIC_EM_UC = 1052,
UNICODE_CYRILLIC_EN_UC = 1053,
UNICODE_CYRILLIC_O_UC = 1054,
UNICODE_CYRILLIC_PE_UC = 1055,
UNICODE_CYRILLIC_ER_UC = 1056,
UNICODE_CYRILLIC_ES_UC = 1057,
UNICODE_CYRILLIC_TE_UC = 1058,
UNICODE_CYRILLIC_U_UC = 1059,
UNICODE_CYRILLIC_EF_UC = 1060,
UNICODE_CYRILLIC_HA_UC = 1061,
UNICODE_CYRILLIC_TSE_UC = 1062,
UNICODE_CYRILLIC_CHE_UC = 1063,
UNICODE_CYRILLIC_SHA_UC = 1064,
UNICODE_CYRILLIC_SHCHA_UC = 1065,
UNICODE_CYRILLIC_HARD_SIGN_UC = 1066,
UNICODE_CYRILLIC_YERU_UC = 1067,
UNICODE_CYRILLIC_SOFT_SIGN_UC = 1068,
UNICODE_CYRILLIC_E_UC = 1069,
UNICODE_CYRILLIC_YU_UC = 1070,
UNICODE_CYRILLIC_YA_UC = 1071,
UNICODE_CYRILLIC_A = 1072, // Dingbats
UNICODE_CYRILLIC_BE = 1073, constexpr char32_t up = 0x25B2;
UNICODE_CYRILLIC_VE = 1074, constexpr char32_t small_up = 0x25B4;
UNICODE_CYRILLIC_GHE = 1075, constexpr char32_t right = 0x25B6;
UNICODE_CYRILLIC_DE = 1076, constexpr char32_t down = 0x25BC;
UNICODE_CYRILLIC_IE = 1077, constexpr char32_t small_down = 0x25BE;
UNICODE_CYRILLIC_ZHE = 1078, constexpr char32_t left = 0x25C0;
UNICODE_CYRILLIC_ZE = 1079, constexpr char32_t air = 0x2601;
UNICODE_CYRILLIC_I = 1080, constexpr char32_t tick = 0x2713;
UNICODE_CYRILLIC_SHORT_I = 1081, constexpr char32_t plus = 0x2795;
UNICODE_CYRILLIC_KA = 1082, constexpr char32_t minus = 0x2796;
UNICODE_CYRILLIC_EL = 1083,
UNICODE_CYRILLIC_EM = 1084,
UNICODE_CYRILLIC_EN = 1085,
UNICODE_CYRILLIC_O = 1086,
UNICODE_CYRILLIC_PE = 1087,
UNICODE_CYRILLIC_ER = 1088,
UNICODE_CYRILLIC_ES = 1089,
UNICODE_CYRILLIC_TE = 1090,
UNICODE_CYRILLIC_U = 1091,
UNICODE_CYRILLIC_EF = 1092,
UNICODE_CYRILLIC_HA = 1093,
UNICODE_CYRILLIC_TSE = 1094,
UNICODE_CYRILLIC_CHE = 1095,
UNICODE_CYRILLIC_SHA = 1096,
UNICODE_CYRILLIC_SHCHA = 1097,
UNICODE_CYRILLIC_HARD_SIGN = 1098,
UNICODE_CYRILLIC_YERU = 1099,
UNICODE_CYRILLIC_SOFT_SIGN = 1100,
UNICODE_CYRILLIC_E = 1101,
UNICODE_CYRILLIC_YU = 1102,
UNICODE_CYRILLIC_YA = 1103,
UNICODE_CYRILLIC_IO_UC = 1025, // Emoji
UNICODE_CYRILLIC_IO = 1105, constexpr char32_t cross = 0x274C;
constexpr char32_t variation_selector = 0xFE0F;
constexpr char32_t water = 0x1F30A;
constexpr char32_t road = 0x1F6E3;
constexpr char32_t railway = 0x1F6E4;
}; // Misc
constexpr char32_t superscript_minus_one = 0x207B;
enum UnicodeTurkish }; // namespace UnicodeChar
{
UNICODE_G_BREVE_UC = 286,
UNICODE_G_BREVE = 287,
UNICODE_I_WITH_DOT_UC = 304,
UNICODE_I_WITHOUT_DOT = 305,
UNICODE_S_CEDILLA_UC = 350,
UNICODE_S_CEDILLA = 351,
};
enum UnicodeRomanian
{
UNICODE_A_BREVE_UC = 258,
UNICODE_A_BREVE = 259,
UNICODE_S_COMMA_UC = 536,
UNICODE_S_COMMA = 537,
UNICODE_T_COMMA_UC = 538,
UNICODE_T_COMMA = 539,
};
enum UnicodeDingbats
{
UNICODE_DINGBATS_PLUS = 0x2795,
UNICODE_DINGBATS_MINUS = 0x2796,
};
enum UnicodeCurrency
{
UNICODE_GUILDER_SIGN = 402,
// Not a currency sign, but the guilder sign will be capitalised to this.
UNICODE_F_WITH_HOOK_UC = 401,
};
enum UnicodePunctuation
{
UNICODE_ELLIPSIS = 8230,
};
enum UnicodeCzech
{
UNICODE_C_CARON_UC = 268,
UNICODE_C_CARON = 269,
UNICODE_Y_ACUTE_UC = 221,
UNICODE_Y_ACUTE = 253,
};
enum UnicodeHungarian
{
UNICODE_O_DOUBLE_ACUTE_UC = 336,
UNICODE_O_DOUBLE_ACUTE = 337,
UNICODE_U_DOUBLE_ACUTE_UC = 368,
UNICODE_U_DOUBLE_ACUTE = 369,
};
#endif