1cdf0e10cSrcweir:
2cdf0e10cSrcweireval 'exec perl -wS $0 ${1+"$@"}'
3cdf0e10cSrcweir    if 0;
4*7e90fac2SAndrew Rist#**************************************************************
5*7e90fac2SAndrew Rist#
6*7e90fac2SAndrew Rist#  Licensed to the Apache Software Foundation (ASF) under one
7*7e90fac2SAndrew Rist#  or more contributor license agreements.  See the NOTICE file
8*7e90fac2SAndrew Rist#  distributed with this work for additional information
9*7e90fac2SAndrew Rist#  regarding copyright ownership.  The ASF licenses this file
10*7e90fac2SAndrew Rist#  to you under the Apache License, Version 2.0 (the
11*7e90fac2SAndrew Rist#  "License"); you may not use this file except in compliance
12*7e90fac2SAndrew Rist#  with the License.  You may obtain a copy of the License at
13*7e90fac2SAndrew Rist#
14*7e90fac2SAndrew Rist#    http://www.apache.org/licenses/LICENSE-2.0
15*7e90fac2SAndrew Rist#
16*7e90fac2SAndrew Rist#  Unless required by applicable law or agreed to in writing,
17*7e90fac2SAndrew Rist#  software distributed under the License is distributed on an
18*7e90fac2SAndrew Rist#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
19*7e90fac2SAndrew Rist#  KIND, either express or implied.  See the License for the
20*7e90fac2SAndrew Rist#  specific language governing permissions and limitations
21*7e90fac2SAndrew Rist#  under the License.
22*7e90fac2SAndrew Rist#
23*7e90fac2SAndrew Rist#**************************************************************
24*7e90fac2SAndrew Rist
25*7e90fac2SAndrew Rist
26cdf0e10cSrcweir#
27cdf0e10cSrcweir# pushids - push HID.LST and *.win files for userexperience feedback
28cdf0e10cSrcweir#
29cdf0e10cSrcweir
30cdf0e10cSrcweiruse lib ("$ENV{SOLARENV}/bin/modules", "$ENV{COMMON_ENV_TOOLS}/modules");
31cdf0e10cSrcweir
32cdf0e10cSrcweiruse Carp;
33cdf0e10cSrcweir
34cdf0e10cSrcweirsub parse_info($$);
35cdf0e10cSrcweir
36cdf0e10cSrcweirif ( @ARGV != 3 )
37cdf0e10cSrcweir{
38cdf0e10cSrcweir  print "usage:   $ARGV[0] <path tp hid.lst> <path to *.win files> <output file>\n";
39cdf0e10cSrcweir  print "example: $ARGV[0] ./hid.lst global/win common/misc/UserFeedbackNames.csv\n\n";
40cdf0e10cSrcweir  die "invalid params";
41cdf0e10cSrcweir}
42cdf0e10cSrcweir
43cdf0e10cSrcweirmy ($hid, $winpath, $outfile) = @ARGV;
44cdf0e10cSrcweir
45cdf0e10cSrcweirmy @names;
46cdf0e10cSrcweir
47cdf0e10cSrcweiropen HID, "<$hid" or die "can't open file $filename $! $^E";
48cdf0e10cSrcweirfor (<HID>) {
49cdf0e10cSrcweir  chop;
50cdf0e10cSrcweir  my ($longname, $ID) = split " +";
51cdf0e10cSrcweir  next if ( ! $ID );
52cdf0e10cSrcweir  $upperlongname = $longname;
53cdf0e10cSrcweir  $upperlongname =~ tr/a-z/A-Z/;
54cdf0e10cSrcweir  $undeclared_hids{$upperlongname} = $longname;
55cdf0e10cSrcweir
56cdf0e10cSrcweir  if ( exists $hids{$upperlongname} && ( $hids{$upperlongname} != $ID ) )
57cdf0e10cSrcweir  {
58cdf0e10cSrcweir    print STDERR "errror: unclear definition of longname: $longname = $hids{$upperlongname} or $ID\n";
59cdf0e10cSrcweir  }
60cdf0e10cSrcweir  $hids{$upperlongname} = $ID;
61cdf0e10cSrcweir
62cdf0e10cSrcweir  if ( exists $revhids{ $ID } && ( $revhids{ $ID } ne $upperlongname ) )
63cdf0e10cSrcweir  {
64cdf0e10cSrcweir    print STDERR "warn: two longnames have the same ID: $longname and $revhids{$ID} share ID $ID\n";
65cdf0e10cSrcweir  }
66cdf0e10cSrcweir  $revhids{$ID} = $upperlongname;
67cdf0e10cSrcweir}
68cdf0e10cSrcweir
69cdf0e10cSrcweirclose HID;
70cdf0e10cSrcweir
71cdf0e10cSrcweirundef @revhids;
72cdf0e10cSrcweir
73cdf0e10cSrcweir#Add Active
74cdf0e10cSrcweir$hids{"ACTIVE"} = 0;
75cdf0e10cSrcweir
76cdf0e10cSrcweirmy %dialogs = ();
77cdf0e10cSrcweir
78cdf0e10cSrcweirforeach ( glob("$winpath/*win") ) {
79cdf0e10cSrcweir  $filename = $_;
80cdf0e10cSrcweir  open WIN, "< $filename" or die "can't open file $filename $! $^E";
81cdf0e10cSrcweir  my $parentinfo = "";
82cdf0e10cSrcweir  my @dialog = ();
83cdf0e10cSrcweir  my $parentshortname = "";
84cdf0e10cSrcweir
85cdf0e10cSrcweir  for ( <WIN> ) {
86cdf0e10cSrcweir    chop;
87cdf0e10cSrcweir
88cdf0e10cSrcweir	s/^ +//;
89cdf0e10cSrcweir	s/ +/ /g;
90cdf0e10cSrcweir
91cdf0e10cSrcweir    next if /^ *'/;
92cdf0e10cSrcweir    next if /^ *$/;
93cdf0e10cSrcweir
94cdf0e10cSrcweir    my $ID = "";
95cdf0e10cSrcweir    my $iteminfo;
96cdf0e10cSrcweir    my ($shortname, $longname) = split " +";
97cdf0e10cSrcweir
98cdf0e10cSrcweir    $shortname = "" if ( !$shortname );
99cdf0e10cSrcweir    $longname = "" if ( !$longname );
100cdf0e10cSrcweir
101cdf0e10cSrcweir    # fake a correct entry if only *active is given and overwrite the attempt to declare it differently
102cdf0e10cSrcweir    if ( $shortname =~ /\*active/i )
103cdf0e10cSrcweir    {
104cdf0e10cSrcweir      $longname = "Active";
105cdf0e10cSrcweir    }
106cdf0e10cSrcweir
107cdf0e10cSrcweir
108cdf0e10cSrcweir# find UNO Names
109cdf0e10cSrcweir    if ( $longname =~ /^(.uno:|http|private:factory|service:|macro:|.HelpId:)/i || $longname =~ s/^sym://i )
110cdf0e10cSrcweir    {
111cdf0e10cSrcweir      $ID = $longname;
112cdf0e10cSrcweir      $longname = "";
113cdf0e10cSrcweir    }
114cdf0e10cSrcweir    else
115cdf0e10cSrcweir    {
116cdf0e10cSrcweir      my $upperlongname = $longname;
117cdf0e10cSrcweir      $upperlongname =~ tr/a-z/A-Z/;
118cdf0e10cSrcweir      if ( $shortname !~ /^[\+\*]/ && !exists $hids{$upperlongname} )
119cdf0e10cSrcweir      {
120cdf0e10cSrcweir        print STDERR "errror: Longname not in hid.lst: $filename $longname\n";
121cdf0e10cSrcweir      }
122cdf0e10cSrcweir      if ( exists $hids{$upperlongname} )
123cdf0e10cSrcweir      {
124cdf0e10cSrcweir          $ID = $hids{$upperlongname};
125cdf0e10cSrcweir      }
126cdf0e10cSrcweir      delete $undeclared_hids{$upperlongname};
127cdf0e10cSrcweir    }
128cdf0e10cSrcweir
129cdf0e10cSrcweir    $iteminfo = "$shortname $longname $ID";
130cdf0e10cSrcweir#    print "$iteminfo\n" if ( ! ( $shortname && $longname && $ID ));
131cdf0e10cSrcweir    $iteminfo =~ s/^\*//;
132cdf0e10cSrcweir    $iteminfo =~ s/^\+//;
133cdf0e10cSrcweir
134cdf0e10cSrcweir# find start of deklaration
135cdf0e10cSrcweir    if ( $shortname =~ s/^\+// )
136cdf0e10cSrcweir    {
137cdf0e10cSrcweir      # copy existing dialog
138cdf0e10cSrcweir      if ( exists $dialogs{ $longname } )
139cdf0e10cSrcweir      {
140cdf0e10cSrcweir        my @old = @{$dialogs{ $longname }};
141cdf0e10cSrcweir        my ($oldshort, $oldlong, $oldID ) = split ( " ", shift @old );
142cdf0e10cSrcweir        $iteminfo = "$shortname $oldlong $oldID";
143cdf0e10cSrcweir
144cdf0e10cSrcweir        $parentinfo = $iteminfo;
145cdf0e10cSrcweir        $parentshortname = $shortname;
146cdf0e10cSrcweir        $dialogs{ $parentshortname } = \@dialog;
147cdf0e10cSrcweir        @dialog = ();        # break the link
148cdf0e10cSrcweir        push ( @{$dialogs{ $parentshortname }}, $iteminfo );
149cdf0e10cSrcweir        push @names, "   $parentinfo";
150cdf0e10cSrcweir
151cdf0e10cSrcweir        for ( @old )
152cdf0e10cSrcweir        {
153cdf0e10cSrcweir          push @names, "$parentinfo $_";
154cdf0e10cSrcweir        }
155cdf0e10cSrcweir      }
156cdf0e10cSrcweir      else
157cdf0e10cSrcweir      {  # fake new dialog instead
158cdf0e10cSrcweir        $shortname = "*".$shortname;
159cdf0e10cSrcweir      }
160cdf0e10cSrcweir    }
161cdf0e10cSrcweir    if ( $shortname =~ s/^\*// )
162cdf0e10cSrcweir    {
163cdf0e10cSrcweir      $parentinfo = $iteminfo;
164cdf0e10cSrcweir      $parentshortname = $shortname;
165cdf0e10cSrcweir      $dialogs{ $parentshortname } = \@dialog;
166cdf0e10cSrcweir      @dialog = ();        # break the link
167cdf0e10cSrcweir      push ( @{$dialogs{ $parentshortname }}, $iteminfo );
168cdf0e10cSrcweir      push @names, "   $parentinfo";
169cdf0e10cSrcweir    }
170cdf0e10cSrcweir    else
171cdf0e10cSrcweir    {
172cdf0e10cSrcweir      push ( @{$dialogs{ $parentshortname }}, $iteminfo );
173cdf0e10cSrcweir      push @names, "$parentinfo $iteminfo";
174cdf0e10cSrcweir    }
175cdf0e10cSrcweir
176cdf0e10cSrcweir  }
177cdf0e10cSrcweir  close WIN;
178cdf0e10cSrcweir}
179cdf0e10cSrcweir
180cdf0e10cSrcweirfor ( keys %undeclared_hids ) {
181cdf0e10cSrcweir  $iteminfo = "$undeclared_hids{$_} $undeclared_hids{$_} $hids{$_}";
182cdf0e10cSrcweir  push @names, "   $iteminfo";
183cdf0e10cSrcweir}
184cdf0e10cSrcweir
185cdf0e10cSrcweir#----------------------------------------------------------------------------
186cdf0e10cSrcweir# write to files
187cdf0e10cSrcweir
188cdf0e10cSrcweiropen HIDS, ">$outfile" or die "can't open file $filename $! $^E";
189cdf0e10cSrcweirprint HIDS join "\n", @names;
190cdf0e10cSrcweirprint HIDS "\n";
191cdf0e10cSrcweirclose HIDS;
192cdf0e10cSrcweir
193