Pod::Abstract::Filter - Generic Pod-in to Pod-out filter.


Pod-Abstract documentation Contained in the Pod-Abstract distribution.

Index


Code Index:

NAME

Top

Pod::Abstract::Filter - Generic Pod-in to Pod-out filter.

DESCRIPTION

Top

This is a superclass for filter modules using Pod::Abstract. Subclasses should override the filter sub. Pod::Abstract::Filter classes in the Pod::Abstract::Filter namespace will be used by the paf utility.

To create a filter, you need to implement:

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 Pod::Abstract based software.

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.

METHODS

Top

new

Create a new filter with the specified arguments.

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 -flag=xxx notation.

param

Get the named param. Read only.

filter

Stub method. Does nothing, just returns the original tree.

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).

AUTHOR

Top

Ben Lilburne <bnej@mac.com>

COPYRIGHT AND LICENSE

Top


Pod-Abstract documentation Contained in the Pod-Abstract distribution.
package Pod::Abstract::Filter;
use strict;
use warnings;

use Pod::Abstract;

our $VERSION = '0.20';

sub new {
    my $class = shift;
    my %args = @_;
    
    return bless { %args }, $class;
}

sub require_params {
    return ( );
}

sub param {
    my $self = shift;
    my $param_name = shift;
    return $self->{$param_name};
}

sub filter {
    my $self = shift;
    my $pa = shift;
    
    return $pa;
}

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);
    }
}

1;