Kaydet (Commit) 4c6ca9c5 authored tarafından Michael Meeks's avatar Michael Meeks Kaydeden (comit) Fridrich Štrba

make pre2par 5x faster, and simpler too

üst e769153f
...@@ -105,29 +105,25 @@ sub get_language_block_from_language_file ...@@ -105,29 +105,25 @@ sub get_language_block_from_language_file
} }
############################################ ############################################
# collecting all replace strings # collecting all replace variables
# in a language file # in a language file
############################################ ############################################
sub get_all_replace_strings sub get_all_replace_variables
{ {
my ($langfile) = @_; my ($langfile) = @_;
my @allstrings = (); my %allvars = ();
for ( my $i = 0; $i <= $#{$langfile}; $i++ ) for ( my $i = 0; $i <= $#{$langfile}; $i++ )
{ {
if ( ${$langfile}[$i] =~ /^\s*\[\s*(.*?)\s*\]\s*$/ ) if ( ${$langfile}[$i] =~ /^\s*\[\s*(.*?)\s*\]\s*$/ )
{ {
my $replacestring = $1; $allvars{$1} = 1;
if (! pre2par::existence::exists_in_array($replacestring, \@allstrings))
{
push(@allstrings, $replacestring);
}
} }
} }
return \@allstrings; return \%allvars;
} }
############################################ ############################################
...@@ -139,34 +135,33 @@ sub localize ...@@ -139,34 +135,33 @@ sub localize
{ {
my ($parfile, $langfile) = @_; 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++ ) for ( my $i = 0; $i <= $#{$parfile}; $i++ )
{ {
my $oneline = ${$parfile}[$i]; my $oneline = ${$parfile}[$i];
for ( my $j = 0; $j <= $#{$allreplacestrings}; $j++ ) if ( $oneline =~ $langlinere) {
{
if ( $oneline =~ /\b${$allreplacestrings}[$j]\b/ ) # Not for basic scripts
{
my $oldstring = ${$allreplacestrings}[$j];
if ( $oneline =~ /^\s*\w+\s*\(([\w-]+)\)\s*\=/ )
{
my $language = $1; # can be "01" or "en" or "en-US" or ... my $language = $1; # can be "01" or "en" or "en-US" or ...
my $variable = $2;
my $languageblock = get_language_block_from_language_file($oldstring, $langfile); # print "line '$oneline' split to '$language' '$variable'\n";
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); 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; ${$parfile}[$i] = $oneline;
} }
} }
} }
}
} }
1; 1;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment