: # -*- perl -*- eval 'exec perl -wS $0 ${1+"$@"}' if 0; #************************************************************************* # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # Copyright 2000, 2010 Oracle and/or its affiliates. # # OpenOffice.org - a multi-platform office productivity suite # # This file is part of OpenOffice.org. # # OpenOffice.org is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License version 3 # only, as published by the Free Software Foundation. # # OpenOffice.org is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License version 3 for more details # (a copy is included in the LICENSE file that accompanied this code). # # You should have received a copy of the GNU Lesser General Public License # version 3 along with OpenOffice.org. If not, see # # for a copy of the LGPLv3 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"; }