#compdef rubber rubber-pipe rubber-info

local _rubber_version _rubber_path _rubber_modules _rubber_args

eval $(rubber --version 2>/dev/null | sed 's/^.* \([^ ]*\): */_rubber_\1=/')
if [[ ${_rubber_version#0} != $_rubber_version ]]; then
  _rubber_modules=(
    $_rubber_path/rubber/modules/[^_]*.py(N:r:t)
  )
else
  _rubber_modules=(
    $_rubber_path/modules/*.rub(N:r:t)
    $_rubber_path/rubber/rules/latex/[^_]*.py(N:r:t)
  )
fi

_rubber_args=(
  \*{-c,--command}'=[run specified directive command before parsing]:command'
  \*{-e,--epilogue}'=[run specified directive command after parsing]:command'
  '(-z --gzip)'{-z,--gzip}'[compress the final document]'
  '(- *)'{-h,--help}'[show help information]'
  '--into=[go to specified directory before compiling]:directory:_files -/'
  '(-l --landscape)'{-l,--landscape}'[change paper orientation (if relevant)]'
  '(-n --maxerr)'{-n,--maxerr}'=[display at most specified number of errors]:number'
  \*{-m,--module}'=[use module]:module:($_rubber_modules)'
  '--only=[only include the specified sources]:sources'
  \*{-o,--post}'=[postprocess with module]:postprocessor:($_rubber_modules)'
  '(-d --pdf -p -ps)'{-d,--pdf}'[produce PDF output instead of DVI]'
  '(-p -ps -d --pdf)'{-p,--ps}'[produce a PostScript document]'
  {-q,--quiet}'[suppress messages]'
  \*{-r,--read}'[read additional directives from a file]:directives files:_files'
  {-s,--short}'[display errors in compact form]'
  \*{-I,--texpath}'=[add directory to the search path for LaTeX]:tex path:_files -/'
  \*{-v,--verbose}'[increase verbosity]'
  '--version[print version information and exit]'
)

case "$service" in
  rubber)
    _arguments -s \
      "$_rubber_args[@]" \
      '--clean[remove produced files instead of compiling]' \
      {-f,--force}'[force at least one compilation]' \
      '--inplace[compile the documents from their source directory]' \
      \*{-W,--warn}'=[report warnings of the given type]:warnings:(all boxes misc refs)' \
      '*:LaTeX files:_files -g "*.(tex|dtx|lhs|w)(-.)"'
	;;
	
  rubber-pipe)
    _arguments -s \
      "$_rubber_args[@]" \
      {-k,--keep}'[keep the temporary files after compiling]' \
      \*{-W,--warn}'=[report warnings of the given type]:warnings:(all boxes misc refs)'
	;;
	
  rubber-info)
    _arguments -s \
      "$_rubber_args[@]" \
      '--boxes[report overfull and underfull boxes]' \
      '--check[report errors or warnings default action]' \
      '--deps[show the target file s dependencies]' \
      '--errors[show all errors that occurred during compilation]' \
      '--refs[show the list of undefined references]' \
      '--warnings[show all LaTeX warnings]' \
      ':LaTeX file:_files -g "*.(tex|dtx|lhs|w)(-.)"'
  ;;
esac
