: # -*- perl -*- eval 'exec perl -wS $0 ${1+"$@"}' if 0; #************************************************************** # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # #************************************************************** # create java installer help files in html format for all languages defined in ulf file use Cwd; use File::Copy; if( $#ARGV < 2 ) { print < : separator, used on the platform (slash or backslash) : path, in which the ulf file(s) can be found : path, in which the help files will be created ENDHELP exit; } $separator = $ARGV[0]; $inputpath = $ARGV[1]; $outputpath = $ARGV[2]; $inputpath =~ s/\Q$separator\E\s*$//; $outputpath =~ s/\Q$separator\E\s*$//; if ( ! -d $outputpath ) { mkdir $outputpath; } print "Separator: $separator \n"; print "Input path: $inputpath \n"; print "Output path: $outputpath \n"; my $localdir = cwd(); my $ulffilename = "setupstrings.ulf"; my $helpfilename = "helpfilenames.txt"; my $defaultlanguage = "en-US"; $ulffilename = $inputpath . $separator . $ulffilename; my $ulffile = read_file($ulffilename); my $helpfilenames = read_file($helpfilename); my $allhelpfilenames = collect_helpfile_names($helpfilenames); my $alllanguages = get_all_languages($ulffile); my @allnewpropertyfiles = (); for ( my $i = 0; $i <= $#{$allhelpfilenames}; $i++ ) { my $helpfilename = ${$allhelpfilenames}[$i]; for ( my $j = 0; $j <= $#{$alllanguages}; $j++ ) { my $language = ${$alllanguages}[$j]; # Creating content of help file my $helpfilecontent = collect_helpfile_content($helpfilename, $ulffile, $language); # Saving helpfile my $savefilename = $helpfilename . "_" . $language . ".html"; $savefilename = $outputpath . $separator . $savefilename; save_file($savefilename, $helpfilecontent); if ( $language eq $defaultlanguage ) { $savefilename = $helpfilename . ".html"; $savefilename = $outputpath . $separator . $savefilename; save_file($savefilename, $helpfilecontent); } } } exit; sub main::read_directory { my ($dir, $ext) = @_; my @content = (); my $direntry; opendir(DIR, $dir); foreach $direntry (readdir (DIR)) { next if $direntry eq "."; next if $direntry eq ".."; next if ( ! ( $direntry =~ /\.\Q$ext\E\s*$/ )); # my $completeentry = $dir . $separator . $direntry; # push(@content, $completeentry); push(@content, $direntry); } closedir(DIR); return \@content; } sub main::read_file { my ($filename) = @_; open( IN, "<$filename" ) || die "cannot open $filename"; my @content = ; close( IN ); return \@content; } sub main::collect_helpfile_content { my ($helpfilename, $ulffile, $language) = @_; my @helpfilecontent = (); my $stringhash = create_string_hash($ulffile, $language); # Collecting all strings for one html file. # For "Prologue_de.html" all files need to begin with "STRING_PROLOGUE_X" # The "X" is the ordering number. my $basestring = "STRING_" . uc($helpfilename) . "_"; for ( my $i = 0; $i <= 10; $i++ ) # 10 strings possible for each html file { my $key = $basestring . $i; if ( exists $stringhash->{$key} ) { my $content = $stringhash->{$key} . "\n

\n"; push(@helpfilecontent, $content); } } return \@helpfilecontent; } sub main::collect_helpfile_names { my ($helpfilecontent) = @_; my @allhelpfiles = (); for ( my $i = 0; $i <= $#{$helpfilecontent}; $i++ ) { if ( ${$helpfilecontent}[$i] =~ /^\s*#/ ) { next; } # comment line if ( ${$helpfilecontent}[$i] =~ /^\s*$/ ) { next; } # empty line my $filename = ${$helpfilecontent}[$i]; $filename =~ s/\s//g; push(@allhelpfiles, $filename); } return \@allhelpfiles; } sub main::get_all_languages { my ($ulffile) = @_; my @languages = (); my $record = 0; for ( my $i = 0; $i <= $#{$ulffile}; $i++ ) { if (( ${$ulffile}[$i] =~ /^\s*\[.*]\s*$/ ) && ( $record )) { last; } if (( ${$ulffile}[$i] =~ /^\s*\[.*]\s*$/ ) && ( $record == 0 )) { $record = 1; } if (( $record ) && ( ${$ulffile}[$i] =~ /^\s*(.+?)\s*\=/ )) { $language = $1; push(@languages, $language); } } my $languagestring = ""; for ( my $i = 0; $i <= $#languages; $i++ ) { $languagestring = $languagestring . $languages[$i] . ","; } $languagestring =~ s/,\s*$//; print "Languages: $languagestring\n"; return \@languages; } sub main::create_string_hash { my ($ulffile, $language) = @_; my %stringhash = (); my $key = ""; my $value_defined = 0; for ( my $i = 0; $i <= $#{$ulffile}; $i++ ) { if ( ${$ulffile}[$i] =~ /^\s*\[(.*)\]\s*$/ ) { $key = $1; $value_defined = 0; } if (( ${$ulffile}[$i] =~ /^\s*\Q$defaultlanguage\E\s*=\s*\"(.*)\"\s*$/ ) && ( ! $value_defined )) { $value = $1; # defaulting to english $stringhash{$key} = $value; } if (( ${$ulffile}[$i] =~ /^\s*\Q$language\E\s*=\s*\"(.*)\"\s*$/ ) && ( ! $value_defined )) { $value = $1; $stringhash{$key} = $value; $value_defined = 1; } } # additional replacement for ${LANGUAGE}, not defined in ulf file my $languagekey = "LANGUAGE"; $stringhash{$languagekey} = $language; # print_hash(\%stringhash); return \%stringhash; } sub main::print_hash { my ( $hashref ) = @_; print "Hash contains:\n"; my $key; foreach $key (keys %{$hashref} ) { print "Key: $key, Value: $hashref->{$key}\n"; } } sub main::save_file { my ($filename, $filecontent) = @_; if ( open( OUT, ">$filename" ) ) { print OUT @{$filecontent}; close( OUT); } push(@allnewpropertyfiles, $filename); print "Created file: $filename\n"; }