o
    �õ±jx+  ã                   @   s’   d dl Z d dlZd dlZddlmZmZmZmZmZ ddl	m
Z
mZmZmZ ddlmZmZ dZ	edur7eƒ Z	G dd„ deƒZG dd	„ d	eƒZdS )
é    Né   )ÚAnsiForeÚAnsiBackÚ	AnsiStyleÚStyleÚBEL)Úenable_vt_processingÚWinTermÚWinColorÚWinStyle)ÚwindllÚwinapi_testc                   @   s\   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zedd„ ƒZdS )ÚStreamWrapperz´
    Wraps a stream (such as stdout), acting as a transparent proxy for all
    attribute access apart from method 'write()', which is delegated to our
    Converter instance.
    c                 C   s   || _ || _d S ©N)Ú_StreamWrapper__wrappedÚ_StreamWrapper__convertor)ÚselfÚwrappedÚ	converter© r   ú‡/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/colorama/ansitowin32.pyÚ__init__   s   
zStreamWrapper.__init__c                 C   s   t | j|ƒS r   )Úgetattrr   )r   Únamer   r   r   Ú__getattr__   s   zStreamWrapper.__getattr__c                 O   ó   | j j|i |¤ŽS r   )r   Ú	__enter__©r   ÚargsÚkwargsr   r   r   r      s   zStreamWrapper.__enter__c                 O   r   r   )r   Ú__exit__r   r   r   r   r    %   s   zStreamWrapper.__exit__c                 C   s
   || _ d S r   ©Ú__dict__)r   Ústater   r   r   Ú__setstate__(   s   
zStreamWrapper.__setstate__c                 C   s   | j S r   r!   ©r   r   r   r   Ú__getstate__+   s   zStreamWrapper.__getstate__c                 C   s   | j  |¡ d S r   )r   Úwrite©r   Útextr   r   r   r'   .   s   zStreamWrapper.writec                 C   sT   | j }dtjv r|d ur|tju s|tju rdS z|j}W |ƒ S  ty)   Y dS w )NÚPYCHARM_HOSTEDTF)r   ÚosÚenvironÚsysÚ
__stdout__Ú
__stderr__ÚisattyÚAttributeError)r   ÚstreamÚstream_isattyr   r   r   r0   1   s   
ýÿzStreamWrapper.isattyc              	   C   s(   | j }z|jW S  ttfy   Y dS w ©NT)r   Úclosedr1   Ú
ValueError)r   r2   r   r   r   r5   =   s   ÿzStreamWrapper.closedN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r    r$   r&   r'   r0   Úpropertyr5   r   r   r   r   r      s    r   c                   @   s†   e Zd ZdZe d¡Ze d¡Zddd„Zdd	„ Z	d
d„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚAnsiToWin32z¾
    Implements a 'write()' method which, on Windows, will strip ANSI character
    sequences from the text, and if outputting to a tty, will convert them into
    win32 function calls.
    z?\[((?:\d|;)*)([a-zA-Z])?z?\]([^]*)()?NFc                 C   sÆ   || _ || _t|| ƒ| _tjdk}|otƒ }z| ¡ }W n ty'   d}Y nw | p.t	|ƒ}| jj
 o8| j ¡ }	|o=| }
|d u rG|
pF|	 }|| _|d u rR|
oQ|	}|| _|  ¡ | _| j tju | _d S )NÚntéÿÿÿÿ)r   Ú	autoresetr   r2   r+   r   r   ÚfilenoÚ	Exceptionr   r5   r0   ÚstripÚconvertÚget_win32_callsÚwin32_callsr-   ÚstderrÚ	on_stderr)r   r   rC   rB   r?   Ú
on_windowsÚconversion_supportedÚfdÚsystem_has_native_ansiÚhave_ttyÚneed_conversionr   r   r   r   Q   s*   

ÿ


zAnsiToWin32.__init__c                 C   s   | j p| jp| jS )aj  
        True if this class is actually needed. If false, then the output
        stream will not be affected, nor will win32 calls be issued, so
        wrapping stdout is not actually required. This will generally be
        False on non-Windows platforms, unless optional functionality like
        autoreset has been requested using kwargs to init()
        )rC   rB   r?   r%   r   r   r   Úshould_wrapy   s   zAnsiToWin32.should_wrapc                 C   sŒ  | j �rCt�rCi tjtjf“tjtjtjf“tjtjtj	f“tj	tjtj	f“t
jtjtjf“t
jtjtjf“t
jtjtjf“t
jtjtjf“t
jtjtjf“t
jtjtjf“t
jtjtjf“t
jtjtjf“t
jtjf“t
jtjtjdf“t
jtjtjdf“t
jtjtjdf“t
jtjtjdf“i t
jtjtjdf“t
jtjtjdf“t
jtjtjdf“t
jtjtjdf“tjtj tjf“tjtj tjf“tjtj tjf“tjtj tjf“tjtj tjf“tjtj tjf“tjtj tjf“tjtj tjf“tjtj f“tjtj tjdf“tjtj tjdf“tjtj tjdf“tjtj tjdf“¥tjtj tjdftjtj tjdftjtj tjdftjtj tjdfi¥S t!ƒ S r4   )"rC   Úwintermr   Ú	RESET_ALLÚ	reset_allÚBRIGHTÚstyler   ÚDIMÚNORMALr   ÚBLACKÚforer
   ÚREDÚGREENÚYELLOWÚBLUEÚMAGENTAÚCYANÚWHITEÚGREYÚRESETÚLIGHTBLACK_EXÚLIGHTRED_EXÚLIGHTGREEN_EXÚLIGHTYELLOW_EXÚLIGHTBLUE_EXÚLIGHTMAGENTA_EXÚLIGHTCYAN_EXÚLIGHTWHITE_EXr   ÚbackÚdictr%   r   r   r   rD   ƒ   s˜   
ÿþýüûúùø	÷
öõô
óòñðïîíìëêéèçæåäã
âá à!ß"Þ#Ú(zAnsiToWin32.get_win32_callsc                 C   sD   | j s| jr|  |¡ n| j |¡ | j ¡  | jr |  ¡  d S d S r   )rB   rC   Úwrite_and_convertr   r'   Úflushr?   rQ   r(   r   r   r   r'   ¯   s   
ÿzAnsiToWin32.writec                 C   s>   | j r|  dd¡ d S | js| jjs| j tj¡ d S d S d S )NÚm©r   )	rC   Ú
call_win32rB   r2   r5   r   r'   r   rP   r%   r   r   r   rQ   ¹   s
   ÿzAnsiToWin32.reset_allc                 C   sb   d}|   |¡}| j |¡D ]}| ¡ \}}|  |||¡ | j| ¡ Ž  |}q|  ||t|ƒ¡ dS )zª
        Write the given text to our wrapped stream, stripping any ANSI
        sequences from the text, and optionally converting them into win32
        calls.
        r   N)Úconvert_oscÚANSI_CSI_REÚfinditerÚspanÚwrite_plain_textÚconvert_ansiÚgroupsÚlen)r   r)   ÚcursorÚmatchÚstartÚendr   r   r   rk   À   s   
zAnsiToWin32.write_and_convertc                 C   s.   ||k r| j  |||… ¡ | j  ¡  d S d S r   )r   r'   rl   )r   r)   rz   r{   r   r   r   rt   Ð   s   þzAnsiToWin32.write_plain_textc                 C   s&   | j r|  ||¡}|  ||¡ d S d S r   )rC   Úextract_paramsro   )r   ÚparamstringÚcommandÚparamsr   r   r   ru   Ö   s   þzAnsiToWin32.convert_ansic                 C   sˆ   |dv r"t dd„ | d¡D ƒƒ}t|ƒdk r |d }t|ƒdk s|S t dd„ | d¡D ƒƒ}t|ƒdkrB|d	v r<d
}|S |dv rBd}|S )NÚHfc                 s   s(   � | ]}t |ƒd krt|ƒndV  qdS )r   r   N©rw   Úint©Ú.0Úpr   r   r   Ú	<genexpr>Þ   s   €& z-AnsiToWin32.extract_params.<locals>.<genexpr>ú;é   )r   c                 s   s$   � | ]}t |ƒd krt|ƒV  qdS )r   Nr�   rƒ   r   r   r   r†   ã   s   €" r   ÚJKmrn   ÚABCD)ÚtupleÚsplitrw   )r   r~   r}   r   r   r   r   r|   Ü   s   þøýzAnsiToWin32.extract_paramsc                 C   s  |dkr,|D ]#}|| j v r)| j | }|d }|dd … }t| jd�}||i |¤Ž qd S |dv r<tj|d | jd� d S |dv rLtj|d | jd� d S |dv rZtj|| jd� d S |dv r‚|d }d| fd|f|df| dfd	œ| \}	}
tj|	|
| jd� d S d S )
Nrm   r   r   )rG   ÚJÚKr€   rŠ   )ÚAÚBÚCÚD)rE   rj   rG   rO   Úerase_screenÚ
erase_lineÚset_cursor_positionÚcursor_adjust)r   r~   r   ÚparamÚ	func_argsÚfuncr   r   ÚnÚxÚyr   r   r   ro   î   s*   

€ú*üzAnsiToWin32.call_win32c                 C   s€   | j  |¡D ]7}| ¡ \}}|d |… ||d …  }| ¡ \}}|tkr=| d¡dkr=| d¡}|d dv r=t |d ¡ q|S )Nr‡   r   r   Ú02)	ÚANSI_OSC_RErr   rs   rv   r   ÚcountrŒ   rO   Ú	set_title)r   r)   ry   rz   r{   r}   r~   r   r   r   r   rp     s   
€zAnsiToWin32.convert_oscc                 C   s   | j  ¡  d S r   )r   rl   r%   r   r   r   rl     s   zAnsiToWin32.flush)NNF)r7   r8   r9   r:   ÚreÚcompilerq   rž   r   rN   rD   r'   rQ   rk   rt   ru   r|   ro   rp   rl   r   r   r   r   r<   H   s     


(
,
r<   )r¡   r-   r+   Úansir   r   r   r   r   rO   r   r	   r
   r   Úwin32r   r   Úobjectr   r<   r   r   r   r   Ú<module>   s   8