blob: f2c74ed50516de43c8791c62aca58a1a87913597 [file] [log] [blame]
: # -*- 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 <<ENDHELP;
USAGE: $0 <separator> <ulf_file_path> <outputpath>
<separator>: separator, used on the platform (slash or backslash)
<ulf_file_path>: path, in which the ulf file(s) can be found
<outputpath>: 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 = <IN>;
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<p>\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";
}