| Apache2-Pod documentation | Contained in the Apache2-Pod distribution. |
Apache2::Pod - base class for converting Pod files to prettier forms
Version 0.27
The Apache2::Pod::* are mod_perl handlers to easily convert Pod to HTML or other forms. You can also emulate perldoc.
All configuration is done in one of the subclasses.
I could envision a day when the user can specify which output format he'd like from the URL, such as
http://your.server/perldoc/f/printf?rtf
No functions are exported. I don't want to dink around with Exporter in mod_perl if I don't need to.
Returns the filename requested off of the $r request object, or what
Perldoc would find, based on Pod::Find.
Returns a module name based on $r->path_info.
Given the full filepath of the perlfunc pod file and a function name,
returns the section of that pod document pertaining to the function. If
the function is not found, returns a pod document phrase stating so.
Theron Lewis <theron at theronlewis dot com>
Adapteded from Andy Lester's <andy at petdance dot com> Apache::Pod
package which was adapted from
Apache2::Perldoc by Rich Bowen <rbowen@ApacheAdmin.com>
Thanks also to Pete Krawczyk, Kjetil Skotheim, Kate Yoak and Chris Eade for contributions.
This package is licensed under the same terms as Perl itself.
| Apache2-Pod documentation | Contained in the Apache2-Pod distribution. |
package Apache2::Pod;
use vars qw( $VERSION ); use strict; $VERSION = '0.27';
use Pod::Find; use Carp (); sub getpodfile { my $r = shift; my $filename; if ($r->filename =~ m/\.pod$/i) { $filename = $r->filename; } else { my $module = resolve_modname( $r ); if ( $module =~ /^f::/ ) { $module =~ s/^f:://; $filename = "-f<$module>::" . Pod::Find::pod_where( {-inc=>1}, "perlfunc" ); } else { $filename = Pod::Find::pod_where( {-inc=>1}, $module ); } } return $filename; } sub resolve_modname { my ( $r ) = @_; my $module = $r->path_info; $module =~ s|/||; $module =~ s|/|::|g; $module =~ s|\.html?$||; # Intermodule links end with .html return $module; } sub getpodfuncdoc { my ( $file, $fun ) = @_; # Functions like -r, -e, etc. are listed under `-X'. my $search_re = ($fun =~ /^-[rwxoRWXOeszfdlpSbctugkTBMAC]$/) ? '(?:I<)?-X' : quotemeta($fun) ; my $document = ''; # TODO: Handle error on open gracefully. open(PFUNC, "<$file") || Carp::croak "Can't open $file: $!"; # Skip introduction local $_; while ( <PFUNC> ) { last if /^=head2 Alphabetical Listing of Perl Functions/; } # Look for our function my $found = 0; my $inlist = 0; while ( <PFUNC> ) { # "The Mothership Connection is here!" if ( m/^=item\s+$search_re\b/ ) { $found = 1; } elsif (/^=item/) { last if $found > 1 and not $inlist; } next unless $found; if (/^=over/) { ++$inlist; } elsif (/^=back/) { --$inlist; } $document .= "$_"; ++$found if /^\w/; # found descriptive text } # TODO: Handle error on open/close gracefully. close PFUNC or Carp::croak "Can't open $file: $!"; if ( ! $document ) { $document = sprintf "=item %s\n\nNo documentation for perl function '%s' found\n", $fun, $fun; # no $fun } return $document; } 1;