
    L                        S r SSKJr  SSKJrJr  SSKJr  SSKJ	r	  SSK
Jr  SSKJr  SSKrSSKrSSKrSSKrS	r0 S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S!_S"S#_S$S%_S&S'_S(S)_S*S+_r0 S
S,_SS-_SS._SS/_SS0_SS1_SS2_SS3_SS4_SS5_SS6_S S7_S"S8_S$S9_S&S:_S(S;_S*S<_r0 S
S=_SS=_SS>_S*S?_SS@_SSA_SSB_SSC_SSD_SSE_SSF_SSG_S SH_S"SI_S$SJ_S&SK_S(SL_r\" \5      \" \5      :X  d   e\" \5      \" \5      :X  d   e\" \5      \" \5      :X  d   eSZSM jr " SN SO\5      r " SP SQ\5      r\" SRSS9r\" STSS9r\" 5       r " SU SV\5      rSW r " SX SY\	5      r g)[z
Output for vt100 terminals.

A lot of thanks, regarding outputting of colors, goes to the Pygments project:
(We don't rely on Pygments anymore, because many things are very custom, and
everything has been highly optimized.)
http://pygments.org/
    )unicode_literals)to_simple_filter	Condition)Size)Output)ANSI_COLOR_NAMES)rangeN)Vt100_Outputansidefault'   	ansiblack   ansidarkred   ansidarkgreen    	ansibrown!   ansidarkblue"   
ansipurple#   ansiteal$   ansilightgray%   ansidarkgrayZ   ansired[   	ansigreen\   
ansiyellow]   ansiblue^   ansifuchsia_   ansiturquoise`   	ansiwhitea   1   (   )   *   +   ,   -   .   /   d   e   f   g   h   i   j   k   r   r   r      r@   r@      rB   rB      rD   rD      r   r   r   rF   r   rF   rF   r   )r   r   rF   rF   r   rF   r   rF   rF   rB   r   r   r   rB   r   rB   rB   r   )r   r   rB   rB   r   rB   r   rB   rB   c                 H   [        U[        5      (       d   e[        X-
  5      [        X-
  5      -   [        X -
  5      -   nUS:  a  US-  nSnSn[        R	                  5        H:  u  nu  pn
US:w  d  M  Xs;  d  M  X-
  S-  X-
  S-  -   X*-
  S-  -   nX:  d  M6  UnUnM<     U$ )z
Find closest ANSI color. Return it by name.

:param r: Red (Between 0 and 255.)
:param g: Green (Between 0 and 255.)
:param b: Blue (Between 0 and 255.)
:param exclude: A tuple of color names to exclude. (E.g. ``('ansired', )``.)
r   )r   r   r+   r    r      )
isinstancetupleabsANSI_COLORS_TO_RGBitems)rgbexclude
saturationdistancematchnamer2g2b2ds               7lib/third_party/prompt_toolkit/terminal/vt100_output.py_get_closest_ansi_colorre   j   s     gu%%%% QUc!%j(3qu:5JBNN HE0668lrr= T%8AA-A=A| 9 L    c                   6    \ rS rSrSrSS jrS	S jrS	S jrSrg)
_16ColorCache   zv
Cache which maps (r, g, b) tuples to 16 ansi colors.

:param bg: Cache for background colors, instead of foreground.
c                 >    [        U[        5      (       d   eXl        g N)rS   boolbg)selfrm   s     rd   __init___16ColorCache.__init__   s    "d####rf   c                 @    X4nX0;  a  U R                  X5      X'   X   $ )z`
Return a (ansi_code, ansi_name) tuple. (E.g. ``(44, 'ansiblue')``.) for
a given (r,g,b) value.
)_get)rn   valuer[   keys       rd   get_code_16ColorCache.get_code   s)    
 ?		%1DIyrf   c                 v    Uu  p4n[        X4XRS9nU R                  (       a
  [        U   nO	[        U   nXpU'   Xv4$ )Nr[   )re   rm   BG_ANSI_COLORSFG_ANSI_COLORS)rn   rs   r[   rX   rY   rZ   r^   codes           rd   rr   _16ColorCache._get   sC    a'aA 77!%(D!%(DU{rf   rm   N)F )	__name__
__module____qualname____firstlineno____doc__ro   ru   rr   __static_attributes__r   rf   rd   rh   rh      s    
rf   rh   c                   $    \ rS rSrSrS rS rSrg)_256ColorCache   z1
Cach which maps (r, g, b) tuples to 256 colors.
c                    / nUR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S	5        UR                  S
5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        Sn[        S5       H1  nX#S-  S-     nX#S-  S-     nX#S-     nUR                  XEU45        M3     [        SS5       H  nSUS-  -   nUR                  XwU45        M      Xl        g )Nr>   rE   rG   rH   )r   r      rI   rJ   rC   r?   rK   rL   rM   )r"   r"   rB   rN   rO   rA   )r   r(            rB      r               
   )appendr	   colors)rn   r   
valuerangeirX   rY   rZ   vs           rd   ro   _256ColorCache.__init__   s`    	()()()()()()()()()()()()()()()() :
sAGq=)AFa<(Aq5!AMM1)$	  q"AAF
AMM1)$  rf   c                     Uu  p#nSnSn[        U R                  5       H+  u  nu  pn
X(-
  S-  X9-
  S-  -   XJ-
  S-  -   nX:  d  M'  UnUnM-     X`U'   U$ )NrQ   r   rR   )	enumerater   )rn   rs   rX   rY   rZ   r]   r^   r   r`   ra   rb   rc   s               rd   __missing___256ColorCache.__missing__   sp    a (5OA|AA-A=A|  6 Urf   )r   N)r   r   r   r   r   ro   r   r   r   rf   rd   r   r      s    $Lrf   r   Fr}   Tc                   4    \ rS rSrSrS	S jrS rS rS rSr	g)
_EscapeCodeCache   z
Cache for VT100 escape codes. It maps
(fgcolor, bgcolor, bold, underline, reverse) tuples to VT100 escape sequences.

:param true_color: When True, use 24bit colors instead of 256 colors.
c                 ^    [        U[        5      (       d   eXl        [        U5      U l        g rk   )rS   rl   
true_colorr   ansi_colors_only)rn   r   r   s      rd   ro   _EscapeCodeCache.__init__   s(    *d++++$ 01A Brf   c                    Uu  p#pEpgn/ n	U	R                  U R                  X#5      5        U(       a  U	R                  S5        U(       a  U	R                  S5        U(       a  U	R                  S5        U(       a  U	R                  S5        U(       a  U	R                  S5        U	(       a  SSR                  U	5      -   S-   n
OS	n
XU'   U
$ )
N13547z[0;;m[0m)extend_colors_to_coder   join)rn   attrsfgcolorbgcolorbold	underlineitalicblinkreversepartsresults              rd   r   _EscapeCodeCache.__missing__   s    DIA$6'T))';<LLLLLLLLLL%036FFUrf   c                 l     [        US5      nUS-	  S-  nUS-	  S-  nUS-  nX4U4$ ! [         a    e f = f)z(Turn 'ffffff', into (0xff, 0xff, 0xff).    rB   r   )int
ValueError)rn   colorrgbrX   rY   rZ   s         rd   _color_name_to_rgb#_EscapeCodeCache._color_name_to_rgb  sV    	eR.C d"AT!Ad
A7N  		s   ' 3c                    ^ ^^^ S/mUUUU 4S jn/ nUR                  U" TS5      5        UR                  U" TS5      5        [        [        R                  U5      $ )zAReturn a tuple with the vt100 values  that represent this color. r   c                   > U(       a  [         O[        nU c  gX;   a  X    4$  TR                  U 5      nTR	                  5       (       aM  U(       a'  TT
:w  a  TS   4nOSn[
        R                  X4S9u  pVU4$ [        R                  U5      u  pVUTS'   U4$ TR                  (       a  Uu  pxn	U(       a  SOSSXxU	4$ U(       a  SOSS[        U   4$ ! [         a     gf = f)Nr   r   rx   0   &   rR      )
ry   rz   r   r   r   _16_bg_colorsru   _16_fg_colorsr   _256_colors)r   rm   tabler   r[   r{   r_   rX   rY   rZ   bg_colorfg_ansifg_colorrn   s             rd   get-_EscapeCodeCache._colors_to_code.<locals>.get)  s    &(NnE} ''11%8C
 ((**#x/'.qznG&(G%2%;%;C%;%Q
 $x%2%;%;C%@
%)
 $x __!GA!"$B"aq99 #%B"aS1ABB1 " s   C 
CCFT)r   mapsix	text_type)rn   r   r   r   r   r   s   ```  @rd   r    _EscapeCodeCache._colors_to_code"  sW    
 $&	C &	CP c(E*+c(D)*3==&))rf   )r   r   N)FF)
r   r   r   r   r   ro   r   r   r   r   r   rf   rd   r   r      s    C
2
3*rf   r   c                     SSK nSSKn[        R                  " [        R                  (       a  SOS/ SQ5      nUR                  XR                  U5        US   US   4$ )zg
Get the size of this pseudo terminal.

:param fileno: stdout.fileno()
:returns: A (rows, cols) tuple.
r   N   hh)r   r   r   r   r   )fcntltermiosarrayr   PY2ioctl
TIOCGWINSZ)filenor   r   bufs       rd   	_get_sizer   X  sN      ++cggd4
>C 
KK**C0 q63q6>rf   c                       \ rS rSrSr  S$S jr\S%S j5       rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS&S jrS rS rS rS rS r S r!S  r"S! r#S" r$S#r%g)'r
   is  ai  
:param get_size: A callable which returns the `Size` of the output terminal.
:param stdout: Any object with has a `write` and `flush` method + an 'encoding' property.
:param true_color: Use 24bit color instead of 256 colors. (Can be a :class:`SimpleFilter`.)
    When `ansi_colors_only` is set, only 16 colors are used.
:param ansi_colors_only: Restrict to 16 ANSI colors only.
:param term: The terminal environment variable. (xterm, xterm-256color, linux, ...)
:param write_binary: Encode the output before writing it. If `True` (the
    default), the `stdout` object is supposed to expose an `encoding` attribute.
Nc                 ,  ^^^ [        U5      (       d   eTb!  [        T[        R                  5      (       d   e[	        U4S jS 5       5      (       d   eU(       a  [        TS5      (       d   e/ U l        TU l        X`l        X l	        [        U5      U l        T=(       d    SU l        Uc:  [        [        R                  R!                  SS5      5      m["        UU4S j5       nO[        U5      nX@l        ['        US9U l        ['        S	US
9U l        g )Nc              3   <   >#    U  H  n[        TU5      v   M     g 7frk   )hasattr).0astdouts     rd   	<genexpr>(Vt100_Output.__init__.<locals>.<genexpr>  s     B/A!761%%/As   )writeflushencodingxtermPROMPT_TOOLKIT_ANSI_COLORS_ONLYFc                      > T =(       d    TS;   $ )Nlinuxzeterm-colorr   )ANSI_COLORS_ONLYterms   rd   r   /Vt100_Output.__init__.<locals>.ansi_colors_only  s    'K43K+KKrf   )r   T)r   r   )callablerS   r   r   allr   _bufferr   write_binaryget_sizer   r   r   rl   osenvironr   r   r   r   _escape_code_cache_escape_code_cache_true_color)rn   r   r   r   r   r   r   r   s    `   ` @rd   ro   Vt100_Output.__init__~  s   !!!!|z$>>>>B/ABBBBB6:....( *:6OG	 ##BJJNN15%:  ; L L  00@A 0 #3DT"U-=.>.@*rf   c                 N   ^ TR                  5       (       d   eU4S jnU " TXRX4S9$ )z{
Create an Output class from a pseudo terminal.
(This will take the dimensions by reading the pseudo
terminal attributes.)
c                  L   > [        TR                  5       5      u  p[        XS9$ )N)rowscolumns)r   r   r   )r  r  r   s     rd   r   'Vt100_Output.from_pty.<locals>.get_size  s     %fmmo6MDT33rf   )r   r   r   )isatty)clsr   r   r   r   r   s    `    rd   from_ptyVt100_Output.from_pty  s2     }}	4 68$4A 	Arf   c                 6    U R                   R                  5       $ )zReturn file descriptor. )r   r   rn   s    rd   r   Vt100_Output.fileno  s    {{!!##rf   c                 .    U R                   R                  $ )z!Return encoding used for stdout. )r   r   r
  s    rd   r   Vt100_Output.encoding  s    {{###rf   c                 :    U R                   R                  U5        g)z
Write raw data to output.
N)r   r   rn   datas     rd   	write_rawVt100_Output.write_raw  s     	D!rf   c                 Z    U R                   R                  UR                  SS5      5        g)zV
Write text to output.
(Removes vt100 escape codes. -- used for safely writing text.)
?N)r   r   replacer  s     rd   r   Vt100_Output.write  s!    
 	DLL56rf   c                     U R                   S;  a5  U R                  SUR                  SS5      R                  SS5      -  5        gg)z
Set terminal title.
r   z]2;%sr   N)r   r  r  )rn   titles     rd   	set_titleVt100_Output.set_title  s@     9944NN?U]]62-F-N-NvWY-ZZ[ 5rf   c                 &    U R                  S5        g )Nr  )r  r
  s    rd   clear_titleVt100_Output.clear_title  s    rrf   c                 &    U R                  S5        g)zL
Erases the screen with the background colour and moves the cursor to
home.
z[2JNr  r
  s    rd   erase_screenVt100_Output.erase_screen  s    
 	y!rf   c                 &    U R                  S5        g )Nz[?1049h[Hr"  r
  s    rd   enter_alternate_screen#Vt100_Output.enter_alternate_screen  s    *+rf   c                 &    U R                  S5        g )Nz[?1049lr"  r
  s    rd   quit_alternate_screen"Vt100_Output.quit_alternate_screen      }%rf   c                 j    U R                  S5        U R                  S5        U R                  S5        g )Nz[?1000hz[?1015hz[?1006hr"  r
  s    rd   enable_mouse_support!Vt100_Output.enable_mouse_support  s*    }% 	}% 	}%rf   c                 j    U R                  S5        U R                  S5        U R                  S5        g )Nz[?1000lz[?1015lz[?1006lr"  r
  s    rd   disable_mouse_support"Vt100_Output.disable_mouse_support  s&    }%}%}%rf   c                 &    U R                  S5        g)zI
Erases from the current cursor position to the end of the current line.
z[KNr"  r
  s    rd   erase_end_of_lineVt100_Output.erase_end_of_line  s     	x rf   c                 &    U R                  S5        g)zK
Erases the screen from the current line down to the bottom of the
screen.
z[JNr"  r
  s    rd   
erase_downVt100_Output.erase_down  s    
 	x rf   c                 &    U R                  S5        g )Nr   r"  r
  s    rd   reset_attributesVt100_Output.reset_attributes  s    y!rf   c                     U R                  5       (       a4  U R                  5       (       d  U R                  U R                  U   5        gU R                  U R                  U   5        g)z?
Create new style and output.

:param attrs: `Attrs` instance.
N)r   r   r  r   r   )rn   r   s     rd   set_attributesVt100_Output.set_attributes  sM     ??T%:%:%<%<NN4==eDENN42259:rf   c                 &    U R                  S5        g )Nz[?7lr"  r
  s    rd   disable_autowrapVt100_Output.disable_autowrap      z"rf   c                 &    U R                  S5        g )Nz[?7hr"  r
  s    rd   enable_autowrapVt100_Output.enable_autowrap  rA  rf   c                 &    U R                  S5        g )Nz[?2004hr"  r
  s    rd   enable_bracketed_paste#Vt100_Output.enable_bracketed_paste  r+  rf   c                 &    U R                  S5        g )Nz[?2004lr"  r
  s    rd   disable_bracketed_paste$Vt100_Output.disable_bracketed_paste  r+  rf   c                 .    U R                  SX4-  5        g)zMove cursor position. z[%i;%iHNr"  )rn   rowcolumns      rd   cursor_gotoVt100_Output.cursor_goto  s    }}45rf   c                 j    US:X  a  g US:X  a  U R                  S5        g U R                  SU-  5        g )Nr   r   z[Az[%iAr"  rn   amounts     rd   	cursor_upVt100_Output.cursor_up  0    Q;q[NN8$NN:./rf   c                 j    US:X  a  g US:X  a  U R                  S5        g U R                  SU-  5        g )Nr   r   z[Bz[%iBr"  rQ  s     rd   cursor_downVt100_Output.cursor_down   s2    Q;q[ NN8$NN:./rf   c                 j    US:X  a  g US:X  a  U R                  S5        g U R                  SU-  5        g )Nr   r   z[Cz[%iCr"  rQ  s     rd   cursor_forwardVt100_Output.cursor_forward*  rU  rf   c                 j    US:X  a  g US:X  a  U R                  S5        g U R                  SU-  5        g )Nr   r   z[%iDr"  rQ  s     rd   cursor_backwardVt100_Output.cursor_backward2  s0    Q;q[NN4 NN:./rf   c                 &    U R                  S5        g )Nz[?25lr"  r
  s    rd   hide_cursorVt100_Output.hide_cursor:  s    {#rf   c                 &    U R                  S5        g )Nz[?12l[?25hr"  r
  s    rd   show_cursorVt100_Output.show_cursor=  s    +,rf   c                    U R                   (       d  gSR                  U R                   5      n U R                  (       a}  [        U R                  S5      (       a  U R                  R
                  nOU R                  nUR                  UR                  U R                  R                  =(       d    SS5      5        OU R                  R                  U5        U R                  R                  5         / U l         g! [         af  nUR                  (       a&  UR                  S   [        R                  :X  a   SnANIUR                  (       a  UR                  S   S:X  a   SnANre SnAff = f)z#
Write to output stream and flush.
Nr  bufferzutf-8r  r   )r   r   r   r   r   rg  r   encoder   r   IOErrorargserrnoEINTR)rn   r  outes       rd   r   Vt100_Output.flush@  s     ||wwt||$	   4;;11++,,C++C		$++dkk&:&:&EgyQR!!$'KK$ #  	vv!&&)u{{2 AFF1IN 	s$   CC: :
E*2E%;$E%$E%%E*c                 F    U R                  S5        U R                  5         g)z*
Asks for a cursor position report (CPR).
z[6nNr  r   r
  s    rd   ask_for_cprVt100_Output.ask_for_cprl  s     	y!

rf   c                 F    U R                  S5        U R                  5         g)zSound bell. r  Nrq  r
  s    rd   bellVt100_Output.bells  s    t

rf   )	r   r   r   r   r   r   r   r   r   )FNNT)FNN)r   r   )&r   r   r   r   r   ro   classmethodr  r   r   r  r   r  r  r#  r&  r)  r-  r0  r3  r6  r9  r<  r?  rC  rF  rI  rN  rS  rW  rZ  r^  ra  rd  r   rr  ru  r   r   rf   rd   r
   r
   s  s    	 5:@D!@F A A$$"7\",&&&
!!"	;##&&60000$-*Xrf   r
   r~   )!r   
__future__r   prompt_toolkit.filtersr   r   prompt_toolkit.layout.screenr   prompt_toolkit.rendererr   prompt_toolkit.stylesr   	six.movesr	   r   rk  r   r   __all__rz   ry   rV   setre   dictrh   r   r   r   r   r   r   r
   r   rf   rd   <module>r     sb   ( > - * 2    	 

2 r	
 r r r r r r r r r  r!" r#$ r%& r'( r)* r+0r r	
 r r r r r r r s s  s!" s#$ s%& s'( s)* s+2'' ' '	
 ' ) ) ) ) ) )  )!" )#$ )%& )'( ))* )+ 2 >c"233 33
>c"233 33
#&6"77 77DD D;T ;| '&d*t d*N6C6 Crf   