U
    Òb‡hÏ%  ã                   @  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< q”dddœ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œdd„Zddœd	d
„Zdddœdd„Zddœdd„Zddœdd„Zddœdd„Z	ddd dœdd„Z
dd 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.
    ÚstrÚNone)ÚvalueÚreturnc                 C  sl   || _ g | _d | _d | _d| _d| _d| _d| _d| _d| _	d| _
|  ¡ }| d ¡ |D ]}| |¡ qXd S )NF)r   Ú_formatted_textÚ_colorÚ_bgcolorÚ_boldÚ
_underlineÚ_strikeÚ_italicÚ_blinkÚ_reverseÚ_hiddenÚ_parse_corotÚsend)Úselfr   ÚparserÚc© r   úF/tmp/pip-unpacked-wheel-9s95tbmv/prompt_toolkit/formatted_text/ansi.pyÚ__init__    s    
zANSI.__init__zGenerator[None, str, None])r   c                 c  s>  d}| j }d}dV }|dkrXd}|dkrXdV }|dkrN| d|f¡ dV }qXq ||7 }q |dkrxdV }|dkr
d	}q„q
n|d
kr„d	}|r*d}g }dV }	|	 ¡ rª||	7 }q’| tt|p¸dƒdƒ¡ |	dkrÐd}q’|	dkrð|  |¡ |  ¡ }q8q’|	dkr(t|d ƒD ]}
| |df¡ qq8q’q8q’q
| ||f¡ q
dS )zB
        Coroutine that parses the ANSI escape sequences.
        Ú FNúúz[ZeroWidthEscape]úú[Tõ   Â›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   sN    



zANSI._parse_corotz	list[int])Úattrsr   c                 C  sz  |sdg}nt |ddd… ƒ}|rv| ¡ }|tkr@t| | _q|tkrTt| | _q|dkrdd| _q|dkrtd| _q|dkr„d| _q|dkr”d| _	q|d	kr¤d| _	q|d
kr´d| _
q|dkrÄd| _q|dkrÔd| _q|dkräd| _q|dk röd| _q|dkrd| _q|dkrd| _	q|dkr,d| _
q|dkr>d| _q|dkrPd| _q|sŽd| _d| _d| _d| _d| _d| _d| _	d| _
d| _q|dkrt|ƒdkr| ¡ }|dkr t|ƒdkr |dkrâ| ¡ }t |¡| _n|dkr | ¡ }t |¡| _|dkrt|ƒdkrz(d| ¡ d›| ¡ d›| ¡ d›}W n tk
rR   Y qX |dkrf|| _q|dkr|| _qdS )zH
        Taken a list of graphics attributes and apply changes.
        r   Néÿÿÿÿr   Té   é   é   é   é   é   é	   é   Fé   é   é   é   é   é   )é&   é0   rH   rI   é   ú#Ú02x)ÚlistÚpopÚ
_fg_colorsr   Ú
_bg_colorsr   r   r   r   r   r   r   r   Úlenr   ÚgetÚ
IndexError)r   r8   ÚattrÚnr)   Z	color_strr   r   r    r0   Š   sˆ    







"ÿ
zANSI._select_graphic_renditionc                 C  s¦   g }| j r| | j ¡ | jr,| d| j ¡ | jr<| d¡ | jrL| d¡ | jr\| d¡ | jrl| d¡ | jr|| d¡ | jrŒ| d¡ | j	rœ| d¡ d	 
|¡S )
zW
        Turn current style flags into a string for usage in a formatted text.
        zbg:ZboldZ	underlineÚstrikeZitalicZblinkÚreverseÚhiddenr+   )r   r,   r   r   r   r   r   r   r   r   Újoin)r   Úresultr   r   r    r1   à   s(    






zANSI._create_style_stringc                 C  s   d| j ›dS )NzANSI(ú))r   ©r   r   r   r    Ú__repr__ú   s    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Úkwargsr   c                 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   r`   ra   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 r^   )r   )Ú.0r7   r   r   r    Ú	<genexpr>  s     zANSI.__mod__.<locals>.<genexpr>)Ú
isinstanceÚtupler
   r   )r   r   r   r   r    Ú__mod__  s    
zANSI.__mod__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r   r0   r1   r]   r_   rd   rj   r   r   r   r    r
      s   UVc                 C  s   i | ]\}}||“qS r   r   ©rf   ÚkÚvr   r   r    Ú
<dictcomp>  s      rr   c                 C  s   i | ]\}}||“qS r   r   ro   r   r   r    rr     s      rK   rL   re   r   )Útextr   c                 C  s   t | ƒ dd¡ dd¡S )z4
    Replace characters with a special meaning.
    r%   ú?ú)r   Úreplace)rs   r   r   r    r     s    c                   @  s   e Zd Zddddœdd„ZdS )ÚANSIFormatterre   r   )r   Úformat_specr   c                 C  s   t t||ƒƒS r^   )r   rd   )r   r   rx   r   r   r    Úformat_field%  s    zANSIFormatter.format_fieldN)rk   rl   rm   ry   r   r   r   r    rw   $  s   rw   N)Ú
__future__r   Ústringr   Útypingr   Zprompt_toolkit.output.vt100r   r   r   Z_256_colors_tableÚbaser	   Ú__all__r
   ÚitemsrO   rP   Ú	enumerateÚcolorsr7   ÚrÚgÚbr   rw   rb   r   r   r   r    Ú<module>   s&   þ  