diff options
Diffstat (limited to 'upstream/mageia-cauldron/man3pm/Pod::Checker.3pm')
-rw-r--r-- | upstream/mageia-cauldron/man3pm/Pod::Checker.3pm | 596 |
1 files changed, 596 insertions, 0 deletions
diff --git a/upstream/mageia-cauldron/man3pm/Pod::Checker.3pm b/upstream/mageia-cauldron/man3pm/Pod::Checker.3pm new file mode 100644 index 00000000..24bf966b --- /dev/null +++ b/upstream/mageia-cauldron/man3pm/Pod::Checker.3pm @@ -0,0 +1,596 @@ +.\" -*- mode: troff; coding: utf-8 -*- +.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. +.ie n \{\ +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" ======================================================================== +.\" +.IX Title "Pod::Checker 3pm" +.TH Pod::Checker 3pm 2023-11-28 "perl v5.38.2" "Perl Programmers Reference Guide" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH NAME +Pod::Checker \- check pod documents for syntax errors +.SH SYNOPSIS +.IX Header "SYNOPSIS" +.Vb 1 +\& use Pod::Checker; +\& +\& $syntax_okay = podchecker($filepath, $outputpath, %options); +\& +\& my $checker = Pod::Checker\->new(%options); +\& $checker\->parse_from_file($filepath, \e*STDERR); +.Ve +.SH OPTIONS/ARGUMENTS +.IX Header "OPTIONS/ARGUMENTS" +\&\f(CW$filepath\fR is the input POD to read and \f(CW$outputpath\fR 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 \f(CW\*(C`\e*STDIN\*(C'\fR, and +the output-file defaults to \f(CW\*(C`\e*STDERR\*(C'\fR. +.SS \fBpodchecker()\fP +.IX Subsection "podchecker()" +This function can take a hash of options: +.IP "\fB\-warnings\fR => \fIval\fR" 4 +.IX Item "-warnings => val" +Turn warnings on/off. \fIval\fR is usually 1 for on, but higher values +trigger additional warnings. See "Warnings". +.IP "\fB\-quiet\fR => \fIval\fR" 4 +.IX Item "-quiet => val" +If \f(CW\*(C`val\*(C'\fR is true, do not print any errors/warnings. +.SH DESCRIPTION +.IX Header "DESCRIPTION" +\&\fBpodchecker\fR will perform syntax checking of Perl5 POD format documentation. +.PP +Curious/ambitious users are welcome to propose additional features they wish +to see in \fBPod::Checker\fR and \fBpodchecker\fR and verify that the checks are +consistent with perlpod. +.PP +The following checks are currently performed: +.IP \(bu 4 +Unknown '=xxxx' commands, unknown 'X<...>' interior-sequences, +and unterminated interior sequences. +.IP \(bu 4 +Check for proper balancing of \f(CW\*(C`=begin\*(C'\fR and \f(CW\*(C`=end\*(C'\fR. The contents of such +a block are generally ignored, i.e. no syntax checks are performed. +.IP \(bu 4 +Check for proper nesting and balancing of \f(CW\*(C`=over\*(C'\fR, \f(CW\*(C`=item\*(C'\fR and \f(CW\*(C`=back\*(C'\fR. +.IP \(bu 4 +Check for same nested interior-sequences (e.g. +\&\f(CW\*(C`L<...L<...>...>\*(C'\fR). +.IP \(bu 4 +Check for malformed or non-existing entities \f(CW\*(C`E<...>\*(C'\fR. +.IP \(bu 4 +Check for correct syntax of hyperlinks \f(CW\*(C`L<...>\*(C'\fR. See perlpod +for details. +.IP \(bu 4 +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. +.SH DIAGNOSTICS +.IX Header "DIAGNOSTICS" +.SS Errors +.IX Subsection "Errors" +.IP \(bu 4 +empty =headn +.Sp +A heading (\f(CW\*(C`=head1\*(C'\fR or \f(CW\*(C`=head2\*(C'\fR) without any text? That ain't no +heading! +.IP \(bu 4 +=over on line \fIN\fR without closing =back +.IP \(bu 4 +You forgot a '=back' before '=head\fIN\fR' +.IP \(bu 4 +=over is the last thing in the document?! +.Sp +The \f(CW\*(C`=over\*(C'\fR command does not have a corresponding \f(CW\*(C`=back\*(C'\fR before the +next heading (\f(CW\*(C`=head1\*(C'\fR or \f(CW\*(C`=head2\*(C'\fR) or the end of the file. +.IP \(bu 4 +\&'=item' outside of any '=over' +.IP \(bu 4 +=back without =over +.Sp +An \f(CW\*(C`=item\*(C'\fR or \f(CW\*(C`=back\*(C'\fR command has been found outside a +\&\f(CW\*(C`=over\*(C'\fR/\f(CW\*(C`=back\*(C'\fR block. +.IP \(bu 4 +Can't have a 0 in =over \fIN\fR +.Sp +You need to indent a strictly positive number of spaces, not 0. +.IP \(bu 4 +=over should be: '=over' or '=over positive_number' +.Sp +Either have an argumentless =over, or have its argument a strictly positive number. +.IP \(bu 4 +=begin \fITARGET\fR without matching =end \fITARGET\fR +.Sp +A \f(CW\*(C`=begin\*(C'\fR command was found that has no matching =end command. +.IP \(bu 4 +=begin without a target? +.Sp +A \f(CW\*(C`=begin\*(C'\fR command was found that is not followed by the formatter +specification. +.IP \(bu 4 +=end \fITARGET\fR without matching =begin. +.Sp +A standalone \f(CW\*(C`=end\*(C'\fR command was found. +.IP \(bu 4 +\&'=end' without a target? +.Sp +\&'=end' directives need to have a target, just like =begin directives. +.IP \(bu 4 +\&'=end \fITARGET\fR' is invalid. +.Sp +\&\fITARGET\fR needs to be one word +.IP \(bu 4 +=end \fICONTENT\fR doesn't match =begin \fITARGET\fR +.Sp +\&\fICONTENT\fR needs to match =begin's \fITARGET\fR. +.IP \(bu 4 +=for without a target? +.Sp +There is no specification of the formatter after the \f(CW\*(C`=for\*(C'\fR command. +.IP \(bu 4 +unresolved internal link \fINAME\fR +.Sp +The given link to \fINAME\fR does not have a matching node in the current +POD. This also happened when a single word node name is not enclosed in +\&\f(CW""\fR. +.IP \(bu 4 +Unknown directive: \fICMD\fR +.Sp +An invalid POD command has been found. Valid are \f(CW\*(C`=head1\*(C'\fR, \f(CW\*(C`=head2\*(C'\fR, +\&\f(CW\*(C`=head3\*(C'\fR, \f(CW\*(C`=head4\*(C'\fR, \f(CW\*(C`=over\*(C'\fR, \f(CW\*(C`=item\*(C'\fR, \f(CW\*(C`=back\*(C'\fR, \f(CW\*(C`=begin\*(C'\fR, \f(CW\*(C`=end\*(C'\fR, +\&\f(CW\*(C`=for\*(C'\fR, \f(CW\*(C`=pod\*(C'\fR, \f(CW\*(C`=cut\*(C'\fR +.IP \(bu 4 +Deleting unknown formatting code \fISEQ\fR +.Sp +An invalid markup command has been encountered. Valid are: +\&\f(CW\*(C`B<>\*(C'\fR, \f(CW\*(C`C<>\*(C'\fR, \f(CW\*(C`E<>\*(C'\fR, \f(CW\*(C`F<>\*(C'\fR, +\&\f(CW\*(C`I<>\*(C'\fR, \f(CW\*(C`L<>\*(C'\fR, \f(CW\*(C`S<>\*(C'\fR, \f(CW\*(C`X<>\*(C'\fR, +\&\f(CW\*(C`Z<>\*(C'\fR +.IP \(bu 4 +Unterminated \fISEQ\fR<> sequence +.Sp +An unclosed formatting code +.IP \(bu 4 +An E<...> surrounding strange content +.Sp +The \fISTRING\fR found cannot be interpreted as a character entity. +.IP \(bu 4 +An empty E<> +.IP \(bu 4 +An empty \f(CW\*(C`L<>\*(C'\fR +.IP \(bu 4 +An empty X<> +.Sp +There needs to be content inside E, L, and X formatting codes. +.IP \(bu 4 +Spurious text after =pod / =cut +.Sp +The commands \f(CW\*(C`=pod\*(C'\fR and \f(CW\*(C`=cut\*(C'\fR do not take any arguments. +.IP \(bu 4 +=back doesn't take any parameters, but you said =back \fIARGUMENT\fR +.Sp +The \f(CW\*(C`=back\*(C'\fR command does not take any arguments. +.IP \(bu 4 +=pod directives shouldn't be over one line long! Ignoring all \fIN\fR lines of content +.Sp +Self explanatory +.IP \(bu 4 +=cut found outside a pod block. +.Sp +A '=cut' directive found in the middle of non-POD +.IP \(bu 4 +Invalid =encoding syntax: \fICONTENT\fR +.Sp +Syntax error in =encoding directive +.SS Warnings +.IX Subsection "Warnings" +These may not necessarily cause trouble, but indicate mediocre style. +.IP \(bu 4 +nested commands \fICMD\fR<...\fICMD\fR<...>...> +.Sp +Two nested identical markup commands have been found. Generally this +does not make sense. +.IP \(bu 4 +multiple occurrences (\fIN\fR) of link target \fIname\fR +.Sp +The POD file has some \f(CW\*(C`=item\*(C'\fR and/or \f(CW\*(C`=head\*(C'\fR 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. +.IP \(bu 4 +line containing nothing but whitespace in paragraph +.Sp +There is some whitespace on a seemingly empty line. POD is very sensitive +to such things, so this is flagged. \fBvi\fR users switch on the \fBlist\fR +option to avoid this problem. +.IP \(bu 4 +=item has no contents +.Sp +There is a list \f(CW\*(C`=item\*(C'\fR that has no text contents. You probably want to delete +empty items. +.IP \(bu 4 +You can't have =items (as at line \fIN\fR) unless the first thing after the =over is an =item +.Sp +A list introduced by \f(CW\*(C`=over\*(C'\fR starts with a text or verbatim paragraph, +but continues with \f(CW\*(C`=item\*(C'\fRs. Move the non-item paragraph out of the +\&\f(CW\*(C`=over\*(C'\fR/\f(CW\*(C`=back\*(C'\fR block. +.IP \(bu 4 +Expected '=item \fIEXPECTED VALUE\fR' +.IP \(bu 4 +Expected '=item *' +.IP \(bu 4 +Possible =item type mismatch: '\fIx\fR' found leading a supposed definition =item +.Sp +A list started with e.g. a bullet-like \f(CW\*(C`=item\*(C'\fR and continued with a +numbered one. This is obviously inconsistent. For most translators the +type of the \fIfirst\fR \f(CW\*(C`=item\*(C'\fR determines the type of the list. +.IP \(bu 4 +You have '=item x' instead of the expected '=item \fIN\fR' +.Sp +Erroneous numbering of =item numbers; they need to ascend consecutively. +.IP \(bu 4 +Unknown E content in E<\fICONTENT\fR> +.Sp +A character entity was found that does not belong to the standard +ISO set or the POD specials \f(CW\*(C`verbar\*(C'\fR and \f(CW\*(C`sol\*(C'\fR. \fICurrently, 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.\fR +.IP \(bu 4 +empty =over/=back block +.Sp +The list opened with \f(CW\*(C`=over\*(C'\fR does not contain anything. +.IP \(bu 4 +empty section in previous paragraph +.Sp +The previous section (introduced by a \f(CW\*(C`=head\*(C'\fR command) does not contain +any valid content. This usually indicates that something is missing. Note: A +\&\f(CW\*(C`=head1\*(C'\fR followed immediately by \f(CW\*(C`=head2\*(C'\fR does not trigger this warning. +.IP \(bu 4 +Verbatim paragraph in NAME section +.Sp +The NAME section (\f(CW\*(C`=head1 NAME\*(C'\fR) 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. +.IP \(bu 4 +=head\fIn\fR without preceding higher level +.Sp +For example if there is a \f(CW\*(C`=head2\*(C'\fR in the POD file prior to a +\&\f(CW\*(C`=head1\*(C'\fR. +.IP \(bu 4 +A non-empty Z<> +.Sp +The \f(CW\*(C`Z<>\*(C'\fR sequence is supposed to be empty. Caveat: this issue is +detected in Pod::Simple and will be flagged as an \fIERROR\fR by any client +code; any contents of \f(CW\*(C`Z<...>\*(C'\fR will be disregarded, anyway. +.SS Hyperlinks +.IX Subsection "Hyperlinks" +There are some warnings with respect to malformed hyperlinks: +.IP \(bu 4 +ignoring leading/trailing whitespace in link +.Sp +There is whitespace at the beginning or the end of the contents of +L<...>. +.IP \(bu 4 +alternative text/node '%s' contains non-escaped | or / +.Sp +The characters \f(CW\*(C`|\*(C'\fR and \f(CW\*(C`/\*(C'\fR 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: +.Sp +.Vb 2 +\& / E<sol> +\& | E<verbar> +.Ve +.PP +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. \fIThis should be fixed.\fR +.SH "RETURN VALUE" +.IX Header "RETURN VALUE" +\&\fBpodchecker\fR returns the number of POD syntax errors found or \-1 if +there were no POD commands at all found in the file. +.SH EXAMPLES +.IX Header "EXAMPLES" +See "SYNOPSIS" +.SH SCRIPTS +.IX Header "SCRIPTS" +The \fBpodchecker\fR script that comes with this distribution is a lean wrapper +around this module. See the online manual with +.PP +.Vb 2 +\& podchecker \-help +\& podchecker \-man +.Ve +.SH INTERFACE +.IX Header "INTERFACE" +While checking, this module collects document properties, e.g. the nodes +for hyperlinks (\f(CW\*(C`=headX\*(C'\fR, \f(CW\*(C`=item\*(C'\fR) and index entries (\f(CW\*(C`X<>\*(C'\fR). +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. +.PP +Since v1.24 the \fBPod::Checker\fR module uses only the \fBpoderror\fR +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 +\&\fBpodchecker\fR (the script). This allows users of \fBPod::Checker\fR to +control completely the output behavior. Users of \fBpodchecker\fR (the script) +get the well-known behavior. +.PP +v1.45 inherits from Pod::Simple as opposed to all previous versions +inheriting from Pod::Parser. Do \fBnot\fR use Pod::Simple's interface when +using Pod::Checker unless it is documented somewhere on this page. I +repeat, DO \fBNOT\fR USE POD::SIMPLE'S INTERFACE. +.PP +The following list documents the overrides to Pod::Simple, primarily to +make Pod::Coverage happy: +.IP end_B 4 +.IX Item "end_B" +.PD 0 +.IP end_C 4 +.IX Item "end_C" +.IP end_Document 4 +.IX Item "end_Document" +.IP end_F 4 +.IX Item "end_F" +.IP end_I 4 +.IX Item "end_I" +.IP end_L 4 +.IX Item "end_L" +.IP end_Para 4 +.IX Item "end_Para" +.IP end_S 4 +.IX Item "end_S" +.IP end_X 4 +.IX Item "end_X" +.IP end_fcode 4 +.IX Item "end_fcode" +.IP end_for 4 +.IX Item "end_for" +.IP end_head 4 +.IX Item "end_head" +.IP end_head1 4 +.IX Item "end_head1" +.IP end_head2 4 +.IX Item "end_head2" +.IP end_head3 4 +.IX Item "end_head3" +.IP end_head4 4 +.IX Item "end_head4" +.IP end_item 4 +.IX Item "end_item" +.IP end_item_bullet 4 +.IX Item "end_item_bullet" +.IP end_item_number 4 +.IX Item "end_item_number" +.IP end_item_text 4 +.IX Item "end_item_text" +.IP handle_pod_and_cut 4 +.IX Item "handle_pod_and_cut" +.IP handle_text 4 +.IX Item "handle_text" +.IP handle_whiteline 4 +.IX Item "handle_whiteline" +.IP hyperlink 4 +.IX Item "hyperlink" +.IP scream 4 +.IX Item "scream" +.IP start_B 4 +.IX Item "start_B" +.IP start_C 4 +.IX Item "start_C" +.IP start_Data 4 +.IX Item "start_Data" +.IP start_F 4 +.IX Item "start_F" +.IP start_I 4 +.IX Item "start_I" +.IP start_L 4 +.IX Item "start_L" +.IP start_Para 4 +.IX Item "start_Para" +.IP start_S 4 +.IX Item "start_S" +.IP start_Verbatim 4 +.IX Item "start_Verbatim" +.IP start_X 4 +.IX Item "start_X" +.IP start_fcode 4 +.IX Item "start_fcode" +.IP start_for 4 +.IX Item "start_for" +.IP start_head 4 +.IX Item "start_head" +.IP start_head1 4 +.IX Item "start_head1" +.IP start_head2 4 +.IX Item "start_head2" +.IP start_head3 4 +.IX Item "start_head3" +.IP start_head4 4 +.IX Item "start_head4" +.IP start_item_bullet 4 +.IX Item "start_item_bullet" +.IP start_item_number 4 +.IX Item "start_item_number" +.IP start_item_text 4 +.IX Item "start_item_text" +.IP start_over 4 +.IX Item "start_over" +.IP start_over_block 4 +.IX Item "start_over_block" +.IP start_over_bullet 4 +.IX Item "start_over_bullet" +.IP start_over_empty 4 +.IX Item "start_over_empty" +.IP start_over_number 4 +.IX Item "start_over_number" +.IP start_over_text 4 +.IX Item "start_over_text" +.IP whine 4 +.IX Item "whine" +.ie n .IP """Pod::Checker\->new( %options )""" 4 +.el .IP "\f(CWPod::Checker\->new( %options )\fR" 4 +.IX Item "Pod::Checker->new( %options )" +.PD +Return a reference to a new Pod::Checker object that inherits from +Pod::Simple and is used for calling the required methods later. The +following options are recognized: +.Sp +\&\f(CW\*(C`\-warnings => num\*(C'\fR + Print warnings if \f(CW\*(C`num\*(C'\fR is true. The higher the value of \f(CW\*(C`num\*(C'\fR, +the more warnings are printed. Currently there are only levels 1 and 2. +.Sp +\&\f(CW\*(C`\-quiet => num\*(C'\fR + If \f(CW\*(C`num\*(C'\fR 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. +.ie n .IP """$checker\->poderror( @args )""" 4 +.el .IP "\f(CW$checker\->poderror( @args )\fR" 4 +.IX Item "$checker->poderror( @args )" +.PD 0 +.ie n .IP """$checker\->poderror( {%opts}, @args )""" 4 +.el .IP "\f(CW$checker\->poderror( {%opts}, @args )\fR" 4 +.IX Item "$checker->poderror( {%opts}, @args )" +.PD +Internal method for printing errors and warnings. If no options are given, +simply prints "@_". The following options are recognized and used to form +the output: +.Sp +.Vb 1 +\& \-msg +.Ve +.Sp +A message to print prior to \f(CW@args\fR. +.Sp +.Vb 1 +\& \-line +.Ve +.Sp +The line number the error occurred in. +.Sp +.Vb 1 +\& \-file +.Ve +.Sp +The file (name) the error occurred in. Defaults to the name of the current +file being processed. +.Sp +.Vb 1 +\& \-severity +.Ve +.Sp +The error level, should be 'WARNING' or 'ERROR'. +.ie n .IP """$checker\->num_errors()""" 4 +.el .IP \f(CW$checker\->num_errors()\fR 4 +.IX Item "$checker->num_errors()" +Set (if argument specified) and retrieve the number of errors found. +.ie n .IP """$checker\->num_warnings()""" 4 +.el .IP \f(CW$checker\->num_warnings()\fR 4 +.IX Item "$checker->num_warnings()" +Set (if argument specified) and retrieve the number of warnings found. +.ie n .IP """$checker\->name()""" 4 +.el .IP \f(CW$checker\->name()\fR 4 +.IX Item "$checker->name()" +Set (if argument specified) and retrieve the canonical name of POD as +found in the \f(CW\*(C`=head1 NAME\*(C'\fR section. +.ie n .IP """$checker\->node()""" 4 +.el .IP \f(CW$checker\->node()\fR 4 +.IX Item "$checker->node()" +Add (if argument specified) and retrieve the nodes (as defined by \f(CW\*(C`=headX\*(C'\fR +and \f(CW\*(C`=item\*(C'\fR) 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. +.ie n .IP """$checker\->idx()""" 4 +.el .IP \f(CW$checker\->idx()\fR 4 +.IX Item "$checker->idx()" +Add (if argument specified) and retrieve the index entries (as defined by +\&\f(CW\*(C`X<>\*(C'\fR) of the current POD. They consist of plain text, each piece +of whitespace is collapsed to a single blank. +.ie n .IP """$checker\->hyperlinks()""" 4 +.el .IP \f(CW$checker\->hyperlinks()\fR 4 +.IX Item "$checker->hyperlinks()" +Retrieve an array containing the hyperlinks to things outside +the current POD (as defined by \f(CW\*(C`L<>\*(C'\fR). +.Sp +Each is an instance of a class with the following methods: +.IP \fBline()\fR 4 +.IX Item "line()" +Returns the approximate line number in which the link was encountered +.IP \fBtype()\fR 4 +.IX Item "type()" +Returns the type of the link; one of: +\&\f(CW"url"\fR for things like +\&\f(CW\*(C`http://www.foo\*(C'\fR, \f(CW"man"\fR for man pages, or \f(CW"pod"\fR. +.IP \fBpage()\fR 4 +.IX Item "page()" +Returns the linked-to page or url. +.IP \fBnode()\fR 4 +.IX Item "node()" +Returns the anchor or node within the linked-to page, or an empty string +(\f(CW""\fR) if none appears in the link. +.SH AUTHOR +.IX Header "AUTHOR" +Please report bugs using <http://rt.cpan.org>. +.PP +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) +.PP +Based on code for \fBPod::Text::pod2text()\fR written by +Tom Christiansen <tchrist@mox.perl.com> |