[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 import enum
@ -94,21 +95,3 @@ class Visitor(object):
self.visitObject(obj, *args, **kwargs) self.visitObject(obj, *args, **kwargs)
elif isinstance(obj, list): elif isinstance(obj, list):
self.visitList(obj, *args, **kwargs) 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 as ttLib
import fontTools.ttLib.tables.otBase as otBase import fontTools.ttLib.tables.otBase as otBase
import fontTools.ttLib.tables.otTables as otTables import fontTools.ttLib.tables.otTables as otTables