
    h)                     d    S SK JrJr  S SKJr  S SKJrJr  SS/r " S S\5      r	 " S S\5      r
g)	    )noRoundotRound)	Transform)	FilterPenFilterPointPenRoundingPenRoundingPointPenc                   R   ^  \ rS rSrSr\\4U 4S jjrS rS r	S r
S rS rS	rU =r$ )
r   	   a  
Filter pen that rounds point coordinates and component XY offsets to integer. For
rounding the component transform values, a separate round function can be passed to
the pen.

>>> 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                 <   > [         TU ]  U5        X l        X0l        g Nsuper__init__	roundFunctransformRoundFuncselfoutPenr   r   	__class__s       L/var/www/html/env/lib/python3.13/site-packages/fontTools/pens/roundingPen.pyr   RoundingPen.__init__!        ""4    c                     U R                   R                  U R                  US   5      U R                  US   5      45        g Nr      )_outPenmoveTor   r   pts     r   r   RoundingPen.moveTo&   3    T^^BqE2DNN2a54IJKr   c                     U R                   R                  U R                  US   5      U R                  US   5      45        g r   )r   lineTor   r    s     r   r%   RoundingPen.lineTo)   r#   r   c                 L   ^  T R                   R                  " U 4S jU 5       6   g )Nc              3   l   >#    U  H)  u  pTR                  U5      TR                  U5      4v   M+     g 7fr   r   .0xyr   s      r   	<genexpr>&RoundingPen.curveTo.<locals>.<genexpr>.   *     Ht~~a $.."34   14)r   curveTor   pointss   ` r   r2   RoundingPen.curveTo,   s    HH	
r   c                 L   ^  T R                   R                  " U 4S jU 5       6   g )Nc              3   l   >#    U  H)  u  pTR                  U5      TR                  U5      4v   M+     g 7fr   r)   r*   s      r   r.   'RoundingPen.qCurveTo.<locals>.<genexpr>3   r0   r1   )r   qCurveTor3   s   ` r   r9   RoundingPen.qCurveTo1   s    HH	
r   c                    Uu  p4pVpxU R                   R                  U[        U R                  U5      U R                  U5      U R                  U5      U R                  U5      U R	                  U5      U R	                  U5      5      5        g r   r   addComponentr   r   r   )	r   	glyphNametransformationxxxyyxyydxdys	            r   r=   RoundingPen.addComponent6   s{    !/!!''+''+''+''+r"r"
	
r   r   r   )__name__
__module____qualname____firstlineno____doc__r   r   r   r   r%   r2   r9   r=   __static_attributes____classcell__r   s   @r   r   r   	   s4    . *1W 5
LL




 
r   c                   J   ^  \ rS rSrSr\\4U 4S jjr SS jrSS jr	Sr
U =r$ )	r	   E   a$  
Filter point pen that rounds point coordinates and component XY offsets to integer.
For rounding the component scale values, a separate round function can be passed to
the pen.

>>> 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                 <   > [         TU ]  U5        X l        X0l        g r   r   r   s       r   r   RoundingPointPen.__init__c   r   r   c                     U R                   R                  " U R                  US   5      U R                  US   5      44UUUUS.UD6  g )Nr   r   )segmentTypesmoothname
identifier)r   addPointr   )r   r!   rU   rV   rW   rX   kwargss          r   rY   RoundingPointPen.addPointh   sS     	^^BqE"DNN2a5$9:	
#!	
 	
r   c                     Uu  pVpxpU R                   R                  " SU[        U R                  U5      U R                  U5      U R                  U5      U R                  U5      U R	                  U	5      U R	                  U
5      5      US.UD6  g )N)baseGlyphNamer?   rX    r<   )r   r]   r?   rX   rZ   r@   rA   rB   rC   rD   rE   s              r   r=   RoundingPointPen.addComponentt   s    !/!! 	
'$''+''+''+''+r"r" "	
 	
r   rG   )NFNNr   )rH   rI   rJ   rK   rL   r   r   r   rY   r=   rM   rN   rO   s   @r   r	   r	   E   s*    : *1W 5 IM


 
r   N)fontTools.misc.roundToolsr   r   fontTools.misc.transformr   fontTools.pens.filterPenr   r   __all__r   r	   r^   r   r   <module>rd      s4    6 . > ,
-9
) 9
x=
~ =
r   