diff options
author | Michael Meeks <michael.meeks@novell.com> | 2010-12-17 20:04:29 +0000 |
---|---|---|
committer | Fridrich Štrba <fridrich.strba@bluewin.ch> | 2010-12-17 21:58:09 +0100 |
commit | 4c6ca9c54e58313578dcec8b305f08cbe11df519 (patch) | |
tree | fd19503cf74189be64a237f2ab0050398f6ee8b3 | |
parent | e769153f4b7c24e4fe684633b84570efeaca194b (diff) |
make pre2par 5x faster, and simpler too
-rw-r--r-- | solenv/bin/modules/pre2par/language.pm | 39 |
1 files changed, 17 insertions, 22 deletions
diff --git a/solenv/bin/modules/pre2par/language.pm b/solenv/bin/modules/pre2par/language.pm index b5dc336ba847..93eaa0838853 100644 --- a/solenv/bin/modules/pre2par/language.pm +++ b/solenv/bin/modules/pre2par/language.pm @@ -105,29 +105,25 @@ sub get_language_block_from_language_file } ############################################ -# collecting all replace strings +# collecting all replace variables # in a language file ############################################ -sub get_all_replace_strings +sub get_all_replace_variables { my ($langfile) = @_; - my @allstrings = (); + my %allvars = (); for ( my $i = 0; $i <= $#{$langfile}; $i++ ) { if ( ${$langfile}[$i] =~ /^\s*\[\s*(.*?)\s*\]\s*$/ ) { - my $replacestring = $1; - if (! pre2par::existence::exists_in_array($replacestring, \@allstrings)) - { - push(@allstrings, $replacestring); - } + $allvars{$1} = 1; } } - return \@allstrings; + return \%allvars; } ############################################ @@ -139,32 +135,31 @@ sub localize { my ($parfile, $langfile) = @_; - my $allreplacestrings = get_all_replace_strings($langfile); + my $replace_hash = get_all_replace_variables($langfile); + # parse lines of the form Name (st) = STR_NAME_MODULE_HELPPACK_OC; + # for variable substitution + my $langlinere = qr/^\s*\w+\s*\(([\w-]+)\)\s*\=\s*([\w-]+)\s*;/; for ( my $i = 0; $i <= $#{$parfile}; $i++ ) { my $oneline = ${$parfile}[$i]; - for ( my $j = 0; $j <= $#{$allreplacestrings}; $j++ ) - { - if ( $oneline =~ /\b${$allreplacestrings}[$j]\b/ ) # Not for basic scripts - { - my $oldstring = ${$allreplacestrings}[$j]; + if ( $oneline =~ $langlinere) { + my $language = $1; # can be "01" or "en" or "en-US" or ... + my $variable = $2; - if ( $oneline =~ /^\s*\w+\s*\(([\w-]+)\)\s*\=/ ) - { - my $language = $1; # can be "01" or "en" or "en-US" or ... +# print "line '$oneline' split to '$language' '$variable'\n"; - my $languageblock = get_language_block_from_language_file($oldstring, $langfile); + if (defined $replace_hash->{$variable}) { + my $languageblock = get_language_block_from_language_file($variable, $langfile); my $newstring = get_language_string_from_language_block($languageblock, $language); - if ( $newstring eq "" ) { $newstring = "\"" . $oldstring . "\""; } + if ( $newstring eq "" ) { $newstring = "\"" . $variable . "\""; } - $oneline =~ s/$oldstring/$newstring/g; + $oneline =~ s/$variable/$newstring/g; ${$parfile}[$i] = $oneline; } - } } } } |