1
0
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:
Ted John
2020-02-27 22:25:26 +00:00
parent 4d221341da
commit 7628289eb3
4 changed files with 38 additions and 2 deletions

View File

@@ -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 "";

View File

@@ -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 {};
}

View File

@@ -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

View File

@@ -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)