(svn r24983) -Change: Apply the same name sorting rules to content and NewGRF list as for the server list.

This commit is contained in:
frosch
2013-02-09 17:31:07 +00:00
parent 53ce82b671
commit 356ecf05c4
5 changed files with 24 additions and 19 deletions

View File

@@ -596,15 +596,34 @@ char *strcasestr(const char *haystack, const char *needle)
}
#endif /* DEFINE_STRCASESTR */
/**
* Skip some of the 'garbage' in the string that we don't want to use
* to sort on. This way the alphabetical sorting will work better as
* we would be actually using those characters instead of some other
* characters such as spaces and tildes at the begin of the name.
* @param str The string to skip the initial garbage of.
* @return The string with the garbage skipped.
*/
static const char *SkipGarbage(const char *str)
{
while (*str != '\0' && (*str < 'A' || IsInsideMM(*str, '[', '`' + 1) || IsInsideMM(*str, '{', '~' + 1))) str++;
return str;
}
/**
* Compares two strings using case insensitive natural sort.
*
* @param s1 First string to compare.
* @param s2 Second string to compare.
* @param ignore_garbage_at_front Skip punctuation characters in the front
* @return Less than zero if s1 < s2, zero if s1 == s2, greater than zero if s1 > s2.
*/
int strnatcmp(const char *s1, const char *s2)
int strnatcmp(const char *s1, const char *s2, bool ignore_garbage_at_front)
{
if (ignore_garbage_at_front) {
s1 = SkipGarbage(s1);
s2 = SkipGarbage(s2);
}
#ifdef WITH_ICU
if (_current_collator != NULL) {
UErrorCode status = U_ZERO_ERROR;