summaryrefslogtreecommitdiff
path: root/misc/tools/postprocess_instance_ufo.py
blob: 8b5b60970e34487e65abf6273280ebab53b1b658 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import sys
import defcon

def ufo_set_wws(ufo):
  # Fix missing WWS entries for Display fonts:
  # See https://github.com/googlefonts/glyphsLib/issues/820
  subfamily = ufo.info.styleName
  if subfamily.find("Display") == -1:
    return
  subfamily = subfamily[len("Display"):].strip()
  if subfamily == "":
    # "Display" -> "Regular"
    subfamily = "Regular"
  ufo.info.openTypeNameWWSFamilyName = "Inter Display"
  ufo.info.openTypeNameWWSSubfamilyName = subfamily


# See https://github.com/rsms/inter/issues/508
# TODO: Remove when https://github.com/googlefonts/glyphsLib/issues/821 is fixed
def fix_fractional_advance_width(ufo):
  for g in ufo:
    w = int(round(g.width))
    if str(g.width) != str(w):
      # set twice to work around bug or weird behavior in defcon.
      # If we don't do this, then fractional widths with .0 fraction are
      # not updated to integer values.
      g.width = w + 1
      g.width = w


def main(argv):
  ufo_file = argv[1]

  # TODO: Uncomment when https://github.com/googlefonts/glyphsLib/issues/821 is fixed
  # if ufo_file.find("Display") == -1:
  #   return  # skip fonts of "default" family

  ufo = defcon.Font(ufo_file)

  if ufo_file.find("Display") != -1:
    ufo_set_wws(ufo)

  fix_fractional_advance_width(ufo)

  ufo.save(ufo_file)


if __name__ == '__main__':
  main(sys.argv)