Ë
    £cgj  ã                  óž   — 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y	)zA
Nestedcompleter for completion of hierarchical data structures.
é    )Úannotations)ÚIterableÚMapping)ÚAny)ÚCompleteEventÚ	CompleterÚ
Completion)ÚWordCompleter)ÚDocumentÚNestedCompleterNc                  óT   — e Zd ZdZ	 d	 	 	 	 	 dd„Zd	d„Zed
d„«       Z	 	 	 	 	 	 dd„Zy)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.
    c                ó    — || _         || _        y )N©ÚoptionsÚignore_case)Úselfr   r   s      úq/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/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$   € Ø! $§,¡,Ð!1°À×@PÑ@PÐ?SÐSTÐUÐUr   c                ó>  — i }|j                  «       D ]�  \  }}t        |t        «      r|||<   Œt        |t        «      r| j	                  |«      ||<   ŒAt        |t
        «      r(| j	                  t        j                  |«      «      ||<   Œy|�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)ÚclsÚdatar   Ú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ÓI�˜’à�}Ð$�}Ø#�˜’ð 'ñ �7‹|Ðr   c              #  ón  K  — |j                   j                  «       }t        |j                   «      t        |«      z
  }d|v rœ|j                  «       d   }| j                  j                  |«      }|�k|t        |«      d  j                  «       }t        |«      t        |«      z
  |z   }t        ||j                  |z
  ¬«      }	|j                  |	|«      E d {  –—†  y y t        t        | j                  j                  «       «      | j                  ¬«      }|j                  ||«      E d {  –—†  y 7 ŒY7 Œ­w)NÚ r   )Úcursor_position)r   )Útext_before_cursorÚlstripÚlenÚsplitr   Úgetr   r&   Úget_completionsr
   ÚlistÚkeysr   )
r   ÚdocumentÚcomplete_eventÚtextÚstripped_lenÚ
first_termÚ	completerÚremaining_textÚmove_cursorÚnew_documents
             r   r,   zNestedCompleter.get_completionsP   s!  è ø€ ð ×*Ñ*×1Ñ1Ó3ˆÜ˜8×6Ñ6Ó7¼#¸d»)ÑCˆð �$‰;ØŸ™› a™ˆJØŸ™×(Ñ(¨Ó4ˆIð Ð$Ø!%¤c¨*£oÐ&7Ð!8×!?Ñ!?Ó!A�Ü! $›i¬#¨nÓ*=Ñ=ÀÑL�ä'Ø"Ø$,×$<Ñ$<¸{Ñ$Jô �ð
 %×4Ñ4°\À>ÓR×RÑRð %ô &Ü�T—\‘\×&Ñ&Ó(Ó)°t×7GÑ7GôˆIð !×0Ñ0°¸>ÓJ×JÑJð Søð Kús%   ‚CD5ÃD1ÃAD5Ä+D3Ä,D5Ä3D5N)T)r   zdict[str, Completer | None]r   ÚboolÚreturnÚNone)r9   Ústr)r!   Ú
NestedDictr9   r   )r/   r   r0   r   r9   zIterable[Completion])	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úclassmethodr   r,   © r   r   r   r      sg   „ ñ	ð IMð'Ø2ð'ØAEð'à	ó'óVð ò$ó ð$ðLKØ ðKØ2?ðKà	ôKr   )r@   Ú
__future__r   Úcollections.abcr   r   Útypingr   Úprompt_toolkit.completionr   r   r	   Ú(prompt_toolkit.completion.word_completerr
   Úprompt_toolkit.documentr   Ú__all__r;   r   r<   r   rB   r   r   Ú<module>rJ      s\   ðñõ #ç -Ý ç JÑ JÝ BÝ ,àÐ
€ð �S˜#  C¡™.¨4Ñ/°)Ñ;Ð;Ñ<€
ôZK�iõ ZKr   