X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/e1b7525f25b00c7b7ff5253da49c0d9cec7188fe..35968441ced92c07a7f60de65b5207e406d560d4:/installhtml diff --git a/installhtml b/installhtml old mode 100755 new mode 100644 index 0761dfb..3b1eda8 --- a/installhtml +++ b/installhtml @@ -4,7 +4,7 @@ use strict; use Config; # for config options in the makefile -use File::Spec; +use File::Spec::Functions qw(rel2abs no_upwards); use Getopt::Long; # for command-line parsing use Cwd; use Pod::Html 'anchorify'; @@ -15,11 +15,10 @@ installhtml - converts a collection of POD pages to HTML format. =head1 SYNOPSIS - installhtml [--help] [--podpath=:...:] [--podroot=] - [--htmldir=] [--htmlroot=] [--norecurse] [--recurse] - [--splithead=,...,] [--splititem=,...,] - [--libpods=,...,] [--ignore=,...,] - [--verbose] + installhtml [--help] [--podpath=:...:] [--podroot=] + [--htmldir=] [--htmlroot=] [--norecurse] [--recurse] + [--splithead=,...,] [--splititem=,...,] + [--ignore=,...,] [--verbose] =head1 DESCRIPTION @@ -77,11 +76,6 @@ split, rather it invokes I to do the dirty work. As with The directory containing the splitpod program. The default is 'podroot/pod'. -=item B<--libpods> library PODs for LEE links - -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<--ignore> files to be ignored Comma-separated of files that shouldn't be installed, given relative @@ -104,7 +98,6 @@ perl documentation: --htmlroot=/perl/nmanual \ --splithead=pod/perlipc \ --splititem=pod/perlfunc \ - --libpods=perlfunc,perlguts,perlvar,perlrun,perlop \ --recurse \ --verbose @@ -112,8 +105,6 @@ perl documentation: Chris Hall Ehallc@cs.colorado.eduE -=head1 TODO - =cut my $usage; @@ -122,7 +113,7 @@ $usage =<:...: --podroot= --htmldir= --htmlroot= --norecurse --recurse --splithead=,..., --splititem=,..., - --libpods=,..., --ignore=,..., --verbose + --ignore=,..., --verbose --help - this message --podpath - colon-separated list of directories containing .pod and @@ -133,9 +124,6 @@ Usage: $0 --help --podpath=:...: --podroot= to the filesystem (\$podroot/html by default). --htmlroot - http-server base directory from which all relative paths in podpath stem (default is /). - --libpods - comma-separated list of files to search for =item pod - directives in as targets of C<> and implicit links (empty - by default). --norecurse - don't recurse on those subdirectories listed in podpath. (default behavior). --recurse - recurse on those subdirectories listed in podpath @@ -151,10 +139,9 @@ Usage: $0 --help --podpath=:...: --podroot= END_OF_USAGE -my (@libpods, @podpath, $podroot, $htmldir, $htmlroot, $recurse, @splithead, +my (@podpath, $podroot, $htmldir, $htmlroot, $recurse, @splithead, @splititem, $splitpod, $verbose, $pod2html, @ignore); -@libpods = (); @podpath = ( "." ); # colon-separated list of directories containing .pod # and .pm files to be converted. $podroot = "."; # assume the pods we want are here @@ -172,7 +159,7 @@ $pod2html = "pod/pod2html"; usage("") unless @ARGV; # Overcome shell's p1,..,p8 limitation. -# See vms/descrip_mms.template -> descrip.mms for invokation. +# See vms/descrip_mms.template -> descrip.mms for invocation. if ( $^O eq 'VMS' ) { @ARGV = split(/\s+/,$ARGV[0]); } use vars qw( %Options ); @@ -184,7 +171,6 @@ my $result = GetOptions( \%Options, qw( podroot=s htmldir=s htmlroot=s - libpods=s ignore=s recurse! splithead=s @@ -289,7 +275,6 @@ sub parse_command_line { # lists of files @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 = $Options{htmldir} if defined $Options{htmldir}; $htmlroot = $Options{htmlroot} if defined $Options{htmlroot}; @@ -306,14 +291,11 @@ sub parse_command_line { sub create_index { my($html, $dir) = @_; (my $pod = $dir) =~ s,^.*/,,; - 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))); + my @files = sort(grep(/\.html?$/, readdir(DIR))); closedir(DIR); open(HTML, ">$html") || @@ -322,40 +304,28 @@ sub create_index { # for each .html file in the directory, extract the index # embedded in the file and throw it into the big index. print HTML "
\n"; - foreach $file (@files) { - $/ = ""; + foreach my $file (@files) { - open(IN, "<$dir/$file") || - die "$0: error opening $dir/$file for input: $!\n"; - @filedata = ; - close(IN); + my $filedata = do { + open(my $in, "<$dir/$file") || + die "$0: error opening $dir/$file for input: $!\n"; + local $/ = undef; + <$in>; + }; # pull out the NAME section - my $name; - ($name) = grep(/name="name"/i, @filedata); - ($lcp1,$lcp2) = ($name =~ m,/H1>\s(\S+)\s[\s-]*(.*?)\s*$,smi); - if (defined $lcp1 and $lcp1 =~ m,^

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

\s*(\S+)\s[\s-]*(.*?)\s*$,smi); - } + my($lcp1, $lcp2) = + ($filedata =~ + m#

NAME

\s*

\s*(\S+)\s+-\s+(\S.*?\S)

#); + defined $lcp1 or die "$0: can't find NAME section in $dir/$file\n"; + my $url= "$pod/$file" ; if ( ! defined $Options{htmlroot} || $Options{htmlroot} eq '' ) { $url = Pod::Html::relativize_url( "$pod/$file", $html ) ; } - if (defined $lcp1) { - print HTML qq(
); - print HTML "$lcp1
$lcp2
\n"; - } - - next; - - @index = grep(/.*/s, - @filedata); - for (@index) { - s/(\s*\s*)/$lcp2/s; - s,#,$dir/$file#,g; - print HTML "$_\n


\n"; - } + print HTML qq(

); + print HTML "$lcp1
$lcp2
\n"; } print HTML "
\n"; @@ -392,8 +362,8 @@ sub split_on_item { print "splitting files by item.\n" if $verbose && $#splititem >= 0; $pwd = getcwd(); - my $splitter = File::Spec->rel2abs("$splitpod/splitpod", $pwd); - my $perl = File::Spec->rel2abs($^X, $pwd); + my $splitter = rel2abs("$splitpod/splitpod", $pwd); + my $perl = rel2abs($^X, $pwd); foreach my $pod (@splititem) { # figure out the directory to split into $pod =~ s,^([^/]*)$,/$1,; @@ -515,34 +485,34 @@ sub splitpod { # sub installdir { my($dir, $recurse, $podroot, $splitdirs, $ignore) = @_; - my(@dirlist, @podlist, @pmlist, $doindex); - @dirlist = (); # directories to recurse on - @podlist = (); # .pod files to install - @pmlist = (); # .pm files to install + my @dirlist; # directories to recurse on + my @podlist; # .pod files to install + my @pmlist; # .pm files to install # should files in this directory get an index? - $doindex = (grep($_ eq "$podroot/$dir", @$splitdirs) ? 0 : 1); + my $doindex = (grep($_ eq "$podroot/$dir", @$splitdirs) ? 0 : 1); opendir(DIR, "$podroot/$dir") || die "$0: error opening directory $podroot/$dir: $!\n"; - # find the directories to recurse on - @dirlist = map { if ($^O eq 'VMS') {/^(.*)\.dir$/i; "$dir/$1";} else {"$dir/$_";}} - grep(-d "$podroot/$dir/$_" && !/^\.{1,2}/, readdir(DIR)) if $recurse; - rewinddir(DIR); - - # find all the .pod files within the directory - @podlist = map { /^(.*)\.pod$/; "$dir/$1" } - grep(! -d "$podroot/$dir/$_" && /\.pod$/, readdir(DIR)); - rewinddir(DIR); - - # find all the .pm files within the directory - @pmlist = map { /^(.*)\.pm$/; "$dir/$1" } - grep(! -d "$podroot/$dir/$_" && /\.pm$/, readdir(DIR)); + while(readdir DIR) { + no_upwards($_) or next; + my $is_dir = -d "$podroot/$dir/$_"; + next if $is_dir and not $recurse; + my $target = ( + $is_dir ? \@dirlist : + s/\.pod$// ? \@podlist : + s/\.pm$// ? \@pmlist : + undef + ); + push @$target, "$dir/$_" if $target; + } closedir(DIR); + if ($^O eq 'VMS') { s/\.dir$//i for @dirlist } + # recurse on all subdirectories we kept track of foreach $dir (@dirlist) { installdir($dir, $recurse, $podroot, $splitdirs, $ignore); @@ -602,11 +572,10 @@ sub runpod2html { "--htmldir=$htmldir", "--htmlroot=$htmlroot", "--podpath=".join(":", @podpath), - "--podroot=$podroot", "--netscape", + "--podroot=$podroot", "--header", ($doindex ? "--index" : "--noindex"), "--" . ($recurse ? "" : "no") . "recurse", - ($#libpods >= 0) ? "--libpods=" . join(":", @libpods) : "", "--infile=$podroot/$pod", "--outfile=$htmldir/$html"); die "$0: error running $pod2html: $!\n" if $?; }