diff options
Diffstat (limited to 'Lib/fontTools/pens')
23 files changed, 47 insertions, 71 deletions
diff --git a/Lib/fontTools/pens/__init__.py b/Lib/fontTools/pens/__init__.py index b1760311..156cb232 100644 --- a/Lib/fontTools/pens/__init__.py +++ b/Lib/fontTools/pens/__init__.py @@ -1,3 +1 @@ """Empty __init__.py file to signal Python this directory is a package.""" - -from fontTools.misc.py23 import * diff --git a/Lib/fontTools/pens/areaPen.py b/Lib/fontTools/pens/areaPen.py index c9301542..403afe7b 100644 --- a/Lib/fontTools/pens/areaPen.py +++ b/Lib/fontTools/pens/areaPen.py @@ -1,6 +1,5 @@ """Calculate the area of a glyph.""" -from fontTools.misc.py23 import * from fontTools.pens.basePen import BasePen diff --git a/Lib/fontTools/pens/basePen.py b/Lib/fontTools/pens/basePen.py index c8c4c551..2161e021 100644 --- a/Lib/fontTools/pens/basePen.py +++ b/Lib/fontTools/pens/basePen.py @@ -36,26 +36,27 @@ Coordinates are usually expressed as (x, y) tuples, but generally any sequence of length 2 will do. """ -from fontTools.misc.py23 import * +from typing import Tuple + from fontTools.misc.loggingTools import LogMixin __all__ = ["AbstractPen", "NullPen", "BasePen", "decomposeSuperBezierSegment", "decomposeQuadraticSegment"] -class AbstractPen(object): +class AbstractPen: - def moveTo(self, pt): + def moveTo(self, pt: Tuple[float, float]) -> None: """Begin a new sub path, set the current point to 'pt'. You must end each sub path with a call to pen.closePath() or pen.endPath(). """ raise NotImplementedError - def lineTo(self, pt): + def lineTo(self, pt: Tuple[float, float]) -> None: """Draw a straight line from the current point to 'pt'.""" raise NotImplementedError - def curveTo(self, *points): + def curveTo(self, *points: Tuple[float, float]) -> None: """Draw a cubic bezier with an arbitrary number of control points. The last point specified is on-curve, all others are off-curve @@ -76,7 +77,7 @@ class AbstractPen(object): """ raise NotImplementedError - def qCurveTo(self, *points): + def qCurveTo(self, *points: Tuple[float, float]) -> None: """Draw a whole string of quadratic curve segments. The last point specified is on-curve, all others are off-curve @@ -93,19 +94,23 @@ class AbstractPen(object): """ raise NotImplementedError - def closePath(self): + def closePath(self) -> None: """Close the current sub path. You must call either pen.closePath() or pen.endPath() after each sub path. """ pass - def endPath(self): + def endPath(self) -> None: """End the current sub path, but don't close it. You must call either pen.closePath() or pen.endPath() after each sub path. """ pass - def addComponent(self, glyphName, transformation): + def addComponent( + self, + glyphName: str, + transformation: Tuple[float, float, float, float, float, float] + ) -> None: """Add a sub glyph. The 'transformation' argument must be a 6-tuple containing an affine transformation, or a Transform object from the fontTools.misc.transform module. More precisely: it should be a @@ -114,7 +119,7 @@ class AbstractPen(object): raise NotImplementedError -class NullPen(object): +class NullPen(AbstractPen): """A pen that does nothing. """ diff --git a/Lib/fontTools/pens/boundsPen.py b/Lib/fontTools/pens/boundsPen.py index c76efdfb..810715ca 100644 --- a/Lib/fontTools/pens/boundsPen.py +++ b/Lib/fontTools/pens/boundsPen.py @@ -1,4 +1,3 @@ -from fontTools.misc.py23 import * from fontTools.misc.arrayTools import updateBounds, pointInRect, unionRect from fontTools.misc.bezierTools import calcCubicBounds, calcQuadraticBounds from fontTools.pens.basePen import BasePen diff --git a/Lib/fontTools/pens/cocoaPen.py b/Lib/fontTools/pens/cocoaPen.py index 9ca6f3bb..67482b4d 100644 --- a/Lib/fontTools/pens/cocoaPen.py +++ b/Lib/fontTools/pens/cocoaPen.py @@ -1,4 +1,3 @@ -from fontTools.misc.py23 import * from fontTools.pens.basePen import BasePen diff --git a/Lib/fontTools/pens/filterPen.py b/Lib/fontTools/pens/filterPen.py index 7539efb5..4355ba41 100644 --- a/Lib/fontTools/pens/filterPen.py +++ b/Lib/fontTools/pens/filterPen.py @@ -1,4 +1,3 @@ -from fontTools.misc.py23 import * from fontTools.pens.basePen import AbstractPen from fontTools.pens.pointPen import AbstractPointPen from fontTools.pens.recordingPen import RecordingPen diff --git a/Lib/fontTools/pens/momentsPen.py b/Lib/fontTools/pens/momentsPen.py index 694d6b02..8c90f70a 100644 --- a/Lib/fontTools/pens/momentsPen.py +++ b/Lib/fontTools/pens/momentsPen.py @@ -1,6 +1,5 @@ """Pen calculating 0th, 1st, and 2nd moments of area of glyph shapes. This is low-level, autogenerated pen. Use statisticsPen instead.""" -from fontTools.misc.py23 import * from fontTools.pens.basePen import BasePen diff --git a/Lib/fontTools/pens/perimeterPen.py b/Lib/fontTools/pens/perimeterPen.py index 36c7edb4..9a09cb8f 100644 --- a/Lib/fontTools/pens/perimeterPen.py +++ b/Lib/fontTools/pens/perimeterPen.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- """Calculate the perimeter of a glyph.""" -from fontTools.misc.py23 import * from fontTools.pens.basePen import BasePen from fontTools.misc.bezierTools import approximateQuadraticArcLengthC, calcQuadraticArcLengthC, approximateCubicArcLengthC, calcCubicArcLengthC import math diff --git a/Lib/fontTools/pens/pointInsidePen.py b/Lib/fontTools/pens/pointInsidePen.py index 8de077c9..34597f40 100644 --- a/Lib/fontTools/pens/pointInsidePen.py +++ b/Lib/fontTools/pens/pointInsidePen.py @@ -2,7 +2,6 @@ for shapes. """ -from fontTools.misc.py23 import * from fontTools.pens.basePen import BasePen from fontTools.misc.bezierTools import solveQuadratic, solveCubic diff --git a/Lib/fontTools/pens/pointPen.py b/Lib/fontTools/pens/pointPen.py index 55832181..26f99d41 100644 --- a/Lib/fontTools/pens/pointPen.py +++ b/Lib/fontTools/pens/pointPen.py @@ -11,8 +11,11 @@ steps through all the points in a call from glyph.drawPoints(). This allows the caller to provide more data for each point. For instance, whether or not a point is smooth, and its name. """ -from fontTools.pens.basePen import AbstractPen + import math +from typing import Any, Optional, Tuple + +from fontTools.pens.basePen import AbstractPen __all__ = [ "AbstractPointPen", @@ -24,26 +27,36 @@ __all__ = [ ] -class AbstractPointPen(object): - """ - Baseclass for all PointPens. - """ +class AbstractPointPen: + """Baseclass for all PointPens.""" - def beginPath(self, identifier=None, **kwargs): + def beginPath(self, identifier: Optional[str] = None, **kwargs: Any) -> None: """Start a new sub path.""" raise NotImplementedError - def endPath(self): + def endPath(self) -> None: """End the current sub path.""" raise NotImplementedError - def addPoint(self, pt, segmentType=None, smooth=False, name=None, - identifier=None, **kwargs): + def addPoint( + self, + pt: Tuple[float, float], + segmentType: Optional[str] = None, + smooth: bool = False, + name: Optional[str] = None, + identifier: Optional[str] = None, + **kwargs: Any + ) -> None: """Add a point to the current sub path.""" raise NotImplementedError - def addComponent(self, baseGlyphName, transformation, identifier=None, - **kwargs): + def addComponent( + self, + baseGlyphName: str, + transformation: Tuple[float, float, float, float, float, float], + identifier: Optional[str] = None, + **kwargs: Any + ) -> None: """Add a sub glyph.""" raise NotImplementedError diff --git a/Lib/fontTools/pens/qtPen.py b/Lib/fontTools/pens/qtPen.py index 20d7e23a..34736453 100644 --- a/Lib/fontTools/pens/qtPen.py +++ b/Lib/fontTools/pens/qtPen.py @@ -1,4 +1,3 @@ -from fontTools.misc.py23 import * from fontTools.pens.basePen import BasePen diff --git a/Lib/fontTools/pens/quartzPen.py b/Lib/fontTools/pens/quartzPen.py index d35a993b..16b9c2d8 100644 --- a/Lib/fontTools/pens/quartzPen.py +++ b/Lib/fontTools/pens/quartzPen.py @@ -1,4 +1,3 @@ -from fontTools.misc.py23 import * from fontTools.pens.basePen import BasePen from Quartz.CoreGraphics import CGPathCreateMutable, CGPathMoveToPoint diff --git a/Lib/fontTools/pens/recordingPen.py b/Lib/fontTools/pens/recordingPen.py index b25011d6..99e87e5a 100644 --- a/Lib/fontTools/pens/recordingPen.py +++ b/Lib/fontTools/pens/recordingPen.py @@ -1,5 +1,4 @@ """Pen recording operations that can be accessed or replayed.""" -from fontTools.misc.py23 import * from fontTools.pens.basePen import AbstractPen, DecomposingPen from fontTools.pens.pointPen import AbstractPointPen @@ -141,7 +140,6 @@ class RecordingPointPen(AbstractPointPen): if __name__ == "__main__": - from fontTools.pens.basePen import _TestPen pen = RecordingPen() pen.moveTo((0, 0)) pen.lineTo((0, 100)) diff --git a/Lib/fontTools/pens/reportLabPen.py b/Lib/fontTools/pens/reportLabPen.py index 51d213f7..c0a4610b 100644 --- a/Lib/fontTools/pens/reportLabPen.py +++ b/Lib/fontTools/pens/reportLabPen.py @@ -1,4 +1,3 @@ -from fontTools.misc.py23 import * from fontTools.pens.basePen import BasePen from reportlab.graphics.shapes import Path diff --git a/Lib/fontTools/pens/reverseContourPen.py b/Lib/fontTools/pens/reverseContourPen.py index abc0fa29..9b3241b6 100644 --- a/Lib/fontTools/pens/reverseContourPen.py +++ b/Lib/fontTools/pens/reverseContourPen.py @@ -1,4 +1,3 @@ -from fontTools.misc.py23 import * from fontTools.misc.arrayTools import pairwise from fontTools.pens.filterPen import ContourFilterPen diff --git a/Lib/fontTools/pens/roundingPen.py b/Lib/fontTools/pens/roundingPen.py index c032cad1..2a7c476c 100644 --- a/Lib/fontTools/pens/roundingPen.py +++ b/Lib/fontTools/pens/roundingPen.py @@ -1,4 +1,4 @@ -from fontTools.misc.fixedTools import otRound +from fontTools.misc.roundTools import otRound from fontTools.misc.transform import Transform from fontTools.pens.filterPen import FilterPen, FilterPointPen diff --git a/Lib/fontTools/pens/statisticsPen.py b/Lib/fontTools/pens/statisticsPen.py index 7d602067..abd6ff5e 100644 --- a/Lib/fontTools/pens/statisticsPen.py +++ b/Lib/fontTools/pens/statisticsPen.py @@ -1,6 +1,5 @@ """Pen calculating area, center of mass, variance and standard-deviation, covariance and correlation, and slant, of glyph shapes.""" -from fontTools.misc.py23 import * import math from fontTools.pens.momentsPen import MomentsPen diff --git a/Lib/fontTools/pens/svgPathPen.py b/Lib/fontTools/pens/svgPathPen.py index 803f3935..4352ba47 100644 --- a/Lib/fontTools/pens/svgPathPen.py +++ b/Lib/fontTools/pens/svgPathPen.py @@ -1,4 +1,3 @@ -from fontTools.misc.py23 import * from fontTools.pens.basePen import BasePen diff --git a/Lib/fontTools/pens/t2CharStringPen.py b/Lib/fontTools/pens/t2CharStringPen.py index 89340d1e..0fddec1a 100644 --- a/Lib/fontTools/pens/t2CharStringPen.py +++ b/Lib/fontTools/pens/t2CharStringPen.py @@ -1,37 +1,12 @@ # Copyright (c) 2009 Type Supply LLC # Author: Tal Leming -from fontTools.misc.py23 import * -from fontTools.misc.fixedTools import otRound +from fontTools.misc.roundTools import otRound, roundFunc from fontTools.misc.psCharStrings import T2CharString from fontTools.pens.basePen import BasePen from fontTools.cffLib.specializer import specializeCommands, commandsToProgram -def t2c_round(number, tolerance=0.5): - if tolerance == 0: - return number # no-op - rounded = otRound(number) - # return rounded integer if the tolerance >= 0.5, or if the absolute - # difference between the original float and the rounded integer is - # within the tolerance - if tolerance >= .5 or abs(rounded - number) <= tolerance: - return rounded - else: - # else return the value un-rounded - return number - -def makeRoundFunc(tolerance): - if tolerance < 0: - raise ValueError("Rounding tolerance must be positive") - - def roundPoint(point): - x, y = point - return t2c_round(x, tolerance), t2c_round(y, tolerance) - - return roundPoint - - class T2CharStringPen(BasePen): """Pen to draw Type 2 CharStrings. @@ -45,7 +20,7 @@ class T2CharStringPen(BasePen): def __init__(self, width, glyphSet, roundTolerance=0.5, CFF2=False): super(T2CharStringPen, self).__init__(glyphSet) - self.roundPoint = makeRoundFunc(roundTolerance) + self.round = roundFunc(roundTolerance) self._CFF2 = CFF2 self._width = width self._commands = [] @@ -53,7 +28,7 @@ class T2CharStringPen(BasePen): def _p(self, pt): p0 = self._p0 - pt = self._p0 = self.roundPoint(pt) + pt = self._p0 = (self.round(pt[0]), self.round(pt[1])) return [pt[0]-p0[0], pt[1]-p0[1]] def _moveTo(self, pt): diff --git a/Lib/fontTools/pens/teePen.py b/Lib/fontTools/pens/teePen.py index 49420dca..2f30e922 100644 --- a/Lib/fontTools/pens/teePen.py +++ b/Lib/fontTools/pens/teePen.py @@ -1,5 +1,4 @@ """Pen multiplexing drawing to one or more pens.""" -from fontTools.misc.py23 import * from fontTools.pens.basePen import AbstractPen diff --git a/Lib/fontTools/pens/transformPen.py b/Lib/fontTools/pens/transformPen.py index 6619ba73..2dcf83b1 100644 --- a/Lib/fontTools/pens/transformPen.py +++ b/Lib/fontTools/pens/transformPen.py @@ -1,4 +1,3 @@ -from fontTools.misc.py23 import * from fontTools.pens.filterPen import FilterPen, FilterPointPen diff --git a/Lib/fontTools/pens/ttGlyphPen.py b/Lib/fontTools/pens/ttGlyphPen.py index 866298be..e7841efc 100644 --- a/Lib/fontTools/pens/ttGlyphPen.py +++ b/Lib/fontTools/pens/ttGlyphPen.py @@ -1,6 +1,6 @@ -from fontTools.misc.py23 import * from array import array from fontTools.misc.fixedTools import MAX_F2DOT14, otRound, floatToFixedToFloat +from fontTools.misc.roundTools import otRound from fontTools.pens.basePen import LoggingPen from fontTools.pens.transformPen import TransformPen from fontTools.ttLib.tables import ttProgram @@ -73,6 +73,9 @@ class TTGlyphPen(LoggingPen): assert self._isClosed(), '"move"-type point must begin a new contour.' self._addPoint(pt, 1) + def curveTo(self, *points): + raise NotImplementedError + def qCurveTo(self, *points): assert len(points) >= 1 for pt in points[:-1]: diff --git a/Lib/fontTools/pens/wxPen.py b/Lib/fontTools/pens/wxPen.py index 5ff6c471..1504f089 100644 --- a/Lib/fontTools/pens/wxPen.py +++ b/Lib/fontTools/pens/wxPen.py @@ -1,4 +1,3 @@ -from fontTools.misc.py23 import * from fontTools.pens.basePen import BasePen |