
    \d                         d Z ddlZddlmZ  e            Z G d d          Z G d d          Zd                     edj        ej	                            Z
i Zej	        D ]ZeD ]Zeee<   [dS )	zGModule to parse ANSI escape sequences

Maintainer: Jean-Paul Calderone
    N)Loggerc                       e Zd ZdZdZ ed eD                       Z e ee                    \  Z	Z
ZZZZZZdZ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              #   >   K   | ]}|                                 V  d S N)upper).0xs     5lib/python3.11/site-packages/twisted/conch/ui/ansi.py	<genexpr>zColorText.<genexpr>   s*      22a		222222    )BlackRedGreenYellowBlueMagentaCyanWhitec	                     |||c| _         | _        | _        || _        || _        || _        || _        || _        | j        r| j        | j        c| _        | _        d S d S r   )textfgbgdisplaybold	underlineflashreverse)	selfr   r    r!   r"   r#   r$   r%   r&   s	            r   __init__zColorText.__init__)   sg    &*B#	47DG	"
< 	0#wDGTWWW	0 	0r   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      s          6F%22622222K<AE##f++<N<N9E3vtWdE	K0 0 0 0 0r   r   c                   x    e Zd ZdZdZdZdZdZdZeeeeefZ	d Z
d Zd	 Zd
 Zd Zd Zd Zej        fdZ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| _         | _        | j         | j        c| _        | _        d\  | _        | _        | _        | _        d| _        d| _	        d S )Nr   r   r   r       )
	defaultFG	defaultBG	currentFG	currentBGr#   r%   r$   r&   r"   prepend)r'   rR   rS   s      r   r(   zAnsiParser.__init__J   sN    )2I&)-&>H;	4:t~t|r   c                     d}d}d}t          |          }||k     rZ|dk    r||         t          v rd}n7|r5 |j        d|          }|dk    r|||d         z   S ||||         z   }|}d}|dz   }||k     Z|S )zF
        Remove all ANSI color escapes from the given string.
        rQ   rP   r   N)r1   _setsfind)r'   stringresultshowiLns          r   stripEscapeszAnsiParser.stripEscapesQ   s     KK!eeqyyVAY%// FK**77!F122J..#fQqSk1FADAA !ee r   c                     d S r   r;   )r'   colorstrs     r   writeStringzAnsiParser.writeStringg       r   c                    | j         r| j         |z   }d| _         |                    d          }t          |          dk    r0|                     |                     |d                              dS |                     |                     |d                              |dd         D ]}t          |          }d}d}||k     r#||         t
          j        dz   vrn|dz  }||k     #|s
d| _          dS |d         dk    r4|                     |                     ||dz   d                              |dd         }|dz  }||dz
  k    r
d| _          dS t                              ||         d          }||t          j
        k    rW|                     |d|dz                       ||dz   d         }|                     |                     |                     8|t          j        k    rY|d|dz            ||dz   d         }}|                     |           |                     |                     |                     |t          j        k    rY|d|dz            ||dz   d         }}|                     |           |                     |                     |                     
|t          j        k    r7||dz   d         }|                     |                     |                     Q||k    rd|z   | _         ct"                              d	||         
           ||dz   d         }|                     |                     |                     dS )zK
        Turn a string input into a list of L{ColorText} elements.
        rQ   rX   rP   r   Nz[;?[z[z+Unhandled ANSI control type: {control_type})control_type)rV   splitr1   re   
formatTextr\   digits_setmapgetr=   	COLOR_SET
parseColor
CURSOR_SETparseCursor	ERASE_SET
parseEraseMODE_SET_logwarn)	r'   strpartsrE   r`   r_   typecursorerases	            r   parseStringzAnsiParser.parseStringj   s   
 < 	,$CDL		&!!u::??T__U1X6677777T__U1X66777122Y /9 /9FF!eet6=5#888FA !ee  #)DLFFQ43;;$$T__Qq1uwwZ%@%@AAA!""AFAA::#*DLFF{{1Q4..<:///OOAgAgJ///!a%''
A$$T__Q%7%78888Z222 !'AE'
Aa!eggJAF$$V,,,$$T__Q%7%78888Z111 1q5z1QUWW:1EOOE***$$T__Q%7%78888Z000!a%''
A$$T__Q%7%78888!VV#*Q;DLLIIETUVWTX     !a%''
A$$T__Q%7%78888_/9 /9r   c                    |dd         }|sd}	 t          t          |                    d                    }nF# t          $ r9 t                              d|           | j        | j        c| _        | _	        Y dS w xY w|D ]M}|dk    r<| j        | j        c| _        | _	        d\  | _
        | _        | _        | _        d	| _        E|d	k    rd	| _
        Sd
|cxk    rdk    rn n|d
z
  | _        nd|cxk    rdk    rn n|dz
  | _	        |dk    r| j        | _        |dk    r| j        | _	        |dk    rd	| _        |dk    rd	| _        |dk    rd	| _        |dk    rd| _        |dk    rd| _
        |dk    r	d| _        |dk    r	d| _        |dk    r	d| _        "|dk    r	d	| _        1t                              d|           OdS )z5
        Handle a single ANSI color sequence
        NrY   0;z)Invalid ANSI color sequence: {sequence!r})sequencer   rO   rP      %   (   /   '   1                              z*Unrecognised ANSI color command: {command})command)mapintrj   
ValueErrorrv   errorrR   rS   rT   rU   r#   r%   r$   r&   r"   blink)r'   rx   ry   r   s       r   rp   zAnsiParser.parseColor   s*   
 #2#h 	C	SYYs^^,,EE 	 	 	JJBSJQQQ-1^T^*DNDNFF	
  "	T "	TAAvv15.FPC	4:t~t| a		qB!"RqB!"Rb!%b!%a!"a

a a b		b!"b

b b 

GQR
SSSSE"	T "	Ts   (9 ?A<;A<c                     d S r   r;   )r'   r{   s     r   rr   zAnsiParser.parseCursor   rf   r   c                     d S r   r;   )r'   r|   s     r   rt   zAnsiParser.parseErase   rf   r   c                 l    |rt           j        |         S | j        r||         pt           j        |         S r   )r   r-   r#   )r'   valuemodeBOLDs       r   	pickColorzAnsiParser.pickColor   s7     	H#E**9,eG	0@0GGr   c           
          t          ||                     | j        d          |                     | j        d          | j        | j        | j        | j        | j                  S )Nr   rP   )	r   r   rT   rU   r"   r#   r$   r%   r&   )r'   r   s     r   rk   zAnsiParser.formatText   sV    NN4>1--NN4>1--LINJL	
 	
 		
r   N)r)   r*   r+   r,   rq   rs   ru   
ASSIGN_SETro   SETSr(   rb   re   r}   rp   rr   rt   r   r/   r   rk   r;   r   r   r=   r=   4   s         
 IJ  I H J I	8ZCD    ,  =9 =9 =9~3T 3T 3Tj     +4*? H H H H

 

 

 

 

r   r=   rQ   )r,   r\   twisted.loggerr   rv   r   r=   joinr   r   rZ   rm   rE   r   r;   r   r   <module>r      s   
 
  " ! ! ! ! !vxx0 0 0 0 0 0 0 0D@
 @
 @
 @
 @
 @
 @
 @
F 	BGZ_--..
	  A  

AAr   