return $template{$template} if exists $template{$template};
if ($Debconf::Db::templates->exists($template)) {
$this = fields::new($this);
$this->{template}=$template;
return $template{$template}=$this;
}
return undef;
}
sub i18n {
my $class=shift;
$Debconf::Template::i18n=shift;
}
sub load {
my $this=shift;
my $file=shift;
my @ret;
my $fh;
if (ref $file) {
$fh=$file;
}
else {
$fh=FileHandle->new($file) || die "$file: $!";
}
local $/="\n\n"; # read a template at a time.
while (<$fh>) {
my %data;
my $save = sub {
my $field=shift;
my $value=shift;
my $extended=shift;
my $file=shift;
$extended=~s/\n+$//;
if ($field ne '') {
if (exists $data{$field}) {
die sprintf(gettext("Template #%s in %s has a duplicate field \"%s\" with new value \"%s\". Probably two templates are not properly separated by a lone newline.\n"), $., $file, $field, $value);
}
$data{$field}=$value;
$data{"extended_$field"}=$extended
if length $extended;
}
};
s/^\n+//;
s/\n+$//;
my ($field, $value, $extended)=('', '', '');
foreach my $line (split "\n", $_) {
chomp $line;
if ($line=~/^([-_.A-Za-z0-9]*):\s?(.*)/) {
$save->($field, $value, $extended, $file);
$field=lc $1;
$value=$2;
$value=~s/\s*$//;
$extended='';
my $basefield=$field;
$basefield=~s/-.+$//;
if (! $known_field{$basefield}) {
warn sprintf(gettext("Unknown template field '%s', in stanza #%s of %s\n"), $field, $., $file);
}
}
elsif ($line=~/^\s\.$/) {
$extended.="\n\n";
}
elsif ($line=~/^\s(\s+.*)/) {
my $bit=$1;
$bit=~s/\s*$//;
$extended.="\n" if length $extended &&
$extended !~ /[\n ]$/;
$extended.=$bit."\n";
}
elsif ($line=~/^\s(.*)/) {
my $bit=$1;
$bit=~s/\s*$//;
$extended.=' ' if length $extended &&
$extended !~ /[\n ]$/;
$extended.=$bit;
}
else {
die sprintf(gettext("Template parse error near `%s', in stanza #%s of %s\n"), $line, $., $file);
}
}
$save->($field, $value, $extended, $file);
die sprintf(gettext("Template #%s in %s does not contain a 'Template:' line\n"), $., $file)
unless $data{template};
my $template=$this->new($data{template}, @_, $data{type});