Kaydet (Commit) 344a5dbc authored tarafından Arkadiy Illarionov's avatar Arkadiy Illarionov Kaydeden (comit) Samuel Mehrbrodt

Ported bin/generate-bash-completion from Perl to Python

Change-Id: Ie1b5cd0a1f64198f8e6362a02484055c5ae6b26e
Reviewed-on: https://gerrit.libreoffice.org/39077Reviewed-by: 's avatarSamuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
Tested-by: 's avatarSamuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
üst c937c682
......@@ -178,10 +178,10 @@ test -f $DESTDIR/gid_Module_Root_Brand && echo "$PREFIXDIR/bin/soffice" >>$DESTD
# create bash completion
mkdir -p $DESTDIR/usr/share/bash-completion/completions
"${SRCDIR?}"/bin/generate-bash-completion bin/bash-completion.in $DESTDIR/usr/share/bash-completion/completions/$INSTALLDIRNAME.sh
"${SRCDIR?}"/bin/generate-bash-completion.py bin/bash-completion.in $DESTDIR/usr/share/bash-completion/completions/$INSTALLDIRNAME.sh
test -f $DESTDIR/gid_Module_Root_Brand && echo "/usr/share/bash-completion/completions/$INSTALLDIRNAME.sh" >>$DESTDIR/gid_Module_Root_Brand
if test "$WITH_COMPAT_OOWRAPPERS" = "TRUE" ; then
"${SRCDIR?}"/bin/generate-bash-completion --compat-oowrappers bin/bash-completion.in $DESTDIR/usr/share/bash-completion/completions/ooffice.sh
"${SRCDIR?}"/bin/generate-bash-completion.py --compat-oowrappers bin/bash-completion.in $DESTDIR/usr/share/bash-completion/completions/ooffice.sh
test -f $DESTDIR/gid_Module_Root_Brand && echo "/usr/share/bash-completion/completions/ooffice.sh" >>$DESTDIR/gid_Module_Root_Brand
fi
......
#!/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", "vdx", "vsd", "vsdm", "vsdx");
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 = <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);
#!/usr/bin/env python3
# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*-
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
"""
Script to generate LibreOffice bash_completion file for the main applications
"""
import argparse
import sys
MASTERDOCS = ["sxg", "odm", "sgl"]
BASEDOCS = ["odb"]
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"]
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", "vdx", "vsd", "vsdm", "vsdx"]
IMPRESSDOCS = ["sxi", "sti", "ppt", "pps", "pot", "sxd", "sda", "sdd", "sdp",
"vor", "cgm", "odp", "otp", "fodp", "ppsm", "ppsx", "pptm", "pptx",
"potm", "potx"]
MATHDOCS = ["sxm", "smf", "mml", "odf"]
WEBDOCS = ["htm", "html", "stw", "txt", "vor", "oth"]
WRITERDOCS = ["doc", "dot", "rtf", "sxw", "stw", "sdw", "vor", "txt", "htm?",
"xml", "wp", "wpd", "wps", "odt", "ott", "fodt", "docm", "docx",
"dotm", "dotx"]
TEMPLATES = ["stw", "dot", "vor", "stc", "xlt", "sti", "pot", "std", "stw",
"dotm", "dotx", "potm", "potx", "xltm", "xltx"]
ALLDOCS = MASTERDOCS + BASEDOCS + CALCDOCS + DRAWDOCS + IMPRESSDOCS + MATHDOCS + WEBDOCS + WRITERDOCS + TEMPLATES
EXTENSIONS = ["oxt"]
class App(object):
def __init__(self, name, compat_name, suffix_list):
self.name = name
self.compat_name = compat_name
self.suffix_list = suffix_list
class SetAppCompatName(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
setattr(namespace, self.dest, True)
for app in APPS.values():
app.name = app.compat_name
class SetAppName(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
APPS[self.dest].name = values
# default names of lowrappers
# use "" for name if you want to disable any wrapper
APPS = {
'office': App("libreoffice", 'openoffice', ALLDOCS), # libreoffice should contain all
'office_short': App("loffice", 'ooffice', ALLDOCS), # libreoffice should contain all
'master': App("", '', MASTERDOCS),
'base': App("lobase", 'oobase', BASEDOCS),
'calc': App("localc", 'oocalc', CALCDOCS),
'draw': App("lodraw", 'oodraw', DRAWDOCS),
'impress': App("loimpress", 'ooimpress', IMPRESSDOCS),
'math': App("lomath", 'oomath', MATHDOCS),
'template': App("lofromtemplate", 'oofromtemplate', TEMPLATES),
'unopkg': App("unopkg", 'unopkg', EXTENSIONS), # unopkg is a standalone tool
'web': App("loweb", 'ooweb', WEBDOCS),
'writer': App("lowriter", 'oowriter', WRITERDOCS + MASTERDOCS)
}
def check_open(filename, mode):
try:
with open(filename, mode):
pass
except OSError as e:
mode = 'reading' if mode == 'r' else 'writing'
sys.exit("Error: can't open %s for %s: %s" % (filename, mode, e))
def print_app_suffixes_check(out, app):
if not app.suffix_list:
sys.exit('Error: No suffix defined for %s' % app.name)
suffix_str = '|'.join(['%s|%s' % (s, s.upper()) for s in app.suffix_list])
out.write(" %s)\t\te=\'!*.+(%s)\' ;;\n" % (app.name, suffix_str))
def print_suffixes_check(out):
for app in APPS.values():
if not app.name: # skip the disabled wrapper
continue
print_app_suffixes_check(out, app)
def main():
parser = argparse.ArgumentParser(description='Script to Generate bash completion for LO wrappers',
epilog='The other options allows to redefine the wrapper names.\n'
'The value "" can be used to disable any wrapper.',
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument('input_file')
parser.add_argument('output_file')
parser.add_argument('--binsuffix', metavar='suffix',
help='defines a suffix that is added after each wrapper')
parser.add_argument('--compat-oowrappers', metavar='', nargs=0, action=SetAppCompatName, default=False,
help='set wrapper names to the old default oo* wrapper names')
for app in APPS:
parser.add_argument('--%s' % app, metavar='wrapper_name', action=SetAppName)
args = parser.parse_args()
check_open(args.input_file, 'r')
check_open(args.output_file, 'w')
# add binsuffix
if args.binsuffix:
for app in APPS.values():
if app.name:
app.name += args.binsuffix
if args.compat_oowrappers:
office_shell_function = '_ooexp_'
else:
office_shell_function = '_loexp_'
# the last app will be printed without the final backslash
apps_to_print = ' \\\n'.join(['\t\t\t\t\t%s' % app.name for app in APPS.values() if app.name])
with open(args.input_file, 'r') as in_fh, open(args.output_file, 'w') as out_fh:
for line in in_fh:
line = line.replace('@OFFICE_SHELL_FUNCTION@', office_shell_function)
if '@BASH_COMPLETION_SUFFIXES_CHECKS@' in line:
print_suffixes_check(out_fh)
elif '@BASH_COMPLETION_OOO_APPS@' in line:
if not apps_to_print:
sys.exit('Error: No LO wrapper was selected')
out_fh.write('%s\n' % apps_to_print)
else:
out_fh.write(line)
if __name__ == '__main__':
main()
# vim: set shiftwidth=4 softtabstop=4 expandtab:
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment