diff options
author | jluehrs2 <jluehrs2@uiuc.edu> | 2008-05-24 17:14:01 -0500 |
---|---|---|
committer | jluehrs2 <jluehrs2@uiuc.edu> | 2008-05-24 17:14:01 -0500 |
commit | 173130b8c5cee06e63fd6507dec066345db25f69 (patch) | |
tree | 6cc11e78189f7aae9522c60544bfe3e2e216fc33 | |
parent | e192b197474d284ce7cc4b8689decce5b4b75c84 (diff) | |
download | language-teco-173130b8c5cee06e63fd6507dec066345db25f69.tar.gz language-teco-173130b8c5cee06e63fd6507dec066345db25f69.zip |
refactor the delete method of the buffer a bit
-rw-r--r-- | lib/Language/TECO.pm | 2 | ||||
-rw-r--r-- | lib/Language/TECO/Buffer.pm | 22 |
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; } |