summaryrefslogtreecommitdiff
path: root/beagle/debian-rfs/usr/share/perl5/Debconf/Template.pm
diff options
context:
space:
mode:
authorManuel Traut <manut@mecka.net>2011-04-29 09:09:27 +0200
committerManuel Traut <manut@mecka.net>2011-04-29 09:09:27 +0200
commit5238ad5a0c4a9e1c8cd036f5de4055e39bd71297 (patch)
tree4407c087b9fb5432b1dc11e70b52dacfa0b99feb /beagle/debian-rfs/usr/share/perl5/Debconf/Template.pm
parent60ead65c41afba7e6aa4bbcf507a1d52f7a8fe9f (diff)
added debootstrap stuff
Signed-off-by: Manuel Traut <manut@mecka.net>
Diffstat (limited to 'beagle/debian-rfs/usr/share/perl5/Debconf/Template.pm')
-rw-r--r--beagle/debian-rfs/usr/share/perl5/Debconf/Template.pm344
1 files changed, 344 insertions, 0 deletions
diff --git a/beagle/debian-rfs/usr/share/perl5/Debconf/Template.pm b/beagle/debian-rfs/usr/share/perl5/Debconf/Template.pm
new file mode 100644
index 0000000..5cadf06
--- /dev/null
+++ b/beagle/debian-rfs/usr/share/perl5/Debconf/Template.pm
@@ -0,0 +1,344 @@
+#!/usr/bin/perl -w
+# This file was preprocessed, do not edit!
+
+
+package Debconf::Template;
+use strict;
+use POSIX;
+use FileHandle;
+use Debconf::Gettext;
+use Text::Wrap;
+use Text::Tabs;
+use Debconf::Db;
+use Debconf::Iterator;
+use Debconf::Question;
+use fields qw(template);
+use Debconf::Log q{:all};
+use Debconf::Encoding;
+use Debconf::Config;
+
+our %template;
+$Debconf::Template::i18n=1;
+
+our %known_field = map { $_ => 1 }
+ qw{template description choices default type};
+
+binmode(STDOUT);
+binmode(STDERR);
+
+
+
+sub new {
+ my Debconf::Template $this=shift;
+ my $template=shift || die "no template name specified";
+ my $owner=shift || 'unknown';
+ my $type=shift || die "no template type specified";
+
+ if ($Debconf::Db::templates->exists($template) and
+ $Debconf::Db::templates->owners($template)) {
+ my $q=Debconf::Question->get($template);
+ $q->addowner($owner, $type) if $q;
+
+ my @owners=$Debconf::Db::templates->owners($template);
+ foreach my $question (@owners) {
+ my $q=Debconf::Question->get($question);
+ if (! $q) {
+ warn sprintf(gettext("warning: possible database corruption. Will attempt to repair by adding back missing question %s."), $question);
+ my $newq=Debconf::Question->new($question, $owner, $type);
+ $newq->template($template);
+ }
+ }
+
+ $this = fields::new($this);
+ $this->{template}=$template;
+ return $template{$template}=$this;
+ }
+
+ unless (ref $this) {
+ $this = fields::new($this);
+ }
+ $this->{template}=$template;
+
+ if ($Debconf::Db::config->exists($template)) {
+ my $q=Debconf::Question->get($template);
+ $q->addowner($owner, $type) if $q;
+ }
+ else {
+ my $q=Debconf::Question->new($template, $owner, $type);
+ $q->template($template);
+ }
+
+ return unless $Debconf::Db::templates->addowner($template, $template, $type);
+
+ $Debconf::Db::templates->setfield($template, 'type', $type);
+ return $template{$template}=$this;
+}
+
+
+sub get {
+ my Debconf::Template $this=shift;
+ my $template=shift;
+ 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});
+ $template->clearall;
+ foreach my $key (keys %data) {
+ next if $key eq 'template';
+ $template->$key($data{$key});
+ }
+ push @ret, $template;
+ }
+
+ return @ret;
+}
+
+
+sub template {
+ my $this=shift;
+
+ return $this->{template};
+}
+
+
+sub fields {
+ my $this=shift;
+
+ return $Debconf::Db::templates->fields($this->{template});
+}
+
+
+sub clearall {
+ my $this=shift;
+
+ foreach my $field ($this->fields) {
+ $Debconf::Db::templates->removefield($this->{template}, $field);
+ }
+}
+
+
+sub stringify {
+ my $this=shift;
+
+ my @templatestrings;
+ foreach (ref $this ? $this : @_) {
+ my $data='';
+ foreach my $key ('template', 'type',
+ (grep { $_ ne 'template' && $_ ne 'type'} sort $_->fields)) {
+ next if $key=~/^extended_/;
+ if ($key =~ m/-[a-z]{2}_[a-z]{2}(@[^_@.])?(-fuzzy)?$/) {
+ my $casekey=$key;
+ $casekey=~s/([a-z]{2})(@[^_@.]|)(-fuzzy|)$/uc($1).$2.$3/eg;
+ $data.=ucfirst($casekey).": ".$_->$key."\n";
+ }
+ else {
+ $data.=ucfirst($key).": ".$_->$key."\n";
+ }
+ my $e="extended_$key";
+ my $ext=$_->$e;
+ if (defined $ext) {
+ $Text::Wrap::break = qr/\n|\s(?=\S)/;
+ my $extended=expand(wrap(' ', ' ', $ext));
+ $extended=~s/(\n )+\n/\n .\n/g;
+ $data.=$extended."\n" if length $extended;
+ }
+ }
+ push @templatestrings, $data;
+ }
+ return join("\n", @templatestrings);
+}
+
+
+sub _addterritory {
+ my $locale=shift;
+ my $territory=shift;
+ $locale=~s/^([^_@.]+)/$1$territory/;
+ return $locale;
+}
+sub _addcharset {
+ my $locale=shift;
+ my $charset=shift;
+ $locale=~s/^([^@.]+)/$1$charset/;
+ return $locale;
+}
+sub _getlocalelist {
+ my $locale=shift;
+ $locale=~s/(@[^.]+)//;
+ my $modifier=$1;
+ my ($lang, $territory, $charset)=($locale=~m/^
+ ([^_@.]+) # Language
+ (_[^_@.]+)? # Territory
+ (\..+)? # Charset
+ /x);
+ my (@ret) = ($lang);
+ @ret = map { $_.$modifier, $_} @ret if defined $modifier;
+ @ret = map { _addterritory($_,$territory), $_} @ret if defined $territory;
+ @ret = map { _addcharset($_,$charset), $_} @ret if defined $charset;
+ return @ret;
+}
+
+sub _getlangs {
+ my $language=setlocale(LC_MESSAGES);
+ my @langs = ();
+ if (exists $ENV{LANGUAGE} && $ENV{LANGUAGE} ne '') {
+ foreach (split(/:/, $ENV{LANGUAGE})) {
+ push (@langs, _getlocalelist($_));
+ }
+ }
+ return @langs, _getlocalelist($language);
+}
+
+my @langs=map { lc $_ } _getlangs();
+
+sub AUTOLOAD {
+ (my $field = our $AUTOLOAD) =~ s/.*://;
+ no strict 'refs';
+ *$AUTOLOAD = sub {
+ my $this=shift;
+ if (@_) {
+ return $Debconf::Db::templates->setfield($this->{template}, $field, shift);
+ }
+
+ my $ret;
+ my $want_i18n = $Debconf::Template::i18n && Debconf::Config->c_values ne 'true';
+
+ if ($want_i18n && @langs) {
+ foreach my $lang (@langs) {
+ $lang = 'en' if $lang eq 'c';
+
+ $ret=$Debconf::Db::templates->getfield($this->{template}, $field.'-'.$lang);
+ return $ret if defined $ret;
+
+ if ($Debconf::Encoding::charmap) {
+ foreach my $f ($Debconf::Db::templates->fields($this->{template})) {
+ if ($f =~ /^\Q$field-$lang\E\.(.+)/) {
+ my $encoding = $1;
+ $ret = Debconf::Encoding::convert($encoding, $Debconf::Db::templates->getfield($this->{template}, lc($f)));
+ return $ret if defined $ret;
+ }
+ }
+ }
+
+ last if $lang eq 'en';
+ }
+ } elsif (not $want_i18n && $field !~ /-c$/i) {
+ $ret=$Debconf::Db::templates->getfield($this->{template}, $field.'-c');
+ return $ret if defined $ret;
+ }
+
+ $ret=$Debconf::Db::templates->getfield($this->{template}, $field);
+ return $ret if defined $ret;
+
+ if ($field =~ /-/) {
+ (my $plainfield = $field) =~ s/-.*//;
+ $ret=$Debconf::Db::templates->getfield($this->{template}, $plainfield);
+ return $ret if defined $ret;
+ return '';
+ }
+
+ return '';
+ };
+ goto &$AUTOLOAD;
+}
+
+sub DESTROY {}
+
+use overload
+ '""' => sub {
+ my $template=shift;
+ $template->template;
+ };
+
+
+1