o
    ˷e&                     @   s   d dl mZ d dlmZmZmZmZmZ d dlm	Z	m
Z
 d dlmZ ddlmZ ddgZG d	d dZd
d e
 D Zdd e	 D Zi ZeejD ]\Z\ZZZdedededee< qLdedefddZG dd deZe ZdS )    )	Formatter)	GeneratorListOptionalTupleUnion)BG_ANSI_COLORSFG_ANSI_COLORS)_256_colors   )StyleAndTextTuplesANSIansi_escapec                   @   s   e Zd ZdZdeddfddZdededf fddZd	ee	 ddfd
dZ
defddZdefddZdefddZdededd fddZdedd fddZdS )r   a  
    ANSI formatted text.
    Take something ANSI escaped text, for use as a formatted string. E.g.

    ::

        ANSI('\x1b[31mhello \x1b[32mworld')

    Characters between ``\001`` and ``\002`` are supposed to have a zero width
    when printed, but these are literally sent to the terminal output. This can
    be used for instance, for inserting Final Term prompt commands.  They will
    be translated into a prompt_toolkit '[ZeroWidthEscape]' fragment.
    valuereturnNc                 C   sl   || _ g | _d | _d | _d| _d| _d| _d| _d| _d| _	d| _
|  }|d  |D ]}|| q,d S )NF)r   _formatted_text_color_bgcolor_bold
_underline_strike_italic_blink_reverse_hidden_parse_corotsend)selfr   parserc r    Y/var/www/ideatree/venv/lib/python3.10/site-packages/prompt_toolkit/formatted_text/ansi.py__init__   s    
zANSI.__init__c                 c   s2   d}| j }	 d}dV }|dkr0d}|dkr0dV }|dkr(|d|f dV }n||7 }|dks|dkr?dV }|d	kr>d}nq|d
krEd}|rd}g }	 dV }	|	 rX||	7 }n7|tt|p_dd |	dkrkd}n$|	dkry| | |  }n|	dkrt|d D ]	}
||df qnnqLn|||f q)zB
        Coroutine that parses the ANSI escape sequences.
         TFNz[ZeroWidthEscape][   r   i'  ;mC )r   appendisdigitminint_select_graphic_rendition_create_style_stringrange)r   styleformatted_textcsir   escaped_textsquare_bracketcurrentparamscharir    r    r!   r   3   s\   


(zANSI._parse_corotattrsc                 C   sl  |sdg}n	t |ddd }|r4| }|tv r!t| | _n|tv r,t| | _n|dkr4d| _n|dkr<d| _n|dkrDd| _n|dkrLd| _	n|d	krTd| _	n|d
kr\d| _
n|dkrdd| _n|dkrld| _n|dkrtd| _n|dkr|d| _n|dkrd| _n|dkrd| _	n|dkrd| _
n|dkrd| _n|dkrd| _n|sd| _d| _d| _d| _d| _d| _d| _	d| _
d| _nn|dv r0t|dkr0| }|dkrt|dkr|dkr| }t|| _n|dkr| }t|| _|dkr0t|dkr0zd| | | }W n
 ty   Y nw |dkr(|| _n|dkr0|| _|sdS dS )zH
        Taken a list of graphics attributes and apply changes.
        r   Nr   T                  	      F                  )&   0   rM   rN      z#{:02x}{:02x}{:02x})listpop
_fg_colorsr   
_bg_colorsr   r   r   r   r   r   r   r   lenr
   getformat
IndexError)r   r=   attrnr*   	color_strr    r    r!   r1      s   

zANSI._select_graphic_renditionc                 C   s   g }| j r|| j  | jr|d| j  | jr|d | jr&|d | jr.|d | jr6|d | jr>|d | jrF|d | j	rN|d d	
|S )
zW
        Turn current style flags into a string for usage in a formatted text.
        zbg:bold	underlinestrikeitalicblinkreversehiddenr,   )r   r-   r   r   r   r   r   r   r   r   join)r   resultr    r    r!   r2      s(   







zANSI._create_style_stringc                 C   s   d| j dS )NzANSI())r   r   r    r    r!   __repr__      zANSI.__repr__c                 C   s   | j S N)r   re   r    r    r!   __pt_formatted_text__   s   zANSI.__pt_formatted_text__argskwargsc                 O   s   t t| j||S )z
        Like `str.format`, but make sure that the arguments are properly
        escaped. (No ANSI escapes can be injected.)
        )r   	FORMATTERvformatr   )r   rj   rk   r    r    r!   rV      s   zANSI.formatc                 C   s0   t |ts|f}tdd |D }t| j| S )z+
        ANSI('<b>%s</b>') % value
        c                 s   s    | ]}t |V  qd S rh   )r   ).0r<   r    r    r!   	<genexpr>  s    zANSI.__mod__.<locals>.<genexpr>)
isinstancetupler   r   )r   r   r    r    r!   __mod__  s   
zANSI.__mod__)__name__
__module____qualname____doc__strr"   r   r   r   r0   r1   r2   rf   r   ri   rV   objectrr   r    r    r    r!   r      s    UXc                 C      i | ]\}}||qS r    r    rn   kvr    r    r!   
<dictcomp>      r}   c                 C   ry   r    r    rz   r    r    r!   r}     r~   #02xtextr   c                 C   s   t | ddddS )z4
    Replace characters with a special meaning.
    r&   ?)rw   replace)r   r    r    r!   r     s   c                   @   s"   e Zd ZdededefddZdS )ANSIFormatterr   format_specr   c                 C   s   t t||S rh   )r   rV   )r   r   r   r    r    r!   format_field%  rg   zANSIFormatter.format_fieldN)rs   rt   ru   rx   rw   r   r    r    r    r!   r   $  s    r   N)stringr   typingr   r   r   r   r   prompt_toolkit.output.vt100r   r	   r
   _256_colors_tablebaser   __all__r   itemsrR   rS   	enumeratecolorsr<   rgbrx   rw   r   r   rl   r    r    r    r!   <module>   s&      
