X-Git-Url: https://git.korewanetadesu.com/?p=python-collate.git;a=blobdiff_plain;f=collate%2F__init__.py;h=7e89fe653828ce4a010f3bb9f31fe3b2abe671af;hp=6ce11148d836cba02f0d652df60832fff0515af7;hb=2a37219e2d9c0fe58e78d987a21f6e37cfd33940;hpb=22570a3c13079d27cfb60110f631b164dbd8b831 diff --git a/collate/__init__.py b/collate/__init__.py index 6ce1114..7e89fe6 100644 --- a/collate/__init__.py +++ b/collate/__init__.py @@ -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()