o
    Òó·i  ã                   @   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   ú[C:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\twisted/conch/ui/ansi.pyÚ	<genexpr>   s   € zColorText.<genexpr>)ZBlackZRedZGreenZYellowZBlueZMagentaZ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ÚWHITEZ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   rC   rD   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.
        rB   rA   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   Z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rKqS|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.
        rB   rH   rA   r   Nz[;?ú[z[z+Unhandled ANSI control type: {control_type})Zcontrol_type)rG   Úsplitr&   rT   Ú
formatTextrL   ÚdigitsÚ_setmapÚgetr/   Ú	COLOR_SETÚ
parseColorÚ
CURSOR_SETÚparseCursorÚ	ERASE_SETÚ
parseEraseÚMODE_SETÚ_logÚwarn)	r   ÚstrÚpartsr7   rP   rO   Ú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
        NrI   Ú0ú;z)Invalid ANSI color sequence: {sequence!r})Úsequencer   r@   rA   é   é%   é(   é/   é'   é1   é   é   é   é   é   é   é   é   é   z*Unrecognised ANSI color command: {command})Úcommand)ÚmapÚintrW   Ú
ValueErrorrc   ÚerrorrC   rD   rE   rF   r   r   r   r   r   Zblink)r   re   rf   r   r   r   r   r]   ©   sZ   ý

ÞzAnsiParser.parseColorc                 C   rS   r   r   )r   rh   r   r   r   r_   Þ   rU   zAnsiParser.parseCursorc                 C   rS   r   r   )r   ri   r   r   r   ra   á   rU   zAnsiParser.parseErasec                 C   s&   |rt j| S | jr|| pt j| S r   )r   r"   r   )r   ÚvalueÚmodeZBOLDr   r   r   Ú	pickColorä   s   
zAnsiParser.pickColorc              	   C   s4   t ||  | jd¡|  | jd¡| j| j| j| j| jƒS )Nr   rA   )	r   r„   rE   rF   r   r   r   r   r   )r   r   r   r   r   rX   ê   s   øzAnsiParser.formatTextN)r   r   r    r!   r^   r`   rb   Z
ASSIGN_SETr\   ÚSETSr   rR   rT   rj   r]   r_   ra   r   r$   r„   rX   r   r   r   r   r/   4   s"    ?5r/   rB   )r!   rL   Ztwisted.loggerr   rc   r   r/   Újoinr~   r…   rJ   rZ   r7   r   r   r   r   r   Ú<module>   s   " D

ÿ