summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjluehrs2 <jluehrs2@uiuc.edu>2008-05-24 17:14:01 -0500
committerjluehrs2 <jluehrs2@uiuc.edu>2008-05-24 17:14:01 -0500
commit173130b8c5cee06e63fd6507dec066345db25f69 (patch)
tree6cc11e78189f7aae9522c60544bfe3e2e216fc33
parente192b197474d284ce7cc4b8689decce5b4b75c84 (diff)
downloadlanguage-teco-173130b8c5cee06e63fd6507dec066345db25f69.tar.gz
language-teco-173130b8c5cee06e63fd6507dec066345db25f69.zip
refactor the delete method of the buffer a bit
-rw-r--r--lib/Language/TECO.pm2
-rw-r--r--lib/Language/TECO/Buffer.pm22
2 files changed, 7 insertions, 17 deletions
diff --git a/lib/Language/TECO.pm b/lib/Language/TECO.pm
index ccca57f..efbb394 100644
--- a/lib/Language/TECO.pm
+++ b/lib/Language/TECO.pm
@@ -157,7 +157,7 @@ sub execute {
}
$self->cmd(sub {
my $self = shift;
- $self->buf->delete($self->num);
+ $self->buf->delete($self->pointer, $self->pointer + $self->num);
});
}
elsif (/k/i) {
diff --git a/lib/Language/TECO/Buffer.pm b/lib/Language/TECO/Buffer.pm
index d997c85..5d45397 100644
--- a/lib/Language/TECO/Buffer.pm
+++ b/lib/Language/TECO/Buffer.pm
@@ -19,6 +19,7 @@ sub buffer {
my ($start, $end) = @_;
$start = 0 unless defined $start;
$end = $self->endpos unless defined $end;
+ ($start, $end) = ($end, $start) if $start > $end;
return substr $self->{buffer}, $start, $end - $start;
}
@@ -46,23 +47,12 @@ sub insert {
sub delete {
my $self = shift;
- my $length;
- if (@_ > 1) {
- my $pos = shift;
- $self->set($pos);
- $length = shift() - $pos;
- }
- else {
- $length = shift;
- }
+ my ($start, $end) = @_;
+ ($start, $end) = ($end, $start) if $start > $end;
- if ($length < 0) {
- $length = -$length;
- $self->offset(-$length);
- }
- die "Pointer off page"
- if $self->curpos + $length > $self->endpos;
- substr($self->{buffer}, $self->curpos, $length) = '';
+ die "Pointer off page" if $start < 0 || $end > $self->endpos;
+ substr($self->{buffer}, $start, $end - $start) = '';
+ $self->set($start);
return;
}