diff options
Diffstat (limited to 'Snippets/otf2ttf.py')
-rwxr-xr-x | Snippets/otf2ttf.py | 54 |
1 files changed, 41 insertions, 13 deletions
diff --git a/Snippets/otf2ttf.py b/Snippets/otf2ttf.py index 60acd546..62b4f735 100755 --- a/Snippets/otf2ttf.py +++ b/Snippets/otf2ttf.py @@ -1,13 +1,20 @@ #!/usr/bin/env python from __future__ import print_function, division, absolute_import + +import argparse +import logging +import os import sys -from fontTools.ttLib import TTFont, newTable + from cu2qu.pens import Cu2QuPen +from fontTools import configLogger +from fontTools.misc.cliTools import makeOutputFileName from fontTools.pens.ttGlyphPen import TTGlyphPen -from fontTools.ttx import makeOutputFileName -import argparse +from fontTools.ttLib import TTFont, newTable +log = logging.getLogger() + # default approximation error, measured in UPEM MAX_ERR = 1.0 @@ -43,6 +50,7 @@ def otf_to_ttf(ttFont, post_format=POST_FORMAT, **kwargs): glyf.glyphOrder = glyphOrder glyf.glyphs = glyphs_to_quadratic(ttFont.getGlyphSet(), **kwargs) del ttFont["CFF "] + glyf.compile(ttFont) ttFont["maxp"] = maxp = newTable("maxp") maxp.tableVersion = 0x00010000 @@ -56,35 +64,55 @@ def otf_to_ttf(ttFont, post_format=POST_FORMAT, **kwargs): maxp.maxComponentElements = max( len(g.components if hasattr(g, 'components') else []) for g in glyf.glyphs.values()) + maxp.compile(ttFont) post = ttFont["post"] post.formatType = post_format post.extraNames = [] post.mapping = {} post.glyphOrder = glyphOrder + try: + post.compile(ttFont) + except OverflowError: + post.formatType = 3 + log.warning("Dropping glyph names, they do not fit in 'post' table.") ttFont.sfntVersion = "\000\001\000\000" def main(args=None): + configLogger(logger=log) + parser = argparse.ArgumentParser() - parser.add_argument("input", metavar="INPUT") + parser.add_argument("input", nargs='+', metavar="INPUT") parser.add_argument("-o", "--output") parser.add_argument("-e", "--max-error", type=float, default=MAX_ERR) parser.add_argument("--post-format", type=float, default=POST_FORMAT) parser.add_argument( "--keep-direction", dest='reverse_direction', action='store_false') + parser.add_argument("--face-index", type=int, default=0) + parser.add_argument("--overwrite", action='store_true') options = parser.parse_args(args) - output = options.output or makeOutputFileName(options.input, - outputDir=None, - extension='.ttf') - font = TTFont(options.input) - otf_to_ttf(font, - post_format=options.post_format, - max_err=options.max_error, - reverse_direction=options.reverse_direction) - font.save(output) + if options.output and len(options.input) > 1: + if not os.path.isdir(options.output): + parser.error("-o/--output option must be a directory when " + "processing multiple fonts") + + for path in options.input: + if options.output and not os.path.isdir(options.output): + output = options.output + else: + output = makeOutputFileName(path, outputDir=options.output, + extension='.ttf', + overWrite=options.overwrite) + + font = TTFont(path, fontNumber=options.face_index) + otf_to_ttf(font, + post_format=options.post_format, + max_err=options.max_error, + reverse_direction=options.reverse_direction) + font.save(output) if __name__ == "__main__": |