ACCENTS

Beyoncé! Beyoncé! Beyoncé!!

Beyoncé!  Beyoncé!
  Beyoncé!  Beyoncé!
    Beyoncé!  Beyoncé!

Older versions didn't convert Beyoncé in verbatim. EOP

   my $expected = <<"EOM";
.SH "ACCENTS"
.IX Header "ACCENTS"
Beyonce\\*'!  Beyonce\\*'!  Beyonce\\*'!!
.PP
.Vb 3
\\&    Beyonce\\*'!  Beyonce\\*'!
\\&      Beyonce\\*'!  Beyonce\\*'!
\\&        Beyonce\\*'!  Beyonce\\*'!
.Ve
.PP
Older versions didn't convert Beyonce\\*' in verbatim.
EOM
    $parser = Pod::Man->new or die "Cannot create parser\n";
    open my $out_fh, ">", 'out.tmp' or die "Can't open \$out_fh:  $!";
    $parser->output_fh($out_fh);
    $parser->parse_string_document($pod);
    close $out_fh;
    open my $in_fh, "<", 'out.tmp' or die "Can't open \$in_fh:  $!";
    while (<$in_fh>) { last if /^\.TH/; }
    my $man;
    {
        local $/ = undef;
        $man = <$in_fh>;
    }
    close $in_fh;
    unlink 'out.tmp';
    if ($man eq $expected) {
        print "ok 2\n";
    } else {
        print "not ok 2\n";
        print "Expected\n========\n$expected\nOutput\n======\n$man\n";
    }
}
}

my $n = 3; while (<DATA>) { next until $_ eq "###\n"; open (TMP, '> tmp.pod') or die "Cannot create tmp.pod: $!\n"; while (<DATA>) { last if $_ eq "###\n"; print TMP $_; } close TMP; my $parser = Pod::Man->new or die "Cannot create parser\n"; $parser->parse_from_file ('tmp.pod', 'out.tmp'); undef $parser; open (OUT, 'out.tmp') or die "Cannot open out.tmp: $!\n"; while (<OUT>) { last if /^\.TH/ } my $output; { local $/; $output = <OUT>; } close OUT; unlink ('tmp.pod', 'out.tmp'); my $expected = ''; while (<DATA>) { last if $_ eq "###\n"; $expected .= $_; } if ($output eq $expected) { print "ok $n\n"; } else { print "not ok $n\n"; print "Expected\n========\n$expected\nOutput\n======\n$output\n"; } $n++; }

# Below the marker are bits of POD and corresponding expected nroff output. # This is used to test specific features or problems with Pod::Man. The input # and output are separated by lines containing only ###.

__DATA__

### =head1 NAME

gcc - GNU project C and C++ compiler

C++ NOTES

Other mentions of C++. ### .SH "NAME" gcc \- GNU project C and C++ compiler .SH "\*(C+ NOTES" .IX Header " NOTES" Other mentions of \*(C+. ###

### =head1 PERIODS

This . should be quoted. ### .SH "PERIODS" .IX Header "PERIODS" This \f(CW\*(C`.\*(C'\fR should be quoted. ###

### =over 4

  • A bullet.

  • Another bullet.

  • Also a bullet.

### =over 4

foo

Not a bullet.

*

Also not a bullet.

### =over 4

1. Not a number
2. Spaced right
1 Not a number
2 Spaced right

### =over 4

*

Not bullet.

### =head1 SEQS

"=over ... =back"

"S<...>"

The quotes should be converted in the above to paired quotes. ### .SH "SEQS" .IX Header "SEQS" \&\*(L"=over ... =back\*(R" .PP \&\*(L"...\*(R" .PP The quotes should be converted in the above to paired quotes. ###

### =head1 YEN

It cost me ¥12345! That should be an X. ### .SH "YEN" .IX Header "YEN" It cost me X12345! That should be an X. ###

### =head1 agrave

Open à la shell. Previous versions mapped it wrong. ### .SH "agrave" .IX Header "agrave" Open a\*` la shell. Previous versions mapped it wrong. ###

### =over

First level

Blah blah blah....

  • Should be a bullet.

### =over 4

1. Check fonts in @CARP_NOT test.

### =head1 LINK QUOTING

There should not be double quotes: (?>pattern). ### .SH "LINK QUOTING" .IX Header "LINK QUOTING" There should not be double quotes: \f(CW\*(C`(?>pattern)\*(C'\fR. ###

### =head1 S<> MAGIC

Magic should be applied RISC OS to that. ### .SH " MAGIC" .IX Header " MAGIC" Magic should be applied \s-1RISC\s0\ \s-1OS\s0 to that. ###

### =head1 MAGIC MONEY

These should be identical.

Bippity boppity boo "The price is $100."

Bippity boppity boo "The price is $100." ### .SH "MAGIC MONEY" .IX Header "MAGIC MONEY" These should be identical. .PP Bippity boppity boo \*(L"The price is \f(CW$100\fR.\*(R" .PP Bippity boppity boo \*(L"The price is \f(CW$100\fR.\*(R" ###

### =head1 NAME

"Stuff" (no guesswork)

THINGS

Oboy, is this C++ "fun" yet! (guesswork) ### .SH "NAME" "Stuff" (no guesswork) .Sh "\s-1THINGS\s0" .IX Subsection "THINGS" Oboy, is this \*(C+ \*(L"fun\*(R" yet! (guesswork) ###

### =head1 Newline C Quote Weirdness

Blorp ' ''. Yes. ### .SH "Newline C Quote Weirdness" .IX Header "Newline C Quote Weirdness" Blorp \f(CW' \&''\fR. Yes. ###

### =head1 Soft Hypen Testing

sig­action manu­script Jark­ko Hie­ta­nie­mi

And again:

sig­action manu­script Jark­ko Hie­ta­nie­mi

And one more time:

sig­action manu­script Jark­ko Hie­ta­nie­mi ### .SH "Soft Hypen Testing" .IX Header "Soft Hypen Testing" sig\%action manu\%script Jark\%ko Hie\%ta\%nie\%mi .PP And again: .PP sig\%action manu\%script Jark\%ko Hie\%ta\%nie\%mi .PP And one more time: .PP sig\%action manu\%script Jark\%ko Hie\%ta\%nie\%mi ###

### =head1 X<> Whitespace

Blorpy prok wugga chachacha. ### .SH " Whitespace" .IX Header " Whitespace" Blorpy \fBprok\fR wugga chachacha. .IX Xref "bivav" ###

### =head1 Hyphen in S<>

Don't transform even-this hyphen. ### .SH "Hyphen in " .IX Header "Hyphen in " Don't transform\ even-this\ hyphen. ###

14 POD Errors

The following errors were encountered while parsing the POD:

Around line 39:

Non-ASCII character seen before =encoding in 'Beyoncé!'. Assuming CP1252

Around line 154:

'=item' outside of any '=over'

Around line 164:

=back doesn't take any parameters, but you said =back ### .IP "\(bu" 4 A bullet. .IP "\(bu" 4 Another bullet. .IP "\(bu" 4 Also a bullet. ###

Around line 177:

'=item' outside of any '=over'

Around line 181:

Expected text after =item, not a bullet

Around line 185:

=back doesn't take any parameters, but you said =back ### .IP "foo" 4 .IX Item "foo" Not a bullet. .IP "*" 4 Also not a bullet. ###

Around line 197:

'=item' outside of any '=over'

Around line 209:

=back doesn't take any parameters, but you said =back ### .IP "1. Not a number" 4 .IX Item "1. Not a number" .PD 0 .IP "2. Spaced right" 4 .IX Item "2. Spaced right" .IP "1 Not a number" 2 .IX Item "1 Not a number" .IP "2 Spaced right" 2 .IX Item "2 Spaced right" ###

Around line 225:

'=item' outside of any '=over'

Around line 229:

=back doesn't take any parameters, but you said =back ### .IP "*" 4 Not bullet. ###

Around line 276:

'=item' outside of any '=over'

Around line 288:

=back doesn't take any parameters, but you said =back ### .IP "First level" 4 .IX Item "First level" Blah blah blah.... .RS 4 .IP "\(bu" 4 Should be a bullet. .RE .RS 4 .RE ###

Around line 304:

'=item' outside of any '=over'

Around line 306:

=back doesn't take any parameters, but you said =back ### .ie n .IP "1. Check fonts in @CARP_NOT test." 4 .el .IP "1. Check fonts in \f(CW@CARP_NOT\fR test." 4 .IX Item "1. Check fonts in @CARP_NOT test." ###