o
    ˷e                     @   sb   d Z ddlmZmZmZ ddlmZmZmZ ddl	m
Z
 ddlmZmZ dgZG dd deZd	S )
z"
Completer for a regular grammar.
    )DictIterableList)CompleteEvent	Completer
Completion)Document   )Match_CompiledGrammarGrammarCompleterc                   @   s|   e Zd ZdZdedeeef ddfddZde	d	e
dee fd
dZded	e
dee fddZdee dee fddZdS )r   af  
    Completer which can be used for autocompletion according to variables in
    the grammar. Each variable can have a different autocompleter.

    :param compiled_grammar: `GrammarCompleter` instance.
    :param completers: `dict` mapping variable names of the grammar to the
                       `Completer` instances to be used for each variable.
    compiled_grammar
completersreturnNc                 C   s   || _ || _d S N)r   r   )selfr   r    r   j/var/www/ideatree/venv/lib/python3.10/site-packages/prompt_toolkit/contrib/regular_languages/completion.py__init__   s   
zGrammarCompleter.__init__documentcomplete_eventc                 c   s8    | j |j}|r| | ||}|E d H  d S d S r   )r   match_prefixtext_before_cursor_remove_duplicates_get_completions_for_match)r   r   r   mcompletionsr   r   r   get_completions!   s   
z GrammarCompleter.get_completionsmatchc                 c   s    |  D ]M}|j}|j}| j|}|rR|j}| j||}t|t	|}	|
|	|D ]%}
|dt	||
j  |
j }t| j|||t	|j |
j|
jdV  q,qdS )z
        Yield all the possible completions for this input string.
        (The completer assumes that the cursor position was at the end of the
        input string.)
        N)textstart_positiondisplaydisplay_meta)	end_nodesvarnamestartr   getvaluer   unescaper   lenr   r    r   r   escapestringr!   r"   )r   r   r   match_variabler$   r%   	completerr   unwrapped_textr   
completionnew_textr   r   r   r   -   s,   
z+GrammarCompleter._get_completions_for_matchitemsc                 C   s$   g }|D ]}||vr| | q|S )z
        Remove duplicates, while keeping the order.
        (Sometimes we have duplicates, because the there several matches of the
        same grammar, each yielding similar completions.)
        )append)r   r1   resultir   r   r   r   S   s   
z#GrammarCompleter._remove_duplicates)__name__
__module____qualname____doc__r   r   strr   r   r   r   r   r   r   r
   r   r   r   r   r   r   r   r      s0    	



&N)r8   typingr   r   r   prompt_toolkit.completionr   r   r   prompt_toolkit.documentr   compilerr
   r   __all__r   r   r   r   r   <module>   s    