
ct\c           @   s  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
 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 i d	 d
 6d d 6d	 d 6d	 d 6d	 d 6d d 6Z d   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&     YZ0 d' e j/ f d(     YZ1 d) e j/ f d*     YZ2 e j3 j4 j5 Z6 e j7 g e6 _8 e j9 e6 _: d+   Z5 e j3 j4 j; Z; e j9 e j< g e; _8 e j= e; _: e j3 j4 j> Z? e j9 e j@ e2  g e? _8 e j= e? _: d,   ZA d-   Z n  d.   ZB d S(0   s8   

Helper functions for writing to terminals and files.

iNi    i   (   t   textt   bytest   win32c          C   s   t  r. d d  l }  |  j   } | j | j f Sd d  l } d d  l } d d  l } | j d | j	 d  } | j
 d |  d  \ } } | | f Sd  S(   Nii   s    i   t   hhhhi   s           (   t   py33t   shutilt   get_terminal_sizet   linest   columnst   termiost   fcntlt   structt   ioctlt
   TIOCGWINSZt   unpack(   R   t   sizeR	   R
   R   t   callt   heightt   width(    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyt   _getdimensions   s    $c          C   s   d }  y t    \ } }  Wn  t j j k
 r5   n n X|  d k rf 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   t   _(    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyt   get_terminal_width'   s    	i   t   Ai   t   Ft   Ht   Nt   Nat   Wc         C   s&   t  j d |   }  t d   |  D  S(   Nt   NFCc         s   s*   |  ]  } t  j t j |  d   Vq d S(   i   N(   t
   char_widthR   t   unicodedatat   east_asian_width(   t   .0t   c(    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pys	   <genexpr>J   s    (   R&   t	   normalizet   sum(   R    (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyt   get_line_widthH   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   newlineRE   t   codt   boldt   xt   esctablet   attrt   STD_OUTPUT_HANDLEt   STD_ERROR_HANDLEt   handlet	   oldcolors(    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyt
   ansi_printN   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   0R5   t   TERMt   dumbt   javat   nt(   R   R   R   R8   R9   t   hasattrR5   R/   R4   t
   startswitht   _name(   RG   (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyt   should_do_markup   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 d6 e d6 d(  Z e d)    Z e j	 d*    Z e d+    Z
 e d,    Z d-   Z d.   Z d6 d6 d/  Z d0   Z d1   Z d2 d3  Z d4   Z d5   Z RS(7   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/   RJ   i   t   lighti   t   blinki   t   inverti   c         C   s  | d  k r> | r+ t j j   |  _ } q d d l m } nF t j j |  r t	 | d  ok t	 | d  r t
 | d | } n  t	 | d  r | j   r t r t j |  j } n  | p t | d d  |  _ | |  _ t |  |  _ d |  _ d |  _ d |  _ d  S(	   Ni(   t   stdoutRD   RE   t   encodingR5   s   utf-8i    (   R.   R   t   iot   TextIOt   stringioR/   Rr   R   t   callableRZ   t	   WriteFileR5   t   coloramat   AnsiToWin32t   streamt   getattrRs   t   _fileR]   t	   hasmarkupt   _lastlent   _chars_on_current_linet   _width_of_current_line(   t   selfRG   Rv   Rs   (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyt   __init__   s    !			c         C   s   t  |  d  r |  j St   S(   Nt   _terminal_width(   RZ   R   R   (   R   (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyt	   fullwidth   s    c         C   s   | |  _  d  S(   N(   R   (   R   t   value(    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyR      s    c         C   s   |  j  S(   s   Return 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   (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyt   chars_on_current_line   s    c         C   s   |  j  S(   sz   Return an estimate of the width so far in the current line.

        .. versionadded:: 1.6.0

        :rtype: int
        (   R   (   R   (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyt   width_of_current_line   s    c         C   sD   | r@ |  j  r@ d j g  | D] } d | ^ q  | d } n  | S(   NR-   s   [%sms   [0m(   R~   R6   (   R   R    RF   RI   (    (    s4   lib/python2.7/site-packages/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   appendR   R3   (   R   R    t   kwRF   t   name(    (    s4   lib/python2.7/site-packages/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 | t |  d d t |  d  } | | } d | | | f } n | | t |  } t |  t | j    | k r | | j   7} n  |  j | |  d  S(   NR   i   i   s   %s %s %s(   R.   R   R/   R4   t   maxRC   R1   t   line(   R   t   sepchart   titleR   R   R!   t   fillR   (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyt   sep   s    +
"c         K   sx   | rt t  | t t f  s* t |  } n  |  j |  |  j r[ | r[ |  j | |  } n | } t |  j |  n  d  S(   N(   R2   R   R    t   _update_chars_on_current_lineR~   R   t	   write_outR}   (   R   t   msgR   t	   markupmsg(    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyRD      s    c         C   s   t  | t  r d n d } | j | d  d } t  | t  rX | j d d d } n  | | k r t |  |  _ t |  |  _ n* |  j t |  7_ |  j t |  7_ d  S(   Ns   
i   is   utf-8t   errorst   replace(   R2   R   t   rsplitt   decodeRC   R   R,   R   (   R   t   text_or_bytesRH   t   current_line(    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyR     s    R-   c         K   s.   |  j  | |  |  j |  |  j  d  d  S(   Ns   
(   RD   t
   _checkfill(   R   t   sR   (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyR     s    c         K   sU   |  j  s t d   n  |  j | |  |  j |  |  j d  t |  |  _ d  S(   Ns(   cannot use rewrite-line without terminals   (   R~   R   RD   R   RC   R   (   R   R   R   (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyt   reline  s    	c         C   s7   |  j  t |  } | d k r3 |  j d |  n  d  S(   Ni    t    (   R   RC   RD   (   R   R   t	   diff2last(    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyR     s    N(   t   __name__t
   __module__t   dictR   R.   R9   R   t   propertyR   t   setterR   R   R   R   R   RD   R   R   R   R   (    (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyR^      s$   
						t   Win32ConsoleWriterc           B   s   e  Z d    Z RS(   c         K   sa  | r]t  | t t f  s* t |  } n  |  j |  d  } |  j r4| r4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 |  | r]t | |  q]n  d  S(   Ni   RJ   R`   Rc   Ra   Rb   i   (   R2   R   R    R   R.   R~   R?   RN   R@   RA   t   popR9   R>   R;   R=   R<   RB   R   R}   (   R   R   R   RQ   RP   t
   default_bgRM   (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyRD   !  s2    
(   R   R   RD   (    (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyR      s   Rx   c           B   s&   e  Z d d   Z d   Z d   Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   Rs   t   _writemethod(   R   t   writemethodRs   (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyR   B  s    	c         C   s2   |  j  r! | j |  j  d  } n  |  j |  d  S(   NR   (   Rs   t   encodeR   (   R   t   data(    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyRD   F  s    	c         C   s   d  S(   N(    (   R   (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyRE   K  s    N(   R   R   R.   R   RD   RE   (    (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyRx   A  s   	(   t   wintypesiii   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_(    (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyR   e  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   (    (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyR   h  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   dwCursorPositionRA   t   srWindowt   dwMaximumWindowSize(   R   R   R   R   t   WORDR   R   (    (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyR   m  s
   			c         C   s
   t  |   S(   N(   t   _GetStdHandle(   t   kind(    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyR?   w  s    c         C   s#   t    } t |  t j |   | S(   N(   R   t   _GetConsoleScreenBufferInfot   ctypest   byref(   RP   t   info(    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyR@     s    	c          C   s2   t  t  }  t |   } | j j | j j d f S(   Ni   (   R?   RN   R@   R   R   R   (   RP   R   (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyR     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(   RD   t   UnicodeEncodeErrorRs   R   RE   R   (   t   filR   (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyR     s    	
(   i   i   (C   t   __doc__R/   R   R&   R   t   version_infot   py3kR   t
   py.builtinR    R   R9   R7   R.   Ry   R4   t   ImportErrorR   R8   R   R   t   terminal_widthR%   R,   RR   R]   t   objectR^   R   Rx   R   RN   RO   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   restypeRB   R   t   BOOLt   GetConsoleScreenBufferInfoR   t   POINTERR@   R   (    (    (    s4   lib/python2.7/site-packages/py/_io/terminalwriter.pyt   <module>   s   $
			
	5		!			