
    %Qc                         d Z ddlmZmZmZmZ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 dgZeeeeee         def         f         Z G d de          ZdS )	zA
Nestedcompleter for completion of hierarchical data structures.
    )AnyDictIterableMappingOptionalSetUnion)CompleteEvent	Completer
Completion)WordCompleter)DocumentNestedCompleterNc                       e Zd ZdZ	 ddeeee         f         deddfdZ	defdZ
ed	edd fd
            Zdededee         fdZdS )r   a  
    Completer which wraps around several other completers, and calls any the
    one that corresponds with the first word of the input.

    By combining multiple `NestedCompleter` instances, we can achieve multiple
    hierarchical levels of autocompletion. This is useful when `WordCompleter`
    is not sufficient.

    If you need multiple levels, check out the `from_nested_dict` classmethod.
    Toptionsignore_casereturnNc                 "    || _         || _        d S Nr   r   )selfr   r   s      @lib/python3.11/site-packages/prompt_toolkit/completion/nested.py__init__zNestedCompleter.__init__   s     &    c                 (    d| j         d| j        dS )NzNestedCompleter(z, ignore_case=)r   )r   s    r   __repr__zNestedCompleter.__repr__#   s     U$,UU@PUUUUr   datac                 d   i }|                                 D ]\  }}t          |t                    r|||<    t          |t                    r|                     |          ||<   Nt          |t
                    r#|                     d |D                       ||<   |J d||<    | |          S )a  
        Create a `NestedCompleter`, starting from a nested dictionary data
        structure, like this:

        .. code::

            data = {
                'show': {
                    'version': None,
                    'interfaces': None,
                    'clock': None,
                    'ip': {'interface': {'brief'}}
                },
                'exit': None
                'enable': None
            }

        The value should be `None` if there is no further completion at some
        point. If all values in the dictionary are None, it is also possible to
        use a set instead.

        Values in this data structure can be a completers as well.
        c                     i | ]}|d S r    ).0items     r   
<dictcomp>z4NestedCompleter.from_nested_dict.<locals>.<dictcomp>F   s    4R4R4RDT44R4R4Rr   N)items
isinstancer   dictfrom_nested_dictset)clsr   r   keyvalues        r   r(   z NestedCompleter.from_nested_dict&   s    2 35**,, 		$ 		$JC%++ $$E4(( $"33E::E3'' $"334R4RE4R4R4RSS$$$#s7||r   documentcomplete_eventc              #     K   |j                                         }t          |j                   t          |          z
  }d|v r|                                d         }| j                            |          }||t          |          d                                          }t          |          t          |          z
  |z   }t          ||j        |z
            }	|                    |	|          E d {V  d S d S t          t          | j                                                  | j                  }|                    ||          E d {V  d S )N r   )cursor_position)r   )text_before_cursorlstriplensplitr   getr   r1   get_completionsr   listkeysr   )
r   r-   r.   textstripped_len
first_term	completerremaining_textmove_cursornew_documents
             r   r7   zNestedCompleter.get_completionsM   sx      *11338677#d))C $; 	KaJ((44I  	S!%c*oo&7&7!8!?!?!A!A!$ii#n*=*==L'"$,$<{$J     
 %44\>RRRRRRRRRRR	S 	S &T\&&(())t7G  I !00>JJJJJJJJJJJr   )T)__name__
__module____qualname____doc__r   strr   r   boolr   r   classmethod
NestedDictr(   r   r
   r   r   r7   r!   r   r   r   r      s        	 	 LP' 'C)!445'DH'	' ' ' 'V# V V V V $J $3D $ $ $ [$LK K2?K	*	K K K K K Kr   )rD   typingr   r   r   r   r   r   r	   prompt_toolkit.completionr
   r   r   (prompt_toolkit.completion.word_completerr   prompt_toolkit.documentr   __all__rE   rH   r   r!   r   r   <module>rN      s     F E E E E E E E E E E E E E E E E E J J J J J J J J J J B B B B B B , , , , , ,
 S%SXtY >??@
[K [K [K [K [Ki [K [K [K [K [Kr   