86 lines
3.0 KiB
Plaintext
86 lines
3.0 KiB
Plaintext
#compdef say
|
|
|
|
local ret=1
|
|
local -a context line state state_descr tmp
|
|
local -A opt_args val_args
|
|
|
|
_arguments -s -S : \
|
|
'(-a --audio-device)'{-a+,--audio-device=}'[specify audio device]: :->devices' \
|
|
'--bit-rate=[specify bit rate]: :->bit-rates' \
|
|
'--channels=[specify number of channels]:number of channels' \
|
|
'--data-format=[specify output data format]: :->data-formats' \
|
|
'(: -f --input-file)'{-f+,--input-file=}'[specify input file]:input file:_files' \
|
|
'--file-format=[specify output file format]: :->file-formats' \
|
|
'(-i --interactive)-i[display/highlight text as it is spoken]' \
|
|
'(-i --interactive)--interactive=[display/highlight text as it is spoken]:: :->markups' \
|
|
'(-o --output-file)'{-o+,--output-file=}'[specify output file]:output file:_files' \
|
|
'(-n --network-send)'{-n+,--network-send=}'[specify network service/port]:network service/port' \
|
|
'--progress[display progress meter]' \
|
|
'--quality=[specify converter quality level]:quality level (0-127)' \
|
|
'(-r --rate)'{-r+,--rate=}'[specify speech rate]:speech rate (words per minute)' \
|
|
'(-v --voice)'{-v+,--voice=}'[specify voice]: :->voices' \
|
|
'(-f)*: :_guard "^-*" "text to speak"' \
|
|
&& ret=0
|
|
|
|
case $state in
|
|
bit-rates)
|
|
# A file format must have already been provided in order to complete these;
|
|
# also, not every file format supports bit-rate values
|
|
(( $+opt_args[--file-format] )) && {
|
|
tmp=( ${(f)"$(
|
|
_call_program bit-rates $words[1] \
|
|
--file-format=${opt_args[--file-format]##*:} \
|
|
--bit-rate='\?'
|
|
)"} )
|
|
tmp=( ${tmp//[[:space:]]##/} )
|
|
}
|
|
if (( $#tmp )); then
|
|
_values 'bit rate' $tmp && ret=0
|
|
else
|
|
_message 'bit rate' && ret=0
|
|
fi
|
|
;;
|
|
data-formats)
|
|
# A file format must have already been provided in order to complete these
|
|
if (( ! $+opt_args[--file-format] )); then
|
|
_message 'data format' && ret=0
|
|
else
|
|
tmp=( ${(f)"$(
|
|
_call_program data-formats $words[1] \
|
|
--file-format=${opt_args[--file-format]##*:} \
|
|
--data-format='\?'
|
|
)"} )
|
|
tmp=( ${tmp//:/\\:} )
|
|
tmp=( ${^tmp/[[:space:]]##/[}\] )
|
|
_values 'data format' $tmp && ret=0
|
|
fi
|
|
;;
|
|
devices)
|
|
tmp=( ${(f)"$( _call_program devices $words[1] -a '\?' )"} )
|
|
tmp=( ${tmp##[[:space:]]#[0-9]##[[:space:]]##} )
|
|
tmp=( ${tmp//:/\\:} )
|
|
_values 'audio device name or ID' $tmp && ret=0
|
|
;;
|
|
file-formats)
|
|
tmp=( ${(f)"$( _call_program file-formats $words[1] --file-format='\?' )"} )
|
|
tmp=( ${tmp%%[[:space:]]##\(.*} )
|
|
tmp=( ${tmp//:/\\:} )
|
|
tmp=( ${^tmp/[[:space:]]##/[}\] )
|
|
_values 'file format' $tmp && ret=0
|
|
;;
|
|
markups)
|
|
tmp=( bold smso smul ${(k)terminfo} )
|
|
_alternative \
|
|
'colors:color:(black red green yellow blue magenta cyan white)' \
|
|
"capabilities:terminfo capability:( ${(j< >)tmp} )" \
|
|
&& ret=0
|
|
;;
|
|
voices)
|
|
tmp=( ${(f)"$( _call_program voices $words[1] -v '\?' )"} )
|
|
tmp=( ${tmp%%[[:space:]](#c2,)*} )
|
|
_values voice $tmp && ret=0
|
|
;;
|
|
esac
|
|
|
|
return ret
|