Spaces:
Paused
Paused
| """Specialization of fontTools.misc.visitor to work with TTFont.""" | |
| from fontTools.misc.visitor import Visitor | |
| from fontTools.ttLib import TTFont | |
| class TTVisitor(Visitor): | |
| def visitAttr(self, obj, attr, value, *args, **kwargs): | |
| if isinstance(value, TTFont): | |
| return False | |
| super().visitAttr(obj, attr, value, *args, **kwargs) | |
| def visit(self, obj, *args, **kwargs): | |
| if hasattr(obj, "ensureDecompiled"): | |
| obj.ensureDecompiled(recurse=False) | |
| super().visit(obj, *args, **kwargs) | |
| def visit(visitor, font, *args, **kwargs): | |
| # Some objects have links back to TTFont; even though we | |
| # have a check in visitAttr to stop them from recursing | |
| # onto TTFont, sometimes they still do, for example when | |
| # someone overrides visitAttr. | |
| if hasattr(visitor, "font"): | |
| return False | |
| visitor.font = font | |
| for tag in font.keys(): | |
| visitor.visit(font[tag], *args, **kwargs) | |
| del visitor.font | |
| return False | |