4 # Copyright © 2013 František Kučera (frantovo.cz)
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
20 # Parses Java source code from STDIN and generates script for BASH completion
21 # Input (in this order):
22 # info/globalcode/sql/dk/Constants.java
23 # info/globalcode/sql/dk/formatting/*
24 # info/globalcode/sql/dk/CLIParser.java
26 # TODO: support database/formatter names with spaces
34 if (/"(.*?)".*? \/\/\s*bash-completion:dir/) {
40 my $databasesFile = "$configDir/bash-completion/databases";
41 my $formattersFile = "$configDir/bash-completion/formatters";
42 my $defaultFormatterFile = "$configDir/bash-completion/default-formatter";
43 my $formatterPropertiesDir = "$configDir/bash-completion/formatter-properties";
45 print '#have sql-dk &&
46 _sql_dk_bash_completion_find_formatter() {
49 if [ "x$previous" == "x--formatter" ]; then
56 if [ -f '.$defaultFormatterFile.' ]; then
57 cat '.$defaultFormatterFile.'
61 _sql_dk_bash_completion_formatter_property_name() {
62 if [ -n "$formatter" ]; then # TODO: this does not match formatter name in apostrophes or quotes
63 local formatter_dir='.$formatterPropertiesDir.'/$formatter
64 if [ -d $formatter_dir ]; then
70 _sql_dk_bash_completion_formatter_property_choice() {
71 local property="${COMP_WORDS[COMP_CWORD-1]}";
72 local formatter_dir='.$formatterPropertiesDir.'/$formatter
73 local property_choices_file=$formatter_dir/$property/choices;
74 if [ -f $property_choices_file ]; then
75 cat $property_choices_file;
79 _sql_dk_bash_completion() {
80 local cur prev formatter
83 cur=${COMP_WORDS[COMP_CWORD]}
84 prev=${COMP_WORDS[COMP_CWORD-1]}
87 --db | --test-connection | --list-jdbc-properties)
88 if [ -f '.$databasesFile.' ]; then
89 COMPREPLY=( $( compgen -W " $( cat '.$databasesFile.' ) " -- $cur ) )
93 --formatter | --list-formatter-properties)
94 if [ -f '.$formattersFile.' ]; then
95 COMPREPLY=( $( compgen -W " $( cat '.$formattersFile.' ) " -- $cur ) )
97 COMPREPLY=( $( compgen -W "
101 if (/"(.*?)".*? \/\/\s*bash-completion:formatter/) {
104 last if (/\/\/\s*bash-completion:options/);
108 print ' " -- $cur ) );
112 --formatter-property)
113 formatter=$( _sql_dk_bash_completion_find_formatter "${COMP_WORDS[@]}" );
114 COMPREPLY=( $( compgen -W "$(_sql_dk_bash_completion_formatter_property_name )" -- $cur ) );
119 if [ "x${COMP_WORDS[COMP_CWORD-2]}" == "x--formatter-property" ]; then
120 formatter=$( _sql_dk_bash_completion_find_formatter "${COMP_WORDS[@]}" );
121 COMPREPLY=( $( compgen -W "$(_sql_dk_bash_completion_formatter_property_choice )" -- $cur ) );
125 COMPREPLY=( $( compgen -W "
129 if (/"(.*?)".*? \/\/\s*bash-completion:option/) {
134 print ' " -- $cur ) )
139 complete -F _sql_dk_bash_completion sql-dk