package Apache::Lint; use warnings; use strict; =head1 NAME Apache::Lint - Apache wrapper around HTML::Lint =head1 SYNOPSIS Apache::Lint passes all your mod_perl-generated code through the HTML::Lint module, and spits out the resulting errors into. SetHandler perl-script PerlSetVar Filter On PerlHandler Your::Handler Apache::Lint Your handler C must be Apache::Filter-aware. At the top of your handler, put this line: my $r = shift; $r = $r->filter_register =head1 VERSION Version 0.10 =cut our $VERSION = '0.10'; use mod_perl 1.21; use Apache::Constants qw( OK HTTP_OK ); use Apache::Log; use HTML::Lint; =head1 FUNCTIONS =head2 handler() Apache::Filter-aware content handler. Your other handlers in the chain must also be filter-aware. =cut sub handler { my $r = shift; $r = $r->filter_register; my $log = $r->server->log; # Get any output from previous filters in the chain. (my $fh, my $handler_status) = $r->filter_input; return $handler_status unless $handler_status == OK; my $output = do { local $/ = undef; <$fh> }; $r->print( $output ); my $response_code = $r->status; my $type = $r->content_type; return OK unless ($r->content_type eq "text/html") && ($r->status eq HTTP_OK); my $lint = new HTML::Lint; $lint->newfile( $r->uri ); $lint->parse( $output ); $lint->eof; if ( $lint->errors ) { $log->warn( "Apache::Lint found errors in ", $r->the_request ); $log->warn( $_->as_string() ) for $lint->errors; } return $handler_status; } 1; __END__ =head1 SEE ALSO L, L =head1 TODO =over 4 =item * Make it work =back =head1 LICENSE This code may be distributed under the same terms as Perl itself. Please note that these modules are not products of or supported by the employers of the various contributors to the code. =head1 AUTHOR Andy Lester, Eandy@petdance.comE =cut