# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
# ex: ts=8 sw=8 noet filetype=sh
#
# povray completion by "David Necas (Yeti)" <yeti@physics.muni.cz>

have povray || have xpovray || have spovray &&
_povray()
{
	local cur prev povcur pfx oext defoext
	defoext=png # default output extension, if cannot be determined FIXME

	COMPREPLY=()
	povcur=`_get_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 $filenames povray xpovray spovray
