#autoload local opt OPTARG local term=$'\0' while getopts "t:" opt; do case $opt in (t) term=$OPTARG ;; (*) return 1 ;; esac done shift $(( OPTIND - 1 )) local tag=$1 local desc=$2 shift 2 reply=(\() integer i local -a wds for (( i = 1; i <= $#; i++ )); do wds=(${(s.:.)argv[i]}) reply+=(/${wds[1]//\**/"[^$term]#"}"$term"/) if [[ $term = $'\0' ]]; then reply+=(":${tag}:${desc}:(( ${wds[1]//\*}:${wds[2]//(#m)[: \(\)]/\\$MATCH} ))") else reply+=(":${tag}:${desc}:_values -s ${(q)term} ${(q)desc} \ ${(q)${${wds[1]//\*}//(#m)[:\[\]]/\\$MATCH}}\\[${(q)${wds[2]//(#m)[:\[\]]/\\$MATCH}}\\]") fi eval "reply+=($wds[3])" if (( $i == $# )); then reply+=(\)) else reply+=(\|) fi done