X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=installhtml;h=fe6628d476791687fd9cfb30dfae40b73fb0c185;hb=c4fbe2471f42249bd57e1c071c99349d2331aea5;hp=72564d1aa8f2e80c5de00a48e3e68e508cec467c;hpb=3e3baf6d63945cb64e829d6e5c70a7d00f3d3d03;p=p5sagit%2Fp5-mst-13.2.git diff --git a/installhtml b/installhtml index 72564d1..fe6628d 100755 --- a/installhtml +++ b/installhtml @@ -1,14 +1,13 @@ -#!/usr/bin/perl -w +#!./perl -Ilib -w -use lib 'lib'; # use source library if present +# This file should really be extracted from a .PL file +use strict; use Config; # for config options in the makefile use Getopt::Long; # for command-line parsing use Cwd; use Pod::Html; -umask 022; - =head1 NAME installhtml - converts a collection of POD pages to HTML format. @@ -61,13 +60,13 @@ a URL. The default is `/'. =item B<--splithead> POD files to split on =head directive -Colon-separated list of pod files to split by the =head directive. The +Comma-separated list of pod files to split by the =head directive. The .pod suffix is optional. These files should have names specified relative to podroot. =item B<--splititem> POD files to split on =item directive -Colon-separated list of all pod files to split by the =item directive. +Comma-separated list of all pod files to split by the =item directive. The .pod suffix is optional. I does not do the actual split, rather it invokes I to do the dirty work. As with --splithead, these files should have names specified relative to podroot. @@ -78,7 +77,7 @@ The directory containing the splitpod program. The default is `podroot/pod'. =item B<--libpods> library PODs for LEE links -Colon-separated list of "library" pod files. This is the same list that +Comma-separated list of "library" pod files. This is the same list that will be passed to pod2html when any pod is converted. =item B<--verbose> verbose output @@ -93,14 +92,14 @@ The following command-line is an example of the one we use to convert perl documentation: ./installhtml --podpath=lib:ext:pod:vms \ - --podroot=/usr/src/perl \ - --htmldir=/perl/nmanual \ - --htmlroot=/perl/nmanual \ - --splithead=pod/perlipc \ - --splititem=pod/perlfunc \ - --libpods=perlfunc:perlguts:perlvar:perlrun:perlop \ - --recurse \ - --verbose + --podroot=/usr/src/perl \ + --htmldir=/perl/nmanual \ + --htmlroot=/perl/nmanual \ + --splithead=pod/perlipc \ + --splititem=pod/perlfunc \ + --libpods=perlfunc,perlguts,perlvar,perlrun,perlop \ + --recurse \ + --verbose =head1 AUTHOR @@ -110,6 +109,8 @@ Chris Hall Ehallc@cs.colorado.eduE =cut +my $usage; + $usage =<:...: --podroot= --htmldir= --htmlroot= --norecurse --recurse @@ -142,6 +143,9 @@ Usage: $0 --help --podpath=:...: --podroot= END_OF_USAGE +my (@libpods, @podpath, $podroot, $htmldir, $htmlroot, $recurse, @splithead, + @splititem, $splitpod, $verbose, $pod2html); + @libpods = (); @podpath = ( "." ); # colon-separated list of directories containing .pod # and .pm files to be converted. @@ -159,8 +163,14 @@ $pod2html = "pod/pod2html"; usage("") unless @ARGV; +# Overcome shell's p1,..,p8 limitation. +# See vms/descrip_mms.template -> descrip.mms for invokation. +if ( $^O eq 'VMS' ) { @ARGV = split(/\s+/,$ARGV[0]); } + +use vars qw( %Options ); + # parse the command-line -$result = GetOptions( qw( +my $result = GetOptions( \%Options, qw( help podpath=s podroot=s @@ -192,8 +202,8 @@ $splitpod = "$podroot/pod" unless $splitpod; # ignored in the conversion process. these are files that have been # process by splititem or splithead and should not be converted as a # result. -@ignore = (); - +my @ignore = (); +my @splitdirs; # split pods. its important to do this before convert ANY pods because # it may effect some of the links @@ -205,25 +215,25 @@ split_on_item($podroot, \@splitdirs, \@ignore, @splititem); # convert the pod pages found in @poddirs #warn "converting files\n" if $verbose; #warn "\@ignore\t= @ignore\n" if $verbose; -foreach $dir (@podpath) { +foreach my $dir (@podpath) { installdir($dir, $recurse, $podroot, \@splitdirs, \@ignore); } # now go through and create master indices for each pod we split -foreach $dir (@splititem) { +foreach my $dir (@splititem) { print "creating index $htmldir/$dir.html\n" if $verbose; create_index("$htmldir/$dir.html", "$htmldir/$dir"); } -foreach $dir (@splithead) { +foreach my $dir (@splithead) { $dir .= ".pod" unless $dir =~ /(\.pod|\.pm)$/; # let pod2html create the file runpod2html($dir, 1); # now go through and truncate after the index $dir =~ /^(.*?)(\.pod|\.pm)?$/sm; - $file = "$htmldir/$1"; + my $file = "$htmldir/$1"; print "creating index $file.html\n" if $verbose; # read in everything until what would have been the first =head @@ -231,10 +241,15 @@ foreach $dir (@splithead) { open(H, "<$file.html") || die "$0: error opening $file.html for input: $!\n"; $/ = ""; - @data = (); + my @data = (); while () { last if /NAME=/; - s,HREF="#(.*)">,HREF="$file/$1.html">,g; + $_ =~ s{HREF="#(.*)">}{ + my $url = "$file/$1.html" ; + $url = Pod::Html::relativize_url( $url, "$file.html" ) + if ( ! defined $Options{htmlroot} || $Options{htmlroot} eq '' ); + "HREF=\"$url\">" ; + }eg; push @data, $_; } close(H); @@ -242,7 +257,7 @@ foreach $dir (@splithead) { # now rewrite the file open(H, ">$file.html") || die "$0: error opening $file.html for output: $!\n"; - print H "@data\n"; + print H "@data", "\n"; close(H); } @@ -256,24 +271,24 @@ sub usage { sub parse_command_line { - usage() if defined $opt_help; - $opt_help = ""; # make -w shut up + usage() if defined $Options{help}; + $Options{help} = ""; # make -w shut up # list of directories - @podpath = split(":", $opt_podpath) if defined $opt_podpath; + @podpath = split(":", $Options{podpath}) if defined $Options{podpath}; # lists of files - @splithead = split(",", $opt_splithead) if defined $opt_splithead; - @splititem = split(",", $opt_splititem) if defined $opt_splititem; - @libpods = split(",", $opt_libpods) if defined $opt_libpods; + @splithead = split(",", $Options{splithead}) if defined $Options{splithead}; + @splititem = split(",", $Options{splititem}) if defined $Options{splititem}; + @libpods = split(",", $Options{libpods}) if defined $Options{libpods}; - $htmldir = $opt_htmldir if defined $opt_htmldir; - $htmlroot = $opt_htmlroot if defined $opt_htmlroot; - $podroot = $opt_podroot if defined $opt_podroot; - $splitpod = $opt_splitpod if defined $opt_splitpod; + $htmldir = $Options{htmldir} if defined $Options{htmldir}; + $htmlroot = $Options{htmlroot} if defined $Options{htmlroot}; + $podroot = $Options{podroot} if defined $Options{podroot}; + $splitpod = $Options{splitpod} if defined $Options{splitpod}; - $recurse = $opt_recurse if defined $opt_recurse; - $verbose = $opt_verbose if defined $opt_verbose; + $recurse = $Options{recurse} if defined $Options{recurse}; + $verbose = $Options{verbose} if defined $Options{verbose}; } @@ -289,11 +304,13 @@ sub absolute_path { sub create_index { my($html, $dir) = @_; my(@files, @filedata, @index, $file); + my($lcp1,$lcp2); + # get the list of .html files in this directory opendir(DIR, $dir) || die "$0: error opening directory $dir for reading: $!\n"; - @files = sort(grep(/\.html$/, readdir(DIR))); + @files = sort(grep(/\.html?$/, readdir(DIR))); closedir(DIR); open(HTML, ">$html") || @@ -311,18 +328,27 @@ sub create_index { close(IN); # pull out the NAME section + my $name; ($name) = grep(/NAME=/, @filedata); - $name =~ m,/H1>\s(\S+)\s[\s-]*(.*?)\s*$,sm; - print HTML qq(); - print HTML "
$1
$2\n" if defined $1; -# print HTML qq($1
\n") if defined $1; + ($lcp1,$lcp2) = ($name =~ m,/H1>\s(\S+)\s[\s-]*(.*?)\s*$,sm); + if (defined $lcp1 and $lcp1 eq '

') { # Uninteresting. Try again. + ($lcp1,$lcp2) = ($name =~ m,/H1>\s

\s(\S+)\s[\s-]*(.*?)\s*$,sm); + } + my $url= "$dir/$file" ; + if ( ! defined $Options{htmlroot} || $Options{htmlroot} eq '' ) { + $url = Pod::Html::relativize_url( "$dir/$file", $html ) ; + } + + print HTML qq(); + print HTML "

$lcp1
$lcp2\n" if defined $lcp1; +# print HTML qq($lcp1
\n") if defined $lcp1; next; @index = grep(/.*/s, @filedata); for (@index) { - s/(\s*\s*)/$2/s; + s/(\s*\s*)/$lcp2/s; s,#,$dir/$file#,g; # print HTML "$_\n"; print HTML "$_\n


\n"; @@ -364,7 +390,7 @@ sub split_on_item { print "splitting files by item.\n" if $verbose && $#splititem >= 0; $pwd = getcwd(); my $splitter = absolute_path($pwd, "$splitpod/splitpod"); - foreach $pod (@splititem) { + foreach my $pod (@splititem) { # figure out the directory to split into $pod =~ s,^([^/]*)$,/$1,; $pod =~ m,(.*?)/(.*?)(\.pod)?$,; @@ -424,7 +450,7 @@ sub splitpod { # create list of =head[1-6] sections so that we can rewrite # L<> links as necessary. - %heads = (); + my %heads = (); foreach $i (0..$#poddata) { $heads{htmlize($1)} = 1 if $poddata[$i] =~ /=head[1-6]\s+(.*)/; } @@ -432,7 +458,7 @@ sub splitpod { # create a directory of a similar name and store all the # files in there $pod =~ s,.*/(.*),$1,; # get the last part of the name - $dir = $pod; + my $dir = $pod; $dir =~ s/\.pod//g; push(@$splitdirs, "$poddir/$dir"); mkdir("$poddir/$dir", 0755) || @@ -498,7 +524,7 @@ sub installdir { || die "$0: error opening directory $podroot/$dir: $!\n"; # find the directories to recurse on - @dirlist = map { "$dir/$_" } + @dirlist = map { if ($^O eq 'VMS') {/^(.*)\.dir$/i; "$dir/$1";} else {"$dir/$_";}} grep(-d "$podroot/$dir/$_" && !/^\.{1,2}/, readdir(DIR)) if $recurse; rewinddir(DIR); @@ -519,7 +545,7 @@ sub installdir { } # install all the pods we found - foreach $pod (@podlist) { + foreach my $pod (@podlist) { # check if we should ignore it. next if grep($_ eq "$podroot/$pod.pod", @$ignore); @@ -533,7 +559,7 @@ sub installdir { } # install all the .pm files we found - foreach $pm (@pmlist) { + foreach my $pm (@pmlist) { # check if we should ignore it. next if grep($_ eq "$pm.pm", @ignore); @@ -569,9 +595,11 @@ sub runpod2html { #system("./pod2html", Pod::Html'pod2html( #Pod::Html'pod2html($pod2html, + "--htmldir=$htmldir", "--htmlroot=$htmlroot", "--podpath=".join(":", @podpath), "--podroot=$podroot", "--netscape", + "--header", ($doindex ? "--index" : "--noindex"), "--" . ($recurse ? "" : "no") . "recurse", ($#libpods >= 0) ? "--libpods=" . join(":", @libpods) : "",