instantiate_condensed.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import sys
  2. import shutil
  3. import os
  4. from fontTools.ttLib import TTFont
  5. from fontTools.varLib.instancer import instantiateVariableFont
  6. from scripts import (
  7. update_names,
  8. update_attribs,
  9. mkdir
  10. )
  11. roman_instance = {
  12. "attribs": {"usWidthClass": 5},
  13. "axes": {"wdth": 75},
  14. "filename": "RobotoCondensed[wght].ttf",
  15. "names": {
  16. "1,3,1,1033": "Roboto Condensed",
  17. "2,3,1,1033": "Regular",
  18. "3,3,1,1033": "Google:Roboto Condensed Regular:2016",
  19. "4,3,1,1033": "Roboto Condensed Regular",
  20. "6,3,1,1033": "RobotoCondensed-Regular",
  21. },
  22. }
  23. italic_instance = {
  24. "attribs": {"usWidthClass": 5},
  25. "axes": {"wdth": 75},
  26. "filename": "RobotoCondensed-Italic[wght].ttf",
  27. "names": {
  28. "1,3,1,1033": "Roboto Condensed",
  29. "2,3,1,1033": "Italic",
  30. "3,3,1,1033": "Google:Roboto Condensed Italic:2016",
  31. "4,3,1,1033": "Roboto Condensed Italic",
  32. "6,3,1,1033": "RobotoCondensed-Italic",
  33. "25,3,1,1033": "RobotoCondensed"
  34. },
  35. }
  36. def update_fvar_instances(ttfont):
  37. name = ttfont["name"]
  38. instances = ttfont['fvar'].instances
  39. for instance in instances:
  40. subfamily_id = instance.subfamilyNameID
  41. post_id = instance.postscriptNameID
  42. for record in name.names:
  43. if record.nameID in [subfamily_id, post_id]:
  44. current_name = record.toUnicode()
  45. new_name = current_name.replace("Condensed", "").strip()
  46. name.setName(new_name, record.nameID, record.platformID, record.platEncID, record.langID)
  47. string = record.toUnicode()
  48. name.setName(string.replace("Roboto-Condensed", "RobotoCondensed-"), record.nameID, record.platformID, record.platEncID, record.langID)
  49. vf_roman = TTFont(sys.argv[1])
  50. vf_italic = TTFont(sys.argv[2])
  51. out_dir = mkdir(sys.argv[3])
  52. for inst, vf in zip([roman_instance, italic_instance], [vf_roman, vf_italic]):
  53. print(f"Making {inst['filename']}")
  54. instance = instantiateVariableFont(vf, inst["axes"])
  55. # update_attribs(instance, **inst["attribs"])
  56. update_names(instance, rm_private=False, **inst["names"])
  57. update_fvar_instances(instance)
  58. out_path = os.path.join(sys.argv[3], inst["filename"])
  59. instance.save(out_path)