1#autoload 2 3local __gopt __len __tmp __pre __suf __ret=1 __descr __spec __prev 4 5if [[ "$1" = - ]]; then 6 __prev=- 7 shift 8fi 9 10__gopt=() 11zparseopts -D -a __gopt 1 2 V J x 12 13__tmp=${argv[(ib:4:)-]} 14__len=$# 15if [[ __tmp -lt __len ]]; then 16 __pre=$(( __tmp-1 )) 17 __suf=$__tmp 18elif [[ __tmp -eq $# ]]; then 19 __pre=-2 20 __suf=$(( __len+1 )) 21else 22 __pre=4 23 __suf=5 24fi 25 26while comptags "-A$__prev" "$1" curtag __spec; do 27 (( $#funcstack > _tags_level )) && _comp_tags="${_comp_tags% * }" 28 _tags_level=$#funcstack 29 _comp_tags="$_comp_tags $__spec " 30 if [[ "$curtag" = *[^\\]:* ]]; then 31 zformat -f __descr "${curtag#*:}" "d:$3" 32 _description "$__gopt[@]" "${curtag%:*}" "$2" "$__descr" 33 curtag="${curtag%:*}" 34 35 "$4" "${(P@)2}" "${(@)argv[5,-1]}" && __ret=0 36 else 37 _description "$__gopt[@]" "$curtag" "$2" "$3" 38 39 "${(@)argv[4,__pre]}" "${(P@)2}" "${(@)argv[__suf,-1]}" && __ret=0 40 fi 41done 42 43return __ret 44