From 9a921fd0ae29e63de75524fa2f41a7beac11184d Mon Sep 17 00:00:00 2001 From: rubidium Date: Sun, 1 Jan 2012 22:32:26 +0000 Subject: (svn r23709) -Feature-ish: try harder to sort text instead of fancy characters in the server names --- src/network/network_gui.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/network') diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 649f809ae..539087ff8 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -244,10 +244,24 @@ protected: this->vscroll->SetCount(this->servers.Length()); } + /** + * 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; + } + /** Sort servers by name. */ static int CDECL NGameNameSorter(NetworkGameList * const *a, NetworkGameList * const *b) { - int r = strnatcmp((*a)->info.server_name, (*b)->info.server_name); // Sort by name (natural sorting). + int r = strnatcmp(SkipGarbage((*a)->info.server_name), SkipGarbage((*b)->info.server_name)); // Sort by name (natural sorting). return r == 0 ? (*a)->address.CompareTo((*b)->address) : r; } -- cgit v1.2.3-54-g00ecf