
    yIf"                         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d	l
mZ d
dlmZ defdZde	defdZe G d d                      ZdS )z4Helper functions for writing to terminals and files.    N)final)Literal)Optional)Sequence)TextIO   )assert_never   )wcswidthreturnc                  F    t          j        d          \  } }| dk     rd} | S )N)P      )fallback(   r   )shutilget_terminal_size)width_s     N/var/www/piapp/venv/lib/python3.11/site-packages/_pytest/_io/terminalwriter.pyget_terminal_widthr      s.    ':::HE1 rzzL    filec                    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                      e Zd Z edAi 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dJd*ee         d+d)fd,Zed+e	fd-            Z
e
j        d.e	d+d)fd/            Z
ed+e	fd0            Zd1ed2ed+efd3Z	 	 dKd4ed5ee         d6ee	         d2ed+d)f
d7Zd8d9d:ed;ed2ed+d)fd<ZdLd>ed2ed+d)fd?ZdMd@ZdNdBee         dCee         d+d)fdDZ	 dOdFedGedH         d+efdIZd)S )PTerminalWriterblack   red   green    yellow!   blue"   purple#   cyan$   white%   Blackr   Red)   Green*   Yellow+   Blue,   Purple-   Cyan.   White/   boldr
   lightr   blink   invert   Nr   r   c                 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   rU   s      r   __init__zTerminalWriter.__init__D   s    <:D4"" 	(t{{}} 	(9P9P(  ++D118''''	    
 
)$//.2"s   A' '
A43A4c                 :    | j         | j         S t                      S N)r\   r   r^   s    r   	fullwidthzTerminalWriter.fullwidthU   s     +''!###r   valuec                     || _         d S ra   )r\   )r^   rd   s     r   rc   zTerminalWriter.fullwidth[   s    $r   c                 *    t          | j                  S )z;Return an estimate of the width so far in the current line.)r   r[   rb   s    r   width_of_current_linez$TerminalWriter.width_of_current_line_   s     *+++r   textmarkupc                      |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onr^   s      r   
<listcomp>z)TerminalWriter.markup.<locals>.<listcomp>i   s)    MMMHD""M4>$'MMMr   rQ   c              3       K   | ]	}d |z  V  
dS )z[%smNrl   )rn   cods     r   	<genexpr>z(TerminalWriter.markup.<locals>.<genexpr>k   s'      ??CzC/??????r   [0m)rm   
ValueErrorrZ   itemsjoin)r^   rh   ri   ro   escs   `    r   ri   zTerminalWriter.markupd   s     	> 	>D4>)) !<D!<!<=== *> 	SMMMMMMMC Sww??3?????$FRr   sepchartitlerc   c                    || 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 )NrP   r
   r    )rc   rR   rT   maxlenrstripline)r^   rz   r{   rc   ri   Nfillr   s           r   sepzTerminalWriter.sepn   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)	rsplitr[   ri   rY   writeUnicodeEncodeErrorencodedecoder   )r^   r   r   ri   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rQ   sc                 L     | j         |fi | |                      d           d S )Nr   )r   )r^   r   ri   s      r   r   zTerminalWriter.line   s4    
1

4r   c                 8    | j                                          d S ra   )rY   r   rb   s    r   r   zTerminalWriter.flush   s    
r   rl   lines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 ()rQ   r   N)r   rv   rx   
_highlight
splitlineszipr   )r^   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   pythonr   lexer)diffr   c           
         ddl m} |r| j        r| j        s|S 	 ddlm} |dk    rddlm} n|dk    rddlm	} nt          |           ddlm} dd	l}	  || |             |t          j        d
d          t          j        d                              }|d         dk    r|d         dk    r
|d	d         }d|z   S # |j        j        $ r6}	 |d                    t          j        d                              |	d	}	~	w|j        j        $ r6}	 |d                    t          j        d
                              |	d	}	~	ww xY w# t(          $ r |cY S w xY w)z5Highlight the given source if we have markup support.r   )
UsageError)TerminalFormatterr   )PythonLexerr   )	DiffLexer)	highlightNPYTEST_THEME_MODEdarkPYTEST_THEME)bgstyler   r   ru   zdPYTEST_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   rZ   r]   pygments.formatters.terminalr   pygments.lexers.pythonr   pygments.lexers.diffr   r	   pygmentsr   pygments.utilr#   getenvutilClassNotFoundformatOptionErrorrX   )
r^   r   r   r   r   Lexerr   r   highlightedes
             r   r   zTerminalWriter._highlight   s$    	988888 	T^ 	43F 	M-	FFFFFF  GGGGGGG&CCCCCCCU###******    #,9EGG%%9%8&AA i77  $ $ r?d**vbzT/A/A"-crc"2K
 !;..=.    j==CV	.11> > 
  =,    jFFLf	"566G G 
 9  	 	 	MMM	s6   9E A+C   E1D  E1EEEEra   )NN)rQ   )r   N)rl   )r   )__name__
__module____qualname__dictrm   r   r   r_   propertyintrc   setterrg   strboolri   r   r   r   r   r   r   r   r   rl   r   r   r)   r)   +   s:          bB b r	
 R r R b b B b r R r R  b!" Q#$ a%& a'( q)I.# #Xf- # # # # #" $3 $ $ $ X$
 %s %t % % % % ,s , , , X,3 $ 3      $#'	#" #"#" }#" C=	#"
 #" 
#" #" #" #"J 05          2 c $ 4       ) )8C= )8C= )RV ) ) ) )& ?G6 66")*:";6	6 6 6 6 6 6r   r)   )__doc__r#   r   rR   typingr   r   r   r   r   compatr	   wcwidthr   r   r   r   r'   r)   rl   r   r   <module>r      s)   : : 				  



                               ! ! ! ! ! !      C    6 d     O O O O O O O O O Or   