summaryrefslogtreecommitdiff
path: root/autodoc.pl
diff options
context:
space:
mode:
authorMatthew Horsfall <wolfsage@gmail.com>2014-06-22 07:37:09 -0400
committerMatthew Horsfall <wolfsage@gmail.com>2014-06-22 13:12:08 -0400
commitf554dfc5c49a4817b754b85aabbfb6814eace9c1 (patch)
treed5d3aea902bd059b338eb0093e57a0ece8478a01 /autodoc.pl
parentf049db42ef969d7e9f6b8a1414143e9e0dfdbd62 (diff)
downloadperl-f554dfc5c49a4817b754b85aabbfb6814eace9c1.tar.gz
In response to 7fefc6c, make autodoc smarter.
All non-blank lines after a =head1 are now skipped to find header documentation. This unearthed a few more missed headings that I think are useful, and makes sure others aren't missed in the future. Also, fix line number counting/error reporting in autodoc.pl, it was woefully inaccurate.
Diffstat (limited to 'autodoc.pl')
-rw-r--r--autodoc.pl39
1 files changed, 23 insertions, 16 deletions
diff --git a/autodoc.pl b/autodoc.pl
index 0b7282d977..6ba223ef13 100644
--- a/autodoc.pl
+++ b/autodoc.pl
@@ -15,12 +15,12 @@
#
# This script is invoked as part of 'make all'
#
-# '=head1' are the only headings looked for. If the next line after the
-# heading begins with a word character, it is considered to be the first line
-# of documentation that applies to the heading itself. That is, it is output
-# immediately after the heading, before the first function, and not indented.
-# The next input line that is a pod directive terminates this heading-level
-# documentation.
+# '=head1' are the only headings looked for. If the first non-blank line after
+# the heading begins with a word character, it is considered to be the first
+# line of documentation that applies to the heading itself. That is, it is
+# output immediately after the heading, before the first function, and not
+# indented. The next input line that is a pod directive terminates this
+# heading-level documentation.
use strict;
@@ -54,8 +54,12 @@ my $curheader = "Unknown section";
sub autodoc ($$) { # parse a file and extract documentation info
my($fh,$file) = @_;
my($in, $doc, $line, $header_doc);
+
+ # Count lines easier
+ my $get_next_line = sub { $line++; return <$fh> };
+
FUNC:
- while (defined($in = <$fh>)) {
+ while (defined($in = $get_next_line->())) {
if ($in =~ /^#\s*define\s+([A-Za-z_][A-Za-z_0-9]+)\(/ &&
($file ne 'embed.h' || $file ne 'proto.h')) {
$macro{$1} = $file;
@@ -64,26 +68,31 @@ FUNC:
if ($in=~ /^=head1 (.*)/) {
$curheader = $1;
- # If the next line begins with a word char, then is the start of
- # heading-level documentation.
- if (defined($doc = <$fh>)) {
+ # If the next non-space line begins with a word char, then it is
+ # the start of heading-ldevel documentation.
+ if (defined($doc = $get_next_line->())) {
+ # Skip over empty lines
+ while ($doc =~ /^\s+$/) {
+ if (! defined($doc = $get_next_line->())) {
+ next FUNC;
+ }
+ }
+
if ($doc !~ /^\w/) {
$in = $doc;
redo FUNC;
}
$header_doc = $doc;
- $line++;
# Continue getting the heading-level documentation until read
# in any pod directive (or as a fail-safe, find a closing
# comment to this pod in a C language file
HDR_DOC:
- while (defined($doc = <$fh>)) {
+ while (defined($doc = $get_next_line->())) {
if ($doc =~ /^=\w/) {
$in = $doc;
redo FUNC;
}
- $line++;
if ($doc =~ m:^\s*\*/$:) {
warn "=cut missing? $file:$line:$doc";;
@@ -94,15 +103,13 @@ HDR_DOC:
}
next FUNC;
}
- $line++;
if ($in =~ /^=for\s+apidoc\s+(.*?)\s*\n/) {
my $proto = $1;
$proto = "||$proto" unless $proto =~ /\|/;
my($flags, $ret, $name, @args) = split /\|/, $proto;
my $docs = "";
DOC:
- while (defined($doc = <$fh>)) {
- $line++;
+ while (defined($doc = $get_next_line->())) {
last DOC if $doc =~ /^=\w+/;
if ($doc =~ m:^\*/$:) {
warn "=cut missing? $file:$line:$doc";;