
    <`                        d Z ddlmZmZ ddlmZ g dZd Z G d de          Z G d d	ee          Z	 G d
 de          Z
edk    rw e            Ze                    d           e                    d           e                    ddd           e                                 ddlmZ  eej                   dS dS )z:Pen recording operations that can be accessed or replayed.    )AbstractPenDecomposingPen)AbstractPointPen)replayRecordingRecordingPenDecomposingRecordingPenRecordingPointPenc                 <    | D ]\  }} t          ||          |  dS )a#  Replay a recording, as produced by RecordingPen or DecomposingRecordingPen,
	to a pen.

	Note that recording does not have to be produced by those pens.
	It can be any iterable of tuples of method name and tuple-of-arguments.
	Likewise, pen can be any objects receiving those method calls.
	N)getattr)	recordingpenoperatoroperandss       ;lib/python3.11/site-packages/fontTools/pens/recordingPen.pyr   r      s<     $ $ $Xh'#x(###$ $    c                   H    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )r   a  Pen recording operations that can be accessed or replayed.

	The recording can be accessed as pen.value; or replayed using
	pen.replay(otherPen).

	Usage example:
	==============
	from fontTools.ttLib import TTFont
	from fontTools.pens.recordingPen import RecordingPen

	glyph_name = 'dollar'
	font_path = 'MyFont.otf'

	font = TTFont(font_path)
	glyphset = font.getGlyphSet()
	glyph = glyphset[glyph_name]

	pen = RecordingPen()
	glyph.draw(pen)
	print(pen.value)
	c                     g | _         d S Nvalueselfs    r   __init__zRecordingPen.__init__1       $***r   c                 @    | j                             d|ff           d S )NmoveTor   append)r   p0s     r   r   zRecordingPen.moveTo3   %    *Xu%&&&&&r   c                 @    | j                             d|ff           d S )NlineTor   )r   p1s     r   r"   zRecordingPen.lineTo5   r    r   c                 >    | j                             d|f           d S )NqCurveTor   r   pointss     r   r%   zRecordingPen.qCurveTo7   s#    *Z()))))r   c                 >    | j                             d|f           d S )NcurveTor   r&   s     r   r)   zRecordingPen.curveTo9   s#    *Y'(((((r   c                 :    | j                             d           d S )N)	closePath r   r   s    r   r+   zRecordingPen.closePath;   s    *%&&&&&r   c                 :    | j                             d           d S )N)endPathr,   r   r   s    r   r.   zRecordingPen.endPath=   s    *O$$$$$r   c                 B    | j                             d||ff           d S )NaddComponentr   )r   	glyphNametransformations      r   r0   zRecordingPen.addComponent?   s(    *^i%@ABBBBBr   c                 0    t          | j        |           d S r   )r   r   )r   r   s     r   replayzRecordingPen.replayA   s    $*c"""""r   N)__name__
__module____qualname____doc__r   r   r"   r%   r)   r+   r.   r0   r4   r,   r   r   r   r      s         ,  ' ' '' ' '* * *) ) )' ' '% % %C C C# # # # #r   r   c                       e Zd ZdZdZdS )r   a   Same as RecordingPen, except that it doesn't keep components
	as references, but draws them decomposed as regular contours.

	The constructor takes a single 'glyphSet' positional argument,
	a dictionary of glyph objects (i.e. with a 'draw' method) keyed
	by thir name.

	>>> class SimpleGlyph(object):
	...     def draw(self, pen):
	...         pen.moveTo((0, 0))
	...         pen.curveTo((1, 1), (2, 2), (3, 3))
	...         pen.closePath()
	>>> class CompositeGlyph(object):
	...     def draw(self, pen):
	...         pen.addComponent('a', (1, 0, 0, 1, -1, 1))
	>>> glyphSet = {'a': SimpleGlyph(), 'b': CompositeGlyph()}
	>>> for name, glyph in sorted(glyphSet.items()):
	...     pen = DecomposingRecordingPen(glyphSet)
	...     glyph.draw(pen)
	...     print("{}: {}".format(name, pen.value))
	a: [('moveTo', ((0, 0),)), ('curveTo', ((1, 1), (2, 2), (3, 3))), ('closePath', ())]
	b: [('moveTo', ((-1, 1),)), ('curveTo', ((0, 2), (1, 3), (2, 4))), ('closePath', ())]
	FN)r5   r6   r7   r8   skipMissingComponentsr,   r   r   r   r   E   s"         0 r   r   c                   <    e Zd ZdZd Zd
dZd ZddZd
dZd	 Z	dS )r	   a  PointPen recording operations that can be accessed or replayed.

	The recording can be accessed as pen.value; or replayed using
	pointPen.replay(otherPointPen).

	Usage example:
	==============
	from defcon import Font
	from fontTools.pens.recordingPen import RecordingPointPen

	glyph_name = 'a'
	font_path = 'MyFont.ufo'

	font = Font(font_path)
	glyph = font[glyph_name]

	pen = RecordingPointPen()
	glyph.drawPoints(pen)
	print(pen.value)

	new_glyph = font.newGlyph('b')
	pen.replay(new_glyph.getPointPen())
	c                     g | _         d S r   r   r   s    r   r   zRecordingPointPen.__init__z   r   r   Nc                 N    |||d<   | j                             dd|f           d S )N
identifier	beginPathr,   r   )r   r>   kwargss      r   r?   zRecordingPointPen.beginPath}   s5    $6,*["f-.....r   c                 @    | j                             ddi f           d S )Nr.   r,   r   r   s    r   r.   zRecordingPointPen.endPath   s%    *YB'(((((r   Fc                 V    |||d<   | j                             d||||f|f           d S )Nr>   addPointr   )r   ptsegmentTypesmoothnamer>   r@   s          r   rC   zRecordingPointPen.addPoint   s>    $6,*Z"k64!@&IJJJJJr   c                 R    |||d<   | j                             d||f|f           d S )Nr>   r0   r   )r   baseGlyphNamer2   r>   r@   s        r   r0   zRecordingPointPen.addComponent   s:    $6,*^m^%DfMNNNNNr   c                 N    | j         D ]\  }}} t          ||          |i | d S r   )r   r   )r   pointPenr   argsr@   s        r   r4   zRecordingPointPen.replay   sF     $
 0 0hf78X/////0 0r   r   )NFNN)
r5   r6   r7   r8   r   r?   r.   rC   r0   r4   r,   r   r   r	   r	   a   s         0  / / / /
) ) )K K K K
O O O O
0 0 0 0 0r   r	   __main__)r   r   )r   d   )2   K   )<   rO   )rO      )pprintN)r8   fontTools.pens.basePenr   r   fontTools.pens.pointPenr   __all__r   r   r   r	   r5   r   r   r"   r)   r+   rS   r   r,   r   r   <module>rW      si   @ @ > > > > > > > > 4 4 4 4 4 4  	$ 	$ 	$(# (# (# (# (#; (# (# (#V    nl   800 00 00 00 00( 00 00 00f z|~~FHXx***	 r   