2121#
2222# ---------------------------------------------------------------------------##
2323
24+ import re
2425from importlib import util
2526
2627import pysollib .settings
@@ -848,6 +849,13 @@ def register(self, gi):
848849 self .callback ()
849850 self ._num_games += 1
850851
852+ def getNaturalSortKey (self , text ):
853+ # Sort numbers numerically, and strings alphabetically
854+ def convert (text ):
855+ return int (text ) if text .isdigit () else text .lower ()
856+
857+ return [convert (c ) for c in re .split (r'(\d+)' , text )]
858+
851859 #
852860 # access games database - we do not expose hidden games
853861 #
@@ -865,17 +873,17 @@ def getGamesIdSortedByName(self):
865873 if self .__games_by_name is None :
866874 l1 , l2 , l3 = [], [], []
867875 for id , gi in self .__games .items ():
868- name = gi .name .lower ()
869- l1 .append ((name , id ))
876+ name = gi .name .lower ()
877+ l1 .append ((self . getNaturalSortKey ( name ) , id ))
870878 if gi .name != gi .short_name :
871879 name = gi .short_name .lower ()
872- l2 .append ((name , id ))
880+ l2 .append ((self . getNaturalSortKey ( name ) , id ))
873881 for n in gi .altnames :
874882 name = n .lower ()
875- l3 .append ((name , id , n ))
876- l1 .sort ()
877- l2 .sort ()
878- l3 .sort ()
883+ l3 .append ((self . getNaturalSortKey ( name ) , id , n ))
884+ l1 .sort (key = lambda x : x [ 0 ] )
885+ l2 .sort (key = lambda x : x [ 0 ] )
886+ l3 .sort (key = lambda x : x [ 0 ] )
879887 self .__games_by_name = tuple (i [1 ] for i in l1 )
880888 self .__games_by_short_name = tuple (i [1 ] for i in l2 )
881889 self .__games_by_altname = tuple (i [1 :] for i in l3 )
0 commit comments