
    jkez                     J   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(  re e       Zej                  d       ej                  d       ej                  ddd       ej!                          ddlmZ  eej$                         yy)z:Pen recording operations that can be accessed or replayed.    )AbstractPenDecomposingPen)AbstractPointPen)replayRecordingRecordingPenDecomposingRecordingPenRecordingPointPenc                 6    | D ]  \  }} t        ||      |   y)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)	recordingpenoperatoroperandss       =/usr/lib/python3/dist-packages/fontTools/pens/recordingPen.pyr   r      s)     ( *(X)*    c                   P    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 ZeZy)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                     g | _         y Nvalueselfs    r   __init__zRecordingPen.__init__1   	    
r   c                 @    | j                   j                  d|ff       y )NmoveTor   append)r   p0s     r   r   zRecordingPen.moveTo4       

8bU+,r   c                 @    | j                   j                  d|ff       y )NlineTor   )r   p1s     r   r"   zRecordingPen.lineTo7   r    r   c                 >    | j                   j                  d|f       y )NqCurveTor   r   pointss     r   r%   zRecordingPen.qCurveTo:   s    

:v./r   c                 >    | j                   j                  d|f       y )NcurveTor   r&   s     r   r)   zRecordingPen.curveTo=   s    

9f-.r   c                 :    | j                   j                  d       y )N)	closePath r   r   s    r   r+   zRecordingPen.closePath@   s    

+,r   c                 :    | j                   j                  d       y )N)endPathr,   r   r   s    r   r.   zRecordingPen.endPathC   s    

/*r   c                 B    | j                   j                  d||ff       y )NaddComponentr   )r   	glyphNametransformations      r   r0   zRecordingPen.addComponentF   s    

>I~+FGHr   c                 D    | j                   j                  d|||ff       y )NaddVarComponentr   )r   r1   r2   locations       r   r4   zRecordingPen.addVarComponentI   s!    

,y.(.STUr   c                 0    t        | j                  |       y r   )r   r   )r   r   s     r   replayzRecordingPen.replayL   s    

C(r   N)__name__
__module____qualname____doc__r   r   r"   r%   r)   r+   r.   r0   r4   r7   drawr,   r   r   r   r      sB    ,--0/-+IV) Dr   r   c                       e Zd ZdZdZy)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)r8   r9   r:   r;   skipMissingComponentsr,   r   r   r   r   R   s    2 "r   r   c                   J    e Zd ZdZd Zd
dZd Z	 ddZd
dZ	 d
dZ	d	 Z
e
Zy)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                     g | _         y r   r   r   s    r   r   zRecordingPointPen.__init__   r   r   Nc                 N    |||d<   | j                   j                  dd|f       y )N
identifier	beginPathr,   r   )r   rB   kwargss      r   rC   zRecordingPointPen.beginPath   s+    !#-F< 

;F34r   c                 @    | j                   j                  ddi f       y )Nr.   r,   r   r   s    r   r.   zRecordingPointPen.endPath   s    

9b"-.r   c                 V    |||d<   | j                   j                  d||||f|f       y )NrB   addPointr   )r   ptsegmentTypesmoothnamerB   rD   s          r   rG   zRecordingPointPen.addPoint   s6     !#-F< 

:K'FOPr   c                 R    |||d<   | j                   j                  d||f|f       y )NrB   r0   r   )r   baseGlyphNamer2   rB   rD   s        r   r0   zRecordingPointPen.addComponent   s0    !#-F< 

>M>+JFSTr   c                 T    |||d<   | j                   j                  d|||f|f       y )NrB   r4   r   )r   rM   r2   r5   rB   rD   s         r   r4   z!RecordingPointPen.addVarComponent   s7     !#-F< 

 I6R	
r   c                 R    | j                   D ]  \  }}} t        ||      |i |  y r   )r   r   )r   pointPenr   argsrD   s        r   r7   zRecordingPointPen.replay   s2    &*jj 	9"HdF'GHh'88	9r   r   )NFNN)r8   r9   r:   r;   r   rC   r.   rG   r0   r4   r7   
drawPointsr,   r   r   r	   r	   o   sA    05
/ IMQU CG
9 Jr   r	   __main__)r   r   )r   d   )2   K   )<   rU   )rU      )pprintN)r;   fontTools.pens.basePenr   r   fontTools.pens.pointPenr   __all__r   r   r   r	   r8   r   r   r"   r)   r+   rY   r   r,   r   r   <module>r]      s    @ > 4	*5; 5p"nl ":=( =@ z
.CJJvJJxKK(H-MMO
399 r   