
    ^h.	                        S r SSKJr  SSKJrJr  SSKJrJr  SSK	J
r
  SSKJr  / SQr " S S	\S
9r " S S\5      r " S S\5      rg)z)
Base classes for prompt_toolkit lexers.
    )annotations)ABCMetaabstractmethod)CallableHashable)Document)StyleAndTextTuples)LexerSimpleLexerDynamicLexerc                  6    \ rS rSrSr\SS j5       rSS jrSrg)	r
      z
Base class for all lexers.
c                    g)a$  
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     T/home/james-whalen/.local/lib/python3.13/site-packages/prompt_toolkit/lexers/base.pylex_documentLexer.lex_document   s        c                    [        U 5      $ )zb
When this changes, `lex_document` could give a different output.
(Only used for `DynamicLexer`.)
)id)r   s    r   invalidation_hashLexer.invalidation_hash$   s    
 $xr   r   Nr   r   returnz#Callable[[int], StyleAndTextTuples]r   r   )	__name__
__module____qualname____firstlineno____doc__r   r   r   __static_attributes__r   r   r   r
   r
      s       r   r
   )	metaclassc                  0    \ rS rSrSrSSS jjrS	S jrSrg)
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                    Xl         g Nstyle)r   r*   s     r   __init__SimpleLexer.__init__4   s    
r   c                4   ^ ^ UR                   mSUU 4S jjnU$ )Nc                N   >  TR                   TU    4/$ ! [         a    / s $ f = f)z%Return the tokens for the given line.)r*   
IndexError)linenolinesr   s    r   get_line*SimpleLexer.lex_document.<locals>.get_line:   s2    U6]344 	s    $$)r0   intr   r	   )r1   )r   r   r2   r1   s   `  @r   r   SimpleLexer.lex_document7   s    	 	 r   r)   N) )r*   strr   Noner   )r   r   r    r!   r"   r+   r   r#   r   r   r   r   r   ,   s    
r   r   c                  6    \ rS rSrSrSS jrS	S jrS
S jrSrg)r   D   zz
Lexer class that can dynamically returns any Lexer.

:param get_lexer: Callable that returns a :class:`.Lexer` instance.
c                .    Xl         [        5       U l        g r(   )	get_lexerr   _dummy)r   r<   s     r   r+   DynamicLexer.__init__K   s    "!mr   c                j    U R                  5       =(       d    U R                  nUR                  U5      $ r(   )r<   r=   r   )r   r   lexers      r   r   DynamicLexer.lex_documentO   s(     /DKK!!(++r   c                ^    U R                  5       =(       d    U R                  n[        U5      $ r(   )r<   r=   r   )r   r@   s     r   r   DynamicLexer.invalidation_hashS   s!     /DKK%yr   )r=   r<   N)r<   zCallable[[], Lexer | None]r   r8   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>rJ      sF    # ' % , Ag 0% 05 r   