+
    iB3  c                  s~   ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIHt ^ RIHt ^ RIHt ^ RIHtHtHtHtHt ^RIHtHt ^RIHt ]P6                  ! R	4      t]P6                  ! R
4      t]P?                  RRRR/4      t RR0t!0 R'mt"]#! ]4       U u0 uF#  q PI                  R4      '       d   K  ]! V 4      kK%  	  up t%R t& ! R R]4      t' ! R R]4      t(]PR                  R R l4       t*R R lt+R(R R llt,R R lt-R R lt.R  R! lt/0 R)mt00 R'mt1R" R# lt2R*R$ R% llt3R& ! 4       t4R# u up i )+    )annotationsN)deque)StringIO)	TokenInfo)IterableIteratorMatch
NamedTupleSelf)
CharBuffer
CharWidths)tracez\x1b\[[ -@]*[A-~]z\x01.*?\x02Z ZZdefZclass_c                 sB    \         P                  ! R/ V B P                  # )N )	_colorizeZ	get_themeZsyntax)Zkwargss   ,&/usr/lib64/python3.14/_pyrepl/utils.pyTHEMEr      s    ((///    c                  s\    ] tR t^ t$ RtR]R&   R]R&   ]R R l4       t]R R l4       tR	t	R
# )Spanz,Span indexing that's inclusive on both ends.intstartendc               $    V ^8  d   QhRRRRRR/# )   mz
Match[str]groupz	int | strreturnr	   r   Zformat   "r   __annotate__Span.__annotate__'   s!     / /
 /9 / /r   c                	s`    VP                  V4      pV ! V^ ,          V^,          ^,
          4      # )r    )span)clsr   r   Zre_span   &&& r   from_reZSpan.from_re&   s(    &&-71:wqzA~..r   c               r   )r   tokenTIline_len	list[int]r   r	   r   r   r   r   r   r    ,   s!     

 

r 

Y 

4 

r   c                	s   RpVP                   \        P                  \        P                  09   d+   VP                  P                  R4      '       d
   V^,          pV ! W!P                  ^ ,          ^,
          ,          VP                  ^,          ,           W!P                  ^ ,          ^,
          ,          VP                  ^,          ,           V,           4      # )   ){Z})typeTFSTRING_MIDDLETSTRING_MIDDLEstringZendswithr   r   )r"   r%   r'   Z
end_offsetr#   r   
from_tokenZSpan.from_token+   s    
JJ1++Q-=-=>>%%j11!OJ[[^a'(5;;q>9YYq\A%&15
B
 	
r   r   N)
__name__
__module____qualname____firstlineno__Z__doc____annotations__Zclassmethodr$   r1   __static_attributes__r   r   r   r   r       s5    6J	H/ / 

 

r   r   c                  s,    ] tR t^9t$ R]R&   R]R&   RtR# )	ColorSpanr   r!   strtagr   N)r2   r3   r4   r5   r6   r7   r   r   r   r8   r8   9   s    
J	Hr   r8   c                    V ^8  d   QhRRRR/# )r   cr9   r   r   r   r   r   r   r   r   ?   s        r   c                s    \        V 4      ^8  d   ^# \        P                  ! V 4      '       d   ^ # \        P                  ! V 4      pVR8X  d
   V R8w  d   ^ # \        P                  ! V 4      pVR9   d   ^# ^# )i   ZCft   ­)ZNZNaZHZA)ordunicodedataZ	combiningcategoryZeast_asian_width)r<   r?   Zws   &  r   	str_widthr@   >   sd    
1v|Q##A&H4AM$$Q'A!!r   c               r;   )r   sr9   r   r   r   r   r   r   r   r   N   s     ? ?C ?C ?r   c                s    \        V 4      ^8X  d   V R8w  d   \        V 4      # \        R V  4       4      p\        P	                  V 4      pV P                  R4      pV\        R V 4       4      ,
          V,           # )r)   c              3  8   "   T F  p\        V4      x  K  	  R # 5iN)r@   Z.0i   & r   	<genexpr>wlen.<locals>.<genexpr>Q   s     )q!1q   c              3  rC   rD   )lenrE   rG   r   rH   rI   U   s     11ArJ   )rK   r@   ZsumANSI_ESCAPE_SEQUENCEZfindallZcount)rA   ZlengthZsequenceZ
ctrl_z_cnt   &   r   wlenrN   N   se    
1v{qF{|)q))F#++A.HJC1111J>>r   c               s$    V ^8  d   QhRRRRRR/# )r   rA   r9   including_contentboolr   r   r   r   r   r   r   X   s!     ) ) ) )# )r   c                sh    V'       d   \         P                  RV 4      # V P                  \        4      # )zReturn `s` with \001 and \002 characters removed.

If `including_content` is True, content between \001 and \002 is also
stripped.
r   )ZERO_WIDTH_BRACKETZsubZ	translateZERO_WIDTH_TRANS)rA   rO   s   &&r   	unbracketrS   X   s*     !%%b!,,;;'((r   c               r;   )r   bufferr9   r   Iterator[ColorSpan]r   r   r   r   r   r   c   s     
 
s 
2 
r   c              #  s,  "   \        V 4      p^ .VP                  4        Uu. uF  p\        V4      NK  	  up,           p\        ^\        V4      4       F$  pW4;;,          W4^,
          ,          ,          uu&   K&  	  VP	                  ^ 4       \
        P                  ! VP                  4      pRp \        WS4       F	  pVx  TpK  	  R# u upi   \         d     R# \
        P                   d!   p\        YY`4       Rj  xL 
   Rp?R# Rp?ii ; i5i)zReturns a list of index spans to color using the given color tag.

The input `buffer` should be a valid start of a Python code block, i.e.
it cannot be a block starting in the middle of a multiline string.
N)r   Z	readlinesrK   ZrangeZseektokenizeZgenerate_tokensZreadlinegen_colors_from_token_streamZSyntaxErrorZ
TokenErrorrecover_unterminated_string)	rT   ZsioZlineline_lengthsrF   Zgenlast_emittedZcolortes	   &        r   
gen_colorsr\   c   s      6
C3@#d)@@L1c,'(<!,, ) HHQK

"
"3<<
0C%)L	
1#DEK L E A   
.l
 	
 	

sX    DC
A9D0C DDDD0D1D DDDDDc          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )r   excztokenize.TokenErrorrY   r(   rZ   zColorSpan | NonerT   r9   r   rU   r   r   r   r   r   r   ~   s:     &
 &
	&
&
 #&
 	&

 &
r   c              #  s  "   V P                   w  rEVf   R # Vw  rgVP                  R4      '       d   W^,
          ,          V,           ^,
          pVR	,          ^,
          p	V'       dE   WP                  P                  8:  d+   \	        RVR7       VP                  P
                  ^,           p\        W4      p
\	        RV
P                  V
P
                  R7       \        V
R4      x  R # \	        R\        V4      \        V 4      R7       R # 5i)
Nzbefore last emitted = {s})rA   zyielding span {a} -> {b})ZaZbr0   z&unhandled token error({buffer}) = {te})rT   r[   )zunterminated string literalzunterminated f-string literalzunterminated t-string literalzEOF in multi-line stringz+unterminated triple-quoted f-string literalz+unterminated triple-quoted t-string literalr*   )
Zargs
startswithr!   r   r   r   r   r8   Zreprr9   )r^   rY   rZ   rT   ZmsgZlocZline_noZcolumnr   r   r!      &&&&       r   rX   rX   ~   s      xxHC
{OG
~~	
	 	 q[)F2Q62" E%6%6%<%<<-7 %%))A-EE(DJJ$((Ch''4<3x	
s   DD
c               r   )r   token_generatorzIterator[TI]rY   r(   r   rU   r   r   r   r   r   r      s&     ;5 ;5!;5;5 ;5r   c              #  s  "   \        V 4      pR p^ pV EFq  w  rVpVf   Q hVP                  VP                  8X  d   K*  VP                  ;;\        P
                  8X  d   M;\        P                  8X  d   Mp;\        P                  8X  d   MZ;\        P                  8X  d   MD;\        P                  8X  d   M.;\        P                  8X  d   M;\        P                  8X  d   M M'  \        P                  Wa4      p\        VR4      x  K  ;\        P                  8X  d(    \        P                  Wa4      p\        VR4      x  EK5  ;\        P                   8X  d(    \        P                  Wa4      p\        VR4      x  EKq  ;\        P"                  8X  d]    VP$                  R9   d   V^,          pMVP$                  R9   d
   V^,          p\        P                  Wa4      p\        VR4      x  EK  \        P&                  8X  g   EK  V'       d)   R p\        P                  Wa4      p\        VR4      x  EK)  \(        P*                  ! VP$                  4      '       dY   R	p	VP$                  \,        9   d   R
p	\        P                  Wa4      p\        W4      x  VP$                  \.        9   d   RpEK  EK  \(        P0                  ! VP$                  4      '       d@   V^ 8X  d9   \3        WVV4      '       d'   \        P                  Wa4      p\        VR4      x  EK  VP$                  \4        9   dQ   V'       d    VP6                  \        P8                  8X  g'   \        P                  Wa4      p\        VR4      x  EKn  EKq  EKt  	  R# 5i)FNr0   ZcommentZnumberz([{z)]}ZopZ
definitionkeywordZkeyword_constantTZsoft_keywordZbuiltin)prev_next_windowr   r   r,   r-   STRINGFSTRING_STARTr.   ZFSTRING_ENDTSTRING_STARTr/   ZTSTRING_ENDr   r1   r8   ZCOMMENTNUMBEROPr0   NAMErb   	iskeywordKEYWORD_CONSTANTSIDENTIFIERS_AFTERZissoftkeywordis_soft_keyword_usedBUILTINSZ
exact_typeZDOT)
ra   rY   Ztoken_windowZis_def_nameZbracket_levelZ
prev_tokenr%   Z
next_tokenr!   Zspan_clss
   &&        r   rW   rW      sg     $O4LKM)5%
:   ;;%))#jjE!!//$4A$4$4}q}}!!//$4A$4$4}q}}E u;h//u;i00u;h//<<5(!Q&M\\U*!Q&Mu;d++"'K??5?D#D,77&&u||44(H||'88#5??5?D#D33||'88&* 9 ))%,,77%*,Z
KK??5?D#D.99LLH,'J,A,AQUU,J??5?D#D)44 -K -_ *6s(   HNNAN#A=N!AN=ANc               r;   )r   tokensz	TI | Noner   rP   r   r   r   r   r   r      s     / /) / /r   c                 s   \        RV R7       T ; EdM    ^8H  EdE   w  ;f   M`;\        Rc;e   w  \        P                  8X  d   M= ;\        Rc;e   w  \        P                  8X  d   M ;\        Rc ;e
   w  R8X  d   M  M \        Rc ;e   w  R8X  d   ;\        Rc;e_   w  ;\        P
                  8X  d   MD;\        P                  8X  d   M.;\        P                  8X  d   M;\        P                  8X  d   M M MZ ;\        Rc;eK   w  \        P                  8X  d5   ;R8X  d   M*;R8X  d   M";R	8X  d   M;R
8X  d   M;R8X  d   M
;R8X  d   M M M  M  R#   ; d    ^8H  d   w  ;f   M`;\        Rc;e   w  \        P                  8X  d   M= ;\        Rc;e   w  \        P                  8X  d   M ;\        Rc ;e
   w  R8X  d   M  M^ \        Rc ;eS   w  R8X  dL   \        Rc;eA   w  \        P                  8X  d+   p \        P                  ! V4      '       d
   V\        9   # R#   ; Edi    ^8H  Eda   w  ;f   M;\        Rc;e   w  \        P                  8X  d   Ma ;\        Rc;e   w  \        P                  8X  d   M= ;\        Rc;e   w  \        P                  8X  d   M ;\        Rc ;e
   w  R8X  d   M  M \        Rc ;e   w  R8X  d   ;\        Rc;e_   w  ;\        P
                  8X  d   MD;\        P                  8X  d   M.;\        P                  8X  d   M;\        P                  8X  d   M M MR ;\        Rc;eC   w  \        P                  8X  d-   ;R8X  d   M";R8X  d   M;R8X  d   M;R	8X  d   M
;R
8X  d   M M M  M  R#   ; d    ^8H  d   w  ;f   M;\        Rc;e   w  \        P                  8X  d   Ma ;\        Rc;e   w  \        P                  8X  d   M= ;\        Rc;e   w  \        P                  8X  d   M ;\        Rc ;e
   w  R8X  d   M  M^ \        Rc ;eS   w  R8X  dL   \        Rc;eA   w  \        P                  8X  d+   p \        P                  ! V4      '       d
   V\        9   # R#   ; dH    ^8H  dA   w  \        Rc ;e2   w  R8X  d+   \        Rc ;e    w  R8X  d   \        Rc ;e   w  R8X  d    R#     d    ^8H  d   w  ;f   M;\        Rc;e   w  \        P                  8X  d   Ma ;\        Rc;e   w  \        P                  8X  d   M= ;\        Rc;e   w  \        P                  8X  d   M ;\        Rc ;e
   w  R8X  d   M  MQ \        Rc ;eF   w  R8X  d?   \        Rc;e4   w  \        P                  8X  d   p\        P                  ! V4      '       * #    R# )zReturns True if the current token is a keyword in this context.

For the `*tokens` to match anything, they have to be a three-tuple of
(previous, current, next).
zis_soft_keyword_used{t})Ztr   )r0   Z:ZmatchZ(Z*Z[r+   Z~z...TZcaseZ-r   r,   F)r   r&   r-   ZNEWLINEZINDENTrg   rd   re   rf   rh   ri   rb   rj   keyword_first_sets_matchZDEDENTkeyword_first_sets_case)ro   rA   s   * r   rm   rm      s    

#v.

 
=2=aii=<2<ahh<.".C.@gGBGxqxx(!((_Q__qFGBbBcC#cEABC 

 
=2=aii=<2<ahh<.".C.@g qvv

   ##444

 
=2=aii=<2<ahh<,",QXX,3OfGBGxqxx(!((_Q__qFG:b:cC#c9:; 

 
=2=aii=<2<ahh<,",QXX,3Of qvv

   ##333
 A@b33 A
 
=2=aii=<2<ahh<,",QXX,3Of qvv

 ((+++
 r   c          
     r]   )r   rT   r9   colorszlist[ColorSpan] | Nonestart_indexr   force_colorrP   r   ztuple[CharBuffer, CharWidths]r   r   r   r   r   r     sA     S SS"S S 	S
 #Sr   c                sx   . p. pV '       g   WE3# V'       d6   V^ ,          P                   P                  V8  d   VP                  ^ 4       K=  \        VR7      pRpRpV'       d<   V^ ,          P                   P                  V8  d   Wa^ ,          P
                  ,          p\        W4       EF  w  rV'       d<   V^ ,          P                   P                  V	8X  d   Wa^ ,          P
                  ,          pV
R8X  d$   VP                  V
4       VP                  ^4       M\        V
4      ^8  d$   VP                  V
4       VP                  ^4       M\        P                  ! V
4      P                  R4      '       d?   R\        V
4      ,          p
VP                  V
4       VP                  \        V
4      4       M+VP                  V
4       VP                  \        V
4      4       V'       d@   V^ ,          P                   P                  V	8X  d   VP                  pVP                  ^ 4       WtR,          ,           V,           VR&   RpRpEK  	  V'       dd   V^ ,          P                   P                  X	8  dB   V^ ,          P                   P                  V	8  d    VR;;,          VP                  ,          uu&   WE3# )a  Decompose the input buffer into a printable variant with applied colors.

Returns a tuple of two lists:
- the first list is the input buffer, character by character, with color
  escape codes added (while those codes contain multiple ASCII characters,
  each code is considered atomic *and is attached for the corresponding
  visible character*);
- the second list is the visible width of each character in the input
  buffer.

Note on colors:
- The `colors` list, if provided, is partially consumed within. We're using
  a list and not a generator since we need to hold onto the current
  unfinished span between calls to disp_str in case of multiline strings.
- The `colors` list is computed from the start of the input block. `buffer`
  is only a subset of that input block, a single line within. This is why
  we need `start_index` to inform us which position is the start of `buffer`
  actually within user input. This allows us to match color spans correctly.

Examples:
>>> utils.disp_str("a = 9")
(['a', ' ', '=', ' ', '9'], [1, 1, 1, 1, 1])

>>> line = "while 1:"
>>> colors = list(utils.gen_colors(line))
>>> utils.disp_str(line, colors=colors)
(['\x1b[1;34mw', 'h', 'i', 'l', 'e\x1b[0m', ' ', '1', ':'], [1, 1, 1, 1, 1, 1, 1, 1])

)rt   r   rB   ZCz\u%04xr*   )r!   r   Zpopr   r   r:   Z	enumerateappendr=   r>   r?   r_   rK   r@   Zreset)rT   rr   rs   rt   ZcharsZchar_widthsZthemeZ	pre_colorZ
post_colorrF   r<   r`   r   disp_strrv     s   F E K!!
VAY^^''+5

1k*EIJ&)..&&4)--(	&.fQinn**a/Qimm,I;LLOq!Vc\LLOq!!!!$//44CF"ALLOs1v&LLOy|,fQinn((A-JJJqMb	)J6b		
1 /4 &)..&&*vay~~/A/AA/E 	b	U[[ 	r   c                 s    R 5;p3R R lu6# )r-   c               r;   )r   iterablezIterable[T]r   zIterator[tuple[T | None, ...]]r   r   r   r   r   r   q  s      #r   c              3  sH  "   \        V 4      p\        R\        V4      3^R7      p V F!  pVP                  V4       \	        V4      x  K#  	   TP                  R4       \	        T4      x  R#   \
         d    h i ; i  TP                  R4       \	        T4      x  i ; i5i)a  Generates three-tuples of (previous, current, next) items.

On the first iteration previous is None. On the last iteration next
is None. In case of exception next is None and the exception is re-raised
on a subsequent next() call.

Inspired by `sliding_window` from `itertools` recipes.
N)Zmaxlen)Ziterr   Znextru   ZtupleZ	Exception)rw   ZiteratorZwindowZxrM   r   rc   rc   q  s      H~HD$x.)!4FAMM!-  	dFm	   	dFms(   $B"'A/  B"/A<<A? ? BB"r   )Z	.defaultsr-   s     r   (<generic parameters of prev_next_window>rx   q  s	    Q r   >   NoneTrueFalse)F>   Znotry   rz   r{   ZawaitZlambda)Nr    F)5Z
__future__r   ZbuiltinsZ	functoolsrb   Zrer%   r-   rV   r>   r   Zcollectionsr   Zior   r   r&   Ztypingr   r   r   r   r	   Ztypesr
   r   r   ZcompilerL   rQ   r9   Z	maketransrR   rl   rk   Zdirr_   rn   r   r   r8   Zcacher@   rN   rS   r\   rX   rW   rp   rq   rm   rv   rc   )Znames   0r   <module>r|      s!   "    	       $ > > ) zz"67 ZZ/ ==&"fb!9: G$ - "%h-L-$s7KICI-L0

: 
2
 
  ?)
6&
R;5| O 3 /dSl s
 Ms    D:=D: