o
    ¯b  ã                   @   sv   d Z ddlZddlmZ eƒ ZG dd„ dƒZG dd„ dƒZd edjej	ƒ¡Z
i Zej	D ]ZeD ]Zeee< q0q,[dS )	zGModule to parse ANSI escape sequences

Maintainer: Jean-Paul Calderone
é    N)ÚLoggerc                   @   sN   e Zd ZdZdZedd„ eD ƒƒZeeeƒƒ\Z	Z
ZZZZZZdZdd„ ZdS )	Ú	ColorTextzb
    Represents an element of text along with the texts colors and
    additional attributes.
    )ÚbÚrÚgÚyÚlÚmÚcÚwc                 c   s   � | ]}|  ¡ V  qd S ©N)Úupper)Ú.0Úx© r   ú7/usr/lib/python3/dist-packages/twisted/conch/ui/ansi.pyÚ	<genexpr>   s   € zColorText.<genexpr>)ÚBlackÚRedÚGreenÚYellowÚBlueÚMagentaÚCyanÚWhitec	           	      C   sT   |||| _ | _| _|| _|| _|| _|| _|| _| jr(| j| j| _| _d S d S r   )ÚtextÚfgÚbgÚdisplayÚboldÚ	underlineÚflashÚreverse)	Úselfr   r   r   r   r   r    r!   r"   r   r   r   Ú__init__)   s   ÿzColorText.__init__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚCOLORSÚtupleÚBOLD_COLORSÚrangeÚlenÚBLACKÚREDÚGREENÚYELLOWÚBLUEÚMAGENTAÚCYANÚWHITEÚCOLOR_NAMESr$   r   r   r   r   r      s    r   c                   @   s€   e Zd ZdZdZdZdZdZdZeeeeefZ	dd„ Z
d	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zejfdd„Zdd„ ZdS )Ú
AnsiParserz&
    Parser class for ANSI codes.
    )ÚHÚfÚAÚBÚCÚDÚRÚsÚuÚdÚG)ÚJÚKÚP)Úhr   )Úp)r	   c                 C   sD   ||| _ | _| j | j| _| _d\| _| _| _| _d| _d| _	d S )N©r   r   r   r   é   Ú )
Ú	defaultFGÚ	defaultBGÚ	currentFGÚ	currentBGr   r!   r    r"   r   Úprepend)r#   rK   rL   r   r   r   r$   J   s
   
zAnsiParser.__init__c                 C   sŠ   d}d}d}t |ƒ}||k rC|dkr|| tv rd}n |r;| d|¡}|dkr/|||d…  S ||||…  }|}d}|d }||k s|S )zF
        Remove all ANSI color escapes from the given string.
        rJ   rI   r   úéÿÿÿÿN)r-   Ú_setsÚfind)r#   ÚstringÚresultÚshowÚiÚLÚnr   r   r   ÚstripEscapesQ   s"   õzAnsiParser.stripEscapesc                 C   ó   d S r   r   )r#   Úcolorstrr   r   r   ÚwriteStringg   ó   zAnsiParser.writeStringc           	      C   st  | j r| j | }d| _ | d¡}t|ƒdkr"|  |  |d ¡¡ dS |  |  |d ¡¡ |dd… D �]}t|ƒ}d}d}||k rS|| tjd vrKn|d7 }||k sA|s[d| _  dS |d dkrp|  |  ||d d… ¡¡ q2|dd… }|d8 }||d kr†d| _  dS t || d¡}|du r“q2|t	j
kr´|  |d|d … ¡ ||d d… }|  |  |¡¡ q2|t	jkrØ|d|d … ||d d… }}|  |¡ |  |  |¡¡ q2|t	jkrü|d|d … ||d d… }}|  |¡ |  |  |¡¡ q2|t	jk�r||d d… }|  |  |¡¡ q2||k�rd| | _ q2tjd	|| d
� ||d d… }|  |  |¡¡ q2dS )zK
        Turn a string input into a list of L{ColorText} elements.
        rJ   rP   rI   r   Nz[;?ú[z[z+Unhandled ANSI control type: {control_type})Úcontrol_type)rO   Úsplitr-   r]   Ú
formatTextrT   ÚdigitsÚ_setmapÚgetr7   Ú	COLOR_SETÚ
parseColorÚ
CURSOR_SETÚparseCursorÚ	ERASE_SETÚ
parseEraseÚMODE_SETÚ_logÚwarn)	r#   ÚstrÚpartsr?   rX   rW   ÚtypeÚcursorÚeraser   r   r   ÚparseStringj   sj   

ý

"

"

ÿÑzAnsiParser.parseStringc                 C   s¼  |dd… }|s
d}z
t t| d¡ƒ}W n ty.   tjd|d� | j| j| _| _	Y dS w |D ]ª}|dkrN| j| j| _| _	d\| _
| _| _| _d	| _q1|d	krVd	| _
q1d
|  kr`dkrhn n|d
 | _q1d|  krrdkrzn n|d | _	q1|dkrƒ| j| _q1|dkrŒ| j| _	q1|dkr”d	| _q1|dkrœd	| _q1|dkr¤d	| _q1|dkr¬d| _q1|dkr´d| _
q1|dkr¼d| _q1|dkrÄd| _q1|dkrÌd| _q1|dkrÔd	| _q1tjd|d� q1dS )z5
        Handle a single ANSI color sequence
        NrQ   Ú0ú;z)Invalid ANSI color sequence: {sequence!r})Úsequencer   rH   rI   é   é%   é(   é/   é'   é1   é   é   é   é   é   é   é   é   é   z*Unrecognised ANSI color command: {command})Úcommand)ÚmapÚintra   Ú
ValueErrorrm   ÚerrorrK   rL   rM   rN   r   r!   r    r"   r   Úblink)r#   ro   rp   r   r   r   r   rg   ©   sZ   ý

ÞzAnsiParser.parseColorc                 C   r[   r   r   )r#   rr   r   r   r   ri   Þ   r^   zAnsiParser.parseCursorc                 C   r[   r   r   )r#   rs   r   r   r   rk   á   r^   zAnsiParser.parseErasec                 C   s&   |rt j| S | jr|| pt j| S r   )r   r)   r   )r#   ÚvalueÚmodeÚBOLDr   r   r   Ú	pickColorä   s   
zAnsiParser.pickColorc              	   C   s4   t ||  | jd¡|  | jd¡| j| j| j| j| jƒS )Nr   rI   )	r   r�   rM   rN   r   r   r    r!   r"   )r#   r   r   r   r   rb   ê   s   øzAnsiParser.formatTextN)r%   r&   r'   r(   rh   rj   rl   Ú
ASSIGN_SETrf   ÚSETSr$   rZ   r]   rt   rg   ri   rk   r   r+   r�   rb   r   r   r   r   r7   4   s"    ?5r7   rJ   )r(   rT   Útwisted.loggerr   rm   r   r7   Újoinrˆ   r’   rR   rd   r?   r   r   r   r   r   Ú<module>   s   " D

ÿ