babelfish-0.5.4/0000775000175000017500000000000012460653361014241 5ustar toilaltoilal00000000000000babelfish-0.5.4/HISTORY.rst0000664000175000017500000000333512460653044016136 0ustar toilaltoilal00000000000000Changelog ========= 0.5.4 ----- **release date:** 2015-01-24 * Fix setuptools deprecation warning 0.5.3 ----- **release date:** 2014-06-22 * Better equality semantics for Language, Country, Script 0.5.2 ----- **release date:** 2014-05-25 * Babelfish objects (Language, Country, Script) are now picklable * Added support for Python 3.4 0.5.1 ----- **release date:** 2014-01-26 * Add a register method to ConverterManager to register without loading 0.5.0 ----- **release date:** 2014-01-25 **WARNING:** Backward incompatible changes * Simplify converter management with ConverterManager class * Make babelfish usable in place * Add Python 2.6 / 3.2 compatibility 0.4.0 ----- **release date:** 2013-11-21 **WARNING:** Backward incompatible changes * Add converter support for Country * Language/country reverse name detection is now case-insensitive * Add alpha3t, scope and type converters * Use lazy loading of converters 0.3.0 ----- **release date:** 2013-11-09 * Add support for scripts * Improve built-in converters * Add support for ietf 0.2.1 ----- **release date:** 2013-11-03 * Fix reading of data files 0.2.0 ----- **release date:** 2013-10-31 * Add str method * More explicit exceptions * Change repr format to use ascii only 0.1.5 ----- **release date:** 2013-10-21 * Add a fromcode method on Language class * Add a codes attribute on converters 0.1.4 ----- **release date:** 2013-10-20 * Fix converters not raising NoConversionError 0.1.3 ----- **release date:** 2013-09-29 * Fix source distribution 0.1.2 ----- **release date:** 2013-09-29 * Add missing files to source distribution 0.1.1 ----- **release date:** 2013-09-28 * Fix python3 support 0.1 --- **release date:** 2013-09-28 * Initial version babelfish-0.5.4/PKG-INFO0000664000175000017500000001041712460653361015341 0ustar toilaltoilal00000000000000Metadata-Version: 1.1 Name: babelfish Version: 0.5.4 Summary: A module to work with countries and languages Home-page: https://github.com/Diaoul/babelfish Author: Antoine Bertin Author-email: diaoulael@gmail.com License: BSD Description: BabelFish ========= BabelFish is a Python library to work with countries and languages. .. image:: https://travis-ci.org/Diaoul/babelfish.png?branch=master :target: https://travis-ci.org/Diaoul/babelfish .. image:: https://coveralls.io/repos/Diaoul/babelfish/badge.png :target: https://coveralls.io/r/Diaoul/babelfish License ------- BabelFish is licensed under the `3-clause BSD license `_. Copyright (c) 2013, the BabelFish authors and contributors. Changelog ========= 0.5.4 ----- **release date:** 2015-01-24 * Fix setuptools deprecation warning 0.5.3 ----- **release date:** 2014-06-22 * Better equality semantics for Language, Country, Script 0.5.2 ----- **release date:** 2014-05-25 * Babelfish objects (Language, Country, Script) are now picklable * Added support for Python 3.4 0.5.1 ----- **release date:** 2014-01-26 * Add a register method to ConverterManager to register without loading 0.5.0 ----- **release date:** 2014-01-25 **WARNING:** Backward incompatible changes * Simplify converter management with ConverterManager class * Make babelfish usable in place * Add Python 2.6 / 3.2 compatibility 0.4.0 ----- **release date:** 2013-11-21 **WARNING:** Backward incompatible changes * Add converter support for Country * Language/country reverse name detection is now case-insensitive * Add alpha3t, scope and type converters * Use lazy loading of converters 0.3.0 ----- **release date:** 2013-11-09 * Add support for scripts * Improve built-in converters * Add support for ietf 0.2.1 ----- **release date:** 2013-11-03 * Fix reading of data files 0.2.0 ----- **release date:** 2013-10-31 * Add str method * More explicit exceptions * Change repr format to use ascii only 0.1.5 ----- **release date:** 2013-10-21 * Add a fromcode method on Language class * Add a codes attribute on converters 0.1.4 ----- **release date:** 2013-10-20 * Fix converters not raising NoConversionError 0.1.3 ----- **release date:** 2013-09-29 * Fix source distribution 0.1.2 ----- **release date:** 2013-09-29 * Add missing files to source distribution 0.1.1 ----- **release date:** 2013-09-28 * Fix python3 support 0.1 --- **release date:** 2013-09-28 * Initial version Keywords: babelfish language country locale Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: BSD License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.2 Classifier: Programming Language :: Python :: 3.3 Classifier: Programming Language :: Python :: 3.4 Classifier: Topic :: Multimedia :: Video Classifier: Topic :: Software Development :: Libraries :: Python Modules babelfish-0.5.4/MANIFEST.in0000664000175000017500000000025412377023541015776 0ustar toilaltoilal00000000000000include LICENSE HISTORY.rst babelfish/data/iso-639-3.tab babelfish/data/iso-3166-1.txt babelfish/data/iso15924-utf8-20131012.txt babelfish/data/opensubtitles_languages.txt babelfish-0.5.4/babelfish.egg-info/0000775000175000017500000000000012460653361017652 5ustar toilaltoilal00000000000000babelfish-0.5.4/babelfish.egg-info/PKG-INFO0000664000175000017500000001041712460653360020751 0ustar toilaltoilal00000000000000Metadata-Version: 1.1 Name: babelfish Version: 0.5.4 Summary: A module to work with countries and languages Home-page: https://github.com/Diaoul/babelfish Author: Antoine Bertin Author-email: diaoulael@gmail.com License: BSD Description: BabelFish ========= BabelFish is a Python library to work with countries and languages. .. image:: https://travis-ci.org/Diaoul/babelfish.png?branch=master :target: https://travis-ci.org/Diaoul/babelfish .. image:: https://coveralls.io/repos/Diaoul/babelfish/badge.png :target: https://coveralls.io/r/Diaoul/babelfish License ------- BabelFish is licensed under the `3-clause BSD license `_. Copyright (c) 2013, the BabelFish authors and contributors. Changelog ========= 0.5.4 ----- **release date:** 2015-01-24 * Fix setuptools deprecation warning 0.5.3 ----- **release date:** 2014-06-22 * Better equality semantics for Language, Country, Script 0.5.2 ----- **release date:** 2014-05-25 * Babelfish objects (Language, Country, Script) are now picklable * Added support for Python 3.4 0.5.1 ----- **release date:** 2014-01-26 * Add a register method to ConverterManager to register without loading 0.5.0 ----- **release date:** 2014-01-25 **WARNING:** Backward incompatible changes * Simplify converter management with ConverterManager class * Make babelfish usable in place * Add Python 2.6 / 3.2 compatibility 0.4.0 ----- **release date:** 2013-11-21 **WARNING:** Backward incompatible changes * Add converter support for Country * Language/country reverse name detection is now case-insensitive * Add alpha3t, scope and type converters * Use lazy loading of converters 0.3.0 ----- **release date:** 2013-11-09 * Add support for scripts * Improve built-in converters * Add support for ietf 0.2.1 ----- **release date:** 2013-11-03 * Fix reading of data files 0.2.0 ----- **release date:** 2013-10-31 * Add str method * More explicit exceptions * Change repr format to use ascii only 0.1.5 ----- **release date:** 2013-10-21 * Add a fromcode method on Language class * Add a codes attribute on converters 0.1.4 ----- **release date:** 2013-10-20 * Fix converters not raising NoConversionError 0.1.3 ----- **release date:** 2013-09-29 * Fix source distribution 0.1.2 ----- **release date:** 2013-09-29 * Add missing files to source distribution 0.1.1 ----- **release date:** 2013-09-28 * Fix python3 support 0.1 --- **release date:** 2013-09-28 * Initial version Keywords: babelfish language country locale Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: BSD License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.2 Classifier: Programming Language :: Python :: 3.3 Classifier: Programming Language :: Python :: 3.4 Classifier: Topic :: Multimedia :: Video Classifier: Topic :: Software Development :: Libraries :: Python Modules babelfish-0.5.4/babelfish.egg-info/SOURCES.txt0000664000175000017500000000136312460653361021541 0ustar toilaltoilal00000000000000HISTORY.rst LICENSE MANIFEST.in README.rst setup.cfg setup.py babelfish/__init__.py babelfish/country.py babelfish/exceptions.py babelfish/language.py babelfish/script.py babelfish/tests.py babelfish.egg-info/PKG-INFO babelfish.egg-info/SOURCES.txt babelfish.egg-info/dependency_links.txt babelfish.egg-info/top_level.txt babelfish/converters/__init__.py babelfish/converters/alpha2.py babelfish/converters/alpha3b.py babelfish/converters/alpha3t.py babelfish/converters/countryname.py babelfish/converters/name.py babelfish/converters/opensubtitles.py babelfish/converters/scope.py babelfish/converters/type.py babelfish/data/iso-3166-1.txt babelfish/data/iso-639-3.tab babelfish/data/iso15924-utf8-20131012.txt babelfish/data/opensubtitles_languages.txtbabelfish-0.5.4/babelfish.egg-info/dependency_links.txt0000664000175000017500000000000112460653360023717 0ustar toilaltoilal00000000000000 babelfish-0.5.4/babelfish.egg-info/top_level.txt0000664000175000017500000000001212460653360022374 0ustar toilaltoilal00000000000000babelfish babelfish-0.5.4/babelfish/0000775000175000017500000000000012460653361016160 5ustar toilaltoilal00000000000000babelfish-0.5.4/babelfish/converters/0000775000175000017500000000000012460653361020352 5ustar toilaltoilal00000000000000babelfish-0.5.4/babelfish/converters/opensubtitles.py0000664000175000017500000000327712377023541023633 0ustar toilaltoilal00000000000000# -*- coding: utf-8 -*- # # Copyright (c) 2013 the BabelFish authors. All rights reserved. # Use of this source code is governed by the 3-clause BSD license # that can be found in the LICENSE file. # from __future__ import unicode_literals from . import LanguageReverseConverter, CaseInsensitiveDict from ..exceptions import LanguageReverseError from ..language import language_converters class OpenSubtitlesConverter(LanguageReverseConverter): def __init__(self): self.alpha3b_converter = language_converters['alpha3b'] self.alpha2_converter = language_converters['alpha2'] self.to_opensubtitles = {('por', 'BR'): 'pob', ('gre', None): 'ell', ('srp', None): 'scc', ('srp', 'ME'): 'mne'} self.from_opensubtitles = CaseInsensitiveDict({'pob': ('por', 'BR'), 'pb': ('por', 'BR'), 'ell': ('ell', None), 'scc': ('srp', None), 'mne': ('srp', 'ME')}) self.codes = (self.alpha2_converter.codes | self.alpha3b_converter.codes | set(['pob', 'pb', 'scc', 'mne'])) def convert(self, alpha3, country=None, script=None): alpha3b = self.alpha3b_converter.convert(alpha3, country, script) if (alpha3b, country) in self.to_opensubtitles: return self.to_opensubtitles[(alpha3b, country)] return alpha3b def reverse(self, opensubtitles): if opensubtitles in self.from_opensubtitles: return self.from_opensubtitles[opensubtitles] for conv in [self.alpha3b_converter, self.alpha2_converter]: try: return conv.reverse(opensubtitles) except LanguageReverseError: pass raise LanguageReverseError(opensubtitles) babelfish-0.5.4/babelfish/converters/alpha3t.py0000664000175000017500000000105712377023541022261 0ustar toilaltoilal00000000000000# -*- coding: utf-8 -*- # # Copyright (c) 2013 the BabelFish authors. All rights reserved. # Use of this source code is governed by the 3-clause BSD license # that can be found in the LICENSE file. # from __future__ import unicode_literals from . import LanguageEquivalenceConverter from ..language import LANGUAGE_MATRIX class Alpha3TConverter(LanguageEquivalenceConverter): CASE_SENSITIVE = True SYMBOLS = {} for iso_language in LANGUAGE_MATRIX: if iso_language.alpha3t: SYMBOLS[iso_language.alpha3] = iso_language.alpha3t babelfish-0.5.4/babelfish/converters/name.py0000664000175000017500000000104712377023541021644 0ustar toilaltoilal00000000000000# -*- coding: utf-8 -*- # # Copyright (c) 2013 the BabelFish authors. All rights reserved. # Use of this source code is governed by the 3-clause BSD license # that can be found in the LICENSE file. # from __future__ import unicode_literals from . import LanguageEquivalenceConverter from ..language import LANGUAGE_MATRIX class NameConverter(LanguageEquivalenceConverter): CASE_SENSITIVE = False SYMBOLS = {} for iso_language in LANGUAGE_MATRIX: if iso_language.name: SYMBOLS[iso_language.alpha3] = iso_language.name babelfish-0.5.4/babelfish/converters/countryname.py0000664000175000017500000000206512377023541023271 0ustar toilaltoilal00000000000000# -*- coding: utf-8 -*- # # Copyright (c) 2013 the BabelFish authors. All rights reserved. # Use of this source code is governed by the 3-clause BSD license # that can be found in the LICENSE file. # from __future__ import unicode_literals from . import CountryReverseConverter, CaseInsensitiveDict from ..country import COUNTRY_MATRIX from ..exceptions import CountryConvertError, CountryReverseError class CountryNameConverter(CountryReverseConverter): def __init__(self): self.codes = set() self.to_name = {} self.from_name = CaseInsensitiveDict() for country in COUNTRY_MATRIX: self.codes.add(country.name) self.to_name[country.alpha2] = country.name self.from_name[country.name] = country.alpha2 def convert(self, alpha2): if alpha2 not in self.to_name: raise CountryConvertError(alpha2) return self.to_name[alpha2] def reverse(self, name): if name not in self.from_name: raise CountryReverseError(name) return self.from_name[name] babelfish-0.5.4/babelfish/converters/__init__.py0000664000175000017500000002204512460652500022460 0ustar toilaltoilal00000000000000# Copyright (c) 2013 the BabelFish authors. All rights reserved. # Use of this source code is governed by the 3-clause BSD license # that can be found in the LICENSE file. # import collections from pkg_resources import iter_entry_points, EntryPoint from ..exceptions import LanguageConvertError, LanguageReverseError # from https://github.com/kennethreitz/requests/blob/master/requests/structures.py class CaseInsensitiveDict(collections.MutableMapping): """A case-insensitive ``dict``-like object. Implements all methods and operations of ``collections.MutableMapping`` as well as dict's ``copy``. Also provides ``lower_items``. All keys are expected to be strings. The structure remembers the case of the last key to be set, and ``iter(instance)``, ``keys()``, ``items()``, ``iterkeys()``, and ``iteritems()`` will contain case-sensitive keys. However, querying and contains testing is case insensitive: cid = CaseInsensitiveDict() cid['English'] = 'eng' cid['ENGLISH'] == 'eng' # True list(cid) == ['English'] # True If the constructor, ``.update``, or equality comparison operations are given keys that have equal ``.lower()``s, the behavior is undefined. """ def __init__(self, data=None, **kwargs): self._store = dict() if data is None: data = {} self.update(data, **kwargs) def __setitem__(self, key, value): # Use the lowercased key for lookups, but store the actual # key alongside the value. self._store[key.lower()] = (key, value) def __getitem__(self, key): return self._store[key.lower()][1] def __delitem__(self, key): del self._store[key.lower()] def __iter__(self): return (casedkey for casedkey, mappedvalue in self._store.values()) def __len__(self): return len(self._store) def lower_items(self): """Like iteritems(), but with all lowercase keys.""" return ( (lowerkey, keyval[1]) for (lowerkey, keyval) in self._store.items() ) def __eq__(self, other): if isinstance(other, collections.Mapping): other = CaseInsensitiveDict(other) else: return NotImplemented # Compare insensitively return dict(self.lower_items()) == dict(other.lower_items()) # Copy is required def copy(self): return CaseInsensitiveDict(self._store.values()) def __repr__(self): return '%s(%r)' % (self.__class__.__name__, dict(self.items())) class LanguageConverter(object): """A :class:`LanguageConverter` supports converting an alpha3 language code with an alpha2 country code and a script code into a custom code .. attribute:: codes Set of possible custom codes """ def convert(self, alpha3, country=None, script=None): """Convert an alpha3 language code with an alpha2 country code and a script code into a custom code :param string alpha3: ISO-639-3 language code :param country: ISO-3166 country code, if any :type country: string or None :param script: ISO-15924 script code, if any :type script: string or None :return: the corresponding custom code :rtype: string :raise: :class:`~babelfish.exceptions.LanguageConvertError` """ raise NotImplementedError class LanguageReverseConverter(LanguageConverter): """A :class:`LanguageConverter` able to reverse a custom code into a alpha3 ISO-639-3 language code, alpha2 ISO-3166-1 country code and ISO-15924 script code """ def reverse(self, code): """Reverse a custom code into alpha3, country and script code :param string code: custom code to reverse :return: the corresponding alpha3 ISO-639-3 language code, alpha2 ISO-3166-1 country code and ISO-15924 script code :rtype: tuple :raise: :class:`~babelfish.exceptions.LanguageReverseError` """ raise NotImplementedError class LanguageEquivalenceConverter(LanguageReverseConverter): """A :class:`LanguageEquivalenceConverter` is a utility class that allows you to easily define a :class:`LanguageReverseConverter` by only specifying the dict from alpha3 to their corresponding symbols. You must specify the dict of equivalence as a class variable named SYMBOLS. If you also set the class variable CASE_SENSITIVE to ``True`` then the reverse conversion function will be case-sensitive (it is case-insensitive by default). Example:: class MyCodeConverter(babelfish.LanguageEquivalenceConverter): CASE_SENSITIVE = True SYMBOLS = {'fra': 'mycode1', 'eng': 'mycode2'} """ CASE_SENSITIVE = False def __init__(self): self.codes = set() self.to_symbol = {} if self.CASE_SENSITIVE: self.from_symbol = {} else: self.from_symbol = CaseInsensitiveDict() for alpha3, symbol in self.SYMBOLS.items(): self.to_symbol[alpha3] = symbol self.from_symbol[symbol] = (alpha3, None, None) self.codes.add(symbol) def convert(self, alpha3, country=None, script=None): try: return self.to_symbol[alpha3] except KeyError: raise LanguageConvertError(alpha3, country, script) def reverse(self, code): try: return self.from_symbol[code] except KeyError: raise LanguageReverseError(code) class CountryConverter(object): """A :class:`CountryConverter` supports converting an alpha2 country code into a custom code .. attribute:: codes Set of possible custom codes """ def convert(self, alpha2): """Convert an alpha2 country code into a custom code :param string alpha2: ISO-3166-1 language code :return: the corresponding custom code :rtype: string :raise: :class:`~babelfish.exceptions.CountryConvertError` """ raise NotImplementedError class CountryReverseConverter(CountryConverter): """A :class:`CountryConverter` able to reverse a custom code into a alpha2 ISO-3166-1 country code """ def reverse(self, code): """Reverse a custom code into alpha2 code :param string code: custom code to reverse :return: the corresponding alpha2 ISO-3166-1 country code :rtype: string :raise: :class:`~babelfish.exceptions.CountryReverseError` """ raise NotImplementedError class ConverterManager(object): """Manager for babelfish converters behaving like a dict with lazy loading Loading is done in this order: * Entry point converters * Registered converters * Internal converters .. attribute:: entry_point The entry point where to look for converters .. attribute:: internal_converters Internal converters with entry point syntax """ entry_point = '' internal_converters = [] def __init__(self): #: Registered converters with entry point syntax self.registered_converters = [] #: Loaded converters self.converters = {} def __getitem__(self, name): """Get a converter, lazy loading it if necessary""" if name in self.converters: return self.converters[name] for ep in iter_entry_points(self.entry_point): if ep.name == name: self.converters[ep.name] = ep.load()() return self.converters[ep.name] for ep in (EntryPoint.parse(c) for c in self.registered_converters + self.internal_converters): if ep.name == name: # `require` argument of ep.load() is deprecated in newer versions of setuptools if hasattr(ep, 'resolve'): plugin = ep.resolve() elif hasattr(ep, '_load'): plugin = ep._load() else: plugin = ep.load(require=False) self.converters[ep.name] = plugin() return self.converters[ep.name] raise KeyError(name) def __setitem__(self, name, converter): """Load a converter""" self.converters[name] = converter def __delitem__(self, name): """Unload a converter""" del self.converters[name] def __iter__(self): """Iterator over loaded converters""" return iter(self.converters) def register(self, entry_point): """Register a converter :param string entry_point: converter to register (entry point syntax) :raise: ValueError if already registered """ if entry_point in self.registered_converters: raise ValueError('Already registered') self.registered_converters.insert(0, entry_point) def unregister(self, entry_point): """Unregister a converter :param string entry_point: converter to unregister (entry point syntax) """ self.registered_converters.remove(entry_point) def __contains__(self, name): return name in self.converters babelfish-0.5.4/babelfish/converters/alpha2.py0000664000175000017500000000105412377023541022071 0ustar toilaltoilal00000000000000# -*- coding: utf-8 -*- # # Copyright (c) 2013 the BabelFish authors. All rights reserved. # Use of this source code is governed by the 3-clause BSD license # that can be found in the LICENSE file. # from __future__ import unicode_literals from . import LanguageEquivalenceConverter from ..language import LANGUAGE_MATRIX class Alpha2Converter(LanguageEquivalenceConverter): CASE_SENSITIVE = True SYMBOLS = {} for iso_language in LANGUAGE_MATRIX: if iso_language.alpha2: SYMBOLS[iso_language.alpha3] = iso_language.alpha2 babelfish-0.5.4/babelfish/converters/scope.py0000664000175000017500000000151712377023541022037 0ustar toilaltoilal00000000000000# -*- coding: utf-8 -*- # # Copyright (c) 2013 the BabelFish authors. All rights reserved. # Use of this source code is governed by the 3-clause BSD license # that can be found in the LICENSE file. # from __future__ import unicode_literals from . import LanguageConverter from ..exceptions import LanguageConvertError from ..language import LANGUAGE_MATRIX class ScopeConverter(LanguageConverter): FULLNAME = {'I': 'individual', 'M': 'macrolanguage', 'S': 'special'} SYMBOLS = {} for iso_language in LANGUAGE_MATRIX: SYMBOLS[iso_language.alpha3] = iso_language.scope codes = set(SYMBOLS.values()) def convert(self, alpha3, country=None, script=None): if self.SYMBOLS[alpha3] in self.FULLNAME: return self.FULLNAME[self.SYMBOLS[alpha3]] raise LanguageConvertError(alpha3, country, script) babelfish-0.5.4/babelfish/converters/alpha3b.py0000664000175000017500000000105712377023541022237 0ustar toilaltoilal00000000000000# -*- coding: utf-8 -*- # # Copyright (c) 2013 the BabelFish authors. All rights reserved. # Use of this source code is governed by the 3-clause BSD license # that can be found in the LICENSE file. # from __future__ import unicode_literals from . import LanguageEquivalenceConverter from ..language import LANGUAGE_MATRIX class Alpha3BConverter(LanguageEquivalenceConverter): CASE_SENSITIVE = True SYMBOLS = {} for iso_language in LANGUAGE_MATRIX: if iso_language.alpha3b: SYMBOLS[iso_language.alpha3] = iso_language.alpha3b babelfish-0.5.4/babelfish/converters/type.py0000664000175000017500000000160212377023541021702 0ustar toilaltoilal00000000000000# -*- coding: utf-8 -*- # # Copyright (c) 2013 the BabelFish authors. All rights reserved. # Use of this source code is governed by the 3-clause BSD license # that can be found in the LICENSE file. # from __future__ import unicode_literals from . import LanguageConverter from ..exceptions import LanguageConvertError from ..language import LANGUAGE_MATRIX class LanguageTypeConverter(LanguageConverter): FULLNAME = {'A': 'ancient', 'C': 'constructed', 'E': 'extinct', 'H': 'historical', 'L': 'living', 'S': 'special'} SYMBOLS = {} for iso_language in LANGUAGE_MATRIX: SYMBOLS[iso_language.alpha3] = iso_language.type codes = set(SYMBOLS.values()) def convert(self, alpha3, country=None, script=None): if self.SYMBOLS[alpha3] in self.FULLNAME: return self.FULLNAME[self.SYMBOLS[alpha3]] raise LanguageConvertError(alpha3, country, script) babelfish-0.5.4/babelfish/script.py0000664000175000017500000000400612377023541020034 0ustar toilaltoilal00000000000000# -*- coding: utf-8 -*- # # Copyright (c) 2013 the BabelFish authors. All rights reserved. # Use of this source code is governed by the 3-clause BSD license # that can be found in the LICENSE file. # from __future__ import unicode_literals from collections import namedtuple from pkg_resources import resource_stream # @UnresolvedImport from . import basestr #: Script code to script name mapping SCRIPTS = {} #: List of countries in the ISO-15924 as namedtuple of code, number, name, french_name, pva and date SCRIPT_MATRIX = [] #: The namedtuple used in the :data:`SCRIPT_MATRIX` IsoScript = namedtuple('IsoScript', ['code', 'number', 'name', 'french_name', 'pva', 'date']) f = resource_stream('babelfish', 'data/iso15924-utf8-20131012.txt') f.readline() for l in f: l = l.decode('utf-8').strip() if not l or l.startswith('#'): continue script = IsoScript._make(l.split(';')) SCRIPT_MATRIX.append(script) SCRIPTS[script.code] = script.name f.close() class Script(object): """A human writing system A script is represented by a 4-letter code from the ISO-15924 standard :param string script: 4-letter ISO-15924 script code """ def __init__(self, script): if script not in SCRIPTS: raise ValueError('%r is not a valid script' % script) #: ISO-15924 4-letter script code self.code = script @property def name(self): """English name of the script""" return SCRIPTS[self.code] def __getstate__(self): return self.code def __setstate__(self, state): self.code = state def __hash__(self): return hash(self.code) def __eq__(self, other): if isinstance(other, basestr): return self.code == other if not isinstance(other, Script): return False return self.code == other.code def __ne__(self, other): return not self == other def __repr__(self): return '