#!/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 (<TMPL>)
    {
        if (m/^([0-9]{3}):(.*)/)
        {
            $nr = $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;
    
    $name .= ".tainted";
    open IN, "<$name" || return;
    while (<IN>)
    {
        if (m/^([0-9]{3}):/)
        {
            $tain{$1} = 1;
        }
    }
}

sub ProcessLine($)
{
    my $line = shift;
    
    if ($line =~ m/^#[0-9]{3}:/)
    {
    }
    elsif ($line =~ m/^#/)
    {
       print OUT "$line\n";
       $ignored++;
    }
    elsif ($line =~ m/^([0-9]{3}):/)
    {
        $neu = $1;
        for ($last++ ; $last < $neu; $last++)
        {
            $last = ("0" x (3 - length ($last))) . $last;
            next unless defined $nrval{$last};
            print OUT "#$last:$nrval{$last}\n";
            $added++;
        }
        if ($tain{$neu})
        {
            print OUT "#-#$line\n";
            print OUT "#$last:$nrval{$last}\n";
            $tainted++;
        }
        else
        {
            if ($neu != 999)
            {
                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 ("en");
ReadTainted ("en");

print "File		Comments Junk	Old	Changed	New\n";
while ($uname = shift)
{
    next unless $uname cmp "en.i18n";
    $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 (<IN>)
    {
        chomp;
        ProcessLine ($_);
    }
    ProcessLine ("999:");
    print "$name 	$ignored	 $ignerr	$preserved	$tainted	$added\n";
}
print "Finished.\n";

