#compdef enscript

local state context line curcontext="$curcontext" match
typeset -A opt_args

_arguments -C -s \
  '(   -2 --columns)-1' \
  '(-1    --columns)-2' \
  '(-1 -2          )--columns=:columns:' \
  '(--pages)-a+:pages:(even odd)' \
  '(-a)--pages=:pages:(even odd)' \
  '(--file-align)-A+:align:' \
  '(-A)--file-align=:align:' \
  '(--header)-b+:page header:' \
  '(-b)--header=:page header:' \
  '(--no-header)-B' \
  '(-B)--no-header' \
  '(--truncate-lines)-c' \
  '(-c)--truncate-lines' \
  '(--line-numbers)-C-:start line:' \
  '(-C)--line-numbers=-:start line:' \
  '(--printer -d   )-P+:printer name: _printers' \
  '(--printer    -P)-d+:printer name: _printers' \
  '(          -d -P)--printer=:printer name: _printers' \
  '*-D+:key\:value:' \
  '*--setpagedevice=:key\:value:' \
  '(--escapes)-e-:escape character:' \
  '(-e)--escapes=-:escape character:' \
  '(--pretty-print)-E-:input language:->inputlang' \
  '(-E)--pretty-print=-:input language:->inputlang' \
  '(--font)-f+:fontname:' \
  '(-f)--font=:fontname:' \
  '(--header-font)-F+:fontname:' \
  '(-F)--header-font=:fontname:' \
  '(--print-anyway)-g' \
  '(-g)--print-anyway' \
  '(--fancy-header)-G' \
  '(-G)--fancy-header=-:name:' \
  '(--no-job-header)-h' \
  '(-h)--no-job-header' \
  '(--highlight-bars)-H-:lines:' \
  '(-H)--highlight-bars=-:lines:' \
  '(--indent)-i+:indent length:' \
  '(-i)--indent=:indent length:' \
  '(--filter)-I+:input filter:->commandline' \
  '(-I)--filter=:input filter:->commandline' \
  '(--borders)-j' \
  '(-j)--borders' \
  '(--page-prefeed)-k' \
  '(-k)--page-prefeed' \
  '(--no-page-prefeed)-K' \
  '(-K)--no-page-prefeed' \
  '(--lineprinter)-l' \
  '(-l)--lineprinter' \
  '(--lines-per-page)-L+:lines per page:' \
  '(-L)--lines-per-page=:lines per page:' \
  '(--mail)-m' \
  '(-m)--mail' \
  '(--media)-M+:media name:(A4)' \
  '(-M)--media=:media name:(A4)' \
  '(--copies -n   )-#+:number of copies:' \
  '(--copies    -#)-n+:number of copies:' \
  '(         -n -#)--copies=:number of copies:' \
  '(--newline)-N+:newline type:((n\:unix r\:mac))' \
  '(-N)--newline=:newline type:((n\:unix r\:mac))' \
  '(--output -p   )-o+:output file:' \
  '(--output    -o)-p+:output file:_files' \
  '(         -p -o)--output=:output file:_files' \
  '(--missing-characters)-O' \
  '(-O)--missing-characters' \
  '(--quiet --silent)-q' \
  '(-q --silent)--quiet' \
  '(-q --quiet)--silent' \
  '(--landscape)-r' \
  '(-r)--landscape' \
  '(--portrait)-R' \
  '(-R)--portrait' \
  '(--baselineskip)-s+:baseline skip:' \
  '(-s)--baselineskip=:baseline skip:' \
  '*-S+:key\:value:' \
  '*--statusdict=:key\:value:' \
  '(--title -t   )-J+:banner title:' \
  '(--title    -J)-t+:banner title:' \
  '(        -t -J)--title=:banner title:' \
  '(--tabsize)-T+:tabsize:(8)' \
  '(-T)--tabsize=:tabsize:(8)' \
  '(--underlay)-u-:underlay text:' \
  '(-u)--underlay=-:underlay text:' \
  '(--nup)-U+:pages:(4)' \
  '(-U)--nup=:pages:(4)' \
  '(--verbose)-v' \
  '(-v)--verbose=-:level:' \
  '(--version)-V' \
  '(-V)--version' \
  '(--language)-W+:output language:(PostScript html overstrike rtf)' \
  '(-W)--language=:output language:(PostScript html overstrike rtf)' \
  '(--encoding)-X+:character encoding:(88591 latin1 88592 latin2 88593 latin3 88594 latin4 88595 cyrillic 88597 greek 88599 latin5 885910 latin6 ascii asciifise asciifi asciise asciidkno asciidk asciino ibmpc pc dos mac vms hp8 koi8 ps PS pslatin1 ISOLatin1Encoding)' \
  '(-X)--encoding=:character encoding:(88591 latin1 88592 latin2 88593 latin3 88594 latin4 88595 cyrillic 88597 greek 88599 latin5 885910 latin6 ascii asciifise asciifi asciise asciidkno asciidk asciino ibmpc pc dos mac vms hp8 koi8 ps PS pslatin1 ISOLatin1Encoding)' \
  '(--no-formfeed)-z' \
  '(-z)--no-formfeed' \
  '(--pass-through)-Z' \
  '(-Z)--pass-through' \
  '--color=-:use color:(false true)' \
  '--download-font=:fontname:' \
  '--filter-stdin=:stdin name:(-)' \
  '--h-column-height=:horizontal column height:' \
  '--help' \
  '--help-pretty-print' \
  '--highlight-bar-gray=:gray level:' \
  '--list-media' \
  '--list-options' \
  '--margins=:left\:right\:top\:bottom:' \
  '--mark-wrapped-lines=-:wrapped line style:(none plus box arrow)' \
  '--non-printable-format=:format to visualze non printable characters:(caret octal questionmark space)' \
  '--nup-xpad=:x-padding:(10)' \
  '--nup-ypad=:y-padding:(10)' \
  '--page-label-format=:page label format:(short long)' \
  '--ps-level=:PostScript language level:(1 2)' \
  '--printer-options=:extra options:' \
  '--rotate-even-pages' \
  '--slice=:virtical slice number:' \
  '--style=:highlighting style:' \
  '--toc' \
  '--word-wrap' \
  '--ul-angle=:underlay text'\''s angle:(45)' \
  '--ul-font=:underlay text'\''s fontname:(Times-Roman200)' \
  '--ul-gray=:underlay text'\''s gray level:(.8)' \
  '--ul-position=:underlay text'\''s position:(+0+0 -0-0)' \
  '--ul-style=:underlay text'\''s style:(outline filled)' \
  '*:filename:_files' && return 0

case "$state" in
commandline)
  compset -q
  _normal
  ;;

inputlang)
  if (( ! $+_enscript_input_languages )); then
    _enscript_input_languages=(${${(f)${(F)${(M)${(f)"$(enscript --help-pretty-print)"}:#(Name|Description):*}}//(#b)Name: ([^
]##)(
Description: ([^
]##)|)/$match[1]:$match[3]}%:})
  fi
  _describe 'input language' _enscript_input_languages -- 
  ;;
esac
