
    F-Ph"                        d Z ddlmZ ddlm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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dlmZ ddZddZe	 G d d                      ZdS )z4Helper functions for writing to terminals and files.    )annotations)SequenceN)final)Literal)TextIO)TerminalFormatter)Lexer)	DiffLexer)PythonLexer   )assert_never   )wcswidthreturnintc                 F    t          j        d          \  } }| dk     rd} | S )N)P      )fallback(   r   )shutilget_terminal_size)width_s     Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/_pytest/_io/terminalwriter.pyget_terminal_widthr      s.    ':::HE1 rzzL    filer   boolc                   t           j                            d          dk    rdS t           j                            d          dk    rdS t           j                            d          rdS t           j                            d          rdS t          | d          o6|                                 o"t           j                            d	          d
k    S )N	PY_COLORS1T0FNO_COLORFORCE_COLORisattyTERMdumb)osenvirongethasattrr&   )r   s    r   should_do_markupr-   $   s    	z~~k""c))t	z~~k""c))u	z~~j!! u	z~~m$$ thVDKKMMVbjnnV6L6LPV6Vr   c                  J   e Zd Z edHi 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dWdXd.ZedYd0            Zej        dZd2            ZedYd3            Z	d[d8Z
	 	 d\d]d>Zd?d@d^dCZd_d`dFZdadGZdbdcdLZdddPZdedRZ	 dfdgdVZd)S )hTerminalWriterblack   red   green    yellow!   blue"   purple#   cyan$   white%   Blackr   Red)   Green*   Yellow+   Blue,   Purple-   Cyan.   White/   boldr   lightr   blink   invert   Nr   TextIO | Noner   Nonec                R   |t           j        }t          |d          rX|                                rDt           j        dk    r4	 dd l}|                    |          j        }|J n# t          $ r Y nw xY w|| _	        t          |          | _        d| _        d | _        d| _        d S )Nr&   win32r    T)sysstdoutr,   r&   platformcoloramaAnsiToWin32streamImportError_filer-   	hasmarkup_current_line_terminal_widthcode_highlight)selfr   r]   s      r   __init__zTerminalWriter.__init__K   s    <:D4"" 	(t{{}} 	(9P9P(  ++D118''''	    
 
)$//+/"s   A' '
A43A4r   c                :    | j         | j         S t                      S N)rd   r   rf   s    r   	fullwidthzTerminalWriter.fullwidth\   s     +''!###r   valuec                    || _         d S ri   )rd   )rf   rl   s     r   rk   zTerminalWriter.fullwidthb   s    $r   c                *    t          | j                  S )z;Return an estimate of the width so far in the current line.)r   rc   rj   s    r   width_of_current_linez$TerminalWriter.width_of_current_linef   s     *+++r   textstrmarkupr   c                     |D ]}| j         vrt          d|           j        rG fd|                                D             }|r%d                    d |D                       |z   dz   }|S )Nzunknown markup: c                4    g | ]\  }}|j         |         S  )	_esctable).0nameonrf   s      r   
<listcomp>z)TerminalWriter.markup.<locals>.<listcomp>p   s)    MMMHD""M4>$'MMMr   rY   c              3  "   K   | ]
}d | dV  dS )z[mNru   )rw   cods     r   	<genexpr>z(TerminalWriter.markup.<locals>.<genexpr>r   s*      ==#~s~~~======r   [0m)rv   
ValueErrorrb   itemsjoin)rf   rp   rr   rx   escs   `    r   rr   zTerminalWriter.markupk   s     	> 	>D4>)) !<D!<!<=== *> 	QMMMMMMMC Qww=======DyPr   sepchartitle
str | Nonerk   
int | Nonec                   || j         }t          j        dk    r|dz  }|Ft          |t	          |          z
  dz
  dt	          |          z  z  d          }||z  }| d| d| }n||t	          |          z  z  }t	          |          t	          |                                          z   |k    r||                                z  } | j        |fi | d S )NrX   r   r    )rk   rZ   r\   maxlenrstripline)rf   r   r   rk   rr   Nfillr   s           r   sepzTerminalWriter.sepu   s     I <7""
 NI
 YU+a/QW5EFJJAQ;D++U++T++DD i3w<<78D t99s7>>++,,,	99GNN$$$D	$!!&!!!!!r   F)flushmsgr   c                  |r|                     dd          d         }d|v r|| _        n| xj        |z  c_         | j        |fi |}	 | j                            |           nR# t
          $ rE |                    d                              d          }| j                            |           Y nw xY w|r|                                  d S d S d S )N
r   zunicode-escapeascii)	rsplitrc   rr   ra   writeUnicodeEncodeErrorencodedecoder   )rf   r   r   rr   current_lines        r   r   zTerminalWriter.write   s	    	::dA..r2Ls{{%1""""l2""$+c,,V,,C
&
  %%%%% & & & jj!12299'BB
  %%%%%&  

-	 	* s   
A% %AB43B4rY   sc                L     | j         |fi | |                      d           d S )Nr   )r   )rf   r   rr   s      r   r   zTerminalWriter.line   s4    
1

4r   c                8    | j                                          d S ri   )ra   r   rj   s    r   r   zTerminalWriter.flush   s    
r   ru   linesSequence[str]indentsc                   |rPt          |          t          |          k    r0t          dt          |           dt          |           d          |sdgt          |          z  }d                    |          }|                     |                                          }t          ||          D ]\  }}|                     ||z              d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.
        zindents size (z") should have same size as lines ()rY   r   N)r   r   r   
_highlight
splitlineszipr   )rf   r   r   source	new_linesindentnew_lines          r   _write_sourcezTerminalWriter._write_source   s      	s7||s5zz11^W^^QTUZQ[Q[^^^    	(dSZZ'G5!!OOF++6688	 #GY 7 7 	) 	)FHIIfx'((((	) 	)r   lexerLiteral['python', 'diff']r	   c                t    |dk    rt                      S |dk    rt                      S t          |           d S )Npythondiff)r   r
   r   )rf   r   s     r   _get_pygments_lexerz"TerminalWriter._get_pygments_lexer   s>    H== f__;;r   r   c                *   ddl m} t          j        d          }t          j        dd          }	 t	          ||          S # t
          j        j        $ r} |d| d          |d }~wt
          j        j        $ r} |d	| d
          |d }~ww xY w)Nr   )
UsageErrorPYTEST_THEMEPYTEST_THEME_MODEdark)bgstylez9PYTEST_THEME environment variable has an invalid value: 'zC'. Hint: See available pygments styles with `pygmentize -L styles`.z>PYTEST_THEME_MODE environment variable has an invalid value: 'z7'. The allowed values are 'dark' (default) and 'light'.)	_pytest.config.exceptionsr   r)   getenvr   pygmentsutilClassNotFoundOptionError)rf   r   theme
theme_modees        r   _get_pygments_formatterz&TerminalWriter._get_pygments_formatter   s    888888	.))Y2F;;
	$
%@@@@}* 	 	 	*SE S S S   }( 	 	 	*GQ[ G G G  	s#   A BA&&B=BBr   r   Literal['diff', 'python']c                    |r| j         r| j        s|S |                     |          }|                                 }t	          j        |||          }|d         dk    r|d         dk    r
|dd         }d|z   }|S )z5Highlight the given source if we have markup support.r   r   Nr   )rb   re   r   r   r   	highlight)rf   r   r   pygments_lexerpygments_formatterhighlighteds         r   r   zTerminalWriter._highlight   s      	T^ 	43F 	M11%88!99;;#-N$6
 

 r?d""vbzT'9'9%crc*K
  +-r   ri   )r   rU   r   rV   r   r   )rl   r   r   rV   )rp   rq   rr   r   r   rq   )NN)
r   rq   r   r   rk   r   rr   r   r   rV   )r   rq   r   r   rr   r   r   rV   )rY   )r   rq   rr   r   r   rV   )r   rV   )ru   )r   r   r   r   r   rV   )r   r   r   r	   )r   r   )r   )r   rq   r   r   r   rq   )__name__
__module____qualname__dictrv   rg   propertyrk   setterro   rr   r   r   r   r   r   r   r   r   ru   r   r   r/   r/   2   sy          bB b r	
 R r R b b B b r R r R  b!" Q#$ a%& a'( q)I.# # # # #" $ $ $ X$
 % % % % , , , X,    ! $	#" #" #" #" #"J 05      2       ) ) ) ) )$          ( ?G      r   r/   r   )r   r   r   r   )__doc__
__future__r   collections.abcr   r)   r   rZ   typingr   r   r   r   pygments.formatters.terminalr   pygments.lexerr	   pygments.lexers.diffr
   pygments.lexers.pythonr   compatr   wcwidthr   r   r-   r/   ru   r   r   <module>r      se   : : " " " " " " $ $ $ $ $ $ 				  



                    : : : : : :             * * * * * * . . . . . . ! ! ! ! ! !             K K K K K K K K K Kr   