1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
package Pod::Abstract::Filter;
use strict;
use warnings;
use Pod::Abstract;
our $VERSION = '0.20';
=head1 NAME
Pod::Abstract::Filter - Generic Pod-in to Pod-out filter.
=head1 DESCRIPTION
This is a superclass for filter modules using
Pod::Abstract. Subclasses should override the C<filter>
sub. Pod::Abstract::Filter classes in the Pod::Abstract::Filter
namespace will be used by the C<paf> utility.
To create a filter, you need to implement:
=over
=item filter
Takes a Pod::Abstract::Node tree, and returns either another tree, or
a string. If a string is returned, it will be re-parsed to be input to
any following filter, or output directly if it is the last filter in
the list.
It is recommended your filter method produce a Node tree if you are able
to, as this will improve interoperability with other C<Pod::Abstract>
based software.
=item require_params
If you want positional arguments following your filter in the style of:
paf find [thing] Pod::Abstract
then override require_params to list the named arguments that are to
be accepted after the filter name.
=back
=head1 METHODS
=head2 new
Create a new filter with the specified arguments.
=cut
sub new {
my $class = shift;
my %args = @_;
return bless { %args }, $class;
}
=head2 require_params
Override to return a list of parameters that must be provided. This
will be accepted in order on the command line, unless they are first
set using the C<-flag=xxx> notation.
=cut
sub require_params {
return ( );
}
=head2 param
Get the named param. Read only.
=cut
sub param {
my $self = shift;
my $param_name = shift;
return $self->{$param_name};
}
=head2 filter
Stub method. Does nothing, just returns the original tree.
=cut
sub filter {
my $self = shift;
my $pa = shift;
return $pa;
}
=head2 run
Run the filter. If $arg is a string, it will be parsed
first. Otherwise, the Abstract tree will be used. Returns either a
string or an abstract tree (which may be the original tree, modified).
=cut
sub run {
my $self = shift;
my $arg = shift;
if( eval { $arg->isa( 'Pod::Abstract::Node' ) } ) {
return $self->filter($arg);
} else {
my $pa = Pod::Abstract->load_string($arg);
return $self->filter($pa);
}
}
=head1 AUTHOR
Ben Lilburne <bnej@mac.com>
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2009 Ben Lilburne
This program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
1;
|