#autoload # short_bool=(h v d b s y f u m) # short_intlevel=(q) # short_configfile=(c) # short_arbitem=(o) # # long_bool=(help version download-only compile build simulate just-print recon # no-act yes assume-yes fix-broken show-upgraded ignore-missing no-download # fix-missing ignore-hold no-upgrade force-yes print-uris) # long_intlevel=(quiet silent) # long_configfile=(config-file) # long_arbitem=(option) ### local funcname funcname="$1" shift local short_seq false true bool bool_ __bool_ intlevel word word1 nul local comp_bool comp_intlevel comp_configfile comp_arbitem comp_long local regex_short regex_long regex_message regex_action regex_action=("$@") short_seq="(${(j:|:)short_bool}|${(j:|:)short_intlevel})#" false=(no false without off disable) true=(yes true with on enable) bool=($false $true) bool_=(${^bool}-) __bool_=(--$^bool_) intlevel='[0-9]##' word=$'[^\0]#\0' word1=$'[^\0]##\0' nul=$'\0' comp_bool='compadd "$expl_bool[@]" '"$bool" comp_intlevel= #"_message 'intlevel'" comp_configfile='_files "$expl_configfile[@]"' comp_arbitem= #"_message 'Foo::Bar=bar'" comp_long="\ tmp1=\${(kj:|:)long_to_option[(R)\${(kj:|:)~options[(R)*~0]}]} tmp2=(--\${(M)^long_bool:#\$~tmp1} --\${(M)^long_intlevel:#\$~tmp1}) compadd \"\$expl_opt[@]\" - \$tmp2 tmp2=(--\${(M)^long_configfile:#\$~tmp1} --\${(M)^long_arbitem:#\$~tmp1}) compadd \"\$expl_opt[@]\" -S= - \$tmp2 compadd \"\$expl_opt[@]\" -S '' - $__bool_" regex_short=( %- \( /"$short_seq(${(j:|:)short_bool})($nul(${(j:|:)bool})|(${(j:|:)bool})|)$nul" -"apt_consume_short \${_ra_match%%($nul(${(j:|:)bool})|(${(j:|:)bool})|)$nul}" \| /"$short_seq(${(j:|:)short_bool})=" -"apt_consume_short \${_ra_match%=}" \( /"$word1" !"$comp_bool" \| /"$nul" /"$word" !"$comp_bool" \) \| /"$short_seq(${(j:|:)short_intlevel})($nul$intlevel|$intlevel|)$nul" -"apt_consume_short \${_ra_match%%($nul$intlevel|$intlevel|)$nul}" \| /"$short_seq(${(j:|:)short_intlevel})=" -"apt_consume_short \${_ra_match%=}" \( /"$word1" !"$comp_intlevel" \| /"$nul" /"$word" !"$comp_intlevel" \) \| /"$short_seq(${(j:|:)short_configfile})(=|)" -"apt_consume_short \${_ra_match%=}" \( /"$word1" !"$comp_configfile" \| /"$nul" /"$word" !"$comp_configfile" \) \| /"$short_seq(${(j:|:)short_arbitem})(=|)" -"apt_consume_short \${_ra_match%=}" \( /"$word1" !"$comp_arbitem" \| /"$nul" /"$word" !"$comp_arbitem" \) \| /"[]" !"{ if [[ \$PREFIX = -$short_seq ]]; then apt_consume_short \${PREFIX[2,-1]} tmp1=(\${(k)short_to_option[(R)\${(kj:|:)~options[(R)*~0]}]}) tmp2=(-\${^tmp1}) compadd \"\$expl_opt[@]\" -y \"(\$tmp2)\" - \${PREFIX}\${^tmp1} fi $comp_long }" \) ) regex_long=( %-- \( /"(${(j:|:)long_bool})=" -"apt_consume_long \${_ra_match%=}" \( /"$word1" !"$comp_bool" \| /"$nul" /"$word" !"$comp_bool" \) \| /"(${(j:|:)long_bool})$nul" -"apt_consume_long \${_ra_match%$nul}" /"((${(j:|:)bool})$nul|)" !"$comp_bool" \| /"(${(j:|:)long_intlevel})=" -"apt_consume_long \${_ra_match%=}" \( /"$word1" !"$comp_intlevel" \| /"$nul" /"$word" !"$comp_intlevel" \) \| /"(${(j:|:)long_intlevel})$nul" -"apt_consume_long \${_ra_match%$nul}" /"($intlevel$nul|)" !"$comp_intlevel" \| /"(${(j:|:)long_configfile})$nul" -"apt_consume_long \${_ra_match%$nul}" /"$word" !"$comp_configfile" \| /"(${(j:|:)long_configfile})=" -"apt_consume_long \${_ra_match%=}" \( /"$word1" !"$comp_configfile" \| /"$nul" /"$word" !"$comp_configfile" \) \| /"(${(j:|:)long_arbitem})$nul" -"apt_consume_long \${_ra_match%$nul}" /"$word" !"$comp_arbitem" \| /"(${(j:|:)long_arbitem})=" -"apt_consume_long \${_ra_match%=}" \( /"$word1" !"$comp_arbitem" \| /"$nul" /"$word" !"$comp_arbitem" \) \| %"(${(j:|:)bool})-" \( /"(${(j:|:)long_bool})=" -"apt_consume_long \${_ra_match%=}" \( /"$word1" !"$comp_bool" \| /"$nul" /"$word" !"$comp_bool" \) \| /"(${(j:|:)long_bool})$nul" -"apt_consume_long \${_ra_match%$nul}" /"((${(j:|:)bool})$nul|)" !"$comp_bool" \| /"(${(j:|:)long_intlevel})$nul" -"apt_consume_long \${_ra_match%$nul}" /"$intlevel" !"$comp_intlevel" /"$nul" \| /"(${(j:|:)long_intlevel})=" -"apt_consume_long \${_ra_match%=}" \( /"$word1" !"$comp_intlevel" \| /"$nul" /"$word" !"$comp_intlevel" \) \| /"(${(j:|:)long_intlevel})$nul" -"apt_consume_long \${_ra_match%$nul}" /"($intlevel$nul|)" !"$comp_intlevel" \| /"(${(j:|:)long_configfile})$nul" -"apt_consume_long \${_ra_match%$nul}" /"$word" !"$comp_configfile" \| /"(${(j:|:)long_configfile})=" -"apt_consume_long \${_ra_match%=}" \( /"$word1" !"$comp_configfile" \| /"$nul" /"$word" !"$comp_configfile" \) \| /"(${(j:|:)long_arbitem})$nul" -"apt_consume_long \${_ra_match%$nul}" /"$word" !"$comp_arbitem" \| /"(${(j:|:)long_arbitem})=" -"apt_consume_long \${_ra_match%=}" \( /"$word1" !"$comp_arbitem" \| /"$nul" /"$word" !"$comp_arbitem" \) \| /"(${(j:|:)short_bool})=" -"apt_consume_short \${_ra_match[-2]}" \( /"$word1" !"$comp_bool" \| /"$nul" /"$word" !"$comp_bool" \) \| /"(${(j:|:)short_bool})$nul" -"apt_consume_short \${_ra_match[-2]}" /"((${(j:|:)bool})$nul|)" !"$comp_bool" \| /"(${(j:|:)short_intlevel})=" -"apt_consume_short \${_ra_match[-2]}" \( /"$word1" !"$comp_intlevel" \| /"$nul" /"$word" !"$comp_intlevel" \) \| /"(${(j:|:)short_intlevel})$nul" -"apt_consume_short \${_ra_match[-2]}" /"($intlevel$nul|)" !"$comp_intlevel" \| /"(${(j:|:)short_configfile})$nul" -"apt_consume_short \${_ra_match[-2]}" /"$word" !"$comp_configfile" \| /"(${(j:|:)short_configfile})=" -"apt_consume_short \${_ra_match[-2]}" \( /"$word1" !"$comp_configfile" \| /"$nul" /"$word" !"$comp_configfile" \) \| /"(${(j:|:)short_arbitem})$nul" -"apt_consume_short \${_ra_match[-2]}" /"$word" !"$comp_arbitem" \| /"(${(j:|:)short_arbitem})=" -"apt_consume_short \${_ra_match[-2]}" \( /"$word1" !"$comp_arbitem" \| /"$nul" /"$word" !"$comp_arbitem" \) \| /"[]" !"{ tmp1=\${(kj:|:)long_to_option[(R)\${(kj:|:)~options[(R)*~0]}]} tmp2=(\$_ra_left\${(M)^long_bool:#\$~tmp1} \$_ra_left\${(M)^long_intlevel:#\$~tmp1}) compadd \"\$expl_opt[@]\" - \$tmp2 tmp2=(\$_ra_left\${(M)^long_configfile:#\$~tmp1} \$_ra_left\${(M)^long_arbitem:#\$~tmp1}) compadd \"\$expl_opt[@]\" -S= - \$tmp2 tmp1=\${(kj:|:)short_to_option[(R)\${(kj:|:)~options[(R)*~0]}]} tmp2=(\$_ra_left\${(M)^short_bool:#\$~tmp1} \$_ra_left\${(M)^short_intlevel:#\$~tmp1}) compadd \"\$expl_opt[@]\" - \$tmp2 tmp2=(\$_ra_left\${(M)^short_configfile:#\$~tmp1} \$_ra_left\${(M)^short_arbitem:#\$~tmp1}) compadd \"\$expl_opt[@]\" -S= - \$tmp2 }" \) \| /"[]" !"{ $comp_long }" \) ) regex_message=( /"[]" !"[[ -prefix - || -z \"\$compconfig[option_prefix]\" ]] && { if [[ \$PREFIX = -$short_seq ]]; then apt_consume_short \${PREFIX[2,-1]} tmp1=(\${(k)short_to_option[(R)\${(kj:|:)~options[(R)*~0]}]}) tmp2=(-\${^tmp1}) compadd \"\$expl_opt[@]\" -y \"(\$tmp2)\" - \${PREFIX}\${^tmp1} elif [[ -z "\$PREFIX" ]]; then tmp1=(-\${(k)^short_to_option[(R)\${(kj:|:)~options[(R)*~0]}]}) compadd \"\$expl_opt[@]\" - \$tmp1 fi $comp_long }" ) apt_consume_short () { local short opt for short in ${(s::)1}; do opt="$short_to_option[$short]" (( 0 < options[$opt] && options[$opt]-- )) done } apt_consume_long () { local long opt opt="$long_to_option[$1]" (( 0 < options[$opt] && options[$opt]-- )) } _regex_arguments "${funcname}_sm" /"$word" \( "$regex_long[@]" \| "$regex_short[@]" \| "$regex_message[@]" \) \# "$regex_action[@]" eval "$funcname () { local short_bool short_intlevel short_configfile short_arbitem local long_bool long_intlevel long_configfile long_arbitem short_bool=($short_bool) short_intlevel=($short_intlevel) short_configfile=($short_configfile) short_arbitem=($short_arbitem) long_bool=($long_bool) long_intlevel=($long_intlevel) long_configfile=($long_configfile) long_arbitem=($long_arbitem) ${funcname}_sm }"