- 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)
+ def key(self, string):
+ """Return a good sorting key for the string.
+
+ The sort key should be considered an opaque value which is
+ only meaningful when compared to other sort keys from the same
+ collator.
+ """
+ if isinstance(string, str):
+ string = string.decode(self.encoding, 'replace')
+ return string
+
+ def words(self, string):
+ """Split the string along word boundries."""
+ if isinstance(string, str):
+ string = string.decode(self.encoding, 'replace')
+ return string.split()
+
+ def sortemekey(self, string):
+ """Return a key based on sortemes of a string.
+
+ A sorteme, by analogy with grapheme/morpheme/etc. is an atom
+ of sort information. This is larger than a word boundry but
+ smaller than a sentence boundry; roughly, a sorteme boundry
+ occurs between letters and numbers, between numbers and
+ numbers if 'too much' punctuation exists in between, between
+ lines.
+ """
+ if isinstance(string, str):
+ string = string.decode(self.encoding, 'replace')
+