def main(): parser = argparse.ArgumentParser(description="Build Mada slanted fonts.") parser.add_argument("file", metavar="FILE", help="input font to process") parser.add_argument("outfile", metavar="FILE", help="output font to write") parser.add_argument("angle", metavar="FILE", help="slant angle", type=float) args = parser.parse_args() matrix = Identity.skew(math.radians(-args.angle)) font = Font(args.file) info = font.info if args.angle < 0: style = "Italic" else: style = "Slanted" info.styleName += " " + style info.italicAngle = info.postscriptSlantAngle = args.angle for glyph in font: for contour in glyph: for point in contour: point.x, point.y = matrix.transformPoint((point.x, point.y)) for anchor in glyph.anchors: anchor.x, anchor.y = matrix.transformPoint((anchor.x, anchor.y)) font.save(args.outfile)
def main(): parser = argparse.ArgumentParser(description="Build Mada slanted fonts.") parser.add_argument("file", metavar="FILE", help="input font to process") parser.add_argument("outfile", metavar="FILE", help="output font to write") parser.add_argument("angle", metavar="FILE", help="slant angle", type=float) args = parser.parse_args() matrix = Identity.skew(math.radians(-args.angle)) font = Font(args.file) info = font.info if args.angle < 0: style = "Italic" else: style = "Slanted" info.styleName += " " + style info.openTypeNamePreferredSubfamilyName += " " + style info.postscriptFullName += " " + style info.postscriptFontName += style info.italicAngle = info.postscriptSlantAngle = args.angle for glyph in font: for contour in glyph: for point in contour: point.x, point.y = matrix.transformPoint((point.x, point.y)) for anchor in glyph.anchors: anchor.x, anchor.y = matrix.transformPoint((anchor.x, anchor.y)) font.save(args.outfile)
def main(args=None): parser = argparse.ArgumentParser( description="Transform X anchor positions in VOLT/VTP files.") parser.add_argument("input", metavar="INPUT", help="input font/VTP file to process") parser.add_argument("output", metavar="OUTPUT", help="output font/VTP file") parser.add_argument("-a", "--angle", type=float, required=True, help="the slant angle (in degrees)") options = parser.parse_args(args) font = None try: font = TTFont(options.input) if "TSIV" in font: indata = font["TSIV"].data.decode("utf-8") else: log.error('"TSIV" table is missing, font was not saved from VOLT?') return 1 except TTLibError: with open(options.input) as f: indata = f.read() transform = Identity.skew(options.angle * math.pi / 180) outdata = anchor_re.sub(lambda m: replace(m, transform), indata) if font is not None: font["TSIV"].data = outdata.encode("utf-8") font.save(options.output) else: with open(options.output, "w") as f: f.write(outdata)