Skip to content

Instantly share code, notes, and snippets.

@simoncozens
Created May 31, 2022 14:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save simoncozens/61f86db236100417501a0eb418b4472b to your computer and use it in GitHub Desktop.
Save simoncozens/61f86db236100417501a0eb418b4472b to your computer and use it in GitHub Desktop.
from ninja_syntax import Writer
import glyphsLib
import argparse
import ufoLib2
import os
from fontTools import designspaceLib
parser = argparse.ArgumentParser(description='Create a ninja file to build a font')
parser.add_argument('input', metavar='INPUT')
args = parser.parse_args()
w = Writer(open("build.ninja", "w"))
w.rule("glyphs2ufo", "fontmake -o ufo -g $in")
w.rule("instanceufo", "fontmake -i -o ufo -m $in")
w.rule("instancettf", "fontmake -o ttf -u $in --output-path $out")
w.rule("instanceotf", "fontmake -o otf -u $in --output-path $out")
if args.input.endswith(".glyphs"):
# Do the conversion once, so we know what the instances and filenames are
designspace = glyphsLib.to_designspace(
glyphsLib.GSFont(args.input),
ufo_module=ufoLib2,
generate_GDEF=True,
store_editor_state=False,
minimal=True,
)
designspace_path = os.path.join("master_ufo", designspace.filename)
designspace.write(designspace_path)
w.build(designspace_path, "glyphs2ufo", args.input)
else:
designspace_path = args.input
designspace = DesignSpaceDocument.fromfile(designspace_path)
# Build all instance UFOs
instance_ufos = [x.filename.replace("instance_ufos", "instance_ufo") for x in designspace.instances]
w.build(instance_ufos, "instanceufo", designspace_path)
for ufo in instance_ufos:
otf = ufo.replace("instance_ufo", "instance_otf").replace(".ufo", ".otf")
ttf = ufo.replace("instance_ufo", "instance_ttf").replace(".ufo", ".ttf")
w.build(ttf, "instancettf", ufo)
w.build(otf, "instanceotf", ufo)
w.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment