#!/usr/bin/perl my %nrval, %tain, $max, $tainted, $ignored, $preserved, $added, $ignerr, $uname, $name, $pref; $cvs = ':pserver:anonymous@micq.org:/var/lib/cvs'; sub ReadTrans($) { my $nr, $val, $found, $name; $found = 0; $name = shift; $name .= ".i18n"; open (TMPL, "<:bytes", $name) || die "Could not open file $name."; while () { if (m=^# \$Id: C.i18n,v ([0-9.]* 20../../.. ..:..:..).*=) { $version = $1; } elsif (m/^([0-9]{1,4}):(.*)/) { $nr = sprintf ("%04d", $1); $val = $2; $max = $nr; $nrval{$nr}=$val; $found++; } elsif (m/^#/) { } else { print "Can't understand: $_\n"; } } print "Updating translation to $found strings.\n"; die "Oooops" unless $found; } sub ReadTainted($) { my $name = shift; %tain = {}; $name = ".$name.tainted"; open IN, "<$name" || return; while () { if (m/^([0-9]{4}):(.*)$/) { $tain{$1} = $2; } } } sub ProcessLine($) { my $line = shift; if ($line =~ m/^# EN:/) { print OUT "# EN: __.i18n,v $version\n"; } elsif ($line =~ m/^#[0-9][0-9]*:/) { } elsif ($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 (length ($nrval{$neu})) { if (length ($tain{$neu})) { print OUT "#-#$line\n"; print OUT "#+#$last:$tain{$neu}\n"; print OUT "# #$last:$nrval{$last}\n"; $tainted++; } else { if ($neu != 9999) { print OUT "$line\n"; $preserved++; } } } elsif ($neu != 9999) { if ($2 != ".") { print "Dropping $neu: $line.\n"; } print OUT "$1.$3\n"; } $last = $neu; } else { print OUT "#$line\n"; $ignerr++; } } ReadTrans ("C"); print "File Comments Junk Old Changed New\n"; while ($uname = shift) { next unless $uname cmp "C.i18n"; $ver = `grep -a "# *EN:" $uname | sed "s/.*EN://;s/.*,v //;s/ .*//"`; chomp $ver; if (!length ($ver)) { $ver = `grep ^1003 $uname`; $ver =~ s/^1003://; chomp $ver; $ver = 0 unless length ($ver); $ver = "i18n-$ver"; } print "Old version tag: $ver.\n"; system "cvs -d $cvs rdiff -u -r $ver -r stable-0-4-10 micq/lang/C.i18n" . " | grep \"^-[0-9]\" | sed \"s,^-,,\" | sort -n -t : -k 1,1 -u -o .$uname.tainted"; ReadTainted ("$uname"); $name = $pref . $uname; stat "$name~" && next; rename ($name, "$name~"); open (IN, "<:bytes", "$name~") || die; open (OUT, ">:bytes", $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";