#compdef print

local state expl line eflag pflag

# -e flag available only after -R 
eflag="${words[1,CURRENT-1][(r)-*R*]:+-e[enable escapes]}"

# -p flag only relevant if we have a coprocess
(:>&p) 2>/dev/null &&
  pflag='(-s -u -z)-p[print arguments to input of coprocess]'

_arguments -C -s -A "-*" -S \
  '(-f)-r[ignore escape conventions of echo]' \
  '(-r -b -f -m -s -l -N -o -O -i -c -u -p -z -D -P)-R[emulate BSD echo (no escapes, -n & -e flags only)]' \
  '-b[recognise bindkey escape sequences]' \
  '-m[remove arguments matching specified pattern]' \
  '(-r -n -R -l -N -c)-f+[print arguments as for the printf builtin]:format' \
  '(-u -p -z)-s[place results in the history list]' \
  '(-c -f)-n[do not add a newline to the result]' \
  '(-N -c -f)-l[print arguments separated by newlines]' \
  '(-n -l -c -f)-N[print arguments separated and terminated by nulls]' \
  '(-O)-o[sort arguments in ascending order]' \
  '(-o)-O[sort arguments in descending order]' \
  '-i[case-insensitive sorting]' \
  '(-n -l -N -f -s -z)-a[with -c/-C, print arguments across before down]' \
  '(-n -l -N -f -C -s -z)-c[print arguments in columns]' \
  '(-n -l -N -f -c -s -z)-C+[print arguments in specified number of columns]:columns' \
  '(-s -p -z)-u+[specify file descriptor to print arguments to]:file descriptor:_file_descriptors' \
  '(-s -p -u)-z[push arguments onto editing buffer stack]' \
  '-D[substitute any arguments which are named directories using ~ notation]' \
  '-P[perform prompt expansion]' \
  $pflag $eflag '*:default:_default'
