summaryrefslogtreecommitdiff
path: root/bin/generate-bash-completion
diff options
context:
space:
mode:
authorJan Holesovsky <kendy@suse.cz>2011-07-28 18:33:58 +0200
committerJan Holesovsky <kendy@suse.cz>2011-07-28 18:33:58 +0200
commita95376174ec70c4a75569ce6dafacb0f696b21bc (patch)
treec1b813dddd1c32efb22913cc3b2f5813e6d901ff /bin/generate-bash-completion
parentedb451c490fe72ced8df20829c7fbc0da93e672c (diff)
parent6760b5695c4461126a34a84f64fd7114eff23143 (diff)
Merge commit 'libreoffice-3.4.2.3'
Conflicts: Makefile.in configure.in instsetoo_native/util/makefile.mk instsetoo_native/util/openoffice.lst ooo.lst.in set_soenv.in solenv/inc/minor.mk
Diffstat (limited to 'bin/generate-bash-completion')
-rwxr-xr-xbin/generate-bash-completion234
1 files changed, 234 insertions, 0 deletions
diff --git a/bin/generate-bash-completion b/bin/generate-bash-completion
new file mode 100755
index 000000000000..ed34b18081de
--- /dev/null
+++ b/bin/generate-bash-completion
@@ -0,0 +1,234 @@
+#!/usr/bin/env perl
+# script to generate LibreOffice bash_completion file for the main applications
+# written by Rene Engelhard <rene@debian.org>, Public Domain
+# updated for libreoffice-build by Petr Mladek <pmladek@suse.cz>, Public Domain
+# yes, this script probably is not real good code :) but still easier
+# to maintain than adding those entries statically many times in
+# a file...
+
+use strict;
+
+my @DRAWDOCS=("sxd", "std", "dxf", "emf", "eps", "met", "pct", "sgf", "sgv", "sda",
+ "sdd", "vor", "svm", "wmf", "bmp", "gif", "jpg", "jpeg", "jfif", "fif",
+ "jpe", "pcd", "pcx", "pgm", "png", "ppm", "psd", "ras", "tga", "tif",
+ "tiff", "xbm", "xpm", "odg", "otg", "fodg", "odc", "odi", "sds",
+ "wpg", "svg");
+
+my @IMPRESSDOCS=("sxi", "sti", "ppt", "pps", "pot", "sxd", "sda", "sdd", "sdp",
+ "vor", "cgm", "odp", "otp", "fodp", "ppsm", "ppsx", "pptm", "pptx",
+ "potm", "potx");
+
+my @TEMPLATES=("stw", "dot", "vor", "stc", "xlt", "sti", "pot", "std", "stw",
+ "dotm", "dotx", "potm", "potx", "xltm", "xltx");
+
+my @MATHDOCS=("sxm", "smf", "mml", "odf");
+
+my @MASTERDOCS=("sxg", "odm", "sgl");
+
+my @WRITERDOCS=("doc", "dot", "rtf", "sxw", "stw", "sdw", "vor", "txt", "htm?",
+ "xml", "wp", "wpd", "wps", "odt", "ott", "fodt", "docm", "docx",
+ "dotm", "dotx");
+
+my @WEBDOCS=("htm", "html", "stw", "txt", "vor", "oth");
+
+my @BASEDOCS=("odb");
+
+my @CALCDOCS=("sxc", "stc", "dif", "dbf", "xls", "xlw", "xlt", "rtf", "sdc", "vor",
+ "slk", "txt", "htm", "html", "wk1", "wks", "123", "xml", "ods", "ots",
+ "fods", "csv", "xlsb", "xlsm", "xlsx", "xltm", "xltx");
+
+my @EXTENSIONS=("oxt");
+
+# default names of lowrappers
+# use "" if you want to disable any wrapper
+my %APPS = (
+ office => "libreoffice",
+ master => "",
+ base => "lobase",
+ calc => "localc",
+ draw => "lodraw",
+ impress => "loimpress",
+ math => "lomath",
+ template => "lofromtemplate",
+ unopkg => "unopkg",
+ web => "loweb",
+ writer => "lowriter",
+);
+
+my $office_shell_function = "_loexp_";
+
+sub usage()
+{
+ print "Script to Generate bash completion for LO wrappers\n\n";
+
+ print "Usage: $0 --help\n";
+ print " $0 [--binsuffix=suffix]\n";
+ print "\t\t[--compat-oowrappers]\n";
+ print "\t\t[--office=wrapper_name]\n";
+ print "\t\t[--master=wrapper_name]\n";
+ print "\t\t[--base=wrapper_name]\n";
+ print "\t\t[--calc=wrapper_name]\n";
+ print "\t\t[--draw=wrapper_name]\n";
+ print "\t\t[--impress=wrapper_name]\n";
+ print "\t\t[--math=wrapper_name]\n";
+ print "\t\t[--template=wrapper_name]\n";
+ print "\t\t[--unopkg=wrapper_name]\n";
+ print "\t\t[--web=wrapper_name]\n";
+ print "\t\t[--writer=wrapper_name]\n";
+ print "\t\tinput_file\n";
+ print "\t\toutput_file\n\n";
+
+ print "Options:\n";
+ print "\t--help\t\tprint this help\n";
+ print "\t--binsuffix\tdefines a suffix that is added after each wrapper\n";
+ print "\t--compat-oowrappers\tset wrapper names to the old default oo* wrapper names\n";
+
+ print "The other options allows to redefine the wrapper names.\n";
+ print "The value \"\" can be used to disable any wrapper.\n\n";
+}
+
+my $infilename;
+my $outfilename;
+my $binsuffix = '';
+
+my $opt;
+foreach my $arg (@ARGV) {
+ if ( $arg =~ /--help/ ) {
+ usage();
+ exit 0;
+ } elsif ( $arg =~ /--compat-oowrappers/ ) {
+ $APPS{'office'} = "ooffice";
+ $APPS{'master'} = "";
+ $APPS{'base'} = "oobase";
+ $APPS{'calc'} = "oocalc";
+ $APPS{'draw'} = "oodraw";
+ $APPS{'impress'} = "ooimpress";
+ $APPS{'math'} = "oomath";
+ $APPS{'template'} = "oofromtemplate";
+ $APPS{'unopkg'} = "unopkg";
+ $APPS{'web'} = "ooweb";
+ $APPS{'writer'} = "oowriter";
+ $office_shell_function = "_ooexp_";
+ } elsif ( $arg =~ /--binsuffix=(.*)/ ) {
+ $binsuffix = "$1";
+ } elsif ( $arg =~ /--office=(.*)/ ) {
+ $APPS{'office'} = "$1";
+ } elsif ( $arg =~ /--master=(.*)/ ) {
+ $APPS{'master'} = "$1";
+ } elsif ( $arg =~ /--base=(.*)/ ) {
+ $APPS{'base'} = "$1";
+ } elsif ( $arg =~ /--calc=(.*)/ ) {
+ $APPS{'calc'} = "$1";
+ } elsif ( $arg =~ /--draw=(.*)/ ) {
+ $APPS{'draw'} = "$1";
+ } elsif ( $arg =~ /--impress=(.*)/ ) {
+ $APPS{'impress'} = "$1"
+ } elsif ( $arg =~ /--math=(.*)/ ) {
+ $APPS{'math'} = "$1";
+ } elsif ( $arg =~ /--template=(.*)/ ) {
+ $APPS{'template'} = "$1";
+ } elsif ( $arg =~ /--unopkg=(.*)/ ) {
+ $APPS{'unopkg'} = "$1";
+ } elsif ( $arg =~ /--web=(.*)/ ) {
+ $APPS{'web'} = "$1";
+ } elsif ( $arg =~ /--writer=(.*)/ ) {
+ $APPS{'writer'} = "$1"
+ } elsif ( $arg =~ /^-.*/ ) {
+ printf STDERR "Error: invalid option \"$arg\", try --help\n";
+ exit 1;
+ } elsif ( $outfilename ) {
+ printf STDERR "Error: too much arguments, try --help\n";
+ exit 1;
+ } else {
+ if ($infilename) {
+ $outfilename = "$arg";
+ } else {
+ $infilename = "$arg";
+ }
+ }
+}
+
+unless ( $infilename ) {
+ printf STDERR "Error: undefined input file, try --help\n";
+ exit 1;
+}
+
+unless ( $outfilename ) {
+ printf STDERR "Error: undefined output file, try --help\n";
+ exit 1;
+}
+
+#add binsuffix
+foreach my $app (keys %APPS) {
+ $APPS{$app} .= "$binsuffix" unless ( "$APPS{$app}" eq "" );
+}
+
+sub print_suffixes_check {
+ my $app = shift(@_);
+ my $first_suffix = shift(@_);
+
+ ($first_suffix) || die "Error: No suffix defined for $app\n";
+
+ print BCOUTFILE " $app)\t\te=\'!*.+(" . $first_suffix . "|" . uc($first_suffix);
+ foreach my $suffix (@_) {
+ print BCOUTFILE "|" . $suffix;
+ print BCOUTFILE "|" . uc($suffix);
+ }
+ print BCOUTFILE ")\' ;;\n";
+}
+
+sub print_suffixes_checks {
+ foreach my $app (keys %APPS) {
+ # skip the disabled wrapper
+ next if ( $APPS{$app} eq "" );
+
+ if ($app eq "draw" ) { print_suffixes_check ($APPS{$app}, @DRAWDOCS); }
+ if ($app eq "writer") { print_suffixes_check ($APPS{$app}, @WRITERDOCS, @MASTERDOCS); }
+ if ($app eq "web") { print_suffixes_check ($APPS{$app}, @WEBDOCS); }
+ if ($app eq "math") { print_suffixes_check ($APPS{$app}, @MATHDOCS); }
+ if ($app eq "impress") { print_suffixes_check ($APPS{$app}, @IMPRESSDOCS); }
+ if ($app eq "base") { print_suffixes_check ($APPS{$app}, @BASEDOCS); }
+ if ($app eq "calc") { print_suffixes_check ($APPS{$app}, @CALCDOCS); }
+ if ($app eq "master") { print_suffixes_check ($APPS{$app}, @MASTERDOCS); }
+ if ($app eq "template") { print_suffixes_check ($APPS{$app}, @TEMPLATES); }
+ # libreoffice should contain all...
+ if ($app eq "office") { print_suffixes_check ($APPS{$app}, @DRAWDOCS, @WRITERDOCS, @MATHDOCS, @IMPRESSDOCS, @BASEDOCS, @CALCDOCS, @MASTERDOCS, @TEMPLATES, @WEBDOCS); }
+ # unopkg is a standalone tool
+ if ($app eq "unopkg") { print_suffixes_check ($APPS{$app}, @EXTENSIONS); }
+ }
+}
+
+sub print_apps {
+ my $app_to_print;
+ foreach my $app (keys %APPS) {
+ # skip the disabled wrapper
+ next if ( $APPS{$app} eq "" );
+
+ print BCOUTFILE "\t\t\t\t\t$app_to_print \\\n" if ($app_to_print);
+ $app_to_print = $APPS{$app};
+ }
+ # the last app will be printed without the final backslash
+ ($app_to_print) || die "Error: No LO wrapper was selected\n";
+ print BCOUTFILE "\t\t\t\t\t$app_to_print\n";
+}
+
+
+open (BCINFILE, "$infilename") || die "Error: can't open $infilename for reading: $!\n";
+open (BCOUTFILE, "> $outfilename") || die "Error: can't open $outfilename for writing: $!\n";
+
+while (my $line = <BCINFILE>) {
+ chomp $line;
+
+ $line =~ s/\@OFFICE_SHELL_FUNCTION\@/$office_shell_function/;
+
+ if ($line =~ m/\@BASH_COMPLETION_SUFFIXES_CHECKS\@/) {
+ print_suffixes_checks();
+ } elsif ($line =~ m/\@BASH_COMPLETION_OOO_APPS\@/) {
+ print_apps();
+ } else {
+ print BCOUTFILE "$line\n";
+ }
+}
+
+close (BCINFILE);
+close (BCOUTFILE);