From db900b12dbc1acd3a0747c7d8b0f0957ff902954 Mon Sep 17 00:00:00 2001 From: Michael Steenbeek Date: Tue, 10 May 2022 12:55:39 +0200 Subject: [PATCH] Create enum for codepages (#17181) --- src/openrct2-win/openrct2-win.cpp | 4 ++-- src/openrct2/core/String.cpp | 24 ++++++++++++------------ src/openrct2/core/String.hpp | 22 +++++++++++----------- src/openrct2/localisation/Convert.cpp | 12 ++++++------ src/openrct2/object/ObjectRepository.cpp | 2 +- test/tests/StringTest.cpp | 6 +++--- 6 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/openrct2-win/openrct2-win.cpp b/src/openrct2-win/openrct2-win.cpp index 8372e1c682..2147fd7e18 100644 --- a/src/openrct2-win/openrct2-win.cpp +++ b/src/openrct2-win/openrct2-win.cpp @@ -34,8 +34,8 @@ int wmain(int argc, wchar_t** argvW, [[maybe_unused]] wchar_t* envp) { auto argvStrings = GetCommandLineArgs(argc, argvW); - SetConsoleCP(CODE_PAGE::CP_UTF8); - SetConsoleOutputCP(CODE_PAGE::CP_UTF8); + SetConsoleCP(OpenRCT2::CodePage::UTF8); + SetConsoleOutputCP(OpenRCT2::CodePage::UTF8); std::vector argv; std::transform( diff --git a/src/openrct2/core/String.cpp b/src/openrct2/core/String.cpp index ef5cbba059..3b8bb96126 100644 --- a/src/openrct2/core/String.cpp +++ b/src/openrct2/core/String.cpp @@ -66,9 +66,9 @@ namespace String { #ifdef _WIN32 int srcLen = static_cast(src.size()); - int sizeReq = WideCharToMultiByte(CODE_PAGE::CP_UTF8, 0, src.data(), srcLen, nullptr, 0, nullptr, nullptr); + int sizeReq = WideCharToMultiByte(OpenRCT2::CodePage::UTF8, 0, src.data(), srcLen, nullptr, 0, nullptr, nullptr); auto result = std::string(sizeReq, 0); - WideCharToMultiByte(CODE_PAGE::CP_UTF8, 0, src.data(), srcLen, result.data(), sizeReq, nullptr, nullptr); + WideCharToMultiByte(OpenRCT2::CodePage::UTF8, 0, src.data(), srcLen, result.data(), sizeReq, nullptr, nullptr); return result; #else // Which constructor to use depends on the size of wchar_t... @@ -94,9 +94,9 @@ namespace String { #ifdef _WIN32 int srcLen = static_cast(src.size()); - int sizeReq = MultiByteToWideChar(CODE_PAGE::CP_UTF8, 0, src.data(), srcLen, nullptr, 0); + int sizeReq = MultiByteToWideChar(OpenRCT2::CodePage::UTF8, 0, src.data(), srcLen, nullptr, 0); auto result = std::wstring(sizeReq, 0); - MultiByteToWideChar(CODE_PAGE::CP_UTF8, 0, src.data(), srcLen, result.data(), sizeReq); + MultiByteToWideChar(OpenRCT2::CodePage::UTF8, 0, src.data(), srcLen, result.data(), sizeReq); return result; #else icu::UnicodeString str = icu::UnicodeString::fromUTF8(std::string(src)); @@ -644,22 +644,22 @@ namespace String { switch (codePage) { - case CODE_PAGE::CP_932: + case OpenRCT2::CodePage::CP_932: return "windows-932"; - case CODE_PAGE::CP_936: + case OpenRCT2::CodePage::CP_936: return "GB2312"; - case CODE_PAGE::CP_949: + case OpenRCT2::CodePage::CP_949: return "windows-949"; - case CODE_PAGE::CP_950: + case OpenRCT2::CodePage::CP_950: return "big5"; - case CODE_PAGE::CP_1252: + case OpenRCT2::CodePage::CP_1252: return "windows-1252"; - case CODE_PAGE::CP_UTF8: + case OpenRCT2::CodePage::UTF8: return "utf-8"; default: @@ -684,9 +684,9 @@ namespace String std::string dst; { int srcLen = static_cast(u16.size()); - int sizeReq = WideCharToMultiByte(CODE_PAGE::CP_UTF8, 0, u16.data(), srcLen, nullptr, 0, nullptr, nullptr); + int sizeReq = WideCharToMultiByte(OpenRCT2::CodePage::UTF8, 0, u16.data(), srcLen, nullptr, 0, nullptr, nullptr); dst = std::string(sizeReq, 0); - WideCharToMultiByte(CODE_PAGE::CP_UTF8, 0, u16.data(), srcLen, dst.data(), sizeReq, nullptr, nullptr); + WideCharToMultiByte(OpenRCT2::CodePage::UTF8, 0, u16.data(), srcLen, dst.data(), sizeReq, nullptr, nullptr); } return dst; diff --git a/src/openrct2/core/String.hpp b/src/openrct2/core/String.hpp index 9238598118..e6eba8640c 100644 --- a/src/openrct2/core/String.hpp +++ b/src/openrct2/core/String.hpp @@ -26,18 +26,18 @@ using u8string_view = std::basic_string_view; using codepoint_t = uint32_t; -namespace CODE_PAGE +namespace OpenRCT2 { - // windows.h defines CP_UTF8 -#undef CP_UTF8 - - constexpr int32_t CP_932 = 932; // ANSI/OEM Japanese; Japanese (Shift-JIS) - constexpr int32_t CP_936 = 936; // ANSI/OEM Simplified Chinese (PRC, Singapore); Chinese Simplified (GB2312) - constexpr int32_t CP_949 = 949; // ANSI/OEM Korean (Unified Hangul Code) - constexpr int32_t CP_950 = 950; // ANSI/OEM Traditional Chinese (Taiwan; Hong Kong SAR, PRC); Chinese Traditional (Big5) - constexpr int32_t CP_1252 = 1252; // ANSI Latin 1; Western European (Windows) - constexpr int32_t CP_UTF8 = 65001; // Unicode (UTF-8) -} // namespace CODE_PAGE + enum CodePage : int32_t + { + CP_932 = 932, // ANSI/OEM Japanese; Japanese (Shift-JIS) + CP_936 = 936, // ANSI/OEM Simplified Chinese (PRC, Singapore); Chinese Simplified (GB2312) + CP_949 = 949, // ANSI/OEM Korean (Unified Hangul Code) + CP_950 = 950, // ANSI/OEM Traditional Chinese (Taiwan; Hong Kong SAR, PRC); Chinese Traditional (Big5) + CP_1252 = 1252, // ANSI Latin 1; Western European (Windows) + UTF8 = 65001, // Unicode (UTF-8) + }; +} namespace String { diff --git a/src/openrct2/localisation/Convert.cpp b/src/openrct2/localisation/Convert.cpp index 489a5dc613..0b2f2df248 100644 --- a/src/openrct2/localisation/Convert.cpp +++ b/src/openrct2/localisation/Convert.cpp @@ -87,15 +87,15 @@ static int32_t GetCodePageForRCT2Language(RCT2LanguageId languageId) switch (languageId) { case RCT2LanguageId::Japanese: - return CODE_PAGE::CP_932; + return OpenRCT2::CodePage::CP_932; case RCT2LanguageId::ChineseSimplified: - return CODE_PAGE::CP_936; + return OpenRCT2::CodePage::CP_936; case RCT2LanguageId::Korean: - return CODE_PAGE::CP_949; + return OpenRCT2::CodePage::CP_949; case RCT2LanguageId::ChineseTraditional: - return CODE_PAGE::CP_950; + return OpenRCT2::CodePage::CP_950; default: - return CODE_PAGE::CP_1252; + return OpenRCT2::CodePage::CP_1252; } } @@ -114,7 +114,7 @@ template static std::string DecodeConvertWithTable(std::s std::string rct2_to_utf8(std::string_view src, RCT2LanguageId languageId) { auto codePage = GetCodePageForRCT2Language(languageId); - if (codePage == CODE_PAGE::CP_1252) + if (codePage == OpenRCT2::CodePage::CP_1252) { // The code page used by RCT2 was not quite 1252 as some codes were used for Polish characters. return DecodeConvertWithTable(src, encoding_convert_rct2_to_unicode); diff --git a/src/openrct2/object/ObjectRepository.cpp b/src/openrct2/object/ObjectRepository.cpp index aaba30bd6e..702ed46390 100644 --- a/src/openrct2/object/ObjectRepository.cpp +++ b/src/openrct2/object/ObjectRepository.cpp @@ -599,7 +599,7 @@ private: } // Convert to UTF-8 filename - return String::ConvertToUtf8(normalisedName, CODE_PAGE::CP_1252); + return String::ConvertToUtf8(normalisedName, OpenRCT2::CodePage::CP_1252); } else { diff --git a/test/tests/StringTest.cpp b/test/tests/StringTest.cpp index 8534918125..5f956ab13a 100644 --- a/test/tests/StringTest.cpp +++ b/test/tests/StringTest.cpp @@ -86,7 +86,7 @@ TEST_F(StringTest, Convert_950_to_UTF8) { auto input = StringFromHex("a7d6b374aabab4c4a6e2aab0af57"); auto expected = u8"快速的棕色狐狸"; - auto actual = String::ConvertToUtf8(input, CODE_PAGE::CP_950); + auto actual = String::ConvertToUtf8(input, OpenRCT2::CodePage::CP_950); ASSERT_EQ(expected, actual); } @@ -94,7 +94,7 @@ TEST_F(StringTest, Convert_UTF8_to_UTF8) { auto input = u8"سريع|brown|ثعلب"; auto expected = input; - auto actual = String::ConvertToUtf8(input, CODE_PAGE::CP_UTF8); + auto actual = String::ConvertToUtf8(input, OpenRCT2::CodePage::UTF8); ASSERT_EQ(expected, actual); } @@ -102,7 +102,7 @@ TEST_F(StringTest, Convert_Empty) { auto input = ""; auto expected = input; - auto actual = String::ConvertToUtf8(input, CODE_PAGE::CP_1252); + auto actual = String::ConvertToUtf8(input, OpenRCT2::CodePage::CP_1252); ASSERT_EQ(expected, actual); }