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
### =over 4
### =over 4
### =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
### =over 4
### =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
sigaction manuscript Jarkko Hietaniemi
And again:
sigaction manuscript Jarkko Hietaniemi
And one more time:
sigaction manuscript Jarkko Hietaniemi ### .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." ###