U
    L[#                     @   s4  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZddlmZm	Z	m
Z
 d dlmZmZmZmZmZmZmZmZmZmZmZ zd dlmZ ejZejZW n ek
r   dZY nX d dlmZmZ eeZejZejZej Z ej!Z!ej"Z"eedejfZ#eeeeeedej$fZ%ed	Z&ed
Z'edZ(d Z)dZ*d Z+dZ,dZ-d Z.dZ/dZ0dZ1dZ2G dd dej3Z4edkr~dZ5n
d/ddZ5G dd de j6Z7G dd de7Z8G dd de7Z9G dd de:Z;G dd de:Z<e= Z>d d! Z?d"d# Z@d$d% ZAd&d' ZBe
rd(d) ZCeC ZDd*d+ ZEe@eAeBd,ZFd-d. ZGdS )0    N   )_NonClosingTextIOWrapper	text_typePY2)byrefPOINTERc_intc_charc_char_pc_void_p	py_object	c_ssize_tc_ulongwindllWINFUNCTYPE)	pythonapi)LPWSTRLPCWSTRGetCommandLineWCommandLineToArgvWiii   i        i  c                   @   sj   e Zd Zdefdefdefdefdefdefdefdefd	efd
efdefgZ	e
rfe	dded f dS )	Py_bufferbufobjlenitemsizereadonlyndimformatshapestrides
suboffsetsZinternalZ
smalltabler   N)__name__
__module____qualname__r   r   r   r   r
   	c_ssize_pZ_fields_r   insert r*   r*   3/usr/lib/python3/dist-packages/click/_winconsole.pyr   @   s   r   Fc              	   C   sT   t  }|rtnt}tt| t|| zt|j }|	|j
W S tt| X d S N)r   PyBUF_WRITABLEPyBUF_SIMPLEPyObject_GetBufferr   r   PyBuffer_Releaser	   r   Zfrom_addressr   )r   writabler   flagsZbuffer_typer*   r*   r+   
get_bufferX   s    
r3   c                   @   s   e Zd Zdd Zdd ZdS )_WindowsConsoleRawIOBasec                 C   s
   || _ d S r,   )handle)selfr5   r*   r*   r+   __init__e   s    z!_WindowsConsoleRawIOBase.__init__c                 C   s   t j|  dS NT)io	RawIOBaseisattyr6   r*   r*   r+   r;   h   s    z_WindowsConsoleRawIOBase.isattyN)r%   r&   r'   r7   r;   r*   r*   r*   r+   r4   c   s   r4   c                   @   s   e Zd Zdd Zdd ZdS )_WindowsConsoleReaderc                 C   s   dS r8   r*   r<   r*   r*   r+   readableo   s    z_WindowsConsoleReader.readablec                 C   s   t |}|sdS |d r tdt|dd}|d }t }t| j||t|d }t tkrdt	
d |svtdt  |d tkrdS d|j S )Nr   r   z>cannot read odd number of bytes from UTF-16-LE encoded consoleT)r1   g?zWindows error: %s)r   
ValueErrorr3   r   ReadConsoleWr5   r   GetLastErrorERROR_OPERATION_ABORTEDtimesleepOSErrorEOFvalue)r6   bZbytes_to_be_readbufferZcode_units_to_be_readZcode_units_readrvr*   r*   r+   readintor   s&    
 

z_WindowsConsoleReader.readintoN)r%   r&   r'   r>   rK   r*   r*   r*   r+   r=   m   s   r=   c                   @   s(   e Zd Zdd Zedd Zdd ZdS )_WindowsConsoleWriterc                 C   s   dS r8   r*   r<   r*   r*   r+   r1      s    z_WindowsConsoleWriter.writablec                 C   s    | t krdS | tkrdS d|  S )NERROR_SUCCESSERROR_NOT_ENOUGH_MEMORYzWindows error %s)rM   rN   )errnor*   r*   r+   _get_error_message   s
    z(_WindowsConsoleWriter._get_error_messagec                 C   sh   t |}t|}t|td }t }t| j||t|d  d|j }|dkrd|dkrdt	| 
t |S )Nr   r   )r   r3   minMAX_BYTES_WRITTENr   WriteConsoleWr5   r   rG   rE   rP   rA   )r6   rH   Zbytes_to_be_writtenr   Zcode_units_to_be_writtenZcode_units_writtenZbytes_writtenr*   r*   r+   write   s     
 
z_WindowsConsoleWriter.writeN)r%   r&   r'   r1   staticmethodrP   rT   r*   r*   r*   r+   rL      s   
rL   c                   @   sH   e Zd Zdd Zedd Zdd Zdd Zd	d
 Zdd Z	dd Z
dS )ConsoleStreamc                 C   s   || _ || _d S r,   )_text_streamrI   )r6   text_streamZbyte_streamr*   r*   r+   r7      s    zConsoleStream.__init__c                 C   s   | j jS r,   )rI   namer<   r*   r*   r+   rY      s    zConsoleStream.namec                 C   sD   t |tr| j|S z|   W n tk
r6   Y nX | j|S r,   )
isinstancer   rW   rT   flush	ExceptionrI   )r6   xr*   r*   r+   rT      s    
zConsoleStream.writec                 C   s   |D ]}|  | qd S r,   )rT   )r6   linesliner*   r*   r+   
writelines   s    zConsoleStream.writelinesc                 C   s   t | j|S r,   )getattrrW   r6   rY   r*   r*   r+   __getattr__   s    zConsoleStream.__getattr__c                 C   s
   | j  S r,   )rI   r;   r<   r*   r*   r+   r;      s    zConsoleStream.isattyc                 C   s   d| j | jf S )Nz#<ConsoleStream name=%r encoding=%r>)rY   encodingr<   r*   r*   r+   __repr__   s    zConsoleStream.__repr__N)r%   r&   r'   r7   propertyrY   rT   r`   rc   r;   re   r*   r*   r*   r+   rV      s   
	rV   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	WindowsChunkedWriterz
    Wraps a stream (such as stdout), acting as a transparent proxy for all
    attribute access apart from method 'write()' which we wrap to write in
    limited chunks due to a Windows limitation on binary console streams.
    c                 C   s
   || _ d S r,   )_WindowsChunkedWriter__wrapped)r6   wrappedr*   r*   r+   r7      s    zWindowsChunkedWriter.__init__c                 C   s   t | j|S r,   )ra   rh   rb   r*   r*   r+   rc      s    z WindowsChunkedWriter.__getattr__c                 C   sH   t |}d}||k rDt|| t}| j||||   ||7 }qd S )Nr   )r   rQ   rR   rh   rT   )r6   textZtotal_to_writeZwrittenZto_writer*   r*   r+   rT      s    zWindowsChunkedWriter.writeN)r%   r&   r'   __doc__r7   rc   rT   r*   r*   r*   r+   rg      s   rg   c                 C   sD   t r@t d d dkr@| tkr@tt| ttt|  t|  d S )Nr   )   r   )r   sysZgetwindowsversion_wrapped_std_streamssetattrrg   ra   add)rY   r*   r*   r+   _wrap_std_stream   s     rq   c                 C   s$   t tttdddd}t|| S N	utf-16-lestrictT)line_buffering)r   r9   BufferedReaderr=   STDIN_HANDLErV   Zbuffer_streamrX   r*   r*   r+   _get_text_stdin   s      ry   c                 C   s$   t tttdddd}t|| S rr   )r   r9   BufferedWriterrL   STDOUT_HANDLErV   rx   r*   r*   r+   _get_text_stdout   s      r|   c                 C   s$   t tttdddd}t|| S rr   )r   r9   rz   rL   STDERR_HANDLErV   rx   r*   r*   r+   _get_text_stderr   s      r~   c                   C   s   t dtjdd  S )N r   )zlibZcrc32joinrm   argvr*   r*   r*   r+   _hash_py_argv  s    r   c                     s   t d} tt t|   fddtd| jD }ttds|dd  }t|dkr|d }|	dr|dkrpq|dd  }|	drHqqH|dd  S )Nr   c                    s   g | ]} | qS r*   r*   ).0iZargv_unicoder*   r+   
<listcomp>  s     z%_get_windows_argv.<locals>.<listcomp>frozenr   -)z-cz-m)
r   r   r   r   rangerG   hasattrrm   r   
startswith)Zargcr   argr*   r   r+   _get_windows_argv	  s    

r   )r   r   r   c                 C   s|   t d k	rx|dkrx|dkrxt| drx|  rxt|  }|d k	rxts^t| dd } | d krpd S nt	|  t
j || S d S )N)rs   N)rt   Nr;   rI   )r3   r   r;   _stream_factoriesgetfilenor   ra   msvcrtZsetmodeosZO_BINARY)frd   errorsfuncr*   r*   r+   _get_windows_console_stream"  s"    r   )F)Hr9   r   rm   r   rC   Zctypesr   Z_compatr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r/   r0   ImportErrorZctypes.wintypesr   r   r(   Zkernel32ZGetStdHandler@   rS   rA   r   Zshell32r   rw   r{   r}   r.   r-   rM   rN   rB   ZSTDIN_FILENOZSTDOUT_FILENOZSTDERR_FILENOrF   rR   Z	Structurer   r3   r:   r4   r=   rL   objectrV   rg   setrn   rq   ry   r|   r~   r   Z_initial_argv_hashr   r   r   r*   r*   r*   r+   <module>   s   4

  


$