Coverage for /usr/lib/python3/dist-packages/fontTools/ttLib/ttVisitor.py: 35%

20 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2025-06-14 15:55 +0200

1"""Specialization of fontTools.misc.visitor to work with TTFont.""" 

2 

3from fontTools.misc.visitor import Visitor 

4from fontTools.ttLib import TTFont 

5 

6 

7class TTVisitor(Visitor): 

8 def visitAttr(self, obj, attr, value, *args, **kwargs): 

9 if isinstance(value, TTFont): 

10 return False 

11 super().visitAttr(obj, attr, value, *args, **kwargs) 

12 

13 def visit(self, obj, *args, **kwargs): 

14 if hasattr(obj, "ensureDecompiled"): 

15 obj.ensureDecompiled(recurse=False) 

16 super().visit(obj, *args, **kwargs) 

17 

18 

19@TTVisitor.register(TTFont) 

20def visit(visitor, font, *args, **kwargs): 

21 # Some objects have links back to TTFont; even though we 

22 # have a check in visitAttr to stop them from recursing 

23 # onto TTFont, sometimes they still do, for example when 

24 # someone overrides visitAttr. 

25 if hasattr(visitor, "font"): 

26 return False 

27 

28 visitor.font = font 

29 for tag in font.keys(): 

30 visitor.visit(font[tag], *args, **kwargs) 

31 del visitor.font 

32 return False