a
    êÑT_v+  ã                   @   sj   d Z ddlZddlmZ ddlmZ ddlmZ ddgZG dd	„ d	ƒZ	G d
d„ deƒZ
G dd„ de
ƒZdS )a¿  
    pygments.formatters.terminal256
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Formatter for 256-color terminal output with ANSI sequences.

    RGB-to-XTERM color conversion routines adapted from xterm256-conv
    tool (http://frexx.de/xterm-256-notes/data/xterm256-conv2.tar.bz2)
    by Wolfgang Frisch.

    Formatter version 1.

    :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    N)Ú	Formatter)Úcodes)Ú
ansicolorsÚTerminal256FormatterÚTerminalTrueColorFormatterc                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚEscapeSequenceNFc                 C   s"   || _ || _|| _|| _|| _d S ©N)ÚfgÚbgÚboldÚ	underlineÚitalic)Úselfr	   r
   r   r   r   © r   úA/usr/lib/python3/dist-packages/pygments/formatters/terminal256.pyÚ__init__&   s
    zEscapeSequence.__init__c                 C   s   t |ƒrdd |¡ d S dS )Nz[ú;ÚmÚ )ÚlenÚjoin©r   Úattrsr   r   r   Úescape-   s    zEscapeSequence.escapec                 C   sø   g }| j d urb| j tv rLt| j  dd¡ }d|v r8d| _| |dd… ¡ n| ddd	| j  f¡ | jd ur¾| jtv r¨t| j dd¡ }| tt	|dd… ƒd
 ƒ¡ n| ddd	| j f¡ | jrÎ| d¡ | j
rÞ| d¡ | jrî| d¡ |  |¡S )NÚansir   z;01mTé   é   Ú38Ú5z%ié
   Ú48Ú01Ú04Ú03)r	   r   r   Úreplacer   ÚappendÚextendr
   ÚstrÚintr   r   r   )r   r   Zescr   r   r   Úcolor_string2   s(    



 


zEscapeSequence.color_stringc              	   C   s®   g }| j r<| ddt| j d ƒt| j d ƒt| j d ƒf¡ | jrt| ddt| jd ƒt| jd ƒt| jd ƒf¡ | jr„| d¡ | jr”| d¡ | jr¤| d	¡ |  |¡S )
Nr   Ú2r   é   r   r    r!   r"   r#   )	r	   r&   r'   r
   r   r%   r   r   r   r   r   r   r   Útrue_color_stringL   s    22


z EscapeSequence.true_color_stringc                 C   sR   g }| j d ur| d¡ | jd ur,| d¡ | js>| js>| jrH| d¡ |  |¡S )NZ39Z49Z00)r	   r%   r
   r   r   r   r   r   r   r   r   Úreset_stringZ   s    




zEscapeSequence.reset_string)NNFFF)Ú__name__Ú
__module__Ú__qualname__r   r   r)   r,   r-   r   r   r   r   r   %   s
   
r   c                   @   sX   e Zd ZdZdZg d¢Zg Zdd„ Zdd„ Zdd	„ Z	d
d„ Z
dd„ Zdd„ Zdd„ ZdS )r   aP  
    Format tokens with ANSI color sequences, for output in a 256-color
    terminal or console.  Like in `TerminalFormatter` color sequences
    are terminated at newlines, so that paging the output works correctly.

    The formatter takes colors from a style defined by the `style` option
    and converts them to nearest ANSI 256-color escape sequences. Bold and
    underline attributes from the style are preserved (and displayed).

    .. versionadded:: 0.9

    .. versionchanged:: 2.2
       If the used style defines foreground colors in the form ``#ansi*``, then
       `Terminal256Formatter` will map these to non extended foreground color.
       See :ref:`AnsiTerminalStyle` for more information.

    .. versionchanged:: 2.4
       The ANSI color names have been updated with names that are easier to
       understand and align with colornames of other projects and terminals.
       See :ref:`this table <new-ansi-color-names>` for more information.


    Options accepted:

    `style`
        The style to use, can be a string or a Style subclass (default:
        ``'default'``).
    ZTerminal256)Zterminal256Z
console256Z256c                 K   sV   t j| fi |¤Ž g | _i | _i | _d|v| _d|v| _d|v| _|  ¡  |  	¡  d S )NZnoboldZnounderlineZnoitalic)
r   r   Úxterm_colorsÚ
best_matchÚstyle_stringÚuseboldÚuseunderlineÚ	useitalicÚ_build_color_tableÚ_setup_styles)r   Zoptionsr   r   r   r   †   s    


zTerminal256Formatter.__init__c                 C   sD  | j  d¡ | j  d¡ | j  d¡ | j  d¡ | j  d¡ | j  d¡ | j  d¡ | j  d¡ | j  d	¡ | j  d
¡ | j  d¡ | j  d¡ | j  d¡ | j  d¡ | j  d¡ | j  d¡ d}tdƒD ]B}||d d  }||d d  }||d  }| j  |||f¡ qÌtddƒD ]$}d|d  }| j  |||f¡ qd S )N)r   r   r   )éÍ   r   r   )r   r9   r   )r9   r9   r   )r   r   éî   )r9   r   r9   )r   r9   r9   )éå   r;   r;   )é   r<   r<   )éÿ   r   r   )r   r=   r   )r=   r=   r   )é\   r>   r=   )r=   r   r=   )r   r=   r=   )r=   r=   r=   )r   é_   é‡   é¯   é×   r=   éÙ   é$   é   r+   é   é   r   )r1   r%   Úrange)r   Z
valuerangeÚiÚrÚgÚbÚvr   r   r   r7   ”   s2    z'Terminal256Formatter._build_color_tablec                 C   sr   d}d}t ddƒD ]Z}| j| }||d  }||d  }	||d  }
|| |	|	  |
|
  }||k r|}|}q|S )Ni r   éþ   r+   r   )rH   r1   )r   rJ   rK   rL   ZdistanceÚmatchrI   ÚvaluesZrdÚgdZbdÚdr   r   r   Ú_closest_color¸   s    
z#Terminal256Formatter._closest_colorc                 C   s’   | j  |d ¡}|tv r$|}|| j |< |d u rŽztt|ƒdƒ}W n tyT   d}Y n0 |d? d@ }|d? d@ }|d@ }|  |||¡}|| j |< |S )Né   r   r=   rG   )r2   Úgetr   r(   r'   Ú
ValueErrorrS   )r   ÚcolorÚindexÚrgbrJ   rK   rL   r   r   r   Ú_color_indexÉ   s    


z!Terminal256Formatter._color_indexc                 C   sÔ   | j D ]È\}}tƒ }|d r.|  |d ¡|_n|d rF|  |d ¡|_|d r`|  |d ¡|_n|d rx|  |d ¡|_| jrŒ|d rŒd|_| jr |d r d|_| j	r´|d r´d|_
| ¡ | ¡ f| jt|ƒ< qd S )	NZ	ansicolorrW   ZbgansicolorÚbgcolorr   Tr   r   )Ústyler   rZ   r	   r
   r4   r   r5   r   r6   r   r)   r-   r3   r'   ©r   ÚttypeZndefr   r   r   r   r8   Ü   s&    ÿz"Terminal256Formatter._setup_stylesc                 C   s   t  | ||¡S r   )r   Úformat)r   ÚtokensourceÚoutfiler   r   r   r_   ñ   s    zTerminal256Formatter.formatc           
   	   C   sÂ   |D ]¸\}}d}|r®|r®zt| j t|ƒ \}}| d¡}|d d… D ]$}	|	r\| ||	 | ¡ | d¡ qB|d r†| ||d  | ¡ d}W q tyª   |d d… }Y q0 q|r| |¡ qd S )NTÚ
éÿÿÿÿF)r3   r'   ÚsplitÚwriteÚKeyError)
r   r`   ra   r^   ÚvalueZ	not_foundZonZoffZsplÚliner   r   r   Úformat_unencodedô   s"    
z%Terminal256Formatter.format_unencodedN)r.   r/   r0   Ú__doc__ÚnameÚaliasesÚ	filenamesr   r7   rS   rZ   r8   r_   ri   r   r   r   r   r   e   s   $c                   @   s8   e Zd ZdZdZg d¢Zg Zdd„ Zdd„ Zdd	„ Z	d
S )r   a}  
    Format tokens with ANSI color sequences, for output in a true-color
    terminal or console.  Like in `TerminalFormatter` color sequences
    are terminated at newlines, so that paging the output works correctly.

    .. versionadded:: 2.1

    Options accepted:

    `style`
        The style to use, can be a string or a Style subclass (default:
        ``'default'``).
    ZTerminalTrueColor)Zterminal16mZ
console16mZ16mc                 C   s   d S r   r   )r   r   r   r   r7   $  s    z-TerminalTrueColorFormatter._build_color_tablec                 C   sR   zt t|ƒdƒ}W n ty&   Y d S 0 |d? d@ }|d? d@ }|d@ }|||fS )NrT   r=   rG   )r(   r'   rV   )r   rW   rY   rJ   rK   rL   r   r   r   Ú_color_tuple'  s    z'TerminalTrueColorFormatter._color_tuplec                 C   s    | j D ]”\}}tƒ }|d r,|  |d ¡|_|d rD|  |d ¡|_| jrX|d rXd|_| jrl|d rld|_| j	r€|d r€d|_
| ¡ | ¡ f| jt|ƒ< qd S )NrW   r[   r   Tr   r   )r\   r   rn   r	   r
   r4   r   r5   r   r6   r   r,   r-   r3   r'   r]   r   r   r   r8   1  s    ÿz(TerminalTrueColorFormatter._setup_stylesN)
r.   r/   r0   rj   rk   rl   rm   r7   rn   r8   r   r   r   r   r     s   
)rj   ÚsysZpygments.formatterr   Zpygments.consoler   Zpygments.styler   Ú__all__r   r   r   r   r   r   r   Ú<module>   s   @ .