o
    è©Zh&  ã                   @  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   úY/var/www/html/lang_env/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   ÚstyleZformatted_textZcsir   Zescaped_textZsquare_bracketÚcurrentÚparamsÚcharÚir   r   r    r   5   s\   €ù


à€(´zANSI._parse_corotÚattrsú	list[int]c                 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r„d| _n¬|dkrŒd| _	n¤|dkr”d| _
nœ|dkrœd| _n”|dkr¤d| _nŒ|sÂd| _d| _d| _d| _d| _d| _d| _	d| _
d| _nn|dv r0t|ƒdkr0| ¡ }|dkrùt|ƒ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   Néÿÿÿÿr   Té   é   é   é   é   é   é	   é   Fé   é   é   é   é   é   )é&   é0   rJ   rK   é   z#{:02x}{:02x}{:02x})ÚlistÚpopÚ
_fg_colorsr   Ú
_bg_colorsr   r   r   r   r   r   r   r   Úlenr   ÚgetÚformatÚ
IndexError)r   r9   ÚattrÚnr*   Z	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ÚreverseZ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   r`   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   re   rf   r   r   r    rS     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 rc   )r   )Ú.0r8   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"   )r9   r:   r   r   )r   r   )r   r	   )re   r   rf   r   r   r
   )r   ri   r   r
   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r   r1   r2   ra   rd   rS   rn   r   r   r   r    r
      s    


U
X


c                 C  ó   i | ]\}}||“qS r   r   ©rj   ÚkÚvr   r   r    Ú
<dictcomp>  ó    rw   c                 C  rs   r   r   rt   r   r   r    rw     rx   ú#Ú02xÚtextri   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   ri   Úformat_specr   r   c                 C  s   t t||ƒƒS rc   )r   rS   )r   r   r€   r   r   r    Úformat_field'  rb   zANSIFormatter.format_fieldN)r   ri   r€   r   r   r   )ro   rp   rq   r   r   r   r   r    r   &  s    r   N)r{   ri   r   r   )Ú
__future__r   Ústringr   Útypingr   Zprompt_toolkit.output.vt100r   r   r   Z_256_colors_tableÚbaser	   Ú__all__r
   ÚitemsrO   rP   Ú	enumerateÚcolorsr8   ÚrÚgÚbr   r   rg   r   r   r   r    Ú<module>   s(    þ  

