a
    œòJbi7  ã                   @   sâ   d Z ddlmZ ddlZddlmZ ddlmZ edg d¢ƒZedg d	¢ƒZ	ed
g d	¢ƒZ
eddgƒZeddgƒZeddgƒZeddgƒZdZde ZdZdeef Ze de ¡Ze d¡ZG dd„ deƒZG dd„ deƒZdS )zJ Utilities for processing ANSI escape codes and special ASCII characters.
é    )Ú
namedtupleN)ÚQtGui)Ú
dark_styleÚEraseAction)ÚactionÚareaÚerase_toÚ
MoveAction)r   ÚdirZunitÚcountÚScrollActionÚCarriageReturnActionr   ÚNewLineActionÚ
BeepActionÚBackSpaceActionZABCDEFGHJKSTfmnsuz\[(.*?)([%s])z\](.*?)[]z?(%s|%s)?z(||(?!
)|?
)|(?:%s)z([])c                   @   s\   e Zd ZdZdZi Zdd„ Zdd„ Zdd„ Zg fd	d
„Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚAnsiCodeProcessorzœ Translates special ASCII characters and ANSI escape codes into readable
        attributes. It also supports a few non-standard, xterm-specific codes.
    Fc                 C   s   g | _ | j ¡ | _|  ¡  d S ©N)ÚactionsÚdefault_color_mapÚcopyÚ	color_mapÚ	reset_sgr©Úself© r   ú<lib/python3.9/site-packages/qtconsole/ansi_code_processor.pyÚ__init__J   s    zAnsiCodeProcessor.__init__c                 C   s(   d| _ d| _d| _d| _d| _d| _dS )z; Reset graphics attributs to their default values.
        r   FN)Ú	intensityÚitalicÚboldÚ	underlineÚforeground_colorÚbackground_colorr   r   r   r   r   O   s    zAnsiCodeProcessor.reset_sgrc           
   	   c   s  g | _ d}t|ƒdkr&|d dkr&dnd}|dur>|dd… n|}t |¡D ]r}||| ¡ … }t | j|¡}|sz| j r†|V  g | _ | ¡ }dd„ | 	¡ D ƒ}|d }|dkrÎ| j  
tdƒ¡ dV  g | _ qL|d	krô| j  
td
ƒ¡ dV  g | _ qL|dkr| j  
tdƒ¡ dV  g | _ qL|dks0|dkrN| j  
tdƒ¡ |V  g | _ qLdd„ |d  d¡D ƒ}	| d¡r¬zttt|	ƒƒ}	W n ty˜   Y n0 |  |d |	¡ qL| d¡rL|  |	¡ qL||d… }t | j|¡}|sê| j rð|V  |dur| j  
tdƒ¡ |V  dS )zC Yields substrings for which the same escape code applies.
        r   éÿÿÿÿÚ
Nc                 S   s   g | ]}|d ur|‘qS r   r   )Ú.0Úgr   r   r   Ú
<listcomp>m   ó    z2AnsiCodeProcessor.split_string.<locals>.<listcomp>úZbeepúzcarriage-returnúZ	backspacez
Únewlinec                 S   s   g | ]}|r|‘qS r   r   )r%   Zparamr   r   r   r'   €   r(   é   ú;ú[é   ú])r   ÚlenÚANSI_OR_SPECIAL_PATTERNÚfinditerÚstartÚSPECIAL_PATTERNÚsubÚ_replace_specialÚendÚgroupsÚappendr   r   r   r   ÚsplitÚ
startswithÚlistÚmapÚintÚ
ValueErrorÚset_csi_codeÚset_osc_code)
r   Ústringr5   Z	last_charÚmatchÚrawZ	substringr:   Zg0Úparamsr   r   r   Úsplit_stringY   sZ     



zAnsiCodeProcessor.split_stringc                 C   sö   |dkr&|r|   |¡ qò|   dg¡ nÌ|dks6|dkr¬|rB|d nd}d|  krZdkròn qò|dkrjdnd}|dkr|d}n|d	krŠd
}n|dkr–d}| j td||ƒ¡ nF|dks¼|dkrò|dkrÈdnd}|rØ|d nd	}| j td|d|ƒ¡ dS )a3   Set attributes based on CSI (Control Sequence Introducer) code.

        Parameters
        ----------
        command : str
            The code identifier, i.e. the final character in the sequence.

        params : sequence of integers, optional
            The parameter codes for the command.
        Úmr   ÚJÚKr0   ZscreenÚliner9   r-   r5   ÚallZeraseÚSÚTZupÚdownÚscrollN)Úset_sgr_coder   r;   r   r   )r   ÚcommandrG   Úcoder   r   r
   r   r   r   r   rB   ˜   s.    ÿÿzAnsiCodeProcessor.set_csi_codec              	   C   s|   zt | d¡ƒ}W n ttfy*   Y dS 0 |dkrxz,t | d¡ƒ}| d¡}|  |¡| j|< W n ttfyv   Y n0 dS )zÀ Set attributes based on OSC (Operating System Command) parameters.

        Parameters
        ----------
        params : sequence of str
            The parameters for the command.
        r   Né   )r@   ÚpopÚ
IndexErrorrA   Ú_parse_xterm_color_specr   )r   rG   rS   ÚcolorÚspecr   r   r   rC   ¼   s    
zAnsiCodeProcessor.set_osc_codec                 C   sà  |sdS |  d¡}|dkr&|  ¡  n¬|dkrF| jr<d| _nd| _nŒ|dkrXd| _nz|dkrjd| _nh|dkr|d| _nV|dkr”d| _d	| _n>|d
kr¦d	| _n,|dkr¸d	| _n|dkrÔ|dkrÔ|d | _nþ|dkr2|r2|  d¡}|dkr|r|  d¡| _n$|dkrÒ|dd… | _g |dd…< n |dkrDd| _nŽ|dkrd|dkrd|d | _nn|dkrÂ|rÂ|  d¡}|dkrœ|rœ|  d¡| _n$|dkrÒ|dd… | _g |dd…< n|dkrÒd| _|  	|¡ dS )ad   Set attributes based on SGR (Select Graphic Rendition) codes.

        Parameters
        ----------
        params : sequence of ints
            A list of SGR codes for one or more SGR commands. Usually this
            sequence will have one element per command, although certain
            xterm-specific commands requires multiple elements.
        Nr   r-   Tr0   é   rU   é   Fé   é   é   é%   é&   é   é'   é(   é/   é0   é1   )
rV   r   Úbold_text_enabledr   r   r   r    r!   r"   rR   )r   rG   rT   Z_color_typer   r   r   rR   Ò   sZ    













zAnsiCodeProcessor.set_sgr_codec                 C   sh   |  d¡r*ttdd„ |dd …  d¡ƒƒS |  d¡rTttdd„ |dd …  d¡ƒƒS |d	krdtd
ƒ‚|S )Nzrgb:c                 S   s
   t | dƒS )Né   )r@   ©Úxr   r   r   Ú<lambda>  r(   z;AnsiCodeProcessor._parse_xterm_color_spec.<locals>.<lambda>rU   ú/zrgbi:c                 S   s   t t| ƒd ƒS )Néÿ   )r@   Úfloatrj   r   r   r   rl     r(   rb   ú?zUnsupported xterm color spec)r=   Útupler?   r<   rA   )r   rZ   r   r   r   rX     s    
 

ÿz)AnsiCodeProcessor._parse_xterm_color_specc                 C   s,   |  d¡}|dkr(| j tddddƒ¡ dS )Nr-   úrQ   rP   ZpageÚ )Úgroupr   r;   r   )r   rE   Zspecialr   r   r   r8   !  s    
z"AnsiCodeProcessor._replace_specialN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rh   r   r   r   rH   rB   rC   rR   rX   r8   r   r   r   r   r   9   s   
?$E
r   c                   @   sX   e Zd ZdZdddddddd	d	d
dddddddœZe ¡ Zddd„Zdd„ Zdd„ Z	dS )ÚQtAnsiCodeProcessorz9 Translates ANSI escape codes into QTextCharFormats.
    ÚblackZdarkredZ	darkgreenZbrownZdarkblueZ
darkvioletZ	steelblueZgreyZredZlimeZyellowZdeepskyblueZmagentaZcyanZwhite)r   r-   r0   r[   rU   rb   é   é   é   é	   é
   é   é   é   é   é   r   c                 C   sz   t |tƒr2|dk r"|dkr"|d7 }| j |d¡}nt |ttfƒrF|}ndS t |tƒr^t |¡S t |ttfƒrvtj|Ž S dS )zp Returns a QColor for a given color code or rgb list, or None if one
            cannot be constructed.
        r}   r   N)	Ú
isinstancer@   r   Úgetrq   r>   Ústrr   ZQColor)r   rY   r   Úconstructorr   r   r   Ú	get_colorB  s    



zQtAnsiCodeProcessor.get_colorc                 C   sŒ   t  ¡ }|  | j| j¡}|dur*| |¡ |  | j| j¡}|durL| |¡ | jrb| 	t j
j¡ n| 	t j
j¡ | | j¡ | | j¡ |S )zN Returns a QTextCharFormat that encodes the current style attributes.
        N)r   ZQTextCharFormatr‰   r!   r   ZsetForegroundr"   ZsetBackgroundr   ZsetFontWeightZQFontZBoldZNormalZsetFontItalicr   ZsetFontUnderliner    )r   ÚformatZqcolorr   r   r   Ú
get_format]  s    

zQtAnsiCodeProcessor.get_formatc                 C   s\   | j  ¡ | _t|ƒsJtdƒD ]}| j| | j|d < qd | jd< | jd< | j | j¡ dS )zo
        Given a syntax style, attempt to set a color map that will be
        aesthetically pleasing.
        r}   rz   r|   r„   N)Údarkbg_color_mapr   r   r   Úranger   Úupdate)r   ZstyleÚir   r   r   Úset_background_colorv  s    z(QtAnsiCodeProcessor.set_background_colorN)r   )
ru   rv   rw   rx   rŒ   r   r   r‰   r‹   r   r   r   r   r   ry   (  s,   ð
ry   )rx   Úcollectionsr   ÚreZqtpyr   Zqtconsole.stylesr   r   r	   r   r   r   r   r   ZCSI_COMMANDSZCSI_SUBPATTERNZOSC_SUBPATTERNZANSI_PATTERNÚcompiler3   r6   Úobjectr   ry   r   r   r   r   Ú<module>   s,   ÿ
 p