Code refactoring: CMap and UnicodeMap both inherit CMapBase.
parent
b09c37902f
commit
6b6fc264ff
|
@ -29,18 +29,44 @@ class CMapError(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
## CMap
|
## CMapBase
|
||||||
##
|
##
|
||||||
class CMap(object):
|
class CMapBase(object):
|
||||||
|
|
||||||
debug = 0
|
debug = 0
|
||||||
|
|
||||||
def __init__(self, code2cid=None):
|
def __init__(self, **kwargs):
|
||||||
self.code2cid = code2cid or {}
|
self.attrs = kwargs.copy()
|
||||||
return
|
return
|
||||||
|
|
||||||
def is_vertical(self):
|
def is_vertical(self):
|
||||||
return False
|
return self.attrs.get('WMode', 0) != 0
|
||||||
|
|
||||||
|
def set_attr(self, k, v):
|
||||||
|
self.attrs[k] = v
|
||||||
|
return
|
||||||
|
|
||||||
|
def add_code2cid(self, code, cid):
|
||||||
|
return
|
||||||
|
|
||||||
|
def add_cid2unichr(self, cid, code):
|
||||||
|
return
|
||||||
|
|
||||||
|
def use_cmap(self, cmap):
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
## CMap
|
||||||
|
##
|
||||||
|
class CMap(CMapBase):
|
||||||
|
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
CMapBase.__init__(self, **kwargs)
|
||||||
|
self.code2cid = {}
|
||||||
|
return
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return '<CMap: %s>' % self.attrs.get('CMapName')
|
||||||
|
|
||||||
def use_cmap(self, cmap):
|
def use_cmap(self, cmap):
|
||||||
assert isinstance(cmap, CMap)
|
assert isinstance(cmap, CMap)
|
||||||
|
@ -86,14 +112,7 @@ class CMap(object):
|
||||||
|
|
||||||
## IdentityCMap
|
## IdentityCMap
|
||||||
##
|
##
|
||||||
class IdentityCMap(object):
|
class IdentityCMap(CMapBase):
|
||||||
|
|
||||||
def __init__(self, vertical):
|
|
||||||
self.vertical = vertical
|
|
||||||
return
|
|
||||||
|
|
||||||
def is_vertical(self):
|
|
||||||
return self.vertical
|
|
||||||
|
|
||||||
def decode(self, code):
|
def decode(self, code):
|
||||||
n = len(code)//2
|
n = len(code)//2
|
||||||
|
@ -105,14 +124,16 @@ class IdentityCMap(object):
|
||||||
|
|
||||||
## UnicodeMap
|
## UnicodeMap
|
||||||
##
|
##
|
||||||
class UnicodeMap(object):
|
class UnicodeMap(CMapBase):
|
||||||
|
|
||||||
debug = 0
|
def __init__(self, **kwargs):
|
||||||
|
CMapBase.__init__(self, **kwargs)
|
||||||
def __init__(self, cid2unichr=None):
|
self.cid2unichr = {}
|
||||||
self.cid2unichr = cid2unichr or {}
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return '<UnicodeMap: %s>' % self.attrs.get('CMapName')
|
||||||
|
|
||||||
def get_unichr(self, cid):
|
def get_unichr(self, cid):
|
||||||
if self.debug:
|
if self.debug:
|
||||||
print >>sys.stderr, 'get_unichr: %r, %r' % (self, cid)
|
print >>sys.stderr, 'get_unichr: %r, %r' % (self, cid)
|
||||||
|
@ -128,21 +149,6 @@ class UnicodeMap(object):
|
||||||
##
|
##
|
||||||
class FileCMap(CMap):
|
class FileCMap(CMap):
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
CMap.__init__(self)
|
|
||||||
self.attrs = {}
|
|
||||||
return
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return '<CMap: %s>' % self.attrs.get('CMapName')
|
|
||||||
|
|
||||||
def is_vertical(self):
|
|
||||||
return self.attrs.get('WMode', 0) != 0
|
|
||||||
|
|
||||||
def set_attr(self, k, v):
|
|
||||||
self.attrs[k] = v
|
|
||||||
return
|
|
||||||
|
|
||||||
def add_code2cid(self, code, cid):
|
def add_code2cid(self, code, cid):
|
||||||
assert isinstance(code, str) and isinstance(cid, int)
|
assert isinstance(code, str) and isinstance(cid, int)
|
||||||
d = self.code2cid
|
d = self.code2cid
|
||||||
|
@ -163,18 +169,6 @@ class FileCMap(CMap):
|
||||||
##
|
##
|
||||||
class FileUnicodeMap(UnicodeMap):
|
class FileUnicodeMap(UnicodeMap):
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
UnicodeMap.__init__(self)
|
|
||||||
self.attrs = {}
|
|
||||||
return
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return '<UnicodeMap: %s>' % self.attrs.get('CMapName')
|
|
||||||
|
|
||||||
def set_attr(self, k, v):
|
|
||||||
self.attrs[k] = v
|
|
||||||
return
|
|
||||||
|
|
||||||
def add_cid2unichr(self, cid, code):
|
def add_cid2unichr(self, cid, code):
|
||||||
assert isinstance(cid, int)
|
assert isinstance(cid, int)
|
||||||
if isinstance(code, PSLiteral):
|
if isinstance(code, PSLiteral):
|
||||||
|
@ -195,34 +189,26 @@ class FileUnicodeMap(UnicodeMap):
|
||||||
class PyCMap(CMap):
|
class PyCMap(CMap):
|
||||||
|
|
||||||
def __init__(self, name, module):
|
def __init__(self, name, module):
|
||||||
CMap.__init__(self, module.CODE2CID)
|
CMap.__init__(self, CMapName=name)
|
||||||
self.name = name
|
self.code2cid = module.CODE2CID
|
||||||
self._is_vertical = module.IS_VERTICAL
|
if module.IS_VERTICAL:
|
||||||
|
self.attrs['WMode'] = 1
|
||||||
return
|
return
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return '<PyCMap: %s>' % (self.name)
|
|
||||||
|
|
||||||
def is_vertical(self):
|
|
||||||
return self._is_vertical
|
|
||||||
|
|
||||||
|
|
||||||
## PyUnicodeMap
|
## PyUnicodeMap
|
||||||
##
|
##
|
||||||
class PyUnicodeMap(UnicodeMap):
|
class PyUnicodeMap(UnicodeMap):
|
||||||
|
|
||||||
def __init__(self, name, module, vertical):
|
def __init__(self, name, module, vertical):
|
||||||
|
UnicodeMap.__init__(self, CMapName=name)
|
||||||
if vertical:
|
if vertical:
|
||||||
cid2unichr = module.CID2UNICHR_V
|
self.cid2unichr = module.CID2UNICHR_V
|
||||||
|
self.attrs['WMode'] = 1
|
||||||
else:
|
else:
|
||||||
cid2unichr = module.CID2UNICHR_H
|
self.cid2unichr = module.CID2UNICHR_H
|
||||||
UnicodeMap.__init__(self, cid2unichr)
|
|
||||||
self.name = name
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return '<PyUnicodeMap: %s>' % (self.name)
|
|
||||||
|
|
||||||
|
|
||||||
## CMapDB
|
## CMapDB
|
||||||
##
|
##
|
||||||
|
@ -256,9 +242,9 @@ class CMapDB(object):
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_cmap(klass, name):
|
def get_cmap(klass, name):
|
||||||
if name == 'Identity-H':
|
if name == 'Identity-H':
|
||||||
return IdentityCMap(False)
|
return IdentityCMap(WMode=0)
|
||||||
elif name == 'Identity-V':
|
elif name == 'Identity-V':
|
||||||
return IdentityCMap(True)
|
return IdentityCMap(WMode=1)
|
||||||
try:
|
try:
|
||||||
return klass._cmap_cache[name]
|
return klass._cmap_cache[name]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
|
Loading…
Reference in New Issue