mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-11-04 07:21:06 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			85 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
#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
 |