X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=installhtml;h=cfbbe9f5c67ac046a1147d9d5fc3dca34e5555e7;hb=8c99d73ee7ce90de2561496f683f3850d1269e1d;hp=d42faa17d6a936942568bdab1a7feb2a91d2d7fa;hpb=e05c04ea84bc0849096210a0c45d91db76c24fe4;p=p5sagit%2Fp5-mst-13.2.git diff --git a/installhtml b/installhtml index d42faa1..cfbbe9f 100755 --- a/installhtml +++ b/installhtml @@ -1,12 +1,14 @@ -#!/usr/bin/perl -w +#!./perl -w + +# This file should really be a extracted from a .PL + +use lib 'lib'; # use source library if present 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. @@ -32,15 +34,20 @@ pages found in the perl distribution. Displays the usage. +=item B<--podroot> POD search path base directory + +The base directory to search for all .pod and .pm files to be converted. +Default is current directory. + =item B<--podpath> POD search path The list of directories to search for .pod and .pm files to be converted. Default is `podroot/.'. -=item B<--podroot> POD search path base directory +=item B<--recurse> recurse on subdirectories -The base directory to search for all .pod and .pm files to be converted. -Default is current directory. +Whether or not to convert all .pm and .pod files found in subdirectories +too. Default is to not recurse. =item B<--htmldir> HTML destination directory @@ -52,26 +59,26 @@ be a path relative to the filesystem, not the resulting URL. The base directory which all resulting HTML files will be visible at in a URL. The default is `/'. -=item B<--recurse> recurse on subdirectories - -Whether or not to convert all .pm and .pod files found in subdirectories -too. Default is to not recurse. - =item B<--splithead> POD files to split on =head directive -Colon-separated list of pod files to split by the =head directive. These -files should have names specified relative to podroot. +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. -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. +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. + +=item B<--splitpod> Directory containing the splitpod program + +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 @@ -86,14 +93,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.pod \ - --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 @@ -129,8 +136,8 @@ Usage: $0 --help --podpath=:...: --podroot= of a pod =head[1-6] directive. --splititem - comma-separated list of .pod or .pm files to split using splitpod. - --splitpod - where the program splitpod can be found (\$podroot/pod by - default). + --splitpod - directory where the program splitpod can be found + (\$podroot/pod by default). --verbose - self-explanatory. END_OF_USAGE @@ -150,6 +157,11 @@ $verbose = 0; # whether or not to print debugging info $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]); } # parse the command-line $result = GetOptions( qw( @@ -191,7 +203,7 @@ $splitpod = "$podroot/pod" unless $splitpod; # it may effect some of the links @splitdirs = (); # files in these directories won't get an index split_on_head($podroot, $htmldir, \@splitdirs, \@ignore, @splithead); -split_on_item($podroot, \@splitdirs, \@ignore, @splititem); +split_on_item($podroot, \@splitdirs, \@ignore, @splititem); # convert the pod pages found in @poddirs @@ -226,7 +238,12 @@ foreach $dir (@splithead) { @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 $opt_htmlroot || $opt_htmlroot eq '' ) ; + "HREF=\"$url\">" ; + }eg; push @data, $_; } close(H); @@ -269,14 +286,25 @@ sub parse_command_line { } +sub absolute_path { + my($cwd, $path) = @_; + return "$cwd/$path" unless $path =~ m:/:; + # add cwd if path is not already an absolute path + $path = "$cwd/$path" if (substr($path,0,1) ne '/'); + return $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") || @@ -295,17 +323,25 @@ sub create_index { # pull out the NAME section ($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 $opt_htmlroot || $opt_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"; @@ -346,6 +382,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) { # figure out the directory to split into $pod =~ s,^([^/]*)$,/$1,; @@ -364,8 +401,10 @@ sub split_on_item { } chdir("$podroot/$dirname") || die "$0: error changing to directory $podroot/$dirname: $!\n"; - system("../splitpod", "../$filename") && - warn "$0: error running '../splitpod ../$filename'" + die "$splitter not found. Use '-splitpod dir' option.\n" + unless -f $splitter; + system("perl", $splitter, "../$filename") && + warn "$0: error running '$splitter ../$filename'" ." from $podroot/$dirname"; } chdir($pwd); @@ -478,7 +517,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); @@ -549,6 +588,7 @@ sub runpod2html { #system("./pod2html", Pod::Html'pod2html( #Pod::Html'pod2html($pod2html, + "--htmldir=$htmldir", "--htmlroot=$htmlroot", "--podpath=".join(":", @podpath), "--podroot=$podroot", "--netscape",