o
    Ú­jØ  ã                   @   sŽ   d Z ddlZddlZddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ d	efd
d„Zded	efdd„ZeG dd„ dƒƒZdS )z4Helper functions for writing to terminals and files.é    N)ÚOptional)ÚSequence)ÚTextIOé   )Úwcswidth)ÚfinalÚreturnc                  C   s    t jdd�\} }| dk rd} | S )N)éP   é   )Úfallbacké(   r	   )ÚshutilÚget_terminal_size)ÚwidthÚ_© r   úW/var/www/html/CropPilot/venv/lib/python3.10/site-packages/_pytest/_io/terminalwriter.pyÚget_terminal_width   s   r   Úfilec                 C   sf   t j d¡dkr
dS t j d¡dkrdS dt jv rdS dt jv r"dS t| dƒo2|  ¡ o2t j d	¡d
kS )NÚ	PY_COLORSÚ1TÚ0FÚNO_COLORÚFORCE_COLORÚisattyÚTERMÚdumb)ÚosÚenvironÚgetÚhasattrr   )r   r   r   r   Úshould_do_markup   s   

 ÿr!   c                   @   s˜  e Zd ZedIi 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dQd*ee d+d)fd,d-„Zed+e	fd.d/„ƒZ
e
jd0e	d+d)fd1d/„ƒZ
ed+e	fd2d3„ƒZd4ed5ed+efd6d7„Z	)	)dRd8ed9ee d:ee	 d5ed+d)f
d;d<„Zd=d>œd?ed@ed5ed+d)fdAdB„ZdSdDed5ed+d)fdEdF„ZdTdGdH„ZdUdJee dKee d+d)fdLdM„ZdNed+efdOdP„Zd)S )VÚTerminalWriterÚblacké   Úredé   Úgreené    Úyellowé!   Úblueé"   Úpurpleé#   Úcyané$   Úwhiteé%   ÚBlackr   ÚRedé)   ÚGreené*   ÚYellowé+   ÚBlueé,   ÚPurpleé-   ÚCyané.   ÚWhiteé/   Úboldr   Úlighté   Úblinké   Úinverté   Nr   r   c                 C   sˆ   |d u rt j}t|dƒr1| ¡ r1t jdkr1zdd l}W n	 ty$   Y nw | |¡j}|d us1J ‚|| _	t
|ƒ| _d| _d | _d| _d S )Nr   Úwin32r   Ú T)ÚsysÚstdoutr    r   ÚplatformÚcoloramaÚImportErrorÚAnsiToWin32ÚstreamÚ_filer!   Ú	hasmarkupÚ_current_lineÚ_terminal_widthÚcode_highlight)Úselfr   rN   r   r   r   Ú__init__A   s   ÿ

zTerminalWriter.__init__c                 C   s   | j d ur| j S tƒ S ©N)rU   r   ©rW   r   r   r   Ú	fullwidthR   s   
zTerminalWriter.fullwidthÚvaluec                 C   s
   || _ d S rY   )rU   )rW   r\   r   r   r   r[   X   s   
c                 C   s
   t | jƒS )z;Return an estimate of the width so far in the current line.)r   rT   rZ   r   r   r   Úwidth_of_current_line\   s   
z$TerminalWriter.width_of_current_lineÚtextÚmarkupc                    sb   |D ]}|ˆ j vrtd|›�ƒ‚qˆ jr/‡ fdd„| ¡ D ƒ}|r/d dd„ |D ƒ¡| d }|S )Nzunknown markup: c                    s   g | ]\}}|rˆ j | ‘qS r   )Ú	_esctable)Ú.0ÚnameÚonrZ   r   r   Ú
<listcomp>f   s    z)TerminalWriter.markup.<locals>.<listcomp>rJ   c                 s   s   � | ]}d | V  qdS )z[%smNr   )ra   Úcodr   r   r   Ú	<genexpr>h   s   € z(TerminalWriter.markup.<locals>.<genexpr>z[0m)r`   Ú
ValueErrorrS   ÚitemsÚjoin)rW   r^   r_   rb   Úescr   rZ   r   r_   a   s   
ÿzTerminalWriter.markupÚsepcharÚtitler[   c                 K   s²   |d u r| j }tjdkr|d8 }|d ur4t|t|ƒ d dt|ƒ  dƒ}|| }|› d|› d|› �}n||t|ƒ  }t|ƒt| ¡ ƒ |krN|| ¡ 7 }| j|fi |¤Ž d S )NrI   r   rD   ú )r[   rK   rM   ÚmaxÚlenÚrstripÚline)rW   rk   rl   r[   r_   ÚNÚfillrq   r   r   r   Úsepk   s   
"zTerminalWriter.sepF)ÚflushÚmsgru   c                K   sœ   |rJ|  dd¡d }d|v r|| _n|  j|7  _| j|fi |¤Ž}z| j |¡ W n tyA   | d¡ d¡}| j |¡ Y nw |rL|  ¡  d S d S d S )NÚ
r   éÿÿÿÿzunicode-escapeÚascii)	ÚrsplitrT   r_   rR   ÚwriteÚUnicodeEncodeErrorÚencodeÚdecoderu   )rW   rv   ru   r_   Úcurrent_liner   r   r   r{   �   s    ø
êzTerminalWriter.writerJ   Úsc                 K   s    | j |fi |¤Ž |   d¡ d S )Nrw   )r{   )rW   r€   r_   r   r   r   rq   ©   s   zTerminalWriter.linec                 C   s   | j  ¡  d S rY   )rR   ru   rZ   r   r   r   ru   ­   s   zTerminalWriter.flushr   ÚlinesÚindentsc                 C   s|   |rt |ƒt |ƒkrtd t |ƒt |ƒ¡ƒ‚|sdgt |ƒ }d |¡}|  |¡ ¡ }t||ƒD ]\}}|  || ¡ q0dS )aI  Write lines of source code possibly highlighted.

        Keeping this private for now because the API is clunky. We should discuss how
        to evolve the terminal writer so we can have more precise color support, for example
        being able to write part of a line in one color and the rest in another, and so on.
        z5indents size ({}) should have same size as lines ({})rJ   rw   N)ro   rg   Úformatri   Ú
_highlightÚ
splitlinesÚziprq   )rW   r�   r‚   ÚsourceÚ	new_linesÚindentÚnew_liner   r   r   Ú_write_source°   s   ÿÿ
ÿzTerminalWriter._write_sourcer‡   c              	   C   sÚ   ddl m} | jr| js|S zddlm} ddlm} ddlm	} ddl
}W n ty1   | Y S w z|||ƒ |t dd¡t d	¡d
�ƒ}|W S  |jjyZ   |d t d	¡¡ƒ‚ |jjyl   |d t d¡¡ƒ‚w )z:Highlight the given source code if we have markup support.r   )Ú
UsageError)ÚTerminalFormatter)ÚPythonLexer)Ú	highlightNÚPYTEST_THEME_MODEÚdarkÚPYTEST_THEME)ÚbgÚstylezdPYTEST_THEME environment variable had an invalid value: '{}'. Only valid pygment styles are allowed.zrPYTEST_THEME_MODE environment variable had an invalid value: '{}'. The only allowed values are 'dark' and 'light'.)Ú_pytest.config.exceptionsrŒ   rS   rV   Úpygments.formatters.terminalr�   Úpygments.lexers.pythonrŽ   Úpygmentsr�   Úpygments.utilrO   r   ÚgetenvÚutilÚClassNotFoundrƒ   ÚOptionError)rW   r‡   rŒ   r�   rŽ   r�   r˜   Úhighlightedr   r   r   r„   Ä   sH   ÿ
þýÿþÿþÿzTerminalWriter._highlightrY   )NN)rJ   )r   N)r   )Ú__name__Ú
__module__Ú__qualname__Údictr`   r   r   rX   ÚpropertyÚintr[   Úsetterr]   ÚstrÚboolr_   rt   r{   rq   ru   r   r‹   r„   r   r   r   r   r"   (   sˆ    ÿþýüûúùø	÷
öõôóòñðïîíìüþýüû
ú %
 r"   )Ú__doc__r   r   rK   Útypingr   r   r   Úwcwidthr   Ú_pytest.compatr   r¤   r   r§   r!   r"   r   r   r   r   Ú<module>   s    
