-import locale
-
-if locale.getlocale()[0] is None:
- locale.setlocale(locale.LC_COLLATE, '')
-
import collate.errors
+import collate._locale
+try:
+ import collate.codepoint as default
+except ImportError:
+ pass
try:
import collate.syslocale as default
- import collate.uca as default
+except ImportError:
+ pass
+try:
import collate.icu as default
except ImportError:
pass
collator = None
-preferred_locale = None
-def _get_collator(backend, locale_code):
- for code in [locale_code,
- locale_code.split("_")[0],
- locale.getlocale(locale.LC_COLLATE)[0],
- locale.getlocale(locale.LC_COLLATE)[0].split("_")[0],
- locale.getdefaultlocale()[0],
- locale.getdefaultlocale()[0].split("_")[0],
- None]:
- try:
- return default.Collator(code)
- except collate.errors.InvalidLocaleError:
- pass
-
-def set_locale(locale_code):
- global collator
- global preferred_locale
-
- preferred_locale = locale_code
- if collator is None or collator.locale != locale_code:
- c = _get_collator(default, locale_code)
- if c is not None:
- collator = c
- else:
- raise collate.errors.InvalidLocaleError(locale_code)
-
-def set_backend(backend):
+def set_default(backend=None, locale=None, encoding=None):
global collator
global default
- c = _get_collator(backend, preferred_locale)
+ if backend is None:
+ backend = default
+ locales = collate._locale.localelist(locale)
+ c = None
+ for locale in locales:
+ locale, encoding_ = collate._locale.getpair(locale, encoding)
+ try:
+ c = backend.Collator(locale, encoding_)
+ except collate.errors.InvalidLocaleError:
+ pass
+ else:
+ break
if c is not None:
- collator = c
- default = backend
- else:
- raise collate.errors.InvalidLocaleError(locale_code)
+ collator = c
+ default = backend
def key(string):
return collator.key(string)
-def cmp(string1, string2):
- return collator.cmp(string1, string2)
+def cmp(a, b):
+ return collator.cmp(a, b)
-try:
- set_locale(locale.getlocale()[0])
-except collate.errors.InvalidLocaleError:
- # There's no way this should fail unless the C locale system is
- # fucked or missing all data.
- import collator.syslocale
- set_backend(collator.syslocale)
- set_locale(locale.getlocale(locale.LC_COLLATE)[0])
+set_default()