Changeset 10041


Ignore:
Timestamp:
2005-06-10T10:58:10+12:00 (19 years ago)
Author:
mdewsnip
Message:

Added a check to prevent an infinite loop when reading badly formatted macrofiles, and other minor changes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gsdl/bin/script/gti.pl

    r10040 r10041  
    323323    # The query string
    324324    my $query_string = join(' ', @_);
    325     # &log_message("Query string: $query_string");
    326325
    327326    # Check that the necessary arguments were supplied
     
    501500    # Apply the submitted translations
    502501    foreach my $chunk_key (keys(%target_file_key_to_submission_mapping)) {
     502    # Only apply the submission if it is a change, unless -force_submission has been specified
    503503    if ($force_submission_flag || $target_file_key_to_submission_mapping{$chunk_key} ne $target_file_key_to_text_mapping{$chunk_key}) {
    504504        $target_file_key_to_text_mapping{$chunk_key} = $target_file_key_to_submission_mapping{$chunk_key};
     
    553553
    554554    foreach my $translation_file (@$gti_translation_files) {
    555     # Have we found the correct translation file?
    556     if ($translation_file_key eq $translation_file->{'key'}) {
    557         # Resolve the target language file
    558         my $target_language_file = $translation_file->{'target_file'};
    559         if ($target_language_file =~ /(\{.+\;.+\})/) {
    560         my $unresolved_target_language_file_part = $1;
    561 
    562         # Check for a special case for the target language code
    563         if ($unresolved_target_language_file_part =~ /(\{|\;)$target_language_code:([^\;]+)(\;|\})/) {
    564             my $resolved_target_language_file_part = $2;
    565             $target_language_file =~ s/$unresolved_target_language_file_part/$resolved_target_language_file_part/;
    566         }
    567         # Otherwise use the last part as the default value
    568         else {
    569             my ($default_target_language_file_part) = $unresolved_target_language_file_part =~ /([^\;]+)\}/;
    570             $target_language_file =~ s/$unresolved_target_language_file_part/\{$default_target_language_file_part\}/;           
    571         }
     555    # If this isn't the correct translation file, move onto the next one
     556    next if ($translation_file_key ne $translation_file->{'key'});
     557
     558    # Resolve the target language file
     559    my $target_language_file = $translation_file->{'target_file'};
     560    if ($target_language_file =~ /(\{.+\;.+\})/) {
     561        my $unresolved_target_language_file_part = $1;
     562
     563        # Check for a special case for the target language code
     564        if ($unresolved_target_language_file_part =~ /(\{|\;)$target_language_code:([^\;]+)(\;|\})/) {
     565        my $resolved_target_language_file_part = $2;
     566        $target_language_file =~ s/$unresolved_target_language_file_part/$resolved_target_language_file_part/;
    572567        }
    573 
    574         # Resolve instances of {iso_639_1_target_language_name}
    575         my $iso_639_1_target_language_name = $iso639::fromiso639{$target_language_code};
    576         $iso_639_1_target_language_name =~ tr/A-Z/a-z/ if $iso_639_1_target_language_name;
    577         $target_language_file =~ s/\{iso_639_1_target_language_name\}/$iso_639_1_target_language_name/g;
    578 
    579         # Resolve instances of {target_language_code}
    580         $target_language_file =~ s/\{target_language_code\}/$target_language_code/g;
    581 
    582         return ($translation_file->{'source_file'}, $target_language_file, $translation_file->{'file_type'});
    583     }
     568        # Otherwise use the last part as the default value
     569        else {
     570        my ($default_target_language_file_part) = $unresolved_target_language_file_part =~ /([^\;]+)\}/;
     571        $target_language_file =~ s/$unresolved_target_language_file_part/\{$default_target_language_file_part\}/;           
     572        }
     573    }
     574
     575    # Resolve instances of {iso_639_1_target_language_name}
     576    my $iso_639_1_target_language_name = $iso639::fromiso639{$target_language_code};
     577    $iso_639_1_target_language_name =~ tr/A-Z/a-z/ if $iso_639_1_target_language_name;
     578    $target_language_file =~ s/\{iso_639_1_target_language_name\}/$iso_639_1_target_language_name/g;
     579
     580    # Resolve instances of {target_language_code}
     581    $target_language_file =~ s/\{target_language_code\}/$target_language_code/g;
     582
     583    return ($translation_file->{'source_file'}, $target_language_file, $translation_file->{'file_type'});
    584584    }
    585585
     
    737737    my @target_file_keys_requiring_translation = ();
    738738    foreach my $chunk_key (keys(%$source_file_key_to_text_mapping)) {
    739     if (!$target_file_key_to_text_mapping->{$chunk_key} && $source_file_key_to_text_mapping->{$chunk_key}) {
     739    if ($source_file_key_to_text_mapping->{$chunk_key} && !$target_file_key_to_text_mapping->{$chunk_key}) {
    740740        # &log_message("Chunk with key $chunk_key needs translating.");
    741741        push(@target_file_keys_requiring_translation, $chunk_key);
     
    854854        while ($line !~ /\}$/) {
    855855        $i++;
     856        if ($i == scalar(@file_lines)) {
     857            &throw_fatal_error("Could not find end of macro $macro_key.");
     858        }
    856859        $line = $file_lines[$i];
    857860        $line =~ s/\s*([^\\]\#.+)?$//;  # Remove any comments and nasty whitespace
Note: See TracChangeset for help on using the changeset viewer.