[symfont] Add function to print function sources for caching

This commit is contained in:
Behdad Esfahbod 2016-06-14 01:23:25 -04:00
parent 1a48fc27a1
commit acbd3df647

View File

@ -44,7 +44,7 @@ BezierCurve = tuple(
for n,bernsteins in enumerate(BernsteinPolynomial)) for n,bernsteins in enumerate(BernsteinPolynomial))
def green(f, Bezier=BezierCurve[n]): def green(f, Bezier=BezierCurve[n]):
f1 = -sp.integrate(f, y) f1 = -sp.integrate(sp.sympify(f), y)
f2 = f1.replace(y, Bezier[1]).replace(x, Bezier[0]) f2 = f1.replace(y, Bezier[1]).replace(x, Bezier[0])
return sp.integrate(f2 * sp.diff(Bezier[0], t), (t, 0, 1)) return sp.integrate(f2 * sp.diff(Bezier[0], t), (t, 0, 1))
@ -62,13 +62,19 @@ class BezierFuncs(object):
_BezierFuncs = {} _BezierFuncs = {}
def getGreenBezierFuncs(func): def getGreenBezierFuncs(func):
func = sp.sympify(func)
funcstr = str(func) funcstr = str(func)
global _BezierFuncs global _BezierFuncs
if not funcstr in _BezierFuncs: if not funcstr in _BezierFuncs:
_BezierFuncs[funcstr] = BezierFuncs(func) _BezierFuncs[funcstr] = BezierFuncs(func)
return _BezierFuncs[funcstr] return _BezierFuncs[funcstr]
def printCache(func):
funcstr = str(func)
print("_BezierFuncs['%s'] = [" % funcstr)
for i in range(n+1):
print(' lambda P:', green(func, Bezier=BezierCurve[i]), ',')
print(']')
class GreenPen(BasePen): class GreenPen(BasePen):
def __init__(self, func, glyphset=None): def __init__(self, func, glyphset=None):
@ -104,8 +110,11 @@ Moment2XXPen = partial(GreenPen, func=x*x)
Moment2YYPen = partial(GreenPen, func=y*y) Moment2YYPen = partial(GreenPen, func=y*y)
Moment2XYPen = partial(GreenPen, func=x*y) Moment2XYPen = partial(GreenPen, func=x*y)
def distance(p0, p1):
return math.hypot(p0[0] - p1[0], p0[1] - p1[1])
#
# Glyph statistics object
#
class GlyphStatistics(object): class GlyphStatistics(object):