uca is not going to make the cut.
[python-collate.git] / collate / __init__.py
index 6d1806a..7e89fe6 100644 (file)
@@ -1,40 +1,45 @@
-import locale
-
 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
 
-def set_locale(locale_code, strict=False):
+def set_default(backend=None, locale=None, encoding=None):
     global collator
-
-    if collator is None or collator.locale != locale_code:
+    global default
+
+    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:
-            collator = default.Collator(locale_code, strict)
+            c = backend.Collator(locale, encoding_)
         except collate.errors.InvalidLocaleError:
-            if strict:
-                raise
-            else:
-                default_locale = locale.getdefaultlocale()[0]
-                try:
-                    collator = default.Collator(default_locale, strict)
-                except collate.errors.InvalidLocaleError:
-                    if not collator:
-                        raise
-
-def get_locale():
-    return collator.locale
-
-def set_backend(backend, strict=False):
-    pass
+            pass
+        else:
+            break
+    if c is not None:
+        collator = c
+        default = backend
 
 def key(string):
     return collator.key(string)
 
-set_locale(locale.getdefaultlocale()[0])
+def cmp(a, b):
+    return collator.cmp(a, b)
+
+set_default()