#!/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 <-- NEVER TOUCH THIS - it's updated automatically\n"; } elsif ($line =~ m/^#[0-9][0-9]*:/) { } elsif ($line =~ m/^# #[0-9][0-9]*:/) { print OUT "$line\n"; } 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++; } print "Error: $last $neu" if $last != $neu; $last = $mod = sprintf ("%04d", $last); $mod -= 2000 if $mod > 3000; if (length ($nrval{$mod})) { if (length ($tain{$mod})) { print OUT "#-#$line\n"; print OUT "#+#$last:$tain{$mod}\n"; print OUT "# #$last:$nrval{$mod}\n"; $tainted++; } else { if ($neu != 9999) { print OUT "$1:$3\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++; } } system "rm .C.*"; 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"; stat ".C.$ver" || system "cvs -d $cvs rdiff -u -r $ver -r HEAD micq/lang/C.i18n > .C.$ver"; system "grep \"^-[0-9]\" < .C.$ver | 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";