bash completion: perl + bash + ant for generating completion script v_0
authorFrantišek Kučera <franta-hg@frantovo.cz>
Fri, 27 Dec 2013 17:51:05 +0100
branchv_0
changeset 81 847c83288d01
parent 80 c4635ab3a7af
child 82 adea6d8d3708
bash completion: perl + bash + ant for generating completion script
java/sql-dk/bash-completion.sh
java/sql-dk/build.xml
scripts/bash_completion.pl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/java/sql-dk/bash-completion.sh	Fri Dec 27 17:51:05 2013 +0100
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+cat \
+	src/info/globalcode/sql/dk/Constants.java \
+	src/info/globalcode/sql/dk/formatting/* \
+	src/info/globalcode/sql/dk/CLIParser.java \
+	| ../../scripts/bash_completion.pl
+
--- a/java/sql-dk/build.xml	Fri Dec 27 17:40:27 2013 +0100
+++ b/java/sql-dk/build.xml	Fri Dec 27 17:51:05 2013 +0100
@@ -76,4 +76,8 @@
 		<exec executable="./version-info.sh" output="data/info/globalcode/sql/dk/version.txt"/>
 	</target>
 	
+	<target name="-post-jar">
+		<exec executable="./bash-completion.sh" output="dist/bash-completion.sh"/>
+	</target>
+	
 </project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/bash_completion.pl	Fri Dec 27 17:51:05 2013 +0100
@@ -0,0 +1,68 @@
+#!/usr/bin/perl
+
+# Parses Java source code from STDIN and generates script for BASH completion
+# Input (in this order):
+#	info/globalcode/sql/dk/Constants.java
+#	info/globalcode/sql/dk/formatting/*
+#	info/globalcode/sql/dk/CLIParser.java
+
+use strict;
+use warnings;
+
+my $configDir = "~";
+
+while (<>) {
+	if (/"(.*?)".*? \/\/\s*bash-completion:dir/) {
+		$configDir .= "/$1";
+		last;
+	}
+}
+
+print 'have sql-dk &&
+_sql_dk()
+{
+	local cur prev
+
+	COMPREPLY=()
+	cur=${COMP_WORDS[COMP_CWORD]}
+	prev=${COMP_WORDS[COMP_CWORD-1]}
+
+	case "$prev" in
+	--db)
+		COMPREPLY=( $( echo "TODO_DATABASE_NAMES" ) );
+		# ' . $configDir .'
+		return 0
+		;;
+	--formatter)
+		COMPREPLY=( $( compgen -W "
+';
+
+while (<>) {
+	if (/"(.*?)".*? \/\/\s*bash-completion:formatter/) {
+		print "			$1\n";
+	}
+	last if (/\/\/\s*bash-completion:options/);
+}
+
+
+print '			" -- $cur ) );
+		return 0
+		;;
+	esac;
+
+	COMPREPLY=( $( compgen -W "
+';
+
+while (<>) {
+	if (/"(.*?)".*? \/\/\s*bash-completion:option/) {
+		print "			$1\n";
+	}
+}
+
+print '		" -- $cur ) )
+	return 0
+
+}
+
+complete -F _sql_dk sql-dk
+';