B
    He                  @   s  d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ e de jZe dZG dd de
Ze	e Zeegef Zeeegef Z e dj!fee edddZ"eeee#ee ee f  dddZ$d'eeeef e%ee edddZ&e'dkrddddd gZ(d d!l)m*Z* d d"l+m,Z, e,d#d$d%d&Z-xe(D ]Z.e-/ee.e. qW e*e- dS )(    N)literal_eval)
attrgetter)CallableIterableListMatch
NamedTupleOptionalTupleUnion   )_emoji_replace)EmojiVariant)MarkupError)Style)SpanTextz((\\*)\[([a-z#/@][^[]*?)])z^([\w.]*?)(\(.*?\))?$c               @   sF   e Zd ZU dZeed< ee ed< edddZeedddZ	d	S )
TagzA tag in console markup.name
parameters)returnc             C   s"   | j d kr| jS | j d| j  S )N )r   r   )self r   k/var/www/downstreamdata.science/rtclock/rtclock-venv/lib/python3.7/site-packages/pip/_vendor/rich/markup.py__str__   s    zTag.__str__c             C   s.   | j dkrd| j dS d| j d| j  dS )z*Get the string representation of this tag.N[]=)r   r   )r   r   r   r   markup!   s    z
Tag.markupN)
__name__
__module____qualname____doc__str__annotations__r	   r   propertyr   r   r   r   r   r      s   
r   z(\\*)(\[[a-z#/@][^[]*?]))r   _escaper   c             C   s"   t t tddd}||| } | S )zEscapes text so that it won't be interpreted as markup.

    Args:
        markup (str): Content to be inserted in to markup.

    Returns:
        str: Markup with square brackets escaped.
    )matchr   c             S   s   |   \}}| | d| S )z!Called by re.sub replace matches.\)groups)r(   backslashestextr   r   r   escape_backslashes=   s    z"escape.<locals>.escape_backslashes)r   r$   )r   r'   r-   r   r   r   escape0   s    
r.   )r   r   c             c   s   d}t }t}xt| D ]}| \}}}| \}}	||krR|| || dfV  |r|t|d\}
}|
r|d|
 dfV  ||
d 7 }|r||t|d dfV  |	}q|d\}}}|d|||r|ndfV  |	}qW |t| k r|| |d dfV  dS )zParse markup in to an iterable of tuples of (position, text, tag).

    Args:
        markup (str): A string containing console markup

    r   N   r)   r   )divmodr   RE_TAGSfinditerr*   spanlen	partition)r   position_divmod_Tagr(   	full_textescapestag_textstartendr+   escapedr,   equalsr   r   r   r   _parseF   s,    r@    T)r   styleemojiemoji_variantr   c                s6  t }d| kr(t|r|| |dn| |dS t|d}|j}tj}g j g }|j}	t}
t}tt	t
tf d fdd}xZt| D ]L\}}}|dk	r|dd}||r||n| q|dk	r|jd	r|jd
d  }|r4||}y||\}}W n0 tk
r0   td|j d| ddY nX n8y  \}}W n( tk
rj   td| ddY nX |jdr|jrnd}|j }t|}|dk	r| \}}|dkrdn|}yt|}W n| tk
r } z"td|d|jd|j W dd}~X Y n< tk
rJ } ztd|jd| dW dd}~X Y nX |rr|t|trd|n|ff}nd}|	|
|t|t|j|id n|	|
|t|t| q|||j|j}t||f qW t|}x6r \}}t|}|r|	|
||| qW t|ddd t dd|_!|S )a9  Render console markup in to a Text instance.

    Args:
        markup (str): A string containing console markup.
        emoji (bool, optional): Also render emoji code. Defaults to True.

    Raises:
        MarkupError: If there is a syntax error in the markup.

    Returns:
        Text: A test instance.
    r   )default_variant)rB   )
style_namer   c                s@   x2t tdD ] \}\}}|j| kr | S qW t| dS )z"Pop tag matching given style name.r   N)	enumeratereversedr   KeyError)rF   index_tag)popstyle_stackr   r   	pop_style   s    
zrender.<locals>.pop_styleNz\[/r   zclosing tag 'z' at position z doesn't match any open tagzclosing tag '[/]' at position z has nothing to close@rA   z()zerror parsing z in z; r   )metar<   )key)"r   r   appendr   	normalizerM   r   r   r$   r
   intr@   replacer   
startswithstriprI   r   r   
IndexErrorr   
RE_HANDLERr(   r*   r   SyntaxErrormsg	Exception
isinstancetupler4   sortedr   spans)r   rB   rC   rD   emoji_replacer,   rU   rV   rc   append_span_Spanr8   rO   r6   
plain_textrL   rF   r<   open_taghandler_namer   handler_matchmatch_parametersmeta_paramserrornormalized_tagtext_lengthr   )rM   rN   r   renderg   s    




,
rp   __main__z[red]Hello World[/red]z[magenta]Hello [b]World[/b]z9[bold]Bold[italic] bold and italic [/bold]italic[/italic]zDClick [link=https://www.willmcgugan.com]here[/link] to visit my Blogz+:warning-emoji: [bold red blink] DANGER![/])print)TableZMarkupResult)r   r   )padding)rA   TN)0reastr   operatorr   typingr   r   r   r   r   r	   r
   r   r   rC   r   errorsr   rB   r   r,   r   r   compileVERBOSEr1   r\   r   r$   _ReStringMatch_ReSubCallable_EscapeSubMethodsubr.   rW   r@   boolrp   r    ZMARKUPpip._vendor.richrr   pip._vendor.rich.tablers   gridr   add_rowr   r   r   r   <module>   sF   (
&#  x

