#!/usr/bin/env perl # script to generate LibreOffice bash_completion file for the main applications # written by Rene Engelhard , Public Domain # updated for libreoffice-build by Petr Mladek , 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", office_short => "loffice", 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[--office-short=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'} = "openoffice"; $APPS{'office_short'} = "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 =~ /--office-short=(.*)/ ) { $APPS{'office_short'} = "$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") || ($app eq "office_short")) { 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 = ) { 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);