3
[ð]+  ã               @   sð   d dl Z d dlZd dlZddlmZ ddlmZ ddlmZm	Z	m
Z
 ddlmZ yd dlmZ W n ek
r|   d dlZY nX dZd	Zd
ZejdƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ ZdS )"é    Né   )Úecho)Úsplit_arg_string)ÚMultiCommandÚOptionÚArgument)ÚChoice)Úabcú=a†  
%(complete_func)s() {
    local IFS=$'
'
    COMPREPLY=( $( env COMP_WORDS="${COMP_WORDS[*]}" \
                   COMP_CWORD=$COMP_CWORD \
                   %(autocomplete_var)s=complete $1 ) )
    return 0
}

%(complete_func)setup() {
    local COMPLETION_OPTIONS=""
    local BASH_VERSION_ARR=(${BASH_VERSION//./ })
    # Only BASH version 4.4 and later have the nosort option.
    if [ ${BASH_VERSION_ARR[0]} -gt 4 ] || ([ ${BASH_VERSION_ARR[0]} -eq 4 ] && [ ${BASH_VERSION_ARR[1]} -ge 4 ]); then
        COMPLETION_OPTIONS="-o nosort"
    fi

    complete $COMPLETION_OPTIONS -F %(complete_func)s %(script_names)s
}

%(complete_func)setup
a9  
%(complete_func)s() {
    local -a completions
    local -a completions_with_descriptions
    local -a response
    response=("${(@f)$( env COMP_WORDS="${words[*]}" \
                        COMP_CWORD=$((CURRENT-1)) \
                        %(autocomplete_var)s="complete_zsh" \
                        %(script_names)s )}")

    for key descr in ${(kv)response}; do
      if [[ "$descr" == "_" ]]; then
          completions+=("$key")
      else
          completions_with_descriptions+=("$key":"$descr")
      fi
    done

    if [ -n "$completions_with_descriptions" ]; then
        _describe -V unsorted completions_with_descriptions -U -Q
    fi

    if [ -n "$completions" ]; then
        compadd -U -V unsorted -Q -a completions
    fi
    compstate[insert]="automenu"
}

compdef %(complete_func)s %(script_names)s
z[^a-zA-Z0-9_]c             C   s@   t jd| jddƒƒ}|dkr tnt}|d| | |dœ jƒ d S )NÚ ú-Ú_Úzshz_%s_completion)Zcomplete_funcZscript_namesZautocomplete_varú;)Ú_invalid_ident_char_reÚsubÚreplaceÚCOMPLETION_SCRIPT_ZSHÚCOMPLETION_SCRIPT_BASHÚstrip)Ú	prog_nameÚcomplete_varÚshellZcf_nameÚscript© r   ú4/tmp/pip-build-w1as9q70/click/click/_bashcomplete.pyÚget_completion_scriptK   s    r   c             C   sØ   | j ||dd�}|j|j }x¶|rÒt|jtƒrÎ|jjsv|jj||ƒ\}}}|dkrV|S |j |||dd�}|j|j }qÐxD|rº|jj||ƒ\}}}|dkrœ|S |j |||dddd�}|j}qxW |}|j|j }qP qW |S )a  
    Parse into a hierarchy of contexts. Contexts are connected through the parent variable.
    :param cli: command definition
    :param prog_name: the program that is running
    :param args: full list of args
    :return: the final context/command parsed
    T)Úresilient_parsingN)Úparentr   F)r   Zallow_extra_argsÚallow_interspersed_argsr   )Zmake_contextÚprotected_argsÚargsÚ
isinstanceÚcommandr   ÚchainZresolve_command)Úclir   r!   ÚctxÚcmd_nameÚcmdZsub_ctxr   r   r   Úresolve_ctxU   s0    


r)   c             C   s   | o| dd… dkS )z�
    :param param_str: param_str to check
    :return: whether or not this is the start of an option declaration (i.e. starts "-" or "--")
    Nr   r   r   )Z	param_strr   r   r   Ústart_of_optionz   s    r*   c             C   sr   t |tƒsdS |jrdS d}x>ttdd„ | D ƒƒƒD ]$\}}|d |jkrLP t|ƒr4|}q4W |rn||jkrndS dS )aE  
    :param all_args: the full original list of args supplied
    :param cmd_param: the current command paramter
    :return: whether or not the last option declaration (i.e. starts "-" or "--") is incomplete and
    corresponds to this cmd_param. In other words whether this cmd_param option can still accept
    values
    FNc             S   s   g | ]}|t kr|‘qS r   )Ú	WORDBREAK)Ú.0Úargr   r   r   ú
<listcomp>�   s    z(is_incomplete_option.<locals>.<listcomp>r   T)r"   r   Zis_flagÚ	enumerateÚreversedÚnargsr*   Úopts)Úall_argsÚ	cmd_paramZlast_optionÚindexZarg_strr   r   r   Úis_incomplete_option‚   s    
 r6   c             C   s^   t |tƒsdS | |j }|dkr$dS |jdkr2dS t |tjƒrZ|jdkrZt|ƒ|jk rZdS dS )aL  
    :param current_params: the current params and values for this argument as already entered
    :param cmd_param: the current command parameter
    :return: whether or not the last argument is incomplete and corresponds to this cmd_param. In
    other words whether or not the this cmd_param argument can still accept values
    FNTr   éÿÿÿÿ)r"   r   Únamer1   r	   ÚIterableÚlen)Zcurrent_paramsr4   Zcurrent_param_valuesr   r   r   Úis_incomplete_argument˜   s    


r;   c                sT   g }t |jtƒr(‡ fdd„|jjD ƒ}n(|jdk	rP|j| |ˆ d�}dd„ |D ƒ}|S )a  
    :param ctx: context associated with the parsed command
    :param args: full list of args
    :param incomplete: the incomplete text to autocomplete
    :param cmd_param: command definition
    :return: all the possible user-specified completions for the param
    c                s"   g | ]}t |ƒjˆ ƒr|d f‘qS )N)ÚstrÚ
startswith)r,   Úc)Ú
incompleter   r   r.   ·   s   z,get_user_autocompletions.<locals>.<listcomp>N)r&   r!   r?   c             S   s"   g | ]}t |tƒr|n|d f‘qS )N)r"   Útuple)r,   r>   r   r   r   r.   ½   s   )r"   Útyper   ÚchoicesZautocompletion)r&   r!   r?   r4   ÚresultsZdynamic_completionsr   )r?   r   Úget_user_autocompletions¬   s    

rD   c             c   s>   x8| j j| ƒD ](}|j|ƒr| j j| |ƒ}|js|V  qW dS )zÌ
    :param ctx: context associated with the parsed command
    :starts_with: string that visible commands must start with.
    :return: all visible (not hidden) commands that start with starts_with.
    N)r#   Zlist_commandsr=   Zget_commandÚhidden)r&   Zstarts_withr>   r#   r   r   r   Ú"get_visible_commands_starting_withÂ   s
    
rF   c                s€   t ˆ jtƒr&|jdd„ tˆ |ƒD ƒƒ xTˆ jd k	rzˆ j‰ t ˆ jtƒr(ˆ jjr(‡ fdd„tˆ |ƒD ƒ}|jdd„ |D ƒƒ q(W d S )Nc             S   s   g | ]}|j |jƒ f‘qS r   )r8   Úget_short_help_str)r,   r>   r   r   r   r.   Ó   s    z.add_subcommand_completions.<locals>.<listcomp>c                s   g | ]}|j ˆ jkr|‘qS r   )r8   r    )r,   r>   )r&   r   r   r.   Ù   s    c             S   s   g | ]}|j |jƒ f‘qS r   )r8   rG   )r,   r>   r   r   r   r.   Û   s    )r"   r#   r   ÚextendrF   r   r$   )r&   r?   Zcompletions_outZremaining_commandsr   )r&   r   Úadd_subcommand_completionsÏ   s    rI   c                s4  t j|ƒ‰ t| ||ƒ}|dkr"g S tˆƒrTtˆkrTˆjtƒ}ˆ j|d ƒ |d ‰nˆtkr`d‰g }tˆƒrÊxX|jjD ]L‰t	ˆt
ƒrvˆj rv‡ ‡fdd„ˆjˆj D ƒ}|j‡‡fdd„|D ƒƒ qvW |S x(|jjD ]‰tˆ ˆƒrÔt|ˆ ˆˆƒS qÔW x*|jjD ]‰t|jˆƒrþt|ˆ ˆˆƒS qþW t|ˆ|ƒ t|ƒS )zõ
    :param cli: command definition
    :param prog_name: the program that is running
    :param args: full list of args
    :param incomplete: the incomplete text to autocomplete
    :return: all the possible completions for the incomplete
    Nr   é   r   c                s   g | ]}|ˆ ksˆj r|‘qS r   )Úmultiple)r,   Z	param_opt)r3   Úparamr   r   r.   ú   s    zget_choices.<locals>.<listcomp>c                s    g | ]}|j ˆ ƒr|ˆjf‘qS r   )r=   Úhelp)r,   Úo)r?   rL   r   r   r.   ü   s    )ÚcopyÚdeepcopyr)   r*   r+   Ú	partitionÚappendr#   Úparamsr"   r   rE   r2   Zsecondary_optsrH   r6   rD   r;   rI   Úsorted)r%   r   r!   r?   r&   Zpartition_incompleteZcompletionsZ
param_optsr   )r3   r?   rL   r   Úget_choicesÞ   s4    



rU   c             C   s’   t tjd ƒ}ttjd ƒ}|d|… }y|| }W n tk
rL   d}Y nX x>t| |||ƒD ],}t|d ƒ |r^t|d r„|d ndƒ q^W dS )NÚ
COMP_WORDSÚ
COMP_CWORDr   r   r   r   T)r   ÚosÚenvironÚintÚ
IndexErrorrU   r   )r%   r   Zinclude_descriptionsÚcwordsÚcwordr!   r?   Úitemr   r   r   Údo_complete  s    
r_   c             C   sR   |j dƒr.|dkrdnd}tt|||ƒƒ dS |dks>|dkrNt| ||dkƒS dS )	NÚsourceZ
source_zshr   ÚbashTZcompleteZcomplete_zshF)r=   r   r   r_   )r%   r   r   Zcomplete_instrr   r   r   r   Úbashcomplete  s    
rb   ) rO   rX   ÚreÚutilsr   Úparserr   Úcorer   r   r   Útypesr   Úcollectionsr	   ÚImportErrorr+   r   r   Úcompiler   r   r)   r*   r6   r;   rD   rF   rI   rU   r_   rb   r   r   r   r   Ú<module>   s2   

%.