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rd| _  dS t|| d}|du rq2|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rd	| _q1|dkrd	| _q1|dkrd	| _q1|dkrd| _q1|dkrd| _
q1|dkrd| _q1|dkrd| _q1|dkrd| _q1|dkrd	| _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

