
    az9                     8   d Z ddlZddlZddlZddlZej
                  d   dk\  Zej
                  dk\  Zddlm	Z	m
Z
 dZdZej                  dk(  r	 ddlZd	 Zd
 Z e       ZdddddddZd Zd,dZd Z G d de      Z G d de      Z G d de      ZeraeZddlZddlmZ dZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'd Z(d!Z)ejT                  Z+ G d" d#ejX                        Z- G d$ d%ejX                        Z. G d& d'ejX                        Z/ej`                  jb                  jd                  Z3ejh                  ge3_5        ejl                  e3_7        d( Z2ej`                  jb                  jp                  Z8ejl                  ejr                  ge8_5        ejt                  e8_7        ej`                  jb                  jv                  Z<ejl                   ejz                  e/      ge<_5        ejt                  e<_7        d) Z>d* Zd+ Z?y# e$ r 	 ddlZdZn# e$ r Y nw xY wY w xY w)-z8

Helper functions for writing to terminals and files.

    N   )r   r   )textbytesFwin32Tc                      t         r,dd l} | j                         }|j                  |j                  fS dd l}dd l}dd l}|j                  d|j                  d      }|j                  d|      d d \  }}||fS )Nr      z        hhhh   )py33shutilget_terminal_sizelinescolumnstermiosfcntlstructioctl
TIOCGWINSZunpack)r   sizer   r   r   callheightwidths           7/usr/lib/python3/dist-packages/py/_io/terminalwriter.py_getdimensionsr      sl    '')zz4<<''%%{{1g00*=fd3BQ7u}    c                      d} 	 t               \  }} | dk(  r)t	        t
        j                  j                  dd            } | dk  rd} | S # t        j                  j                  $ r   Y XxY w)Nr   COLUMNSP   (   )r   pybuiltin_sysexintosenvironget)r   _s     r   get_terminal_widthr)   '   sp    E!#5 z BJJNN9b12 rzL :: s   A A)r   r
   )AFHNNaWc                 R    t        j                  d|       } t        d | D              S )NNFCc              3   n   K   | ]-  }t         j                  t        j                  |      d        / yw)r   N)
char_widthr'   unicodedataeast_asian_width).0cs     r   	<genexpr>z!get_line_width.<locals>.<genexpr>J   s&     Paz~~k::1=qAPs   35)r4   	normalizesum)r   s    r   get_line_widthr;   H   s%      -DP4PPPr   c           
      "   |t         j                  } | j                         } |rt        |t              s|f}|rKt         j
                  dk7  r8|j                         r(dj                  |D cg c]  }d|z  	 c}      | z   dz   } |r| dz  } |rRt        rK|j                         r:d|v r"d}t	        |D cg c]
  }|dk7  s	| c}      }nd}t        t        t        t        t        z  t        t        t        z  t        t        z  t        t        d		}|j                  |t              }	|r	|	t        z  }	d
}
d}|t         j                  u rt        |      }nt        |
      }t!        |      j"                  }|	|dz  z  }	t%        ||	       t'        |       dkD  r(|j)                  | d d        | dd  } t'        |       dkD  r(| r|j)                  |        t%        ||       n|j)                  |        |r|j+                          y y c c}w c c}w )Nr    [%sm[0m
r   TF)	 )   )    )!   )"   )#   )$   )%   )'      i   )sysstderrrstrip
isinstancetupleplatformisattyjoinwin32_and_ctypesFOREGROUND_WHITEFOREGROUND_REDFOREGROUND_GREENFOREGROUND_BLUEr'   FOREGROUND_INTENSITYGetStdHandleGetConsoleInfowAttributesSetConsoleTextAttributelenwriteflush)r   escfilenewlinera   codboldxesctableattrSTD_OUTPUT_HANDLESTD_ERROR_HANDLEhandle	oldcolorss                 r   
ansi_printrn   N   s   |zz4;;=D
:c5)f
s||w&4;;=S9cc)9: 
DKKM8DC2q1623CD+)++N:**>9*+;;++	 ||C!12((D3::!"23F!"34F"6*66	U"#-$i%JJtFU|$<D $i% JJt	2

4

 W : 3s   -H7
HHc                    t         j                  j                  d      dk(  ryt         j                  j                  d      dk(  rydt         j                  v ryt        | d      xrk | j	                         xrY t         j                  j                  d      d	k7  xr5 t
        j                  j                  d
      xr t         j                  dk(   S )N	PY_COLORS1T0FNO_COLORrS   TERMdumbjavant)	r%   r&   r'   hasattrrS   rM   rR   
startswith_name)rc   s    r   should_do_markupr{      s    	zz~~k"c)	zz~~k"c)RZZ4" Jt{{} Jzz~~f%/JLL++F3HD8HIJr   c                       e Zd Z ed7i 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 d!d"d#d$d%d&d'd(Zd8d*Zed+        Zej                  d,        Zed-        Z	ed.        Z
d/ Zd0 Zd9d1Zd2 Zd3 Zd:d4Zd5 Zd6 Zy));TerminalWriterblack   redrB   greenrC   yellowrD   bluerE   purplerF   cyanrG   whiterH   Blackr    Red)   Green*   Yellow+   Blue,   Purple-   Cyan.   White/   rf   r   lightr
   blink   invert   Nc                    |/|r&t         j                  j                         x| _        }nKddlm} nDt         j                  j                  |      r%t        |d      rt        |d      st        ||      }t        |d      r5|j                         r%t        rt        j                  |      j                  }|xs t        |dd      | _        || _        t#        |      | _        d| _        d| _        d| _        y )	Nr   )stdoutr`   ra   )encodingrS   r   utf-8)r!   ioTextIOstringiorM   r   r"   callablerx   	WriteFilerS   coloramaAnsiToWin32streamgetattrr   _filer{   	hasmarkup_lastlen_chars_on_current_line_width_of_current_line)selfrc   r   r   s       r   __init__zTerminalWriter.__init__   s    <')uu||~5.ZZ  &T7#g(>TH5D4"t{{}''-44D FGD*g$F
)$/&'#&'#r   c                 F    t        | d      r| j                  S t               S )N_terminal_width)rx   r   r)   r   s    r   	fullwidthzTerminalWriter.fullwidth   s"    4*+'''!##r   c                     || _         y N)r   )r   values     r   r   zTerminalWriter.fullwidth   s
    $r   c                     | j                   S )zReturn the number of characters written so far in the current line.

        Please note that this count does not produce correct results after a reline() call,
        see #164.

        .. versionadded:: 1.5.0

        :rtype: int
        )r   r   s    r   chars_on_current_linez$TerminalWriter.chars_on_current_line   s     ***r   c                     | j                   S )zzReturn an estimate of the width so far in the current line.

        .. versionadded:: 1.6.0

        :rtype: int
        )r   r   s    r   width_of_current_linez$TerminalWriter.width_of_current_line   s     ***r   c                 |    |r4| j                   r(dj                  |D cg c]  }d|z  	 c}      |z   dz   }|S c c}w )Nr=   r>   r?   )r   rT   )r   r   rb   re   s       r   _escapedzTerminalWriter._escaped   sC    4>>GG=#Z#-=> D >s   9c                     g }|D ]B  }|| j                   vrt        d|      ||   s%|j                  | j                   |          D | j                  |t	        |            S )Nzunknown markup: )	_esctable
ValueErrorappendr   rQ   )r   r   kwrb   names        r   markupzTerminalWriter.markup   sc     	1D4>>) !>??$x

4>>$/0		1
 }}T5:..r   c                    || j                   }t        j                  dk(  r|dz  }|:t        |t	        |      z
  dz
  dt	        |      z  z  d      }||z  }|d|d|}n||t	        |      z  z  }t	        |      t	        |j                               z   |k  r||j                         z  } | j                  |fi | y )Nr   r   r
    )r   rM   rR   maxr_   rO   line)r   sepchartitler   r   r-   fillr   s           r   sepzTerminalWriter.sep   s    I <<7"
 NI
 YU+a/Qs7|^DaHAQ;D!%ud3D i3w<78D t9s7>>+,,	9GNN$$D		$"r   c                     |rmt        |t        t        f      st        |      }| j                  |       | j                  r|r | j
                  |fi |}n|}t        | j                  |       y y r   )rP   r   r   _update_chars_on_current_liner   r   	write_outr   )r   msgr   	markupmsgs       r   r`   zTerminalWriter.write   s`    cE4=13i..s3~~"'DKK2r2		djj), r   c                 ^   t        |t              rdnd}|j                  |d      d   }t        |t              r|j                  dd      }||v r!t	        |      | _        t        |      | _        y | xj
                  t	        |      z  c_        | xj                  t        |      z  c_        y )N   
r@   r   r   replace)errors)rP   r   rsplitdecoder_   r   r;   r   )r   text_or_bytesrd   current_lines       r   r   z,TerminalWriter._update_chars_on_current_line  s    %mU;%$++GQ7;lE*'..wy.ILm#*-l*;D'*8*FD'''3|+<<'''>,+GG'r   c                 n     | j                   |fi | | j                  |       | j                  d       y )Nr@   )r`   
_checkfill)r   sr   s      r   r   zTerminalWriter.line  s-    

1

4r   c                     | j                   st        d       | j                  |fi | | j                  |       | j                  d       t	        |      | _        y )Nz(cannot use rewrite-line without terminal)r   r   r`   r   r_   r   )r   r   r   s      r   relinezTerminalWriter.reline  sK    ~~GHH

42

4D	r   c                 h    | j                   t        |      z
  }|dkD  r| j                  d|z         y y )Nr   r   )r   r_   r`   )r   r   	diff2lasts      r   r   zTerminalWriter._checkfill  s0    MMCI-	q=JJsY' r   rA   )NFN)NN)r=   )__name__
__module____qualname__dictr   r   propertyr   setterr   r   r   r   r   r`   r   r   r   r   rA   r   r   r}   r}      s<    92 92 9R 9 99%'9.098:99#%9-/98:9 9 &(9 /19 9;9 	9 $%	9 -.	9 78	9I($ $ $
 % % 
+ 
+ + +/>-
H
"(r   r}   c                       e Zd Zd Zy)Win32ConsoleWriterc                 |   |r9t        |t        t        f      st        |      }| j                  |       d }| j                  r|rt        t              }t        |      j                  }|dz  }|}|j                  dd      r	|t        z  }|j                  dd      r
|t        z  }nc|j                  dd      r
|t        z  }nG|j                  dd      r
|t        z  }n+|j                  dd      r|t        t        z  z  }n||dz  z  }t        ||       t        | j                   |       |rt        |       y y y )	NrL   rf   Fr   r   r   r   r   )rP   r   r   r   r   r[   rj   r\   r]   poprZ   rW   rY   rX   r^   r   r   )r   r   r   rm   rl   
default_bgri   s          r   r`   zWin32ConsoleWriter.write#  s    cE4=13i..s3I~~"%&78*62>>	&/
!66&%(00D66%'N*DVVFE*O+DVVGU+,,DVVHe,,^;;DI..D'5djj#&'	: 9 r   N)r   r   r   r`   rA   r   r   r   r   "  s    ;r   r   c                        e Zd ZddZd Zd Zy)r   Nc                      || _         || _        y r   )r   _writemethod)r   writemethodr   s      r   r   zWriteFile.__init__D  s     'r   c                 v    | j                   r|j                  | j                   d      }| j                  |       y )Nr   )r   encoder   )r   datas     r   r`   zWriteFile.writeH  s+    ==;;t}}i8D$r   c                      y r   rA   r   s    r   ra   zWriteFile.flushM  s    r   r   )r   r   r   r   r`   ra   rA   r   r   r   r   C  s    ( 
r   r   )wintypesrJ   rK      r         rC   @   p      c                       e Zd ZdefdefgZy)COORDXYNr   r   r   SHORT_fields_rA   r   r   r   r   g  s    %L%L"r   r   c                   (    e Zd ZdefdefdefdefgZy)
SMALL_RECTLeftTopRightBottomNr   rA   r   r   r  r  j  s'    UOENe$u%'r   r  c                   B    e Zd Zdefdefdej
                  fdefdefgZy)CONSOLE_SCREEN_BUFFER_INFOdwSizedwCursorPositionr]   srWindowdwMaximumWindowSizeN)r   r   r   r   r   WORDr  r  rA   r   r   r	  r	  o  s5    u%'/"HMM2,*E2	4r   r	  c                     t        |       S r   )_GetStdHandle)kinds    r   r[   r[   y  s    T""r   c                 X    t               }t        | t        j                  |             |S r   )r	  _GetConsoleScreenBufferInfoctypesbyrefrl   infos     r   r\   r\     s"    )+#FFLL,>?r   c                      t        t              } t        |       }|j                  j                  |j                  j
                  dz
  fS )Nr   )r[   rj   r\   r
  r   r   r  s     r   r   r     s9    /0f% {{}}dkkmma///r   c                 x   	 | j                  |       | j	                          y # t        $ r | j                  rL	 | j                  |j                  | j                               | j	                          Y y # t        $ r Y nw xY w|j                  d      j                  d      }| j                  |       Y w xY w)Nzunicode-escapeascii)r`   UnicodeEncodeErrorr   r   ra   r   )filr   s     r   r   r     s     			# IIK  <<		#**S\\23
 		 &  jj)*11':		#s2   $ B9*A6$B96	B?B9B4B98B9)NTF)@__doc__rM   r%   r4   r!   version_infopy3kr   
py.builtinr   r   rU   r   rR   ImportErrorr  r   r)   terminal_widthr3   r;   rn   r{   objectr}   r   r   r   rj   rk   FOREGROUND_BLACKrY   rX   rW   rV   rZ   BACKGROUND_BLACKBACKGROUND_BLUEBACKGROUND_GREENBACKGROUND_REDBACKGROUND_WHITEBACKGROUND_INTENSITYc_shortr   	Structurer   r  r	  windllkernel32r[   r  DWORDargtypesHANDLErestyper^   r  BOOLGetConsoleScreenBufferInfor  POINTERr\   r   rA   r   r   <module>r6     sb     	
a
6! " <<7	* $% 
	
	
	

	

Q3j	JR(V R(h; ;B  'N !!O!!N!!!!O!!N!!NNE"   "'V%% '
4V%5%5 4 MM**77M&nn-M$OOM# %mm44LL(0'G$&.mm# 	99  ,4OO ./I J,L(*2--'
0}  	# 			s6   G= =HH
	H
HHHHH