
    <h                        S r SSKJ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
JrJr   " S S	\5      rSS
 jr S SS jjrSSS jjrSSS jjrg)zToken-related utilities    )annotationsN)StringIO)	iskeyword)	TokenInfo)	Generator
NamedTuplec                  H    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S	rg
)Token   inttokenstrtextstartendline N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r       jC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\IPython/utils/tokenutil.pyr
   r
      s    J
IJ	H
Ir   r
   c              #     #     [         R                  " U 5       Sh  vN   g N! [         R                   a     gf = f7f)z'wrap generate_tkens to catch EOF errorsN)tokenizegenerate_tokens
TokenError)readlines    r   r   r      s5     ++H555 s(   ?% #% ?% <?<?c              #    ^	#    / SQnUb  [        U[        5      (       d   eX!=(       d    / -   n/ n [        R                  " U 5       H  nUR	                  U5        Uv   M     g ! [        R
                   a  m	[        U	4S jU 5       5      (       ae  U(       a6  US   R                  S   US   R                  S   4nUnUS   R                  nOS=pgSn[        [        R                  SXgU5      v    S m	@	g e S m	@	ff = f7f)N)zunterminated string literalzinvalid non-printable characterz!after line continuation characterc              3  F   >#    U  H  oTR                   S    ;   v   M     g7f)r   N)args).0errorexcs     r   	<genexpr>/generate_tokens_catch_errors.<locals>.<genexpr>1   s     A#s   !r   )   r    )
isinstancelistr   r   appendr   anyr   r   r   r   
ERRORTOKEN)
r    extra_errors_to_catchdefault_errors_to_catcherrors_to_catchtokensr   r   r   r   r&   s
            @r   generate_tokens_catch_errorsr5       s     
 !(J7Ld,S,SSS-1L"MO F--h7EMM% K 8  AAAAr
((+VBZ^^A->>bz$$H//UFF s5   .D2A% $D%C>9A:C93D8C99C>>Dc                    SnU R                  S5      nU H7  nU[        U5      -   nUR                  S5      (       d  US-  nXQ:  a    XB4$ UnM9     SnXB4$ )ax  Return the line in a cell at a given cursor position

Used for calling line-based APIs that don't support multi-line input, yet.

Parameters
----------
cell : str
    multiline block of text
cursor_pos : integer
    the cursor position

Returns
-------
(line, offset): (string, integer)
    The line with the current cursor, and the character offset of the start of the line.
r   T
r*   r+   )
splitlineslenendswith)cell
cursor_posoffsetlinesr   next_offsets         r   line_at_cursorr@   ?   ss    " FOOD!Es4y(}}T"" 1K# <   <r   c                   / n/ nSnSnSS0nSnSn[        [        U 5      R                  5       V	s/ s H  n	[        U	6 PM     n
n	U
(       d  g[	        S/U
-   [
        R                  " U
S/-   5      5       GH.  u  nu  pUR                  u  pUR                  u  nnUS-   U;  aS  UR                  R                  S5      n[        UUS-   5       H%  u  nnUU;  d  M  UUS-
     [        U5      -   UU'   M'     SnXn   nUU-   U:  a    GOUR                  [        R                  :H  =(       a    [!        UR"                  5      (       + =n(       a  U(       aO  U(       aH  UR                  [        R$                  :X  a*  UR"                  S:X  a  US   < SUR"                  < 3US'   OUR'                  UR"                  5        UbA  UR                  [        R$                  :X  a#  UR"                  S	:X  a  UR)                  S5        SnU(       d  U(       a  US   OSnOrUR                  [        R$                  :X  aT  UR"                  S
:X  a  U(       a  UR'                  US   5        O(UR"                  S:X  a  U(       a  UR)                  S5      nUU   U-   U:  d  GM%  Xn   U-   U:*  n  O   U(       a  U(       a  US   $ U(       a  U$ U(       a  US   $ U(       a  U$ U(       a  US   $ gs  sn	f )aN  Get the token at a given cursor

Used for introspection.

Function calls are prioritized, so the token for the callable will be returned
if the cursor is anywhere inside the call.

Parameters
----------
cell : str
    A block of Python code
cursor_pos : int
    The location of the cursor in the block where the token should be found
Nr*   r   Fr+   T.r)   =())r   r   r    r
   zip	itertoolspairwiser   r   r   r8   	enumerater9   r   r   NAMEr   r   OPr.   pop)r;   r<   names
call_namesclosing_call_namemost_recent_outer_nameoffsetsintersects_with_cursorcur_token_is_nametupr4   prev_toktoknext_tok
start_line	start_colend_lineend_colr>   linenor   r=   s                         r   token_at_cursorr]   a   s    EJ$()-!fG".x~/F/FG"GsG  " %(	++FdVO<&!/3 !$		
GG'a<w&HH''-E )%a @(&-fqj&9CI&EGFO !A !$I
*  #		X]] : V9SXXCV?VVVNNhkk1MMS(',Ry#((;b	SXX&$NNhkk1MMS( 		"$)!6;r&YY(++%xx35!!%),SZ$.NN2$6!8w&3 &-%89%D
%R"k&n 3Ry 
  	"~	 &%	Ry _"s   K&)returnz Generator[TokenInfo, None, None])N)r1   zlist[str] | None)r   )r;   r   r<   r   r^   ztuple[str, int])r;   r   r<   r   r^   r   )__doc__
__future__r   rG   r   ior   keywordr   r   typingr   r   r
   r   r5   r@   r]   r   r   r   <module>rd      sN     #      (J  9=%5>Dfr   