§
    )xÅj  ã                  ó²   — d Z ddlmZ ddlmZmZ ddl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         z  d	z  e
z  f         Z G d
„ de
¦  «        Zd	S )zA
Nestedcompleter for completion of hierarchical data structures.
é    )Úannotations)ÚIterableÚMapping)ÚAny)ÚCompleteEventÚ	CompleterÚ
Completion)ÚWordCompleter)ÚDocumentÚNestedCompleterNc                  óF   — e Zd ZdZ	 ddd	„Zdd„Zedd„¦   «         Zd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údict[str, Completer | None]Úignore_caseÚboolÚreturnÚNonec                ó"   — || _         || _        d S )N©r   r   )Úselfr   r   s      úQC:\Projects\Historical\venv\Lib\site-packages\prompt_toolkit/completion/nested.pyÚ__init__zNestedCompleter.__init__    s   € ð ˆŒØ&ˆÔÐÐó    Ústrc                ó(   — 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   ÚdataÚ
NestedDictc                ó€  — i }|                      ¦   «         D ]�\  }}t          |t          ¦  «        r|||<   Œ t          |t          ¦  «        r|                      |¦  «        ||<   ŒNt          |t
          ¦  «        r1|                      t                               |¦  «        ¦  «        ||<   Œ”|�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.
        N)ÚitemsÚ
isinstancer   ÚdictÚfrom_nested_dictÚsetÚfromkeys)Úclsr   r   ÚkeyÚvalues        r   r$   z NestedCompleter.from_nested_dict)   sÅ   € ð2 02ˆØŸ*š*™,œ,ð 		$ð 		$‰JˆC�Ý˜%¥Ñ+Ô+ð $Ø$�˜‘�Ý˜E¥4Ñ(Ô(ð $Ø"×3Ò3°EÑ:Ô:�˜‘�Ý˜E¥3Ñ'Ô'ð $Ø"×3Ò3µD·M²MÀ%Ñ4HÔ4HÑIÔI�˜‘�à�}�}�}Ø#�˜‘�àˆs�7‰|Œ|Ðr   Údocumentr   Úcomplete_eventr   úIterable[Completion]c              #  ó¬  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   r/   Úget_completionsr
   ÚlistÚkeysr   )
r   r*   r+   ÚtextÚstripped_lenÚ
first_termÚ	completerÚremaining_textÚmove_cursorÚnew_documents
             r   r5   zNestedCompleter.get_completionsP   sm  è è € ð Ô*×1Ò1Ñ3Ô3ˆÝ˜8Ô6Ñ7Ô7½#¸d¹)¼)ÑCˆð �$ˆ;ˆ;ØŸš™œ aœˆJØœ×(Ò(¨Ñ4Ô4ˆIð Ð$Ø!%¥c¨*¡o¤oÐ&7Ð&7Ô!8×!?Ò!?Ñ!AÔ!A�Ý! $™iœi­#¨nÑ*=Ô*=Ñ=ÀÑL�å'Ø"Ø$,Ô$<¸{Ñ$Jð ñ  ô  �ð
 %×4Ò4°\À>ÑRÔRÐRÐRÐRÐRÐRÐRÐRÐRÐRð %Ð$õ &Ý�T”\×&Ò&Ñ(Ô(Ñ)Ô)°tÔ7Gðñ ô ˆIð !×0Ò0°¸>ÑJÔJÐJÐJÐJÐJÐJÐJÐJÐJÐJr   N)T)r   r   r   r   r   r   )r   r   )r   r   r   r   )r*   r   r+   r   r   r,   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úclassmethodr$   r5   © r   r   r   r      s‘   € € € € € ð	ð 	ð IMð'ð 'ð 'ð 'ð 'ðVð Vð Vð Vð ð$ð $ð $ñ „[ð$ðLKð Kð Kð Kð Kð Kr   )rB   Ú
__future__r   Úcollections.abcr   r   Útypingr   Úprompt_toolkit.completionr   r   r	   Ú(prompt_toolkit.completion.word_completerr
   Úprompt_toolkit.documentr   Ú__all__r   r%   r   r   rD   r   r   ú<module>rL      s  ððð ð #Ð "Ð "Ð "Ð "Ð "à -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø Ð Ð Ð Ð Ð à JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ BÐ BÐ BÐ BÐ BÐ BØ ,Ð ,Ð ,Ð ,Ð ,Ð ,àÐ
€ð �S˜#  C¤™.¨4Ñ/°)Ñ;Ð;Ô<€
ðZKð ZKð ZKð ZKð ZK�iñ ZKô ZKð ZKð ZKð ZKr   