1*b1cdbd2cSJim Jagielski:
2*b1cdbd2cSJim Jagielskieval 'exec perl -wS $0 ${1+"$@"}'
3*b1cdbd2cSJim Jagielski    if 0;
4*b1cdbd2cSJim Jagielski
5*b1cdbd2cSJim Jagielski
6*b1cdbd2cSJim Jagielski#**************************************************************
7*b1cdbd2cSJim Jagielski#
8*b1cdbd2cSJim Jagielski#  Licensed to the Apache Software Foundation (ASF) under one
9*b1cdbd2cSJim Jagielski#  or more contributor license agreements.  See the NOTICE file
10*b1cdbd2cSJim Jagielski#  distributed with this work for additional information
11*b1cdbd2cSJim Jagielski#  regarding copyright ownership.  The ASF licenses this file
12*b1cdbd2cSJim Jagielski#  to you under the Apache License, Version 2.0 (the
13*b1cdbd2cSJim Jagielski#  "License"); you may not use this file except in compliance
14*b1cdbd2cSJim Jagielski#  with the License.  You may obtain a copy of the License at
15*b1cdbd2cSJim Jagielski#
16*b1cdbd2cSJim Jagielski#    http://www.apache.org/licenses/LICENSE-2.0
17*b1cdbd2cSJim Jagielski#
18*b1cdbd2cSJim Jagielski#  Unless required by applicable law or agreed to in writing,
19*b1cdbd2cSJim Jagielski#  software distributed under the License is distributed on an
20*b1cdbd2cSJim Jagielski#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21*b1cdbd2cSJim Jagielski#  KIND, either express or implied.  See the License for the
22*b1cdbd2cSJim Jagielski#  specific language governing permissions and limitations
23*b1cdbd2cSJim Jagielski#  under the License.
24*b1cdbd2cSJim Jagielski#
25*b1cdbd2cSJim Jagielski#**************************************************************
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski
28*b1cdbd2cSJim Jagielski
29*b1cdbd2cSJim Jagielskiuse strict;
30*b1cdbd2cSJim Jagielskiuse Getopt::Long;
31*b1cdbd2cSJim Jagielskiuse IO::Handle;
32*b1cdbd2cSJim Jagielskiuse File::Find;
33*b1cdbd2cSJim Jagielskiuse File::Temp;
34*b1cdbd2cSJim Jagielskiuse File::Copy;
35*b1cdbd2cSJim Jagielskiuse File::Glob qw(:glob csh_glob);
36*b1cdbd2cSJim Jagielskiuse Cwd;
37*b1cdbd2cSJim Jagielski
38*b1cdbd2cSJim Jagielski# ver 1.1
39*b1cdbd2cSJim Jagielski#
40*b1cdbd2cSJim Jagielski#### module lookup
41*b1cdbd2cSJim Jagielski#use lib ("$ENV{SOLARENV}/bin/modules", "$ENV{COMMON_ENV_TOOLS}/modules");
42*b1cdbd2cSJim Jagielski
43*b1cdbd2cSJim Jagielski#### module lookup
44*b1cdbd2cSJim Jagielski# OOo conform
45*b1cdbd2cSJim Jagielskimy @lib_dirs;
46*b1cdbd2cSJim JagielskiBEGIN {
47*b1cdbd2cSJim Jagielski    if ( !defined($ENV{SOLARENV}) ) {
48*b1cdbd2cSJim Jagielski        die "No environment found (environment variable SOLARENV is undefined)";
49*b1cdbd2cSJim Jagielski    }
50*b1cdbd2cSJim Jagielski    push(@lib_dirs, "$ENV{SOLARENV}/bin/modules");
51*b1cdbd2cSJim Jagielski    push(@lib_dirs, "$ENV{COMMON_ENV_TOOLS}/modules") if defined($ENV{COMMON_ENV_TOOLS});
52*b1cdbd2cSJim Jagielski}
53*b1cdbd2cSJim Jagielskiuse lib (@lib_dirs);
54*b1cdbd2cSJim Jagielski
55*b1cdbd2cSJim Jagielski#### globals ####
56*b1cdbd2cSJim Jagielskimy $sdffile = '';
57*b1cdbd2cSJim Jagielskimy $no_sort = '';
58*b1cdbd2cSJim Jagielskimy $outputfile = '';
59*b1cdbd2cSJim Jagielskimy $mode = '';
60*b1cdbd2cSJim Jagielskimy $bVerbose="0";
61*b1cdbd2cSJim Jagielskimy $srcpath = '';
62*b1cdbd2cSJim Jagielskimy $languages;
63*b1cdbd2cSJim Jagielski#my %sl_modules;     # Contains all modules where en-US and de is source language
64*b1cdbd2cSJim Jagielskimy $use_default_date = '0';
65*b1cdbd2cSJim Jagielski
66*b1cdbd2cSJim Jagielski         #         (                           leftpart                                                     )            (           rightpart                    )
67*b1cdbd2cSJim Jagielski         #            prj      file      dummy     type       gid       lid      helpid    pform     width      lang       text    helptext  qhelptext   title    timestamp
68*b1cdbd2cSJim Jagielskimy $sdf_regex  = "((([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*))\t([^\t]*)\t(([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t)([^\t]*))";
69*b1cdbd2cSJim Jagielskimy $file_types = "(src|hrc|xcs|xcu|lng|ulf|xrm|xhp|xcd|xgf|xxl|xrb)";
70*b1cdbd2cSJim Jagielski# Always use this date to prevent cvs conflicts
71*b1cdbd2cSJim Jagielskimy $default_date = "2002-02-02 02:02:02";
72*b1cdbd2cSJim Jagielski
73*b1cdbd2cSJim Jagielski#### main ####
74*b1cdbd2cSJim Jagielskiparse_options();
75*b1cdbd2cSJim Jagielski
76*b1cdbd2cSJim Jagielski#%sl_modules = fetch_sourcelanguage_dirlist();
77*b1cdbd2cSJim Jagielski
78*b1cdbd2cSJim Jagielski
79*b1cdbd2cSJim Jagielskiif   ( $mode eq "merge"    )    {
80*b1cdbd2cSJim Jagielski    merge_gsicheck();
81*b1cdbd2cSJim Jagielski    splitfile( $sdffile );
82*b1cdbd2cSJim Jagielski    unlink $sdffile;             # remove temp file!
83*b1cdbd2cSJim Jagielski}
84*b1cdbd2cSJim Jagielskielsif( $mode eq "extract"  )    {
85*b1cdbd2cSJim Jagielski    collectfiles( $outputfile );
86*b1cdbd2cSJim Jagielski}
87*b1cdbd2cSJim Jagielskielse                            {
88*b1cdbd2cSJim Jagielski    usage();
89*b1cdbd2cSJim Jagielski}
90*b1cdbd2cSJim Jagielski
91*b1cdbd2cSJim Jagielskiexit(0);
92*b1cdbd2cSJim Jagielski
93*b1cdbd2cSJim Jagielski#########################################################
94*b1cdbd2cSJim Jagielskisub splitfile{
95*b1cdbd2cSJim Jagielski
96*b1cdbd2cSJim Jagielski    my $lastFile        = '';
97*b1cdbd2cSJim Jagielski    my $currentFile     = '';
98*b1cdbd2cSJim Jagielski    my $cur_sdffile     = '';
99*b1cdbd2cSJim Jagielski    my $last_sdffile    = '';
100*b1cdbd2cSJim Jagielski    my $delim;
101*b1cdbd2cSJim Jagielski    my $badDelim;
102*b1cdbd2cSJim Jagielski    my $start           = 'TRUE';
103*b1cdbd2cSJim Jagielski    my %index  = ();
104*b1cdbd2cSJim Jagielski    my %block;
105*b1cdbd2cSJim Jagielski
106*b1cdbd2cSJim Jagielski    STDOUT->autoflush( 1 );
107*b1cdbd2cSJim Jagielski
108*b1cdbd2cSJim Jagielski    #print STDOUT "Open File $sdffile\n";
109*b1cdbd2cSJim Jagielski    open MYFILE , "< $sdffile"
110*b1cdbd2cSJim Jagielski    or die "Can't open '$sdffile'\n";
111*b1cdbd2cSJim Jagielski
112*b1cdbd2cSJim Jagielski    while( <MYFILE>){
113*b1cdbd2cSJim Jagielski         if( /$sdf_regex/ ){
114*b1cdbd2cSJim Jagielski            my $line           = defined $_ ? $_ : '';
115*b1cdbd2cSJim Jagielski            my $prj            = defined $3 ? $3 : '';
116*b1cdbd2cSJim Jagielski            my $file           = defined $4 ? $4 : '';
117*b1cdbd2cSJim Jagielski            my $type           = defined $6 ? $6 : '';
118*b1cdbd2cSJim Jagielski            my $gid            = defined $7 ? $7 : '';
119*b1cdbd2cSJim Jagielski            my $lid            = defined $8 ? $8 : '';
120*b1cdbd2cSJim Jagielski            my $lang           = defined $12 ? $12 : '';
121*b1cdbd2cSJim Jagielski            my $plattform      = defined $10 ? $10 : '';
122*b1cdbd2cSJim Jagielski            my $helpid         = defined $9 ? $9 : '';
123*b1cdbd2cSJim Jagielski
124*b1cdbd2cSJim Jagielski            next if( $prj eq "binfilter" );     # Don't merge strings into binfilter module
125*b1cdbd2cSJim Jagielski	        chomp( $line );
126*b1cdbd2cSJim Jagielski            $currentFile  = $srcpath . '\\' . $prj . '\\' . $file;
127*b1cdbd2cSJim Jagielski            $currentFile  =~ s/\\/\//g;
128*b1cdbd2cSJim Jagielski
129*b1cdbd2cSJim Jagielski            $cur_sdffile = $currentFile;
130*b1cdbd2cSJim Jagielski            #if( $cur_sdffile =~ /\.$file_types[\s]*$/ ){
131*b1cdbd2cSJim Jagielski                $cur_sdffile =~ s/\/[^\/]*\.$file_types[\s]*$/\/localize.sdf/;
132*b1cdbd2cSJim Jagielski            #}
133*b1cdbd2cSJim Jagielski
134*b1cdbd2cSJim Jagielski            # Set default date
135*b1cdbd2cSJim Jagielski            if( $line =~ /(.*)\t[^\t\$]*$/ ){
136*b1cdbd2cSJim Jagielski                $line = $1."\t".$default_date;
137*b1cdbd2cSJim Jagielski            }
138*b1cdbd2cSJim Jagielski
139*b1cdbd2cSJim Jagielski            if( $start ){
140*b1cdbd2cSJim Jagielski                $start='';
141*b1cdbd2cSJim Jagielski                $lastFile = $currentFile; # ?
142*b1cdbd2cSJim Jagielski                $last_sdffile = $cur_sdffile;
143*b1cdbd2cSJim Jagielski            }
144*b1cdbd2cSJim Jagielski
145*b1cdbd2cSJim Jagielski            if( $lang eq "en-US" ){}
146*b1cdbd2cSJim Jagielski            elsif( $cur_sdffile eq $last_sdffile )
147*b1cdbd2cSJim Jagielski            {
148*b1cdbd2cSJim Jagielski                $block{ "$prj\t$file\t$type\t$gid\t$lid\t$helpid\t$plattform\t$lang" } =  $line ;
149*b1cdbd2cSJim Jagielski            }
150*b1cdbd2cSJim Jagielski            else
151*b1cdbd2cSJim Jagielski            {
152*b1cdbd2cSJim Jagielski                writesdf( $lastFile , \%block );
153*b1cdbd2cSJim Jagielski                $lastFile = $currentFile; #?
154*b1cdbd2cSJim Jagielski                $last_sdffile = $cur_sdffile;
155*b1cdbd2cSJim Jagielski                %block = ();
156*b1cdbd2cSJim Jagielski                #if( ! $lang eq "en-US"  ) {
157*b1cdbd2cSJim Jagielski                $block{ "$prj\t$file\t$type\t$gid\t$lid\t$helpid\t$plattform\t$lang" } =  $line ;
158*b1cdbd2cSJim Jagielski                #}
159*b1cdbd2cSJim Jagielski
160*b1cdbd2cSJim Jagielski            }
161*b1cdbd2cSJim Jagielski        } #else { print STDOUT "splitfile REGEX kaputt\n";}
162*b1cdbd2cSJim Jagielski
163*b1cdbd2cSJim Jagielski    }
164*b1cdbd2cSJim Jagielski    writesdf( $lastFile , \%block );
165*b1cdbd2cSJim Jagielski    %block = ();
166*b1cdbd2cSJim Jagielski    close( MYFILE );
167*b1cdbd2cSJim Jagielski
168*b1cdbd2cSJim Jagielski}
169*b1cdbd2cSJim Jagielski#########################################################
170*b1cdbd2cSJim Jagielski
171*b1cdbd2cSJim Jagielskisub writesdf{
172*b1cdbd2cSJim Jagielski
173*b1cdbd2cSJim Jagielski    my $lastFile        = shift;
174*b1cdbd2cSJim Jagielski    my $blockhash_ref   = shift;
175*b1cdbd2cSJim Jagielski    my $localizeFile    = $lastFile;
176*b1cdbd2cSJim Jagielski    my %index=();
177*b1cdbd2cSJim Jagielski
178*b1cdbd2cSJim Jagielski    if( $localizeFile =~ /\.$file_types[\s]*$/ ){
179*b1cdbd2cSJim Jagielski        $localizeFile =~ s/\/[^\/]*\.$file_types[\s]*$/\/localize.sdf/;
180*b1cdbd2cSJim Jagielski        }else {
181*b1cdbd2cSJim Jagielski            print STDERR "Strange filetype found '$localizeFile'\n";
182*b1cdbd2cSJim Jagielski            return;
183*b1cdbd2cSJim Jagielski        }
184*b1cdbd2cSJim Jagielski        if( open DESTFILE , "< $localizeFile" ){
185*b1cdbd2cSJim Jagielski
186*b1cdbd2cSJim Jagielski        #or die "Can't open/create '\$localizeFile'";
187*b1cdbd2cSJim Jagielski
188*b1cdbd2cSJim Jagielski        #### Build hash
189*b1cdbd2cSJim Jagielski        while(<DESTFILE>){
190*b1cdbd2cSJim Jagielski         if( /$sdf_regex/ ){
191*b1cdbd2cSJim Jagielski            my $line           = defined $_ ? $_ : '';
192*b1cdbd2cSJim Jagielski            my $prj            = defined $3 ? $3 : '';
193*b1cdbd2cSJim Jagielski            my $file           = defined $4 ? $4 : '';
194*b1cdbd2cSJim Jagielski            my $type           = defined $6 ? $6 : '';
195*b1cdbd2cSJim Jagielski            my $gid            = defined $7 ? $7 : '';
196*b1cdbd2cSJim Jagielski            my $lid            = defined $8 ? $8 : '';
197*b1cdbd2cSJim Jagielski            my $lang           = defined $12 ? $12 : '';
198*b1cdbd2cSJim Jagielski            my $plattform      = defined $10 ? $10 : '';
199*b1cdbd2cSJim Jagielski            my $helpid         = defined $9 ? $9 : '';
200*b1cdbd2cSJim Jagielski
201*b1cdbd2cSJim Jagielski            chomp( $line );
202*b1cdbd2cSJim Jagielski            $index{ "$prj\t$file\t$type\t$gid\t$lid\t$helpid\t$plattform\t$lang" } =  $line ;
203*b1cdbd2cSJim Jagielski
204*b1cdbd2cSJim Jagielski         } #else { print STDOUT "writesdf REGEX kaputt $_\n";}
205*b1cdbd2cSJim Jagielski
206*b1cdbd2cSJim Jagielski        }
207*b1cdbd2cSJim Jagielski        close( DESTFILE );
208*b1cdbd2cSJim Jagielski    }
209*b1cdbd2cSJim Jagielski    #### Copy new strings
210*b1cdbd2cSJim Jagielski    my @mykeys = keys( %{ $blockhash_ref } );
211*b1cdbd2cSJim Jagielski    my $isDirty = "FALSE";
212*b1cdbd2cSJim Jagielski    foreach my $key( @mykeys ){
213*b1cdbd2cSJim Jagielski        if( ! defined $index{ $key } ){
214*b1cdbd2cSJim Jagielski            # Add new entry
215*b1cdbd2cSJim Jagielski            $index{ $key }  = $blockhash_ref->{ $key} ;
216*b1cdbd2cSJim Jagielski            $isDirty = "TRUE";
217*b1cdbd2cSJim Jagielski        }elsif( $index{ $key } ne $blockhash_ref->{ $key } ){
218*b1cdbd2cSJim Jagielski            # Overwrite old entry
219*b1cdbd2cSJim Jagielski            $index{ $key } = $blockhash_ref->{ $key };
220*b1cdbd2cSJim Jagielski            $isDirty = "TRUE";
221*b1cdbd2cSJim Jagielski        }else {
222*b1cdbd2cSJim Jagielski        }
223*b1cdbd2cSJim Jagielski    }
224*b1cdbd2cSJim Jagielski
225*b1cdbd2cSJim Jagielski    #### Write file
226*b1cdbd2cSJim Jagielski
227*b1cdbd2cSJim Jagielski    if( !$bVerbose ){ print STDOUT "."; }
228*b1cdbd2cSJim Jagielski    if( $isDirty eq "TRUE" ){
229*b1cdbd2cSJim Jagielski        if( $bVerbose ){ print STDOUT "$localizeFile\n"; }
230*b1cdbd2cSJim Jagielski        if( open DESTFILE , "+> $localizeFile" ){
231*b1cdbd2cSJim Jagielski            print DESTFILE get_license_header();
232*b1cdbd2cSJim Jagielski            @mykeys = sort keys( %index );
233*b1cdbd2cSJim Jagielski            foreach my $key( @mykeys ){
234*b1cdbd2cSJim Jagielski                print DESTFILE ( $index{ $key } , "\n" );
235*b1cdbd2cSJim Jagielski            }
236*b1cdbd2cSJim Jagielski            close DESTFILE;
237*b1cdbd2cSJim Jagielski         }else {
238*b1cdbd2cSJim Jagielski            print STDOUT "WARNING: File $localizeFile is not writable , try to merge ...\n";
239*b1cdbd2cSJim Jagielski            my ( $TMPFILE , $tmpfile ) = File::Temp::tempfile();
240*b1cdbd2cSJim Jagielski            if( open DESTFILE , "+> $tmpfile " ){
241*b1cdbd2cSJim Jagielski                @mykeys = keys( %index );
242*b1cdbd2cSJim Jagielski                foreach my $key( @mykeys ){
243*b1cdbd2cSJim Jagielski                    print DESTFILE ( $index{ $key } , "\n" );
244*b1cdbd2cSJim Jagielski                }
245*b1cdbd2cSJim Jagielski                close DESTFILE;
246*b1cdbd2cSJim Jagielski                if( move( $localizeFile , $localizeFile.".backup" ) ){
247*b1cdbd2cSJim Jagielski                    if( copy( $tmpfile , $localizeFile ) ){
248*b1cdbd2cSJim Jagielski                        unlink $localizeFile.".backup";
249*b1cdbd2cSJim Jagielski                    } else { print STDERR "Can't open/create '$localizeFile', original file is renamed to  $localizeFile.backup\n"; }
250*b1cdbd2cSJim Jagielski                } else { print STDERR "Can't open/create '$localizeFile'\n"; }
251*b1cdbd2cSJim Jagielski            }else{
252*b1cdbd2cSJim Jagielski                print STDERR "WARNING: Can't open/create '$localizeFile'\n";
253*b1cdbd2cSJim Jagielski            }
254*b1cdbd2cSJim Jagielski            unlink $tmpfile;
255*b1cdbd2cSJim Jagielski        }
256*b1cdbd2cSJim Jagielski    }
257*b1cdbd2cSJim Jagielski#    if( $no_sort eq '' ){
258*b1cdbd2cSJim Jagielski#        sort_outfile( $localizeFile );
259*b1cdbd2cSJim Jagielski#    }
260*b1cdbd2cSJim Jagielski}
261*b1cdbd2cSJim Jagielski
262*b1cdbd2cSJim Jagielskisub get_license_header{
263*b1cdbd2cSJim Jagielski    return
264*b1cdbd2cSJim Jagielski"#\n".
265*b1cdbd2cSJim Jagielski"#    ####    ###     #   #   ###   #####    #####  ####   #####  #####  \n".
266*b1cdbd2cSJim Jagielski"#    #   #  #   #    ##  #  #   #    #      #      #   #    #      #    \n".
267*b1cdbd2cSJim Jagielski"#    #   #  #   #    # # #  #   #    #      ###    #   #    #      #    \n".
268*b1cdbd2cSJim Jagielski"#    #   #  #   #    #  ##  #   #    #      #      #   #    #      #    \n".
269*b1cdbd2cSJim Jagielski"#    ####    ###     #   #   ###     #      #####  ####   #####    #    \n".
270*b1cdbd2cSJim Jagielski"#\n".
271*b1cdbd2cSJim Jagielski"#    DO NOT EDIT! This file will be overwritten by localisation process\n".
272*b1cdbd2cSJim Jagielski"#\n".
273*b1cdbd2cSJim Jagielski"#**************************************************************\n".
274*b1cdbd2cSJim Jagielski"#  \n".
275*b1cdbd2cSJim Jagielski"#  Licensed to the Apache Software Foundation (ASF) under one\n".
276*b1cdbd2cSJim Jagielski"#  or more contributor license agreements.  See the NOTICE file\n".
277*b1cdbd2cSJim Jagielski"#  distributed with this work for additional information\n".
278*b1cdbd2cSJim Jagielski"#  regarding copyright ownership.  The ASF licenses this file\n".
279*b1cdbd2cSJim Jagielski"#  to you under the Apache License, Version 2.0 (the\n".
280*b1cdbd2cSJim Jagielski"#  "License"); you may not use this file except in compliance\n".
281*b1cdbd2cSJim Jagielski"#  with the License.  You may obtain a copy of the License at\n".
282*b1cdbd2cSJim Jagielski"#  \n".
283*b1cdbd2cSJim Jagielski"#    http://www.apache.org/licenses/LICENSE-2.0\n".
284*b1cdbd2cSJim Jagielski"#  \n".
285*b1cdbd2cSJim Jagielski"#  Unless required by applicable law or agreed to in writing,\n".
286*b1cdbd2cSJim Jagielski"#  software distributed under the License is distributed on an\n".
287*b1cdbd2cSJim Jagielski"#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n".
288*b1cdbd2cSJim Jagielski"#  KIND, either express or implied.  See the License for the\n".
289*b1cdbd2cSJim Jagielski"#  specific language governing permissions and limitations\n".
290*b1cdbd2cSJim Jagielski"#  under the License.\n".
291*b1cdbd2cSJim Jagielski"#  \n".
292*b1cdbd2cSJim Jagielski"#**************************************************************\n";
293*b1cdbd2cSJim Jagielski}
294*b1cdbd2cSJim Jagielski######## Check input sdf file and use only the correct part
295*b1cdbd2cSJim Jagielskisub merge_gsicheck{
296*b1cdbd2cSJim Jagielski    my $command = '';
297*b1cdbd2cSJim Jagielski    my ( $TMPHANDLE , $tmpfile ) = File::Temp::tempfile();
298*b1cdbd2cSJim Jagielski    my ( $TMPHANDLE2 , $tmpfile2 ) = File::Temp::tempfile();
299*b1cdbd2cSJim Jagielski    close ( $TMPHANDLE );
300*b1cdbd2cSJim Jagielski    close ( $TMPHANDLE2 );
301*b1cdbd2cSJim Jagielski
302*b1cdbd2cSJim Jagielski    unlink $tmpfile2;
303*b1cdbd2cSJim Jagielski    my $output2 = `cat $sdffile | sort > $tmpfile2`;
304*b1cdbd2cSJim Jagielski    my $rc2 = $? << 8;
305*b1cdbd2cSJim Jagielski    if( $rc2 ne  0 ){
306*b1cdbd2cSJim Jagielski        printf("ERROR: Failed -> cat $sdffile | sort > $tmpfile2\n$output2\n");
307*b1cdbd2cSJim Jagielski        exit( -1 );
308*b1cdbd2cSJim Jagielski    }
309*b1cdbd2cSJim Jagielski
310*b1cdbd2cSJim Jagielski#    if( $ENV{WRAPCMD} ){
311*b1cdbd2cSJim Jagielski#        $command = "$ENV{WRAPCMD} gsicheck";
312*b1cdbd2cSJim Jagielski#    }else{
313*b1cdbd2cSJim Jagielski#        $command = "gsicheck";
314*b1cdbd2cSJim Jagielski#    }
315*b1cdbd2cSJim Jagielski#    my $errfile = $tmpfile.".err";
316*b1cdbd2cSJim Jagielski#    $command .= " -k -c -wcf $tmpfile -wef $errfile -l \"\" $tmpfile2";
317*b1cdbd2cSJim Jagielski#    my $output = `$command`;
318*b1cdbd2cSJim Jagielski#    my $rc = $? << 8;
319*b1cdbd2cSJim Jagielski#    if ( $output ne "" ){
320*b1cdbd2cSJim Jagielski#        print STDOUT "### gsicheck ###\n";
321*b1cdbd2cSJim Jagielski#        print STDOUT "### The file $errfile have been written containing the errors in your sdf file. Those lines will not be merged: ###\n\n";
322*b1cdbd2cSJim Jagielski#        print STDOUT "$output\n";
323*b1cdbd2cSJim Jagielski#        print STDOUT "################\n";
324*b1cdbd2cSJim Jagielski#
325*b1cdbd2cSJim Jagielski#    }else{
326*b1cdbd2cSJim Jagielski#        # Remove the 0 Byte file
327*b1cdbd2cSJim Jagielski#        unlink $errfile;
328*b1cdbd2cSJim Jagielski#    }
329*b1cdbd2cSJim Jagielski    $sdffile = $tmpfile2;
330*b1cdbd2cSJim Jagielski#    unlink $tmpfile2;
331*b1cdbd2cSJim Jagielski}
332*b1cdbd2cSJim Jagielski#########################################################
333*b1cdbd2cSJim Jagielskisub collectfiles{
334*b1cdbd2cSJim Jagielski    print STDOUT "### Localize\n";
335*b1cdbd2cSJim Jagielski    my @sdfparticles;
336*b1cdbd2cSJim Jagielski    my $localizehash_ref;
337*b1cdbd2cSJim Jagielski    my ( $bAll , $bUseLocalize, $langhash_ref , $bHasSourceLanguage , $bFakeEnglish ) = parseLanguages();
338*b1cdbd2cSJim Jagielski
339*b1cdbd2cSJim Jagielski    # Enable autoflush on STDOUT
340*b1cdbd2cSJim Jagielski    # $| = 1;
341*b1cdbd2cSJim Jagielski    STDOUT->autoflush( 1 );
342*b1cdbd2cSJim Jagielski
343*b1cdbd2cSJim Jagielski    ### Search sdf particles
344*b1cdbd2cSJim Jagielski    print STDOUT "### Searching sdf particles\n";
345*b1cdbd2cSJim Jagielski    my $working_path = getcwd();
346*b1cdbd2cSJim Jagielski    chdir $srcpath;
347*b1cdbd2cSJim Jagielski    find sub {
348*b1cdbd2cSJim Jagielski        my $file = $File::Find::name;
349*b1cdbd2cSJim Jagielski        if( -f && $file =~ /.*localize.sdf$/ ) {
350*b1cdbd2cSJim Jagielski            push   @sdfparticles , $file;
351*b1cdbd2cSJim Jagielski            if( $bVerbose eq "1" ) { print STDOUT "$file\n"; }
352*b1cdbd2cSJim Jagielski            else { print ".";  }
353*b1cdbd2cSJim Jagielski
354*b1cdbd2cSJim Jagielski         }
355*b1cdbd2cSJim Jagielski    } , getcwd() ;#"."; #$srcpath;
356*b1cdbd2cSJim Jagielski    chdir $working_path;
357*b1cdbd2cSJim Jagielski
358*b1cdbd2cSJim Jagielski    my $nFound  = $#sdfparticles +1;
359*b1cdbd2cSJim Jagielski    print "\n    $nFound files found !\n";
360*b1cdbd2cSJim Jagielski
361*b1cdbd2cSJim Jagielski    my ( $LOCALIZEPARTICLE , $localizeSDF ) = File::Temp::tempfile();
362*b1cdbd2cSJim Jagielski    close( $LOCALIZEPARTICLE );
363*b1cdbd2cSJim Jagielski
364*b1cdbd2cSJim Jagielski    my ( $ALLPARTICLES_MERGED , $particleSDF_merged )     = File::Temp::tempfile();
365*b1cdbd2cSJim Jagielski    close( $ALLPARTICLES_MERGED );
366*b1cdbd2cSJim Jagielski    my ( $LOCALIZE_LOG , $my_localize_log ) = File::Temp::tempfile();
367*b1cdbd2cSJim Jagielski    close( $LOCALIZE_LOG );
368*b1cdbd2cSJim Jagielski
369*b1cdbd2cSJim Jagielski    ## Get the localize de,en-US extract
370*b1cdbd2cSJim Jagielski    if( $bAll || $bUseLocalize ){
371*b1cdbd2cSJim Jagielski        print "### Fetching source language strings\n";
372*b1cdbd2cSJim Jagielski        my $command = "";
373*b1cdbd2cSJim Jagielski        my $args    = "";
374*b1cdbd2cSJim Jagielski
375*b1cdbd2cSJim Jagielski        if( $ENV{WRAPCMD} ){
376*b1cdbd2cSJim Jagielski            $command = "$ENV{WRAPCMD} localize_sl";
377*b1cdbd2cSJim Jagielski        }else{
378*b1cdbd2cSJim Jagielski            $command = "localize_sl";
379*b1cdbd2cSJim Jagielski        }
380*b1cdbd2cSJim Jagielski
381*b1cdbd2cSJim Jagielski        # -e
382*b1cdbd2cSJim Jagielski        # if ( -x $command ){
383*b1cdbd2cSJim Jagielski        if( $command ){
384*b1cdbd2cSJim Jagielski            if( !$bVerbose  ){ $args .= " -QQ -skip_links "; }
385*b1cdbd2cSJim Jagielski            $args .= " -e -f $localizeSDF -l ";
386*b1cdbd2cSJim Jagielski            my $bFlag="";
387*b1cdbd2cSJim Jagielski            if( $bAll ) {$args .= " en-US";}
388*b1cdbd2cSJim Jagielski            else{
389*b1cdbd2cSJim Jagielski              my @list;
390*b1cdbd2cSJim Jagielski              foreach my $isokey ( keys( %{ $langhash_ref } ) ){
391*b1cdbd2cSJim Jagielski                push @list , $isokey;
392*b1cdbd2cSJim Jagielski                if( $langhash_ref->{ $isokey } ne "" ){
393*b1cdbd2cSJim Jagielski                    push @list , $langhash_ref->{ $isokey };
394*b1cdbd2cSJim Jagielski                }
395*b1cdbd2cSJim Jagielski              }
396*b1cdbd2cSJim Jagielski              remove_duplicates( \@list );
397*b1cdbd2cSJim Jagielski              foreach my $isokey ( @list ){
398*b1cdbd2cSJim Jagielski                switch :{
399*b1cdbd2cSJim Jagielski                    #( $isokey=~ /^de$/i  )
400*b1cdbd2cSJim Jagielski                    #    && do{
401*b1cdbd2cSJim Jagielski                    #            if( $bFlag eq "TRUE" ){ $args .= ",de"; }
402*b1cdbd2cSJim Jagielski                    #            else  {
403*b1cdbd2cSJim Jagielski                    #                $args .=  "de";  $bFlag = "TRUE";
404*b1cdbd2cSJim Jagielski                    #             }
405*b1cdbd2cSJim Jagielski                    #          };
406*b1cdbd2cSJim Jagielski                        ( $isokey=~ /^en-US$/i  )
407*b1cdbd2cSJim Jagielski                        && do{
408*b1cdbd2cSJim Jagielski                                if( $bFlag eq "TRUE" ){ $args .= ",en-US"; }
409*b1cdbd2cSJim Jagielski                                else {
410*b1cdbd2cSJim Jagielski                                    $args .= "en-US";  $bFlag = "TRUE";
411*b1cdbd2cSJim Jagielski                                 }
412*b1cdbd2cSJim Jagielski                              };
413*b1cdbd2cSJim Jagielski
414*b1cdbd2cSJim Jagielski                    } #switch
415*b1cdbd2cSJim Jagielski                } #foreach
416*b1cdbd2cSJim Jagielski              } # if
417*b1cdbd2cSJim Jagielski        } # if
418*b1cdbd2cSJim Jagielski        if ( $bVerbose ) { print STDOUT $command.$args."\n"; }
419*b1cdbd2cSJim Jagielski
420*b1cdbd2cSJim Jagielski        my $rc = system( $command.$args );
421*b1cdbd2cSJim Jagielski
422*b1cdbd2cSJim Jagielski        #my $output = `$command.$args`;
423*b1cdbd2cSJim Jagielski        #my $rc = $? << 8;
424*b1cdbd2cSJim Jagielski
425*b1cdbd2cSJim Jagielski        if( $rc < 0 ){    print STDERR "ERROR: localize rc = $rc\n"; exit( -1 ); }
426*b1cdbd2cSJim Jagielski        ( $localizehash_ref )  = read_file( $localizeSDF , $langhash_ref );
427*b1cdbd2cSJim Jagielski
428*b1cdbd2cSJim Jagielski    }
429*b1cdbd2cSJim Jagielski    ## Get sdf particles
430*b1cdbd2cSJim Jagielski   open ALLPARTICLES_MERGED , "+>> $particleSDF_merged"
431*b1cdbd2cSJim Jagielski    or die "Can't open $particleSDF_merged";
432*b1cdbd2cSJim Jagielski
433*b1cdbd2cSJim Jagielski    ## Fill fackback hash
434*b1cdbd2cSJim Jagielski    my( $fallbackhashhash_ref ) = fetch_fallback( \@sdfparticles , $localizeSDF ,  $langhash_ref );
435*b1cdbd2cSJim Jagielski#    my( $fallbackhashhash_ref ) = fetch_fallback( \@sdfparticles , $localizeSDF , $langhash_ref );
436*b1cdbd2cSJim Jagielski    my %block;
437*b1cdbd2cSJim Jagielski    my $cur_fallback;
438*b1cdbd2cSJim Jagielski    if( !$bAll) {
439*b1cdbd2cSJim Jagielski        foreach my $cur_lang ( keys( %{ $langhash_ref } ) ){
440*b1cdbd2cSJim Jagielski            #print STDOUT "DBG: G1 cur_lang=$cur_lang\n";
441*b1cdbd2cSJim Jagielski            $cur_fallback = $langhash_ref->{ $cur_lang };
442*b1cdbd2cSJim Jagielski            if( $cur_fallback ne "" ){
443*b1cdbd2cSJim Jagielski                # Insert fallback strings
444*b1cdbd2cSJim Jagielski                #print STDOUT "DBG: Renaming $cur_fallback to $cur_lang in fallbackhash\n";
445*b1cdbd2cSJim Jagielski                rename_language(  $fallbackhashhash_ref ,  $cur_fallback , $cur_lang );
446*b1cdbd2cSJim Jagielski            }
447*b1cdbd2cSJim Jagielski            foreach my $currentfile ( @sdfparticles ){
448*b1cdbd2cSJim Jagielski                if ( open MYFILE , "< $currentfile" ) {
449*b1cdbd2cSJim Jagielski                    while(<MYFILE>){
450*b1cdbd2cSJim Jagielski                        if( /$sdf_regex/ ){
451*b1cdbd2cSJim Jagielski                            my $line           = defined $_ ? $_ : '';
452*b1cdbd2cSJim Jagielski                            my $prj            = defined $3 ? $3 : '';
453*b1cdbd2cSJim Jagielski                            my $file           = defined $4 ? $4 : '';
454*b1cdbd2cSJim Jagielski                            my $type           = defined $6 ? $6 : '';
455*b1cdbd2cSJim Jagielski                            my $gid            = defined $7 ? $7 : '';
456*b1cdbd2cSJim Jagielski                            my $lid            = defined $8 ? $8 : '';
457*b1cdbd2cSJim Jagielski                            my $lang           = defined $12 ? $12 : '';
458*b1cdbd2cSJim Jagielski                            my $plattform      = defined $10 ? $10 : '';
459*b1cdbd2cSJim Jagielski                            my $helpid         = defined $9 ? $9 : '';
460*b1cdbd2cSJim Jagielski
461*b1cdbd2cSJim Jagielski                            chomp( $line );
462*b1cdbd2cSJim Jagielski
463*b1cdbd2cSJim Jagielski                            if ( $lang eq $cur_lang ){
464*b1cdbd2cSJim Jagielski                                # Overwrite fallback strings with collected strings
465*b1cdbd2cSJim Jagielski                                #if( ( !has_two_sourcelanguages( $cur_lang) && $cur_lang eq "de" ) || $cur_lang ne "en-US" ){
466*b1cdbd2cSJim Jagielski                                     $fallbackhashhash_ref->{ $cur_lang }{ $prj.$gid.$lid.$file.$type.$plattform.$helpid } =  $line ;
467*b1cdbd2cSJim Jagielski                                     #}
468*b1cdbd2cSJim Jagielski
469*b1cdbd2cSJim Jagielski                            }
470*b1cdbd2cSJim Jagielski                        }
471*b1cdbd2cSJim Jagielski                    }
472*b1cdbd2cSJim Jagielski                }else { print STDERR "WARNING: Can't open file $currentfile"; }
473*b1cdbd2cSJim Jagielski            }
474*b1cdbd2cSJim Jagielski
475*b1cdbd2cSJim Jagielski            foreach my $line ( keys( %{$fallbackhashhash_ref->{ $cur_lang } } )) {
476*b1cdbd2cSJim Jagielski                if( #$cur_lang ne "de" &&
477*b1cdbd2cSJim Jagielski                    $cur_lang ne "en-US" ){
478*b1cdbd2cSJim Jagielski                    print ALLPARTICLES_MERGED ( $fallbackhashhash_ref->{ $cur_lang }{ $line }, "\n" );
479*b1cdbd2cSJim Jagielski                }
480*b1cdbd2cSJim Jagielski             }
481*b1cdbd2cSJim Jagielski        }
482*b1cdbd2cSJim Jagielski    } else {
483*b1cdbd2cSJim Jagielski        foreach my $currentfile ( @sdfparticles ){
484*b1cdbd2cSJim Jagielski            if ( open MYFILE , "< $currentfile" ) {
485*b1cdbd2cSJim Jagielski                while( <MYFILE> ){
486*b1cdbd2cSJim Jagielski                    print ALLPARTICLES_MERGED ( $_, "\n" );  # recheck de / en-US !
487*b1cdbd2cSJim Jagielski                }
488*b1cdbd2cSJim Jagielski            }
489*b1cdbd2cSJim Jagielski            else { print STDERR "WARNING: Can't open file $currentfile"; }
490*b1cdbd2cSJim Jagielski        }
491*b1cdbd2cSJim Jagielski    }
492*b1cdbd2cSJim Jagielski    close ALLPARTICLES_MERGED;
493*b1cdbd2cSJim Jagielski
494*b1cdbd2cSJim Jagielski
495*b1cdbd2cSJim Jagielski    # Hash of array
496*b1cdbd2cSJim Jagielski    my %output;
497*b1cdbd2cSJim Jagielski    my @order;
498*b1cdbd2cSJim Jagielski
499*b1cdbd2cSJim Jagielski    ## Join both
500*b1cdbd2cSJim Jagielski    if( $outputfile ){
501*b1cdbd2cSJim Jagielski        if( open DESTFILE , "+> $outputfile" ){
502*b1cdbd2cSJim Jagielski            if( !open LOCALIZEPARTICLE ,  "< $localizeSDF" ) { print STDERR "ERROR: Can't open file $localizeSDF\n"; }
503*b1cdbd2cSJim Jagielski            if( !open ALLPARTICLES_MERGED , "< $particleSDF_merged" ) { print STDERR "ERROR: Can't open file $particleSDF_merged\n"; }
504*b1cdbd2cSJim Jagielski
505*b1cdbd2cSJim Jagielski            # Insert localize
506*b1cdbd2cSJim Jagielski            my $extract_date="";
507*b1cdbd2cSJim Jagielski            while ( <LOCALIZEPARTICLE> ){
508*b1cdbd2cSJim Jagielski                if( /$sdf_regex/ ){
509*b1cdbd2cSJim Jagielski                    my $leftpart       = defined $2 ? $2 : '';
510*b1cdbd2cSJim Jagielski                    my $lang           = defined $12 ? $12 : '';
511*b1cdbd2cSJim Jagielski                    my $rightpart      = defined $13 ? $13 : '';
512*b1cdbd2cSJim Jagielski                    my $timestamp      = defined $18 ? $18 : '';
513*b1cdbd2cSJim Jagielski
514*b1cdbd2cSJim Jagielski                    my $prj            = defined $3 ? $3 : '';
515*b1cdbd2cSJim Jagielski                    my $file           = defined $4 ? $4 : '';
516*b1cdbd2cSJim Jagielski                    my $type           = defined $6 ? $6 : '';
517*b1cdbd2cSJim Jagielski                    my $gid            = defined $7 ? $7 : '';
518*b1cdbd2cSJim Jagielski                    my $lid            = defined $8 ? $8 : '';
519*b1cdbd2cSJim Jagielski                    #my $lang           = defined $12 ? $12 : '';
520*b1cdbd2cSJim Jagielski                    my $plattform      = defined $10 ? $10 : '';
521*b1cdbd2cSJim Jagielski                    my $helpid         = defined $9 ? $9 : '';
522*b1cdbd2cSJim Jagielski
523*b1cdbd2cSJim Jagielski
524*b1cdbd2cSJim Jagielski                    if( $use_default_date )
525*b1cdbd2cSJim Jagielski                    {
526*b1cdbd2cSJim Jagielski                        $extract_date = "$default_date\n" ;
527*b1cdbd2cSJim Jagielski                    }
528*b1cdbd2cSJim Jagielski                    elsif( $extract_date eq "" ) {
529*b1cdbd2cSJim Jagielski                        $extract_date = $timestamp ;
530*b1cdbd2cSJim Jagielski                        $extract_date =~ tr/\r\n//d;
531*b1cdbd2cSJim Jagielski                        $extract_date .= "\n";
532*b1cdbd2cSJim Jagielski                    }
533*b1cdbd2cSJim Jagielski
534*b1cdbd2cSJim Jagielski                    if( $bAll ){ print DESTFILE $leftpart."\t".$lang."\t".$rightpart.$extract_date ; }
535*b1cdbd2cSJim Jagielski                    else {
536*b1cdbd2cSJim Jagielski                        foreach my $sLang ( keys( %{ $langhash_ref } ) ){
537*b1cdbd2cSJim Jagielski                            if( $sLang=~ /all/i )                       {
538*b1cdbd2cSJim Jagielski                                push @{ $output{ $prj.$gid.$lid.$file.$type.$plattform.$helpid } } ,  $leftpart."\t".$lang."\t".$rightpart.$extract_date ;
539*b1cdbd2cSJim Jagielski                                #print DESTFILE $leftpart."\t".$lang."\t".$rightpart.$extract_date;
540*b1cdbd2cSJim Jagielski                            }
541*b1cdbd2cSJim Jagielski                            #if( $sLang eq "de" && $lang eq "de" )       {
542*b1cdbd2cSJim Jagielski                            #    push @{ $output{ $prj.$gid.$lid.$file.$type.$plattform.$helpid } } ,  $leftpart."\t".$lang."\t".$rightpart.$extract_date ;
543*b1cdbd2cSJim Jagielski                                #print DESTFILE $leftpart."\t".$lang."\t".$rightpart.$extract_date;
544*b1cdbd2cSJim Jagielski                                #}
545*b1cdbd2cSJim Jagielski                            if( $sLang eq "en-US" && $lang eq "en-US" ) {
546*b1cdbd2cSJim Jagielski                                push @order , $prj.$gid.$lid.$file.$type.$plattform.$helpid;
547*b1cdbd2cSJim Jagielski                                if( !$bFakeEnglish ){ push @{ $output{ $prj.$gid.$lid.$file.$type.$plattform.$helpid } } ,  $leftpart."\t".$lang."\t".$rightpart.$extract_date ; }
548*b1cdbd2cSJim Jagielski                                #print DESTFILE $leftpart."\t".$lang."\t".$rightpart.$extract_date;
549*b1cdbd2cSJim Jagielski                            }
550*b1cdbd2cSJim Jagielski
551*b1cdbd2cSJim Jagielski                        }
552*b1cdbd2cSJim Jagielski                    }
553*b1cdbd2cSJim Jagielski                }
554*b1cdbd2cSJim Jagielski            }
555*b1cdbd2cSJim Jagielski            # Insert particles
556*b1cdbd2cSJim Jagielski            while ( <ALLPARTICLES_MERGED> ){
557*b1cdbd2cSJim Jagielski                if( /$sdf_regex/ ){
558*b1cdbd2cSJim Jagielski                    my $leftpart       = defined $2 ? $2 : '';
559*b1cdbd2cSJim Jagielski                    my $prj            = defined $3 ? $3 : '';
560*b1cdbd2cSJim Jagielski                    my $lang           = defined $12 ? $12 : '';
561*b1cdbd2cSJim Jagielski                    my $rightpart      = defined $13 ? $13 : '';
562*b1cdbd2cSJim Jagielski                    my $timestamp      = defined $18 ? $18 : '';
563*b1cdbd2cSJim Jagielski
564*b1cdbd2cSJim Jagielski                    #my $prj            = defined $3 ? $3 : '';
565*b1cdbd2cSJim Jagielski                    my $file           = defined $4 ? $4 : '';
566*b1cdbd2cSJim Jagielski                    my $type           = defined $6 ? $6 : '';
567*b1cdbd2cSJim Jagielski                    my $gid            = defined $7 ? $7 : '';
568*b1cdbd2cSJim Jagielski                    my $lid            = defined $8 ? $8 : '';
569*b1cdbd2cSJim Jagielski                    #my $lang           = defined $12 ? $12 : '';
570*b1cdbd2cSJim Jagielski                    my $plattform      = defined $10 ? $10 : '';
571*b1cdbd2cSJim Jagielski                    my $helpid         = defined $9 ? $9 : '';
572*b1cdbd2cSJim Jagielski
573*b1cdbd2cSJim Jagielski
574*b1cdbd2cSJim Jagielski                    if( $use_default_date )
575*b1cdbd2cSJim Jagielski                    {
576*b1cdbd2cSJim Jagielski                        $extract_date = "$default_date\n" ;
577*b1cdbd2cSJim Jagielski                    }
578*b1cdbd2cSJim Jagielski                    elsif( $extract_date eq "" )
579*b1cdbd2cSJim Jagielski                    {
580*b1cdbd2cSJim Jagielski                        $extract_date = $timestamp;
581*b1cdbd2cSJim Jagielski                    }
582*b1cdbd2cSJim Jagielski
583*b1cdbd2cSJim Jagielski                    if( ! ( $prj =~ /binfilter/i ) ) {
584*b1cdbd2cSJim Jagielski                        push @{ $output{ $prj.$gid.$lid.$file.$type.$plattform.$helpid } } , $leftpart."\t".$lang."\t".$rightpart.$extract_date ;
585*b1cdbd2cSJim Jagielski                        #print DESTFILE $leftpart."\t".$lang."\t".$rightpart.$extract_date ;
586*b1cdbd2cSJim Jagielski                    }
587*b1cdbd2cSJim Jagielski                 }
588*b1cdbd2cSJim Jagielski            }
589*b1cdbd2cSJim Jagielski
590*b1cdbd2cSJim Jagielski            # Write!
591*b1cdbd2cSJim Jagielski            foreach my $curkey ( @order ){
592*b1cdbd2cSJim Jagielski                foreach my $curlist ( $output{ $curkey } ){
593*b1cdbd2cSJim Jagielski                    foreach my $line ( @{$curlist} ){
594*b1cdbd2cSJim Jagielski                        print DESTFILE $line;
595*b1cdbd2cSJim Jagielski                    }
596*b1cdbd2cSJim Jagielski                }
597*b1cdbd2cSJim Jagielski            }
598*b1cdbd2cSJim Jagielski
599*b1cdbd2cSJim Jagielski        }else { print STDERR "Can't open $outputfile";}
600*b1cdbd2cSJim Jagielski    }
601*b1cdbd2cSJim Jagielski    close DESTFILE;
602*b1cdbd2cSJim Jagielski    close LOCALIZEPARTICLE;
603*b1cdbd2cSJim Jagielski    close ALLPARTICLES_MERGED;
604*b1cdbd2cSJim Jagielski
605*b1cdbd2cSJim Jagielski    #print STDOUT "DBG: \$localizeSDF $localizeSDF \$particleSDF_merged $particleSDF_merged\n";
606*b1cdbd2cSJim Jagielski    unlink $localizeSDF , $particleSDF_merged ,  $my_localize_log;
607*b1cdbd2cSJim Jagielski
608*b1cdbd2cSJim Jagielski    #sort_outfile( $outputfile );
609*b1cdbd2cSJim Jagielski    #remove_obsolete( $outputfile ) , if $bHasSourceLanguage ne "";
610*b1cdbd2cSJim Jagielski    }
611*b1cdbd2cSJim Jagielski
612*b1cdbd2cSJim Jagielski#########################################################
613*b1cdbd2cSJim Jagielskisub remove_obsolete{
614*b1cdbd2cSJim Jagielski    my $outfile = shift;
615*b1cdbd2cSJim Jagielski    my @lines;
616*b1cdbd2cSJim Jagielski    my $enusleftpart;
617*b1cdbd2cSJim Jagielski    my @good_lines;
618*b1cdbd2cSJim Jagielski
619*b1cdbd2cSJim Jagielski    print STDOUT "### Removing obsolete strings\n";
620*b1cdbd2cSJim Jagielski
621*b1cdbd2cSJim Jagielski    # Kick out all strings without en-US reference
622*b1cdbd2cSJim Jagielski    if ( open ( SORTEDFILE , "< $outfile" ) ){
623*b1cdbd2cSJim Jagielski        while( <SORTEDFILE> ){
624*b1cdbd2cSJim Jagielski            if( /$sdf_regex/ ){
625*b1cdbd2cSJim Jagielski                my $line           = defined $_ ? $_ : '';
626*b1cdbd2cSJim Jagielski                my $language       = defined $12 ? $12 : '';
627*b1cdbd2cSJim Jagielski                my $prj            = defined $3 ? $3 : '';
628*b1cdbd2cSJim Jagielski                my $file           = defined $4 ? $4 : '';
629*b1cdbd2cSJim Jagielski                my $type           = defined $6 ? $6 : '';
630*b1cdbd2cSJim Jagielski                my $gid            = defined $7 ? $7 : '';
631*b1cdbd2cSJim Jagielski                my $lid            = defined $8 ? $8 : '';
632*b1cdbd2cSJim Jagielski                my $plattform      = defined $10 ? $10 : '';
633*b1cdbd2cSJim Jagielski                my $helpid         = defined $9 ? $9 : '';
634*b1cdbd2cSJim Jagielski
635*b1cdbd2cSJim Jagielski                my $leftpart = $prj.$gid.$lid.$file.$type.$plattform.$helpid;
636*b1cdbd2cSJim Jagielski
637*b1cdbd2cSJim Jagielski                if( $language eq "en-US" ){                 # source string found, 1. entry
638*b1cdbd2cSJim Jagielski                    $enusleftpart = $leftpart;
639*b1cdbd2cSJim Jagielski                    push @good_lines , $line;
640*b1cdbd2cSJim Jagielski                }else{
641*b1cdbd2cSJim Jagielski                    if( !defined $enusleftpart or !defined $leftpart ){
642*b1cdbd2cSJim Jagielski                        print STDERR "BADLINE: $line\n";
643*b1cdbd2cSJim Jagielski                        print STDERR "\$enusleftpart = $enusleftpart\n";
644*b1cdbd2cSJim Jagielski                        print STDERR "\$leftpart = $leftpart\n";
645*b1cdbd2cSJim Jagielski                    }
646*b1cdbd2cSJim Jagielski                    if( $enusleftpart eq $leftpart ){   # matching language
647*b1cdbd2cSJim Jagielski                        push @good_lines , $line;
648*b1cdbd2cSJim Jagielski                    }
649*b1cdbd2cSJim Jagielski                    #else{
650*b1cdbd2cSJim Jagielski                    #    print STDERR "OUT:  \$enusleftpart=$enusleftpart \$leftpart=$leftpart \$line=$line\n";
651*b1cdbd2cSJim Jagielski                    #}
652*b1cdbd2cSJim Jagielski                }
653*b1cdbd2cSJim Jagielski            }
654*b1cdbd2cSJim Jagielski        }
655*b1cdbd2cSJim Jagielski        close SORTEDFILE;
656*b1cdbd2cSJim Jagielski    } else { print STDERR "ERROR: Can't open file $outfile\n";}
657*b1cdbd2cSJim Jagielski
658*b1cdbd2cSJim Jagielski    # Write file
659*b1cdbd2cSJim Jagielski    if ( open ( SORTEDFILE , "> $outfile" ) ){
660*b1cdbd2cSJim Jagielski        foreach my $newline ( @good_lines ) {
661*b1cdbd2cSJim Jagielski            print SORTEDFILE $newline;
662*b1cdbd2cSJim Jagielski        }
663*b1cdbd2cSJim Jagielski        close SORTEDFILE;
664*b1cdbd2cSJim Jagielski    } else { print STDERR "ERROR: Can't open file $outfile\n";}
665*b1cdbd2cSJim Jagielski
666*b1cdbd2cSJim Jagielski}
667*b1cdbd2cSJim Jagielski#########################################################
668*b1cdbd2cSJim Jagielskisub sort_outfile{
669*b1cdbd2cSJim Jagielski        my $outfile = shift;
670*b1cdbd2cSJim Jagielski        print STDOUT "### Sorting ... $outfile ...";
671*b1cdbd2cSJim Jagielski        my @lines;
672*b1cdbd2cSJim Jagielski        my @sorted_lines;
673*b1cdbd2cSJim Jagielski
674*b1cdbd2cSJim Jagielski
675*b1cdbd2cSJim Jagielski        #if ( open ( SORTEDFILE , "< $outputfile" ) ){
676*b1cdbd2cSJim Jagielski        if ( open ( SORTEDFILE , "< $outfile" ) ){
677*b1cdbd2cSJim Jagielski            my $line;
678*b1cdbd2cSJim Jagielski            while ( <SORTEDFILE> ){
679*b1cdbd2cSJim Jagielski                $line = $_;
680*b1cdbd2cSJim Jagielski                if( $line =~ /^[^\#]/ ){
681*b1cdbd2cSJim Jagielski                    push @lines , $line;
682*b1cdbd2cSJim Jagielski                }
683*b1cdbd2cSJim Jagielski            }
684*b1cdbd2cSJim Jagielski            close SORTEDFILE;
685*b1cdbd2cSJim Jagielski            @sorted_lines = sort {
686*b1cdbd2cSJim Jagielski                my $xa_lang          = "";
687*b1cdbd2cSJim Jagielski                my $xa_left_part    = "";
688*b1cdbd2cSJim Jagielski                my $xa_right_part    = "";
689*b1cdbd2cSJim Jagielski                my $xa_timestamp     = "";
690*b1cdbd2cSJim Jagielski                my $xb_lang          = "";
691*b1cdbd2cSJim Jagielski                my $xb_left_part    = "";
692*b1cdbd2cSJim Jagielski                my $xb_right_part    = "";
693*b1cdbd2cSJim Jagielski                my $xb_timestamp     = "";
694*b1cdbd2cSJim Jagielski                my $xa               = "";
695*b1cdbd2cSJim Jagielski                my $xb               = "";
696*b1cdbd2cSJim Jagielski                my @alist;
697*b1cdbd2cSJim Jagielski                my @blist;
698*b1cdbd2cSJim Jagielski
699*b1cdbd2cSJim Jagielski                if( $a=~ /$sdf_regex/ ){
700*b1cdbd2cSJim Jagielski                    $xa_left_part       = defined $2 ? $2 : '';
701*b1cdbd2cSJim Jagielski                    $xa_lang           = defined $12 ? $12 : '';
702*b1cdbd2cSJim Jagielski                    $xa_right_part     = defined $13 ? $13 : '';
703*b1cdbd2cSJim Jagielski                    $xa_left_part = remove_last_column( $xa_left_part );
704*b1cdbd2cSJim Jagielski
705*b1cdbd2cSJim Jagielski                }
706*b1cdbd2cSJim Jagielski                if( $b=~ /$sdf_regex/ ){
707*b1cdbd2cSJim Jagielski                    $xb_left_part       = defined $2 ? $2 : '';
708*b1cdbd2cSJim Jagielski                    $xb_lang           = defined $12 ? $12 : '';
709*b1cdbd2cSJim Jagielski                    $xb_right_part     = defined $13 ? $13 : '';
710*b1cdbd2cSJim Jagielski                    $xb_left_part = remove_last_column( $xb_left_part );
711*b1cdbd2cSJim Jagielski
712*b1cdbd2cSJim Jagielski
713*b1cdbd2cSJim Jagielski                }
714*b1cdbd2cSJim Jagielski                if( (  $xa_left_part cmp $xb_left_part ) == 0 ){         # Left part equal
715*b1cdbd2cSJim Jagielski                     if( ( $xa_lang cmp $xb_lang ) == 0 ){               # Lang equal
716*b1cdbd2cSJim Jagielski                         return ( $xa_right_part cmp $xb_right_part );   # Right part compare
717*b1cdbd2cSJim Jagielski                    }
718*b1cdbd2cSJim Jagielski                    elsif( $xa_lang eq "en-US" ) { return -1; }        # en-US wins
719*b1cdbd2cSJim Jagielski                    elsif( $xb_lang eq "en-US" ) { return 1;  }        # en-US wins
720*b1cdbd2cSJim Jagielski                    else { return $xa_lang cmp $xb_lang; }             # lang compare
721*b1cdbd2cSJim Jagielski                }
722*b1cdbd2cSJim Jagielski                else {
723*b1cdbd2cSJim Jagielski                    return $xa_left_part cmp $xb_left_part;        # Left part compare
724*b1cdbd2cSJim Jagielski                }
725*b1cdbd2cSJim Jagielski            } @lines;
726*b1cdbd2cSJim Jagielski
727*b1cdbd2cSJim Jagielski            if ( open ( SORTEDFILE , "> $outfile" ) ){
728*b1cdbd2cSJim Jagielski                print SORTEDFILE get_license_header();
729*b1cdbd2cSJim Jagielski                foreach my $newline ( @sorted_lines ) {
730*b1cdbd2cSJim Jagielski                    print SORTEDFILE $newline;
731*b1cdbd2cSJim Jagielski                    #print STDOUT $newline;
732*b1cdbd2cSJim Jagielski                }
733*b1cdbd2cSJim Jagielski            }
734*b1cdbd2cSJim Jagielski            close SORTEDFILE;
735*b1cdbd2cSJim Jagielski        } else { print STDERR "WARNING: Can't open file $outfile\n";}
736*b1cdbd2cSJim Jagielski	print "done\n";
737*b1cdbd2cSJim Jagielski
738*b1cdbd2cSJim Jagielski}
739*b1cdbd2cSJim Jagielski#########################################################
740*b1cdbd2cSJim Jagielskisub remove_last_column{
741*b1cdbd2cSJim Jagielski    my $string                  = shift;
742*b1cdbd2cSJim Jagielski    my @alist = split ( "\t" , $string );
743*b1cdbd2cSJim Jagielski    pop @alist;
744*b1cdbd2cSJim Jagielski    return join( "\t" , @alist );
745*b1cdbd2cSJim Jagielski}
746*b1cdbd2cSJim Jagielski
747*b1cdbd2cSJim Jagielski#########################################################
748*b1cdbd2cSJim Jagielskisub rename_language{
749*b1cdbd2cSJim Jagielski    my $fallbackhashhash_ref    = shift;
750*b1cdbd2cSJim Jagielski    my $cur_fallback            = shift;
751*b1cdbd2cSJim Jagielski    my $cur_lang                = shift;
752*b1cdbd2cSJim Jagielski    my $line;
753*b1cdbd2cSJim Jagielski
754*b1cdbd2cSJim Jagielski    foreach my $key( keys ( %{ $fallbackhashhash_ref->{ $cur_fallback } } ) ){
755*b1cdbd2cSJim Jagielski        $line = $fallbackhashhash_ref->{ $cur_fallback }{ $key };
756*b1cdbd2cSJim Jagielski        if( $line =~ /$sdf_regex/ ){
757*b1cdbd2cSJim Jagielski            my $leftpart       = defined $2 ? $2 : '';
758*b1cdbd2cSJim Jagielski            my $lang           = defined $12 ? $12 : '';
759*b1cdbd2cSJim Jagielski            my $rightpart      = defined $13 ? $13 : '';
760*b1cdbd2cSJim Jagielski
761*b1cdbd2cSJim Jagielski            $fallbackhashhash_ref->{ $cur_lang }{ $key } = $leftpart."\t".$cur_lang."\t".$rightpart;
762*b1cdbd2cSJim Jagielski        }
763*b1cdbd2cSJim Jagielski    }
764*b1cdbd2cSJim Jagielski}
765*b1cdbd2cSJim Jagielski
766*b1cdbd2cSJim Jagielski############################################################
767*b1cdbd2cSJim Jagielskisub remove_duplicates{
768*b1cdbd2cSJim Jagielski    my $list_ref    = shift;
769*b1cdbd2cSJim Jagielski    my %tmphash;
770*b1cdbd2cSJim Jagielski    foreach my $key ( @{ $list_ref } ){ $tmphash{ $key } = '' ; }
771*b1cdbd2cSJim Jagielski    @{$list_ref} = keys( %tmphash );
772*b1cdbd2cSJim Jagielski}
773*b1cdbd2cSJim Jagielski
774*b1cdbd2cSJim Jagielski##############################################################
775*b1cdbd2cSJim Jagielskisub fetch_fallback{
776*b1cdbd2cSJim Jagielski    my $sdfparticleslist_ref   = shift;
777*b1cdbd2cSJim Jagielski    my $localizeSDF            = shift;
778*b1cdbd2cSJim Jagielski    my $langhash_ref           = shift;
779*b1cdbd2cSJim Jagielski    my %fallbackhashhash;
780*b1cdbd2cSJim Jagielski    my $cur_lang;
781*b1cdbd2cSJim Jagielski    my @langlist;
782*b1cdbd2cSJim Jagielski
783*b1cdbd2cSJim Jagielski    foreach my $key ( keys ( %{ $langhash_ref } ) ){
784*b1cdbd2cSJim Jagielski        $cur_lang = $langhash_ref->{ $key };
785*b1cdbd2cSJim Jagielski        if ( $cur_lang ne "" ) {
786*b1cdbd2cSJim Jagielski            push @langlist , $cur_lang;
787*b1cdbd2cSJim Jagielski        }
788*b1cdbd2cSJim Jagielski    }
789*b1cdbd2cSJim Jagielski    remove_duplicates( \@langlist );
790*b1cdbd2cSJim Jagielski    foreach  $cur_lang ( @langlist ){
791*b1cdbd2cSJim Jagielski        if( $cur_lang eq "en-US" ){
792*b1cdbd2cSJim Jagielski            read_fallbacks_from_source( $localizeSDF , $cur_lang , \%fallbackhashhash );
793*b1cdbd2cSJim Jagielski        }
794*b1cdbd2cSJim Jagielski    }
795*b1cdbd2cSJim Jagielski
796*b1cdbd2cSJim Jagielski    # remove de / en-US
797*b1cdbd2cSJim Jagielski    my @tmplist;
798*b1cdbd2cSJim Jagielski    foreach $cur_lang( @langlist ){
799*b1cdbd2cSJim Jagielski        if(  $cur_lang ne "en-US" ){
800*b1cdbd2cSJim Jagielski           push @tmplist , $cur_lang;
801*b1cdbd2cSJim Jagielski
802*b1cdbd2cSJim Jagielski        }
803*b1cdbd2cSJim Jagielski    }
804*b1cdbd2cSJim Jagielski    @langlist = @tmplist;
805*b1cdbd2cSJim Jagielski    if ( $#langlist +1 ){
806*b1cdbd2cSJim Jagielski        read_fallbacks_from_particles( $sdfparticleslist_ref , \@langlist , \%fallbackhashhash );
807*b1cdbd2cSJim Jagielski
808*b1cdbd2cSJim Jagielski    }
809*b1cdbd2cSJim Jagielski    return (\%fallbackhashhash);
810*b1cdbd2cSJim Jagielski}
811*b1cdbd2cSJim Jagielski
812*b1cdbd2cSJim Jagielski#########################################################
813*b1cdbd2cSJim Jagielskisub write_file{
814*b1cdbd2cSJim Jagielski
815*b1cdbd2cSJim Jagielski    my $localizeFile = shift;
816*b1cdbd2cSJim Jagielski    my $index_ref    = shift;
817*b1cdbd2cSJim Jagielski
818*b1cdbd2cSJim Jagielski    if( open DESTFILE , "+> $localizeFile" ){
819*b1cdbd2cSJim Jagielski        foreach my $key( %{ $index_ref } ){
820*b1cdbd2cSJim Jagielski            print DESTFILE ($index_ref->{ $key }, "\n" );
821*b1cdbd2cSJim Jagielski        }
822*b1cdbd2cSJim Jagielski        close DESTFILE;
823*b1cdbd2cSJim Jagielski    }else {
824*b1cdbd2cSJim Jagielski      print STDERR "Can't open/create '$localizeFile'";
825*b1cdbd2cSJim Jagielski    }
826*b1cdbd2cSJim Jagielski}
827*b1cdbd2cSJim Jagielski
828*b1cdbd2cSJim Jagielski#########################################################
829*b1cdbd2cSJim Jagielskisub read_file{
830*b1cdbd2cSJim Jagielski
831*b1cdbd2cSJim Jagielski    my $sdffile         = shift;
832*b1cdbd2cSJim Jagielski    my $langhash_ref    = shift;
833*b1cdbd2cSJim Jagielski    my %block           = ();
834*b1cdbd2cSJim Jagielski
835*b1cdbd2cSJim Jagielski    open MYFILE , "< $sdffile"
836*b1cdbd2cSJim Jagielski        or die "Can't open '$sdffile'\n";
837*b1cdbd2cSJim Jagielski        while( <MYFILE>){
838*b1cdbd2cSJim Jagielski          if( /$sdf_regex/ ){
839*b1cdbd2cSJim Jagielski            my $line           = defined $_ ? $_ : '';
840*b1cdbd2cSJim Jagielski            my $prj            = defined $3 ? $3 : '';
841*b1cdbd2cSJim Jagielski            my $file           = defined $4 ? $4 : '';
842*b1cdbd2cSJim Jagielski            my $type           = defined $6 ? $6 : '';
843*b1cdbd2cSJim Jagielski            my $gid            = defined $7 ? $7 : '';
844*b1cdbd2cSJim Jagielski            my $lid            = defined $8 ? $8 : '';
845*b1cdbd2cSJim Jagielski            my $plattform      = defined $10 ? $10 : '';
846*b1cdbd2cSJim Jagielski            my $lang           = defined $12 ? $12 : '';
847*b1cdbd2cSJim Jagielski            my $helpid         = defined $9 ? $9 : '';
848*b1cdbd2cSJim Jagielski
849*b1cdbd2cSJim Jagielski            foreach my $isolang ( keys ( %{ $langhash_ref } ) ){
850*b1cdbd2cSJim Jagielski                if( $isolang=~ /$lang/i || $isolang=~ /all/i ) { $block{$prj.$gid.$lid.$file.$type.$plattform.$helpid } =  $line ; }
851*b1cdbd2cSJim Jagielski            }
852*b1cdbd2cSJim Jagielski        }
853*b1cdbd2cSJim Jagielski    }
854*b1cdbd2cSJim Jagielski    return (\%block);
855*b1cdbd2cSJim Jagielski}
856*b1cdbd2cSJim Jagielski
857*b1cdbd2cSJim Jagielski#########################################################
858*b1cdbd2cSJim Jagielskisub read_fallbacks_from_particles{
859*b1cdbd2cSJim Jagielski
860*b1cdbd2cSJim Jagielski    my $sdfparticleslist_ref    = shift;
861*b1cdbd2cSJim Jagielski    my $isolanglist_ref         = shift;
862*b1cdbd2cSJim Jagielski    my $fallbackhashhash_ref    = shift;
863*b1cdbd2cSJim Jagielski    my $block_ref;
864*b1cdbd2cSJim Jagielski    foreach my $currentfile ( @{ $sdfparticleslist_ref } ){
865*b1cdbd2cSJim Jagielski        if ( open MYFILE , "< $currentfile" ) {
866*b1cdbd2cSJim Jagielski            while(<MYFILE>){
867*b1cdbd2cSJim Jagielski                if( /$sdf_regex/ ){
868*b1cdbd2cSJim Jagielski                    my $line           = defined $_ ? $_ : '';
869*b1cdbd2cSJim Jagielski                    my $prj            = defined $3 ? $3 : '';
870*b1cdbd2cSJim Jagielski                    my $file           = defined $4 ? $4 : '';
871*b1cdbd2cSJim Jagielski                    my $type           = defined $6 ? $6 : '';
872*b1cdbd2cSJim Jagielski                    my $gid            = defined $7 ? $7 : '';
873*b1cdbd2cSJim Jagielski                    my $lid            = defined $8 ? $8 : '';
874*b1cdbd2cSJim Jagielski                    my $lang           = defined $12 ? $12 : '';
875*b1cdbd2cSJim Jagielski                    my $plattform      = defined $10 ? $10 : '';
876*b1cdbd2cSJim Jagielski                    my $helpid         = defined $9 ? $9 : '';
877*b1cdbd2cSJim Jagielski
878*b1cdbd2cSJim Jagielski                    chomp( $line );
879*b1cdbd2cSJim Jagielski
880*b1cdbd2cSJim Jagielski                    foreach my $isolang ( @{$isolanglist_ref}  ){
881*b1cdbd2cSJim Jagielski                        if( $isolang=~ /$lang/i ) {
882*b1cdbd2cSJim Jagielski                            $fallbackhashhash_ref->{ $isolang }{ $prj.$gid.$lid.$file.$type.$plattform.$helpid } =  $line ;
883*b1cdbd2cSJim Jagielski                        }
884*b1cdbd2cSJim Jagielski                    }
885*b1cdbd2cSJim Jagielski                }
886*b1cdbd2cSJim Jagielski            }
887*b1cdbd2cSJim Jagielski       }else { print STDERR "WARNING: Can't open file $currentfile"; }
888*b1cdbd2cSJim Jagielski    }
889*b1cdbd2cSJim Jagielski}
890*b1cdbd2cSJim Jagielski
891*b1cdbd2cSJim Jagielski#########################################################
892*b1cdbd2cSJim Jagielskisub read_fallbacks_from_source{
893*b1cdbd2cSJim Jagielski
894*b1cdbd2cSJim Jagielski    my $sdffile                 = shift;
895*b1cdbd2cSJim Jagielski    my $isolang                 = shift;
896*b1cdbd2cSJim Jagielski    my $fallbackhashhash_ref    = shift;
897*b1cdbd2cSJim Jagielski    my $block_ref;
898*b1cdbd2cSJim Jagielski    # read fallback for single file
899*b1cdbd2cSJim Jagielski    open MYFILE , "< $sdffile"
900*b1cdbd2cSJim Jagielski        or die "Can't open '$sdffile'\n";
901*b1cdbd2cSJim Jagielski
902*b1cdbd2cSJim Jagielski    while( <MYFILE>){
903*b1cdbd2cSJim Jagielski          if( /$sdf_regex/ ){
904*b1cdbd2cSJim Jagielski            my $line           = defined $_ ? $_ : '';
905*b1cdbd2cSJim Jagielski            my $prj            = defined $3 ? $3 : '';
906*b1cdbd2cSJim Jagielski            my $file           = defined $4 ? $4 : '';
907*b1cdbd2cSJim Jagielski            my $type           = defined $6 ? $6 : '';
908*b1cdbd2cSJim Jagielski            my $gid            = defined $7 ? $7 : '';
909*b1cdbd2cSJim Jagielski            my $lid            = defined $8 ? $8 : '';
910*b1cdbd2cSJim Jagielski            my $helpid         = defined $9 ? $9 : '';
911*b1cdbd2cSJim Jagielski            my $lang           = defined $12 ? $12 : '';
912*b1cdbd2cSJim Jagielski            my $plattform      = defined $10 ? $10 : '';
913*b1cdbd2cSJim Jagielski
914*b1cdbd2cSJim Jagielski            chomp( $line );
915*b1cdbd2cSJim Jagielski            if( $isolang=~ /$lang/i ) { $fallbackhashhash_ref->{ $isolang }{ $prj.$gid.$lid.$file.$type.$plattform.$helpid } =  $line ;
916*b1cdbd2cSJim Jagielski            }
917*b1cdbd2cSJim Jagielski        }
918*b1cdbd2cSJim Jagielski    }
919*b1cdbd2cSJim Jagielski}
920*b1cdbd2cSJim Jagielski
921*b1cdbd2cSJim Jagielski#########################################################
922*b1cdbd2cSJim Jagielskisub parseLanguages{
923*b1cdbd2cSJim Jagielski
924*b1cdbd2cSJim Jagielski    my $bAll;
925*b1cdbd2cSJim Jagielski    my $bUseLocalize;
926*b1cdbd2cSJim Jagielski    my $bHasSourceLanguage="";
927*b1cdbd2cSJim Jagielski    my $bFakeEnglish="";
928*b1cdbd2cSJim Jagielski    my %langhash;
929*b1cdbd2cSJim Jagielski    my $iso="";
930*b1cdbd2cSJim Jagielski    my $fallback="";
931*b1cdbd2cSJim Jagielski
932*b1cdbd2cSJim Jagielski    #### -l all
933*b1cdbd2cSJim Jagielski    if(   $languages=~ /all/ ){
934*b1cdbd2cSJim Jagielski        $bAll = "TRUE";
935*b1cdbd2cSJim Jagielski        $bHasSourceLanguage = "TRUE";
936*b1cdbd2cSJim Jagielski    }
937*b1cdbd2cSJim Jagielski    ### -l fr=de,de
938*b1cdbd2cSJim Jagielski    elsif( $languages=~ /.*,.*/ ){
939*b1cdbd2cSJim Jagielski        my @tmpstr =  split "," , $languages;
940*b1cdbd2cSJim Jagielski        for my $lang ( @tmpstr ){
941*b1cdbd2cSJim Jagielski            if( $lang=~ /([a-zA-Z]{2,3}(-[a-zA-Z\-]*)*)(=([a-zA-Z]{2,3}(-[a-zA-Z\-]*)*))?/ ){
942*b1cdbd2cSJim Jagielski                $iso        = $1;
943*b1cdbd2cSJim Jagielski                $fallback   = $4;
944*b1cdbd2cSJim Jagielski
945*b1cdbd2cSJim Jagielski                if( ( $iso && $iso=~ /(en-US)/i )  || ( $fallback && $fallback=~ /(en-US)/i ) ) {
946*b1cdbd2cSJim Jagielski                    $bUseLocalize = "TRUE";
947*b1cdbd2cSJim Jagielski                }
948*b1cdbd2cSJim Jagielski                if( ( $iso && $iso=~ /(en-US)/i ) ) {
949*b1cdbd2cSJim Jagielski                    $bHasSourceLanguage = "TRUE";
950*b1cdbd2cSJim Jagielski                }
951*b1cdbd2cSJim Jagielski             if( $fallback ) { $langhash{ $iso } = $fallback;   }
952*b1cdbd2cSJim Jagielski             else            { $langhash{ $iso } = "";          }
953*b1cdbd2cSJim Jagielski            }
954*b1cdbd2cSJim Jagielski        }
955*b1cdbd2cSJim Jagielski    }
956*b1cdbd2cSJim Jagielski    ### -l de
957*b1cdbd2cSJim Jagielski    else{
958*b1cdbd2cSJim Jagielski        if( $languages=~ /([a-zA-Z]{2,3}(-[a-zA-Z\-]*)*)(=([a-zA-Z]{2,3}(-[a-zA-Z\-]*)*))?/ ){
959*b1cdbd2cSJim Jagielski            $iso        = $1;
960*b1cdbd2cSJim Jagielski            $fallback   = $4;
961*b1cdbd2cSJim Jagielski
962*b1cdbd2cSJim Jagielski            if( ( $iso && $iso=~ /(en-US)/i )  || ( $fallback && $fallback=~ /(en-US)/i ) ) {
963*b1cdbd2cSJim Jagielski                $bUseLocalize = "TRUE";
964*b1cdbd2cSJim Jagielski
965*b1cdbd2cSJim Jagielski            }
966*b1cdbd2cSJim Jagielski            if( ( $iso && $iso=~ /(en-US)/i )  ) {
967*b1cdbd2cSJim Jagielski                $bHasSourceLanguage = "TRUE";
968*b1cdbd2cSJim Jagielski            }
969*b1cdbd2cSJim Jagielski
970*b1cdbd2cSJim Jagielski             if( $fallback ) { $langhash{ $iso } = $fallback;   }
971*b1cdbd2cSJim Jagielski             else            { $langhash{ $iso } = "";          }
972*b1cdbd2cSJim Jagielski        }
973*b1cdbd2cSJim Jagielski    }
974*b1cdbd2cSJim Jagielski    # HACK en-US always needed!
975*b1cdbd2cSJim Jagielski    if( !$bHasSourceLanguage ){
976*b1cdbd2cSJim Jagielski        #$bHasSourceLanguage = "TRUE";
977*b1cdbd2cSJim Jagielski        $bUseLocalize = "TRUE";
978*b1cdbd2cSJim Jagielski        $bFakeEnglish = "TRUE";
979*b1cdbd2cSJim Jagielski        $langhash{ "en-US" } = "";
980*b1cdbd2cSJim Jagielski    }
981*b1cdbd2cSJim Jagielski    return ( $bAll ,  $bUseLocalize , \%langhash , $bHasSourceLanguage, $bFakeEnglish);
982*b1cdbd2cSJim Jagielski}
983*b1cdbd2cSJim Jagielski
984*b1cdbd2cSJim Jagielski#########################################################
985*b1cdbd2cSJim Jagielskisub parse_options{
986*b1cdbd2cSJim Jagielski
987*b1cdbd2cSJim Jagielski    my $help;
988*b1cdbd2cSJim Jagielski    my $merge;
989*b1cdbd2cSJim Jagielski    my $extract;
990*b1cdbd2cSJim Jagielski    my $success = GetOptions('f=s' => \$sdffile , 'l=s' => \$languages , 's=s' => \$srcpath ,  'h' => \$help , 'v' => \$bVerbose ,
991*b1cdbd2cSJim Jagielski                             'm' => \$merge , 'e' => \$extract , 'x' => \$no_sort , 'd' => \$use_default_date );
992*b1cdbd2cSJim Jagielski    $outputfile = $sdffile;
993*b1cdbd2cSJim Jagielski
994*b1cdbd2cSJim Jagielski    #print STDOUT "DBG: lang = $languages\n";
995*b1cdbd2cSJim Jagielski    if( !$srcpath ){
996*b1cdbd2cSJim Jagielski        #$srcpath = "$ENV{SRC_ROOT}";
997*b1cdbd2cSJim Jagielski        if( !$srcpath ){
998*b1cdbd2cSJim Jagielski	        print STDERR "No path to the source root found!\n\n";
999*b1cdbd2cSJim Jagielski	        usage();
1000*b1cdbd2cSJim Jagielski            exit(1);
1001*b1cdbd2cSJim Jagielski        }
1002*b1cdbd2cSJim Jagielski    }
1003*b1cdbd2cSJim Jagielski    if( $help || !$success || $#ARGV > 1 || ( !$sdffile ) ){
1004*b1cdbd2cSJim Jagielski        usage();
1005*b1cdbd2cSJim Jagielski        exit(1);
1006*b1cdbd2cSJim Jagielski    }
1007*b1cdbd2cSJim Jagielski    if( $merge && $sdffile && ! ( -r $sdffile)){
1008*b1cdbd2cSJim Jagielski        print STDERR "Can't open file '$sdffile'\n";
1009*b1cdbd2cSJim Jagielski        exit(1);
1010*b1cdbd2cSJim Jagielski    }
1011*b1cdbd2cSJim Jagielski    if( !( $languages=~ /[a-zA-Z]{2,3}(-[a-zA-Z\-]*)*(=[a-zA-Z]{2,3}(-[a-zA-Z\-]*)*)?(,[a-zA-Z]{2,3}(-[a-zA-Z\-]*)*(=[a-zA-Z]{2,3}(-[a-zA-Z\-]*)*)?)*/ ) ){
1012*b1cdbd2cSJim Jagielski        print STDERR "Please check the -l iso code\n";
1013*b1cdbd2cSJim Jagielski        exit(1);
1014*b1cdbd2cSJim Jagielski    }
1015*b1cdbd2cSJim Jagielski    if( ( !$merge && !$extract ) || ( $merge && $extract ) ){ usage();exit( -1 );}
1016*b1cdbd2cSJim Jagielski    if( $extract ){ $mode = "extract"; }
1017*b1cdbd2cSJim Jagielski    else          { $mode = "merge";   }
1018*b1cdbd2cSJim Jagielski}
1019*b1cdbd2cSJim Jagielski
1020*b1cdbd2cSJim Jagielski#########################################################
1021*b1cdbd2cSJim Jagielskisub usage{
1022*b1cdbd2cSJim Jagielski
1023*b1cdbd2cSJim Jagielski    print STDERR "Usage: localize.pl\n";
1024*b1cdbd2cSJim Jagielski    print STDERR "Split or collect SDF files\n";
1025*b1cdbd2cSJim Jagielski    print STDERR "           merge: -m -f <sdffile>    -l l1[=f1][,l2[=f2]][...] [ -s <sourceroot> ]\n";
1026*b1cdbd2cSJim Jagielski    print STDERR "         extract: -e -f <outputfile> -l <lang> [ -s <sourceroot> ] [-d]\n";
1027*b1cdbd2cSJim Jagielski    print STDERR "Options:\n";
1028*b1cdbd2cSJim Jagielski    print STDERR "    -h              help\n";
1029*b1cdbd2cSJim Jagielski    print STDERR "    -m              Merge mode\n";
1030*b1cdbd2cSJim Jagielski    print STDERR "    -e              Extract mode\n";
1031*b1cdbd2cSJim Jagielski    print STDERR "    -f <sdffile>    To split a big SDF file into particles\n";
1032*b1cdbd2cSJim Jagielski    print STDERR "       <outputfile> To collect and join all particles to one big file\n";
1033*b1cdbd2cSJim Jagielski    print STDERR "    -s <sourceroot> Path to the modules, if no \$SRC_ROOT is set\n";
1034*b1cdbd2cSJim Jagielski    print STDERR "    -l ( all | <isocode> | <isocode>=fallback ) comma seperated languages\n";
1035*b1cdbd2cSJim Jagielski    print STDERR "    -d              Use default date in extracted sdf file\n";
1036*b1cdbd2cSJim Jagielski    print STDERR "    -v              Verbose\n";
1037*b1cdbd2cSJim Jagielski    print STDERR "\nExample:\n";
1038*b1cdbd2cSJim Jagielski    print STDERR "\nlocalize -e -l en-US,pt-BR=en-US -f my.sdf\n( Extract en-US and pt-BR with en-US fallback )\n";
1039*b1cdbd2cSJim Jagielski    print STDERR "\nlocalize -m -l cs -f my.sdf\n( Merge cs translation into the sourcecode ) \n";
1040*b1cdbd2cSJim Jagielski}
1041*b1cdbd2cSJim Jagielski
1042*b1cdbd2cSJim Jagielski#            my $line           = defined $_ ? $_ : '';
1043*b1cdbd2cSJim Jagielski#            my $leftpart       = defined $2 ? $2 : '';
1044*b1cdbd2cSJim Jagielski#            my $prj            = defined $3 ? $3 : '';
1045*b1cdbd2cSJim Jagielski#            my $file           = defined $4 ? $4 : '';
1046*b1cdbd2cSJim Jagielski#            my $dummy          = defined $5 ? $5 : '';
1047*b1cdbd2cSJim Jagielski#            my $type           = defined $6 ? $6 : '';
1048*b1cdbd2cSJim Jagielski#            my $gid            = defined $7 ? $7 : '';
1049*b1cdbd2cSJim Jagielski#            my $lid            = defined $8 ? $8 : '';
1050*b1cdbd2cSJim Jagielski#            my $helpid         = defined $9 ? $9 : '';
1051*b1cdbd2cSJim Jagielski#            my $plattform      = defined $10 ? $10 : '';
1052*b1cdbd2cSJim Jagielski#            my $width          = defined $11 ? $11 : '';
1053*b1cdbd2cSJim Jagielski#            my $lang           = defined $12 ? $12 : '';
1054*b1cdbd2cSJim Jagielski#            my $rightpart      = defined $13 ? $13 : '';
1055*b1cdbd2cSJim Jagielski#            my $text           = defined $14 ? $14 : '';
1056*b1cdbd2cSJim Jagielski#            my $helptext       = defined $15 ? $15 : '';
1057*b1cdbd2cSJim Jagielski#            my $quickhelptext  = defined $16 ? $16 : '';
1058*b1cdbd2cSJim Jagielski#            my $title          = defined $17 ? $17 : '';
1059*b1cdbd2cSJim Jagielski#            my $timestamp      = defined $18 ? $18 : '';
1060*b1cdbd2cSJim Jagielski
1061