# bash completion for ant

have ant &&
{
_ant()
{
    local cur prev buildfile i

    COMPREPLY=()
    _get_comp_words_by_ref cur prev

    case $prev in
        -buildfile|-file|-f)
            _filedir 'xml'
            return 0
            ;;
        -logfile|-l)
            _filedir
            return 0
            ;;
        -propertyfile)
            _filedir properties
            return 0
            ;;
        -nice)
            COMPREPLY=( $( compgen -W '1 2 3 4 5 6 7 8 9 10' -- "$cur" ) )
            return 0
            ;;
        -lib|-logger|-listener|-D|-inputhandler|-main)
            return 0
            ;;
    esac

    if [[ "$cur" == -* ]]; then
        COMPREPLY=( $( compgen -W '-help -projecthelp -version -diagnostics \
            -quiet -verbose -debug -emacs -lib -logfile -logger -listener \
            -noinput -buildfile -D -keep-going -propertyfile -inputhandler \
            -find -s -nice -nouserlib -noclasspath -autoproxy -main' \
            -- "$cur" ) )
    else
        # available targets completion
        # find which buildfile to use
        buildfile=build.xml
        for (( i=1; i < COMP_CWORD; i++ )); do
            if [[ "${COMP_WORDS[i]}" == -@(?(build)file|f) ]]; then
                buildfile=${COMP_WORDS[i+1]}
                break
            fi
        done
        [ ! -f $buildfile ] && return 0

        # parse buildfile for targets
        # some versions of sed complain if there's no trailing linefeed,
        # hence the 2>/dev/null
        COMPREPLY=( $( compgen -W "$( cat $buildfile | tr "'\t\n>" "\"  \n" | \
            sed -ne 's/.*<target .*name="\([^"]*\).*/\1/p' 2>/dev/null )" \
            -- "$cur" ) )
        fi
}
have complete-ant-cmd.pl && \
     complete -C complete-ant-cmd.pl -F _ant -o filenames ant || \
     complete -F _ant -o filenames ant
}

# Local variables:
# mode: shell-script
# sh-basic-offset: 4
# sh-indent-comment: t
# indent-tabs-mode: nil
# End:
# ex: ts=4 sw=4 et filetype=sh
