diff options
Diffstat (limited to 'misc/tools/gen-tnum.py')
-rwxr-xr-x | misc/tools/gen-tnum.py | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/misc/tools/gen-tnum.py b/misc/tools/gen-tnum.py new file mode 100755 index 000000000..015201bcc --- /dev/null +++ b/misc/tools/gen-tnum.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python +# encoding: utf8 +from __future__ import print_function +import os, sys +from argparse import ArgumentParser +from robofab.objects.objectsRF import OpenFont +from math import ceil, floor + +dryRun = False +numNames = [ + 'zero','one','two','three','four','five','six','seven','eight','nine' +] + + +def main(): + argparser = ArgumentParser( + description='Generate tabular number glyphs from regular number glyphs') + + argparser.add_argument( + '-dry', dest='dryRun', action='store_const', const=True, default=False, + help='Do not modify anything, but instead just print what would happen.') + + argparser.add_argument( + 'fontPaths', metavar='<ufofile>', type=str, nargs='+', help='UFO fonts') + + args = argparser.parse_args() + dryRun = args.dryRun + + # Strip trailing slashes from font paths and iterate + for fontPath in [s.rstrip('/ ') for s in args.fontPaths]: + fontName = os.path.basename(fontPath) + font = OpenFont(fontPath) + + # Find widest glyph + width = 0 + for name in numNames: + g = font[name] + width = max(width, g.width) + + print('[%s] tnums width:' % fontName, width) + + # Create tnum glyphs + for name in numNames: + g = font[name] + + tnum = font.newGlyph(name + '.tnum') + tnum.width = width + + # calculate component x-offset + xoffs = 0 + if g.width != width: + print('[%s] gen (adjust width)' % fontName, tnum.name) + # center shape, ignoring existing margins + # xMin, yMin, xMax, yMax = g.box + # graphicWidth = xMax - xMin + # leftMargin = round((width - graphicWidth) / 2) + # xoffs = leftMargin - g.leftMargin + + # adjust margins + widthDelta = width - g.width + leftMargin = g.leftMargin + int(floor(widthDelta / 2)) + rightMargin = g.rightMargin + int(ceil(widthDelta / 2)) + xoffs = leftMargin - g.leftMargin + else: + print('[%s] gen (same width)' % fontName, tnum.name) + + tnum.appendComponent(name, (xoffs, 0)) + + if dryRun: + print('[%s] save [dry run]' % fontName) + else: + print('[%s] save' % fontName) + font.save() + + +if __name__ == '__main__': + main() |