generateGlyph.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from anchors import alignComponentsToAnchors
  2. def parseComposite(composite):
  3. c = composite.split("=")
  4. d = c[1].split("/")
  5. glyphName = d[0]
  6. if len(d) == 1:
  7. offset = [0,0]
  8. else:
  9. offset = [int(i) for i in d[1].split(",")]
  10. accentString = c[0]
  11. accents = accentString.split("+")
  12. baseName = accents.pop(0)
  13. accentNames = [i.split(":") for i in accents ]
  14. return (glyphName, baseName, accentNames, offset)
  15. def generateGlyph(f,gname):
  16. glyphName, baseName, accentNames, offset = parseComposite(gname)
  17. if baseName.find("_") != -1:
  18. g = f.newGlyph(glyphName)
  19. lastWidth = 0
  20. for componentName in baseName.split("_"):
  21. g.appendComponent(componentName, (lastWidth, 0))
  22. lastWidth = f[componentName].width
  23. g.width += lastWidth
  24. else:
  25. if not f.has_key(glyphName):
  26. try:
  27. f.compileGlyph(glyphName, baseName, accentNames)
  28. except KeyError as e:
  29. print ("KeyError raised for composition rule '%s', likely %s "
  30. "anchor not found in glyph '%s'" % (gname, e, baseName))
  31. return
  32. g = f[glyphName]
  33. if len(accentNames) > 0:
  34. alignComponentsToAnchors(f, glyphName, baseName, accentNames)
  35. if offset[0] != 0 or offset[1] != 0:
  36. g.width += offset[1] + offset[0]
  37. g.move((offset[0], 0))
  38. else:
  39. print ("Existing glyph '%s' found in font, ignoring composition "
  40. "rule '%s'" % (glyphName, gname))