From b96da4d7a0e06db19a4ac774a213ab2973e482b2 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 15 Apr 2025 18:57:44 +0100 Subject: [PATCH] Change: Automatically push/pop colours when formatting a sub-string. Reverts 226a44bf86. This universally prevents the sub-string from changing colours in the outer string. --- src/lang/english.txt | 18 +++++++++--------- src/strings.cpp | 5 +++++ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 811c38810f..400560ea91 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1226,7 +1226,7 @@ STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Expand a STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Collapse all STR_CONFIG_SETTING_RESET_ALL :{BLACK}Reset all values STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(no explanation available) -STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{ORANGE}{STRING1}{POP_COLOUR} +STR_CONFIG_SETTING_VALUE :{ORANGE}{STRING1} STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Default value: {ORANGE}{STRING1} STR_CONFIG_SETTING_TYPE :{LTBLUE}Setting type: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE_CLIENT :Client setting (not stored in saves; affects all games) @@ -3631,17 +3631,17 @@ STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}Found c STR_NEWGRF_LIST_MISSING :{RED}Missing files # NewGRF 'it's broken' warnings -STR_NEWGRF_BROKEN :{WHITE}Behaviour of NewGRF '{PUSH_COLOUR}{0:RAW_STRING}{POP_COLOUR}' is likely to cause desyncs and/or crashes -STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}It changed powered-wagon state for '{PUSH_COLOUR}{1:ENGINE}{POP_COLOUR}' when not inside a depot -STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}It changed vehicle length for '{PUSH_COLOUR}{1:ENGINE}{POP_COLOUR}' when not inside a depot -STR_NEWGRF_BROKEN_CAPACITY :{WHITE}It changed vehicle capacity for '{PUSH_COLOUR}{1:ENGINE}{POP_COLOUR}' when not inside a depot or refitting +STR_NEWGRF_BROKEN :{WHITE}Behaviour of NewGRF '{0:RAW_STRING}' is likely to cause desyncs and/or crashes +STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}It changed powered-wagon state for '{1:ENGINE}' when not inside a depot +STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}It changed vehicle length for '{1:ENGINE}' when not inside a depot +STR_NEWGRF_BROKEN_CAPACITY :{WHITE}It changed vehicle capacity for '{1:ENGINE}' when not inside a depot or refitting STR_BROKEN_VEHICLE_LENGTH :{WHITE}Train '{VEHICLE}' belonging to '{COMPANY}' has invalid length. It is probably caused by problems with NewGRFs. Game may desync or crash -STR_NEWGRF_BUGGY :{WHITE}NewGRF '{PUSH_COLOUR}{0:RAW_STRING}{POP_COLOUR}' provides incorrect information -STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Cargo/refit information for '{PUSH_COLOUR}{1:ENGINE}{POP_COLOUR}' differs from purchase list after construction. This might cause autorenew/-replace to fail refitting correctly -STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{PUSH_COLOUR}{1:STRING}{POP_COLOUR}' caused an endless loop in the production callback +STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:RAW_STRING}' provides incorrect information +STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Cargo/refit information for '{1:ENGINE}' differs from purchase list after construction. This might cause autorenew/-replace to fail refitting correctly +STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' caused an endless loop in the production callback STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} returned unknown/invalid result {2:HEX} -STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{PUSH_COLOUR}{1:STRING}{POP_COLOUR}' returned invalid cargo type in the production callback at {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' returned invalid cargo type in the production callback at {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : diff --git a/src/strings.cpp b/src/strings.cpp index d0d65f9d40..7442aeb7bf 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1091,6 +1091,9 @@ static void FormatString(StringBuilder &builder, std::string_view str_arg, Strin std::stack> str_stack; str_stack.emplace(str_arg, orig_first_param_offset, orig_case_index); + bool appending = builder.AnyBytesWritten(); + if (appending) builder.PutUtf8(SCC_PUSH_COLOUR); + for (;;) { try { while (!str_stack.empty() && !str_stack.top().consumer.AnyBytesLeft()) { @@ -1802,6 +1805,8 @@ static void FormatString(StringBuilder &builder, std::string_view str_arg, Strin builder += "(invalid parameter)"; } } + + if (appending) builder.PutUtf8(SCC_POP_COLOUR); }