2014-01-15 23:33:59 +08:00
|
|
|
def _makeunicodes(f):
|
|
|
|
lines = iter(f.readlines())
|
2004-09-25 07:47:41 +00:00
|
|
|
unicodes = {}
|
2014-01-15 23:33:59 +08:00
|
|
|
for line in lines:
|
|
|
|
if not line:
|
|
|
|
continue
|
|
|
|
num, name = line.split(";")[:2]
|
|
|
|
if name[0] == "<":
|
|
|
|
continue # "<control>", etc.
|
2004-09-25 07:47:41 +00:00
|
|
|
num = int(num, 16)
|
2014-01-15 23:33:59 +08:00
|
|
|
unicodes[num] = name
|
2004-09-25 07:47:41 +00:00
|
|
|
return unicodes
|
1999-12-16 21:34:53 +00:00
|
|
|
|
|
|
|
|
2014-01-15 23:33:59 +08:00
|
|
|
class _UnicodeCustom(object):
|
|
|
|
def __init__(self, f):
|
2021-03-27 10:23:29 -04:00
|
|
|
if isinstance(f, str):
|
2018-09-25 23:27:51 +02:00
|
|
|
with open(f) as fd:
|
|
|
|
codes = _makeunicodes(fd)
|
2022-12-13 11:26:36 +00:00
|
|
|
else:
|
2018-09-25 23:27:51 +02:00
|
|
|
codes = _makeunicodes(f)
|
|
|
|
self.codes = codes
|
2000-03-28 10:33:58 +00:00
|
|
|
|
2014-01-15 23:33:59 +08:00
|
|
|
def __getitem__(self, charCode):
|
2021-03-27 10:23:29 -04:00
|
|
|
try:
|
2018-09-25 23:27:51 +02:00
|
|
|
return self.codes[charCode]
|
2004-09-25 07:47:41 +00:00
|
|
|
except KeyError:
|
1999-12-16 21:34:53 +00:00
|
|
|
return "????"
|
2000-03-28 10:33:58 +00:00
|
|
|
|
1999-12-16 21:34:53 +00:00
|
|
|
|
2014-01-15 23:33:59 +08:00
|
|
|
class _UnicodeBuiltin(object):
|
|
|
|
def __getitem__(self, charCode):
|
2022-12-13 11:26:36 +00:00
|
|
|
try:
|
2015-09-10 10:13:01 +01:00
|
|
|
# use unicodedata backport to python2, if available:
|
|
|
|
# https://github.com/mikekap/unicodedata2
|
|
|
|
import unicodedata2 as unicodedata
|
|
|
|
except ImportError:
|
|
|
|
import unicodedata
|
2022-12-13 11:26:36 +00:00
|
|
|
try:
|
2021-03-29 11:45:58 +02:00
|
|
|
return unicodedata.name(chr(charCode))
|
2014-01-15 23:33:59 +08:00
|
|
|
except ValueError:
|
|
|
|
return "????"
|
|
|
|
|
|
|
|
|
|
|
|
Unicode = _UnicodeBuiltin()
|
1999-12-16 21:34:53 +00:00
|
|
|
|
2022-12-13 11:26:36 +00:00
|
|
|
|
2014-01-15 23:33:59 +08:00
|
|
|
def setUnicodeData(f):
|
|
|
|
global Unicode
|
|
|
|
Unicode = _UnicodeCustom(f)
|