Pod::Checker - check pod documents for syntax errors |
Pod::Checker - check pod documents for syntax errors
use Pod::Checker;
$syntax_okay = podchecker($filepath, $outputpath, %options);
my $checker = Pod::Checker->new(%options); $checker->parse_from_file($filepath, \*STDERR);
$filepath
is the input POD to read and $outputpath
is
where to write POD syntax error messages. Either argument may be a scalar
indicating a file-path, or else a reference to an open filehandle.
If unspecified, the input-file it defaults to \*STDIN
, and
the output-file defaults to \*STDERR
.
podchecker()
This function can take a hash of options:
val
is true, do not print any errors/warnings.
podchecker will perform syntax checking of Perl5 POD format documentation.
Curious/ambitious users are welcome to propose additional features they wish to see in Pod::Checker and podchecker and verify that the checks are consistent with the perlpod manpage.
The following checks are currently performed:
=begin
and =end
. The contents of such
a block are generally ignored, i.e. no syntax checks are performed.
Check for proper nesting and balancing of =over
, =item
and =back
.
Check for same nested interior-sequences (e.g.
L<...L<...>...>
).
Check for malformed or non-existing entities E<...>
.
Check for correct syntax of hyperlinks L<...>
. See the perlpod manpage
for details.
Check for unresolved document-internal links. This check may also reveal
misspelled links that seem to be internal links but should be links
to something else.
=head1
or =head2
) without any text? That ain't no
heading!
=over
command does not have a corresponding =back
before the
next heading (=head1
or =head2
) or the end of the file.
=item
or =back
command has been found outside a
=over
/=back
block.
=begin
command was found that has no matching =end command.
=begin
command was found that is not followed by the formatter
specification.
=end
command was found.
=for
command.
""
.
=head1
, =head2
,
=head3
, =head4
, =over
, =item
, =back
, =begin
, =end
,
=for
, =pod
, =cut
B<>
, C<>
, E<>
, F<>
,
I<>
, L<>
, S<>
, X<>
,
Z<>
L<>
Z<>
sequence is supposed to be empty.
=pod
and =cut
do not take any arguments.
=back
command does not take any arguments.
These may not necessarily cause trouble, but indicate mediocre style.
=item
and/or =head
commands that have
the same text. Potential hyperlinks to such a text cannot be unique then.
This warning is printed only with warning level greater than one.
=item
that has no text contents. You probably want to delete
empty items.
=over
starts with a text or verbatim paragraph,
but continues with =item
s. Move the non-item paragraph out of the
=over
/=back
block.
=item
and continued with a
numbered one. This is obviously inconsistent. For most translators the
type of the first =item
determines the type of the list.
verbar
and sol
. Currently, this warning
only appears if a character entity was found that does not have a Unicode
character. This should be fixed to adhere to the original warning.
=over
does not contain anything.
=head
command) does not contain
any valid content. This usually indicates that something is missing. Note: A
=head1
followed immediately by =head2
does not trigger this warning.
=head1 NAME
) should consist of a single paragraph
with the script/module name, followed by a dash `-' and a very short
description of what the thing is good for.
=head2
in the POD file prior to a
=head1
.
There are some warnings with respect to malformed hyperlinks:
|
and /
are special in the L<...> context.
Although the hyperlink parser does its best to determine which ``/'' is
text and which is a delimiter in case of doubt, one ought to escape
these literal characters like this:
/ E<sol> | E<verbar>
Note that the line number of the error/warning may refer to the line number of the start of the paragraph in which the error/warning exists, not the line number that the error/warning is on. This bug is present in errors/warnings related to formatting codes. This should be fixed.
podchecker returns the number of POD syntax errors found or -1 if there were no POD commands at all found in the file.
See SYNOPSIS
The podchecker script that comes with this distribution is a lean wrapper around this module. See the online manual with
podchecker -help podchecker -man
While checking, this module collects document properties, e.g. the nodes
for hyperlinks (=headX
, =item
) and index entries (X<>
).
POD translators can use this feature to syntax-check and get the nodes in
a first pass before actually starting to convert. This is expensive in terms
of execution time, but allows for very robust conversions.
Since v1.24 the Pod::Checker module uses only the poderror method to print errors and warnings. The summary output (e.g. ``Pod syntax OK'') has been dropped from the module and has been included in podchecker (the script). This allows users of Pod::Checker to control completely the output behavior. Users of podchecker (the script) get the well-known behavior.
v1.45 inherits from Pod::Simple as opposed to all previous versions inheriting from Pod::Parser. Do not use Pod::Simple's interface when using Pod::Checker unless it is documented somewhere on this page. I repeat, DO NOT USE POD::SIMPLE'S INTERFACE.
Pod::Checker->new( %options )
-warnings => num
Print warnings if num
is true. The higher the value of num
,
the more warnings are printed. Currently there are only levels 1 and 2.
-quiet => num
If num
is true, do not print any errors/warnings. This is useful
when Pod::Checker is used to munge POD code into plain text from within
POD formatters.
$checker->poderror( @args )
$checker->poderror( {%opts}, @args )
-msg
A message to print prior to @args
.
-line
The line number the error occurred in.
-file
The file (name) the error occurred in. Defaults to the name of the current file being processed.
-severity
The error level, should be 'WARNING' or 'ERROR'.
$checker->num_errors()
$checker->num_warnings()
$checker->name()
=head1 NAME
section.
$checker->node()
=headX
and =item
) of the current POD. The nodes are returned in the order of
their occurrence. They consist of plain text, each piece of whitespace is
collapsed to a single blank.
$checker->idx()
X<>
) of the current POD. They consist of plain text, each piece
of whitespace is collapsed to a single blank.
$checker->hyperlinks()
L<>
).
Each is an instance of a class with the following methods:
line()
type()
"url"
for things like
http://www.foo
, "man"
for man pages, or "pod"
.
page()
node()
""
) if none appears in the link.
Please report bugs using http://rt.cpan.org.
Brad Appleton <bradapp@enteract.com> (initial version), Marek Rouchal <marekr@cpan.org>, Marc Green <marcgreen@cpan.org> (port to Pod::Simple) Ricardo Signes <rjbs@cpan.org> (more porting to Pod::Simple) Karl Williamson <khw@cpan.org> (more porting to Pod::Simple)
Based on code for Pod::Text::pod2text() written by Tom Christiansen <tchrist@mox.perl.com>
Pod::Checker - check pod documents for syntax errors |