a
    û
þdN  ã                   @   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 )a2  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   úd/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/fontTools/pens/recordingPen.pyr      s    r   c                   @   s`   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d„ ZdS )r   a8  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   Zp0r   r   r   r   4   s    zRecordingPen.moveToc                 C   s   | j  d|ff¡ d S )NÚlineTor   )r   Úp1r   r   r   r   7   s    zRecordingPen.lineToc                 G   s   | j  d|f¡ d S )NÚqCurveTor   ©r   Zpointsr   r   r   r   :   s    zRecordingPen.qCurveToc                 G   s   | j  d|f¡ d S )NÚcurveTor   r   r   r   r   r   =   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   C   s    zRecordingPen.endPathc                 C   s   | j  d||ff¡ d S )NÚaddComponentr   )r   Ú	glyphNameÚtransformationr   r   r   r   F   s    zRecordingPen.addComponentc                 C   s   | j  d|||ff¡ d S )NÚaddVarComponentr   )r   r   r    Úlocationr   r   r   r!   I   s    zRecordingPen.addVarComponentc                 C   s   t | j|ƒ d S r   )r   r   )r   r
   r   r   r   ÚreplayL   s    zRecordingPen.replayN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   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   P   s   r   c                   @   sP   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d„Z	dd„ Z
dS )r   as  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   †   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   ÚbaseGlyphNamer    r(   r*   r   r   r   r   ˜   s    zRecordingPointPen.addComponentc                 K   s,   |d ur||d< | j  d|||f|f¡ d S )Nr(   r!   r   )r   r.   r    r"   r(   r*   r   r   r   r!      s
    ÿz!RecordingPointPen.addVarComponentc                 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)N)r$   r%   r&   r'   r   r)   r   r+   r   r!   r#   r   r   r   r   r   m   s   
 ÿ

 ÿ
	r   Ú__main__)r   r   )r   éd   )é2   éK   )é<   r2   )r2   é   )ÚpprintN)r'   ZfontTools.pens.basePenr   r   ZfontTools.pens.pointPenr   Ú__all__r   r   r   r   r$   r
   r   r   r   r   r6   r   r   r   r   r   Ú<module>   s   6>

