#!/usr/bin/perl
# This file was preprocessed, do not edit!


use warnings;
use strict;
use Debconf::Template::Transient;
use Debconf::Config;
use Debconf::Gettext;

print STDERR gettext("debconf-mergetemplate: This utility is deprecated. You should switch to using po-debconf's po2debconf program.")."\n";


my $usage=gettext("Usage: debconf-mergetemplate [options] [templates.ll ...] templates");

my $outdated=0;
my $dropold=0;
Debconf::Config->getopt($usage.
gettext(qq{
        --outdated		Merge in even outdated translations.
	--drop-old-templates	Drop entire outdated templates.}),
       "outdated"		=> \$outdated,
       "drop-old-templates"	=> \$dropold,
);

if (! @ARGV) {
	die $usage."\n";
}

Debconf::Template::Transient->i18n(0);

sub is_fuzzy {
	my $a=defuzz(shift);
	my $b=shift;
}

sub defuzz {
	my $value=shift;
	$value=~s/^\s+//gm;
	$value=~s/\s+$//gm;
	$value=~tr/ \t\n/ /s;
	return $value;
}

my %templates = map { $_->template => $_ } Debconf::Template::Transient->load(pop @ARGV);

foreach my $template (map { Debconf::Template::Transient->load($_) } @ARGV) {
	if (exists $templates{$template->template}) {
		my $master=$templates{$template->template};
		foreach my $field (grep { /.+-.+/ } $template->fields) {
			next if $field =~ /^extended_/;
			if ($field =~ /(.+?)-(.+)/) {
				my $basefield = $1;
				my $lang = $2;

				my $t_val = $template->$basefield;
				my $m_val = $master->$basefield;

				if (! defined $t_val) {
					if ($outdated) {
						warn "debconf-mergetemplate: ".$template->template." ".
						     sprintf(gettext("%s is missing"), $basefield)."\n";
					}
					else {
						warn "debconf-mergetemplate: ".$template->template." ".
						     sprintf(gettext("%s is missing; dropping %s"), $basefield,  $field)."\n";
						     next;
					}
				}

				my $extbasefield = "extended_$basefield";
				$t_val .= "\n".$template->$extbasefield
					if defined $template->$extbasefield;
				$m_val .= "\n".$master->$extbasefield
					if defined $master->$extbasefield;

				my ($df_t, $df_m) = (defuzz($t_val), defuzz($m_val));
				if ($df_t ne $df_m) {
					my $diff_p = 0;

					$diff_p++
						while substr($t_val, 0, $diff_p) eq substr($m_val, 0, $diff_p);
					my $diff_t = "'".
						($diff_p ? '...' : '').defuzz(substr($t_val, $diff_p-1, 8))."' != '".
						($diff_p ? '...' : '').defuzz(substr($m_val, $diff_p-1, 8))."'";

				    	if ($outdated) {
						warn "debconf-mergetemplate: ".$template->template." ".
						     sprintf(gettext("%s is fuzzy at byte %s: %s"),
							     $field, $diff_p, $diff_t)."\n";
					}
					else {
						warn "debconf-mergetemplate: ".$template->template." ".
						     sprintf(gettext("%s is fuzzy at byte %s: %s; dropping it"),
							     $field, $diff_p, $diff_t)."\n";
						next;
					}
				}
			}

			$master->$field($template->$field);
			$field="extended_$field";
			$master->$field($template->$field);
		}
	}
	else {
		if (! $dropold) {
			warn "debconf-mergetemplate: ".
			     sprintf(gettext("%s is outdated"), $template->template)."\n";
			$templates{$template->template}=$template;
		}
		else {
			warn "debconf-mergetemplate: ".
			     sprintf(gettext("%s is outdated; dropping whole template!"), $template->template)."\n";
		}
	}
}

print Debconf::Template::Transient->stringify(values %templates);

