| Apache-Pod documentation | Contained in the Apache-Pod distribution. |
Apache::Pod::HTML - base class for converting Pod files to prettier forms
Version 0.22
A simple mod_perl handler to easily convert Pod to HTML or other forms. You can also emulate perldoc.
Add the following lines to your httpd.conf.
<Files *.pod>
SetHandler perl-script
PerlHandler Apache::Pod::HTML
</Files>
All *.pod files will magically be converted to HTML.
The following configuration should go in your httpd.conf
<Location /perldoc>
SetHandler perl-script
PerlHandler Apache::Pod::HTML
PerlSetVar STYLESHEET auto
PerlSetVar LINKBASE http://www.example.com/docs/
</Location>
You can then get documentation for a module Foo::Bar at the URL
http://your.server.com/perldoc/Foo::Bar
Note that you can also get the standard Perl documentation with URLs
like http://your.server.com/perldoc/perlfunc or just
http://your.server.com/perldoc for the main Perl docs.
Finally, you can search for a particular Perl keyword with
http://your.server.com/perldoc/f/keyword The 'f' is used by analogy
with the -f flag to perldoc.
Specifies the stylesheet to use with the output HTML file.
<Location /perldoc>
SetHandler perl-script
PerlHandler Apache::Pod::HTML
PerlSetVar STYLESHEET auto
</Location>
Specifying 'auto' for the stylesheet will cause the built-in CSS stylesheet to be used. If you prefer, you can replace the word 'auto' with the URL of your own custom stylesheet file.
When INDEX is true, a table of contents is added at the top of the HTML document.
<Files *.pod>
SetHandler perl-script
PerlHandler Apache::Pod::HTML
PerlSetVar INDEX 1
</Files>
By default, this is off.
When GZIP is true, the whole HTTP body is compressed. The user's browser must accept gzip, and Compress::Zlib must be available. Otherwise, GZIP is ignored.
<Files *.pod>
SetHandler perl-script
PerlHandler Apache::Pod::HTML
PerlSetVar GZIP 1
</Files>
By default, this is off.
Specifying an optional LINKBASE variable changes the external
HTTP links to use a URL prefix of your specification instead of using
Pod::Simple::HTML's default. Using the magic word LOCAL will make
links local instead of external.
Andy Lester <andy@petdance.com>, adapted from Apache::Perldoc by
Rich Bowen <rbowen@ApacheAdmin.com>
This package is licensed under the same terms as Perl itself.
| Apache-Pod documentation | Contained in the Apache-Pod distribution. |
package Apache::Pod::HTML;
use strict; use vars qw( $VERSION ); $VERSION = '0.22';
use Apache::Pod; use Apache::Constants; use URI::Escape;
sub handler { my $r = shift; if ( $r->path_info eq '/auto.css' ) { $r->content_type( 'text/css' ); $r->send_http_header; $r->print( _css() ); return OK; } my $body; my $file = Apache::Pod::getpodfile( $r ); if ( $file ) { my $parser = Pod::Simple::HTML->new; $parser->no_errata_section(1); $parser->complain_stderr(1); $parser->output_string( \$body ); $parser->index( $r->dir_config('INDEX') ); if ( my $prefix = $r->dir_config('LINKBASE') ) { if ( $prefix eq 'LOCAL' ) { $prefix = $r->location . '/'; } $parser->perldoc_url_prefix( $prefix ); } $parser->parse_file( $file ); # TODO: Send the timestamp of the file in the header my $stylesheet = $r->dir_config('STYLESHEET') || ''; $stylesheet = $r->location . '/auto.css' if $stylesheet =~ /^auto/i; if ( $stylesheet ) { # Stick in a link to our stylesheet $stylesheet = qq(<LINK REL="stylesheet" HREF="$stylesheet" TYPE="text/css">); $body =~ s{(?=</head)}{$stylesheet\n}i; } if ( $r->dir_config('GZIP') && ($r->header_in('Accept-Encoding') =~ /gzip/) ) { local $@; eval { require Compress::Zlib; $body = Compress::Zlib::memGzip( $body ); $r->header_out('Content-Encoding','gzip'); }; } } else { $body = "<HTML><HEAD><TITLE>Not found</TITLE></HEAD><BODY>That module doesn't exist</BODY></HTML>"; } $r->content_type('text/html'); $r->send_http_header; $r->print( $body ); return OK; } sub _css { return <<'EOF'; BODY { background: white; color: black; font-family: times,serif; margin: 0; padding: 1ex; } TABLE { border-collapse: collapse; border-spacing: 0; border-width: 0; color: inherit; } A:link, A:visited { background: transparent; color: #006699; } PRE { background: #eeeeee; border: 1px solid #888888; color: black; padding-top: 1em; padding-bottom: 1em; white-space: pre; } H1 { background: transparent; color: #006699; font-size: x-large; font-family: tahoma,sans-serif; } H2 { background: transparent; color: #006699; font-size: large; font-family: tahoma,sans-serif; } .block { background: transparent; } TD .block { color: #006699; background: #dddddd; padding: 0.2em; font-size: large; } HR { display: none; } EOF } package My::Pod::Simple::HTML; use Pod::Simple::HTML; our @ISA = qw( Pod::Simple::HTML ); *VERSION = *Pod::Simple::HTML::VERSION; sub resolve_pod_page_link { my $self = shift; my $to = shift; my $section = shift; my $link = $to; return uri_escape( $link ); }
1;