| Text-Snippet documentation | Contained in the Text-Snippet distribution. |
Text::Snippet::TabStop - Abstract class for other tab stop classes
version 0.04
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.
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.
Returns the string representation of this object. Also available via overloaded stringification.
Returns the original source that was parsed to create this tab stop object.
Returns the index of this tab stop as specified on object creation.
Returns replacement (if any) that has been supplied for this tab stop.
Serves as a setter for the replacement attribute.
Returns the parent tab stop (if any) that this tab stop reflects.
A "predicate" method that returns a boolean value indicating whether
the parent attribute has a defined value.
A "predicate" method that returns a boolean value indicating whether
the replacement attribute has a defined value.
Brian Phillips <bphillips@cpan.org>
This software is copyright (c) 2010 by Brian Phillips.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
| 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__