X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/555bd962bf06d749086724e280b3588586df7805..HEAD:/installhtml?ds=sidebyside diff --git a/installhtml b/installhtml index 3b1eda8..13d811f 100644 --- a/installhtml +++ b/installhtml @@ -2,12 +2,15 @@ # This file should really be extracted from a .PL file +$| = 1; use strict; use Config; # for config options in the makefile +use File::Path qw(remove_tree); use File::Spec::Functions qw(rel2abs no_upwards); use Getopt::Long; # for command-line parsing use Cwd; -use Pod::Html 'anchorify'; +use Pod::Html 1.32; +use Pod::Html::Util 1.32 qw(anchorify relativize_url); =head1 NAME @@ -23,8 +26,9 @@ installhtml - converts a collection of POD pages to HTML format. =head1 DESCRIPTION I converts a collection of POD pages to a corresponding -collection of HTML pages. This is primarily used to convert the pod -pages found in the perl distribution. +collection of HTML pages. This is used to convert the pod pages found in the +perl distribution. (It is not intended as a general-purpose +converter/installer of POD pages in HTML format. See L.) =head1 OPTIONS @@ -42,7 +46,7 @@ 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/.'. +Default is 'podroot/lib'. =item B<--recurse> recurse on subdirectories @@ -67,10 +71,11 @@ relative to podroot. =item B<--splititem> POD files to split on =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. +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, a separate program in the Perl 5 core distribution, +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 @@ -117,7 +122,7 @@ Usage: $0 --help --podpath=:...: --podroot= --help - this message --podpath - colon-separated list of directories containing .pod and - .pm files to be converted (. by default). + .pm files to be converted ('lib/' by default). --podroot - filesystem base directory from which all relative paths in podpath stem (default is .). --htmldir - directory to store resulting html files in relative @@ -142,7 +147,7 @@ END_OF_USAGE my (@podpath, $podroot, $htmldir, $htmlroot, $recurse, @splithead, @splititem, $splitpod, $verbose, $pod2html, @ignore); -@podpath = ( "." ); # colon-separated list of directories containing .pod +@podpath = ( "lib" ); # colon-separated list of directories containing .pod # and .pm files to be converted. $podroot = "."; # assume the pods we want are here $htmldir = ""; # nothing for now... @@ -162,7 +167,7 @@ usage("") unless @ARGV; # See vms/descrip_mms.template -> descrip.mms for invocation. if ( $^O eq 'VMS' ) { @ARGV = split(/\s+/,$ARGV[0]); } -use vars qw( %Options ); +our %Options; # parse the command-line my $result = GetOptions( \%Options, qw( @@ -233,15 +238,15 @@ foreach my $dir (@splithead) { # read in everything until what would have been the first =head # directive, patching the index as we go. - open(H, "<$file.html") || + open(H, '<', "$file.html") || die "$0: error opening $file.html for input: $!\n"; $/ = ""; my @data = (); while () { - last if /name="name"/i; + last if m!

NAME

!; $_ =~ s{href="#(.*)">}{ - my $url = "$pod/$1.html" ; - $url = Pod::Html::relativize_url( $url, "$file.html" ) + my $url = "$file/@{[anchorify(qq($1))]}.html" ; + $url = relativize_url( $url, "$file.html" ) if ( ! defined $Options{htmlroot} || $Options{htmlroot} eq '' ); "href=\"$url\">" ; }egi; @@ -250,12 +255,14 @@ foreach my $dir (@splithead) { close(H); # now rewrite the file - open(H, ">$file.html") || + open(H, '>', "$file.html") || die "$0: error opening $file.html for output: $!\n"; - print H "@data", "\n"; + print H @data, "\n\n\n\n\n"; close(H); } +remove_tree(@splitdirs, {safe=>1}); + ############################################################################## @@ -298,7 +305,7 @@ sub create_index { my @files = sort(grep(/\.html?$/, readdir(DIR))); closedir(DIR); - open(HTML, ">$html") || + open(HTML, '>', $html) || die "$0: error opening $html for output: $!\n"; # for each .html file in the directory, extract the index @@ -307,7 +314,7 @@ sub create_index { foreach my $file (@files) { my $filedata = do { - open(my $in, "<$dir/$file") || + open(my $in, '<', "$dir/$file") || die "$0: error opening $dir/$file for input: $!\n"; local $/ = undef; <$in>; @@ -319,9 +326,9 @@ sub create_index { 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" ; + my $url= "$dir/$file" ; if ( ! defined $Options{htmlroot} || $Options{htmlroot} eq '' ) { - $url = Pod::Html::relativize_url( "$pod/$file", $html ) ; + $url = relativize_url( $url, $html ) ; } print HTML qq(
); @@ -376,10 +383,9 @@ sub split_on_item { # split the pod push(@$splitdirs, "$podroot/$dirname"); - if (! -d "$podroot/$dirname") { - mkdir("$podroot/$dirname", 0755) || + -d "$podroot/$dirname" and remove_tree("$podroot/$dirname", {safe=>1}); + mkdir("$podroot/$dirname", 0755) || die "$0: error creating directory $podroot/$dirname: $!\n"; - } chdir("$podroot/$dirname") || die "$0: error changing to directory $podroot/$dirname: $!\n"; die "$splitter not found. Use '-splitpod dir' option.\n" @@ -406,7 +412,7 @@ sub splitpod { # read the file in paragraphs $/ = ""; - open(SPLITIN, "<$pod") || + open(SPLITIN, '<', $pod) || die "$0: error opening $pod for input: $!\n"; @filedata = ; close(SPLITIN) || @@ -435,9 +441,9 @@ sub splitpod { my $dir = $pod; $dir =~ s/\.pod//g; push(@$splitdirs, "$poddir/$dir"); + -d "$poddir/$dir" and remove_tree("$poddir/$dir", {safe=>1}); mkdir("$poddir/$dir", 0755) || - die "$0: could not create directory $poddir/$dir: $!\n" - unless -d "$poddir/$dir"; + die "$0: could not create directory $poddir/$dir: $!\n"; $poddata[0] =~ /^\s*=head[1-6]\s+(.*)/; $section = ""; @@ -462,7 +468,7 @@ sub splitpod { # create the new .pod file print "\tcreating $poddir/$file\n" if $verbose; - open(SPLITOUT, ">$poddir/$file") || + open(SPLITOUT, '>', "$poddir/$file") || die "$0: error opening $poddir/$file for output: $!\n"; $poddata[$i] =~ s,L<([^<>]*)>, defined $heads{anchorify($1)} ? "L<$dir/$1>" : "L<$1>" @@ -500,12 +506,12 @@ sub installdir { 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 - ); + my $target + = $is_dir ? \@dirlist + : s/\.pod$// ? \@podlist + : s/\.pm$// ? \@pmlist + : undef + ; push @$target, "$dir/$_" if $target; }