"""Return negative if a < b, zero if a == b, positive if a > b."""
return cmp(self.key(string1), self.key(string2))
- def words(self, string):
- """Split the string into separate words.
-
- This split is done using Unicode's definition of whitespace.
- """
- return string.split()
-
- def sortemes(self, string):
- words = []
- for word in self.words(string):
- words.extend(collate._strings.alnumsplit(word))
- return filter(collate._strings.wordlike, words)
-
- def sortemekey(self, string):
- words = map(collate._strings.numeric, self.sortemes(string))
- words = [(i, self.key(word)) for (i, word) in words]
- return words
+ def sortemekey(self, string, invalid=float('inf')):
+ keys = []
+ for sorteme in collate._strings.sortemes(string):
+ num, alpha = collate._strings.numeric(sorteme, invalid)
+ if num == invalid:
+ keys.append(self.key(alpha))
+ else:
+ keys.append(num)
+ # Shove the sortkeyed original string on the end to resolve
+ # ties intelligently.
+ return (keys, self.key(string))