o
    tBh                     @   sd   d dl mZ d dlmZ efddZG dd deZedkr0d dlZd dl	Z	e
e	 j dS dS )	    )Callable)BasePenc                    s   d  fdd| D S )N c                 3   s    | ]} |V  qd S N ).0intosr   p/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/fontTools/pens/svgPathPen.py	<genexpr>   s    z pointToString.<locals>.<genexpr>)join)ptr
   r   r	   r   pointToString   s   r   c                   @   sl   e Zd ZdZefdeegef f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 )
SVGPathPena>   Pen to draw SVG path d commands.

    Example::
        >>> pen = SVGPathPen(None)
        >>> pen.moveTo((0, 0))
        >>> pen.lineTo((1, 1))
        >>> pen.curveTo((2, 2), (3, 3), (4, 4))
        >>> pen.closePath()
        >>> pen.getCommands()
        'M0 0 1 1C2 2 3 3 4 4Z'

    Args:
        glyphSet: a dictionary of drawable glyph objects keyed by name
            used to resolve component references in composite glyphs.
        ntos: a callable that takes a number and returns a string, to
            customize how numbers are formatted (default: str).
    r
   c                 C   s.   t | | g | _d | _d | _d | _|| _d S r   )r   __init__	_commands_lastCommand_lastX_lastY_ntos)selfglyphSetr
   r   r   r   r      s   
zSVGPathPen.__init__c                 C   s   | j dkr| jd dS dS )z
        >>> pen = SVGPathPen(None)
        >>> pen.moveTo((0, 0))
        >>> pen.moveTo((10, 10))
        >>> pen._commands
        ['M10 10']
        MN)r   r   popr   r   r   r   _handleAnchor#   s   
zSVGPathPen._handleAnchorc                 C   s:   |    dt|| j }| j| d| _|\| _| _dS )aV  
        >>> pen = SVGPathPen(None)
        >>> pen.moveTo((0, 0))
        >>> pen._commands
        ['M0 0']

        >>> pen = SVGPathPen(None)
        >>> pen.moveTo((10, 0))
        >>> pen._commands
        ['M10 0']

        >>> pen = SVGPathPen(None)
        >>> pen.moveTo((0, 10))
        >>> pen._commands
        ['M0 10']
        zM%sr   N)r   r   r   r   appendr   r   r   )r   r   tr   r   r   _moveTo.   s
   zSVGPathPen._moveToc                 C   s   |\}}|| j kr|| jkrdS || j krd}| |}n%|| jkr*d}| |}n| jdkr:d}dt|| j }nd}t|| j}d}|rM||7 }|| _||7 }| j| |\| _ | _dS )aU  
        # duplicate point
        >>> pen = SVGPathPen(None)
        >>> pen.moveTo((10, 10))
        >>> pen.lineTo((10, 10))
        >>> pen._commands
        ['M10 10']

        # vertical line
        >>> pen = SVGPathPen(None)
        >>> pen.moveTo((10, 10))
        >>> pen.lineTo((10, 0))
        >>> pen._commands
        ['M10 10', 'V0']

        # horizontal line
        >>> pen = SVGPathPen(None)
        >>> pen.moveTo((10, 10))
        >>> pen.lineTo((0, 10))
        >>> pen._commands
        ['M10 10', 'H0']

        # basic
        >>> pen = SVGPathPen(None)
        >>> pen.lineTo((70, 80))
        >>> pen._commands
        ['L70 80']

        # basic following a moveto
        >>> pen = SVGPathPen(None)
        >>> pen.moveTo((0, 0))
        >>> pen.lineTo((10, 10))
        >>> pen._commands
        ['M0 0', ' 10 10']
        NVHr   r   L )r   r   r   r   r   r   r   )r   r   xycmdptsr   r   r   r   _lineToE   s*   $


zSVGPathPen._lineToc                 C   s^   d}|t || jd 7 }|t || jd 7 }|t || j7 }| j| d| _|\| _| _dS )z
        >>> pen = SVGPathPen(None)
        >>> pen.curveTo((10, 20), (30, 40), (50, 60))
        >>> pen._commands
        ['C10 20 30 40 50 60']
        Cr   Nr   r   r   r   r   r   r   )r   pt1pt2pt3r   r   r   r   _curveToOne   s   zSVGPathPen._curveToOnec                 C   sV   |dusJ d}|t || jd 7 }|t || j7 }| j| d| _|\| _| _dS )aw  
        >>> pen = SVGPathPen(None)
        >>> pen.qCurveTo((10, 20), (30, 40))
        >>> pen._commands
        ['Q10 20 30 40']
        >>> from fontTools.misc.roundTools import otRound
        >>> pen = SVGPathPen(None, ntos=lambda v: str(otRound(v)))
        >>> pen.qCurveTo((3, 3), (7, 5), (11, 4))
        >>> pen._commands
        ['Q3 3 5 4', 'Q7 5 11 4']
        NQr   r+   )r   r,   r-   r   r   r   r   _qCurveToOne   s   zSVGPathPen._qCurveToOnec                 C   s"   | j d d| _d | _| _dS )zp
        >>> pen = SVGPathPen(None)
        >>> pen.closePath()
        >>> pen._commands
        ['Z']
        ZN)r   r   r   r   r   r   r   r   r   
_closePath   s   zSVGPathPen._closePathc                 C   s   |    d| _d | _| _dS )zn
        >>> pen = SVGPathPen(None)
        >>> pen.endPath()
        >>> pen._commands
        ['Z']
        N)r3   r   r   r   r   r   r   r   _endPath   s   zSVGPathPen._endPathc                 C   s   d | jS )Nr$   )r   r   r   r   r   r   getCommands   s   zSVGPathPen.getCommandsN)__name__
__module____qualname____doc__strr   floatr   r   r    r)   r/   r1   r3   r4   r5   r   r   r   r   r   	   s    Br   __main__N)typingr   fontTools.pens.basePenr   r:   r   r   r6   sysdoctestexittestmodfailedr   r   r   r   <module>   s     <