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