o
    žD®fÏ%  ã                   @  sä   d dl mZ d dlmZ d dl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< qJddd	„ZG dd„ deƒZeƒ ZdS )é    )Úannotations)Ú	Formatter)Ú	Generator)ÚBG_ANSI_COLORSÚFG_ANSI_COLORS)Ú_256_colorsé   )ÚStyleAndTextTuplesÚANSIÚansi_escapec                   @  s`   e Zd ZdZddd„Zdd	d
„Zd dd„Zd!dd„Zd!dd„Zd"dd„Z	d#dd„Z
d$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ÚstrÚreturnÚNonec                 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   ú[/home/ubuntu/webapp/venv/lib/python3.10/site-packages/prompt_toolkit/formatted_text/ansi.pyÚ__init__    s    
ÿzANSI.__init__úGenerator[None, str, None]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}|r‘d}g }	 dV }	|	 ¡ rX||	7 }n7| tt|p_dƒdƒ¡ |	dkrkd}n$|	dkry|  |¡ |  ¡ }n|	dkrŽt|d ƒD ]	}
| |df¡ qƒn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   5   s\   €ù


à€(´zANSI._parse_corotÚattrsú	list[int]c                 C  sx  |sdg}n	t |ddd… ƒ}|r:| ¡ }|tv r!t| | _n|tv r,t| | _n
|dkr5d| _n|dkr=d| _nù|dkrEd| _nñ|dkrMd| _	né|d	krUd| _	ná|d
kr]d| _
nÙ|dkred| _nÑ|dkrmd| _nÉ|dkrud| _nÁ|dkr}d| _n¹|dkr…d| _n±|dkrd| _	n©|dkr•d| _
n¡|dkrd| _n™|dkr¥d| _n‘|sÃd| _d| _d| _d| _d| _d| _d| _	d| _
d| _ns|dv r6t|ƒdkr6| ¡ }|dkrút|ƒdkrú|dkrì| ¡ }t |¡| _n|dkrú| ¡ }t |¡| _|dkr6t|ƒdkr6zd| ¡ d›| ¡ d›| ¡ d›}W n
 ty$   Y nw |dkr.|| _n|dkr6|| _|sdS dS )zH
        Taken a list of graphics attributes and apply changes.
        r   Néÿÿÿÿr   Té   é   é   é   é   é   é	   é   Fé   é   é   é   é   é   )é&   é0   rN   rO   é   ú#Ú02x)ÚlistÚpopÚ
_fg_colorsr   Ú
_bg_colorsr   r   r   r   r   r   r   r   Úlenr   ÚgetÚ
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__r	   c                 C  s   | j S ©N)r   rg   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   rl   rm   r   r   r    Úformat   s   zANSI.formatÚobjectc                 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 rj   )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__N)r   r   r   r   )r   r"   )r=   r>   r   r   )r   r   )r   r	   )rl   r   rm   r   r   r
   )r   rq   r   r
   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r   r1   r2   rh   rk   rp   rv   r   r   r   r    r
      s    


U
V


c                 C  ó   i | ]\}}||“qS r   r   ©rr   ÚkÚvr   r   r    Ú
<dictcomp>  ó    r   c                 C  r{   r   r   r|   r   r   r    r     r€   rQ   rR   Útextrq   r   r   c                 C  s   t | ƒ dd¡ dd¡S )z4
    Replace characters with a special meaning.
    r&   ú?ú)r   Úreplace)r   r   r   r    r     s   c                   @  s   e Zd Zd	dd„ZdS )
ÚANSIFormatterr   rq   Úformat_specr   r   c                 C  s   t t||ƒƒS rj   )r   rp   )r   r   r†   r   r   r    Úformat_field%  ri   zANSIFormatter.format_fieldN)r   rq   r†   r   r   r   )rw   rx   ry   r‡   r   r   r   r    r…   $  s    r…   N)r   rq   r   r   )Ú
__future__r   Ústringr   Útypingr   Úprompt_toolkit.output.vt100r   r   r   Ú_256_colors_tableÚbaser	   Ú__all__r
   ÚitemsrU   rV   Ú	enumerateÚcolorsr<   ÚrÚgÚbr   r…   rn   r   r   r   r    Ú<module>   s(    þ  

