cfffont extension with no luck
parent
4eb6083c09
commit
109aedeb43
|
@ -266,10 +266,11 @@ class CFFFont(object):
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return iter( self[i] for i in xrange(len(self)) )
|
return iter( self[i] for i in xrange(len(self)) )
|
||||||
|
|
||||||
def __init__(self, fp0):
|
def __init__(self, name, fp):
|
||||||
self.fp = fp0
|
self.name = name
|
||||||
|
self.fp = fp
|
||||||
# Header
|
# Header
|
||||||
(_major,_minor,hdrsize,self.offsize) = unpack('BBBB', self.fp.read(4))
|
(_major,_minor,hdrsize,offsize) = unpack('BBBB', self.fp.read(4))
|
||||||
self.fp.read(hdrsize-4)
|
self.fp.read(hdrsize-4)
|
||||||
# Name INDEX
|
# Name INDEX
|
||||||
self.name_index = self.INDEX(self.fp)
|
self.name_index = self.INDEX(self.fp)
|
||||||
|
@ -281,9 +282,9 @@ class CFFFont(object):
|
||||||
self.subr_index = self.INDEX(self.fp)
|
self.subr_index = self.INDEX(self.fp)
|
||||||
# Top DICT DATA
|
# Top DICT DATA
|
||||||
self.top_dict = getdict(self.dict_index[0])
|
self.top_dict = getdict(self.dict_index[0])
|
||||||
(charset_pos,) = self.top_dict.get(15, 0)
|
(charset_pos,) = self.top_dict.get(15, [0])
|
||||||
(encoding_pos,) = self.top_dict.get(16, 0)
|
(encoding_pos,) = self.top_dict.get(16, [0])
|
||||||
(charstring_pos,) = self.top_dict.get(17, 0)
|
(charstring_pos,) = self.top_dict.get(17, [0])
|
||||||
# CharStrings
|
# CharStrings
|
||||||
self.fp.seek(charstring_pos)
|
self.fp.seek(charstring_pos)
|
||||||
self.charstring = self.INDEX(self.fp)
|
self.charstring = self.INDEX(self.fp)
|
||||||
|
@ -299,9 +300,18 @@ class CFFFont(object):
|
||||||
for (code,gid) in enumerate(unpack('B'*n, self.fp.read(n))):
|
for (code,gid) in enumerate(unpack('B'*n, self.fp.read(n))):
|
||||||
self.code2gid[code] = gid
|
self.code2gid[code] = gid
|
||||||
self.gid2code[gid] = code
|
self.gid2code[gid] = code
|
||||||
else:
|
elif format == '\x01':
|
||||||
# Format 1
|
# Format 1
|
||||||
assert 0
|
(n,) = unpack('B', self.fp.read(1))
|
||||||
|
code = 0
|
||||||
|
for i in xrange(n):
|
||||||
|
(first,nleft) = unpack('BB', self.fp.read(2))
|
||||||
|
for gid in xrange(first,first+nleft+1):
|
||||||
|
self.code2gid[code] = gid
|
||||||
|
self.gid2code[gid] = code
|
||||||
|
code += 1
|
||||||
|
else:
|
||||||
|
raise ValueError('unsupported encoding format: %r' % format)
|
||||||
# Charsets
|
# Charsets
|
||||||
self.name2gid = {}
|
self.name2gid = {}
|
||||||
self.gid2name = {}
|
self.gid2name = {}
|
||||||
|
@ -315,9 +325,22 @@ class CFFFont(object):
|
||||||
name = self.getstr(sid)
|
name = self.getstr(sid)
|
||||||
self.name2gid[name] = gid
|
self.name2gid[name] = gid
|
||||||
self.gid2name[gid] = name
|
self.gid2name[gid] = name
|
||||||
else:
|
elif format == '\x01':
|
||||||
# Format 1
|
# Format 1
|
||||||
|
(n,) = unpack('B', self.fp.read(1))
|
||||||
|
sid = 0
|
||||||
|
for i in xrange(n):
|
||||||
|
(first,nleft) = unpack('BB', self.fp.read(2))
|
||||||
|
for gid in xrange(first,first+nleft+1):
|
||||||
|
name = self.getstr(sid)
|
||||||
|
self.name2gid[name] = gid
|
||||||
|
self.gid2name[gid] = name
|
||||||
|
sid += 1
|
||||||
|
elif format == '\x02':
|
||||||
|
# Format 2
|
||||||
assert 0
|
assert 0
|
||||||
|
else:
|
||||||
|
raise ValueError('unsupported charset format: %r' % format)
|
||||||
#print self.code2gid
|
#print self.code2gid
|
||||||
#print self.name2gid
|
#print self.name2gid
|
||||||
#assert 0
|
#assert 0
|
||||||
|
@ -339,7 +362,7 @@ class TrueTypeFont(object):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.fp = fp
|
self.fp = fp
|
||||||
self.tables = {}
|
self.tables = {}
|
||||||
fonttype = fp.read(4)
|
self.fonttype = fp.read(4)
|
||||||
(ntables, _1, _2, _3) = unpack('>HHHH', fp.read(8))
|
(ntables, _1, _2, _3) = unpack('>HHHH', fp.read(8))
|
||||||
for _ in xrange(ntables):
|
for _ in xrange(ntables):
|
||||||
(name, tsum, offset, length) = unpack('>4sLLL', fp.read(16))
|
(name, tsum, offset, length) = unpack('>4sLLL', fp.read(16))
|
||||||
|
@ -670,7 +693,9 @@ class PDFCIDFont(PDFFont):
|
||||||
def main(argv):
|
def main(argv):
|
||||||
for fname in argv[1:]:
|
for fname in argv[1:]:
|
||||||
fp = file(fname, 'rb')
|
fp = file(fname, 'rb')
|
||||||
font = TrueTypeFont(fname, fp)
|
#font = TrueTypeFont(fname, fp)
|
||||||
|
font = CFFFont(fname, fp)
|
||||||
|
print font
|
||||||
fp.close()
|
fp.close()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue