# -*- 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 '