linegap
This commit is contained in:
28
dumpscad.py
28
dumpscad.py
@@ -3,6 +3,17 @@ import sys
|
|||||||
from zttf.ttfile import TTFile
|
from zttf.ttfile import TTFile
|
||||||
from struct import unpack
|
from struct import unpack
|
||||||
|
|
||||||
|
def glyphBox(f,g):
|
||||||
|
data = f.get_glyph_data(g)
|
||||||
|
if not len(data):
|
||||||
|
return (0,0,0,0)
|
||||||
|
return unpack(">hhhhh", data[:10])[1:]
|
||||||
|
|
||||||
|
def describeChar(c):
|
||||||
|
if c >= 32 and c<127 and c != ord('\\') and c != ord('"'):
|
||||||
|
return '"'+chr(c)+'"'
|
||||||
|
else:
|
||||||
|
return "chr(%d)" % c
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
if len(sys.argv) < 2:
|
if len(sys.argv) < 2:
|
||||||
@@ -34,7 +45,7 @@ if __name__ == '__main__':
|
|||||||
print(chr(c),ascent)
|
print(chr(c),ascent)
|
||||||
maxAscent = max(ascent,maxAscent)
|
maxAscent = max(ascent,maxAscent)
|
||||||
"""
|
"""
|
||||||
maxAscent = f.tables[b'os2'].sTypoAscender
|
ascent = f.tables[b'os2'].sTypoAscender
|
||||||
|
|
||||||
fontID = re.sub(r"[^0-9A-Za-z]", "_", f.name)
|
fontID = re.sub(r"[^0-9A-Za-z]", "_", f.name)
|
||||||
if fontID[0].isdigit():
|
if fontID[0].isdigit():
|
||||||
@@ -44,18 +55,23 @@ if __name__ == '__main__':
|
|||||||
%d], // style
|
%d], // style
|
||||||
%d, // ascender
|
%d, // ascender
|
||||||
%d, // descender
|
%d, // descender
|
||||||
|
%d, // line gap
|
||||||
%f, // units_per_em
|
%f, // units_per_em
|
||||||
[
|
[""" % (fontID, f.font_family, f.tables[b'head'].mac_style, ascent,
|
||||||
""" % (fontID, f.font_family, f.tables[b'head'].mac_style, maxAscent, f.tables[b'os2'].sTypoDescender,
|
f.tables[b'os2'].sTypoDescender,
|
||||||
|
f.tables[b'os2'].typo_line_gap,
|
||||||
f.units_per_em))
|
f.units_per_em))
|
||||||
for c in chars:
|
for c in chars:
|
||||||
glyph = f.char_to_glyph(c)
|
glyph = f.char_to_glyph(c)
|
||||||
line = " [ chr(%d), %d, [" % ( c, f.glyph_metrics[glyph][0] )
|
box = glyphBox(f,glyph)
|
||||||
|
line = " [%s,%d,%d,%d,%d,%d,%d,[" % ( describeChar(c), f.glyph_metrics[glyph][0],
|
||||||
|
f.glyph_metrics[glyph][1], box[0], box[1], box[2], box[3] )
|
||||||
|
kerns=[]
|
||||||
for c2 in chars:
|
for c2 in chars:
|
||||||
r = f.char_to_glyph(c2)
|
r = f.char_to_glyph(c2)
|
||||||
if (glyph,r) in f.glyph_kern:
|
if (glyph,r) in f.glyph_kern:
|
||||||
line += "[chr(%d),%d]," % (c2, f.glyph_kern[(glyph,r)])
|
kerns.append("[%s,%d]" % (describeChar(c2), f.glyph_kern[(glyph,r)]))
|
||||||
line += "] ],"
|
line += ','.join(kerns)+"]],"
|
||||||
print(line)
|
print(line)
|
||||||
print(" ]\n];\n")
|
print(" ]\n];\n")
|
||||||
|
|
||||||
|
|||||||
@@ -208,7 +208,7 @@ class TTFont(object):
|
|||||||
glyph_start = self.get_glyph_position(glyph)
|
glyph_start = self.get_glyph_position(glyph)
|
||||||
glyph_length = self.get_glyph_position(glyph + 1) - glyph_start
|
glyph_length = self.get_glyph_position(glyph + 1) - glyph_start
|
||||||
if glyph_length == 0:
|
if glyph_length == 0:
|
||||||
print("Zero length glyph @ {}".format(glyph))
|
#print("Zero length glyph @ {}".format(glyph))
|
||||||
return b''
|
return b''
|
||||||
self._open()
|
self._open()
|
||||||
self.file_handle.seek(data_start + glyph_start)
|
self.file_handle.seek(data_start + glyph_start)
|
||||||
|
|||||||
Reference in New Issue
Block a user