summaryrefslogtreecommitdiff
path: root/solenv/bin/modules/pre2par
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@novell.com>2010-12-17 20:04:29 +0000
committerMichael Meeks <michael.meeks@novell.com>2010-12-17 20:05:45 +0000
commit48d75286719b771dbc881ffb49fc88c537a15938 (patch)
tree7c22d39a97d6b014b58ae2f78cce3fbb8e573f46 /solenv/bin/modules/pre2par
parentd7b0062269a05fbfd01f39c0be86d17f4e9aa803 (diff)
make pre2par 5x faster, and simpler too
Diffstat (limited to 'solenv/bin/modules/pre2par')
-rw-r--r--solenv/bin/modules/pre2par/language.pm39
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;
}
- }
}
}
}