mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-10 09:32:29 +01:00
implement utf8, part 7
This commit is contained in:
@@ -4,13 +4,15 @@
|
||||
<LocalDebuggerWorkingDirectory>$(TargetDir)</LocalDebuggerWorkingDirectory>
|
||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||
<LocalDebuggerCommand>$(TargetDir)\openrct2.exe</LocalDebuggerCommand>
|
||||
<LocalDebuggerCommandArguments>"C:\Program Files (x86)\Infogrames\RollerCoaster Tycoon 2\Scenarios\Electric Fields.SC6"</LocalDebuggerCommandArguments>
|
||||
<LocalDebuggerCommandArguments>
|
||||
</LocalDebuggerCommandArguments>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release with Tests|Win32'">
|
||||
<LocalDebuggerWorkingDirectory>$(TargetDir)</LocalDebuggerWorkingDirectory>
|
||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||
<LocalDebuggerCommand>$(TargetDir)\openrct2.exe</LocalDebuggerCommand>
|
||||
<LocalDebuggerCommandArguments>"C:\Program Files (x86)\Infogrames\RollerCoaster Tycoon 2\Scenarios\Electric Fields.SC6"</LocalDebuggerCommandArguments>
|
||||
<LocalDebuggerCommandArguments>
|
||||
</LocalDebuggerCommandArguments>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ShowAllFiles>false</ShowAllFiles>
|
||||
@@ -19,6 +21,7 @@
|
||||
<LocalDebuggerCommand>$(TargetDir)\openrct2.exe</LocalDebuggerCommand>
|
||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||
<LocalDebuggerWorkingDirectory>$(TargetDir)</LocalDebuggerWorkingDirectory>
|
||||
<LocalDebuggerCommandArguments>"C:\Program Files (x86)\Infogrames\RollerCoaster Tycoon 2\Scenarios\Electric Fields.SC6"</LocalDebuggerCommandArguments>
|
||||
<LocalDebuggerCommandArguments>
|
||||
</LocalDebuggerCommandArguments>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -44,8 +44,8 @@ enum {
|
||||
RCT2_LANGUAGE_ID_SWEDISH,
|
||||
RCT2_LANGUAGE_ID_8,
|
||||
RCT2_LANGUAGE_ID_KOREAN,
|
||||
RCT2_LANGUAGE_ID_CHINESE_TRADITIONAL,
|
||||
RCT2_LANGUAGE_ID_CHINESE_SIMPLIFIED,
|
||||
RCT2_LANGUAGE_ID_CHINESE_TRADITIONAL,
|
||||
RCT2_LANGUAGE_ID_12,
|
||||
RCT2_LANGUAGE_ID_PORTUGESE,
|
||||
RCT2_LANGUAGE_ID_END = 255
|
||||
@@ -65,6 +65,7 @@ const language_descriptor LanguagesDescriptors[LANGUAGE_COUNT] = {
|
||||
{ "it-IT", "Italian", "Italiano", "italian", FONT_OPENRCT2_SPRITE, RCT2_LANGUAGE_ID_ITALIAN }, // LANGUAGE_ITALIAN
|
||||
{ "pt-BR", "Portuguese (BR)", "Portug\xC3\xAAs (BR)", "portuguese_br", FONT_OPENRCT2_SPRITE, RCT2_LANGUAGE_ID_PORTUGESE }, // LANGUAGE_PORTUGUESE_BR
|
||||
{ "zh-Hant", "Chinese (Traditional)", "Chinese (Traditional)", "chinese_traditional", "msjh.ttc", RCT2_LANGUAGE_ID_CHINESE_TRADITIONAL }, // LANGUAGE_CHINESE_TRADITIONAL
|
||||
// { "kr-KR", "Korean", "Korean", "english_uk", "malgun.ttf", RCT2_LANGUAGE_ID_KOREAN }, // LANGUAGE_KOREAN
|
||||
};
|
||||
|
||||
int gCurrentLanguage = LANGUAGE_UNDEFINED;
|
||||
@@ -376,7 +377,21 @@ void utf8_trim_string(utf8 *text)
|
||||
*last = 0;
|
||||
}
|
||||
|
||||
static utf8 *convert_multibyte_charset(const char *src)
|
||||
static wchar_t convert_specific_language_character_to_unicode(int languageId, wchar_t codepoint)
|
||||
{
|
||||
switch (languageId) {
|
||||
case RCT2_LANGUAGE_ID_KOREAN:
|
||||
return codepoint;
|
||||
case RCT2_LANGUAGE_ID_CHINESE_TRADITIONAL:
|
||||
return encoding_convert_big5_to_unicode(codepoint);
|
||||
case RCT2_LANGUAGE_ID_CHINESE_SIMPLIFIED:
|
||||
return encoding_convert_gb2312_to_unicode(codepoint);
|
||||
default:
|
||||
return codepoint;
|
||||
}
|
||||
}
|
||||
|
||||
static utf8 *convert_multibyte_charset(const char *src, int languageId)
|
||||
{
|
||||
int reservedLength = (strlen(src) * 4) + 1;
|
||||
utf8 *buffer = malloc(reservedLength);
|
||||
@@ -388,7 +403,7 @@ static utf8 *convert_multibyte_charset(const char *src)
|
||||
uint8 b = *ch++;
|
||||
uint16 codepoint = (a << 8) | b;
|
||||
|
||||
codepoint = encoding_convert_gb2312_to_unicode(codepoint - 0x8080);
|
||||
codepoint = convert_specific_language_character_to_unicode(languageId, codepoint);
|
||||
dst = utf8_write_codepoint(dst, codepoint);
|
||||
} else {
|
||||
*dst++ = *ch++;
|
||||
@@ -397,6 +412,7 @@ static utf8 *convert_multibyte_charset(const char *src)
|
||||
*dst++ = 0;
|
||||
int actualLength = dst - buffer;
|
||||
buffer = realloc(buffer, actualLength);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
@@ -480,7 +496,7 @@ rct_string_id object_get_localised_text(uint8_t** pStringTable/*ebp*/, int type/
|
||||
free(*cacheString);
|
||||
}
|
||||
if (rct2_language_is_multibyte_charset(chosenLanguageId)) {
|
||||
*cacheString = convert_multibyte_charset(pString);
|
||||
*cacheString = convert_multibyte_charset(pString, chosenLanguageId);
|
||||
} else {
|
||||
*cacheString = win1252_to_utf8_alloc(pString);
|
||||
}
|
||||
@@ -503,7 +519,7 @@ rct_string_id object_get_localised_text(uint8_t** pStringTable/*ebp*/, int type/
|
||||
free(*cacheString);
|
||||
}
|
||||
if (rct2_language_is_multibyte_charset(chosenLanguageId)) {
|
||||
*cacheString = convert_multibyte_charset(pString);
|
||||
*cacheString = convert_multibyte_charset(pString, chosenLanguageId);
|
||||
} else {
|
||||
*cacheString = win1252_to_utf8_alloc(pString);
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@ enum {
|
||||
LANGUAGE_ITALIAN,
|
||||
LANGUAGE_PORTUGUESE_BR,
|
||||
LANGUAGE_CHINESE_TRADITIONAL,
|
||||
// LANGUAGE_KOREAN,
|
||||
LANGUAGE_COUNT
|
||||
};
|
||||
|
||||
|
||||
@@ -800,7 +800,7 @@ void generate_string_file()
|
||||
utf8 *get_string_end(utf8 *text)
|
||||
{
|
||||
int codepoint;
|
||||
const utf8 *ch = text;
|
||||
utf8 *ch = text;
|
||||
|
||||
while ((codepoint = utf8_get_next(ch, &ch)) != 0) {
|
||||
if (utf8_is_format_code(codepoint)) {
|
||||
|
||||
@@ -47,6 +47,7 @@ utf8 *win1252_to_utf8_alloc(const char *src);
|
||||
int win1252_to_utf8(utf8string dst, const char *src, int maxBufferLength);
|
||||
|
||||
wchar_t encoding_convert_gb2312_to_unicode(wchar_t gb2312);
|
||||
wchar_t encoding_convert_big5_to_unicode(wchar_t big5);
|
||||
|
||||
#define MAX_USER_STRINGS 1024
|
||||
#define USER_STRING_MAX_LENGTH 32
|
||||
|
||||
Reference in New Issue
Block a user