#!/usr/bin/perl my %nrval, %tain, $max, $tainted, $ignored, $preserved, $added, $ignerr, $uname, $name, $pref; sub ReadTrans($) { my $nr, $val, $found, $name; $found = 0; $name = shift; $name .= ".i18n"; open TMPL, "<$name" || die "Could not open file $name."; while () { if (m/^([0-9]{1,4}):(.*)/) { $nr = sprintf ("%04d", $1); $max = $nr; $val = $2; $nrval{$nr}=$val; $found++; } elsif (m/^#/) { } else { print "Can't understand: $_\n"; } } print "Updating translation to $found strings.\n"; } sub ReadTainted($) { my $name = shift; %tain = {}; $name .= ".tainted"; open IN, "<$name" || return; while () { if (m/^([0-9]{4}):/) { $tain{$1} = 1; } } } sub ProcessLine($) { my $line = shift; if ($line =~ m/^#[0-9][0-9]*:/) { } elsif ($line =~ m/^#/) { print OUT "$line\n"; $ignored++; } elsif ($line =~ m/^([0-9][0-9]*):/) { $neu = sprintf ("%04d", $1); for ($last++ ; $last < $neu; $last++) { $last = sprintf ("%04d", $last); next unless defined $nrval{$last}; print OUT "#$last:$nrval{$last}\n"; $added++; } $last = sprintf ("%04d", $last); if ($tain{$neu}) { print OUT "#-#$line\n"; print OUT "#$last:$nrval{$last}\n"; $tainted++; } else { if ($neu != 9999) { print OUT "$line\n"; $preserved++; } } $last = $neu; } else { print OUT "#$line\n"; $ignerr++; } } if (stat "lang/en.i18n") { chdir "lang"; $pref = "../"; } if (stat "../lang/en.i18n" and not stat "en.i18n") { chdir "../lang"; $pref = "../src/"; } if ($#ARGV == -1) { @ARGV = glob "*.i18n"; $pref = ""; } ReadTrans ("build"); print "File Comments Junk Old Changed New\n"; while ($uname = shift) { next unless $uname cmp "build.i18n"; $ver = `grep ^1003 $uname`; $ver =~ s/^1003://; chomp $ver; $ver = $ver + 0; system "cvs diff -u0 -r i18n-$ver build.i18n | grep \"^-[0-9]\" | sed \"s,^-,,\" | sort -n -t : -k 1,1 -u -o build.tainted"; ReadTainted ("build"); $name = $pref . $uname; stat "$name~" && next; rename ($name, "$name~"); open IN, "<$name~" || die; open OUT, ">$name" || die; $ignored = 0; $preserved = 0; $added = 0; $ignerr = 0; $tainted = 0; $last = -1; while () { chomp; ProcessLine ($_); } ProcessLine ("9999:"); print "$name $ignored $ignerr $preserved $tainted $added\n"; } print "Finished.\n";