D7net Mini Sh3LL v1
Current File : /var/../bin/../include/../share/doc/libdb5.3/../curl/../../perl5/Debconf/Question.pm |
#!/usr/bin/perl -w
# This file was preprocessed, do not edit!
package Debconf::Question;
use strict;
use Debconf::Db;
use Debconf::Template;
use Debconf::Iterator;
use Debconf::Log qw(:all);
use fields qw(name priority);
our %question;
sub new {
my Debconf::Question $this=shift;
my $name=shift;
my $owner=shift;
my $type=shift || die "no type given for question";
die "A question called \"$name\" already exists"
if exists $question{$name};
unless (ref $this) {
$this = fields::new($this);
}
$this->{name}=$name;
return unless defined $this->addowner($owner, $type);
$this->flag('seen', 'false');
return $question{$name}=$this;
}
sub get {
my Debconf::Question $this=shift;
my $name=shift;
return $question{$name} if exists $question{$name};
if ($Debconf::Db::config->exists($name)) {
$this = fields::new($this);
$this->{name}=$name;
return $question{$name}=$this;
}
return undef;
}
sub iterator {
my $this=shift;
my $real_iterator=$Debconf::Db::config->iterator;
return Debconf::Iterator->new(callback => sub {
return unless my $name=$real_iterator->iterate;
return $this->get($name);
});
}
sub _expand_vars {
my $this=shift;
my $text=shift;
return '' unless defined $text;
my @vars=$Debconf::Db::config->variables($this->{name});
my $rest=$text;
my $result='';
my $variable;
my $varval;
my $escape;
while ($rest =~ m/^(.*?)(\\)?\$\{([^{}]+)\}(.*)$/sg) {
$result.=$1; # copy anything before the variable
$escape=$2;
$variable=$3;
$rest=$4; # continue trying to expand rest of text
if (defined $escape && length $escape) {
$result.="\${$variable}";
}
else {
$varval=$Debconf::Db::config->getvariable($this->{name}, $variable);
$result.=$varval if defined($varval); # expand the variable
}
}
$result.=$rest; # add on anything that's left.
return $result;
}
sub description {
my $this=shift;
return $this->_expand_vars($this->template->description);
}
sub extended_description {
my $this=shift;
return $this->_expand_vars($this->template->extended_description);
}
sub choices {
my $this=shift;
return $this->_expand_vars($this->template->choices);
}
sub choices_split {
my $this=shift;
my @items;
my $item='';
for my $chunk (split /(\\[, ]|,\s+)/, $this->choices) {
if ($chunk=~/^\\([, ])$/) {
$item.=$1;
} elsif ($chunk=~/^,\s+$/) {
push @items, $item;
$item='';
} else {
$item.=$chunk;
}
}
push @items, $item if $item ne '';
return @items;
}
sub variable {
my $this=shift;
my $var=shift;
if (@_) {
return $Debconf::Db::config->setvariable($this->{name}, $var, shift);
}
else {
return $Debconf::Db::config->getvariable($this->{name}, $var);
}
}
sub flag {
my $this=shift;
my $flag=shift;
if ($flag eq 'isdefault') {
debug developer => "The isdefault flag is deprecated, use the seen flag instead";
if (@_) {
my $value=(shift eq 'true') ? 'false' : 'true';
$Debconf::Db::config->setflag($this->{name}, 'seen', $value);
}
return ($Debconf::Db::config->getflag($this->{name}, 'seen') eq 'true') ? 'false' : 'true';
}
if (@_) {
return $Debconf::Db::config->setflag($this->{name}, $flag, shift);
}
else {
return $Debconf::Db::config->getflag($this->{name}, $flag);
}
}
sub value {
my $this = shift;
unless (@_) {
my $ret=$Debconf::Db::config->getfield($this->{name}, 'value');
return $ret if defined $ret;
return $this->template->default if ref $this->template;
} else {
return $Debconf::Db::config->setfield($this->{name}, 'value', shift);
}
}
sub value_split {
my $this=shift;
my $value=$this->value;
$value='' if ! defined $value;
my @items;
my $item='';
for my $chunk (split /(\\[, ]|,\s+)/, $value) {
if ($chunk=~/^\\([, ])$/) {
$item.=$1;
} elsif ($chunk=~/^,\s+$/) {
push @items, $item;
$item='';
} else {
$item.=$chunk;
}
}
push @items, $item if $item ne '';
return @items;
}
sub addowner {
my $this=shift;
return $Debconf::Db::config->addowner($this->{name}, shift, shift);
}
sub removeowner {
my $this=shift;
my $template=$Debconf::Db::config->getfield($this->{name}, 'template');
return unless $Debconf::Db::config->removeowner($this->{name}, shift);
if (length $template and
not $Debconf::Db::config->exists($this->{name})) {
$Debconf::Db::templates->removeowner($template, $this->{name});
delete $question{$this->{name}};
}
}
sub owners {
my $this=shift;
return join(", ", sort($Debconf::Db::config->owners($this->{name})));
}
sub template {
my $this=shift;
if (@_) {
my $oldtemplate=$Debconf::Db::config->getfield($this->{name}, 'template');
my $newtemplate=shift;
if (not defined $oldtemplate or $oldtemplate ne $newtemplate) {
$Debconf::Db::templates->removeowner($oldtemplate, $this->{name})
if defined $oldtemplate and length $oldtemplate;
$Debconf::Db::config->setfield($this->{name}, 'template', $newtemplate);
$Debconf::Db::templates->addowner($newtemplate, $this->{name},
$Debconf::Db::templates->getfield($newtemplate, "type"));
}
}
return Debconf::Template->get(
$Debconf::Db::config->getfield($this->{name}, 'template'));
}
sub name {
my $this=shift;
return $this->{name};
}
sub priority {
my $this=shift;
$this->{priority}=shift if @_;
return $this->{priority};
}
sub AUTOLOAD {
(my $field = our $AUTOLOAD) =~ s/.*://;
no strict 'refs';
*$AUTOLOAD = sub {
my $this=shift;
if (@_) {
return $Debconf::Db::config->setfield($this->{name}, $field, shift);
}
my $ret=$Debconf::Db::config->getfield($this->{name}, $field);
unless (defined $ret) {
$ret = $this->template->$field() if ref $this->template;
}
if (defined $ret) {
if ($field =~ /^(?:description|extended_description|choices)-/i) {
return $this->_expand_vars($ret);
} else {
return $ret;
}
}
};
goto &$AUTOLOAD;
}
sub DESTROY {
}
1
AnonSec - 2021 | Recode By D7net