B
    Jd                 @   s   d Z ddlmZmZ ddlmZ ddddg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re 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$   x| D ]\}}t |||  qW 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   M/var/www/html/venv/lib/python3.7/site-packages/fontTools/pens/recordingPen.pyr      s    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lineTo)r   r   )r   p1r   r   r   r   5   s    zRecordingPen.lineToc             G   s   | j d|f d S )NqCurveTo)r   r   )r   pointsr   r   r   r   7   s    zRecordingPen.qCurveToc             G   s   | j d|f d S )NcurveTo)r   r   )r   r   r   r   r   r   9   s    zRecordingPen.curveToc             C   s   | j d d S )N)	closePathr   )r   r   )r   r   r   r   r   ;   s    zRecordingPen.closePathc             C   s   | j d d S )N)endPathr   )r   r   )r   r   r   r   r   =   s    zRecordingPen.endPathc             C   s   | j d||ff d S )NaddComponent)r   r   )r   Z	glyphNametransformationr   r   r   r   ?   s    zRecordingPen.addComponentc             C   s   t | j| d S )N)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   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   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 )N)r   )r   r   r   r   r   z   s    zRecordingPointPen.__init__Nc             K   s&   |d k	r||d< | j dd|f d S )N
identifier	beginPathr   )r   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   r      s    zRecordingPointPen.endPathFc             K   s.   |d k	r||d< | j d||||f|f d S )Nr"   addPoint)r   r   )r   ptZsegmentTypeZsmoothnamer"   r$   r   r   r   r%      s    zRecordingPointPen.addPointc             K   s*   |d k	r||d< | j d||f|f d S )Nr"   r   )r   r   )r   ZbaseGlyphNamer   r"   r$   r   r   r   r      s    zRecordingPointPen.addComponentc             C   s*   x$| j D ]\}}}t|||| qW d S )N)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   


__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   r/   r   r   r   r   r   <module>   s$   +3

