Text::Snippet::TabStop - Abstract class for other tab stop classes


Text-Snippet documentation Contained in the Text-Snippet distribution.

Index


Code Index:

NAME

Top

Text::Snippet::TabStop - Abstract class for other tab stop classes

VERSION

Top

version 0.04

SYNOPSIS

Top

This module provides some basic functionality as a base class for specific tab stop implementations. It requires the sub-class implement a parse method. If an object is created directly, it requires a src and <index> parameter be passed.

CLASS METHODS

Top

parse

This is a stub method that will die if the sub-class has not provided a full implementation. The method should accept a single argument and take care of instantiating the object with the correct arguments.

INSTANCE METHODS

Top

* to_string

Returns the string representation of this object. Also available via overloaded stringification.

* src

Returns the original source that was parsed to create this tab stop object.

* index

Returns the index of this tab stop as specified on object creation.

* replacement

Returns replacement (if any) that has been supplied for this tab stop.

* replace

Serves as a setter for the replacement attribute.

* parent

Returns the parent tab stop (if any) that this tab stop reflects.

* has_parent

A "predicate" method that returns a boolean value indicating whether the parent attribute has a defined value.

* has_replacement

A "predicate" method that returns a boolean value indicating whether the replacement attribute has a defined value.

AUTHOR

Top

  Brian Phillips <bphillips@cpan.org>

COPYRIGHT AND LICENSE

Top


Text-Snippet documentation Contained in the Text-Snippet distribution.

package Text::Snippet::TabStop;
BEGIN {
  $Text::Snippet::TabStop::VERSION = '0.04';
}

# ABSTRACT: Abstract class for other tab stop classes

use strict;
use warnings;
use Carp qw(croak);
use overload '""' => sub { shift->to_string };


sub parse {
	croak "must be implemented in sub class" if(shift eq __PACKAGE__);
}

sub _new {
	my $class = shift;
	croak "this is an abstract class - please instantiate a sub-class of " . __PACKAGE__ if($class eq __PACKAGE__);

	my %args = @_;
	for my $k(qw(src index)){
		croak "$k is required" unless defined $args{$k};
	}
	return bless \%args, $class;
}


use Class::XSAccessor
		getters    => { src        => 'src', index => 'index', replacement => 'replacement' },
		setters    => { replace    => 'replacement' },
		accessors  => { parent     => 'parent' },
		predicates => { has_parent => 'parent', has_replacement => 'replacement' };


sub to_string {
	my $self = shift;
	return $self->parent->to_string if($self->has_parent);
	my $replacement = $self->replacement;
	return defined($replacement) ? $replacement : '';
}

1;

__END__