#compdef lzop

local expl state line decompress disp curcontext="$curcontext" sep ret=1
typeset -A opt_args

_arguments -C -s \
  '(-c --stdout --to-stdout)'{-c,--stdout,--to-stdout}'[write on standard output]' \
  '(-d --decompress --uncompress -x -extract)'{-d,--decompress,--uncompress}'[decompress]' \
  '(-x --extract -d --decompress --uncompress -n --name -p --path)'{-x,--extract}'[extract]' \
  '(-f --force)'{-f,--force}'[force overwrite]' \
  '(- *)'{-h,-H,--help}'[display help information]' \
  '(-l --list)'{-l,--list}'[list compressed file contents]' \
  '(-L --license)'{-L,--license}'[display software license]' \
  '(-n --no-name -N --name)'{-n,--no-name}'[do not save or restore the original name and time stamp]' \
  '(-N --name -n --no-name)'{-N,--name}'[save or restore the original name and time stamp]' \
  '--no-mode[do not restore original mode]' \
  '--no-time[do not restore original time stamp]' \
  '(-q --quiet --silent)'{-q,--quiet,--silent}'[suppress all warnings]' \
  '(-r --recursive)'{-r,--recursive}'[operate recursively on directories]' \
  '(-S --suffix)'{-S+,--suffix=}'[specify suffix for compressed files]:suffix' \
  '(-t --test)'{-t,--test}'[test compressed file integrity]' \
  \*{-v,--verbose}'[verbose mode]' \
  '(- *)'{-V,--version}'[display version number]' \
  '(       -1 -2 -3 -4 -5 -6 -7 -8 -9 --best)--fast' \
  '(--fast    -2 -3 -4 -5 -6 -7 -8 -9 --best)-1' \
  '(--fast -1    -3 -4 -5 -6 -7 -8 -9 --best)-2' \
  '(--fast -1 -2    -4 -5 -6 -7 -8 -9 --best)-3' \
  '(--fast -1 -2 -3    -5 -6 -7 -8 -9 --best)-4' \
  '(--fast -1 -2 -3 -4    -6 -7 -8 -9 --best)-5' \
  '(--fast -1 -2 -3 -4 -5    -7 -8 -9 --best)-6' \
  '(--fast -1 -2 -3 -4 -5 -6    -8 -9 --best)-7' \
  '(--fast -1 -2 -3 -4 -5 -6 -7    -9 --best)-8' \
  '(--fast -1 -2 -3 -4 -5 -6 -7 -8    --best)-9' \
  '(--fast -1 -2 -3 -4 -5 -6 -7 -8 -9       )--best' \
  '--ls=[list each compressed file in a format similar to ls -ln]:ls flag:->flags' \
  '--info[list internal header fields for each compressed file]' \
  '(-I --sysinfo)'{-I,--sysinfo}'[display information about the system]' \
  '(-o --outfile)'{-o,--outfile=}'[specify output file]:output file:_files' \
  '(-p --path)'{-p,--path=}'[write output files to specified directory]:directory:_files -/' \
  '(-F --no-checksum)'{-F,--no-checksum}'[do not store or verify a checksum]' \
  '(-k --keep -U --unlink --delete)'{-k,--keep}"[keep (don't delete) input files]" \
  '(-U --unlink --delete)'{-U,--unlink,--delete}'[delete input files]' \
  '--no-stdin[do not try to read stdin]' \
  '--no-warn[suppress all warnings]' \
  '--ignore-warn[suppress all warnings and never exit with status 2]' \
  '--no-color[do not use an color escape sequences]' \
  '--mono[assume a mono ANSI terminal]' \
  '--color[assume a color ANSI terminal]' \
  '--intro[display intro sequence]' \
  '--filter=[preprocess data with a special multimedia filter]:number' \
  '*:files:->files' && ret=0

case "$state" in
  files)
    if (( $+opt_args[-d] || $+opt_args[--decompress] ||
	$+opt_args[--uncompress] || $+opt_args[-x] || $+opt_args[--extract] ||
	$+opt_args[--test] || $+opt_args[-t] || $+opt_args[--list] ||
	$+opt_args[-l] || $+opt_args[--ls] || $+opt_args[--info] )); then
      _description files expl 'compressed file'
      _files "$expl[@]" -g '*.[tl]zo(-.)' && ret=0
    else
      _description files expl 'file to compress'
      _files "$expl[@]" -g '^*.[tl]zo(-.)' && ret=0
    fi
  ;;
  flags)
    zstyle -s ":completion:${curcontext}:flags" list-separator sep || sep=--
    disp=(
      "F $sep Append a \`*' for executable files"
      "G $sep Inhibit display of group information"
      "Q $sep Enclose file names in double quotes" )
    # The "Z" on the next line is sentinel to prevent the character class from being empty.
    disp=( ${disp[@]:#[Z$PREFIX]*} )
    compset -P '[FGQ]#'
    compadd -d disp - ${disp[@]%% *} && ret=0
  ;;
esac

return ret
