From 3307c5d62a35afeea560cf0b587017f9f72fcdf5 Mon Sep 17 00:00:00 2001 From: James Godfrey-Kittle Date: Tue, 10 May 2016 18:01:34 -0700 Subject: [PATCH] Add reverse_direction argument As described in https://github.com/googlei18n/cu2qu/pull/20#issuecomment-213058410 --- Lib/cu2qu/ufo.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/Lib/cu2qu/ufo.py b/Lib/cu2qu/ufo.py index d8f5973..a671db8 100644 --- a/Lib/cu2qu/ufo.py +++ b/Lib/cu2qu/ufo.py @@ -27,7 +27,9 @@ from __future__ import print_function, division, absolute_import from fontTools.pens.basePen import AbstractPen + from cu2qu import curve_to_quadratic, curves_to_quadratic +from cu2qu.pens import ReverseContourPen __all__ = ['fonts_to_quadratic', 'font_to_quadratic'] @@ -97,11 +99,13 @@ def _get_segments(glyph): return pen.segments -def _set_segments(glyph, segments): +def _set_segments(glyph, segments, reverse_direction): """Draw segments as extracted by GetSegmentsPen back to a glyph.""" glyph.clearContours() pen = glyph.getPen() + if reverse_direction: + pen = ReverseContourPen(pen) for tag, args in segments: if tag == 'move': pen.moveTo(*args) @@ -133,7 +137,7 @@ def _segments_to_quadratic(segments, max_err, stats): return [('qcurve', p) for p in new_points] -def _fonts_to_quadratic(fonts, max_err, stats): +def _fonts_to_quadratic(fonts, max_err, reverse_direction, stats): """Do the actual conversion of fonts, after arguments have been set up.""" for glyphs in zip(*fonts): @@ -155,10 +159,11 @@ def _fonts_to_quadratic(fonts, max_err, stats): new_segments_by_glyph = zip(*new_segments_by_location) for glyph, new_segments in zip(glyphs, new_segments_by_glyph): - _set_segments(glyph, new_segments) + _set_segments(glyph, new_segments, reverse_direction) -def fonts_to_quadratic(fonts, max_err_em=None, max_err=None, +def fonts_to_quadratic( + fonts, max_err_em=None, max_err=None, reverse_direction=False, stats=None, dump_stats=False): """Convert the curves of a collection of fonts to quadratic. @@ -187,7 +192,7 @@ def fonts_to_quadratic(fonts, max_err_em=None, max_err=None, num_fonts = len(fonts) assert len(max_errors) == num_fonts - _fonts_to_quadratic(fonts, max_errors, stats) + _fonts_to_quadratic(fonts, max_errors, reverse_direction, stats) if dump_stats: spline_lengths = sorted(stats.keys())