ó
    Eñi"#  ã                  óÞ   • S r SSKJr  SSKJr  SSKrSSKrSSKrSSKJ	r	  SSKJ
r
  SSKJr  SSKrSSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SS jrSS jr\	 " S S5      5       rg)z4Helper functions for writing to terminals and files.é    )Úannotations)ÚSequenceN)Úfinal)ÚLiteral)ÚTextIO)ÚTerminalFormatter)ÚLexer)Ú	DiffLexer)ÚPythonLexeré   )Úassert_neveré   )Úwcswidthc                 óB   • [         R                  " SS9u  pU S:  a  Sn U $ )N)éP   é   )Úfallbacké(   r   )ÚshutilÚget_terminal_size)ÚwidthÚ_s     ÚW/home/mande/repo/quber/.venv/lib/python3.13/site-packages/_pytest/_io/terminalwriter.pyÚget_terminal_widthr      s'   € Ü×'Ò'°Ñ:�H€Eð ˆrƒzØˆà€Ló    c                ó¾  • [         R                  R                  S5      S:X  a  g[         R                  R                  S5      S:X  a  g[         R                  R                  S5      (       a  g[         R                  R                  S5      (       a  g[        U S5      =(       a9    U R	                  5       =(       a"    [         R                  R                  S	5      S
:g  $ )NÚ	PY_COLORSÚ1TÚ0FÚNO_COLORÚFORCE_COLORÚisattyÚTERMÚdumb)ÚosÚenvironÚgetÚhasattrr"   )Úfiles    r   Úshould_do_markupr*   $   s�   € Ü	‡z�z‡~�~�kÓ" cÓ)ØÜ	‡z�z‡~�~�kÓ" cÓ)ØÜ	‡z�z‡~�~�j×!Ñ!ØÜ	‡z�z‡~�~�m×$Ñ$Øä��hÓ×V D§K¡K£M×V´b·j±j·n±nÀVÓ6LÐPVÑ6Vðr   c                  óœ  • \ rS rSr\" S70 SS_SS_SS_SS	_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S!_S"S#_S$S%_S&S'_S(S)_6rS=S>S+ jjr\S?S, j5       r\R                  S@S- j5       r\S?S. j5       r
SAS/ jr  SB         SCS0 jjrS1S2.SDS3 jjrS1S2.SES4 jjrSFSGS5 jjrSHS6 jrSISJS8 jjrSKS9 jrSLS: jr SM     SNS; jjrS<rg*)OÚTerminalWriteré2   Úblacké   Úredé   Úgreené    Úyellowé!   Úblueé"   Úpurpleé#   Úcyané$   Úwhiteé%   ÚBlackr   ÚRedé)   ÚGreené*   ÚYellowé+   ÚBlueé,   ÚPurpleé-   ÚCyané.   ÚWhiteé/   Úboldr   Úlightr   Úblinké   Úinverté   Nc                ó`  • Uc  [         R                  n[        US5      (       aO  UR                  5       (       a:  [         R                  S:X  a&   SS KnUR                  U5      R                  nUc   e Xl	        [        U5      U l        SU l        S U l        SU l        g ! [         a     N8f = f)Nr"   Úwin32r   Ú T)ÚsysÚstdoutr(   r"   ÚplatformÚcoloramaÚAnsiToWin32ÚstreamÚImportErrorÚ_filer*   Ú	hasmarkupÚ_current_lineÚ_terminal_widthÚcode_highlight)Úselfr)   rY   s      r   Ú__init__ÚTerminalWriter.__init__K   s›   € Ø‰<Ü—:‘:ˆDÜ�4˜×"Ñ" t§{¡{§}¡}¼¿¹ÈÓ9Pð(Ûð  ×+Ñ+¨DÓ1×8Ñ8�ØÑ'Ð'Ñ'ØŒ
Ü)¨$Ó/ˆŒØˆÔØ+/ˆÔØ"ˆÕøô ó Ùðús   ÁB  Â 
B-Â,B-c                óH   • U R                   b  U R                   $ [        5       $ ©N)r`   r   ©rb   s    r   Ú	fullwidthÚTerminalWriter.fullwidth\   s#   € à×ÑÑ+Ø×'Ñ'Ð'Ü!Ó#Ð#r   c                ó   • Xl         g rf   )r`   )rb   Úvalues     r   rh   ri   b   s   € à$Õr   c                ó,   • [        U R                  5      $ )z;Return an estimate of the width so far in the current line.)r   r_   rg   s    r   Úwidth_of_current_lineÚ$TerminalWriter.width_of_current_linef   s   € ô ˜×*Ñ*Ó+Ð+r   c                ó@  • U H!  nX0R                   ;  d  M  [        SU< 35      e   U R                  (       a_  UR                  5        VVs/ s H  u  p4U(       d  M  U R                   U   PM     nnnU(       a  SR	                  S U 5       5      U-   S-   nU$ s  snnf )Nzunknown markup: rU   c              3  ó.   #   • U  H  nS U S3v •  M     g7f)z[ÚmN© )Ú.0Úcods     r   Ú	<genexpr>Ú(TerminalWriter.markup.<locals>.<genexpr>r   s   é € Ð=º°#  s e¨1�~ºùs   ‚ú[0m)Ú	_esctableÚ
ValueErrorr^   ÚitemsÚjoin)rb   ÚtextÚmarkupÚnameÚonÚescs         r   r}   ÚTerminalWriter.markupk   sˆ   € ÛˆDØŸ>™>Õ)Ü Ð#3°D±8Ð!<Ó=Ð=ñ ð �>�>Ø8>¿¹¼ÔMº©H¨DÌ"Ó'�4—>‘> $Ô'¹ˆCÑMÞØ—w‘wÑ=¹Ó=Ó=ÀÑDÀyÑP�Øˆùó Ns   ÁBÁBc                óˆ  • Uc  U R                   n[        R                  S:X  a  US-  nUb9  [        U[	        U5      -
  S-
  S[	        U5      -  -  S5      nX-  nU SU SU 3nOX[	        U5      -  -  n[	        U5      [	        UR                  5       5      -   U::  a  XqR                  5       -  nU R                  " U40 UD6  g )NrT   r   r   Ú )rh   rV   rX   ÚmaxÚlenÚrstripÚline)rb   ÚsepcharÚtitlerh   r}   ÚNÚfillr‡   s           r   ÚsepÚTerminalWriter.sepu   sË   € ð ÑØŸ™ˆIô �<‰<˜7Ó"ð
 ˜‰NˆIØÑô
 �Y¤ U£Ñ+¨aÑ/°Q¼¸W»Ñ5EÑFÈÓJˆAØ‘;ˆDØ�V˜1˜U˜G 1 T FÐ+‰Dð ¬3¨w«<Ñ7Ñ8ˆDô ˆt‹9”s˜7Ÿ>™>Ó+Ó,Ñ,°	Ó9Ø—N‘NÓ$Ñ$ˆDà�	Š	�$Ñ!˜&Ó!r   F©Úflushc               óÆ   • U(       aZ  UR                  SS5      S   nSU;   a  X@l        OU =R                  U-  sl        U R                  " U40 UD6nU R                  XS9  g g )NÚ
r   éÿÿÿÿrŽ   )Úrsplitr_   r}   Ú	write_raw)rb   Úmsgr�   r}   Úcurrent_lines        r   ÚwriteÚTerminalWriter.writeš   s^   € ÞØŸ:™: d¨AÓ.¨rÑ2ˆLØ�s‹{Ø%1Õ"à×"Ò" lÑ2Õ"à—+’+˜cÑ, VÑ,ˆCà�N‰N˜3ˆNÒ,ð r   c               ó  •  U R                   R                  U5        U(       a  U R                  5         g g ! [         a>    UR                  S5      R	                  S5      nU R                   R                  U5         N`f = f)Nzunicode-escapeÚascii)r]   r—   ÚUnicodeEncodeErrorÚencodeÚdecoder�   )rb   r•   r�   s      r   r”   ÚTerminalWriter.write_raw¦   sk   € ð
	"Ø�J‰J×Ñ˜SÔ!ö Ø�J‰J�Lð øô "ó 	"ð —*‘*Ð-Ó.×5Ñ5°gÓ>ˆCØ�J‰J×Ñ˜SÖ!ð	"ús   ‚6 ¶AA>Á=A>c                óL   • U R                   " U40 UD6  U R                  S5        g )Nr‘   )r—   )rb   Úsr}   s      r   r‡   ÚTerminalWriter.line¶   s   € Ø�
Š
�1Ñ˜ÒØ�
‰
�4Õr   c                ó8   • U R                   R                  5         g rf   )r]   r�   rg   s    r   r�   ÚTerminalWriter.flushº   s   € Ø�
‰
×ÑÕr   rr   c                ób  • U(       a<  [        U5      [        U5      :w  a$  [        S[        U5       S[        U5       S35      eU(       d  S/[        U5      -  nSR                  U5      nU R                  U5      R	                  5       n[        X$SS9 H  u  pVU R                  XV-   5        M     g)	a)  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 (Ú)rU   r‘   F)ÚstrictN)r…   ry   r{   Ú
_highlightÚ
splitlinesÚzipr‡   )rb   ÚlinesÚindentsÚsourceÚ	new_linesÚindentÚnew_lines          r   Ú_write_sourceÚTerminalWriter._write_source½   s¡   € ö ”s˜7“|¤s¨5£zÓ1ÜØ ¤ W£ Ð.PÔQTÐUZÓQ[ÐP\Ð\]Ð^óð ö Ø�dœS ›ZÑ'ˆGØ—‘˜5Ó!ˆØ—O‘O FÓ+×6Ñ6Ó8ˆ	ä # G¸uÔ EÑˆFØ�I‰I�fÑ'Ö(ò !Fr   c                óZ   • US:X  a
  [        5       $ US:X  a
  [        5       $ [        U5        g )NÚpythonÚdiff)r   r
   r   )rb   Úlexers     r   Ú_get_pygments_lexerÚ"TerminalWriter._get_pygments_lexerÐ   s)   € Ø�HÓÜ“=Ð Ø�f‹_Ü“;Ðä˜Õr   c                ó>  • SSK Jn  [        R                  " S5      n[        R                  " SS5      n [	        X2S9$ ! [
        R                  R                   a  nU" SU S35      UeS nAf[
        R                  R                   a  nU" S	U S
35      UeS nAff = f)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)rb   r¹   ÚthemeÚ
theme_modeÚes        r   Ú_get_pygments_formatterÚ&TerminalWriter._get_pygments_formatterØ   s±   € Ý8ä—	’	˜.Ó)ˆÜ—Y’YÐ2°FÓ;ˆ
ð	Ü$¨
Ñ@Ð@øÜ�}‰}×*Ñ*ó 	ÙØKÈEÈ7ð SSð Sóð ðûô �}‰}×(Ñ(ó 	ÙØPÐQ[ÐP\ð ]Gð Góð ðûð	ús!   µ> ¾BÁA)Á)!BÂ
BÂBc                ó  • U(       a"  U R                   (       a  U R                  (       d  U$ U R                  U5      nU R                  5       n[        R
                  " XU5      nUS   S:X  a  US   S:w  a  USS nSU-   nU$ )z5Highlight the given source if we have markup support.r’   r‘   Nrw   )r^   ra   r¶   rÈ   rÁ   Ú	highlight)rb   r¬   rµ   Úpygments_lexerÚpygments_formatterÚhighlighteds         r   r§   ÚTerminalWriter._highlightë   s†   € ö ˜TŸ^Ÿ^°4×3F×3FØˆMà×1Ñ1°%Ó8ˆØ!×9Ñ9Ó;Ðä#×-Ò-ØÐ$6ó
ˆð
 �r‰?˜dÓ" v¨b¡z°TÓ'9Ø% c rÐ*ˆKð
   +Ñ-ˆàÐr   )r_   r]   r`   ra   r^   rf   )r)   zTextIO | NoneÚreturnÚNone©rÐ   Úint)rk   rÓ   rÐ   rÑ   )r|   Ústrr}   ÚboolrÐ   rÔ   )NN)
rˆ   rÔ   r‰   z
str | Nonerh   z
int | Noner}   rÕ   rÐ   rÑ   )r•   rÔ   r�   rÕ   r}   rÕ   rÐ   rÑ   )r•   rÔ   r�   rÕ   rÐ   rÑ   )rU   )r    rÔ   r}   rÕ   rÐ   rÑ   )rÐ   rÑ   )rr   )rª   úSequence[str]r«   rÖ   rÐ   rÑ   )rµ   zLiteral['python', 'diff']rÐ   r	   )rÐ   r   )r³   )r¬   rÔ   rµ   zLiteral['diff', 'python']rÐ   rÔ   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Údictrx   rc   Úpropertyrh   Úsetterrm   r}   rŒ   r—   r”   r‡   r�   r°   r¶   rÈ   r§   Ú__static_attributes__rr   r   r   r,   r,   2   s¯  † áò Ùðáðñ ðñ ð	ñ
 ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ  ð!ñ" ð#ñ$ ð%ñ& ð'ñ( ð)€Iö.#ð" ó$ó ð$ð
 ×Ñó%ó ð%ð ó,ó ð,ôð !Ø $ð	#"àð#"ð ð#"ð ð	#"ð
 ð#"ð 
õ#"ðJ 05÷ 
-ð 49÷ ö ôö)ô& ôð( ?GðØðØ";ðà	÷ð r   r,   rÒ   )r)   r   rÐ   rÕ   )Ú__doc__Ú
__future__r   Úcollections.abcr   r%   r   rV   Útypingr   r   r   rÁ   Úpygments.formatters.terminalr   Úpygments.lexerr	   Úpygments.lexers.diffr
   Úpygments.lexers.pythonr   Úcompatr   Úwcwidthr   r   r*   r,   rr   r   r   Ú<module>ré      s[   ðÙ :å "å $Û 	Û Û 
Ý Ý Ý ã Ý :Ý  Ý *Ý .å !Ý ôôð ÷Oð Oó ñOr   