scripts/bash_completion.pl
author František Kučera <franta-hg@frantovo.cz>
Sun, 16 Aug 2015 01:40:44 +0200
branchv_0
changeset 221 e38910065d55
parent 220 0bc544b38cfa
child 222 5ffeb18b6f85
permissions -rwxr-xr-x
bash-completion: --formatter-property choices: first working version
     1 #!/usr/bin/perl
     2 
     3 # SQL-DK
     4 # Copyright © 2013 František Kučera (frantovo.cz)
     5 # 
     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.
    10 # 
    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.
    15 # 
    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/>.
    18 
    19 
    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
    25 
    26 # TODO: support database/formatter names with spaces
    27 
    28 use strict;
    29 use warnings;
    30 
    31 my $configDir = "~";
    32 
    33 while (<>) {
    34 	if (/"(.*?)".*? \/\/\s*bash-completion:dir/) {
    35 		$configDir .= "/$1";
    36 		last;
    37 	}
    38 }
    39 
    40 my $databasesFile  = "$configDir/bash-completion/databases";
    41 my $formattersFile = "$configDir/bash-completion/formatters";
    42 my $formatterPropertiesDir = "$configDir/bash-completion/formatter-properties";
    43 
    44 print '#have sql-dk &&
    45 _sql_dk_bash_completion_find_formatter() {
    46 	local previous
    47 	for token in "$@"; do
    48 		if [ "x$previous" == "x--formatter" ]; then
    49 			echo -n "$token";
    50 		fi
    51 		previous="$token";
    52 	done
    53 }
    54 
    55 _sql_dk_bash_completion_formatter_property() {
    56 	if [ -n "$formatter" ]; then # TODO: this does not match formatter name in apostrophes or quotes
    57 		local formatter_dir='.$formatterPropertiesDir.'/$formatter
    58 		if [ -d  $formatter_dir ]; then
    59 			ls -1 $formatter_dir;
    60 		fi
    61 	fi
    62 }
    63 
    64 _sql_dk_bash_completion_formatter_property_choice() {
    65 	local property="${COMP_WORDS[COMP_CWORD-1]}";
    66 	local formatter_dir='.$formatterPropertiesDir.'/$formatter
    67 	local property_choices_file=$formatter_dir/$property/choices;
    68 	if [ -f $property_choices_file ]; then
    69 		cat $property_choices_file;
    70 	fi
    71 }
    72 
    73 _sql_dk_bash_completion() {
    74 	local cur prev formatter
    75 
    76 	COMPREPLY=()
    77 	cur=${COMP_WORDS[COMP_CWORD]}
    78 	prev=${COMP_WORDS[COMP_CWORD-1]}
    79 
    80 	case "$prev" in
    81 	--db | --test-connection | --list-jdbc-properties)
    82 		if [ -f '.$databasesFile.' ]; then
    83 			COMPREPLY=( $( compgen -W " $( cat '.$databasesFile.' ) " -- $cur ) )
    84 			return 0
    85 		fi
    86 		;;
    87 	--formatter | --list-formatter-properties)
    88 		if [ -f '.$formattersFile.' ]; then
    89 			COMPREPLY=( $( compgen -W " $( cat '.$formattersFile.' ) " -- $cur ) )
    90 		else
    91 			COMPREPLY=( $( compgen -W "
    92 ';
    93 
    94 while (<>) {
    95 	if (/"(.*?)".*? \/\/\s*bash-completion:formatter/) {
    96 		print "				$1\n";
    97 	}
    98 	last if (/\/\/\s*bash-completion:options/);
    99 }
   100 
   101 
   102 print '				" -- $cur ) );
   103 		fi
   104 		return 0
   105 		;;
   106 	--formatter-property)
   107 		formatter=$( _sql_dk_bash_completion_find_formatter "${COMP_WORDS[@]}" );
   108 		COMPREPLY=( $( compgen -W "$(_sql_dk_bash_completion_formatter_property )" -- $cur ) ); 
   109 		return 0;
   110 		;;
   111 	esac;
   112 	
   113 	if [ "x${COMP_WORDS[COMP_CWORD-2]}" == "x--formatter-property" ]; then
   114 		formatter=$( _sql_dk_bash_completion_find_formatter "${COMP_WORDS[@]}" );
   115 		COMPREPLY=( $( compgen -W "$(_sql_dk_bash_completion_formatter_property_choice )" -- $cur ) ); 
   116 		return 0;
   117 	fi
   118 
   119 	COMPREPLY=( $( compgen -W "
   120 ';
   121 
   122 while (<>) {
   123 	if (/"(.*?)".*? \/\/\s*bash-completion:option/) {
   124 		print "			$1\n";
   125 	}
   126 }
   127 
   128 print '		" -- $cur ) )
   129 	return 0
   130 
   131 }
   132 
   133 complete -F _sql_dk_bash_completion sql-dk
   134 ';