mirror of https://github.com/OpenTTD/OpenTTD
Fix bb8a0c7641: Strip control codes before sorting NewGRF names. (#13034)
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/13342/head
parent
40a29a71fb
commit
65665ccb78
|
@ -1445,7 +1445,9 @@ private:
|
||||||
/** Sort grfs by name. */
|
/** Sort grfs by name. */
|
||||||
static bool NameSorter(const GRFConfig * const &a, const GRFConfig * const &b)
|
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;
|
if (i != 0) return i < 0;
|
||||||
|
|
||||||
i = a->version - b->version;
|
i = a->version - b->version;
|
||||||
|
|
Loading…
Reference in New Issue