Typo.
[python-collate.git] / collate / __init__.py
index 6ce1114..7e89fe6 100644 (file)
@@ -1,67 +1,45 @@
-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()