| Pod-Tree documentation | Contained in the Pod-Tree distribution. |
Pod::Tree::PerlTop - generate a top-level index for Perl PODs
$perl_map = new Pod::Tree::PerlMap; $perl_top = new Pod::Tree::PerlTop $perl_dir, $HTML_dir, $perl_map, %opts; $perl_top->index(@translators); $perl_top->translate; $top = $perl_top->get_top_entry;
Pod::Tree::PerlTop generates a top-level index for Perl PODs.
It also translates perl.pod to perl.html The translator is specially hacked to insert links into the big verbatim paragraph that lists all the other Perl PODs.
new Pod::Tree::PerlTop $perl_dir,
$HTML_dir, $perl_map, %optionsCreates and returns a new Pod::Tree::PerlTop object.
$perl_dir is the root of the Perl source tree.
$HTML_dir is the directory where HTML files will be written.
$perl_map maps POD names to URLs.
Pod::Tree::PerlTop uses it to resolve links in the perl.pod page.
%options are passed through to Pod::Tree::HTML.
index(@translators)Generates a top-level index of all the PODs.
The index is written to HTML_dir/index.html.
@translators is a list of other Pod::Tree::Perl* translator objects.
index makes a get_top_entry call on each of them to obtain
URLs and descriptions of the pages that it links to.
translateTranslates the perl.pod file to HTML.
The HTML page is written to HTML_dir/pod/perl.html
get_top_entryReturns a hash reference of the form
{ URL => $URL,
description => $description }
Pod::Tree::PerlTop uses this to build a top-level index of all the
Perl PODs.
5.005;
Pod::Tree::HTML;
Pod::Tree::PerlUtil;
Nothing.
Pod::Tree::HTML, Pod::Tree::PerlMap,
Steven McDougall, swmcd@world.std.com
Copyright (c) 2000 by Steven McDougall. This module is free software; you can redistribute it and/or modify it under the same terms as Perl.
| Pod-Tree documentation | Contained in the Pod-Tree distribution. |
use strict; use 5.005; use Pod::Tree::HTML; use Pod::Tree::PerlUtil; package Pod::Tree::HTML::PerlTop; use base qw(Pod::Tree::HTML); sub set_links { my($html, $links) = @_; $html->{links} = $links; } sub _emit_verbatim { my($html, $node) = @_; my $stream = $html->{stream}; my $links = $html->{links}; my $text = $node->get_text; $text =~ s( \n\n$ )()x; my @words = split m/(\s+)/, $text; $stream->PRE; for my $word (@words) { if ($links->{$word}) { my $link = $links->{$word}; $stream->A(HREF => "$link.html")->text($word)->_A; } else { $stream->text($word); } } $stream->_PRE; } package Pod::Tree::PerlTop; use base qw(Pod::Tree::PerlUtil); sub new { my %defaults = (bgcolor => '#ffffff', text => '#000000'); my($class, $perl_dir, $html_dir, $link_map, %options) = @_; my $options = { %defaults, %options, link_map => $link_map }; my $pod_src = -d "$perl_dir/pod" ? 'pod' # for building the doc set from a Perl distribution : 'lib/pod'; # for building the doc set from a Windows installation my $perl_top = { perl_dir => $perl_dir, html_dir => $html_dir, index => 'index.html', pod_src => 'pod', pod_dst => 'pod', page => 'perl', options => $options }; bless $perl_top, $class } sub index { my($perl_top, @translators) = @_; $perl_top->report1("index"); my @entries = map { $_->get_top_entry } @translators; my $html_dir = $perl_top->{html_dir}; my $dest = "$html_dir/index.html"; my $fh = new IO::File ">$dest"; defined $fh or die "Pod::Tree::PerlTop::index: Can't open $dest: $!\n"; my $stream = new HTML::Stream $fh; my $options = $perl_top->{options}; my $bgcolor = $options->{bgcolor}; my $text = $options->{text}; my $title = "Perl Documentation"; $stream-> HTML->HEAD; $stream-> TITLE->text($title)->_TITLE; $stream->_HEAD -> BODY(BGCOLOR => $bgcolor, TEXT => $text); $stream->H1->t($title)->_H1; $perl_top->_emit_entries($stream, @entries); $stream->_BODY->_HTML; } sub _emit_entries { my($perl_top, $stream, @entries) = @_; $stream->UL; for my $entry (@entries) { $stream->LI ->A(HREF => $entry->{URL}) ->t($entry->{description}) ->_A ->_LI; } $stream->_UL; } sub translate { my $perl_top = shift; $perl_top->report1("translate"); my $perl_dir = $perl_top->{perl_dir}; my $options = $perl_top->{options}; $options->{link_map}->set_depth(1); my $html_dir = $perl_top->{html_dir}; my $pod_src = $perl_top->{pod_src}; my $pod_dst = $perl_top->{pod_dst}; my $page = $perl_top->{page}; my $source = "$perl_dir/$pod_src/$page.pod"; my $dest = "$html_dir/$pod_dst/$page.html"; my $html = new Pod::Tree::HTML::PerlTop $source, $dest, %$options; my $links = $perl_top->_get_links; $html->set_links($links); $html->translate; } sub get_top_entry { my $perl_top = shift; my $pod_dst = $perl_top->{pod_dst}; my $page = $perl_top->{page}; +{ URL => "$pod_dst/$page.html", description => 'perl(1)' } } sub _get_links { my $perl_top = shift; my $links = {}; $perl_top->_get_pod_links ($links); $perl_top->_get_dist_links($links); $links } sub _get_pod_links { my($perl_top, $links) = @_; my $perl_dir = $perl_top->{perl_dir}; my $pod_src = $perl_top->{pod_src}; my $dir = "$perl_dir/$pod_src"; opendir(DIR, $dir) or die "Pod::Tree::PerlTop::get_pod_links: Can't opendir $dir: $!\n"; my @files = readdir(DIR); closedir(DIR); my @pods = grep { m( \.pod$ )x } @files; my @others = grep { $_ ne 'perl.pod' } @pods; for my $other (@others) { $other =~ s( \.pod$ )()x; $links->{$other} = $other; } } sub _get_dist_links { my($perl_top, $links) = @_; my $dir = $perl_top->{perl_dir}; opendir(DIR, $dir) or die "Pod::Tree::PerlTop::get_dist_links: Can't opendir $dir: $!\n"; my @files = readdir(DIR); closedir(DIR); my @README = grep { /^README/ } @files; for my $file (@README) { my($base, $ext) = split m(\.), $file; $links->{"perl$ext"} = "../$file"; } } 1 __END__