From 0cdc4de86d2cea46aa6981427d7c23a5b0dad909 Mon Sep 17 00:00:00 2001 From: jluehrs2 Date: Thu, 22 May 2008 14:26:57 -0500 Subject: refactor getting buffer offsets by line into a method on the buffer object --- lib/Language/TECO.pm | 16 +--------------- lib/Language/TECO/Buffer.pm | 19 +++++++++++++++++++ 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; -- cgit v1.2.3-54-g00ecf