The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

#============================================================================
#
# Text::MetaText::Directive
#
# DESCRIPTION
# A very simple MetaText directive class which is used as the default
# class (and is a suitable base class) for Directive objects created by
# the MetaText Factory object.
#
# AUTHOR
# Andy Wardley <abw@kfs.org>
#
# COPYRIGHT
# Copyright (C) 1996-1998 Andy Wardley. All Rights Reserved.
#
# This module is free software; you can redistribute it and/or
# modify it under the terms of the Perl Artistic Licence.
#
#----------------------------------------------------------------------------
#
# $Id: Directive.pm,v 0.4 1998/09/01 12:59:37 abw Exp abw $
#
#============================================================================
use strict;
use vars qw( $VERSION $ERROR );
require 5.004;
#========================================================================
# ----- CONFIGURATION -----
#========================================================================
$VERSION = sprintf("%d.%02d", q$Revision: 0.4 $ =~ /(\d+)\.(\d+)/);
#========================================================================
# ----- PUBLIC METHODS -----
#========================================================================
#========================================================================
#
# new(\%cfg)
#
# Module constructor. A reference to a hash array is passed which is
# simply blessed into the relevant class and returned. This is an
# extremely simplistic construction process which relies on a well-
# defined relationship with the Factory class. Derived classes may
# easily extend the functionality of the constructor at this point.
#
# Returns a reference to a newly created Text::MetaText::Directive.
# Derived classes should return a reference to a sub-class of
# Text::MetaText::Directive or undef on error. If an error condition
# occurs, it should be reported using the private $self->_error()
# method. This makes the error message available to the calling
# factory object via the error() package function.
#
#========================================================================
sub new {
my $class = shift;
my $self = shift;
my %params = (
HAS_CONDITION => [ qw( IF UNLESS ) ],
HAS_POSTPROC => [ qw( FORMAT FILTER ) ],
);
my ($key, $value);
# check a parameter hash was supplied
unless (defined $self) {
$self->_error("Directive constructor expects a parameter hash");
return undef;
}
# bless the hashref into the required class
bless $self, $class;
# the only thing we do to the new Directive is to examine its internals
# and see which optimisation flags we need to set
while (($key, $value) = each %params) {
foreach (@$value) {
$self->{ $key } = 1, last
if defined $self->{ $_ };
}
}
$self;
}
#========================================================================
#
# error()
#
# Returns the value of the $ERROR package variable which may be undef
# to indicate no current error condition. May be called as a package
# function or an object method
#
#========================================================================
sub error {
return $ERROR;
}
#========================================================================
# ----- PRIVATE METHODS -----
#========================================================================
#========================================================================
#
# sub _error($errmsg, @params)
#
# Formats the error message format, $errmsg, and any additional parameters,
# @params with sprintf and sets $ERROR package variable with the resulting
# string. The package variable, $ERROR, is used rather than an object
# member because the error reporting may have to deal with constructor
# failures where no object is returned. May be called as a package
# function or an object method.
#
#========================================================================
sub _error {
my $self = shift;
my $msg = ref($self) ? shift : $self;
$ERROR = defined($msg)
? sprintf($msg, @_)
: undef;
}
1;
=head1 NAME
Text::MetaText::Directive - MetaText Directive object class.
=head1 SYNOPSIS
use Text::MetaText::Directive;
my $directive = Text::MetaText::Directive->new(\%params);
=head1 DESCRIPTION
Objects of the Text::MetaText::Directive class are instantiated by the
Text::MetaText::Factory class from within the Text::MetaText module.
The Factory and Directive classes can be sub-classed to create a more
specific processing system.
=head1 AUTHOR
Andy Wardley E<lt>abw@kfs.orgE<gt>
See also:
=head1 REVISION
$Revision: 0.4 $
=head1 COPYRIGHT
Copyright (c) 1996-1998 Andy Wardley. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it
under the terms of the Perl Artistic License.
=head1 SEE ALSO
For more information, see the main Text::MetaText documentation:
perldoc Text::MetaText
For more information about the author and other Perl development work:
For more information about Perl in general:
=cut