+++ /dev/null
-import locale
-
-import collate.errors
-import collate._abcollator
-
-class Collator(collate._abcollator.Collator):
- def __init__(self, locale_code, encoding=None):
- default = locale.getdefaultlocale()[0]
- for locale in [locale_code, default]:
- try:
- locale.setlocale(locale.LC_COLLATE, locale_code)
- except locale.Error as err:
- pass
- else:
- break
- else:
- raise collate.errors.InvalidLocaleError("no locale found")
- self.locale = locale.getlocale()[0]
- try:
- self.__encoding = locale_code.split(".")[1]
- except IndexError:
- self.__encoding = locale_code.split(locale.getpreferredencoding())
-
- def key(self, string):
- try:
- return locale.strxfrm(string)
- except UnicodeEncodeError:
- return locale.strxfrm(string.encode(self.__encoding, "replace"))
-
- def cmp(self, string1, string2):
- if isinstance(string1, str):
- string1 = string1.decode(self.__encoding, "replace")
- if isinstance(string2, str):
- string2 = string2.decode(self.__encoding, "replace")
- return locale.strcoll(string1, string2)
-