mirror of https://github.com/OpenRCT2/OpenRCT2.git
Close #13626: Refactor RCT2LanguageId to strong enum
This commit is contained in:
parent
00483df2f2
commit
af0ec60bed
|
@ -366,7 +366,7 @@ void rct2_to_utf8_self(char* buffer, size_t length)
|
|||
{
|
||||
if (length > 0)
|
||||
{
|
||||
auto temp = rct2_to_utf8(buffer, RCT2_LANGUAGE_ID_ENGLISH_UK);
|
||||
auto temp = rct2_to_utf8(buffer, RCT2LanguageId::EnglishUK);
|
||||
safe_strcpy(buffer, temp.data(), length);
|
||||
}
|
||||
}
|
||||
|
@ -377,9 +377,9 @@ void rct2_to_utf8_self(char* buffer, size_t length)
|
|||
void game_convert_strings_to_utf8()
|
||||
{
|
||||
// Scenario details
|
||||
gScenarioCompletedBy = rct2_to_utf8(gScenarioCompletedBy, RCT2_LANGUAGE_ID_ENGLISH_UK);
|
||||
gScenarioName = rct2_to_utf8(gScenarioName, RCT2_LANGUAGE_ID_ENGLISH_UK);
|
||||
gScenarioDetails = rct2_to_utf8(gScenarioDetails, RCT2_LANGUAGE_ID_ENGLISH_UK);
|
||||
gScenarioCompletedBy = rct2_to_utf8(gScenarioCompletedBy, RCT2LanguageId::EnglishUK);
|
||||
gScenarioName = rct2_to_utf8(gScenarioName, RCT2LanguageId::EnglishUK);
|
||||
gScenarioDetails = rct2_to_utf8(gScenarioDetails, RCT2LanguageId::EnglishUK);
|
||||
|
||||
// News items
|
||||
game_convert_news_items_to_utf8();
|
||||
|
|
|
@ -116,13 +116,13 @@ static int32_t GetCodePageForRCT2Language(RCT2LanguageId languageId)
|
|||
{
|
||||
switch (languageId)
|
||||
{
|
||||
case RCT2_LANGUAGE_ID_JAPANESE:
|
||||
case RCT2LanguageId::Japanese:
|
||||
return CODE_PAGE::CP_932;
|
||||
case RCT2_LANGUAGE_ID_CHINESE_SIMPLIFIED:
|
||||
case RCT2LanguageId::ChineseSimplified:
|
||||
return CODE_PAGE::CP_936;
|
||||
case RCT2_LANGUAGE_ID_KOREAN:
|
||||
case RCT2LanguageId::Korean:
|
||||
return CODE_PAGE::CP_949;
|
||||
case RCT2_LANGUAGE_ID_CHINESE_TRADITIONAL:
|
||||
case RCT2LanguageId::ChineseTraditional:
|
||||
return CODE_PAGE::CP_950;
|
||||
default:
|
||||
return CODE_PAGE::CP_1252;
|
||||
|
|
|
@ -46,24 +46,24 @@ enum
|
|||
LANGUAGE_COUNT
|
||||
};
|
||||
|
||||
enum RCT2LanguageId
|
||||
enum class RCT2LanguageId
|
||||
{
|
||||
RCT2_LANGUAGE_ID_ENGLISH_UK,
|
||||
RCT2_LANGUAGE_ID_ENGLISH_US,
|
||||
RCT2_LANGUAGE_ID_FRENCH,
|
||||
RCT2_LANGUAGE_ID_GERMAN,
|
||||
RCT2_LANGUAGE_ID_SPANISH,
|
||||
RCT2_LANGUAGE_ID_ITALIAN,
|
||||
RCT2_LANGUAGE_ID_DUTCH,
|
||||
RCT2_LANGUAGE_ID_SWEDISH,
|
||||
RCT2_LANGUAGE_ID_JAPANESE,
|
||||
RCT2_LANGUAGE_ID_KOREAN,
|
||||
RCT2_LANGUAGE_ID_CHINESE_SIMPLIFIED,
|
||||
RCT2_LANGUAGE_ID_CHINESE_TRADITIONAL,
|
||||
RCT2_LANGUAGE_ID_12,
|
||||
RCT2_LANGUAGE_ID_PORTUGUESE,
|
||||
RCT2_LANGUAGE_ID_BLANK = 254,
|
||||
RCT2_LANGUAGE_ID_END = 255
|
||||
EnglishUK,
|
||||
EnglishUS,
|
||||
French,
|
||||
German,
|
||||
Spanish,
|
||||
Italian,
|
||||
Dutch,
|
||||
Swedish,
|
||||
Japanese,
|
||||
Korean,
|
||||
ChineseSimplified,
|
||||
ChineseTraditional,
|
||||
Undefined,
|
||||
Portuguese,
|
||||
Blank = 254,
|
||||
End = 255
|
||||
};
|
||||
|
||||
#define FONT_OPENRCT2_SPRITE NULL
|
||||
|
|
|
@ -53,10 +53,11 @@ void StringTable::Read(IReadObjectContext* context, OpenRCT2::IStream* stream, O
|
|||
try
|
||||
{
|
||||
RCT2LanguageId rct2LanguageId;
|
||||
while ((rct2LanguageId = static_cast<RCT2LanguageId>(stream->ReadValue<uint8_t>())) != RCT2_LANGUAGE_ID_END)
|
||||
while ((rct2LanguageId = static_cast<RCT2LanguageId>(stream->ReadValue<uint8_t>())) != RCT2LanguageId::End)
|
||||
{
|
||||
uint8_t languageId = (rct2LanguageId <= RCT2_LANGUAGE_ID_PORTUGUESE) ? RCT2ToOpenRCT2LanguageId[rct2LanguageId]
|
||||
: static_cast<uint8_t>(LANGUAGE_UNDEFINED);
|
||||
uint8_t languageId = (EnumValue(rct2LanguageId) <= EnumValue(RCT2LanguageId::Portuguese))
|
||||
? RCT2ToOpenRCT2LanguageId[EnumValue(rct2LanguageId)]
|
||||
: static_cast<uint8_t>(LANGUAGE_UNDEFINED);
|
||||
std::string stringAsWin1252 = stream->ReadStdString();
|
||||
auto stringAsUtf8 = rct2_to_utf8(stringAsWin1252, rct2LanguageId);
|
||||
|
||||
|
|
|
@ -240,7 +240,7 @@ public:
|
|||
dst->objective_arg_3 = GetBuildTheBestRideId();
|
||||
}
|
||||
|
||||
auto name = rct2_to_utf8(_s4.scenario_name, RCT2_LANGUAGE_ID_ENGLISH_UK);
|
||||
auto name = rct2_to_utf8(_s4.scenario_name, RCT2LanguageId::EnglishUK);
|
||||
std::string details;
|
||||
|
||||
// TryGetById won't set this property if the scenario is not recognised,
|
||||
|
@ -3006,7 +3006,7 @@ private:
|
|||
const auto originalString = _s4.string_table[(stringId - USER_STRING_START) % 1024];
|
||||
auto originalStringView = std::string_view(
|
||||
originalString, GetRCT2StringBufferLen(originalString, USER_STRING_MAX_LENGTH));
|
||||
auto asUtf8 = rct2_to_utf8(originalStringView, RCT2_LANGUAGE_ID_ENGLISH_UK);
|
||||
auto asUtf8 = rct2_to_utf8(originalStringView, RCT2LanguageId::EnglishUK);
|
||||
auto justText = RCT12RemoveFormattingUTF8(asUtf8);
|
||||
return justText.data();
|
||||
}
|
||||
|
|
|
@ -198,9 +198,9 @@ public:
|
|||
// Some scenarios have their scenario details in UTF-8, due to earlier bugs in OpenRCT2.
|
||||
if (!IsLikelyUTF8(_s6.info.name) && !IsLikelyUTF8(_s6.info.details))
|
||||
{
|
||||
auto temp = rct2_to_utf8(_s6.info.name, RCT2_LANGUAGE_ID_ENGLISH_UK);
|
||||
auto temp = rct2_to_utf8(_s6.info.name, RCT2LanguageId::EnglishUK);
|
||||
safe_strcpy(gS6Info.name, temp.data(), sizeof(gS6Info.name));
|
||||
auto temp2 = rct2_to_utf8(_s6.info.details, RCT2_LANGUAGE_ID_ENGLISH_UK);
|
||||
auto temp2 = rct2_to_utf8(_s6.info.details, RCT2LanguageId::EnglishUK);
|
||||
safe_strcpy(gS6Info.details, temp2.data(), sizeof(gS6Info.details));
|
||||
}
|
||||
else
|
||||
|
@ -1660,7 +1660,7 @@ public:
|
|||
const auto originalString = _s6.custom_strings[(stringId - USER_STRING_START) % 1024];
|
||||
auto originalStringView = std::string_view(
|
||||
originalString, GetRCT2StringBufferLen(originalString, USER_STRING_MAX_LENGTH));
|
||||
auto asUtf8 = rct2_to_utf8(originalStringView, RCT2_LANGUAGE_ID_ENGLISH_UK);
|
||||
auto asUtf8 = rct2_to_utf8(originalStringView, RCT2LanguageId::EnglishUK);
|
||||
auto justText = RCT12RemoveFormattingUTF8(asUtf8);
|
||||
return justText.data();
|
||||
}
|
||||
|
|
|
@ -653,7 +653,7 @@ private:
|
|||
if (scBasic.CompanyValue > highscore->company_value)
|
||||
{
|
||||
SafeFree(highscore->name);
|
||||
std::string name = rct2_to_utf8(scBasic.CompletedBy, RCT2_LANGUAGE_ID_ENGLISH_UK);
|
||||
std::string name = rct2_to_utf8(scBasic.CompletedBy, RCT2LanguageId::EnglishUK);
|
||||
highscore->name = String::Duplicate(name.c_str());
|
||||
highscore->company_value = scBasic.CompanyValue;
|
||||
highscore->timestamp = DATETIME64_MIN;
|
||||
|
@ -665,7 +665,7 @@ private:
|
|||
{
|
||||
scenario_highscore_entry* highscore = InsertHighscore();
|
||||
highscore->fileName = String::Duplicate(scBasic.Path);
|
||||
std::string name = rct2_to_utf8(scBasic.CompletedBy, RCT2_LANGUAGE_ID_ENGLISH_UK);
|
||||
std::string name = rct2_to_utf8(scBasic.CompletedBy, RCT2LanguageId::EnglishUK);
|
||||
highscore->name = String::Duplicate(name.c_str());
|
||||
highscore->company_value = scBasic.CompanyValue;
|
||||
highscore->timestamp = DATETIME64_MIN;
|
||||
|
|
|
@ -25,7 +25,7 @@ TEST_F(Localisation, RCT2_to_UTF8_UK)
|
|||
{
|
||||
auto input = "The quick brown fox";
|
||||
auto expected = u8"The quick brown fox";
|
||||
auto actual = rct2_to_utf8(input, RCT2_LANGUAGE_ID_ENGLISH_UK);
|
||||
auto actual = rct2_to_utf8(input, RCT2LanguageId::EnglishUK);
|
||||
ASSERT_EQ(expected, actual);
|
||||
}
|
||||
|
||||
|
@ -33,7 +33,7 @@ TEST_F(Localisation, RCT2_to_UTF8_JP)
|
|||
{
|
||||
auto input = StringFromHex("ff8374ff8340ff8358ff8367ff8375ff8389ff8345ff8393ff8374ff8348ff8362ff834eff8358");
|
||||
auto expected = u8"ファストブラウンフォックス";
|
||||
auto actual = rct2_to_utf8(input, RCT2_LANGUAGE_ID_JAPANESE);
|
||||
auto actual = rct2_to_utf8(input, RCT2LanguageId::Japanese);
|
||||
ASSERT_EQ(expected, actual);
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,7 @@ TEST_F(Localisation, RCT2_to_UTF8_ZH_TW)
|
|||
{
|
||||
auto input = StringFromHex("ffa7d6ffb374ffaabaffb4c4ffa6e2ffaab0ffaf57");
|
||||
auto expected = u8"快速的棕色狐狸";
|
||||
auto actual = rct2_to_utf8(input, RCT2_LANGUAGE_ID_CHINESE_TRADITIONAL);
|
||||
auto actual = rct2_to_utf8(input, RCT2LanguageId::ChineseTraditional);
|
||||
ASSERT_EQ(expected, actual);
|
||||
}
|
||||
|
||||
|
@ -49,7 +49,7 @@ TEST_F(Localisation, RCT2_to_UTF8_PL)
|
|||
{
|
||||
auto input = StringFromHex("47F372736b6120446ff76b692054e6637a6f7779");
|
||||
auto expected = u8"Górska Dołki Tęczowy";
|
||||
auto actual = rct2_to_utf8(input, RCT2_LANGUAGE_ID_ENGLISH_UK);
|
||||
auto actual = rct2_to_utf8(input, RCT2LanguageId::EnglishUK);
|
||||
ASSERT_EQ(expected, actual);
|
||||
}
|
||||
|
||||
|
@ -58,7 +58,7 @@ TEST_F(Localisation, RCT2_to_UTF8_ZH_TW_PREMATURE_END)
|
|||
// This string can be found in BATFL.DAT, the last double byte character is missing its second byte.
|
||||
auto input = StringFromHex("ffa470ffabacffa8aeffbdf8ffa662ffc54bffb944ffa457ffaeb6ffb0caffb76effc2");
|
||||
auto expected = u8"小型車輛在鐵道上振動搖";
|
||||
auto actual = rct2_to_utf8(input, RCT2_LANGUAGE_ID_CHINESE_TRADITIONAL);
|
||||
auto actual = rct2_to_utf8(input, RCT2LanguageId::ChineseTraditional);
|
||||
ASSERT_EQ(expected, actual);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue