This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
note lib/locale.t rare failure
[perl5.git] / pod / splitpod
old mode 100755 (executable)
new mode 100644 (file)
index 8db4060..10fd6af
@@ -1,45 +1,64 @@
 #!/usr/bin/perl
 
-use lib '../lib';  # If you haven't installed perl yet.
+BEGIN { push @INC, '../lib' } # If you haven't installed perl yet.
 use Pod::Functions;
 
 local $/ = '';
 
+$level = 0;
+
 $cur = '';
 while (<>) {
 
     next unless /^=(?!cut)/ .. /^=cut/;
 
-    if (s/=item (\S+)/$1/) {
-       #$cur = "POSIX::" . $1;
-       $cur = $1;
+    ++$level if /^=over/;
+    --$level if /^=back/;
+
+    # Ignore items that are nested within other items, e.g. don't split on the
+    # items nested within the pack() and sprintf() items in perlfunc.pod.
+    if (/=item (\S+)/ and $level == 1) {
+       my $item = $1;
+       s/=item //; 
+       $next{$cur} = $item;
+       $cur = $item;
        $syn{$cur} .= $_;
        next;
     } else { 
-       #s,L</,L<POSIX/,g;
        s,L</,L<perlfunc/,g;
-       $pod{$cur} .= $_ if $cur;
+       push @{$pod{$cur}}, $_ if $cur;
     }
 } 
 
 for $f ( keys %syn ) {
-    $type = $Type{$f} || next;
+    next unless $Type{$f};
     $flavor = $Flavor{$f};
     $orig = $f;
     ($name = $f) =~ s/\W//g;
+
+    # deal with several functions sharing a description
+    $func = $orig;
+    $func = $next{$func} until $pod{$func};
+    my $body = join "", @{$pod{$func}};
+
+    # deal with unbalanced =over and =back cause by the split
+    my $has_over = $body =~ /^=over/;
+    my $has_back = $body =~ /^=back/;
+    $body =~ s/^=over\s*//m if $has_over and !$has_back;
+    $body =~ s/^=back\s*//m if $has_back and !$has_over;
     open (POD, "> $name.pod") || die "can't open $name.pod: $!";
     print POD <<EOF;
-=head1 NAME
+\=head1 NAME
 
 $orig - $flavor
 
-=head1 SYNOPSIS
+\=head1 SYNOPSIS
 
 $syn{$orig}
 
-=head1 DESCRIPTION
+\=head1 DESCRIPTION
 
-$pod{$orig}
+$body
 
 EOF