
^Yc           @   s  d  Z  d d l Z d d l Z d d l Z e j d d k Z d d l m Z m Z e	 Z
 d Z e j d k r y d d l Z Wq e k
 r y d d l Z e Z
 Wq e k
 r q Xq Xn  d   Z d   Z e   Z d e e	 d	  Z d
   Z d e f d     YZ d e f d     YZ d e f d     YZ e
 re 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 j) Z* d e j+ f d     YZ, d  e j+ f d!     YZ- d" e j+ f d#     YZ. e j/ j0 j1 Z2 e j3 g e2 _4 e j5 e2 _6 d$   Z1 e j/ j0 j7 Z7 e j5 e j8 g e7 _4 e j9 e7 _6 e j/ j0 j: Z; e j5 e j< e.  g e; _4 e j9 e; _6 d%   Z= d&   Z n  d'   Z> d S((   s8   

Helper functions for writing to terminals and files.

iNi    i   (   t   textt   bytest   win32c          C   sb   d d  l  }  d d  l } d d  l } | j d |  j d  } | j d |  d  \ } } | | f S(   Nii   t    i   t   hhhhi   t           (   t   termiost   fcntlt   structt   ioctlt
   TIOCGWINSZt   unpack(   R   R   R   t   callt   heightt   width(    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyt   _getdimensions   s    $c          C   s   d }  } y t    \ }  } Wn  t j j k
 r9   n n X| d k rj t t j j d d   } n  | d k  r d } n  | S(   Ni    t   COLUMNSiP   i(   (   R   t   pyt   builtint   _sysext   intt   ost   environt   get(   R   R   (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyt   get_terminal_width!   s    
	c         C   s]  | d  k r t j } n  |  j   }  | rF t | t  rF | f } n  | r t j d k r | j   r d j g  | D] } d | ^ qt  |  d }  n  | r |  d 7}  n  | r9t	 r9| j   r9d | k rt
 } t g  | D] } | d k r | ^ q  } n t } i	 t d 6t d 6t d 6t t Bd 6t d 6t t Bd 6t t Bd 6t d 6t d 6} | j | t  }	 | r|	 t O}	 n  d }
 d } | t j k rt |  } n t |
  } t |  j } |	 | d @O}	 t | |	  x1 t |   d k r| j |  d   |  d }  qW|  r)| j |   n  t | |  n | j |   | rY| j   n  d  S(   NR   t    s   [%sms   [0ms   
i   i   i    i!   i"   i#   i$   i%   i'   iii   i   (    (   i   (   i    (   i!   (   i"   (   i#   (   i$   (   i%   (   i'   (   t   Nonet   syst   stderrt   rstript
   isinstancet   tuplet   platformt   isattyt   joint   win32_and_ctypest   Truet   Falset   FOREGROUND_WHITEt   FOREGROUND_REDt   FOREGROUND_GREENt   FOREGROUND_BLUER   t   FOREGROUND_INTENSITYt   GetStdHandlet   GetConsoleInfot   wAttributest   SetConsoleTextAttributet   lent   writet   flush(   R    t   esct   filet   newlineR1   t   codt   boldt   xt   esctablet   attrt   STD_OUTPUT_HANDLEt   STD_ERROR_HANDLEt   handlet	   oldcolors(    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyt
   ansi_print9   sX    !'
.

c         C   s   t  j j d  d k r t St  j j d  d k r8 t St |  d  o |  j   o t  j j d  d k o t j j	 d  o t  j
 d k S(	   Nt	   PY_COLORSt   1t   0R!   t   TERMt   dumbt   javat   nt(   R   R   R   R$   R%   t   hasattrR!   R   R    t
   startswitht   _name(   R3   (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyt   should_do_markupn   s    t   TerminalWriterc        )   B   s  e  Z e 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 d3 e d3 d(  Z e d)    Z e j	 d*    Z d+   Z
 d,   Z d3 d3 d-  Z d.   Z d/ d0  Z d1   Z d2   Z RS(4   t   blacki   t   redi   t   greeni    t   yellowi!   t   bluei"   t   purplei#   t   cyani$   t   whitei%   t   Blacki(   t   Redi)   t   Greeni*   t   Yellowi+   t   Bluei,   t   Purplei-   t   Cyani.   t   Whitei/   R6   i   t   lighti   t   blinki   t   inverti   c         C   s   | d  k r= | r+ t j j   |  _ } q t j j j } nF t j j	 |  r t
 | d  oj t
 | d  r t | d | } n  t
 | d  r | j   r t r t j |  j } n  | p t | d d  |  _ | |  _ t |  |  _ d |  _ d  S(   NR0   R1   t   encodingR!   s   utf-8i    (   R   R   t   iot   TextIOt   stringiot   stdR   t   stdoutR   t   callableRF   t	   WriteFileR!   t   coloramat   AnsiToWin32t   streamt   getattrR^   t   _fileRI   t	   hasmarkupt   _lastlen(   t   selfR3   Ra   R^   (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyt   __init__   s    !	c         C   s   t  |  d  r |  j St   S(   Nt   _terminal_width(   RF   Ro   R   (   Rm   (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyt	   fullwidth   s    c         C   s   | |  _  d  S(   N(   Ro   (   Rm   t   value(    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyRp      s    c         C   sD   | r@ |  j  r@ d j g  | D] } d | ^ q  | d } n  | S(   NR   s   [%sms   [0m(   Rk   R"   (   Rm   R    R2   R5   (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyt   _escaped   s    1c         K   ss   g  } xT | D]L } | |  j  k r8 t d | f   n  | | r | j |  j  |  q q W|  j | t |   S(   Ns   unknown markup: %r(   t	   _esctablet
   ValueErrort   appendRr   R   (   Rm   R    t   kwR2   t   name(    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyt   markup   s    
c         K   s   | d  k r |  j } n  t j d k r4 | d 8} n  | d  k	 r | t |  d d t |  } | | } d | | | f } n | | t |  } t |  t | j    | k r | | j   7} n  |  j | |  d  S(   NR   i   i   s   %s %s %s(   R   Rp   R   R    R/   R   t   line(   Rm   t   sepchart   titleRp   Rv   t   Nt   fillRy   (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyt   sep   s    "
"c         K   sk   | rg t  | t t f  s* t |  } n  |  j rN | rN |  j | |  } n | } t |  j |  n  d  S(   N(   R   R   R    Rk   Rx   t	   write_outRj   (   Rm   t   msgRv   t	   markupmsg(    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyR0      s    R   c         K   s.   |  j  | |  |  j |  |  j  d  d  S(   Ns   
(   R0   t
   _checkfill(   Rm   t   sRv   (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyRy      s    c         K   sU   |  j  s t d   n  |  j | |  |  j |  |  j d  t |  |  _ d  S(   Ns(   cannot use rewrite-line without terminals   (   Rk   Rt   R0   R   R/   Rl   (   Rm   Ry   Rv   (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyt   reline   s    	c         C   s7   |  j  t |  } | d k r3 |  j d |  n  d  S(   Ni    t    (   Rl   R/   R0   (   Rm   Ry   t	   diff2last(    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyR      s    N(   t   __name__t
   __module__t   dictRs   R   R%   Rn   t   propertyRp   t   setterRr   Rx   R~   R0   Ry   R   R   (    (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyRJ   w   s   				
	t   Win32ConsoleWriterc           B   s   e  Z d    Z RS(   c         K   sT  | rPt  | t t f  s* t |  } n  d  } |  j r'| r't t  } t |  j } | d @} | } | j	 d t
  r | t O} n  | j	 d t
  r | t O} no | j	 d t
  r | t O} nP | j	 d t
  r | t O} n1 | j	 d t
  r	| t t BO} n | | d @O} t | |  n  t |  j |  | rPt | |  qPn  d  S(   Ni   R6   RL   RO   RM   RN   i   (   R   R   R    R   Rk   R+   R:   R,   R-   t   popR%   R*   R'   R)   R(   R.   R   Rj   (   Rm   R   Rv   R=   R<   t
   default_bgR9   (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyR0      s0    
(   R   R   R0   (    (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyR      s   Re   c           B   s&   e  Z d d   Z d   Z d   Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   R^   t   _writemethod(   Rm   t   writemethodR^   (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyRn     s    	c         C   s2   |  j  r! | j |  j  d  } n  |  j |  d  S(   Nt   replace(   R^   t   encodeR   (   Rm   t   data(    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyR0     s    	c         C   s   d  S(   N(    (   Rm   (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyR1     s    N(   R   R   R   Rn   R0   R1   (    (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyRe     s   	(   t   wintypesiii   i   i   i   i   i   i    i@   ip   i   t   COORDc           B   s    e  Z d  e f d e f g Z RS(   t   Xt   Y(   R   R   t   SHORTt   _fields_(    (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyR   %  s   	t
   SMALL_RECTc           B   s2   e  Z d  e f d e f d e f d e f g Z RS(   t   Leftt   Topt   Rightt   Bottom(   R   R   R   R   (    (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyR   (  s   			t   CONSOLE_SCREEN_BUFFER_INFOc           B   s>   e  Z d  e f d e f d e j f d e f d e f g Z RS(   t   dwSizet   dwCursorPositionR-   t   srWindowt   dwMaximumWindowSize(   R   R   R   R   t   WORDR   R   (    (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyR   -  s
   			c         C   s
   t  |   S(   N(   t   _GetStdHandle(   t   kind(    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyR+   7  s    c         C   s#   t    } t |  t j |   | S(   N(   R   t   _GetConsoleScreenBufferInfot   ctypest   byref(   R<   t   info(    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyR,   C  s    	c          C   s2   t  t  }  t |   } | j j | j j d f S(   Ni   (   R+   R:   R,   R   R   R   (   R<   R   (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyR   H  s    c         C   s   y |  j  |  Wn t k
 r |  j rl y |  j  | j |  j   Wn t k
 rZ ql X|  j   d  Sn  | j d  j d  } |  j  |  n X|  j   d  S(   Ns   unicode-escapet   ascii(   R0   t   UnicodeEncodeErrorR^   R   R1   t   decode(   t   filR   (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyR   O  s    	
(?   t   __doc__R   R   R   t   version_infot   py3kt
   py.builtinR    R   R%   R#   R   Rf   R    t   ImportErrorR   R$   R   R   t   terminal_widthR>   RI   t   objectRJ   R   Re   R   R:   R;   t   FOREGROUND_BLACKR)   R(   R'   R&   R*   t   BACKGROUND_BLACKt   BACKGROUND_BLUEt   BACKGROUND_GREENt   BACKGROUND_REDt   BACKGROUND_WHITEt   BACKGROUND_INTENSITYt   c_shortR   t	   StructureR   R   R   t   windllt   kernel32R+   R   t   DWORDt   argtypest   HANDLEt   restypeR.   R   t   BOOLt   GetConsoleScreenBufferInfoR   t   POINTERR,   R   (    (    (    s1   /tmp/pip-build-hU8Cw8/py/py/_io/terminalwriter.pyt   <module>   sv   
			5		l			