summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjluehrs2 <jluehrs2@uiuc.edu>2008-05-19 21:27:45 -0500
committerjluehrs2 <jluehrs2@uiuc.edu>2008-05-19 21:27:45 -0500
commit0d325a86c6300abf8f5f8ec0f9fe5c2e5ee4fdb7 (patch)
treee2a01eb08cbfd7ff40fa0e72e4b8856e30dc715e
parenta886df7e0b15eb32b0fcd73375bd7b4ee2b392cd (diff)
downloadlanguage-teco-0d325a86c6300abf8f5f8ec0f9fe5c2e5ee4fdb7.tar.gz
language-teco-0d325a86c6300abf8f5f8ec0f9fe5c2e5ee4fdb7.zip
add a buffer class
-rw-r--r--lib/Language/TECO/Buffer.pm46
1 files changed, 46 insertions, 0 deletions
diff --git a/lib/Language/TECO/Buffer.pm b/lib/Language/TECO/Buffer.pm
new file mode 100644
index 0000000..53a80ba
--- /dev/null
+++ b/lib/Language/TECO/Buffer.pm
@@ -0,0 +1,46 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+package Language::TECO::Buffer;
+
+sub new {
+ return bless { buffer => '', pointer => 0 }, shift;
+}
+
+sub set {
+ my $self = shift;
+ my $pointer = shift;
+ return if $pointer < 0 || $pointer > length $self->{buffer}
+ $self->{pointer} = $pointer;
+}
+
+sub offset {
+ my $self = shift;
+ $self->set($self->{pointer} + shift);
+}
+
+sub insert {
+ my $self = shift;
+ my $text = shift;
+ substr($self->{buffer}, $self->{pointer}, 0) = $text;
+ $self->offset(length $text);
+}
+
+sub delete {
+ my $self = shift;
+ my $length = shift;
+ if ($length < 0) {
+ $length = -$length;
+ $self->{pointer} -= $length;
+ }
+ substr($self->{buffer}, $self->{pointer}, $length) = '';
+}
+
+sub endpos { length shift->{buffer} }
+
+sub curpos { shift->{pointer} }
+
+sub print {
+}
+
+1;