/usr/share/doc/libpod-xhtml-perl/examples/pod2xhtml.pl is in libpod-xhtml-perl 1.61-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | #!/usr/bin/perl
use strict;
use CGI;
use Pod::Xhtml;
#Inputs
my @css = CGI::param('css');
my $file = (CGI::param('file') =~ m|^([\w\-/]+\.\w+)$|)[0]; #Only allow sensibly named files (no ../ etc)
my $module = (CGI::param('module') =~ m|^([\w:]+)$|)[0]; #Only allow sensible module names
my $docroot = $ENV{DOCROOT} || $ENV{DOCUMENT_ROOT};
#Deduce filename
if(defined $module)
{
$file = $module;
$file =~ s|::|/|g;
MODULESEARCH:
foreach my $inc_path (@INC)
{
foreach my $ext (qw(pm pod)) {
my $candidate = "$inc_path/$file.$ext";
if(-f $candidate) {
$file = $candidate;
last MODULESEARCH;
}
}
}
}
elsif(defined $file)
{
$file = $docroot.$file;
}
elsif(defined $ENV{PATH_TRANSLATED})
{
$file = $ENV{PATH_TRANSLATED};
}
#Render
print CGI::header();
if(not defined $file)
{
print "No recognisable filename\n";
}
elsif(not -f $file)
{
print "$file does not exist\n";
}
else
{
#Render the XHTML
my $link_parser = new LinkResolver(\@css);
my $parser = new Pod::Xhtml(StringMode => 1, LinkParser => $link_parser);
$parser->addHeadText(qq[<link rel="stylesheet" href="$_"/>\n]) for @css;
$parser->parse_from_file($file);
print $parser->asString();
}
#
# Subclass Pod::Hyperlink to create self-referring links
#
package LinkResolver;
use Pod::ParseUtils;
use base qw(Pod::Hyperlink);
sub new
{
my $class = shift;
my $css = shift;
my $self = $class->SUPER::new();
$self->{css} = $css;
return $self;
}
sub node
{
my $self = shift;
if($self->SUPER::type() eq 'page')
{
my $url = "?module=".$self->SUPER::page();
$url.=";css=".$_ for @{$self->{css}};
return $url;
}
$self->SUPER::node(@_);
}
sub text
{
my $self = shift;
return $self->SUPER::page() if($self->SUPER::type() eq 'page');
$self->SUPER::text(@_);
}
sub type
{
my $self = shift;
return "hyperlink" if($self->SUPER::type() eq 'page');
$self->SUPER::type(@_);
}
1;
=head1 NAME
pod2xhtml - CGI to display POD as XHTML
=head1 SYNOPSIS
http://localhost/cgi-bin/pod2xhtml.pl?file=/cgi-bin/pod2xhtml.pl
http://localhost/cgi-bin/pod2xhtml.pl?module=Pod::Xhtml
=head1 DESCRIPTION
Displays POD of scripts within the web server's document root and modules within @INC.
If you keep your CGIs in a directory parallel to your web content, you can use the $DOCROOT environment variable to allow this script access.
For example if your web server layout is:
/var/wwwroot/www
/var/wwwroot/cgi-bin
You can add:
SetEnv DOCROOT /var/wwwroot
to your Apache config to allow the script access to all the files below /var/wwwroot.
=head1 CGI PARAMETERS
css - URL of stylesheet to apply
file - name of file relative to document root
module - name of module in @INC
=head1 VERSION
$Revision: 1.8 $ on $Date: 2004/10/22 14:44:05 $ by $Author: simonf $
=head1 AUTHOR
John Alden E<lt>cpan _at_ bbc _dot_ co _dot_ ukE<gt>
=head1 COPYRIGHT
(c) BBC 2004. This program is free software; you can redistribute it and/or
modify it under the GNU GPL.
See the file COPYING in this distribution, or http://www.gnu.org/licenses/gpl.txt
=cut
|