196 lines
5.2 KiB
Perl
Executable file
196 lines
5.2 KiB
Perl
Executable file
:
|
|
eval 'exec perl -wS $0 ${1+"$@"}'
|
|
if 0;
|
|
#*************************************************************************
|
|
#
|
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
#
|
|
# Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
#
|
|
# OpenOffice.org - a multi-platform office productivity suite
|
|
#
|
|
# This file is part of OpenOffice.org.
|
|
#
|
|
# OpenOffice.org is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU Lesser General Public License version 3
|
|
# only, as published by the Free Software Foundation.
|
|
#
|
|
# OpenOffice.org is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU Lesser General Public License version 3 for more details
|
|
# (a copy is included in the LICENSE file that accompanied this code).
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public License
|
|
# version 3 along with OpenOffice.org. If not, see
|
|
# <http://www.openoffice.org/license.html>
|
|
# for a copy of the LGPLv3 License.
|
|
#
|
|
#*************************************************************************
|
|
#
|
|
# pushids - push HID.LST and *.win files for userexperience feedback
|
|
#
|
|
|
|
use lib ("$ENV{SOLARENV}/bin/modules", "$ENV{COMMON_ENV_TOOLS}/modules");
|
|
|
|
use Carp;
|
|
|
|
sub parse_info($$);
|
|
|
|
if ( @ARGV != 3 )
|
|
{
|
|
print "usage: $ARGV[0] <path tp hid.lst> <path to *.win files> <output file>\n";
|
|
print "example: $ARGV[0] ./hid.lst global/win common/misc/UserFeedbackNames.csv\n\n";
|
|
die "invalid params";
|
|
}
|
|
|
|
my ($hid, $winpath, $outfile) = @ARGV;
|
|
|
|
my @names;
|
|
|
|
open HID, "<$hid" or die "can't open file $filename $! $^E";
|
|
for (<HID>) {
|
|
chop;
|
|
my ($longname, $ID) = split " +";
|
|
next if ( ! $ID );
|
|
$upperlongname = $longname;
|
|
$upperlongname =~ tr/a-z/A-Z/;
|
|
$undeclared_hids{$upperlongname} = $longname;
|
|
|
|
if ( exists $hids{$upperlongname} && ( $hids{$upperlongname} != $ID ) )
|
|
{
|
|
print STDERR "warn: unclear definition of longname: $longname = $hids{$upperlongname} or $ID\n";
|
|
}
|
|
$hids{$upperlongname} = $ID;
|
|
|
|
if ( exists $revhids{ $ID } && ( $revhids{ $ID } ne $upperlongname ) )
|
|
{
|
|
print STDERR "warn: two longnames have the same ID: $longname and $revhids{$ID} share ID $ID\n";
|
|
}
|
|
$revhids{$ID} = $upperlongname;
|
|
}
|
|
|
|
close HID;
|
|
|
|
undef @revhids;
|
|
|
|
#Add Active
|
|
$hids{"ACTIVE"} = 0;
|
|
|
|
my %dialogs = ();
|
|
|
|
foreach ( glob("$winpath/*win") ) {
|
|
$filename = $_;
|
|
open WIN, "< $filename" or die "can't open file $filename $! $^E";
|
|
my $parentinfo = "";
|
|
my @dialog = ();
|
|
my $parentshortname = "";
|
|
|
|
for ( <WIN> ) {
|
|
chop;
|
|
|
|
s/^ +//;
|
|
s/ +/ /g;
|
|
|
|
next if /^ *'/;
|
|
next if /^ *$/;
|
|
|
|
my $ID = "";
|
|
my $iteminfo;
|
|
my ($shortname, $longname) = split " +";
|
|
|
|
$shortname = "" if ( !$shortname );
|
|
$longname = "" if ( !$longname );
|
|
|
|
# fake a correct entry if only *active is given and overwrite the attempt to declare it differently
|
|
if ( $shortname =~ /\*active/i )
|
|
{
|
|
$longname = "Active";
|
|
}
|
|
|
|
|
|
# find UNO Names
|
|
if ( $longname =~ /^(.uno:|http|private:factory|service:|macro:|.HelpId:)/i || $longname =~ s/^sym://i )
|
|
{
|
|
$ID = $longname;
|
|
$longname = "";
|
|
}
|
|
else
|
|
{
|
|
my $upperlongname = $longname;
|
|
$upperlongname =~ tr/a-z/A-Z/;
|
|
if ( $shortname !~ /^[\+\*]/ && !exists $hids{$upperlongname} )
|
|
{
|
|
print STDERR "warn: Longname not in hid.lst: $filename $longname\n";
|
|
}
|
|
if ( exists $hids{$upperlongname} )
|
|
{
|
|
$ID = $hids{$upperlongname};
|
|
}
|
|
delete $undeclared_hids{$upperlongname};
|
|
}
|
|
|
|
$iteminfo = "$shortname $longname $ID";
|
|
# print "$iteminfo\n" if ( ! ( $shortname && $longname && $ID ));
|
|
$iteminfo =~ s/^\*//;
|
|
$iteminfo =~ s/^\+//;
|
|
|
|
# find start of deklaration
|
|
if ( $shortname =~ s/^\+// )
|
|
{
|
|
# copy existing dialog
|
|
if ( exists $dialogs{ $longname } )
|
|
{
|
|
my @old = @{$dialogs{ $longname }};
|
|
my ($oldshort, $oldlong, $oldID ) = split ( " ", shift @old );
|
|
$iteminfo = "$shortname $oldlong $oldID";
|
|
|
|
$parentinfo = $iteminfo;
|
|
$parentshortname = $shortname;
|
|
$dialogs{ $parentshortname } = \@dialog;
|
|
@dialog = (); # break the link
|
|
push ( @{$dialogs{ $parentshortname }}, $iteminfo );
|
|
push @names, " $parentinfo";
|
|
|
|
for ( @old )
|
|
{
|
|
push @names, "$parentinfo $_";
|
|
}
|
|
}
|
|
else
|
|
{ # fake new dialog instead
|
|
$shortname = "*".$shortname;
|
|
}
|
|
}
|
|
if ( $shortname =~ s/^\*// )
|
|
{
|
|
$parentinfo = $iteminfo;
|
|
$parentshortname = $shortname;
|
|
$dialogs{ $parentshortname } = \@dialog;
|
|
@dialog = (); # break the link
|
|
push ( @{$dialogs{ $parentshortname }}, $iteminfo );
|
|
push @names, " $parentinfo";
|
|
}
|
|
else
|
|
{
|
|
push ( @{$dialogs{ $parentshortname }}, $iteminfo );
|
|
push @names, "$parentinfo $iteminfo";
|
|
}
|
|
|
|
}
|
|
close WIN;
|
|
}
|
|
|
|
for ( keys %undeclared_hids ) {
|
|
$iteminfo = "$undeclared_hids{$_} $undeclared_hids{$_} $hids{$_}";
|
|
push @names, " $iteminfo";
|
|
}
|
|
|
|
#----------------------------------------------------------------------------
|
|
# write to files
|
|
|
|
open HIDS, ">$outfile" or die "can't open file $filename $! $^E";
|
|
print HIDS join "\n", @names;
|
|
print HIDS "\n";
|
|
close HIDS;
|
|
|