a
    èÝEbÉ  ã                   @   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r°eƒ Ze d¡ e d¡ e ddd¡ e ¡  ddlmZ eejƒ 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)Z	recordingÚpenÚoperatorZoperands© r   ú[/home/ja/django-apps/lartica_env/lib/python3.9/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   s
   g | _ d S ©N©Úvalue©Úselfr   r   r   Ú__init__1   s    zRecordingPen.__init__c                 C   s   | j  d|ff¡ d S )NÚmoveTo©r   Úappend)r   Úp0r   r   r   r   3   s    zRecordingPen.moveToc                 C   s   | j  d|ff¡ d S )NÚlineTor   )r   Úp1r   r   r   r   5   s    zRecordingPen.lineToc                 G   s   | j  d|f¡ d S )NÚqCurveTor   ©r   Zpointsr   r   r   r   7   s    zRecordingPen.qCurveToc                 G   s   | j  d|f¡ d S )NÚcurveTor   r   r   r   r   r   9   s    zRecordingPen.curveToc                 C   s   | j  d¡ d S )N)Ú	closePathr   r   r   r   r   r   r   ;   s    zRecordingPen.closePathc                 C   s   | j  d¡ d S )N)ÚendPathr   r   r   r   r   r   r   =   s    zRecordingPen.endPathc                 C   s   | j  d||ff¡ d S )NÚaddComponentr   )r   Z	glyphNameÚtransformationr   r   r   r   ?   s    zRecordingPen.addComponentc                 C   s   t | j|ƒ d S r   )r   r   )r   r
   r   r   r   ÚreplayA   s    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#   r$   r%   Z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   s
   g | _ d S r   r   r   r   r   r   r   z   s    zRecordingPointPen.__init__Nc                 K   s&   |d ur||d< | j  dd|f¡ d S )NÚ
identifierÚ	beginPathr   r   )r   r&   Úkwargsr   r   r   r'   }   s    zRecordingPointPen.beginPathc                 C   s   | j  ddi f¡ d S )Nr   r   r   r   r   r   r   r   ‚   s    zRecordingPointPen.endPathFc                 K   s.   |d ur||d< | j  d||||f|f¡ d S )Nr&   ÚaddPointr   )r   ÚptZsegmentTypeZsmoothÚnamer&   r(   r   r   r   r)   …   s    zRecordingPointPen.addPointc                 K   s*   |d ur||d< | j  d||f|f¡ d S )Nr&   r   r   )r   ZbaseGlyphNamer    r&   r(   r   r   r   r   Š   s    zRecordingPointPen.addComponentc                 C   s*   | j D ]\}}}t||ƒ|i |¤Ž qd S r   )r   r	   )r   ZpointPenr   Úargsr(   r   r   r   r!   �   s    zRecordingPointPen.replay)N)NFNN)N)
r"   r#   r$   r%   r   r'   r   r)   r   r!   r   r   r   r   r   a   s   


r   Ú__main__)r   r   )r   éd   )é2   éK   )é<   r/   )r/   é   )ÚpprintN)r%   ZfontTools.pens.basePenr   r   ZfontTools.pens.pointPenr   Ú__all__r   r   r   r   r"   r
   r   r   r   r   r3   r   r   r   r   r   Ú<module>   s   +3

