ian%hixie.ch 56f854aaad Fix fallout in the Input modules from the removal of implied properties
git-svn-id: svn://10.0.0.236/trunk@140398 18797224-902f-48f8-a5cc-f745e15eee43
2003-03-27 19:50:40 +00:00

175 lines
5.1 KiB
Perl

# -*- Mode: perl; tab-width: 4; indent-tabs-mode: nil; -*-
#
# This file is MPL/GPL dual-licensed under the following terms:
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.1 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
# the License for the specific language governing rights and
# limitations under the License.
#
# The Original Code is PLIF 1.0.
# The Initial Developer of the Original Code is Ian Hickson.
#
# Alternatively, the contents of this file may be used under the terms
# of the GNU General Public License Version 2 or later (the "GPL"), in
# which case the provisions of the GPL are applicable instead of those
# above. If you wish to allow use of your version of this file only
# under the terms of the GPL and not to allow others to use your
# version of this file under the MPL, indicate your decision by
# deleting the provisions above and replace them with the notice and
# other provisions required by the GPL. If you do not delete the
# provisions above, a recipient may use your version of this file
# under either the MPL or the GPL.
package PLIF::Input::Arguments;
use strict;
use vars qw(@ISA);
use PLIF::Input;
@ISA = qw(PLIF::Input);
1;
__DATA__
sub fetchArguments {
my $self = shift;
$self->splitArguments();
$self->setCommandArgument();
}
# Returns the values given for that argument. In a scalar context,
# returns the first value (or undef if the argument was never
# given). In an array context, returns all the values given.
sub getArgument {
my $self = shift;
my($argument) = @_;
if (not defined($self->{"argument $argument"})) {
$self->createArgument(@_);
}
if (wantarray) {
return @{$self->{"argument $argument"}};
} else {
if (@{$self->{"argument $argument"}}) {
return $self->{"argument $argument"}->[0];
} else {
return undef;
}
}
}
# Returns all the arguments present.
sub getArguments {
my $self = shift;
my $result = {};
foreach my $argument (keys(%$self)) {
if ($argument =~ /^argument (.*)$/o) {
$result->{$1} = \@{$self->{$argument}};
}
}
return $result;
}
# Returns all the arguments present that begin with a specific string
# followed by a dot. (the keys in the hash returned do not start with
# the prefix.)
sub getArgumentsBranch {
my $self = shift;
my($branch) = @_;
my $result = {};
foreach my $argument (keys(%$self)) {
if ($argument =~ /^argument \Q$branch\E\.(.+)$/) {
$result->{$1} = \@{$self->{$argument}};
}
}
return $result;
}
# Returns the values given for that argument if it already exists,
# otherwise undef. In a scalar context, returns the first value (or
# undef if the argument was never given). In an array context, returns
# all the values given. (i.e., the same as getArgument but without the
# implicit call to createArgument)
sub peekArgument {
my $self = shift;
my($argument) = @_;
if (defined($self->{"argument $argument"})) {
if (wantarray) {
return @{$self->{"argument $argument"}};
} elsif (@{$self->{"argument $argument"}}) {
return $self->{"argument $argument"}->[0];
}
} else {
return;
}
}
# Specifics of this implementation:
sub splitArguments {} # stub
sub addArgument {
my $self = shift;
my($argument, $value) = @_;
if (not defined($self->{"argument $argument"})) {
$self->{"argument $argument"} = [];
}
push(@{$self->{"argument $argument"}}, $value);
}
sub setArgument {
my $self = shift;
my($argument, @value) = @_;
$self->{"argument $argument"} = \@value;
}
# modifies the last value for this argument to the new value
sub pokeArgument {
my $self = shift;
my($argument, $newValue) = @_;
$self->assert(defined($self->{"argument $argument"}), 1, 'Cannot poke an argument that doesn\'t exist yet');
$self->assert(@{$self->{"argument $argument"}} > 0, 1, 'Cannot poke an argument that has no value yet');
$self->{"argument $argument"}->[$#{$self->{"argument $argument"}}] = $newValue;
}
sub resetArguments {
my $self = shift;
foreach my $argument (keys(%{$self})) {
if ($argument =~ /^argument /o) {
delete($self->{$argument});
}
}
}
sub setCommandArgument {
my $self = shift;
my $argument = $self->getArgument('');
if ($argument) {
$self->command($argument);
} else {
$self->command('');
}
}
sub createArgument {
my $self = shift;
my($argument) = @_;
# drop the default on the floor -- the default should only be used
# when explicitly requested (e.g. by the user in interactive mode).
$self->{"argument $argument"} = [];
}
sub implyMethod {
my $self = shift;
my($name, @data) = @_;
if (@data) {
return $self->SUPER::implyMethod(@_);
} else {
return $self->peekArgument($name);
}
}