
    jke                     `    d dl mZ d dlmZ d dlmZmZ ddgZ G d de      Z G d de      Z	y)	    )otRound)	Transform)	FilterPenFilterPointPenRoundingPenRoundingPointPenc                   D     e Zd ZdZef fd	Zd Zd Zd Zd Z	d Z
 xZS )r   a  
    Filter pen that rounds point coordinates and component XY offsets to integer.

    >>> from fontTools.pens.recordingPen import RecordingPen
    >>> recpen = RecordingPen()
    >>> roundpen = RoundingPen(recpen)
    >>> roundpen.moveTo((0.4, 0.6))
    >>> roundpen.lineTo((1.6, 2.5))
    >>> roundpen.qCurveTo((2.4, 4.6), (3.3, 5.7), (4.9, 6.1))
    >>> roundpen.curveTo((6.4, 8.6), (7.3, 9.7), (8.9, 10.1))
    >>> roundpen.addComponent("a", (1.5, 0, 0, 1.5, 10.5, -10.5))
    >>> recpen.value == [
    ...     ('moveTo', ((0, 1),)),
    ...     ('lineTo', ((2, 3),)),
    ...     ('qCurveTo', ((2, 5), (3, 6), (5, 6))),
    ...     ('curveTo', ((6, 9), (7, 10), (9, 10))),
    ...     ('addComponent', ('a', (1.5, 0, 0, 1.5, 11, -10))),
    ... ]
    True
    c                 2    t         |   |       || _        y Nsuper__init__	roundFuncselfoutPenr   	__class__s      </usr/lib/python3/dist-packages/fontTools/pens/roundingPen.pyr   zRoundingPen.__init__        "    c                     | j                   j                  | j                  |d         | j                  |d         f       y Nr      )_outPenmoveTor   r   pts     r   r   zRoundingPen.moveTo#   3    T^^BqE2DNN2a54IJKr   c                     | j                   j                  | j                  |d         | j                  |d         f       y r   )r   lineTor   r   s     r   r    zRoundingPen.lineTo&   r   r   c                 J       j                   j                   fd|D          y )Nc              3   h   K   | ])  \  }}j                  |      j                  |      f + y wr   r   .0xyr   s      r   	<genexpr>z&RoundingPen.curveTo.<locals>.<genexpr>+   ,     HAt~~a $.."34H   /2)r   curveTor   pointss   ` r   r+   zRoundingPen.curveTo)   s    HH	
r   c                 J       j                   j                   fd|D          y )Nc              3   h   K   | ])  \  }}j                  |      j                  |      f + y wr   r#   r$   s      r   r(   z'RoundingPen.qCurveTo.<locals>.<genexpr>0   r)   r*   )r   qCurveTor,   s   ` r   r0   zRoundingPen.qCurveTo.   s    HH	
r   c           
          | j                   j                  |t        g |d d | j                  |d         | j                  |d                 y N      r   addComponentr   r   )r   	glyphNametransformations      r   r6   zRoundingPen.addComponent3   s\    !! #~a01 ~a01	
r   )__name__
__module____qualname____doc__r   r   r   r    r+   r0   r6   __classcell__r   s   @r   r   r   	   s-    * *1 #LL




r   c                   4     e Zd ZdZef fd	ZddZd Z xZS )r   a'  
    Filter point pen that rounds point coordinates and component XY offsets to integer.

    >>> from fontTools.pens.recordingPen import RecordingPointPen
    >>> recpen = RecordingPointPen()
    >>> roundpen = RoundingPointPen(recpen)
    >>> roundpen.beginPath()
    >>> roundpen.addPoint((0.4, 0.6), 'line')
    >>> roundpen.addPoint((1.6, 2.5), 'line')
    >>> roundpen.addPoint((2.4, 4.6))
    >>> roundpen.addPoint((3.3, 5.7))
    >>> roundpen.addPoint((4.9, 6.1), 'qcurve')
    >>> roundpen.endPath()
    >>> roundpen.addComponent("a", (1.5, 0, 0, 1.5, 10.5, -10.5))
    >>> recpen.value == [
    ...     ('beginPath', (), {}),
    ...     ('addPoint', ((0, 1), 'line', False, None), {}),
    ...     ('addPoint', ((2, 3), 'line', False, None), {}),
    ...     ('addPoint', ((2, 5), None, False, None), {}),
    ...     ('addPoint', ((3, 6), None, False, None), {}),
    ...     ('addPoint', ((5, 6), 'qcurve', False, None), {}),
    ...     ('endPath', (), {}),
    ...     ('addComponent', ('a', (1.5, 0, 0, 1.5, 11, -10)), {}),
    ... ]
    True
    c                 2    t         |   |       || _        y r   r   r   s      r   r   zRoundingPointPen.__init__Z   r   r   c                      | j                   j                  | j                  |d         | j                  |d         ff|||d| y )Nr   r   )segmentTypesmoothname)r   addPointr   )r   r   rB   rC   rD   kwargss         r   rE   zRoundingPointPen.addPoint^   sP    ^^BqE"DNN2a5$9:	
#		

 	
r   c           
           | j                   j                  |t        g |d d | j                  |d         | j                  |d          fi | y r2   r5   )r   baseGlyphNamer8   rF   s       r   r6   zRoundingPointPen.addComponentg   sh    !!! #~a01 ~a01	
 	
r   )NFN)	r9   r:   r;   r<   r   r   rE   r6   r=   r>   s   @r   r   r   >   s    6 *1 #
	
r   N)
fontTools.misc.roundToolsr   fontTools.misc.transformr   fontTools.pens.filterPenr   r   __all__r   r    r   r   <module>rN      s4    - . > ,
-2
) 2
j2
~ 2
r   