From be7df107e2b8fc9b4d5b97d5b37b674a67f6853e Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Mon, 15 Aug 2022 12:47:17 -0600 Subject: [PATCH] [visitor_test] Implement glyf table visiting --- Lib/fontTools/misc/visitor.py | 6 +++--- Tests/misc/visitor_test.py | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) 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