-import collate._strings
+import collate.strings
class Collator(object):
def cmp(self, string1, string2):
return cmp(self.key(string1), self.key(string2))
def words(self, string):
- """Split the string into separate words.
+ """Split the string along word boundries."""
+ if isinstance(string, str):
+ string = string.decode(self.encoding, 'replace')
+ return string.split()
+
+ def sortemekey(self, string, invalid=float('inf')):
+ """Return a key based on sortemes of a string.
- This split is done using Unicode's definition of whitespace.
+ If the string is a str instance, it is decoded to a unicode
+ instance according to the 'encoding' attribute of the
+ Collator.
"""
- return string.split()
+ if isinstance(string, str):
+ string = string.decode(self.encoding, 'replace')
- def sortemes(self, string):
- words = []
- for word in self.words(string):
- words.extend(collate._strings.alnumsplit(word))
- return filter(collate._strings.wordlike, words)
+ # Shove the sortkeyed original string on the end to resolve
+ # ties intelligently.
+ return (collate.strings.sortemes(string, self.key),
+ self.key(string))
- def sortemekey(self, string):
- words = map(collate._strings.numeric, self.sortemes(string))
- words = [(i, self.key(word)) for (i, word) in words]
- return words