The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

# ABSTRACT: Simple object to facilitate a pluggable filter architecture
use strict;
our $VERSION = '0.21';
sub new {
my ( $class, %args ) = @_;
return bless {%args}, $class;
}
sub filters { return ( $_[0]->{filters} ||= [] ) }
sub add_filter {
my $self = shift;
push @{ $self->filters }, @_;
}
sub prefilter {
my ( $self, $code ) = @_;
for my $filter ( @{ $self->filters } ) {
$code = $filter->prefilter($code);
}
# warn "After prefilter, before tidy\n";
# warn $code;
return $code;
}
sub postfilter {
my ( $self, $code ) = @_;
# warn "After tidy, before postfilter\n";
# warn $code;
for my $filter ( @{ $self->filters } ) {
$code = $filter->postfilter($code);
}
return $code;
}
1;
__END__
=pod
=head1 NAME
Perl::Tidy::Sweetened::Pluggable - Simple object to facilitate a pluggable filter architecture
=head1 VERSION
version 0.21
=head1 SYNOPSIS
our $plugins = Perl::Tidy::Sweetened::Pluggable->new();
$plugins->add_filter(
Perl::Tidy::Sweetened::Keyword::SubSignature->new(
keyword => 'method',
marker => 'METHOD',
) );
$plugins->prefilter( $code );
$plugins->postfilter( $code );
=head1 DESCRIPTION
Builds a pluggable, chainable list of filters.
=head1 THANKS
See L<Perl::Tidy::Sweetened>
=head1 BUGS
Please report any bugs or suggestions at
=head1 AUTHOR
Mark Grimes, E<lt>mgrimes@cpan.orgE<gt>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2013 by Mark Grimes, E<lt>mgrimes@cpan.orgE<gt>.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut