diff options
author | jluehrs2 <jluehrs2@uiuc.edu> | 2008-05-22 14:26:57 -0500 |
---|---|---|
committer | jluehrs2 <jluehrs2@uiuc.edu> | 2008-05-22 14:26:57 -0500 |
commit | 0cdc4de86d2cea46aa6981427d7c23a5b0dad909 (patch) | |
tree | ac4d622261c1f81bbf42e6ac9df450e36de744db /lib/Language/TECO/Buffer.pm | |
parent | e70442358c76101e546f1233f62d7e8c4ee5cea8 (diff) | |
download | language-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.pm | 19 |
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; |