[visitor] Split TTVisitor into its own module

This commit is contained in:
Behdad Esfahbod 2022-08-15 13:01:46 -06:00
parent 61d651e387
commit f582469cb8
3 changed files with 25 additions and 20 deletions

View File

@ -1,4 +1,5 @@
from fontTools.ttLib import TTFont
"""Generic visitor pattern implementation for Python objects."""
import enum
@ -94,21 +95,3 @@ class Visitor(object):
self.visitObject(obj, *args, **kwargs)
elif isinstance(obj, list):
self.visitList(obj, *args, **kwargs)
class TTVisitor(Visitor):
def visit(self, obj, *args, **kwargs):
if hasattr(obj, "ensureDecompiled"):
obj.ensureDecompiled(recurse=False)
super().visit(obj, *args, **kwargs)
@TTVisitor.register(TTFont)
def visit(visitor, font):
if hasattr(visitor, "font"):
return False
visitor.font = font
for tag in font.keys():
visitor.visit(font[tag])
del visitor.font
return False

View File

@ -0,0 +1,22 @@
"""Specialization of fontTools.misc.visitor to work with TTFont."""
from fontTools.misc.visitor import Visitor
from fontTools.ttLib import TTFont
class TTVisitor(Visitor):
def visit(self, obj, *args, **kwargs):
if hasattr(obj, "ensureDecompiled"):
obj.ensureDecompiled(recurse=False)
super().visit(obj, *args, **kwargs)
@TTVisitor.register(TTFont)
def visit(visitor, font):
if hasattr(visitor, "font"):
return False
visitor.font = font
for tag in font.keys():
visitor.visit(font[tag])
del visitor.font
return False

View File

@ -1,4 +1,4 @@
from fontTools.misc.visitor import TTVisitor
from fontTools.ttLib.ttVisitor import TTVisitor
import fontTools.ttLib as ttLib
import fontTools.ttLib.tables.otBase as otBase
import fontTools.ttLib.tables.otTables as otTables