summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjluehrs2 <jluehrs2@uiuc.edu>2008-05-22 14:26:57 -0500
committerjluehrs2 <jluehrs2@uiuc.edu>2008-05-22 14:26:57 -0500
commit0cdc4de86d2cea46aa6981427d7c23a5b0dad909 (patch)
treeac4d622261c1f81bbf42e6ac9df450e36de744db
parente70442358c76101e546f1233f62d7e8c4ee5cea8 (diff)
downloadlanguage-teco-0cdc4de86d2cea46aa6981427d7c23a5b0dad909.tar.gz
language-teco-0cdc4de86d2cea46aa6981427d7c23a5b0dad909.zip
refactor getting buffer offsets by line into a method on the buffer object
-rw-r--r--lib/Language/TECO.pm16
-rw-r--r--lib/Language/TECO/Buffer.pm19
2 files changed, 20 insertions, 15 deletions
diff --git a/lib/Language/TECO.pm b/lib/Language/TECO.pm
index 46f0918..ff11e4f 100644
--- a/lib/Language/TECO.pm
+++ b/lib/Language/TECO.pm
@@ -191,21 +191,7 @@ sub execute {
$self->num(1);
}
my $num = $self->num;
- if ($num > 0) {
- my $regex = "(?:.*(?:\n|\$)){$num}";
- pos $self->{buffer}->{buffer} = $self->{buffer}->{pointer};
- $self->{buffer}->{buffer} =~ /$regex/g;
- $self->{buffer}->print($self->{buffer}->{pointer},
- $+[0]);
- }
- else {
- $num = -$num;
- my $rev = reverse $self->{buffer}->{buffer};
- my $regex = ".*?(?:\n.*?){$num}(?=\n|\$)";
- pos $rev = length($self->{buffer}->{buffer}) - $self->{buffer}->{pointer};
- $rev =~ /$regex/sg;
- $self->{buffer}->print(length($self->{buffer}->{buffer}) - $+[0], $self->{buffer}->{pointer});
- }
+ $self->{buffer}->print($self->{buffer}->get_line_offset($num));
}
});
}
diff --git a/lib/Language/TECO/Buffer.pm b/lib/Language/TECO/Buffer.pm
index bc0f7c8..65c0e93 100644
--- a/lib/Language/TECO/Buffer.pm
+++ b/lib/Language/TECO/Buffer.pm
@@ -51,4 +51,23 @@ sub print {
print substr $self->{buffer}, $start, $end - $start;
}
+sub get_line_offset {
+ my $self = shift;
+ my $num = shift;
+
+ if ($num > 0) {
+ pos $self->{buffer} = $self->{pointer};
+ $self->{buffer} =~ /(?:.*(?:\n|$)){$num}/g;
+ return ($-[0], $+[0]);
+ }
+ else {
+ $num = -$num;
+ my $rev = reverse $self->{buffer};
+ my $len = length $self->{buffer};
+ pos $rev = $len - $self->{pointer};
+ $rev =~ /.*?(?:\n.*?){$num}(?=\n|$)/g;
+ return ($len - $+[0], $len - $-[0]);
+ }
+}
+
1;