# povray completion by "David Necas (Yeti)" <yeti@physics.muni.cz>
#
# $Id: povray,v 1.2 2003/12/31 08:22:37 ianmacd Exp $

_povray()
{
  local cur prev povcur pfx oext defoext
  defoext=png # default output extension, if cannot be determined FIXME

  COMPREPLY=()
  povcur=${COMP_WORDS[COMP_CWORD]}
  prev=${COMP_WORDS[COMP_CWORD-1]}

  _expand || return 0

  case $povcur in
    [-+]I*)
    cur="${povcur#[-+]I}" # to confuse _filedir
    pfx="${povcur%"$cur"}"
    _filedir pov
    COMPREPLY=( ${COMPREPLY[@]/#/$pfx} )
    return 0
    ;;
    [-+]O*)
    # guess what output file type user may want
    case $( ( IFS=$'\n'; echo "${COMP_WORDS[*]}" | grep '^[-+]F' ) ) in
      [-+]FN) oext=png ;;
      [-+]FP) oext=ppm ;;
      [-+]F[CT]) oext=tga ;;
      *) oext=$defoext ;;
    esac
    # complete filename corresponding to previously specified +I
    COMPREPLY=( $( ( IFS=$'\n'; echo "${COMP_WORDS[*]}" | grep '^[-+]I' ) ) )
    COMPREPLY=( ${COMPREPLY[@]#[-+]I} )
    COMPREPLY=( ${COMPREPLY[@]/%.pov/.$oext} )
    cur="${povcur#[-+]O}" # to confuse _filedir
    pfx="${povcur%"$cur"}"
    _filedir $oext
    COMPREPLY=( ${COMPREPLY[@]/#/$pfx} )
    return 0
    ;;
    *.ini\[|*.ini\[*[^]]) # sections in .ini files
    cur="${povcur#*\[}"
    pfx="${povcur%\["$cur"}" # prefix == filename
    [ -r "$pfx" ] || return 0
    COMPREPLY=( $(sed -e 's/^[[:space:]]*\[\('"$cur"'[^]]*\]\).*$/\1/' -e 't' -e 'd' -- "$pfx") )
    # to prevent [bar] expand to nothing.  can be done more easily?
    COMPREPLY=( "${COMPREPLY[@]/#/$pfx[}" )
    return 0
    ;;
    *)
    cur="$povcur"
    _filedir '?(ini|pov)'
    return 0
    ;;
  esac
}
complete -F _povray -o filenames povray xpovray spovray
