#!/usr/bin/env perl
=head
    Convert PPOT files to XML Entity
    Copyright (C) 2008 Red Hat, Inc.

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

=cut


use strict;
use warnings;


open(PO, "<$ARGV[1]") || die "$!";

my $rs = $/;
my %po;
my ($msgid, $msgstr);

$/="\n\n";

while (<PO>) {
	next unless /#: rh-entity/s;
	($msgid, $msgstr) = /msgid \"(.*?)\"\nmsgstr \"(.*?)\"\n/;
	$po{$msgid} = $msgstr;
}

close (PO);

$/ = $rs;

open(XML, "<$ARGV[0]") || die "$!";

while (<XML>) {
	my $line = $_;
	while (($line =~ /^\s*<!\s*ENTITY/s) && (!($line =~ />\s*$/s)) && (my $nextline = <XML>)) {
		$line .= $nextline;
	}
	
	if ($line =~ /^\s*<!\s*ENTITY\s+[^"]+\s+\"([^"]+)\"\s*>/s) {
		my $entitystr = $1;
		my $entityid = $entitystr;
		$entityid =~ s/\n//sg;
		
		foreach $msgid (keys %po) {
			if ($msgid eq $entityid) {
				next unless $msgstr = $po{$msgid};
				$line =~ s/\"$entitystr\"/\"$msgstr\"/s;
				last;
			}
		}
	}
	
	print $line;
}

close(XML);
