o
    tBh                     @   s   d Z ddlmZmZ ddlmZ g dZdd ZG dd deZG d	d
 d
eeZ	G dd deZ
edkrZe 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                 C   s    | D ]\}}t |||  q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operands r   r/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/fontTools/pens/recordingPen.pyr      s   r   c                   @   sX   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zd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).

	: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                 C   
   g | _ d S Nvalueselfr   r   r   __init__1      
zRecordingPen.__init__c                 C      | j d|ff d S )NmoveTor   append)r   p0r   r   r   r   3      zRecordingPen.moveToc                 C   r   )NlineTor   )r   p1r   r   r   r   5   r   zRecordingPen.lineToc                 G      | j d|f d S )NqCurveTor   r   pointsr   r   r   r!   7      zRecordingPen.qCurveToc                 G   r    )NcurveTor   r"   r   r   r   r%   9   r$   zRecordingPen.curveToc                 C      | j d d S )N)	closePathr   r   r   r   r   r   r'   ;      zRecordingPen.closePathc                 C   r&   )N)endPathr   r   r   r   r   r   r)   =   r(   zRecordingPen.endPathc                 C   s   | j d||ff d S )NaddComponentr   )r   	glyphNametransformationr   r   r   r*   ?   s   zRecordingPen.addComponentc                 C   s   t | j| d S r   )r   r   )r   r   r   r   r   replayA   r(   zRecordingPen.replayN)__name__
__module____qualname____doc__r   r   r   r!   r%   r'   r)   r*   r-   r   r   r   r   r      s    r   c                   @   s   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)r.   r/   r0   r1   skipMissingComponentsr   r   r   r   r   E   s    r   c                   @   sF   e Zd ZdZdd ZdddZdd Zdd
dZdddZd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).

	: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                 C   r   r   r   r   r   r   r   r   z   r   zRecordingPointPen.__init__Nc                 K   s&   |d ur||d< | j dd|f d S )N
identifier	beginPathr   r   )r   r3   kwargsr   r   r   r4   }   s   zRecordingPointPen.beginPathc                 C   s   | j ddi f d S )Nr)   r   r   r   r   r   r   r)      r   zRecordingPointPen.endPathFc                 K   s.   |d ur||d< | j d||||f|f d S )Nr3   addPointr   )r   ptsegmentTypesmoothnamer3   r5   r   r   r   r6      s   zRecordingPointPen.addPointc                 K   s*   |d ur||d< | j d||f|f d S )Nr3   r*   r   )r   baseGlyphNamer,   r3   r5   r   r   r   r*      s   zRecordingPointPen.addComponentc                 C   s*   | j D ]\}}}t|||i | qd S r   )r   r	   )r   pointPenr   argsr5   r   r   r   r-      s   zRecordingPointPen.replayr   )NFNN)
r.   r/   r0   r1   r   r4   r)   r6   r*   r-   r   r   r   r   r   a   s    


r   __main__)r   r   )r   d   )2   K   )<   r@   )r@      )pprintN)r1   fontTools.pens.basePenr   r   fontTools.pens.pointPenr   __all__r   r   r   r   r.   r   r   r   r%   r'   rD   r   r   r   r   r   <module>   s"    +3

