Re: adding pages to ActivePerl HTML documentation tree

From: David Christensen <dpchrist_at_holgerdanske.com>
Date: Thu, 18 Sep 2003 18:15:17 -0700
To: <activeperl_at_listserv.ActiveState.com>

activeperl_at_listserv.ActiveState.com:

I wrote:
>> What is the correct way to add links into perltoc.html? E.g. is
>> there a tool that builds this file, or do I just hack it with my
>> editor and/or a script?

michael higgins wrote:
>This does it:
>perl -MActivePerl::DocTools -e "ActivePerl::DocTools::WriteTOC()"

Jonathan D Johnston wrote:
> 1) Drop new HTML doc(s) in the appropriate dir(s) under Perl/html/ .
> 2) Execute the following Perl one-liner:
> perl -MActivePerl::DocTools -e "ActivePerl::DocTools::WriteTOC()"

DH wrote:
> Hi. I am PodMaster. Here's some reading material
> http://perlmonks.com/index.pl?node_id=287965
> http://perlmonks.thepen.com/287965.html

Thanks for the replies! :-)

Solution follows.

David

--
#! /usr/bin/perl -w
#######################################################################
# $Id: gen_html.pl,v 1.5 2003/09/19 01:12:33 dpchrist Exp $
#
# Perl script to generate HTML documentation for Prima 1.12 installed
# into ActivePerl 806.  Run this script from the root of your unzipped
# archive tree after you have run Prima's ms_install.pl.
#
# Copyright 2003 by David Christensen <dpchrist_at_holgerdanske.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the same terms as Perl itself. 
#######################################################################
# uses:
#----------------------------------------------------------------------
use warnings;
use strict;
use ActivePerl::DocTools;
use File::Basename;
use File::Copy;
use File::Find;
use File::Spec::Functions qw( :ALL );
#######################################################################
# configuration variables -- change these to match your Perl
# installation:
#----------------------------------------------------------------------
##### root of installed Prima.pm and Prima::* modules -- note forward
##### slashes:
my $perl_site_lib = 'C:/Perl/site/lib';
##### root where Prima HTML documents should go -- note forward
##### slashes:
my $perl_html = 'C:/Perl/html/site/lib';
##### ActivePerl's table of contents file -- note forward slashes:
my $perl_html_perltoc = 'C:/Perl/html/perltoc.html';
##### full path to ActivePerl's pod2html utility -- note backslashes:
my $pod2html = 'C:\Perl\bin\pod2html.bat';
##### some .pm files don't have pod, and generate an empty HTML page.
##### script will unlink generated pages that are smaller than this
##### threshold:
my $empty_html_size = 500;
#######################################################################
# file-scope lexicals:
#----------------------------------------------------------------------
my $overwrite   = 0;
#######################################################################
# subroutines:
#----------------------------------------------------------------------
sub gen_html
{
    my $src_path = shift;
    
    my @dirs = splitdir(dirname($src_path));
    foreach my $dir (splitdir($perl_site_lib)) {
        shift @dirs if $dirs[0] eq $dir;
    }
    
    my $dest_dir = catdir($perl_html, @dirs);
    unless (-d $dest_dir) {
        mkdir $dest_dir
            or die "error making directory '$dest_dir': $!";
    }
    my $file = basename $src_path;
    $file =~ s/pm$/html/;
    my $dest_path = catfile($dest_dir, $file);
    if (-f $dest_path && $overwrite !~ /^a/) {
        print "file '$dest_path' already exists. ",
            "Overwrite (yes|all|No|exit)? ";
        $overwrite = <>;
        exit(0) if $overwrite =~ /^e/i;
        return unless $overwrite =~ /^y/i || $overwrite =~ /^a/i;
    }
    $src_path  =~ s|/|\\|og;
    $dest_path =~ s|/|\\|og;
    my $line = "$pod2html -htmlroot=file:///$perl_html "
             . "$src_path > $dest_path";
    print "$line\n";
    system $line and die "system error: $!";
    if (-s $dest_path < $empty_html_size) {
        unlink $dest_path;
    }
}
#----------------------------------------------------------------------
sub wanted
{
    return unless $_ =~ /\.pm$/;
    
    gen_html($File::Find::name);
}
#######################################################################
# main script:
#----------------------------------------------------------------------
my $prima_pm    = catfile($perl_site_lib, 'Prima.pm');
my $prima_dir   = catdir($perl_site_lib, 'Prima');
die "This script only works under Microsoft Windows"
    unless $^O =~ /MSWin32/;
die "ActivePerl not found -- install ActiveState Perl "
  . "and/or check this script's configuration variables"
    unless -d $perl_site_lib;
die "Prima modules not found -- install Prima "
  . "and/or check this script's configuration variables"
    unless -f $prima_pm
        && -d $prima_dir;
gen_html($prima_pm);
find(\&wanted, ($prima_dir));
(my $save_file = $perl_html_perltoc) =~ s|(\.html)|.sav$1|;
if (-f $save_file) {
    print "file `$save_file` already exists.  Overwrite (yes|Exit)?";
    my $answer = <>;
    exit(0) unless $answer =~ /^y/i;
}
print "copying '$perl_html_perltoc' to '$save_file'\n";
copy($perl_html_perltoc, $save_file);
print "generating new table of contents '$perl_html_perltoc'\n";
ActivePerl::DocTools::WriteTOC();
#######################################################################
Received on Fri 19 Sep 2003 - 03:15:53 CEST

This archive was generated by hypermail 2.2.0 : Sat 19 Mar 2011 - 18:35:05 CET