
    Vh                         d Z ddlZddlmZ  e       Z G d d      Z G d d      Zdj                   edj                  ej                              Z
i Zej                  D ]  ZeD ]  Zeee<   	  [y)	zGModule to parse ANSI escape sequences

Maintainer: Jean-Paul Calderone
    N)Loggerc                   j    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y)	ColorTextzb
    Represents an element of text along with the texts colors and
    additional attributes.
    )brgylmcwc              #   <   K   | ]  }|j                           y wN)upper).0xs     E/home/dcms/DCMS/lib/python3.12/site-packages/twisted/conch/ui/ansi.py	<genexpr>zColorText.<genexpr>   s     2a	2s   )BlackRedGreenYellowBlueMagentaCyanWhitec	                     |||c| _         | _        | _        || _        || _        || _        || _        || _        | j                  r$| j                  | j                  c| _        | _        y y r   )textfgbgdisplaybold	underlineflashreverse)	selfr   r   r    r!   r"   r#   r$   r%   s	            r   __init__zColorText.__init__)   s_    &*B#	47DG	"
<<#wwDGTW     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      sI     6F2622K<A#f+<N9E3vtWdE	K0r(   r   c                       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y)
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| _	        y )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  rL|dk(  r||   t        v rd}n.|r, |j                  d|      }|dk(  r|||d z   S |||| z   }|}d}|dz   }||k  rL|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     K!eqyVAY%/FKK*7!F12J..#fQqk1FADAA !e r(   c                      y r   r;   )r&   colorstrs     r   writeStringzAnsiParser.writeStringg       r(   c                    | j                   r| j                   |z   }d| _         |j                  d      }t        |      dk(  r$| j                  | j	                  |d                y| j                  | j	                  |d                |dd D ]<  }t        |      }d}d}||k  r$||   t
        j                  dz   vrn|dz  }||k  r$|s	d| _          y|d   dk7  r'| j                  | j	                  ||dz   d              v|dd }|dz  }||dz
  k(  r	d| _          yt        j                  ||   d      }||t        j                  k(  rA| j                  |d|dz           ||dz   d }| j                  | j	                  |             |t        j                  k(  rC|d|dz    ||dz   d }}| j                  |       | j                  | j	                  |             W|t        j                  k(  rC|d|dz    ||dz   d }}| j                  |       | j                  | j	                  |             |t        j                   k(  r*||dz   d }| j                  | j	                  |             ||k(  rd|z   | _         t"        j%                  d	||   
       ||dz   d }| j                  | j	                  |             ? y)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7T__U1X6712Y /9F!et6==5#88FA !e #)DLQ43;$$T__Qq1uwZ%@A!"AFAA:#*DL{{1Q4.<:///OOAgAJ/!a%'
A$$T__Q%78Z222 !'AE
Aa!egJAF$$V,$$T__Q%78Z111 1q5z1QUW:1EOOE*$$T__Q%78Z000!a%'
A$$T__Q%78!V#*Q;DLIIETUVWTX   !a%'
A$$T__Q%78_/9r(   c                    |dd }|sd}	 t        t        |j                  d            }|D ]K  }|dk(  rF| j                  | j                  c| _        | _	        d\  | _
        | _        | _        | _        d	| _        O|d	k(  rd	| _
        \d
|cxk  rdk  rn n|d
z
  | _        ud|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	| _        5t        j                  d|       N y# t        $ r= t        j                  d|       | j                  | j                  c| _        | _	        Y yw xY w)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   
 #2hC	SYYs^,E  "	TAAv15.FPC	4:t~t| a	qB!"RqB!"Rb!%b!%a!"a
a a b	b!"b
b b 

GQR
SE"	T  	JJBSJQ-1^^T^^*DNDN	s   E< <AGGc                      y r   r;   )r&   r{   s     r   rr   zAnsiParser.parseCursor   rf   r(   c                      y r   r;   )r&   r|   s     r   rt   zAnsiParser.parseErase   rf   r(   c                 |    |rt         j                  |   S | j                  xr ||   xs t         j                  |   S r   )r   r-   r"   )r&   valuemodeBOLDs       r   	pickColorzAnsiParser.pickColor   s9    ##E**99,eG	0@0@0GGr(   c           
          t        || j                  | j                  d      | j                  | 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   sY    NN4>>1-NN4>>1-LLIINNJJLL	
 		
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   sw    
 IJ  I H J I	8ZCD,=9~3Tj +4*?*? H

r(   r=   rQ   )r,   r\   twisted.loggerr   rv   r   r=   joinr   r   rZ   rm   rE   r   r;   r(   r   <module>r      s   

  "x0 0D@
 @
F 	BGGZ__-.
	 A 
 r(   