
    Yai7                     d   d Z ddlmZ ddlZddlmZ ddlmZ  edg d      Z edg d	      Z	 ed
g d	      Z
 eddg      Z eddg      Z eddg      Z eddg      ZdZdez  ZdZdededZ ej&                  dez        Z ej&                  d      Z G d de      Z G d de      Zy)zJ Utilities for processing ANSI escape codes and special ASCII characters.
    )
namedtupleN)QtGui)
dark_styleEraseAction)actionareaerase_to
MoveAction)r   dirunitcountScrollActionCarriageReturnActionr   NewLineAction
BeepActionBackSpaceActionABCDEFGHJKSTfmnsuz\[(.*?)([%s])z\](.*?)[]z?(|z)?z(||(?!
)|?
)|(?:%s)z([])c                   L    e Zd ZdZdZi Zd Zd Zd Zg fdZ	d Z
d Zd	 Zd
 Zy)AnsiCodeProcessorz Translates special ASCII characters and ANSI escape codes into readable
        attributes. It also supports a few non-standard, xterm-specific codes.
    Fc                 p    g | _         | j                  j                         | _        | j	                          y )N)actionsdefault_color_mapcopy	color_map	reset_sgrselfs    ?/usr/lib/python3/dist-packages/qtconsole/ansi_code_processor.py__init__zAnsiCodeProcessor.__init__J   s)    //446    c                 X    d| _         d| _        d| _        d| _        d| _        d| _        y)z; Reset graphics attributs to their default values.
        r   FN)	intensityitalicbold	underlineforeground_colorbackground_colorr   s    r   r   zAnsiCodeProcessor.reset_sgrO   s0     	 $ $r!   c              #   `  K   g | _         d}t        |      dkD  r
|d   dk(  rdnd}||dd n|}t        j                  |      D ]  }|||j	                          }t
        j                  | j                  |      }|s| j                   r| g | _         |j                         }|j                         D cg c]  }||	 }}|d   }	|	dk(  r0| j                   j                  t        d             d g | _         |	dk(  r0| j                   j                  t        d             d g | _         |	d	k(  r1| j                   j                  t        d
             d g | _         %|	dk(  s|	dk(  r1| j                   j                  t        d             |	 g | _         `|d   j                  d      D 
cg c]  }
|
s|
	 }}
|	j!                  d      r1	 t#        t%        t&        |            }| j)                  |d   |       |	j!                  d      s| j-                  |        ||d }t
        j                  | j                  |      }|s| j                   r| |)| j                   j                  t        d             | yyc c}w c c}
w # t*        $ r Y fw xY ww)zC Yields substrings for which the same escape code applies.
        r   
Nbeepzcarriage-return	backspacez
newline   ;[   ])r   lenANSI_OR_SPECIAL_PATTERNfinditerstartSPECIAL_PATTERNsub_replace_specialendgroupsappendr   r   r   r   split
startswithlistmapintset_csi_code
ValueErrorset_osc_code)r   stringr:   	last_charmatchraw	substringgr?   g0paramparamss               r   split_stringzAnsiCodeProcessor.split_stringY   sn     
  K!Or
d0BD	 ) 56,55f= (	.Eu{{}-C'++D,A,A3GIDLL!IIKE!&CAAMaCFCBTz##Jv$67
!t##$89J$KL
!t##OK$@A
!trV|##M)$<=!.4Qiooc.BMUe5MM==%=!%c#v&6!7
 ))&)V<]]3'%%f-Q(	.T UVn#''(=(=sC	O LLi 89O !O D& N
 & sV   B4J.6J>JC8J.:JJJ.J3(J.BJ.	J+'J.*J++J.c                    |dk(  r'|r| j                  |       y| j                  dg       y|dk(  s|dk(  r_|r|d   nd}d|cxk  rdk  rJn y|dk(  rdnd}|dk(  rd}n|d	k(  rd
}n|dk(  rd}| j                  j                  t        d|             yy|dk(  s|dk(  r:|dk(  rdnd}|r|d   nd	}| j                  j                  t	        d|d|             yy)a3   Set attributes based on CSI (Control Sequence Introducer) code.

        Parameters
        ----------
        command : str
            The code identifier, i.e. the final character in the sequence.

        params : sequence of integers, optional
            The parameter codes for the command.
        mr   JKr5   screenliner>   r2   r:   alleraseSTupdownscrollN)set_sgr_coder   r@   r   r   )r   commandrQ   coder   r	   r   r   s           r   rF   zAnsiCodeProcessor.set_csi_code   s     c>!!&)!!1#&nn &6!9ADD~A~#*c>xv19$HQY&HQY$H##Kx$HI  nn!S.$fC!'F1IQELLXsFE JK r!   c                 .   	 t        |j                  d            }|dk(  rK	 t        |j                  d            }|j                  d      }| j	                  |      | j
                  |<   yy# t        t        f$ r Y yw xY w# t        t        f$ r Y yw xY w)z Set attributes based on OSC (Operating System Command) parameters.

        Parameters
        ----------
        params : sequence of str
            The parameters for the command.
        r   N   )rE   pop
IndexErrorrG   _parse_xterm_color_specr   )r   rQ   ra   colorspecs        r   rH   zAnsiCodeProcessor.set_osc_code   s    	&**Q-(G a<FJJqM*zz!}(,(D(DT(Ju%  J' 		 
+ s#   A- A	B -A?>A?BBc                 $   |sy|j                  d      }|dk(  r| j                          nT|dk(  r| j                  r	d| _        n:d| _        n1|dk(  r	d| _        n#|dk(  r	d| _        n|dk(  r	d| _        n|dk(  rd| _        d	| _        n|d
k(  rd	| _        n|dk(  rd	| _        n|dk\  r|dk  r|dz
  | _        n|dk(  rF|rD|j                  d      }|dk(  r|r|j                  d      | _        n|dk(  r|dd | _        g |dd ny|dk(  rd| _        nl|dk\  r|dk  r|dz
  | _        nW|dk(  rF|rD|j                  d      }|dk(  r|r|j                  d      | _        n!|dk(  r|dd | _        g |dd n|dk(  rd| _        | j                  |       y)ad   Set attributes based on SGR (Select Graphic Rendition) codes.

        Parameters
        ----------
        params : sequence of ints
            A list of SGR codes for one or more SGR commands. Usually this
            sequence will have one element per command, although certain
            xterm-specific commands requires multiple elements.
        Nr   r2   Tr5      rd      F         %   &      '   (   /   0   1   )
re   r   bold_text_enabledr%   r#   r$   r&   r'   r(   r`   )r   rQ   rb   _color_types       r   r`   zAnsiCodeProcessor.set_sgr_code   s    zz!}19NNQY%% 	!"QYDNQYDKQY!DNRZDNDIRZDKRZ"DNRZDBJ$(2ID!RZF **Q-KaF(.

1%!(.r
%r
RZ$(D!RZDBJ$(2ID!RZF **Q-KaF(.

1%!(.r
%r
RZ$(D! 	&!r!   c                 
   |j                  d      r(t        t        d |dd  j                  d                  S |j                  d      r(t        t        d |dd  j                  d                  S |dk(  rt	        d	      |S )
Nzrgb:c                     t        | d      S )N   )rE   xs    r   <lambda>z;AnsiCodeProcessor._parse_xterm_color_spec.<locals>.<lambda>  s    s1bz r!   rd   /zrgbi:c                 0    t        t        |       dz        S )N   )rE   floatr}   s    r   r   z;AnsiCodeProcessor._parse_xterm_color_spec.<locals>.<lambda>  s    s58c>': r!   rr   ?zUnsupported xterm color spec)rB   tuplerD   rA   rG   )r   ri   s     r   rg   z)AnsiCodeProcessor._parse_xterm_color_spec  s}    ??6"148>>#3FGHH__W%:!!"X^^C02 3 3S[;<<r!   c                 ~    |j                  d      }|dk(  r'| j                  j                  t        dddd             y)Nr2   r_   r^   page )groupr   r@   r   )r   rK   specials      r   r=   z"AnsiCodeProcessor._replace_special!  s6    ++a.d?LLXvvq IJr!   N)__name__
__module____qualname____doc__rx   r   r    r   rR   rF   rH   r`   rg   r=    r!   r   r   r   9   sH      
%=~ ,. "LH,?"Jr!   r   c                       e Zd ZdZi dddddddd	d
ddddddddddddddddddddddd Zej                         Zd%d!Zd" Zd# Z	y$)&QtAnsiCodeProcessorz9 Translates ANSI escape codes into QTextCharFormats.
    r   blackr2   darkredr5   	darkgreenrk   brownrd   darkbluerr   
darkviolet   	steelblue   grey   	   red
   lime   yellow   deepskyblue   magenta   cyan   whitec                 J   t        |t              r,|dk  r
|dkD  r|dz  }| j                  j                  |d      }nt        |t        t
        f      r|}nyt        |t              rt        j                  |      S t        |t        t
        f      rt        j                  | S y)zp Returns a QColor for a given color code or rgb list, or None if one
            cannot be constructed.
        r   r   N)	
isinstancerE   r   getr   rC   strr   QColor)r   rh   r#   constructors       r   	get_colorzQtAnsiCodeProcessor.get_colorB  s    
 eS!qyY]
..,,UD9Kt}-Kk3'
 <<,,eT]3<<--r!   c                 <   t        j                         }| j                  | j                  | j                        }||j                  |       | j                  | j                  | j                        }||j                  |       | j                  r*|j                  t         j                  j                         n)|j                  t         j                  j                         |j                  | j                         |j                  | j                          |S )zN Returns a QTextCharFormat that encodes the current style attributes.
        )r   QTextCharFormatr   r'   r#   setForegroundr(   setBackgroundr%   setFontWeightQFontBoldNormalsetFontItalicr$   setFontUnderliner&   )r   formatqcolors      r   
get_formatzQtAnsiCodeProcessor.get_format]  s     &&(  5 5t~~F  (  5 5t~~F  ( 99  !1!12  !3!34T[[)/r!   c                 <   | j                   j                         | _        t        |      sMt	        d      D ]!  }| j                  |   | j                  |dz   <   # dx| j                  d<   | j                  d<   | j
                  j                  | j                         y)zo
        Given a syntax style, attempt to set a color map that will be
        aesthetically pleasing.
        r   r   r   r   N)darkbg_color_mapr   r   r   ranger   update)r   styleis      r   set_background_colorz(QtAnsiCodeProcessor.set_background_colorv  s     "&!6!6!;!;!=%  1X J040F0Fq0I&&q1u-J FMLD""1%(>(>r(B 	d445r!   N)r   )
r   r   r   r   r   r   r   r   r   r   r   r!   r   r   r   (  s    	W	Y 	
[ 	
W	
 	
Z 	
\ 	
[ 	
V 	
V 	
U 	V 	X 	] 	Y 	V  	W!& )--/626r!   r   )r   collectionsr   reqtpyr   qtconsole.stylesr   r   r
   r   r   r   r   r   CSI_COMMANDSCSI_SUBPATTERNOSC_SUBPATTERNANSI_PATTERNcompiler8   r;   objectr   r   r   r!   r   <module>r      s    # 	  ( (FG
 &HI
 .*LM ""88*E  ?XJ7 xj1
 .
; #!L0%1$"**%D|%ST "**X&l l^`6+ `6r!   