#!/usr/bin/env python3 import argparse import sys from os import path try: import fontforge except ImportError: sys.exit( "FontForge module could not be loaded. Try installing fontforge python bindings " "[e.g. on Linux Debian or Ubuntu: `sudo apt install fontforge python-fontforge`]" ) def generate_style(font: fontforge.font, style: str, opts): font.fontname += style font.selection.all() for glyph in font.selection.byGlyphs: if "Bold" in style: glyph.changeWeight(opts.embolden) if 'Italic' in style: glyph.italicize(opts.angle) if __name__ == "__main__": parser = argparse.ArgumentParser( description="Generate Bold/Italic versions for specified font file", ) parser.add_argument('font', help='The path to the font') parser.add_argument( '-b', '--bold', dest="styles", action="append_const", const="Bold", help="generate bold version") parser.add_argument( '-i', '--italic', dest="styles", action="append_const", const="Italic", help="generate italic version") parser.add_argument( '-bi', '--bolditalic', dest="styles", action="append_const", const="BoldItalic", help="generate bold and italic version") parser.add_argument( '-em', '--embolden-em', dest="embolden", type=int, default=5, help="set embolden scale (by em unit)") parser.add_argument( '-ag', '--italic-angle', dest="angle", type=int, default=-13, help="set italic angle") parser.add_argument( '-o', '--out-dir', dest="outdir", default=".", help="set italic angle") args = parser.parse_args() if not args.styles: args.styles = ['Bold', 'Italic', 'BoldItalic'] font = fontforge.open(args.font) for style in args.styles: generate_style(font, style, args) dotindex = args.font.rindex('.') name = args.font[:dotindex] ext = args.font[dotindex:] font.generate(path.join(args.outdir, name + style + ext))