diff --git a/Lib/fontTools/misc/visitor.py b/Lib/fontTools/misc/visitor.py index 1f10e5368..8c82f8ced 100644 --- a/Lib/fontTools/misc/visitor.py +++ b/Lib/fontTools/misc/visitor.py @@ -105,10 +105,10 @@ class TTVisitor(Visitor): @TTVisitor.register(TTFont) def visit(visitor, font): - if hasattr(font, "visited"): + if hasattr(visitor, "font"): return False - font.visited = True + visitor.font = font for tag in font.keys(): visitor.visit(font[tag]) - del font.visited + del visitor.font return False diff --git a/Tests/misc/visitor_test.py b/Tests/misc/visitor_test.py index cf17d40f3..2293cbbf9 100644 --- a/Tests/misc/visitor_test.py +++ b/Tests/misc/visitor_test.py @@ -61,6 +61,25 @@ def visit(visitor, obj, attr, metrics): metrics[g] = visitor.scale(advance), visitor.scale(lsb) +@ScalerVisitor.register_attr(ttLib.getTableClass("glyf"), "glyphs") +def visit(visitor, obj, attr, glyphs): + for g in glyphs.values(): + if g.isComposite(): + for component in g.components: + component.x = visitor.scale(component.x) + component.y = visitor.scale(component.y) + else: + for attr in ("xMin", "xMax", "yMin", "yMax"): + v = getattr(g, attr, None) + if v is not None: + setattr(g, attr, visitor.scale(v)) + + glyf = visitor.font["glyf"] + coordinates = g.getCoordinates(glyf)[0] + for i, (x, y) in enumerate(coordinates): + coordinates[i] = visitor.scale(x), visitor.scale(y) + + # GPOS