summaryrefslogtreecommitdiffstats
path: root/lib/Language/TECO/Buffer.pm
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 /lib/Language/TECO/Buffer.pm
parente70442358c76101e546f1233f62d7e8c4ee5cea8 (diff)
downloadlanguage-teco-0cdc4de86d2cea46aa6981427d7c23a5b0dad909.tar.gz
language-teco-0cdc4de86d2cea46aa6981427d7c23a5b0dad909.zip
refactor getting buffer offsets by line into a method on the buffer object
Diffstat (limited to 'lib/Language/TECO/Buffer.pm')
-rw-r--r--lib/Language/TECO/Buffer.pm19
1 files changed, 19 insertions, 0 deletions
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;