Error loading fonts with incomplete GDEF
Closed this issue · 0 comments
yanone commented
I'm not preparing a PR here because creating a branch of my babelfont fork includes my previous unmerged PR, and I'm not so good with Github to be able to easily separate that.
Fraunces (ofl/fraunces/Fraunces[SOFT,WONK,opsz,wght].ttf), among others, has this issue:
In [3]: font = babelfont.load("ofl/fraunces/Fraunces[SOFT,WONK,opsz,wght].ttf")
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[3], line 1
----> 1 font = babelfont.load("ofl/fraunces/Fraunces[SOFT,WONK,opsz,wght].ttf")
File ~/.pyenv/versions/3.11.1/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/babelfont/__init__.py:17, in load(filename)
16 def load(filename):
---> 17 return Convert(filename).load()
File ~/.pyenv/versions/3.11.1/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/babelfont/convertors/__init__.py:70, in Convert.load(self, **kwargs)
68 for c in self.convertors:
69 if c.can_load(self, **kwargs):
---> 70 return c.load(self, **kwargs)
71 raise NotImplementedError
File ~/.pyenv/versions/3.11.1/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/babelfont/convertors/__init__.py:26, in BaseConvertor.load(cls, convertor)
24 self.filename = convertor.filename
25 self.scratch = convertor.scratch
---> 26 return self._load()
File ~/.pyenv/versions/3.11.1/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/babelfont/convertors/truetype.py:43, in TrueType._load(self)
41 self._load_masters()
42 self._load_names()
---> 43 self._load_glyphs()
44 return self.font
File ~/.pyenv/versions/3.11.1/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/babelfont/convertors/truetype.py:110, in TrueType._load_glyphs(self)
108 glyphs_dict = {}
109 for glyph in self.tt.getGlyphOrder():
--> 110 category = _categorize_glyph(self.tt, glyph) or "base"
111 glyphs_dict[glyph] = Glyph(name=glyph, codepoints=list(mapping.get(glyph, [])), category=category)
112 self.font.glyphs.append(glyphs_dict[glyph])
File ~/.pyenv/versions/3.11.1/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/babelfont/convertors/truetype.py:20, in _categorize_glyph(font, glyphname)
18 def _categorize_glyph(font,glyphname):
19 if "GDEF" not in font: return None
---> 20 classdefs = font["GDEF"].table.GlyphClassDef.classDefs
21 if glyphname not in classdefs:
22 return None
AttributeError: 'NoneType' object has no attribute 'classDefs'