B
    `D9                 @   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
 dZdZejdkryddlZW n: ek
r   yddlZdZW n ek
r   Y nX Y nX d	d
 Zdd Ze ZdddddddZdd Zd4ddZdd ZG dd deZG dd deZG dd deZ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+G d'd( d(ej,Z-G d)d* d*ej,Z.G d+d, d,ej,Z/ej0j1j2Z3ej4ge3_5ej6e3_7d-d. Z2ej0j1j8Z8ej6ej9ge8_5ej:e8_7ej0j1j;Z<ej6e=e/ge<_5ej:e<_7d/d0 Z>d1d
 Zd2d3 Z?dS )5z8

Helper functions for writing to terminals and files.

    N   )r   r   )textbytesFwin32Tc              C   sl   t r dd l} |  }|j|jfS dd l}dd l}dd l}|d|j	d}|
d|d d \}}||fS d S )Nr      z        Zhhhh   )py33shutilget_terminal_sizelinescolumnstermiosfcntlstructZioctl
TIOCGWINSZunpack)r	   sizer   r   r   callheightwidth r   ]/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/py/_io/terminalwriter.py_getdimensions   s    r   c              C   sb   d} yt  \}} W n$ tjjk
r,    Y n   Y nX | dkrRttjdd} | dk r^d} | S )Nr   COLUMNSP   (   )r   pybuiltinZ_sysexintosenvironget)r   _r   r   r   get_terminal_width'   s    r#   r   r   )AFHNZNaWc             C   s   t d| } tdd | D S )NNFCc             s   s    | ]}t t|d V  qdS )r   N)
char_widthr!   unicodedataeast_asian_width).0cr   r   r   	<genexpr>J   s    z!get_line_width.<locals>.<genexpr>)r+   	normalizesum)r   r   r   r   get_line_widthH   s    r2   c          
   C   s  |d krt j}|  } |r*t|ts*|f}|r\t jdkr\| r\ddd |D |  d } |rh| d7 } |rrtrr| rrd|krd}td	d |D }nd
}t	t
ttt
B ttt
B ttB t	t	d	}||t	}|r|tO }d}d}	|t jkrt|	}
nt|}
t|
j}||d@ O }t|
| x2t| dkrT|| d d  | dd  } q$W | rf||  t|
| n
||  |r|  d S )Nr    c             S   s   g | ]}d | qS )z[%smr   )r-   codr   r   r   
<listcomp>U   s    zansi_print.<locals>.<listcomp>z[0m
r   Tc             S   s   g | ]}|d kr|qS )r   r   )r-   xr   r   r   r5   ^   s    F)	r   )   )    )!   )"   )#   )$   )%   )'   ii   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newlinerU   boldZesctableattrSTD_OUTPUT_HANDLESTD_ERROR_HANDLEhandle	oldcolorsr   r   r   
ansi_printN   sX    





r_   c             C   sb   t jddkrdS t jddkr(dS t| do`|  o`t jddko`tjd	o^t jd
k S )NZ	PY_COLORS1T0FrG   TERMZdumbjavant)	r   r    r!   hasattrrG   rA   rF   
startswith_name)rW   r   r   r   should_do_markup   s    rh   c               @   s   e Zd Zeddddddddd	d
dddddddddddZd2ddZedd Zejdd Zedd Z	edd  Z
d!d" Zd#d$ Zd3d%d&Zd'd( Zd)d* Zd4d,d-Zd.d/ Zd0d1 ZdS )5TerminalWriter   r8   r9   r:   r;   r<   r=   r>   r   )   *   +   ,   -   .   /   r   r         )ZblackredgreenyellowblueZpurpleZcyanZwhiteZBlackZRedZGreenZYellowZBlueZPurpleZCyanWhiterY   lightZblinkinvertNFc             C   s   |d kr,|rt j  | _}qXddlm} n,t j|rXt|drLt|dsXt	||d}t|drz|
 rztrzt|j}|pt|dd| _|| _t|| _d| _d| _d| _d S )	Nr   )stdoutrT   rU   )encodingrG   r|   zutf-8)r   ioTextIOstringiorA   r{   r   callablere   	WriteFilerG   coloramaAnsiToWin32streamgetattrr|   _filerh   	hasmarkup_lastlen_chars_on_current_line_width_of_current_line)selfrW   r   r|   r   r   r   __init__   s    
zTerminalWriter.__init__c             C   s   t | dr| jS t S )N_terminal_width)re   r   r#   )r   r   r   r   	fullwidth   s    
zTerminalWriter.fullwidthc             C   s
   || _ d S )N)r   )r   valuer   r   r   r      s    c             C   s   | 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   r   r   r   chars_on_current_line   s    z$TerminalWriter.chars_on_current_linec             C   s   | j S )zzReturn an estimate of the width so far in the current line.

        .. versionadded:: 1.6.0

        :rtype: int
        )r   )r   r   r   r   width_of_current_line   s    z$TerminalWriter.width_of_current_linec             C   s*   |r&| j r&ddd |D | d }|S )Nr3   c             S   s   g | ]}d | qS )z[%smr   )r-   r4   r   r   r   r5      s    z+TerminalWriter._escaped.<locals>.<listcomp>z[0m)r   rH   )r   r   rV   r   r   r   _escaped   s    
zTerminalWriter._escapedc             K   sR   g }x<|D ]4}|| j kr&td|f || r
|| j |  q
W | |t|S )Nzunknown markup: %r)	_esctable
ValueErrorappendr   rE   )r   r   kwrV   namer   r   r   markup   s    

zTerminalWriter.markupc             K   s   |d kr| j }tjdkr |d8 }|d k	rbt|t| d dt|  d}|| }d|||f }n||t|  }t|t|  |kr|| 7 }| j|f| d S )Nr   r   r   z%s %s %s)r   rA   rF   maxrS   rC   line)r   Zsepchartitler   r   r'   fillr   r   r   r   sep   s    
"zTerminalWriter.sepc             K   sR   |rNt |ttfst|}| | | jr>|r>| j|f|}n|}t| j| d S )N)rD   r   r   _update_chars_on_current_liner   r   	write_outr   )r   msgr   Z	markupmsgr   r   r   rT      s    

zTerminalWriter.writec             C   s   t |trdnd}||dd }t |tr:|jddd}||krXt|| _t|| _n$|  jt|7  _|  jt|7  _d S )N   
r6   r   zutf-8replace)errors)rD   r   rsplitdecoderS   r   r2   r   )r   Ztext_or_bytesrX   current_liner   r   r   r     s    

z,TerminalWriter._update_chars_on_current_liner3   c             K   s&   | j |f| | | |  d d S )Nr6   )rT   
_checkfill)r   sr   r   r   r   r     s    
zTerminalWriter.linec             K   s>   | j std| j|f| | | | d t|| _d S )Nz(cannot use rewrite-line without terminal)r   r   rT   r   rS   r   )r   r   r   r   r   r   reline  s    

zTerminalWriter.relinec             C   s(   | j t| }|dkr$| d|  d S )Nr    )r   rS   rT   )r   r   Z	diff2lastr   r   r   r     s    zTerminalWriter._checkfill)NFN)NN)r3   )__name__
__module____qualname__dictr   r   propertyr   setterr   r   r   r   r   rT   r   r   r   r   r   r   r   r   ri      s$   


	

ri   c               @   s   e Zd Zdd ZdS )Win32ConsoleWriterc             K   s   |rt |ttfst|}| | d }| jr|rtt}t|j}|d@ }|}|	ddrd|t
O }|	ddrz|tO }nR|	ddr|tO }n<|	ddr|tO }n&|	ddr|ttB O }n||d@ O }t|| t| j| |rt|| d S )	Nr@   rY   Frt   rw   ru   rv   rs   )rD   r   r   r   r   rO   r[   rP   rQ   poprN   rK   rM   rL   rR   r   r   )r   r   r   r^   r]   Z
default_bgrZ   r   r   r   rT   !  s2    






zWin32ConsoleWriter.writeN)r   r   r   rT   r   r   r   r   r      s   r   c               @   s&   e Zd ZdddZdd Zdd ZdS )	r   Nc             C   s   || _ || _d S )N)r|   _writemethod)r   Zwritemethodr|   r   r   r   r   B  s    zWriteFile.__init__c             C   s"   | j r|| j d}| | d S )Nr   )r|   encoder   )r   datar   r   r   rT   F  s    zWriteFile.writec             C   s   d S )Nr   )r   r   r   r   rU   K  s    zWriteFile.flush)N)r   r   r   r   rT   rU   r   r   r   r   r   A  s   
r   )wintypesii   rs         r9   @   p      c               @   s   e Zd ZdefdefgZdS )COORDXYN)r   r   r   SHORT_fields_r   r   r   r   r   e  s   r   c               @   s(   e Zd ZdefdefdefdefgZdS )
SMALL_RECTZLeftZTopZRightZBottomN)r   r   r   r   r   r   r   r   r   r   h  s   r   c               @   s0   e Zd ZdefdefdejfdefdefgZdS )CONSOLE_SCREEN_BUFFER_INFOdwSizedwCursorPositionrQ   ZsrWindowZdwMaximumWindowSizeN)r   r   r   r   r   WORDr   r   r   r   r   r   r   m  s
   r   c             C   s   t | S )N)_GetStdHandle)kindr   r   r   rO   w  s    rO   c             C   s   t  }t| t| |S )N)r   _GetConsoleScreenBufferInfoctypesbyref)r]   infor   r   r   rP     s    rP   c              C   s$   t t} t| }|jj|jjd fS )Nr   )rO   r[   rP   r   r   r   )r]   r   r   r   r   r     s    c             C   s   y|  | W nl tk
rz   | jr\y|  || j W n tk
rN   Y nX |   d S |dd}|  | Y nX |   d S )Nzunicode-escapeascii)rT   UnicodeEncodeErrorr|   r   rU   r   )Zfilr   r   r   r   r     s    r   )NTF)@__doc__rA   r   r+   r   version_infoZpy3kr   Z
py.builtinr   r   rI   r   rF   ImportErrorr   r   r#   Zterminal_widthr*   r2   r_   rh   objectri   r   r   r   r[   r\   ZFOREGROUND_BLACKrM   rL   rK   rJ   rN   ZBACKGROUND_BLACKZBACKGROUND_BLUEZBACKGROUND_GREENZBACKGROUND_REDZBACKGROUND_WHITEZBACKGROUND_INTENSITYc_shortr   	Structurer   r   r   windllkernel32rO   r   ZDWORDargtypesZHANDLErestyperR   r   ZBOOLGetConsoleScreenBufferInfor   POINTERrP   r   r   r   r   r   <module>   s   


5	 !



