
    f.	                        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	e
      Z G d de      Z G d de      Zy)z)
Base classes for prompt_toolkit lexers.
    )annotations)ABCMetaabstractmethod)CallableHashable)Document)StyleAndTextTuples)LexerSimpleLexerDynamicLexerc                  *    e Zd ZdZedd       ZddZy)r
   z$
    Base class for all lexers.
    c                     y)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 )selfdocuments     U/var/www/cvtools/html/venv/lib/python3.12/site-packages/prompt_toolkit/lexers/base.pylex_documentzLexer.lex_document   s        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    
 $xr   Nr   r   returnz#Callable[[int], StyleAndTextTuples]r   r   )__name__
__module____qualname____doc__r   r   r   r   r   r   r
   r
      s       r   r
   )	metaclassc                  "    e Zd ZdZdddZddZy)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.
    c                    || _         y N)style)r   r#   s     r   __init__zSimpleLexer.__init__4   s	    
r   c                0     |j                   d fd}|S )Nc                L    	 j                   |    fgS # t        $ r g cY S w xY w)z%Return the tokens for the given line.)r#   
IndexError)linenolinesr   s    r   get_linez*SimpleLexer.lex_document.<locals>.get_line:   s2    U6]344 	s    ##)r(   intr   r	   )r)   )r   r   r*   r)   s   `  @r   r   zSimpleLexer.lex_document7   s    	 r   N) )r#   strr   Noner   )r   r   r   r   r$   r   r   r   r   r   r   ,   s    
r   r   c                  (    e Zd ZdZddZddZddZy)	r   z
    Lexer class that can dynamically returns any Lexer.

    :param get_lexer: Callable that returns a :class:`.Lexer` instance.
    c                0    || _         t               | _        y r"   )	get_lexerr   _dummy)r   r1   s     r   r$   zDynamicLexer.__init__K   s    "!mr   c                `    | j                         xs | j                  }|j                  |      S r"   )r1   r2   r   )r   r   lexers      r   r   zDynamicLexer.lex_documentO   s(     /DKK!!(++r   c                T    | j                         xs | j                  }t        |      S r"   )r1   r2   r   )r   r4   s     r   r   zDynamicLexer.invalidation_hashS   s!     /DKK%yr   N)r1   zCallable[[], Lexer | None]r   r.   r   r   )r   r   r   r   r$   r   r   r   r   r   r   r   D   s    $,r   r   N)r   
__future__r   abcr   r   typingr   r   prompt_toolkit.documentr   "prompt_toolkit.formatted_text.baser	   __all__r
   r   r   r   r   r   <module>r<      sF    # ' % , Ag 0% 05 r   