1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import sys
- import shutil
- import os
- from fontTools.ttLib import TTFont
- from fontTools.varLib.instancer import instantiateVariableFont
- from scripts import (
- update_names,
- update_attribs,
- mkdir
- )
- roman_instance = {
- "attribs": {"usWidthClass": 5},
- "axes": {"wdth": 75},
- "filename": "RobotoCondensed[wght].ttf",
- "names": {
- "1,3,1,1033": "Roboto Condensed",
- "2,3,1,1033": "Regular",
- "3,3,1,1033": "Google:Roboto Condensed Regular:2016",
- "4,3,1,1033": "Roboto Condensed Regular",
- "6,3,1,1033": "RobotoCondensed-Regular",
- "25,3,1,1033": "RobotoCondensed"
- },
- }
- italic_instance = {
- "attribs": {"usWidthClass": 5, "italicAngle": -12, "caretSlopeRise": 2048, "caretSlopeRun": 435},
- "axes": {"wdth": 75},
- "filename": "RobotoCondensed-Italic[wght].ttf",
- "names": {
- "1,3,1,1033": "Roboto Condensed",
- "2,3,1,1033": "Italic",
- "3,3,1,1033": "Google:Roboto Condensed Italic:2016",
- "4,3,1,1033": "Roboto Condensed Italic",
- "6,3,1,1033": "RobotoCondensed-Italic",
- "25,3,1,1033": "RobotoCondensed"
- },
- }
- def update_fvar_instances(ttfont):
- name = ttfont["name"]
- instances = ttfont['fvar'].instances
- for instance in instances:
- subfamily_id = instance.subfamilyNameID
- post_id = instance.postscriptNameID
- for record in name.names:
- if record.nameID in [subfamily_id]:
- current_name = record.toUnicode()
- new_name = current_name.replace("Condensed", "").strip()
- name.setName(new_name, record.nameID, record.platformID, record.platEncID, record.langID)
- if record.nameID in [post_id]:
- current_name = record.toUnicode()
- new_name = current_name.replace("-Condensed", "Condensed-").strip()
- name.setName(new_name, record.nameID, record.platformID, record.platEncID, record.langID)
- string = record.toUnicode()
- name.setName(string.replace("Roboto-Condensed", "RobotoCondensed-"), record.nameID, record.platformID, record.platEncID, record.langID)
- def update_stat(ttfont):
- # Elide Condensed STAT AvisValue
- stat = ttfont["STAT"].table
- name_table = ttfont["name"]
- axis_values = [a for a in stat.AxisValueArray.AxisValue]
- for av in axis_values:
- name_id = av.ValueNameID
- name = name_table.getName(name_id, 3, 1, 0x409).toUnicode()
- if name == "Condensed":
- av.Flags = 2
- vf_roman = TTFont(sys.argv[1])
- vf_italic = TTFont(sys.argv[2])
- out_dir = mkdir(sys.argv[3])
- for inst, vf in zip([roman_instance, italic_instance], [vf_roman, vf_italic]):
- print(f"Making {inst['filename']}")
- instance = instantiateVariableFont(vf, inst["axes"])
- update_attribs(instance, **inst["attribs"])
- update_names(instance, rm_private=False, **inst["names"])
- update_fvar_instances(instance)
- update_stat(instance)
- out_path = os.path.join(sys.argv[3], inst["filename"])
- instance.save(out_path)
|