Port to pre-Python-2.7 syntax
Re dictionary comprehensions.
This commit is contained in:
parent
44f3cf1f37
commit
613ddb9198
91
pyotlss.py
91
pyotlss.py
@ -90,10 +90,19 @@ def intersect_class(self, glyphs, klass):
|
||||
return set(g for g,v in self.classDefs.iteritems()
|
||||
if v == klass and g in glyphs)
|
||||
|
||||
# Python older than 2.7 didn't have dictionary comprehensions
|
||||
# As such, the expressions {k,v for k,v in d if cond} translates to
|
||||
# _dict((k,v) for k,v in d if cond)
|
||||
def _dict(items_list):
|
||||
d = {}
|
||||
for k,v in items_list:
|
||||
d[k] = v
|
||||
return d
|
||||
|
||||
@_add_method(fontTools.ttLib.tables.otTables.ClassDef)
|
||||
def subset(self, glyphs, remap=False):
|
||||
"Returns ascending list of remaining classes."
|
||||
self.classDefs = {g:v for g,v in self.classDefs.iteritems() if g in glyphs}
|
||||
self.classDefs = _dict((g,v) for g,v in self.classDefs.iteritems() if g in glyphs)
|
||||
# Note: while class 0 has the special meaning of "not matched",
|
||||
# if no glyph will ever /not match/, we can optimize class 0 out too.
|
||||
indices = _uniq_sort(
|
||||
@ -106,8 +115,8 @@ def subset(self, glyphs, remap=False):
|
||||
@_add_method(fontTools.ttLib.tables.otTables.ClassDef)
|
||||
def remap(self, class_map):
|
||||
"Remaps classes."
|
||||
self.classDefs = {g:class_map.index(v)
|
||||
for g,v in self.classDefs.iteritems()}
|
||||
self.classDefs = _dict((g,class_map.index(v))
|
||||
for g,v in self.classDefs.iteritems())
|
||||
|
||||
@_add_method(fontTools.ttLib.tables.otTables.SingleSubst)
|
||||
def closure_glyphs(self, s, cur_glyphs=None):
|
||||
@ -120,8 +129,8 @@ def closure_glyphs(self, s, cur_glyphs=None):
|
||||
@_add_method(fontTools.ttLib.tables.otTables.SingleSubst)
|
||||
def subset_glyphs(self, s):
|
||||
if self.Format in [1, 2]:
|
||||
self.mapping = {g:v for g,v in self.mapping.iteritems()
|
||||
if g in s.glyphs and v in s.glyphs}
|
||||
self.mapping = _dict((g,v) for g,v in self.mapping.iteritems()
|
||||
if g in s.glyphs and v in s.glyphs)
|
||||
return bool(self.mapping)
|
||||
else:
|
||||
assert 0, "unknown format: %s" % self.Format
|
||||
@ -162,8 +171,10 @@ def closure_glyphs(self, s, cur_glyphs=None):
|
||||
@_add_method(fontTools.ttLib.tables.otTables.AlternateSubst)
|
||||
def subset_glyphs(self, s):
|
||||
if self.Format == 1:
|
||||
self.alternates = {g:vlist for g,vlist in self.alternates.iteritems()
|
||||
if g in s.glyphs and all(v in s.glyphs for v in vlist)}
|
||||
self.alternates = _dict((g,vlist)
|
||||
for g,vlist in self.alternates.iteritems()
|
||||
if g in s.glyphs and
|
||||
all(v in s.glyphs for v in vlist))
|
||||
return bool(self.alternates)
|
||||
else:
|
||||
assert 0, "unknown format: %s" % self.Format
|
||||
@ -182,13 +193,13 @@ def closure_glyphs(self, s, cur_glyphs=None):
|
||||
@_add_method(fontTools.ttLib.tables.otTables.LigatureSubst)
|
||||
def subset_glyphs(self, s):
|
||||
if self.Format == 1:
|
||||
self.ligatures = {g:v for g,v in self.ligatures.iteritems()
|
||||
if g in s.glyphs}
|
||||
self.ligatures = {g:[seq for seq in seqs
|
||||
if seq.LigGlyph in s.glyphs and
|
||||
all(c in s.glyphs for c in seq.Component)]
|
||||
for g,seqs in self.ligatures.iteritems()}
|
||||
self.ligatures = {g:v for g,v in self.ligatures.iteritems() if v}
|
||||
self.ligatures = _dict((g,v) for g,v in self.ligatures.iteritems()
|
||||
if g in s.glyphs)
|
||||
self.ligatures = _dict((g,[seq for seq in seqs
|
||||
if seq.LigGlyph in s.glyphs and
|
||||
all(c in s.glyphs for c in seq.Component)])
|
||||
for g,seqs in self.ligatures.iteritems())
|
||||
self.ligatures = _dict((g,v) for g,v in self.ligatures.iteritems() if v)
|
||||
return bool(self.ligatures)
|
||||
else:
|
||||
assert 0, "unknown format: %s" % self.Format
|
||||
@ -1058,15 +1069,17 @@ def subset_glyphs(self, s):
|
||||
if not table.LigCaretList.LigGlyphCount:
|
||||
table.LigCaretList = None
|
||||
if table.MarkAttachClassDef:
|
||||
table.MarkAttachClassDef.classDefs = {g:v for g,v in
|
||||
table.MarkAttachClassDef.classDefs.iteritems()
|
||||
if g in glyphs}
|
||||
table.MarkAttachClassDef.classDefs = _dict((g,v) for g,v in
|
||||
table.MarkAttachClassDef.
|
||||
classDefs.iteritems()
|
||||
if g in glyphs)
|
||||
if not table.MarkAttachClassDef.classDefs:
|
||||
table.MarkAttachClassDef = None
|
||||
if table.GlyphClassDef:
|
||||
table.GlyphClassDef.classDefs = {g:v for g,v in
|
||||
table.GlyphClassDef.classDefs.iteritems()
|
||||
if g in glyphs}
|
||||
table.GlyphClassDef.classDefs = _dict((g,v) for g,v in
|
||||
table.GlyphClassDef.
|
||||
classDefs.iteritems()
|
||||
if g in glyphs)
|
||||
if not table.GlyphClassDef.classDefs:
|
||||
table.GlyphClassDef = None
|
||||
if table.AttachList:
|
||||
@ -1091,27 +1104,27 @@ def prune_pre_subset(self, options):
|
||||
def subset_glyphs(self, s):
|
||||
glyphs = s.glyphs_gsubed
|
||||
for t in self.kernTables:
|
||||
t.kernTable = {(a,b):v for (a,b),v in t.kernTable.iteritems()
|
||||
if a in glyphs and b in glyphs}
|
||||
t.kernTable = _dict(((a,b),v) for (a,b),v in t.kernTable.iteritems()
|
||||
if a in glyphs and b in glyphs)
|
||||
self.kernTables = [t for t in self.kernTables if t.kernTable]
|
||||
return bool(self.kernTables)
|
||||
|
||||
@_add_method(fontTools.ttLib.getTableClass('hmtx'),
|
||||
fontTools.ttLib.getTableClass('vmtx'))
|
||||
def subset_glyphs(self, s):
|
||||
self.metrics = {g:v for g,v in self.metrics.iteritems() if g in s.glyphs}
|
||||
self.metrics = _dict((g,v) for g,v in self.metrics.iteritems() if g in s.glyphs)
|
||||
return bool(self.metrics)
|
||||
|
||||
@_add_method(fontTools.ttLib.getTableClass('hdmx'))
|
||||
def subset_glyphs(self, s):
|
||||
self.hdmx = {sz:{g:v for g,v in l.iteritems() if g in s.glyphs}
|
||||
for sz,l in self.hdmx.iteritems()}
|
||||
self.hdmx = _dict((sz,_dict((g,v) for g,v in l.iteritems() if g in s.glyphs))
|
||||
for sz,l in self.hdmx.iteritems())
|
||||
return bool(self.hdmx)
|
||||
|
||||
@_add_method(fontTools.ttLib.getTableClass('VORG'))
|
||||
def subset_glyphs(self, s):
|
||||
self.VOriginRecords = {g:v for g,v in self.VOriginRecords.iteritems()
|
||||
if g in s.glyphs}
|
||||
self.VOriginRecords = _dict((g,v) for g,v in self.VOriginRecords.iteritems()
|
||||
if g in s.glyphs)
|
||||
self.numVertOriginYMetrics = len(self.VOriginRecords)
|
||||
return True # Never drop; has default metrics
|
||||
|
||||
@ -1245,7 +1258,7 @@ def closure_glyphs(self, s):
|
||||
|
||||
@_add_method(fontTools.ttLib.getTableClass('glyf'))
|
||||
def subset_glyphs(self, s):
|
||||
self.glyphs = {g:v for g,v in self.glyphs.iteritems() if g in s.glyphs}
|
||||
self.glyphs = _dict((g,v) for g,v in self.glyphs.iteritems() if g in s.glyphs)
|
||||
indices = [i for i,g in enumerate(self.glyphOrder) if g in s.glyphs]
|
||||
for v in self.glyphs.itervalues():
|
||||
if hasattr(v, "data"):
|
||||
@ -1295,13 +1308,13 @@ def subset_glyphs(self, s):
|
||||
sel = font.FDSelect
|
||||
sel.format = None
|
||||
sel.gidArray = [sel.gidArray[i] for i in indices]
|
||||
cs.charStrings = {g:indices.index(v)
|
||||
for g,v in cs.charStrings.iteritems()
|
||||
if g in s.glyphs}
|
||||
cs.charStrings = _dict((g,indices.index(v))
|
||||
for g,v in cs.charStrings.iteritems()
|
||||
if g in s.glyphs)
|
||||
else:
|
||||
cs.charStrings = {g:v
|
||||
for g,v in cs.charStrings.iteritems()
|
||||
if g in s.glyphs}
|
||||
cs.charStrings = _dict((g,v)
|
||||
for g,v in cs.charStrings.iteritems()
|
||||
if g in s.glyphs)
|
||||
font.charset = [g for g in font.charset if g in s.glyphs]
|
||||
font.numGlyphs = len(font.charset)
|
||||
|
||||
@ -1451,12 +1464,12 @@ def subset_glyphs(self, s):
|
||||
pass
|
||||
if t.format == 14:
|
||||
# TODO(behdad) XXX We drop all the default-UVS mappings(g==None).
|
||||
t.uvsDict = {v:[(u,g) for u,g in l if g in s.glyphs]
|
||||
for v,l in t.uvsDict.iteritems()}
|
||||
t.uvsDict = {v:l for v,l in t.uvsDict.iteritems() if l}
|
||||
t.uvsDict = _dict((v,[(u,g) for u,g in l if g in s.glyphs])
|
||||
for v,l in t.uvsDict.iteritems())
|
||||
t.uvsDict = _dict((v,l) for v,l in t.uvsDict.iteritems() if l)
|
||||
else:
|
||||
t.cmap = {u:g for u,g in t.cmap.iteritems()
|
||||
if g in s.glyphs_requested or u in s.unicodes_requested}
|
||||
t.cmap = _dict((u,g) for u,g in t.cmap.iteritems()
|
||||
if g in s.glyphs_requested or u in s.unicodes_requested)
|
||||
self.tables = [t for t in self.tables
|
||||
if (t.cmap if t.format != 14 else t.uvsDict)]
|
||||
# TODO(behdad) Convert formats when needed.
|
||||
|
Loading…
x
Reference in New Issue
Block a user