bedstead/strokefont.py
Ben Harris 2c5fc3b5bc Beginnings of a script to stroke fonts.
The plan is that bedstead.c will produce a single-path font and then
this script will stroke it in various ways, adapting the font metadata
appropriately.
2017-08-12 00:04:22 +01:00

58 lines
1.3 KiB
Python

from __future__ import print_function
import fontforge
from math import radians
from psMat import translate
from sys import argv
chisel = fontforge.contour()
chisel.moveTo(-50, 0)
chisel.lineTo(28, 45)
chisel.lineTo(50, 0)
chisel.lineTo(-28, -45)
chisel.closed = True
modes = {
'plotter-thin': {
'nib': ['circular', 10, 'round', 'round'],
'vshift': 5,
'fontname': "BedsteadPlotter-Thin",
},
'plotter-light': {
'nib': ['circular', 50, 'round', 'round'],
'vshift': 25,
'fontname': "BedsteadPlotter-Light",
},
'plotter-medium': {
'nib': ['circular', 100, 'round', 'round'],
'vshift': 50,
'fontname': "BedsteadPlotter-Medium",
},
'plotter-bold': {
'nib': ['circular', 150, 'round', 'round'],
'vshift': 75,
'fontname': "BedsteadPlotter-Bold",
},
'chiseltip': {
'nib': ['polygonal', chisel],
'vshift': 45,
'fontname': "BedsteadChiseltip",
},
}
mode = modes[argv[1]]
f = fontforge.open(argv[2])
f.strokedfont = False
for g in f.glyphs():
g.stroke(*mode['nib'])
g.removeOverlap()
g.addExtrema()
g.transform(translate(0, mode['vshift']))
f.fontname = mode['fontname']
f.save(argv[3])