1
0
Fork 0

Fix bb8a0c7641: Strip control codes before sorting NewGRF names.

Now that SkipGarbage doesn't skip all multi-byte utf-8 characters, string control codes are not skipped either. This gave unintended sorting when NewGRF names start with colour codes.

Use StrMakeValid() before comparing. This has to make a copy of the string for each sort step, so there is likely a performance penalty.
pull/13034/head
Peter Nelson 2024-10-27 01:02:04 +01:00
parent bb8a0c7641
commit e4145fa338
No known key found for this signature in database
GPG Key ID: 8EF8F0A467DF75ED
1 changed files with 3 additions and 1 deletions

View File

@ -1448,7 +1448,9 @@ private:
/** Sort grfs by name. */
static bool NameSorter(const GRFConfig * const &a, const GRFConfig * const &b)
{
int i = StrNaturalCompare(a->GetName(), b->GetName(), true); // Sort by name (natural sorting).
std::string name_a = StrMakeValid(a->GetName(), SVS_NONE); // Make a copy without control codes.
std::string name_b = StrMakeValid(b->GetName(), SVS_NONE); // Make a copy without control codes.
int i = StrNaturalCompare(name_a, name_b, true); // Sort by name (natural sorting).
if (i != 0) return i < 0;
i = a->version - b->version;