Author: dylan
Date: 2004-05-30 22:01:10 -0400 (Sun, 30 May 2004)
New Revision: 208
Modified:
trunk/haver-client/lib/Haver/Client/Command.pm
trunk/haver-gtk/bin/haver-gtk.pl
Log:
input() got renamed to process().
Modified: trunk/haver-client/lib/Haver/Client/Command.pm
===================================================================
--- trunk/haver-client/lib/Haver/Client/Command.pm 2004-05-31 01:56:06 UTC
(rev 207)
+++ trunk/haver-client/lib/Haver/Client/Command.pm 2004-05-31 02:01:10 UTC
(rev 208)
@@ -41,7 +41,7 @@
}
-sub input {
+sub process {
my ($me, $s) = @_;
my ($cmd, $arg) = $me->parse($s);
@@ -53,7 +53,7 @@
my @lines = $me->eval_text($me->{alias}{$cmd}, $arg);
foreach my $line (@lines) {
- $me->input($line);
+ $me->process($line);
}
} else {
my @args;
@@ -194,7 +194,7 @@
foreach my $s (@cmds) {
if ($text =~ /$c([0-9]|\*)/) {
my @args = Text::ParseWords::parse_line(qr/\s+/, 0,
$arg);
- $s =~ s/$c([\w\*$c]+)/$me->get_var($1, [EMAIL
PROTECTED], $arg)/ge;
+ $s =~ s/$c([\w\*:$c-]+)/$me->expand($1, [EMAIL
PROTECTED], $arg)/ge;
} else {
$s .= ' ' . $arg;
}
@@ -205,29 +205,44 @@
}
-sub get_var {
+sub expand {
my ($me, $var, $args, $argstr) = @_;
- if ($var =~ /^\d+$/) {
+ if ($var =~ /^-?\d+$/) {
return $args->[$var];
+ } elsif ($var =~ /^(\d+)-(\d+)$/) {
+ return join(' ', @$args[$1 .. $2]);
+ } elsif ($var =~ /^(\d+)-$/) {
+ return join(' ', @$args[$1 .. $#$args]);
} elsif ($var eq '*') {
- return $argstr;
+ return $argstr || join(' ', @$args);
} elsif ($me->is_defined($var)) {
- my $val = $me->{vars}{$var};
- if (not ref $val) {
- return $val;
- } elsif (ref($val) eq 'CODE') {
- return $val->($me, $var);
- } else {
- return $val;
- }
+ return $me->_value($var, $me->{vars}{$var});
} elsif (exists $ENV{$var}) {
return $ENV{$var};
} elsif ($var eq $me->{expando_char}) {
return $var;
+ } else {
+ return undef;
}
}
+sub _value {
+ my ($me, $var, $val) = @_;
+
+ if (ref $val) {
+ if (ref($val) eq 'CODE') {
+ $me->_value($var, $val->($me, $var));
+ } elsif (ref ($val) eq 'ARRAY') {
+ return join(' ', @$val);
+ } else {
+ return $val;
+ }
+ } else {
+ return $val;
+ }
+}
+
### Method stubs for defining commands
sub commands {
my ($me) = @_;
Modified: trunk/haver-gtk/bin/haver-gtk.pl
===================================================================
--- trunk/haver-gtk/bin/haver-gtk.pl 2004-05-31 01:56:06 UTC (rev 207)
+++ trunk/haver-gtk/bin/haver-gtk.pl 2004-05-31 02:01:10 UTC (rev 208)
@@ -247,7 +247,7 @@
my $text = $gui{entry}->get_text;
$gui{entry}->set_text('');
eval {
- $cmd->input($text);
+ $cmd->process($text);
};
if($@) {
# XXX: proper error handling