From 7d7d0aeab5ad8a217b284ab1b297ede92846e19b Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Fri, 21 Sep 2018 20:38:50 +0200 Subject: [PATCH] Adopt OpenLoco's UTF-8 handling --- src/openrct2-ui/windows/Multiplayer.cpp | 2 +- src/openrct2/drawing/Font.cpp | 444 +++++++++--------- .../localisation/ConversionTables.cpp | 242 ++-------- src/openrct2/localisation/ConversionTables.h | 2 +- src/openrct2/localisation/FormatCodes.cpp | 52 +- src/openrct2/localisation/FormatCodes.h | 346 ++++++-------- 6 files changed, 412 insertions(+), 676 deletions(-) diff --git a/src/openrct2-ui/windows/Multiplayer.cpp b/src/openrct2-ui/windows/Multiplayer.cpp index 254a996f89..007aa98828 100644 --- a/src/openrct2-ui/windows/Multiplayer.cpp +++ b/src/openrct2-ui/windows/Multiplayer.cpp @@ -930,7 +930,7 @@ static void window_multiplayer_groups_scrollpaint(rct_window* w, rct_drawpixelin { char* lineCh = buffer; 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); } } diff --git a/src/openrct2/drawing/Font.cpp b/src/openrct2/drawing/Font.cpp index a44346475a..734eece8da 100644 --- a/src/openrct2/drawing/Font.cpp +++ b/src/openrct2/drawing/Font.cpp @@ -74,325 +74,306 @@ int32_t font_sprite_get_codepoint_offset(int32_t codepoint) { switch (codepoint) { - case FORMAT_ENDQUOTES: + case UnicodeChar::quote_close: return 34 - 32; - case FORMAT_UP: + case UnicodeChar::up: return 160 - 32; - case FORMAT_INVERTEDEXCLAMATION: - return 161 - 32; - case FORMAT_POUND: - return 163 - 32; - case FORMAT_YEN: - return 165 - 32; - - case FORMAT_COPYRIGHT: - return 169 - 32; - case FORMAT_DOWN: + case UnicodeChar::down: return 170 - 32; - case FORMAT_LEFTGUILLEMET: - return 171 - 32; - case FORMAT_TICK: + case UnicodeChar::tick: return 172 - 32; - case FORMAT_CROSS: + case UnicodeChar::cross: return 173 - 32; - case FORMAT_RIGHT: + case UnicodeChar::right: return 175 - 32; - case FORMAT_DEGREE: - return 176 - 32; - case FORMAT_SYMBOL_RAILWAY: + case UnicodeChar::railway: return 177 - 32; - case FORMAT_SQUARED: - return 178 - 32; - case FORMAT_OPENQUOTES: + case UnicodeChar::quote_open: return 180 - 32; - case FORMAT_EURO: + case UnicodeChar::euro: return 181 - 32; - case FORMAT_SYMBOL_ROAD: + case UnicodeChar::road: return 182 - 32; - case FORMAT_SYMBOL_FLAG: + case UnicodeChar::air: return 183 - 32; - case FORMAT_APPROX: + case UnicodeChar::water: return 184 - 32; - case FORMAT_POWERNEGATIVEONE: + case UnicodeChar::superscript_minus_one: return 185 - 32; - case FORMAT_BULLET: + case UnicodeChar::bullet: return 186 - 32; - case FORMAT_RIGHTGUILLEMET: - return 187 - 32; - case FORMAT_SMALLUP: + case UnicodeChar::small_up: return 188 - 32; - case FORMAT_SMALLDOWN: + case UnicodeChar::small_down: return 189 - 32; - case FORMAT_LEFT: + case UnicodeChar::left: 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; - case UNICODE_C_ACUTE_UC: + case UnicodeChar::c_acute_uc: return RCT2_C_ACUTE_UC - 32; - case UNICODE_E_OGONEK_UC: + case UnicodeChar::e_ogonek_uc: return RCT2_E_OGONEK_UC - 32; - case UNICODE_N_ACUTE_UC: + case UnicodeChar::n_acute_uc: return RCT2_N_ACUTE_UC - 32; - case UNICODE_L_STROKE_UC: + case UnicodeChar::l_stroke_uc: return RCT2_L_STROKE_UC - 32; - case UNICODE_S_ACUTE_UC: + case UnicodeChar::s_acute_uc: return RCT2_S_ACUTE_UC - 32; - case UNICODE_Z_DOT_UC: + case UnicodeChar::z_dot_uc: return RCT2_Z_DOT_UC - 32; - case UNICODE_Z_ACUTE_UC: + case UnicodeChar::z_acute_uc: return RCT2_Z_ACUTE_UC - 32; - case UNICODE_A_OGONEK: + case UnicodeChar::a_ogonek: return RCT2_A_OGONEK - 32; - case UNICODE_C_ACUTE: + case UnicodeChar::c_acute: return RCT2_C_ACUTE - 32; - case UNICODE_E_OGONEK: + case UnicodeChar::e_ogonek: return RCT2_E_OGONEK - 32; - case UNICODE_N_ACUTE: + case UnicodeChar::n_acute: return RCT2_N_ACUTE - 32; - case UNICODE_L_STROKE: + case UnicodeChar::l_stroke: return RCT2_L_STROKE - 32; - case UNICODE_S_ACUTE: + case UnicodeChar::s_acute: return RCT2_S_ACUTE - 32; - case UNICODE_Z_DOT: + case UnicodeChar::z_dot: return RCT2_Z_DOT - 32; - case UNICODE_Z_ACUTE: + case UnicodeChar::z_acute: return RCT2_Z_ACUTE - 32; // Render capital sharp-S (ẞ) with lowercase sprite (ß) - case UNICODE_CAPITAL_SHARP_S: + case UnicodeChar::sharp_s_uc: return 223 - 32; // Norwegian/Danish - case UNICODE_AE_UC: + case UnicodeChar::ae_uc: 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; - case UNICODE_AE: + case UnicodeChar::ae: 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; - case UNICODE_DINGBATS_PLUS: + case UnicodeChar::plus: return 11; - case UNICODE_DINGBATS_MINUS: + case UnicodeChar::minus: return 13; // Cyrillic - case UNICODE_CYRILLIC_A_UC: + case UnicodeChar::cyrillic_a_uc: return 'A' - 32; - case UNICODE_CYRILLIC_BE_UC: + case UnicodeChar::cyrillic_be_uc: return SPR_G2_CYRILLIC_BE_UPPER - SPR_CHAR_START; - case UNICODE_CYRILLIC_VE_UC: + case UnicodeChar::cyrillic_ve_uc: return 'B' - 32; - case UNICODE_CYRILLIC_GHE_UC: + case UnicodeChar::cyrillic_ghe_uc: 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; - case UNICODE_CYRILLIC_IE_UC: + case UnicodeChar::cyrillic_ie_uc: return 'E' - 32; - case UNICODE_CYRILLIC_ZHE_UC: + case UnicodeChar::cyrillic_zhe_uc: 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; - case UNICODE_CYRILLIC_I_UC: + case UnicodeChar::cyrillic_i_uc: 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; - case UNICODE_CYRILLIC_KA_UC: + case UnicodeChar::cyrillic_ka_uc: return 'K' - 32; - case UNICODE_CYRILLIC_EL_UC: + case UnicodeChar::cyrillic_el_uc: return SPR_G2_CYRILLIC_EL_UPPER - SPR_CHAR_START; - case UNICODE_CYRILLIC_EM_UC: + case UnicodeChar::cyrillic_em_uc: return 'M' - 32; - case UNICODE_CYRILLIC_EN_UC: + case UnicodeChar::cyrillic_en_uc: return 'H' - 32; - case UNICODE_CYRILLIC_O_UC: + case UnicodeChar::cyrillic_o_uc: return 'O' - 32; - case UNICODE_CYRILLIC_PE_UC: + case UnicodeChar::cyrillic_pe_uc: return SPR_G2_CYRILLIC_PE_UPPER - SPR_CHAR_START; - case UNICODE_CYRILLIC_ER_UC: + case UnicodeChar::cyrillic_er_uc: return 'P' - 32; - case UNICODE_CYRILLIC_ES_UC: + case UnicodeChar::cyrillic_es_uc: return 'C' - 32; - case UNICODE_CYRILLIC_TE_UC: + case UnicodeChar::cyrillic_te_uc: return 'T' - 32; - case UNICODE_CYRILLIC_U_UC: + case UnicodeChar::cyrillic_u_uc: 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; - case UNICODE_CYRILLIC_HA_UC: + case UnicodeChar::cyrillic_ha_uc: return 'X' - 32; - case UNICODE_CYRILLIC_TSE_UC: + case UnicodeChar::cyrillic_tse_uc: 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; - case UNICODE_CYRILLIC_SHA_UC: + case UnicodeChar::cyrillic_sha_uc: 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; - case UNICODE_CYRILLIC_HARD_SIGN_UC: + case UnicodeChar::cyrillic_hard_sign_uc: 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; - case UNICODE_CYRILLIC_SOFT_SIGN_UC: + case UnicodeChar::cyrillic_soft_sign_uc: 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; - case UNICODE_CYRILLIC_YU_UC: + case UnicodeChar::cyrillic_yu_uc: 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; - case UNICODE_CYRILLIC_A: + case UnicodeChar::cyrillic_a: return 'a' - 32; - case UNICODE_CYRILLIC_BE: + case UnicodeChar::cyrillic_be: 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; - case UNICODE_CYRILLIC_GHE: + case UnicodeChar::cyrillic_ghe: 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; - case UNICODE_CYRILLIC_IE: + case UnicodeChar::cyrillic_ie: return 'e' - 32; - case UNICODE_CYRILLIC_ZHE: + case UnicodeChar::cyrillic_zhe: 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; - case UNICODE_CYRILLIC_I: + case UnicodeChar::cyrillic_i: 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; - case UNICODE_CYRILLIC_KA: + case UnicodeChar::cyrillic_ka: 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; - case UNICODE_CYRILLIC_EM: + case UnicodeChar::cyrillic_em: 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; - case UNICODE_CYRILLIC_O: + case UnicodeChar::cyrillic_o: return 'o' - 32; - case UNICODE_CYRILLIC_PE: + case UnicodeChar::cyrillic_pe: return SPR_G2_CYRILLIC_PE_LOWER - SPR_CHAR_START; - case UNICODE_CYRILLIC_ER: + case UnicodeChar::cyrillic_er: return 'p' - 32; - case UNICODE_CYRILLIC_ES: + case UnicodeChar::cyrillic_es: return 'c' - 32; - case UNICODE_CYRILLIC_TE: + case UnicodeChar::cyrillic_te: return SPR_G2_CYRILLIC_TE_LOWER - SPR_CHAR_START; - case UNICODE_CYRILLIC_U: + case UnicodeChar::cyrillic_u: return 'y' - 32; - case UNICODE_CYRILLIC_EF: + case UnicodeChar::cyrillic_ef: return SPR_G2_CYRILLIC_EF_LOWER - SPR_CHAR_START; - case UNICODE_CYRILLIC_HA: + case UnicodeChar::cyrillic_ha: return 'x' - 32; - case UNICODE_CYRILLIC_TSE: + case UnicodeChar::cyrillic_tse: 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; - case UNICODE_CYRILLIC_SHA: + case UnicodeChar::cyrillic_sha: 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; - case UNICODE_CYRILLIC_HARD_SIGN: + case UnicodeChar::cyrillic_hard_sign: // Not a typo, there is no glyph, use the upper case variant. 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; - case UNICODE_CYRILLIC_SOFT_SIGN: + case UnicodeChar::cyrillic_soft_sign: 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; - case UNICODE_CYRILLIC_YU: + case UnicodeChar::cyrillic_yu: 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; // Looks just like Ë. - case UNICODE_CYRILLIC_IO_UC: + case UnicodeChar::cyrillic_io_uc: return 171; - case UNICODE_CYRILLIC_IO: + case UnicodeChar::cyrillic_io: return 203; - case FORMAT_GERMAN_OPENQUOTES: + case UnicodeChar::german_quote_open: return SPR_G2_GERMAN_OPENQUOTES - SPR_CHAR_START; - case FORMAT_SINGLE_OPENQUOTE: + case UnicodeChar::single_quote_open: return 64; - case FORMAT_SINGLE_ENDQUOTE: + case UnicodeChar::single_quote_end: return 7; - case FORMAT_GERMAN_SINGLE_OPENQUOTE: + case UnicodeChar::single_german_quote_open: return 12; - case UNICODE_GUILDER_SIGN: + case UnicodeChar::guilder: return SPR_G2_GUILDER_SIGN - SPR_CHAR_START; // Turkish - case UNICODE_G_BREVE_UC: + case UnicodeChar::g_breve_uc: 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; - case UNICODE_S_CEDILLA_UC: + case UnicodeChar::s_cedilla_uc: 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; - case UNICODE_I_WITHOUT_DOT: + case UnicodeChar::i_without_dot: 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; - case UNICODE_INTERPUNCT: + case UnicodeChar::interpunct: return SPR_G2_INTERPUNCT - SPR_CHAR_START; - case UNICODE_ELLIPSIS: + case UnicodeChar::ellipsis: return SPR_G2_ELLIPSIS - SPR_CHAR_START; // Romanian - case UNICODE_A_BREVE_UC: + case UnicodeChar::a_breve_uc: 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. return 194; - case UNICODE_S_COMMA_UC: + case UnicodeChar::s_comma_uc: // Also no visual difference. 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; - case UNICODE_T_COMMA_UC: + case UnicodeChar::t_comma_uc: 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; // 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; // Czech - case UNICODE_C_CARON_UC: + case UnicodeChar::c_caron_uc: 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; - case UNICODE_Y_ACUTE_UC: + case UnicodeChar::y_acute_uc: 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; // Hungarian - case UNICODE_O_DOUBLE_ACUTE_UC: + case UnicodeChar::o_double_acute_uc: 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; - case UNICODE_U_DOUBLE_ACUTE_UC: + case UnicodeChar::u_double_acute_uc: 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; default: @@ -502,93 +483,98 @@ bool font_supports_string_sprite(const utf8* text) bool supported = false; switch (codepoint) { - case FORMAT_ENDQUOTES: - case FORMAT_UP: - case FORMAT_INVERTEDEXCLAMATION: - case FORMAT_POUND: - case FORMAT_YEN: - case FORMAT_COPYRIGHT: - case FORMAT_DOWN: - case FORMAT_LEFTGUILLEMET: - case FORMAT_TICK: - case FORMAT_CROSS: - case FORMAT_RIGHT: - case FORMAT_DEGREE: - case FORMAT_SYMBOL_RAILWAY: - case FORMAT_SQUARED: - case FORMAT_OPENQUOTES: - case FORMAT_EURO: - case FORMAT_SYMBOL_ROAD: - case FORMAT_SYMBOL_FLAG: - case FORMAT_APPROX: - case FORMAT_POWERNEGATIVEONE: - case FORMAT_BULLET: - case FORMAT_RIGHTGUILLEMET: - case FORMAT_SMALLUP: - case FORMAT_SMALLDOWN: - case FORMAT_LEFT: - case FORMAT_INVERTEDQUESTION: + // Latin alphabet + case UnicodeChar::ae_uc: + case UnicodeChar::o_stroke_uc: + case UnicodeChar::y_acute_uc: + case UnicodeChar::ae: + case UnicodeChar::o_stroke: + case UnicodeChar::y_acute: + case UnicodeChar::a_breve_uc: + case UnicodeChar::a_breve: + case UnicodeChar::a_ogonek_uc: + case UnicodeChar::a_ogonek: + case UnicodeChar::c_acute_uc: + case UnicodeChar::c_acute: + case UnicodeChar::c_caron_uc: + case UnicodeChar::c_caron: + case UnicodeChar::e_ogonek_uc: + case UnicodeChar::e_ogonek: + case UnicodeChar::g_breve_uc: + case UnicodeChar::g_breve: + case UnicodeChar::i_with_dot_uc: + case UnicodeChar::i_without_dot: + case UnicodeChar::l_stroke_uc: + case UnicodeChar::l_stroke: + case UnicodeChar::n_acute_uc: + case UnicodeChar::n_acute: + 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: - case UNICODE_C_ACUTE_UC: - case UNICODE_E_OGONEK_UC: - 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: + // Cyrillic alphabet + case UnicodeChar::cyrillic_io_uc: + case UnicodeChar::cyrillic_io: - case UNICODE_A_OGONEK: - case UNICODE_C_ACUTE: - case UNICODE_E_OGONEK: - case UNICODE_N_ACUTE: - case UNICODE_L_STROKE: - case UNICODE_S_ACUTE: - case UNICODE_Z_DOT: - case UNICODE_Z_ACUTE: + // Punctuation + case UnicodeChar::leftguillemet: + case UnicodeChar::rightguillemet: + case UnicodeChar::interpunct: + case UnicodeChar::single_quote_open: + case UnicodeChar::single_quote_end: + case UnicodeChar::single_german_quote_open: + case UnicodeChar::german_quote_open: + case UnicodeChar::bullet: + case UnicodeChar::ellipsis: + case UnicodeChar::quote_open: + case UnicodeChar::quote_close: - case UNICODE_CYRILLIC_IO_UC: - case UNICODE_CYRILLIC_IO: + // Currency + case UnicodeChar::guilder: + case UnicodeChar::euro: - case FORMAT_GERMAN_OPENQUOTES: - case FORMAT_SINGLE_OPENQUOTE: - case FORMAT_SINGLE_ENDQUOTE: - case FORMAT_GERMAN_SINGLE_OPENQUOTE: + // Dingbats + case UnicodeChar::up: + case UnicodeChar::small_up: + 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: - case UNICODE_I_WITH_DOT_UC: - 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: + // Misc + case UnicodeChar::superscript_minus_one: supported = true; break; default: 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; } diff --git a/src/openrct2/localisation/ConversionTables.cpp b/src/openrct2/localisation/ConversionTables.cpp index d922ecba23..0b306193e0 100644 --- a/src/openrct2/localisation/ConversionTables.cpp +++ b/src/openrct2/localisation/ConversionTables.cpp @@ -15,13 +15,10 @@ #include // clang-format off -const encoding_convert_entry RCT2ToUnicodeTable[256] = +const encoding_convert_entry RCT2ToUnicodeTable[] = { - { 0, 0 }, { 1, FORMAT_MOVE_X }, { 2, FORMAT_ADJUST_PALETTE }, - { 3, 3 }, - { 4, 4 }, { 5, FORMAT_NEWLINE }, { 6, FORMAT_NEWLINE_SMALLER }, { 7, FORMAT_TINYFONT }, @@ -33,113 +30,8 @@ const encoding_convert_entry RCT2ToUnicodeTable[256] = { 13, FORMAT_WINDOW_COLOUR_1 }, { 14, FORMAT_WINDOW_COLOUR_2 }, { 15, FORMAT_WINDOW_COLOUR_3 }, - { 16, 16 }, { 17, FORMAT_NEWLINE_X_Y }, - { 18, 18 }, - { 19, 19 }, - { 20, 20 }, - { 21, 21 }, - { 22, 22 }, { 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 }, { 124, FORMAT_INT32 }, { 125, FORMAT_COMMA2DP32 }, @@ -173,106 +65,38 @@ const encoding_convert_entry RCT2ToUnicodeTable[256] = { 153, FORMAT_LIGHTPINK }, { 154, FORMAT_PEARLAQUA }, { 155, FORMAT_PALESILVER }, - { 156, 156 }, - { 157, 157 }, - { 158, 158 }, - { RCT2_A_OGONEK_UC, UNICODE_A_OGONEK_UC }, - { 160, FORMAT_UP }, - { 161, FORMAT_INVERTEDEXCLAMATION }, - { RCT2_C_ACUTE_UC, UNICODE_C_ACUTE_UC }, - { 163, FORMAT_POUND }, - { 164, 164 }, - { 165, FORMAT_YEN }, - { RCT2_E_OGONEK_UC, UNICODE_E_OGONEK_UC }, - { RCT2_L_STROKE_UC, UNICODE_L_STROKE_UC }, - { 168, 168 }, - { 169, FORMAT_COPYRIGHT }, - { 170, FORMAT_DOWN }, - { 171, FORMAT_LEFTGUILLEMET }, - { 172, FORMAT_TICK }, - { 173, FORMAT_CROSS }, - { 174, 174 }, - { 175, FORMAT_RIGHT }, - { 176, FORMAT_DEGREE }, - { 177, FORMAT_SYMBOL_RAILWAY }, - { 178, FORMAT_SQUARED }, - { 179, 179 }, - { 180, FORMAT_OPENQUOTES }, - { 181, FORMAT_EURO }, - { 182, FORMAT_SYMBOL_ROAD }, - { 183, FORMAT_SYMBOL_FLAG }, - { 184, FORMAT_APPROX }, - { 185, FORMAT_POWERNEGATIVEONE }, - { 186, FORMAT_BULLET }, - { 187, FORMAT_RIGHTGUILLEMET }, - { 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 } + { RCT2_A_OGONEK_UC, UnicodeChar::a_ogonek_uc }, + { 160, UnicodeChar::up }, + { RCT2_C_ACUTE_UC, UnicodeChar::c_acute_uc }, + { RCT2_E_OGONEK_UC, UnicodeChar::e_ogonek_uc }, + { RCT2_L_STROKE_UC, UnicodeChar::l_stroke_uc }, + { 170, UnicodeChar::down }, + { 172, UnicodeChar::tick }, + { 173, UnicodeChar::cross }, + { 175, UnicodeChar::right }, + { 177, UnicodeChar::railway }, + { 180, UnicodeChar::quote_open }, + { 181, UnicodeChar::euro }, + { 182, UnicodeChar::road }, + { 183, UnicodeChar::air }, + { 184, UnicodeChar::water }, + { 185, UnicodeChar::superscript_minus_one}, + { 186, UnicodeChar::bullet }, + { 188, UnicodeChar::small_up }, + { 189, UnicodeChar::small_down }, + { 190, UnicodeChar::left }, + { RCT2_N_ACUTE_UC, UnicodeChar::n_acute_uc }, + { RCT2_S_ACUTE_UC, UnicodeChar::s_acute_uc }, + { RCT2_Z_ACUTE_UC, UnicodeChar::z_acute_uc }, + { RCT2_Z_DOT_UC, UnicodeChar::z_dot_uc }, + { RCT2_A_OGONEK, UnicodeChar::a_ogonek }, + { RCT2_C_ACUTE, UnicodeChar::c_acute }, + { RCT2_E_OGONEK, UnicodeChar::e_ogonek }, + { RCT2_N_ACUTE, UnicodeChar::n_acute }, + { RCT2_L_STROKE, UnicodeChar::l_stroke }, + { RCT2_S_ACUTE, UnicodeChar::s_acute }, + { RCT2_Z_DOT, UnicodeChar::z_dot }, + { RCT2_Z_ACUTE, UnicodeChar::z_acute }, }; static int32_t encoding_search_compare(const void *pKey, const void *pEntry) diff --git a/src/openrct2/localisation/ConversionTables.h b/src/openrct2/localisation/ConversionTables.h index daec4de1f1..4707f1c2e0 100644 --- a/src/openrct2/localisation/ConversionTables.h +++ b/src/openrct2/localisation/ConversionTables.h @@ -17,7 +17,7 @@ struct encoding_convert_entry 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); uint32_t encoding_convert_unicode_to_rct2(uint32_t unicode); diff --git a/src/openrct2/localisation/FormatCodes.cpp b/src/openrct2/localisation/FormatCodes.cpp index 9a89667330..b6817cfd82 100644 --- a/src/openrct2/localisation/FormatCodes.cpp +++ b/src/openrct2/localisation/FormatCodes.cpp @@ -38,7 +38,6 @@ static constexpr const format_code_token format_code_tokens[] = { { FORMAT_WINDOW_COLOUR_3, "WINDOW_COLOUR_3" }, { FORMAT_NEWLINE_X_Y, "NEWLINE_X_Y" }, { FORMAT_INLINE_SPRITE, "INLINE_SPRITE" }, - { FORMAT_ENDQUOTES, "ENDQUOTES" }, { FORMAT_COMMA32, "COMMA32" }, { FORMAT_INT32, "INT32" }, { FORMAT_COMMA2DP32, "COMMA2DP32" }, @@ -72,27 +71,6 @@ static constexpr const format_code_token format_code_tokens[] = { { FORMAT_LIGHTPINK, "LIGHTPINK" }, { FORMAT_PEARLAQUA, "PEARLAQUA" }, { 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" } }; // clang-format on @@ -121,21 +99,21 @@ bool utf8_should_use_sprite_for_codepoint(int32_t codepoint) { switch (codepoint) { - case FORMAT_UP: - case FORMAT_DOWN: - case FORMAT_LEFTGUILLEMET: - case FORMAT_TICK: - case FORMAT_CROSS: - case FORMAT_RIGHT: - case FORMAT_RIGHTGUILLEMET: - case FORMAT_SMALLUP: - case FORMAT_SMALLDOWN: - case FORMAT_LEFT: - case FORMAT_OPENQUOTES: - case FORMAT_ENDQUOTES: - case FORMAT_GERMAN_OPENQUOTES: - case UNICODE_DINGBATS_PLUS: - case UNICODE_DINGBATS_MINUS: + case UnicodeChar::up: + case UnicodeChar::down: + case UnicodeChar::leftguillemet: + case UnicodeChar::tick: + case UnicodeChar::cross: + case UnicodeChar::right: + case UnicodeChar::rightguillemet: + case UnicodeChar::small_up: + case UnicodeChar::small_down: + case UnicodeChar::left: + case UnicodeChar::quote_open: + case UnicodeChar::quote_close: + case UnicodeChar::german_quote_open: + case UnicodeChar::plus: + case UnicodeChar::minus: return true; default: return false; diff --git a/src/openrct2/localisation/FormatCodes.h b/src/openrct2/localisation/FormatCodes.h index 6421e5e74d..4b32f69ec7 100644 --- a/src/openrct2/localisation/FormatCodes.h +++ b/src/openrct2/localisation/FormatCodes.h @@ -7,8 +7,7 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ -#ifndef _FORMAT_CODES_H_ -#define _FORMAT_CODES_H_ +#pragma once #include "../common.h" @@ -94,45 +93,6 @@ enum 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_COMMA1DP16 = 20004 }; @@ -158,171 +118,159 @@ enum RCT2Polish RCT2_Z_ACUTE = 254, // 0xFE }; -enum UnicodePolish +namespace UnicodeChar { - UNICODE_A_OGONEK_UC = 260, - UNICODE_C_ACUTE_UC = 262, - UNICODE_E_OGONEK_UC = 280, - UNICODE_N_ACUTE_UC = 323, - UNICODE_L_STROKE_UC = 321, - UNICODE_S_ACUTE_UC = 346, - UNICODE_Z_DOT_UC = 379, - UNICODE_Z_ACUTE_UC = 377, + // Latin alphabet + constexpr char32_t ae_uc = 0xC6; + constexpr char32_t o_stroke_uc = 0xD8; + constexpr char32_t y_acute_uc = 0xDD; + constexpr char32_t ae = 0xE6; + constexpr char32_t o_stroke = 0xF8; + constexpr char32_t y_acute = 0xFD; + 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, - UNICODE_C_ACUTE = 263, - UNICODE_E_OGONEK = 281, - UNICODE_N_ACUTE = 324, - UNICODE_L_STROKE = 322, - UNICODE_S_ACUTE = 347, - UNICODE_Z_DOT = 380, - UNICODE_Z_ACUTE = 378, -}; + // Cyrillic alphabet + constexpr char32_t cyrillic_io_uc = 0x401; + constexpr char32_t cyrillic_a_uc = 0x410; + constexpr char32_t cyrillic_be_uc = 0x411; + constexpr char32_t cyrillic_ve_uc = 0x412; + constexpr char32_t cyrillic_ghe_uc = 0x413; + constexpr char32_t cyrillic_de_uc = 0x414; + 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 -{ - UNICODE_INTERPUNCT = 183, -}; + constexpr char32_t cyrillic_a = 0x430; + constexpr char32_t cyrillic_be = 0x431; + 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 -{ - UNICODE_CAPITAL_SHARP_S = 0x1E9E, -}; + constexpr char32_t cyrillic_io = 0x451; -enum UnicodeNorwegianDanish -{ - UNICODE_AE_UC = 198, - UNICODE_O_STROKE_UC = 216, - UNICODE_AE = 230, - UNICODE_O_STROKE = 248, -}; + // Punctuation + constexpr char32_t leftguillemet = 0xAB; + constexpr char32_t rightguillemet = 0xBB; + constexpr char32_t interpunct = 0x49F; + constexpr char32_t single_quote_open = 0x2018; + 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 -{ - UNICODE_CYRILLIC_A_UC = 1040, - 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, + // Currency + constexpr char32_t guilder = 0x192; + constexpr char32_t euro = 0x20AC; - UNICODE_CYRILLIC_A = 1072, - UNICODE_CYRILLIC_BE = 1073, - UNICODE_CYRILLIC_VE = 1074, - UNICODE_CYRILLIC_GHE = 1075, - UNICODE_CYRILLIC_DE = 1076, - UNICODE_CYRILLIC_IE = 1077, - UNICODE_CYRILLIC_ZHE = 1078, - UNICODE_CYRILLIC_ZE = 1079, - UNICODE_CYRILLIC_I = 1080, - UNICODE_CYRILLIC_SHORT_I = 1081, - UNICODE_CYRILLIC_KA = 1082, - 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, + // Dingbats + constexpr char32_t up = 0x25B2; + constexpr char32_t small_up = 0x25B4; + constexpr char32_t right = 0x25B6; + constexpr char32_t down = 0x25BC; + constexpr char32_t small_down = 0x25BE; + constexpr char32_t left = 0x25C0; + constexpr char32_t air = 0x2601; + constexpr char32_t tick = 0x2713; + constexpr char32_t plus = 0x2795; + constexpr char32_t minus = 0x2796; - UNICODE_CYRILLIC_IO_UC = 1025, - UNICODE_CYRILLIC_IO = 1105, + // Emoji + 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 -{ - 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 +}; // namespace UnicodeChar