o
    �õ±j7	  ã                   @  s†   d Z ddlmZ ddlmZmZ ddlmZmZ ddl	m
Z
 ddlmZ g d¢ZG dd	„ d	ed
�ZG dd„ deƒZG dd„ deƒZdS )z)
Base classes for prompt_toolkit lexers.
é    )Úannotations)ÚABCMetaÚabstractmethod)ÚCallableÚHashable)ÚDocument)ÚStyleAndTextTuples)ÚLexerÚSimpleLexerÚDynamicLexerc                   @  s(   e Zd ZdZeddd„ƒZdd	d
„ZdS )r	   z$
    Base class for all lexers.
    Údocumentr   Úreturnú#Callable[[int], StyleAndTextTuples]c                 C  s   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   r   r   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/prompt_toolkit/lexers/base.pyÚlex_document   s    zLexer.lex_documentr   c                 C  s   t | ƒS )zz
        When this changes, `lex_document` could give a different output.
        (Only used for `DynamicLexer`.)
        )Úid)r   r   r   r   Úinvalidation_hash$   s   zLexer.invalidation_hashN©r   r   r   r   ©r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r	      s
    
r	   )Ú	metaclassc                   @  s&   e Zd ZdZdddd„Zd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                 C  s
   || _ d S ©N)r   )r   r   r   r   r   Ú__init__4   s   
zSimpleLexer.__init__r   r   r   c                   s   |j ‰ d‡ ‡fdd„}|S )NÚlinenoÚintr   r   c                   s*   z	ˆj ˆ |  fgW S  ty   g  Y S w )z%Return the tokens for the given line.)r   Ú
IndexError)r"   ©Úlinesr   r   r   Úget_line:   s
   ÿz*SimpleLexer.lex_document.<locals>.get_line)r"   r#   r   r   )r&   )r   r   r'   r   r%   r   r   7   s   zSimpleLexer.lex_documentN)r   )r   r   r   r   r   )r   r   r   r   r!   r   r   r   r   r   r
   ,   s    r
   c                   @  s.   e Zd ZdZddd„Zddd„Zd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                 C  s   || _ tƒ | _d S r    )r(   r
   Ú_dummy)r   r(   r   r   r   r!   K   s   zDynamicLexer.__init__r   r   r   c                 C  s   |   ¡ p| j}| |¡S r    )r(   r*   r   )r   r   Úlexerr   r   r   r   O   s   
zDynamicLexer.lex_documentr   c                 C  s   |   ¡ p| j}t|ƒS r    )r(   r*   r   )r   r+   r   r   r   r   S   s   zDynamicLexer.invalidation_hashN)r(   r)   r   r   r   r   )r   r   r   r   r!   r   r   r   r   r   r   r   D   s
    

r   N)r   Ú
__future__r   Úabcr   r   Úcollections.abcr   r   Úprompt_toolkit.documentr   Ú"prompt_toolkit.formatted_text.baser   Ú__all__r	   r
   r   r   r   r   r   Ú<module>   s    