Update podlators to CPAN version 4.08
authorChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Tue, 27 Sep 2016 12:43:59 +0000 (13:43 +0100)
committerChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Tue, 27 Sep 2016 12:43:59 +0000 (13:43 +0100)
  [DELTA]

podlators 4.08 (2016-09-24)

    [Pod::Man] Partially revert change in 4.00 to require the name option
    (--name to pod2man) when generating man pages from standard input.
    Historically, pod2man silently tolerated this, and there turned out to
    be a lot of software that depended on this, making the change too
    disruptive.  Instead, silently set the man page title to STDIN in this
    case, but warn about it in the documentation.  (#117990)

    [Pod::Man] Fix rendering bug for "TRUE (1)", which was recognized as
    needing small caps and then erroneously as a man page reference,
    resulting in escaped nroff.  (Found by Dan Jacobson with the
    XML::LibXML::Element man page.)  (Debian Bug#836831)

    [Pod::Man] Fix rendering bug causing "\s0(1)" to be mistakenly marked
    as a man page reference, later confusing backslash escaping.

    [Pod::Man] Add new lquote and rquote options (and corresponding
    --lquote and --rquote flags to pod2man) to set the left and right
    quotes for C<> text independently.  (#103298)

    Remove test for nested L<> markup, since an upcoming version of
    Pod::Simple will drop support for this.  (#114075)

35 files changed:
MANIFEST
Porting/Maintainers.pl
cpan/podlators/lib/Pod/Man.pm
cpan/podlators/lib/Pod/ParseLink.pm
cpan/podlators/lib/Pod/Text.pm
cpan/podlators/lib/Pod/Text/Color.pm
cpan/podlators/lib/Pod/Text/Overstrike.pm
cpan/podlators/lib/Pod/Text/Termcap.pm
cpan/podlators/scripts/pod2man.PL
cpan/podlators/t/data/basic.cap
cpan/podlators/t/data/basic.clr
cpan/podlators/t/data/basic.man
cpan/podlators/t/data/basic.ovr
cpan/podlators/t/data/basic.pod
cpan/podlators/t/data/basic.txt
cpan/podlators/t/data/snippets/man/bullet-after-nonbullet [new file with mode: 0644]
cpan/podlators/t/data/snippets/man/error-die [new file with mode: 0644]
cpan/podlators/t/data/snippets/man/error-none [new file with mode: 0644]
cpan/podlators/t/data/snippets/man/error-normal [new file with mode: 0644]
cpan/podlators/t/data/snippets/man/error-pod [new file with mode: 0644]
cpan/podlators/t/data/snippets/man/error-stderr [new file with mode: 0644]
cpan/podlators/t/data/snippets/man/error-stderr-opt [new file with mode: 0644]
cpan/podlators/t/data/snippets/man/fixed-font [new file with mode: 0644]
cpan/podlators/t/data/snippets/man/long-quote [new file with mode: 0644]
cpan/podlators/t/data/snippets/man/lquote-and-quote [new file with mode: 0644]
cpan/podlators/t/data/snippets/man/lquote-rquote [new file with mode: 0644]
cpan/podlators/t/data/snippets/man/nourls [new file with mode: 0644]
cpan/podlators/t/data/snippets/man/rquote-none [new file with mode: 0644]
cpan/podlators/t/lib/Test/Podlators.pm
cpan/podlators/t/lib/Test/RRA.pm
cpan/podlators/t/lib/Test/RRA/Config.pm
cpan/podlators/t/lib/Test/RRA/ModuleVersion.pm
cpan/podlators/t/man/basic.t
cpan/podlators/t/man/devise-title.t
cpan/podlators/t/man/options.t

index 7dbb1a3..065ca84 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -2220,7 +2220,20 @@ cpan/podlators/t/data/basic.ovr                  podlators test
 cpan/podlators/t/data/basic.pod                        podlators test
 cpan/podlators/t/data/basic.txt                        podlators test
 cpan/podlators/t/data/perl.conf                        podlators test
+cpan/podlators/t/data/snippets/man/bullet-after-nonbullet
 cpan/podlators/t/data/snippets/man/cpp                 podlators test
+cpan/podlators/t/data/snippets/man/error-die
+cpan/podlators/t/data/snippets/man/error-none
+cpan/podlators/t/data/snippets/man/error-normal
+cpan/podlators/t/data/snippets/man/error-pod
+cpan/podlators/t/data/snippets/man/error-stderr
+cpan/podlators/t/data/snippets/man/error-stderr-opt
+cpan/podlators/t/data/snippets/man/fixed-font
+cpan/podlators/t/data/snippets/man/long-quote
+cpan/podlators/t/data/snippets/man/lquote-and-quote
+cpan/podlators/t/data/snippets/man/lquote-rquote
+cpan/podlators/t/data/snippets/man/nourls
+cpan/podlators/t/data/snippets/man/rquote-none
 cpan/podlators/t/data/snippets/man/utf8-nonbreaking                    podlators test
 cpan/podlators/t/data/snippets/man/utf8-verbatim                       podlators test
 cpan/podlators/t/data/snippets/README                  podlators test
index 43bed4a..82fce35 100755 (executable)
@@ -978,7 +978,7 @@ use File::Glob qw(:case);
     },
 
     'podlators' => {
-        'DISTRIBUTION' => 'RRA/podlators-4.07.tar.gz',
+        'DISTRIBUTION' => 'RRA/podlators-4.08.tar.gz',
         'FILES'        => q[cpan/podlators pod/perlpodstyle.pod],
 
         'MAP' => {
index b739559..a0872b4 100644 (file)
@@ -43,7 +43,7 @@ BEGIN {
 
 @ISA = qw(Pod::Simple);
 
-$VERSION = '4.07';
+$VERSION = '4.08';
 
 # Set the debugging level.  If someone has inserted a debug function into this
 # class already, use that.  Otherwise, use any Pod::Simple debug function
@@ -216,12 +216,13 @@ sub init_fonts {
 }
 
 # Initialize the quotes that we'll be using for C<> text.  This requires some
-# special handling, both to parse the user parameter if given and to make sure
-# that the quotes will be safe against *roff.  Sets the internal hash keys
-# LQUOTE and RQUOTE.
+# special handling, both to parse the user parameters if given and to make
+# sure that the quotes will be safe against *roff.  Sets the internal hash
+# keys LQUOTE and RQUOTE.
 sub init_quotes {
     my ($self) = (@_);
 
+    # Handle the quotes option first, which sets both quotes at once.
     $$self{quotes} ||= '"';
     if ($$self{quotes} eq 'none') {
         $$self{LQUOTE} = $$self{RQUOTE} = '';
@@ -235,6 +236,14 @@ sub init_quotes {
         croak(qq(Invalid quote specification "$$self{quotes}"))
     }
 
+    # Now handle the lquote and rquote options.
+    if (defined $$self{lquote}) {
+        $$self{LQUOTE} = $$self{lquote} eq 'none' ? q{} : $$self{lquote};
+    }
+    if (defined $$self{rquote}) {
+        $$self{RQUOTE} = $$self{rquote} eq 'none' ? q{} : $$self{rquote};
+    }
+
     # Double the first quote; note that this should not be s///g as two double
     # quotes is represented in *roff as three double quotes, not four.  Weird,
     # I know.
@@ -514,9 +523,9 @@ sub guesswork {
     # entire warranty disclaimers in man page output into small caps.
     if ($$self{MAGIC_SMALLCAPS}) {
         s{
-            ( ^ | [\s\(\"\'\`\[\{<>] | \\[ ]  )                     # (1)
-            ( [A-Z] [A-Z] (?: [/A-Z+:\d_\$&] | \\- | [.,\"\s] )* )  # (2)
-            (?= [\s>\}\]\(\)\'\".?!,;] | \\*\(-- | \\[ ] | $ )      # (3)
+            ( ^ | [\s\(\"\'\`\[\{<>] | \\[ ]  )                           # (1)
+            ( [A-Z] [A-Z] (?: \s? [/A-Z+:\d_\$&] | \\- | \s? [.,\"] )* )  # (2)
+            (?= [\s>\}\]\(\)\'\".?!,;] | \\*\(-- | \\[ ] | $ )            # (3)
         } {
             $1 . '\s-1' . $2 . '\s0'
         }egx;
@@ -549,6 +558,7 @@ sub guesswork {
     if ($$self{MAGIC_MANREF}) {
         s{
             ( \b | \\s-1 )
+            (?<! \\ )                                   # rule out \s0(1)
             ( [A-Za-z_] (?:[.:\w] | \\- | \\s-?[01])+ )
             ( \( \d [a-z]* \) )
         } {
@@ -854,12 +864,16 @@ sub devise_title {
 
     # If Pod::Parser gave us an IO::File reference as the source file name,
     # convert that to the empty string as well.  Then, if we don't have a
-    # valid name, emit a warning and convert it to STDIN.
+    # valid name, convert it to STDIN.
+    #
+    # In podlators 4.00 through 4.07, this also produced a warning, but that
+    # was surprising to a lot of programs that had expected to be able to pipe
+    # POD through pod2man without specifying the name.  In the name of
+    # backward compatibility, just quietly set STDIN as the page title.
     if ($name =~ /^IO::File(?:=\w+)\(0x[\da-f]+\)$/i) {
         $name = '';
     }
     if ($name eq '') {
-        $self->whine (1, 'No name given for document');
         $name = 'STDIN';
     }
 
@@ -1632,7 +1646,7 @@ __END__
 =for stopwords
 en em ALLCAPS teeny fixedbold fixeditalic fixedbolditalic stderr utf8
 UTF-8 Allbery Sean Burke Ossanna Solaris formatters troff uppercased
-Christiansen nourls parsers Kernighan
+Christiansen nourls parsers Kernighan lquote rquote
 
 =head1 NAME
 
@@ -1743,6 +1757,20 @@ Pod::Man doesn't assume you have this, and defaults to C<CB>.  Some
 systems (such as Solaris) have this font available as C<CX>.  Only matters
 for B<troff> output.
 
+=item lquote
+
+=item rquote
+
+Sets the quote marks used to surround CE<lt>> text.  C<lquote> sets the
+left quote mark and C<rquote> sets the right quote mark.  Either may also
+be set to the special value C<none>, in which case no quote mark is added
+on that side of CE<lt>> text (but the font is still changed for troff
+output).
+
+Also see the C<quotes> option, which can be used to set both quotes at once.
+If both C<quotes> and one of the other options is set, C<lquote> or C<rquote>
+overrides C<quotes>.
+
 =item name
 
 Set the name of the manual page for the C<.TH> macro.  Without this
@@ -1752,9 +1780,9 @@ parsed to see if it is a Perl module path.  If it is, a path like
 C<.../lib/Pod/Man.pm> is converted into a name like C<Pod::Man>.  This
 option, if given, overrides any automatic determination of the name.
 
-If generating a manual page from standard input, this option is required,
-since there's otherwise no way for Pod::Man to know what to use for the
-manual page name.
+If generating a manual page from standard input, the name will be set to
+C<STDIN> if this option is not provided.  Providing this option is strongly
+recommended to set a meaningful manual page name.
 
 =item nourls
 
@@ -1783,6 +1811,10 @@ This may also be set to the special value C<none>, in which case no quote
 marks are added around CE<lt>> text (but the font is still changed for troff
 output).
 
+Also see the C<lquote> and C<rquote> options, which can be used to set the
+left and right quotes independently.  If both C<quotes> and one of the other
+options is set, C<lquote> or C<rquote> overrides C<quotes>.
+
 =item release
 
 Set the centered footer for the C<.TH> macro.  By default, this is set to
index a9e6b34..c9b964b 100644 (file)
@@ -31,7 +31,7 @@ use Exporter;
 @ISA    = qw(Exporter);
 @EXPORT = qw(parselink);
 
-$VERSION = '4.07';
+$VERSION = '4.08';
 
 ##############################################################################
 # Implementation
index e141da2..240e8a9 100644 (file)
@@ -39,7 +39,7 @@ use Pod::Simple ();
 # We have to export pod2text for backward compatibility.
 @EXPORT = qw(pod2text);
 
-$VERSION = '4.07';
+$VERSION = '4.08';
 
 ##############################################################################
 # Initialization
index b67742e..ccd46c6 100644 (file)
@@ -27,7 +27,7 @@ use vars qw(@ISA $VERSION);
 
 @ISA = qw(Pod::Text);
 
-$VERSION = '4.07';
+$VERSION = '4.08';
 
 ##############################################################################
 # Overrides
index 1592026..a2ba5bb 100644 (file)
@@ -35,7 +35,7 @@ use Pod::Text ();
 
 @ISA = qw(Pod::Text);
 
-$VERSION = '4.07';
+$VERSION = '4.08';
 
 ##############################################################################
 # Overrides
index d533e76..b0823e0 100644 (file)
@@ -28,7 +28,7 @@ use vars qw(@ISA $VERSION);
 
 @ISA = qw(Pod::Text);
 
-$VERSION = '4.07';
+$VERSION = '4.08';
 
 ##############################################################################
 # Overrides
index f40c126..b70057b 100644 (file)
@@ -76,8 +76,9 @@ my %options;
 Getopt::Long::config ('bundling_override');
 GetOptions (\%options, 'center|c=s', 'date|d=s', 'errors=s', 'fixed=s',
             'fixedbold=s', 'fixeditalic=s', 'fixedbolditalic=s', 'help|h',
-            'lax|l', 'name|n=s', 'nourls', 'official|o', 'quotes|q=s',
-            'release|r=s', 'section|s=s', 'stderr', 'verbose|v', 'utf8|u')
+            'lax|l', 'lquote=s', 'name|n=s', 'nourls', 'official|o',
+            'quotes|q=s', 'release|r=s', 'rquote=s', 'section|s=s', 'stderr',
+            'verbose|v', 'utf8|u')
     or exit 1;
 pod2usage (0) if $options{help};
 
@@ -125,7 +126,7 @@ __END__
 =for stopwords
 en em --stderr stderr --utf8 UTF-8 overdo markup MT-LEVEL Allbery Solaris
 URL troff troff-specific formatters uppercased Christiansen --nourls UTC
-prepend
+prepend lquote rquote
 
 =head1 NAME
 
@@ -136,9 +137,9 @@ pod2man - Convert POD data to formatted *roff input
 pod2man [B<--center>=I<string>] [B<--date>=I<string>] [B<--errors>=I<style>]
     [B<--fixed>=I<font>] [B<--fixedbold>=I<font>] [B<--fixeditalic>=I<font>]
     [B<--fixedbolditalic>=I<font>] [B<--name>=I<name>] [B<--nourls>]
-    [B<--official>] [B<--quotes>=I<quotes>] [B<--release>=I<version>]
-    [B<--section>=I<manext>] [B<--stderr>] [B<--utf8>] [B<--verbose>]
-    [I<input> [I<output>] ...]
+    [B<--official>] [B<--release>=I<version>] [B<--section>=I<manext>]
+    [B<--quotes>=I<quotes>] [B<--lquote>=I<quote>] [B<--rquote>=I<quote>]
+    [B<--stderr>] [B<--utf8>] [B<--verbose>] [I<input> [I<output>] ...]
 
 pod2man B<--help>
 
@@ -236,6 +237,20 @@ No longer used.  B<pod2man> used to check its input for validity as a
 manual page, but this should now be done by L<podchecker(1)> instead.
 Accepted for backward compatibility; this option no longer does anything.
 
+=item B<--lquote>=I<quote>
+
+=item B<--rquote>=I<quote>
+
+Sets the quote marks used to surround CE<lt>> text.  B<--lquote> sets the
+left quote mark and B<--rquote> sets the right quote mark.  Either may also
+be set to the special value C<none>, in which case no quote mark is added
+on that side of CE<lt>> text (but the font is still changed for troff
+output).
+
+Also see the B<--quotes> option, which can be used to set both quotes at once.
+If both B<--quotes> and one of the other options is set, B<--lquote> or
+B<--rquote> overrides B<--quotes>.
+
 =item B<-n> I<name>, B<--name>=I<name>
 
 Set the name of the manual page for the C<.TH> macro to I<name>.  Without
@@ -252,9 +267,9 @@ in all-uppercase, even if the command isn't.
 This option is probably not useful when converting multiple POD files at
 once.
 
-When converting POD source from standard input, this option is required,
-since there's otherwise no way to know what to use as the name of the
-manual page.
+When converting POD source from standard input, the name will be set to
+C<STDIN> if this option is not provided.  Providing this option is strongly
+recommended to set a meaningful manual page name.
 
 =item B<--nourls>
 
@@ -287,6 +302,10 @@ I<quotes> may also be set to the special value C<none>, in which case no
 quote marks are added around CE<lt>> text (but the font is still changed for
 troff output).
 
+Also see the B<--lquote> and B<--rquote> options, which can be used to set the
+left and right quotes independently.  If both B<--quotes> and one of the other
+options is set, B<--lquote> or B<--rquote> overrides B<--quotes>.
+
 =item B<-r> I<version>, B<--release>=I<version>
 
 Set the centered footer for the C<.TH> macro to I<version>.  By default,
index 20fc1e5..a595343 100644 (file)
@@ -80,8 +80,6 @@
 
     "Section "with" \e[4m\e[1mother\e[m markup\e[m" in foo|bar
 
-    Nested <http://www.perl.org/>
-
 \e[1mOVER AND ITEMS\e[m
     Taken from Pod::Parser tests, this is a test to ensure that multiline
     =item paragraphs get indented appropriately.
index f988571..da6acf2 100644 (file)
@@ -80,8 +80,6 @@
 
     "Section "with" \e[33m\e[1mother\e[0m markup\e[0m" in foo|bar
 
-    Nested <http://www.perl.org/>
-
 \e[1mOVER AND ITEMS\e[0m
     Taken from Pod::Parser tests, this is a test to ensure that multiline
     =item paragraphs get indented appropriately.
index 43874b6..e11546f 100644 (file)
@@ -90,8 +90,6 @@ Testing \fIitalics\fR
 "\fIItalic\fR text" in foo
 .PP
 "Section \f(CW\*(C`with\*(C'\fR \fI\f(BIother\fI markup\fR" in foo|bar
-.PP
-Nested <http://www.perl.org/>
 .SH "OVER AND ITEMS"
 .IX Header "OVER AND ITEMS"
 Taken from Pod::Parser tests, this is a test to ensure that multiline
index bb124a0..726a16a 100644 (file)
@@ -80,8 +80,6 @@ L\bLI\bIN\bNK\bKS\bS
 
     "Section "with" _\bo_\bt_\bh_\be_\br_\b _\bm_\ba_\br_\bk_\bu_\bp" in foo|bar
 
-    Nested <http://www.perl.org/>
-
 O\bOV\bVE\bER\b\b A\bAN\bND\b\b I\bIT\bTE\bEM\bMS\bS
     Taken from Pod::Parser tests, this is a test to ensure that multiline
     =item paragraphs get indented appropriately.
index 949b3a8..3c7fd59 100644 (file)
@@ -93,8 +93,6 @@ L<foo/I<Italic> text>
 
 L<fooE<verbar>barZ<>/Section C<with> I<B<other> markup>>
 
-L<Nested L<http://www.perl.org/>|fooE<sol>bar>
-
 =head1 OVER AND ITEMS
 
 Taken from Pod::Parser tests, this is a test to ensure that multiline
index 986e98a..5eee3c9 100644 (file)
@@ -80,8 +80,6 @@ LINKS
 
     "Section "with" *other markup*" in foo|bar
 
-    Nested <http://www.perl.org/>
-
 OVER AND ITEMS
     Taken from Pod::Parser tests, this is a test to ensure that multiline
     =item paragraphs get indented appropriately.
diff --git a/cpan/podlators/t/data/snippets/man/bullet-after-nonbullet b/cpan/podlators/t/data/snippets/man/bullet-after-nonbullet
new file mode 100644 (file)
index 0000000..f98302a
--- /dev/null
@@ -0,0 +1,25 @@
+[name]
+Handling of bullet after non-bullet
+
+[options]
+errors none
+
+[input]
+=over 4
+
+=item foo
+
+Not a bullet.
+
+=item *
+
+Also not a bullet.
+
+=back
+
+[output]
+.IP "foo" 4
+.IX Item "foo"
+Not a bullet.
+.IP "*" 4
+Also not a bullet.
diff --git a/cpan/podlators/t/data/snippets/man/error-die b/cpan/podlators/t/data/snippets/man/error-die
new file mode 100644 (file)
index 0000000..48b9cac
--- /dev/null
@@ -0,0 +1,27 @@
+[name]
+Errors throw exceptions
+
+[options]
+errors die
+
+[input]
+=over 4
+
+=item Foo
+
+Bar.
+
+=head1 NEXT
+
+[output]
+.IP "Foo" 4
+.IX Item "Foo"
+Bar.
+.SH "NEXT"
+.IX Header "NEXT"
+
+[errors]
+Pod input around line 7: You forgot a '=back' before '=head1'
+
+[exception]
+POD document had syntax errors
diff --git a/cpan/podlators/t/data/snippets/man/error-none b/cpan/podlators/t/data/snippets/man/error-none
new file mode 100644 (file)
index 0000000..676fc40
--- /dev/null
@@ -0,0 +1,21 @@
+[name]
+Suppress errors
+
+[options]
+errors none
+
+[input]
+=over 4
+
+=item Foo
+
+Bar.
+
+=head1 NEXT
+
+[output]
+.IP "Foo" 4
+.IX Item "Foo"
+Bar.
+.SH "NEXT"
+.IX Header "NEXT"
diff --git a/cpan/podlators/t/data/snippets/man/error-normal b/cpan/podlators/t/data/snippets/man/error-normal
new file mode 100644 (file)
index 0000000..cdd5d40
--- /dev/null
@@ -0,0 +1,24 @@
+[name]
+Normal error handling
+
+[input]
+=over 4
+
+=item Foo
+
+Bar.
+
+=head1 NEXT
+
+[output]
+.IP "Foo" 4
+.IX Item "Foo"
+Bar.
+.SH "NEXT"
+.IX Header "NEXT"
+.SH "POD ERRORS"
+.IX Header "POD ERRORS"
+Hey! \fBThe above document had some coding errors, which are explained below:\fR
+.IP "Around line 7:" 4
+.IX Item "Around line 7:"
+You forgot a '=back' before '=head1'
diff --git a/cpan/podlators/t/data/snippets/man/error-pod b/cpan/podlators/t/data/snippets/man/error-pod
new file mode 100644 (file)
index 0000000..4405653
--- /dev/null
@@ -0,0 +1,27 @@
+[name]
+Errors to POD source
+
+[options]
+errors pod
+
+[input]
+=over 4
+
+=item Foo
+
+Bar.
+
+=head1 NEXT
+
+[output]
+.IP "Foo" 4
+.IX Item "Foo"
+Bar.
+.SH "NEXT"
+.IX Header "NEXT"
+.SH "POD ERRORS"
+.IX Header "POD ERRORS"
+Hey! \fBThe above document had some coding errors, which are explained below:\fR
+.IP "Around line 7:" 4
+.IX Item "Around line 7:"
+You forgot a '=back' before '=head1'
diff --git a/cpan/podlators/t/data/snippets/man/error-stderr b/cpan/podlators/t/data/snippets/man/error-stderr
new file mode 100644 (file)
index 0000000..bcaef66
--- /dev/null
@@ -0,0 +1,24 @@
+[name]
+Errors to stadard error
+
+[options]
+errors stderr
+
+[input]
+=over 4
+
+=item Foo
+
+Bar.
+
+=head1 NEXT
+
+[output]
+.IP "Foo" 4
+.IX Item "Foo"
+Bar.
+.SH "NEXT"
+.IX Header "NEXT"
+
+[errors]
+Pod input around line 7: You forgot a '=back' before '=head1'
diff --git a/cpan/podlators/t/data/snippets/man/error-stderr-opt b/cpan/podlators/t/data/snippets/man/error-stderr-opt
new file mode 100644 (file)
index 0000000..e4e0cf8
--- /dev/null
@@ -0,0 +1,24 @@
+[name]
+Errors to standard error with stderr option
+
+[options]
+stderr 1
+
+[input]
+=over 4
+
+=item Foo
+
+Bar.
+
+=head1 NEXT
+
+[output]
+.IP "Foo" 4
+.IX Item "Foo"
+Bar.
+.SH "NEXT"
+.IX Header "NEXT"
+
+[errors]
+Pod input around line 7: You forgot a '=back' before '=head1'
diff --git a/cpan/podlators/t/data/snippets/man/fixed-font b/cpan/podlators/t/data/snippets/man/fixed-font
new file mode 100644 (file)
index 0000000..f0b8524
--- /dev/null
@@ -0,0 +1,18 @@
+[name]
+Options to set fixed fonts
+
+[options]
+fixed CR
+fixedbold CY
+fixeditalic CW
+fixedbolditalic CX
+
+[input]
+=head1 FIXED FONTS
+
+C<foo B<bar I<baz>> I<bay>>
+
+[output]
+.SH "FIXED FONTS"
+.IX Header "FIXED FONTS"
+\&\f(CR\*(C`foo \f(CYbar \f(CXbaz\f(CY\f(CR \f(CWbay\f(CR\*(C'\fR
diff --git a/cpan/podlators/t/data/snippets/man/long-quote b/cpan/podlators/t/data/snippets/man/long-quote
new file mode 100644 (file)
index 0000000..589dcb9
--- /dev/null
@@ -0,0 +1,16 @@
+[name]
+Long quotes option
+
+[options]
+quotes \(lq"\(rq"
+
+[input]
+=head1 FOO C<BAR> BAZ
+
+Foo C<bar> baz.
+
+[output]
+.ie n .SH "FOO \(lq""BAR\(rq"" BAZ"
+.el .SH "FOO \f(CWBAR\fP BAZ"
+.IX Header "FOO BAR BAZ"
+Foo \f(CW\*(C`bar\*(C'\fR baz.
diff --git a/cpan/podlators/t/data/snippets/man/lquote-and-quote b/cpan/podlators/t/data/snippets/man/lquote-and-quote
new file mode 100644 (file)
index 0000000..def8fe3
--- /dev/null
@@ -0,0 +1,17 @@
+[name]
+lquote and quotes both used
+
+[options]
+lquote ``
+quotes "
+
+[input]
+=head1 FOO C<BAR> BAZ
+
+Foo C<bar> baz.
+
+[output]
+.ie n .SH "FOO ``BAR"" BAZ"
+.el .SH "FOO \f(CWBAR\fP BAZ"
+.IX Header "FOO BAR BAZ"
+Foo \f(CW\*(C`bar\*(C'\fR baz.
diff --git a/cpan/podlators/t/data/snippets/man/lquote-rquote b/cpan/podlators/t/data/snippets/man/lquote-rquote
new file mode 100644 (file)
index 0000000..481e545
--- /dev/null
@@ -0,0 +1,17 @@
+[name]
+Set separate left and right quotes
+
+[options]
+lquote ``
+rquote "
+
+[input]
+=head1 FOO C<BAR> BAZ
+
+Foo C<bar> baz.
+
+[output]
+.ie n .SH "FOO ``BAR"" BAZ"
+.el .SH "FOO \f(CWBAR\fP BAZ"
+.IX Header "FOO BAR BAZ"
+Foo \f(CW\*(C`bar\*(C'\fR baz.
diff --git a/cpan/podlators/t/data/snippets/man/nourls b/cpan/podlators/t/data/snippets/man/nourls
new file mode 100644 (file)
index 0000000..ddbdc4b
--- /dev/null
@@ -0,0 +1,15 @@
+[name]
+nourls option
+
+[options]
+nourls 1
+
+[input]
+=head1 URL suppression
+
+L<anchor|http://www.example.com/>
+
+[output]
+.SH "URL suppression"
+.IX Header "URL suppression"
+anchor
diff --git a/cpan/podlators/t/data/snippets/man/rquote-none b/cpan/podlators/t/data/snippets/man/rquote-none
new file mode 100644 (file)
index 0000000..3de3829
--- /dev/null
@@ -0,0 +1,16 @@
+[name]
+rquote set to none
+
+[options]
+rquote none
+
+[input]
+=head1 FOO C<BAR> BAZ
+
+Foo C<bar> baz.
+
+[output]
+.ie n .SH "FOO ""BAR BAZ"
+.el .SH "FOO \f(CWBAR\fP BAZ"
+.IX Header "FOO BAR BAZ"
+Foo \f(CW\*(C`bar\*(C'\fR baz.
index 3111d40..d0a8ffa 100644 (file)
@@ -278,7 +278,7 @@ sub test_snippet {
     }
     if ($data_ref->{exception} || $exception) {
         if ($exception) {
-            $exception =~ s{ [ ] at [ ] .* }{}xms;
+            $exception =~ s{ [ ] at [ ] .* }{\n}xms;
         }
         is($exception, $data_ref->{exception}, "$data_ref->{name}: exception");
     }
index 7e79515..fe95cd2 100644 (file)
@@ -31,7 +31,7 @@ BEGIN {
     # This version should match the corresponding rra-c-util release, but with
     # two digits for the minor version, including a leading zero if necessary,
     # so that it will sort properly.
-    $VERSION = '5.09';
+    $VERSION = '6.01';
 }
 
 # Skip this test unless author tests are requested.  Takes a short description
index ffdfc08..727927d 100644 (file)
@@ -34,16 +34,16 @@ BEGIN {
     # This version should match the corresponding rra-c-util release, but with
     # two digits for the minor version, including a leading zero if necessary,
     # so that it will sort properly.
-    $VERSION = '5.09';
+    $VERSION = '6.01';
 }
 
-# If BUILD or SOURCE are set in the environment, look for data/perl.conf under
-# those paths for a C Automake package.  Otherwise, look in t/data/perl.conf
-# for a standalone Perl module or tests/data/perl.conf for Perl tests embedded
-# in a larger distribution.  Don't use Test::RRA::Automake since it may not
-# exist.
+# If C_TAP_BUILD or C_TAP_SOURCE are set in the environment, look for
+# data/perl.conf under those paths for a C Automake package.  Otherwise, look
+# in t/data/perl.conf for a standalone Perl module or tests/data/perl.conf for
+# Perl tests embedded in a larger distribution.  Don't use Test::RRA::Automake
+# since it may not exist.
 our $PATH;
-for my $base ($ENV{BUILD}, $ENV{SOURCE}, 't', 'tests') {
+for my $base ($ENV{C_TAP_BUILD}, $ENV{C_TAP_SOURCE}, './t', './tests') {
     next if !defined($base);
     my $path = "$base/data/perl.conf";
     if (-r $path) {
@@ -70,7 +70,7 @@ our @STRICT_PREREQ;
 # Load the configuration.
 if (!do($PATH)) {
     my $error = $@ || $! || 'loading file did not return true';
-    BAIL_OUT("cannot load data/perl.conf: $error");
+    BAIL_OUT("cannot load $PATH: $error");
 }
 
 1;
@@ -98,10 +98,10 @@ for both C Automake packages and stand-alone Perl modules.
 
 Test::RRA::Config looks for a file named F<data/perl.conf> relative to the
 root of the test directory.  That root is taken from the environment variables
-BUILD or SOURCE (in that order) if set, which will be the case for C Automake
-packages using C TAP Harness.  If neither is set, it expects the root of the
-test directory to be a directory named F<t> relative to the current directory,
-which will be the case for stand-alone Perl modules.
+C_TAP_BUILD or C_TAP_SOURCE (in that order) if set, which will be the case for
+C Automake packages using C TAP Harness.  If neither is set, it expects the
+root of the test directory to be a directory named F<t> relative to the
+current directory, which will be the case for stand-alone Perl modules.
 
 The following variables are supported:
 
@@ -185,6 +185,8 @@ Russ Allbery <eagle@eyrie.org>
 
 =head1 COPYRIGHT AND LICENSE
 
+Copyright 2015, 2016 Russ Allbery <eagle@eyrie.org>
+
 Copyright 2013, 2014 The Board of Trustees of the Leland Stanford Junior
 University
 
index 2d77984..202d1b8 100644 (file)
@@ -31,7 +31,7 @@ BEGIN {
     # This version should match the corresponding rra-c-util release, but with
     # two digits for the minor version, including a leading zero if necessary,
     # so that it will sort properly.
-    $VERSION = '5.09';
+    $VERSION = '6.01';
 }
 
 # A regular expression matching the version string for a module using the
index 5ad84b5..7133946 100644 (file)
@@ -19,7 +19,7 @@ BEGIN {
 
 use strict;
 
-use Test::More tests => 35;
+use Test::More tests => 37;
 BEGIN { use_ok ('Pod::Man') }
 
 # Test whether we can use binmode to set encoding.
@@ -592,3 +592,26 @@ earlier, italic was terminated with \ef(\s-1CW,\s0 which didn't properly stop it
 .el .IP "\f(CWtar \f(CIletter\f(CW... [\f(CIargument\f(CW]... [\f(CIoption\f(CW]... [\f(CIname\f(CW]...\fR" 2
 .IX Item "tar letter... [argument]... [option]... [name]..."
 ###
+
+###
+=head1 TRUE (1)
+
+podlators prior to 4.08 misrendered TRUE (1) and FALSE (0) with escaped nroff
+in the output because it tried to apply both small caps and man page reference
+code and got it wrong.
+###
+.SH "TRUE (1)"
+.IX Header "TRUE (1)"
+podlators prior to 4.08 misrendered \s-1TRUE\s0 (1) and \s-1FALSE\s0 (0) with escaped nroff
+in the output because it tried to apply both small caps and man page reference
+code and got it wrong.
+###
+
+###
+=pod
+
+Not a man page reference: \s0(1)
+###
+.PP
+Not a man page reference: \es0(1)
+###
index afdd550..45f3fca 100644 (file)
@@ -30,11 +30,11 @@ my $output;
 $parser->output_string(\$output);
 $parser->parse_file($handle);
 
-# Check the results of devise_title for this.  We should get back STDIN, and
-# we should have reported an error.
+# Check the results of devise_title for this.  We should get back STDIN and
+# not report an error.
 my ($name, $section) = $parser->devise_title;
 is($name, 'STDIN', 'devise_title uses STDIN for file handle input');
-ok($parser->errors_seen, '...and errors were seen');
+ok(!$parser->errors_seen, '...and no errors were seen');
 
 # Now check handling of a simple file name with no parent directory, which
 # simulates a POD file at the top of a distribution.  In podlators 4.06, this
index 7d48b5a..20af5de 100644 (file)
@@ -1,8 +1,8 @@
-#!/usr/bin/perl -w
+#!/usr/bin/perl
 #
-# Additional tests for Pod::Man options.
+# Test Pod::Man behavior with various options
 #
-# Copyright 2002, 2004, 2006, 2008, 2009, 2012, 2013, 2015
+# Copyright 2002, 2004, 2006, 2008, 2009, 2012, 2013, 2015, 2016
 #     Russ Allbery <rra@cpan.org>
 #
 # This program is free software; you may redistribute it and/or modify it
@@ -15,259 +15,21 @@ use warnings;
 use lib 't/lib';
 
 use Test::More tests => 31;
-use Test::Podlators qw(read_test_data slurp);
+use Test::Podlators qw(test_snippet);
 
+# Load the module.
 BEGIN {
-    use_ok ('Pod::Man');
+    use_ok('Pod::Man');
 }
 
-# Redirect stderr to a file.  Return the name of the file that stores standard
-# error.
-sub stderr_save {
-    open(OLDERR, '>&STDERR') or die "Can't dup STDERR: $!\n";
-    open(STDERR, "> out$$.err") or die "Can't redirect STDERR: $!\n";
-    return "out$$.err";
-}
-
-# Restore stderr.
-sub stderr_restore {
-    close(STDERR);
-    open(STDERR, '>&OLDERR') or die "Can't dup STDERR: $!\n";
-    close(OLDERR);
-}
-
-# Loop through all the test data, generate output, and compare it to the
-# desired output data.
-my %options = (options => 1, errors => 1);
-my $n = 1;
-while (defined(my $data_ref = read_test_data(\*DATA, \%options))) {
-    my $parser = Pod::Man->new(%{ $data_ref->{options} }, name => 'TEST');
-    isa_ok($parser, 'Pod::Man', 'Parser object');
-
-    # Save stderr to a temporary file and then run the parser, storing the
-    # output into a Perl variable.
-    my $errors = stderr_save();
-    my $got;
-    $parser->output_string(\$got);
-    eval { $parser->parse_string_document($data_ref->{input}) };
-    my $exception = $@;
-    stderr_restore();
-
-    # Strip off everything prior to .nh from the output so that we aren't
-    # testing the generated header, and then check the output.
-    $got =~ s{ \A .* \n [.]nh \n }{}xms;
-    is($got, $data_ref->{output}, "Output for test $n");
+# List of snippets run by this test.
+my @snippets = qw(
+  bullet-after-nonbullet error-die error-none error-normal
+  error-pod error-stderr error-stderr-opt fixed-font long-quote
+  lquote-and-quote lquote-rquote nourls rquote-none
+);
 
-    # Collect the errors and add any exception, marking it with EXCEPTION.
-    # Then, compare that to the expected errors.  The "1 while" construct is
-    # for VMS, in case there are multiple versions of the file.
-    my $got_errors = slurp($errors);
-    1 while unlink($errors);
-    if ($exception) {
-        $exception =~ s{ [ ] at [ ] .* }{}xms;
-        $got_errors .= "EXCEPTION: $exception\n";
-    }
-    is($got_errors, $data_ref->{errors}, "Errors for test $n");
-    $n++;
+# Run all the tests.
+for my $snippet (@snippets) {
+    test_snippet('Pod::Man', "man/$snippet");
 }
-
-# Below the marker are bits of POD and corresponding expected text output and
-# error output.  The options, input, output, and errors are separated by lines
-# containing only ###.
-
-__DATA__
-
-###
-fixed CR
-fixedbold CY
-fixeditalic CW
-fixedbolditalic CX
-###
-=head1 FIXED FONTS
-
-C<foo B<bar I<baz>> I<bay>>
-###
-.SH "FIXED FONTS"
-.IX Header "FIXED FONTS"
-\&\f(CR\*(C`foo \f(CYbar \f(CXbaz\f(CY\f(CR \f(CWbay\f(CR\*(C'\fR
-###
-###
-
-###
-###
-=over 4
-
-=item Foo
-
-Bar.
-
-=head1 NEXT
-###
-.IP "Foo" 4
-.IX Item "Foo"
-Bar.
-.SH "NEXT"
-.IX Header "NEXT"
-.SH "POD ERRORS"
-.IX Header "POD ERRORS"
-Hey! \fBThe above document had some coding errors, which are explained below:\fR
-.IP "Around line 7:" 4
-.IX Item "Around line 7:"
-You forgot a '=back' before '=head1'
-###
-###
-
-###
-stderr 1
-###
-=over 4
-
-=item Foo
-
-Bar.
-
-=head1 NEXT
-###
-.IP "Foo" 4
-.IX Item "Foo"
-Bar.
-.SH "NEXT"
-.IX Header "NEXT"
-###
-Pod input around line 7: You forgot a '=back' before '=head1'
-###
-
-###
-nourls 1
-###
-=head1 URL suppression
-
-L<anchor|http://www.example.com/>
-###
-.SH "URL suppression"
-.IX Header "URL suppression"
-anchor
-###
-###
-
-###
-errors stderr
-###
-=over 4
-
-=item Foo
-
-Bar.
-
-=head1 NEXT
-###
-.IP "Foo" 4
-.IX Item "Foo"
-Bar.
-.SH "NEXT"
-.IX Header "NEXT"
-###
-Pod input around line 7: You forgot a '=back' before '=head1'
-###
-
-###
-errors die
-###
-=over 4
-
-=item Foo
-
-Bar.
-
-=head1 NEXT
-###
-.IP "Foo" 4
-.IX Item "Foo"
-Bar.
-.SH "NEXT"
-.IX Header "NEXT"
-###
-Pod input around line 7: You forgot a '=back' before '=head1'
-EXCEPTION: POD document had syntax errors
-###
-
-###
-errors pod
-###
-=over 4
-
-=item Foo
-
-Bar.
-
-=head1 NEXT
-###
-.IP "Foo" 4
-.IX Item "Foo"
-Bar.
-.SH "NEXT"
-.IX Header "NEXT"
-.SH "POD ERRORS"
-.IX Header "POD ERRORS"
-Hey! \fBThe above document had some coding errors, which are explained below:\fR
-.IP "Around line 7:" 4
-.IX Item "Around line 7:"
-You forgot a '=back' before '=head1'
-###
-###
-
-###
-errors none
-###
-=over 4
-
-=item Foo
-
-Bar.
-
-=head1 NEXT
-###
-.IP "Foo" 4
-.IX Item "Foo"
-Bar.
-.SH "NEXT"
-.IX Header "NEXT"
-###
-###
-
-###
-errors none
-###
-=over 4
-
-=item foo
-
-Not a bullet.
-
-=item *
-
-Also not a bullet.
-
-=back
-###
-.IP "foo" 4
-.IX Item "foo"
-Not a bullet.
-.IP "*" 4
-Also not a bullet.
-###
-###
-
-###
-quotes \(lq"\(rq"
-###
-=head1 FOO C<BAR> BAZ
-
-Foo C<bar> baz.
-###
-.ie n .SH "FOO \(lq""BAR\(rq"" BAZ"
-.el .SH "FOO \f(CWBAR\fP BAZ"
-.IX Header "FOO BAR BAZ"
-Foo \f(CW\*(C`bar\*(C'\fR baz.
-###
-###