You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.0 KiB
77 lines
2.0 KiB
6 years ago
|
# -*- 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 '<Script [%s]>' % self
|
||
|
|
||
|
def __str__(self):
|
||
|
return self.code
|