summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjluehrs2 <jluehrs2@uiuc.edu>2008-05-22 17:11:54 -0500
committerjluehrs2 <jluehrs2@uiuc.edu>2008-05-22 17:11:54 -0500
commit616f8420b1673eeaba686320b3cd3b37217ee977 (patch)
treea7d40535f29972890d181bc96ce66a245c7baa9f
parent5aaf1755e6e8f155e6de6de0f2275731ce96b21b (diff)
downloadlanguage-teco-616f8420b1673eeaba686320b3cd3b37217ee977.tar.gz
language-teco-616f8420b1673eeaba686320b3cd3b37217ee977.zip
use accessors rather than accessing data members directly
-rw-r--r--lib/Language/TECO.pm61
-rw-r--r--lib/Language/TECO/Buffer.pm37
2 files changed, 52 insertions, 46 deletions
diff --git a/lib/Language/TECO.pm b/lib/Language/TECO.pm
index 4aee5a3..eab2a40 100644
--- a/lib/Language/TECO.pm
+++ b/lib/Language/TECO.pm
@@ -3,6 +3,9 @@ package Language::TECO;
use strict;
use warnings;
use Language::TECO::Buffer;
+use base 'Class::Accessor::Fast'
+Language::TECO->mk_accessors qw/at colon negate current_num/;
+Language::TECO->mk_ro_accessors qw/buffer/;
sub new {
my $class = shift;
@@ -13,13 +16,15 @@ sub new {
return $object;
}
-sub buffer { shift->{buffer}->{buffer} }
-sub pointer { shift->{buffer}->{pointer} }
+sub buffer { shift->{buffer}->buffer(@_) }
+sub pointer { shift->{buffer}->curpos }
+sub buflen { shift->{buffer}->endpos }
+sub has_range { defined shift->{n2} }
sub reset {
my $self = shift;
- $self->{command} = '';
+ $self->{command} = '';
$self->{current_num} = 'n1';
$self->{n1} = undef;
$self->{n2} = undef;
@@ -33,18 +38,18 @@ sub num {
my $num = shift;
if (defined $num) {
- if ($self->{negate}) {
+ if ($self->negate) {
$num = -$num;
- $self->{negate} = 0;
+ $self->negate(0);
}
- $self->{$self->{current_num}} = $num;
+ $self->{$self->current_num} = $num;
}
else {
- if (wantarray && defined $self->{n2}) {
+ if (wantarray && $self->has_range) {
return ($self->{n1}, $self->{n2});
}
else {
- return $self->{$self->{current_num}};
+ return $self->{$self->current_num};
}
}
}
@@ -53,7 +58,7 @@ sub cmd {
my $self = shift;
my $code = shift;
- $self->{current_num} = 'n1';
+ $self->current_num('n1');
$code->($self);
@@ -68,7 +73,7 @@ sub cmd_with_string {
my $self = shift;
my $str = '';
- if ($self->{at}) {
+ if ($self->at) {
$self->{command} =~ s/(.)(.*?)\1//s;
$str = $2;
}
@@ -100,16 +105,16 @@ sub execute {
$self->num($num * 10 + $_);
}
elsif (/-/) {
- $self->{negate} = 1;
+ $self->negate(1);
}
elsif (/b/i) {
$self->num(0);
}
elsif (/z/i) {
- $self->num(length $self->{buffer}->{buffer});
+ $self->num($self->buflen);
}
elsif (/\./) {
- $self->num($self->{buffer}->{pointer});
+ $self->num($self->pointer);
}
elsif (/h/i) {
$self->push_cmd('b,z');
@@ -120,25 +125,25 @@ sub execute {
redo;
}
elsif (/,/) {
- $self->{current_num} = 'n2';
+ $self->current_num('n2');
}
elsif (/:/) {
- $self->{colon} = 1;
+ $self->colon(1);
}
elsif (/@/) {
- $self->{at} = 1;
+ $self->at(1);
}
elsif (/i/i) {
if (defined $self->num) {
$self->cmd(sub {
my $self = shift;
- $self->{buffer}->insert(chr($self->num))
+ $self->buffer->insert(chr($self->num))
});
}
else {
$self->cmd_with_string(sub {
my $self = shift;
- $self->{buffer}->insert(shift);
+ $self->buffer->insert(shift);
});
}
}
@@ -152,21 +157,21 @@ sub execute {
}
$self->cmd(sub {
my $self = shift;
- $self->{buffer}->delete($self->num);
+ $self->buffer->delete($self->num);
});
}
elsif (/k/i) {
$self->cmd(sub {
my $self = shift;
- if (defined $self->{n2}) {
- $self->{buffer}->delete($self->num);
+ if ($self->has_range) {
+ $self->buffer->delete($self->num);
}
else {
if (!defined $self->num) {
$self->num(1);
}
my $num = $self->num;
- $self->{buffer}->delete($self->{buffer}->get_line_offset($num));
+ $self->buffer->delete($self->buffer->get_line_offset($num));
}
});
}
@@ -176,7 +181,7 @@ sub execute {
}
$self->cmd(sub {
my $self = shift;
- $self->{buffer}->set($self->num);
+ $self->buffer->set($self->num);
});
}
elsif (/c/i) {
@@ -185,7 +190,7 @@ sub execute {
}
$self->cmd(sub {
my $self = shift;
- $self->{buffer}->offset($self->num);
+ $self->buffer->offset($self->num);
});
}
elsif (/r/i) {
@@ -202,21 +207,21 @@ sub execute {
if (!defined $self->num) {
$self->num(1);
}
- $self->{buffer}->set(scalar $self->{buffer}->get_line_offset($self->num));
+ $self->buffer->set(scalar $self->buffer->get_line_offset($self->num));
});
}
elsif (/t/i) {
$self->cmd(sub {
my $self = shift;
- if (defined $self->{n2}) {
- $self->{buffer}->print(($self->num));
+ if ($self->has_range) {
+ $self->buffer->print(($self->num));
}
else {
if (!defined $self->num) {
$self->num(1);
}
my $num = $self->num;
- $ret .= $self->{buffer}->print($self->{buffer}->get_line_offset($num));
+ $ret .= $self->buffer->buffer($self->buffer->get_line_offset($num));
}
});
}
diff --git a/lib/Language/TECO/Buffer.pm b/lib/Language/TECO/Buffer.pm
index 7ba2923..4365e10 100644
--- a/lib/Language/TECO/Buffer.pm
+++ b/lib/Language/TECO/Buffer.pm
@@ -10,10 +10,21 @@ sub new {
return bless { buffer => $initial_buffer, pointer => 0 }, $class;
}
+sub curpos { shift->{pointer} }
+
+sub endpos { length shift->{buffer} }
+
+sub buffer {
+ my $self = shift;
+ my $start = shift || 0;
+ my $end = shift || $self->endpos;
+ return substr $self->{buffer}, $start, $end - $start;
+}
+
sub set {
my $self = shift;
my $pointer = shift;
- die 'Pointer off page' if $pointer < 0 || $pointer > length $self->{buffer};
+ die 'Pointer off page' if $pointer < 0 || $pointer > $self->endpos;
$self->{pointer} = $pointer;
return;
}
@@ -27,7 +38,7 @@ sub offset {
sub insert {
my $self = shift;
my $text = shift;
- substr($self->{buffer}, $self->{pointer}, 0) = $text;
+ substr($self->{buffer}, $self->curpos, 0) = $text;
$self->offset(length $text);
return;
}
@@ -49,36 +60,26 @@ sub delete {
$self->offset(-$length);
}
die "Pointer off page"
- if $self->{pointer} + $length > length $self->{buffer};
- substr($self->{buffer}, $self->{pointer}, $length) = '';
+ if $self->curpos + $length > $self->endpos;
+ substr($self->{buffer}, $self->curpos, $length) = '';
return;
}
-sub endpos { length shift->{buffer} }
-
-sub curpos { shift->{pointer} }
-
-sub print {
- my $self = shift;
- my ($start, $end) = @_;
- return substr $self->{buffer}, $start, $end - $start;
-}
-
sub get_line_offset {
my $self = shift;
my $num = shift;
if ($num > 0) {
- pos $self->{buffer} = $self->{pointer};
+ pos $self->{buffer} = $self->curpos;
$self->{buffer} =~ /(?:.*(?:\n|$)){$num}/g;
return ($-[0], $+[0]) if wantarray;
return $+[0];
}
else {
$num = -$num;
- my $rev = reverse $self->{buffer};
- my $len = length $self->{buffer};
- pos $rev = $len - $self->{pointer};
+ my $rev = reverse $self->buffer;
+ my $len = $self->endpos;
+ pos $rev = $len - $self->curpos;
$rev =~ /.*?(?:\n.*?){$num}(?=\n|$)/g;
return ($len - $+[0], $len - $-[0]) if wantarray;
return $len - $+[0];