blob: 94dd57b39ee0d9c195e7a99be7c70c0900b8293f [file] [log] [blame]
:
eval 'exec perl -wS $0 ${1+"$@"}'
if 0;
#**************************************************************
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the 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 "errror: 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 "errror: 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;