[ID 20000626.007] h2xs man page contains trailing garbage
[p5sagit/p5-mst-13.2.git] / embed.pl
index 377491d..419ae4e 100755 (executable)
--- a/embed.pl
+++ b/embed.pl
@@ -1081,12 +1081,12 @@ my %apidocs;
 my %gutsdocs;
 my %docfuncs;
 
-sub autodoc ($) { # parse a file and extract documentation info
-    my($fh) = @_;
-    my($in, $doc);
-
+sub autodoc ($$) { # parse a file and extract documentation info
+    my($fh,$file) = @_;
+    my($in, $doc, $line);
 FUNC:
     while (defined($in = <$fh>)) {
+       $line++;
        if ($in =~ /^=for\s+apidoc\s+(.*)\n/) {
            my $proto = $1;
            $proto = "||$proto" unless $proto =~ /\|/;
@@ -1094,24 +1094,33 @@ FUNC:
            my $docs = "";
 DOC:
            while (defined($doc = <$fh>)) {
+               $line++;
                last DOC if $doc =~ /^=\w+/;
+               if ($doc =~ m:^\*/$:) {
+                   warn "=cut missing? $file:$line:$doc";;
+                   last DOC;
+               }
                $docs .= $doc;
            }
            $docs = "\n$docs" if $docs and $docs !~ /^\n/;
            if ($flags =~ /m/) {
                if ($flags =~ /A/) {
-                   $apidocs{$name} = [$flags, $docs, $ret, @args];
+                   $apidocs{$name} = [$flags, $docs, $ret, $file, @args];
                }
                else {
-                   $gutsdocs{$name} = [$flags, $docs, $ret, @args];
+                   $gutsdocs{$name} = [$flags, $docs, $ret, $file, @args];
                }
            }
            else {
-               $docfuncs{$name} = [$flags, $docs, $ret, @args];
+               $docfuncs{$name} = [$flags, $docs, $ret, $file, @args];
            }
-           if ($doc =~ /^=for/) {
-               $in = $doc;
-               redo FUNC;
+           if (defined $doc) {
+               if ($doc =~ /^=for/) {
+                   $in = $doc;
+                   redo FUNC;
+               }
+           } else {
+               warn "$file:$line:$in";
            }
        }
     }
@@ -1119,7 +1128,7 @@ DOC:
 
 sub docout ($$$) { # output the docs for one function
     my($fh, $name, $docref) = @_;
-    my($flags, $docs, $ret, @args) = @$docref;
+    my($flags, $docs, $ret, $file, @args) = @$docref;
 
     $docs .= "NOTE: the perl_ form of this function is deprecated.\n\n" 
        if $flags =~ /p/;
@@ -1137,12 +1146,13 @@ sub docout ($$$) { # output the docs for one function
        print $fh "(" . join(", ", @args) . ")";
        print $fh "\n\n";
     }
+    print $fh "=for hackers\nFound in file $file\n\n";
 }
 
 my $file;
 for $file (glob('*.c'), glob('*.h')) {
     open F, "< $file" or die "Cannot open $file for docs: $!\n";
-    autodoc(\*F);
+    autodoc(\*F,$file);
     close F or die "Error closing $file: $!\n";
 }
 
@@ -1159,16 +1169,20 @@ walk_table {    # load documented functions into approriate hash
        if ($flags =~ /A/) {
            my $docref = delete $docfuncs{$func};
            warn "no docs for $func\n" unless $docref and @$docref;
-           $apidocs{$func} = [$docref->[0] . 'A', $docref->[1], $retval, @args];
+           $apidocs{$func} = [$docref->[0] . 'A', $docref->[1], $retval,
+                              $docref->[3], @args];
        } else {
            my $docref = delete $docfuncs{$func};
-           $gutsdocs{$func} = [$docref->[0], $docref->[1], $retval, @args];
+           $gutsdocs{$func} = [$docref->[0], $docref->[1], $retval,
+                               $docref->[3], @args];
        }
     }
     return "";
 } \*DOC;
 
 for (sort keys %docfuncs) {
+    # Have you used a full for apidoc or just a func name?  
+    # Have you used Ap instead of Am in the for apidoc?
     warn "Unable to place $_!\n";
 }