diff --git a/openrct2.vcxproj b/openrct2.vcxproj index 99c831daf7..2e3bfde9eb 100644 --- a/openrct2.vcxproj +++ b/openrct2.vcxproj @@ -102,6 +102,7 @@ + diff --git a/src/localisation/format_codes.c b/src/localisation/format_codes.c new file mode 100644 index 0000000000..640bdf6890 --- /dev/null +++ b/src/localisation/format_codes.c @@ -0,0 +1,142 @@ +#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers +/***************************************************************************** + * OpenRCT2, an open source clone of Roller Coaster Tycoon 2. + * + * OpenRCT2 is the work of many authors, a full list can be found in contributors.md + * For more information, visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * A full copy of the GNU General Public License can be found in licence.txt + *****************************************************************************/ +#pragma endregion + +#include "../common.h" +#include "format_codes.h" +#include "localisation.h" + +#pragma region Format codes + +typedef struct format_code_token { + uint32 code; + const char *token; +} format_code_token; + +format_code_token format_code_tokens[] = { + { FORMAT_MOVE_X, "MOVE_X" }, + { FORMAT_ADJUST_PALETTE, "ADJUST_PALETTE" }, + { FORMAT_NEWLINE, "NEWLINE" }, + { FORMAT_NEWLINE_SMALLER, "NEWLINE_SMALLER" }, + { FORMAT_TINYFONT, "TINYFONT" }, + { FORMAT_BIGFONT, "BIGFONT" }, + { FORMAT_MEDIUMFONT, "MEDIUMFONT" }, + { FORMAT_SMALLFONT, "SMALLFONT" }, + { FORMAT_OUTLINE, "OUTLINE" }, + { FORMAT_OUTLINE_OFF, "OUTLINE_OFF" }, + { FORMAT_WINDOW_COLOUR_1, "WINDOW_COLOUR_1" }, + { FORMAT_WINDOW_COLOUR_2, "WINDOW_COLOUR_2" }, + { 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" }, + { FORMAT_COMMA16, "COMMA16" }, + { FORMAT_UINT16, "UINT16" }, + { FORMAT_CURRENCY2DP, "CURRENCY2DP" }, + { FORMAT_CURRENCY, "CURRENCY" }, + { FORMAT_STRINGID, "STRINGID" }, + { FORMAT_STRINGID2, "STRINGID2" }, + { FORMAT_STRING, "STRING" }, + { FORMAT_MONTHYEAR, "MONTHYEAR" }, + { FORMAT_MONTH, "MONTH" }, + { FORMAT_VELOCITY, "VELOCITY" }, + { FORMAT_POP16, "POP16" }, + { FORMAT_PUSH16, "PUSH16" }, + { FORMAT_DURATION, "DURATION" }, + { FORMAT_REALTIME, "REALTIME" }, + { FORMAT_LENGTH, "LENGTH" }, + { FORMAT_SPRITE, "SPRITE" }, + { FORMAT_BLACK, "BLACK" }, + { FORMAT_GREY, "GREY" }, + { FORMAT_WHITE, "WHITE" }, + { FORMAT_RED, "RED" }, + { FORMAT_GREEN, "GREEN" }, + { FORMAT_YELLOW, "YELLOW" }, + { FORMAT_TOPAZ, "TOPAZ" }, + { FORMAT_CELADON, "CELADON" }, + { FORMAT_BABYBLUE, "BABYBLUE" }, + { FORMAT_PALELAVENDER, "PALELAVENDER" }, + { FORMAT_PALEGOLD, "PALEGOLD" }, + { FORMAT_LIGHTPINK, "LIGHTPINK" }, + { FORMAT_PEARLAQUA, "PEARLAQUA" }, + { FORMAT_PALESILVER, "PALESILVER" }, + { FORMAT_AMINUSCULE, "AMINUSCULE" }, + { 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" } +}; + +uint32 format_get_code(const char *token) +{ + int i; + for (i = 0; i < countof(format_code_tokens); i++) + if (_strcmpi(token, format_code_tokens[i].token) == 0) + return format_code_tokens[i].code; + return 0; +} + +const char *format_get_token(uint32 code) +{ + int i; + for (i = 0; i < countof(format_code_tokens); i++) + if (code == format_code_tokens[i].code) + return format_code_tokens[i].token; + return 0; +} + +bool utf8_should_use_sprite_for_codepoint(int 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: + return true; + default: + return false; + } +} + +#pragma endregion diff --git a/src/localisation/localisation.c b/src/localisation/localisation.c index d6bf46fb2f..e5c53a912a 100644 --- a/src/localisation/localisation.c +++ b/src/localisation/localisation.c @@ -323,129 +323,6 @@ const rct_string_id DateGameShortMonthNames[MONTH_COUNT] = { STR_MONTH_SHORT_OCT, }; -#pragma region Format codes - -typedef struct format_code_token { - uint32 code; - const char *token; -} format_code_token; - -format_code_token format_code_tokens[] = { - { FORMAT_MOVE_X, "MOVE_X" }, - { FORMAT_ADJUST_PALETTE, "ADJUST_PALETTE" }, - { FORMAT_NEWLINE, "NEWLINE" }, - { FORMAT_NEWLINE_SMALLER, "NEWLINE_SMALLER" }, - { FORMAT_TINYFONT, "TINYFONT" }, - { FORMAT_BIGFONT, "BIGFONT" }, - { FORMAT_MEDIUMFONT, "MEDIUMFONT" }, - { FORMAT_SMALLFONT, "SMALLFONT" }, - { FORMAT_OUTLINE, "OUTLINE" }, - { FORMAT_OUTLINE_OFF, "OUTLINE_OFF" }, - { FORMAT_WINDOW_COLOUR_1, "WINDOW_COLOUR_1" }, - { FORMAT_WINDOW_COLOUR_2, "WINDOW_COLOUR_2" }, - { 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" }, - { FORMAT_COMMA16, "COMMA16" }, - { FORMAT_UINT16, "UINT16" }, - { FORMAT_CURRENCY2DP, "CURRENCY2DP" }, - { FORMAT_CURRENCY, "CURRENCY" }, - { FORMAT_STRINGID, "STRINGID" }, - { FORMAT_STRINGID2, "STRINGID2" }, - { FORMAT_STRING, "STRING" }, - { FORMAT_MONTHYEAR, "MONTHYEAR" }, - { FORMAT_MONTH, "MONTH" }, - { FORMAT_VELOCITY, "VELOCITY" }, - { FORMAT_POP16, "POP16" }, - { FORMAT_PUSH16, "PUSH16" }, - { FORMAT_DURATION, "DURATION" }, - { FORMAT_REALTIME, "REALTIME" }, - { FORMAT_LENGTH, "LENGTH" }, - { FORMAT_SPRITE, "SPRITE" }, - { FORMAT_BLACK, "BLACK" }, - { FORMAT_GREY, "GREY" }, - { FORMAT_WHITE, "WHITE" }, - { FORMAT_RED, "RED" }, - { FORMAT_GREEN, "GREEN" }, - { FORMAT_YELLOW, "YELLOW" }, - { FORMAT_TOPAZ, "TOPAZ" }, - { FORMAT_CELADON, "CELADON" }, - { FORMAT_BABYBLUE, "BABYBLUE" }, - { FORMAT_PALELAVENDER, "PALELAVENDER" }, - { FORMAT_PALEGOLD, "PALEGOLD" }, - { FORMAT_LIGHTPINK, "LIGHTPINK" }, - { FORMAT_PEARLAQUA, "PEARLAQUA" }, - { FORMAT_PALESILVER, "PALESILVER" }, - { FORMAT_AMINUSCULE, "AMINUSCULE" }, - { 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" } -}; - -uint32 format_get_code(const char *token) -{ - int i; - for (i = 0; i < countof(format_code_tokens); i++) - if (_strcmpi(token, format_code_tokens[i].token) == 0) - return format_code_tokens[i].code; - return 0; -} - -const char *format_get_token(uint32 code) -{ - int i; - for (i = 0; i < countof(format_code_tokens); i++) - if (code == format_code_tokens[i].code) - return format_code_tokens[i].token; - return 0; -} - -bool utf8_should_use_sprite_for_codepoint(int 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: - return true; - default: - return false; - } -} - -#pragma endregion - #define format_push_char_safe(C) { *(*dest)++ = (C); --(*size); } #define format_handle_overflow(X) if ((*size) <= (X)) { *(*dest) = '\0'; (*size) = 0; return; } #define format_push_char(C) { format_handle_overflow(1); format_push_char_safe(C); }