| #!/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); |