U
    
W[                     @   sp   d Z ddlZddlm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< qZqR[dS )	zGModule to parse ANSI escape sequences

Maintainer: Jean-Paul Calderone
    N)logc                   @   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   g | ]}|  qS  )upper).0xr   r   7/usr/lib/python3/dist-packages/twisted/conch/ui/ansi.py
<listcomp>   s     zColorText.<listcomp>)ZBlackZRedZGreenZYellowZBlueZMagentaZCyanZWhitec	           	      C   sP   |||  | _ | _| _|| _|| _|| _|| _|| _| jrL| j| j | _| _d S N)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lenZBLACKZREDZGREENZYELLOWZBLUEZMAGENTAZCYANZ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   r:   r;   r   r   r   r   @   s
    zAnsiParser.__init__c                 C   s   d}d}d}t |}||k r|dkr6|| tkr6d}n@|rv|d|}|dkr^|||d  S ||||  }|}d}|d }q|S )zF
        Remove all ANSI color escapes from the given string.
        r9   r8   r   N)r%   _setsfind)r   stringresultZshowiLnr   r   r   stripEscapesH   s     
zAnsiParser.stripEscapesc                 C   s   d S r   r   )r   Zcolorstrr   r   r   writeString^   s    zAnsiParser.writeStringc           	      C   s|  | j r| j | }d| _ |d}t|dkrD| | |d  n4| | |d  |dd D ]}t|}d}d}||k r|| tjd krq|d7 }qz|sd| _  dS |d dkr| | ||d d  qdn|dd }|d8 }||d kr
d| _  dS t|| d}|dkr&qd|t	j
krj| |d|d   ||d d }| | | qd|t	jkr|d|d  ||d d  }}| | | | | qd|t	jkr|d|d  ||d d  }}| | | | | qd|t	jkr,||d d }| | | qd||krBd| | _ qdtd	|| f  ||d d }| | | qddS )
zK
        Turn a string input into a list of L{ColorText} elements.
        r9   r?   r8   r   Nz[;?[z[zUnhandled ANSI control type: %c)r>   splitr%   rI   
formatTextrC   Zdigits_setmapgetr&   	COLOR_SET
parseColor
CURSOR_SETparseCursor	ERASE_SET
parseEraseMODE_SETr   msg)	r   strpartsr.   rF   rE   typecursoreraser   r   r   parseStringa   sb    



"
"

zAnsiParser.parseStringc                 C   s  |dd }|sd}zt t|d}W n> tk
rf   tdt||f  | j| j | _	| _
Y dS X |D ]p}|dkr| j| j | _	| _
d\| _| _| _| _d| _ql|dkrd| _qld	|  krd
krn n|d	 | _	qld|  k rdkrn n|d | _
ql|dkr| j| _	ql|dkr,| j| _
ql|dkr>d| _ql|dkrPd| _ql|dkrbd| _ql|dkrtd| _ql|dkrd| _ql|dkrd| _ql|dkrd| _ql|dkrd| _ql|dkrd| _qltd|f  qldS )z5
        Handle a single ANSI color sequence
        Nr@   0;z$Invalid ANSI color sequence (%d): %sr   r7   r8      %   (   /   '   1                              z#Unrecognised ANSI color command: %d)mapintrK   
ValueErrorr   rV   r%   r:   r;   r<   r=   r   r   r   r   r   Zblink)r   rW   rX   r   r   r   r   rP      sV    













zAnsiParser.parseColorc                 C   s   d S r   r   )r   rZ   r   r   r   rR      s    zAnsiParser.parseCursorc                 C   s   d S r   r   )r   r[   r   r   r   rT      s    zAnsiParser.parseErasec                 C   s*   |rt j| S | jr|| p$t j| S d 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   r8   )	r   rs   r<   r=   r   r   r   r   r   )r   r   r   r   r   rL      s        zAnsiParser.formatTextN)r   r   r   r    rQ   rS   rU   Z
ASSIGN_SETrO   SETSr   rH   rI   r\   rP   rR   rT   r   r#   rs   rL   r   r   r   r   r&   *   s    =5r&   r9   )r    rC   Ztwisted.pythonr   r   r&   joinrn   rt   rA   rM   r.   r   r   r   r   r   <module>   s    A
