
#1    2   3    4     5
#name cur prev pprev options
_completeenumerable ()
{
  if [[ $2 == = || $3 == = ]] ; then
    if [[ $3 == *$1 ]] ; then
      COMPREPLY=($(compgen -W "$5" -- ))
      return 0
    fi
    if [[ $4 == *$1 ]] ; then
      COMPREPLY=($(compgen -W "$5" -- $2))
      return 0
    fi
  fi
}

#Bash completion file for OpenFst 1.2
#Copyright Paul Dixon 2011 (paul@edobashira.com)
#Tested on Ubuntu 10.04 using bash 4.5 
#To use simply source the completion file.
#source openfstbc
#These bash completions will add tab completion to the OpenFst flags. This file adds three types of completions based on the flag’s value type.
#Flags which accept path, numeric values will complete with a trailing = character and then default to the standard path completion.
#Binary flags will complete without a trailing = character.
#Flags which can accepted an enumerable string value will complete will a trailing = and then suggest suitable values. For example the –arc_type= completions will suggest log and standard values parameters.

#1    2   3    4     5
#name cur prev pprev options
_completeenumerable ()
{
  if [[ $2 == = || $3 == = ]] ; then
    if [[ $3 == *$1 ]] ; then
      COMPREPLY=($(compgen -W "$5" -- ))
      return 0
    fi
    if [[ $4 == *$1 ]] ; then
      COMPREPLY=($(compgen -W "$5" -- $2))
      return 0
    fi
  fi
}

_fstprint() 
{
    local cur prev opts filters len pprev
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    if (( $COMP_CWORD > 2)) ; then
      pprev="${COMP_WORDS[COMP_CWORD-2]}"
    else
      pprev="NULL"
    fi

    opts="--acceptor --isymbols= --osymbols= --ssymbols= --numeric --save_isymbols= --save_osymbols= --show_weight_one --allow_negative_labels "

    

    if [[ ${cur} == -* ]] ; then
    COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
    return 0
    fi
}
complete -o default -o nospace -F _fstprint fstprint

_fstclosure() 
{
    local cur prev opts filters len pprev
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    if (( $COMP_CWORD > 2)) ; then
      pprev="${COMP_WORDS[COMP_CWORD-2]}"
    else
      pprev="NULL"
    fi

    opts="--closure_plus "

    

    if [[ ${cur} == -* ]] ; then
    COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
    return 0
    fi
}
complete -o default -o nospace -F _fstclosure fstclosure

_fstconvert() 
{
    local cur prev opts filters len pprev
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    if (( $COMP_CWORD > 2)) ; then
      pprev="${COMP_WORDS[COMP_CWORD-2]}"
    else
      pprev="NULL"
    fi

    opts="--fst_type= "

    _completeenumerable fst_type ${cur} ${prev} ${pprev} "arc_lookahead compact16_acceptor compact16_string compact16_unweighted compact16_unweighted_acceptor compact16_weighted_string compact64_acceptor compact64_string compact64_unweighted compact64_unweighted_acceptor compact64_weighted_string compact8_acceptor compact8_string compact8_unweighted compact8_unweighted_acceptor compact8_weighted_string compact_acceptor compact_string compact_unweighted compact_unweighted_acceptor compact_weighted_string const const16 const64 const8 edit ilabel_lookahead olabel_lookahead vector"
    

    if [[ ${cur} == -* ]] ; then
    COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
    return 0
    fi
}
complete -o default -o nospace -F _fstconvert fstconvert

_fstshortestdistance() 
{
    local cur prev opts filters len pprev
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    if (( $COMP_CWORD > 2)) ; then
      pprev="${COMP_WORDS[COMP_CWORD-2]}"
    else
      pprev="NULL"
    fi

    opts="--reverse --delta= --nstate= --queue_type= "

    _completeenumerable queue_type ${cur} ${prev} ${pprev} "auto fifo lifo shortest state top"
    

    if [[ ${cur} == -* ]] ; then
    COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
    return 0
    fi
}
complete -o default -o nospace -F _fstshortestdistance fstshortestdistance

_fstproject() 
{
    local cur prev opts filters len pprev
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    if (( $COMP_CWORD > 2)) ; then
      pprev="${COMP_WORDS[COMP_CWORD-2]}"
    else
      pprev="NULL"
    fi

    opts="--project_output "

    

    if [[ ${cur} == -* ]] ; then
    COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
    return 0
    fi
}
complete -o default -o nospace -F _fstproject fstproject

_fstdraw() 
{
    local cur prev opts filters len pprev
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    if (( $COMP_CWORD > 2)) ; then
      pprev="${COMP_WORDS[COMP_CWORD-2]}"
    else
      pprev="NULL"
    fi

    opts="--acceptor --isymbols= --osymbols= --ssymbols= --numeric --save_isymbols= --save_osymbols= --precision= --show_weight_one --title= --portrait --vertical --fontsize= --height= --width= --nodesep= --ranksep= --allow_negative_labels "

    

    if [[ ${cur} == -* ]] ; then
    COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
    return 0
    fi
}
complete -o default -o nospace -F _fstdraw fstdraw

_fstshortestpath() 
{
    local cur prev opts filters len pprev
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    if (( $COMP_CWORD > 2)) ; then
      pprev="${COMP_WORDS[COMP_CWORD-2]}"
    else
      pprev="NULL"
    fi

    opts="--delta= --nshortest= --unique --weight= --nstate= --queue_type= "

    _completeenumerable queue_type ${cur} ${prev} ${pprev} "auto fifo lifo shortest state top"
    

    if [[ ${cur} == -* ]] ; then
    COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
    return 0
    fi
}
complete -o default -o nospace -F _fstshortestpath fstshortestpath

_fstcompile() 
{
    local cur prev opts filters len pprev
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    if (( $COMP_CWORD > 2)) ; then
      pprev="${COMP_WORDS[COMP_CWORD-2]}"
    else
      pprev="NULL"
    fi

    opts="--acceptor --arc_type= --fst_type= --isymbols= --osymbols= --ssymbols= --keep_isymbols --keep_osymbols --keep_state_numbering --allow_negative_labels "

    _completeenumerable arc_type ${cur} ${prev} ${pprev} "log standard"
    _completeenumerable fst_type ${cur} ${prev} ${pprev} "arc_lookahead compact16_acceptor compact16_string compact16_unweighted compact16_unweighted_acceptor compact16_weighted_string compact64_acceptor compact64_string compact64_unweighted compact64_unweighted_acceptor compact64_weighted_string compact8_acceptor compact8_string compact8_unweighted compact8                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 