mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-22 06:23:04 +01:00
Implement reverse of string processing
This commit is contained in:
@@ -234,7 +234,7 @@ namespace OpenRCT2::Scripting
|
||||
auto widget = GetWidget();
|
||||
if (widget != nullptr && (widget->flags & WIDGET_FLAGS::TEXT_IS_STRING) && widget->string != nullptr)
|
||||
{
|
||||
return widget->string;
|
||||
return language_convert_string_to_tokens(widget->string);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
|
||||
@@ -131,7 +131,7 @@ namespace OpenRCT2::Scripting
|
||||
auto w = GetWindow();
|
||||
if (w != nullptr && w->classification == WC_CUSTOM)
|
||||
{
|
||||
return GetWindowTitle(w);
|
||||
return language_convert_string_to_tokens(GetWindowTitle(w));
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
@@ -137,6 +137,41 @@ rct_string_id language_allocate_object_string(const std::string& target)
|
||||
return localisationService.AllocateObjectString(target);
|
||||
}
|
||||
|
||||
std::string language_convert_string_to_tokens(const std::string_view& s)
|
||||
{
|
||||
std::string result;
|
||||
result.reserve(s.size() * 4);
|
||||
std::string input = std::string(s);
|
||||
auto readPtr = input.c_str();
|
||||
while (true)
|
||||
{
|
||||
char32_t code = utf8_get_next(readPtr, (const utf8**)&readPtr);
|
||||
if (code == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (code == '\n')
|
||||
{
|
||||
result.push_back('\n');
|
||||
}
|
||||
else if (utf8_is_format_code(code))
|
||||
{
|
||||
auto token = format_get_token(code);
|
||||
result.push_back('{');
|
||||
result.append(token);
|
||||
result.push_back('}');
|
||||
}
|
||||
else
|
||||
{
|
||||
char buffer[8]{};
|
||||
utf8_write_codepoint(buffer, code);
|
||||
result.append(buffer);
|
||||
}
|
||||
}
|
||||
result.shrink_to_fit();
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string language_convert_string(const std::string_view& s)
|
||||
{
|
||||
enum class PARSE_STATE
|
||||
|
||||
@@ -107,6 +107,7 @@ bool language_get_localised_scenario_strings(const utf8* scenarioFilename, rct_s
|
||||
void language_free_object_string(rct_string_id stringId);
|
||||
rct_string_id language_get_object_override_string_id(const char* identifier, uint8_t index);
|
||||
rct_string_id language_allocate_object_string(const std::string& target);
|
||||
std::string language_convert_string_to_tokens(const std::string_view& s);
|
||||
std::string language_convert_string(const std::string_view& s);
|
||||
|
||||
constexpr utf8* utf8_write_codepoint(utf8* dst, uint32_t codepoint)
|
||||
|
||||
Reference in New Issue
Block a user