
     h7	                        d Z ddlmZ ddlmZmZ ddlmZmZm	Z	 ddl
mZ ddlmZ g dZ G d d	e
          Z G d de          Z G d de          ZdS )z)
Base classes for prompt_toolkit lexers.
    )annotations)ABCMetaabstractmethod)CallableHashableOptional)Document)StyleAndTextTuples)LexerSimpleLexerDynamicLexerc                  2    e Zd ZdZed
d            ZddZd	S )r   z$
    Base class for all lexers.
    documentr	   return#Callable[[int], StyleAndTextTuples]c                    dS )aT  
        Takes a :class:`~prompt_toolkit.document.Document` and returns a
        callable that takes a line number and returns a list of
        ``(style_str, text)`` tuples for that line.

        XXX: Note that in the past, this was supposed to return a list
             of ``(Token, text)`` tuples, just like a Pygments lexer.
        N )selfr   s     V/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/prompt_toolkit/lexers/base.pylex_documentzLexer.lex_document   s          r   c                     t          |           S )zz
        When this changes, `lex_document` could give a different output.
        (Only used for `DynamicLexer`.)
        )id)r   s    r   invalidation_hashzLexer.invalidation_hash#   s    
 $xxr   Nr   r	   r   r   r   r   )__name__
__module____qualname____doc__r   r   r   r   r   r   r   r      sR             ^     r   r   )	metaclassc                  $    e Zd ZdZdddZddZdS )r   z
    Lexer that doesn't do any tokenizing and returns the whole input as one
    token.

    :param style: The style string for this lexer.
     stylestrr   Nonec                    || _         d S N)r$   )r   r$   s     r   __init__zSimpleLexer.__init__3   s    


r   r   r	   r   c                &     |j         d fd}|S )Nlinenointr   r
   c                J    	 j         |          fgS # t          $ r g cY S w xY w)z%Return the tokens for the given line.)r$   
IndexError)r+   linesr   s    r   get_linez*SimpleLexer.lex_document.<locals>.get_line9   s@    U6]344   			s    "")r+   r,   r   r
   )r/   )r   r   r0   r/   s   `  @r   r   zSimpleLexer.lex_document6   s5    	 	 	 	 	 	 	 r   N)r#   )r$   r%   r   r&   r   )r   r   r   r    r)   r   r   r   r   r   r   +   sK             
 
 
 
 
 
r   r   c                  *    e Zd ZdZddZdd
ZddZdS )r   z
    Lexer class that can dynamically returns any Lexer.

    :param get_lexer: Callable that returns a :class:`.Lexer` instance.
    	get_lexerCallable[[], Lexer | None]r   r&   c                :    || _         t                      | _        d S r(   )r2   r   _dummy)r   r2   s     r   r)   zDynamicLexer.__init__J   s    "!mmr   r   r	   r   c                b    |                                  p| j        }|                    |          S r(   )r2   r5   r   )r   r   lexers      r   r   zDynamicLexer.lex_documentN   s,      /DK!!(+++r   r   c                V    |                                  p| j        }t          |          S r(   )r2   r5   r   )r   r7   s     r   r   zDynamicLexer.invalidation_hashR   s$      /DK%yyr   N)r2   r3   r   r&   r   r   )r   r   r   r    r)   r   r   r   r   r   r   r   C   sZ         $ $ $ $, , , ,     r   r   N)r    
__future__r   abcr   r   typingr   r   r   prompt_toolkit.documentr	   "prompt_toolkit.formatted_text.baser
   __all__r   r   r   r   r   r   <module>r?      s    # " " " " " ' ' ' ' ' ' ' ' / / / / / / / / / / , , , , , , A A A A A A      g    0    %   0    5     r   