#
# Autocompletion for git-ignore
#
# Maintainer: Alberto Fanjul <albertofanjul@gmail.com>
#

function _git_ignore() {
  local cur prev

  _get_comp_words_by_ref cur
  prev=${COMP_WORDS[COMP_CWORD-1]}

  case "$prev" in
    --file)
      COMPREPLY=($(compgen -o plusdirs  -f -- $cur))
      return 0
  esac

  COMPREPLY=($(compgen -W "$(_parse_help git-ignore) $(_parse_short_help git-ignore)" -- "$cur"))
}


_parse_short_help () 
{ 
    eval local cmd=$( quote "$1" );
    local line;
    { 
        case $cmd in 
            -)
                cat
            ;;
            *)
                LC_ALL=C "$( dequote "$cmd" )" ${2:---help} 2>&1
            ;;
        esac
    } | while read -r line; do
        [[ $line == *([[:blank:]])-* ]] || continue;
        while [[ $line =~ ((^|[^-])-[A-Za-z0-9?][[:space:]]+)\[?[A-Z0-9]+\]? ]]; do
            line=${line/"${BASH_REMATCH[0]}"/"${BASH_REMATCH[1]}"};
        done;
        __parse_short_options "${line// or /, }";
    done
}

__parse_short_options () 
{ 
    local option option2 i IFS=' 	
,/|';
    option=;
    local -a array;
    read -a array <<< "$1";
    for i in "${array[@]}";
    do
        case "$i" in 
            ---*)
                break
            ;;
            --?*)
                break
            ;;
            -?*)
                option=$i;
                break
            ;;
            *)
                break
            ;;
        esac;
    done;
    [[ -n $option ]] || return;
    IFS=' 	
';
    if [[ $option =~ (\[((no|dont)-?)\]). ]]; then
        option2=${option/"${BASH_REMATCH[1]}"/};
        option2=${option2%%[<{().[]*};
        printf '%s\n' "${option2/=*/=}";
        option=${option/"${BASH_REMATCH[1]}"/"${BASH_REMATCH[2]}"};
    fi;
    option=${option%%[<{().[]*};
    printf '%s\n' "${option/=*/=}"
}

complete -F _git_ignore git-ignore


# ex: filetype=sh
