[merge] py23
This commit is contained in:
parent
fc1d0525b6
commit
f63e80e3fc
@ -5,12 +5,14 @@
|
|||||||
"""Font merger.
|
"""Font merger.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from __future__ import print_function, division
|
||||||
|
from fontTools.misc.py23 import *
|
||||||
|
from fontTools import ttLib, cffLib
|
||||||
|
from fontTools.ttLib.tables import otTables
|
||||||
|
from functools import reduce
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
|
|
||||||
import fontTools
|
|
||||||
from fontTools import misc, ttLib, cffLib
|
|
||||||
from fontTools.ttLib.tables import otTables
|
|
||||||
|
|
||||||
def _add_method(*clazzes):
|
def _add_method(*clazzes):
|
||||||
"""Returns a decorator function that adds a new method to one or
|
"""Returns a decorator function that adds a new method to one or
|
||||||
@ -18,10 +20,10 @@ def _add_method(*clazzes):
|
|||||||
def wrapper(method):
|
def wrapper(method):
|
||||||
for clazz in clazzes:
|
for clazz in clazzes:
|
||||||
assert clazz.__name__ != 'DefaultTable', 'Oops, table class not found.'
|
assert clazz.__name__ != 'DefaultTable', 'Oops, table class not found.'
|
||||||
assert not hasattr(clazz, method.func_name), \
|
assert not hasattr(clazz, method.__name__), \
|
||||||
"Oops, class '%s' has method '%s'." % (clazz.__name__,
|
"Oops, class '%s' has method '%s'." % (clazz.__name__,
|
||||||
method.func_name)
|
method.__name__)
|
||||||
setattr(clazz, method.func_name, method)
|
setattr(clazz, method.__name__, method)
|
||||||
return None
|
return None
|
||||||
return wrapper
|
return wrapper
|
||||||
|
|
||||||
@ -31,7 +33,7 @@ def merge(self, m):
|
|||||||
# TODO When we correctly merge hinting data, update these values:
|
# TODO When we correctly merge hinting data, update these values:
|
||||||
# maxFunctionDefs, maxInstructionDefs, maxSizeOfInstructions
|
# maxFunctionDefs, maxInstructionDefs, maxSizeOfInstructions
|
||||||
# TODO Assumes that all tables have format 1.0; safe assumption.
|
# TODO Assumes that all tables have format 1.0; safe assumption.
|
||||||
allKeys = reduce(set.union, (vars(table).keys() for table in m.tables), set())
|
allKeys = reduce(set.union, (list(vars(table).keys()) for table in m.tables), set())
|
||||||
for key in allKeys:
|
for key in allKeys:
|
||||||
setattr(self, key, max(getattr(table, key) for table in m.tables))
|
setattr(self, key, max(getattr(table, key) for table in m.tables))
|
||||||
return True
|
return True
|
||||||
@ -46,7 +48,7 @@ def merge(self, m):
|
|||||||
for table in m.tables:
|
for table in m.tables:
|
||||||
setattr(table, key, -getattr(table, key))
|
setattr(table, key, -getattr(table, key))
|
||||||
# Get max over members
|
# Get max over members
|
||||||
allKeys = reduce(set.union, (vars(table).keys() for table in m.tables), set())
|
allKeys = reduce(set.union, (list(vars(table).keys()) for table in m.tables), set())
|
||||||
for key in allKeys:
|
for key in allKeys:
|
||||||
setattr(self, key, max(getattr(table, key) for table in m.tables))
|
setattr(self, key, max(getattr(table, key) for table in m.tables))
|
||||||
# Negate them back
|
# Negate them back
|
||||||
@ -65,7 +67,7 @@ def merge(self, m):
|
|||||||
for table in m.tables:
|
for table in m.tables:
|
||||||
setattr(table, key, -getattr(table, key))
|
setattr(table, key, -getattr(table, key))
|
||||||
# Get max over members
|
# Get max over members
|
||||||
allKeys = reduce(set.union, (vars(table).keys() for table in m.tables), set())
|
allKeys = reduce(set.union, (list(vars(table).keys()) for table in m.tables), set())
|
||||||
for key in allKeys:
|
for key in allKeys:
|
||||||
setattr(self, key, max(getattr(table, key) for table in m.tables))
|
setattr(self, key, max(getattr(table, key) for table in m.tables))
|
||||||
# Negate them back
|
# Negate them back
|
||||||
@ -81,7 +83,7 @@ def merge(self, m):
|
|||||||
# TODO Bitwise ops for UnicodeRange/CodePageRange.
|
# TODO Bitwise ops for UnicodeRange/CodePageRange.
|
||||||
# TODO Pretty much all fields generated here have bogus values.
|
# TODO Pretty much all fields generated here have bogus values.
|
||||||
# Get max over members
|
# Get max over members
|
||||||
allKeys = reduce(set.union, (vars(table).keys() for table in m.tables), set())
|
allKeys = reduce(set.union, (list(vars(table).keys()) for table in m.tables), set())
|
||||||
for key in allKeys:
|
for key in allKeys:
|
||||||
setattr(self, key, max(getattr(table, key) for table in m.tables))
|
setattr(self, key, max(getattr(table, key) for table in m.tables))
|
||||||
return True
|
return True
|
||||||
@ -95,7 +97,7 @@ def merge(self, m):
|
|||||||
for table in m.tables:
|
for table in m.tables:
|
||||||
setattr(table, key, -getattr(table, key))
|
setattr(table, key, -getattr(table, key))
|
||||||
# Get max over members
|
# Get max over members
|
||||||
allKeys = reduce(set.union, (vars(table).keys() for table in m.tables), set())
|
allKeys = reduce(set.union, (list(vars(table).keys()) for table in m.tables), set())
|
||||||
if 'mapping' in allKeys:
|
if 'mapping' in allKeys:
|
||||||
allKeys.remove('mapping')
|
allKeys.remove('mapping')
|
||||||
allKeys.remove('extraNames')
|
allKeys.remove('extraNames')
|
||||||
@ -244,7 +246,7 @@ class Options(object):
|
|||||||
self.set(**kwargs)
|
self.set(**kwargs)
|
||||||
|
|
||||||
def set(self, **kwargs):
|
def set(self, **kwargs):
|
||||||
for k,v in kwargs.iteritems():
|
for k,v in kwargs.items():
|
||||||
if not hasattr(self, k):
|
if not hasattr(self, k):
|
||||||
raise self.UnknownOptionError("Unknown option '%s'" % k)
|
raise self.UnknownOptionError("Unknown option '%s'" % k)
|
||||||
setattr(self, k, v)
|
setattr(self, k, v)
|
||||||
@ -340,7 +342,7 @@ class Merger:
|
|||||||
font.setGlyphOrder(glyphOrder)
|
font.setGlyphOrder(glyphOrder)
|
||||||
mega.setGlyphOrder(megaGlyphOrder)
|
mega.setGlyphOrder(megaGlyphOrder)
|
||||||
|
|
||||||
allTags = reduce(set.union, (font.keys() for font in fonts), set())
|
allTags = reduce(set.union, (list(font.keys()) for font in fonts), set())
|
||||||
allTags.remove('GlyphOrder')
|
allTags.remove('GlyphOrder')
|
||||||
for tag in allTags:
|
for tag in allTags:
|
||||||
|
|
||||||
@ -376,7 +378,7 @@ class Merger:
|
|||||||
mega = []
|
mega = []
|
||||||
for n,glyphOrder in enumerate(glyphOrders):
|
for n,glyphOrder in enumerate(glyphOrders):
|
||||||
for i,glyphName in enumerate(glyphOrder):
|
for i,glyphName in enumerate(glyphOrder):
|
||||||
glyphName += "#" + `n`
|
glyphName += "#" + repr(n)
|
||||||
glyphOrder[i] = glyphName
|
glyphOrder[i] = glyphName
|
||||||
mega.append(glyphName)
|
mega.append(glyphName)
|
||||||
return mega
|
return mega
|
||||||
@ -401,14 +403,14 @@ class Logger(object):
|
|||||||
def __call__(self, *things):
|
def __call__(self, *things):
|
||||||
if not self.verbose:
|
if not self.verbose:
|
||||||
return
|
return
|
||||||
print ' '.join(str(x) for x in things)
|
print(' '.join(str(x) for x in things))
|
||||||
|
|
||||||
def lapse(self, *things):
|
def lapse(self, *things):
|
||||||
if not self.timing:
|
if not self.timing:
|
||||||
return
|
return
|
||||||
new_time = time.time()
|
new_time = time.time()
|
||||||
print "Took %0.3fs to %s" %(new_time - self.last_time,
|
print("Took %0.3fs to %s" %(new_time - self.last_time,
|
||||||
' '.join(str(x) for x in things))
|
' '.join(str(x) for x in things)))
|
||||||
self.last_time = new_time
|
self.last_time = new_time
|
||||||
|
|
||||||
def font(self, font, file=sys.stdout):
|
def font(self, font, file=sys.stdout):
|
||||||
@ -441,7 +443,7 @@ def main(args):
|
|||||||
args = options.parse_opts(args)
|
args = options.parse_opts(args)
|
||||||
|
|
||||||
if len(args) < 1:
|
if len(args) < 1:
|
||||||
print >>sys.stderr, "usage: pyftmerge font..."
|
print("usage: pyftmerge font...", file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
merger = Merger(options=options, log=log)
|
merger = Merger(options=options, log=log)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user