\n\n", "head4 level output");
+
+
+initialize($parser, $results);
+$parser->parse_string_document(<<'EOPOD');
+=pod
+
+Gee, Brain, what do you want to do tonight?
+EOPOD
+
+is($results, <<'EOHTML', "simple paragraph");
+
Gee, Brain, what do you want to do tonight?
+
+EOHTML
+
+
+initialize($parser, $results);
+$parser->parse_string_document(<<'EOPOD');
+=pod
+
+B: Now, Pinky, if by any chance you are captured during this mission,
+remember you are Gunther Heindriksen from Appenzell. You moved to
+Grindelwald to drive the cog train to Murren. Can you repeat that?
+
+P: Mmmm, no, Brain, don't think I can.
+EOPOD
+
+is($results, <<'EOHTML', "multiple paragraphs");
+
B: Now, Pinky, if by any chance you are captured during this mission, remember you are Gunther Heindriksen from Appenzell. You moved to Grindelwald to drive the cog train to Murren. Can you repeat that?
+
+
P: Mmmm, no, Brain, don't think I can.
+
+EOHTML
+
+initialize($parser, $results);
+$parser->parse_string_document(<<'EOPOD');
+=over
+
+=item *
+
+P: Gee, Brain, what do you want to do tonight?
+
+=item *
+
+B: The same thing we do every night, Pinky. Try to take over the world!
+
+=back
+
+EOPOD
+
+is($results, <<'EOHTML', "simple bulleted list");
+
+
+
P: Gee, Brain, what do you want to do tonight?
+
+
B: The same thing we do every night, Pinky. Try to take over the world!
+
+
+
+EOHTML
+
+
+initialize($parser, $results);
+$parser->parse_string_document(<<'EOPOD');
+=over
+
+=item 1
+
+P: Gee, Brain, what do you want to do tonight?
+
+=item 2
+
+B: The same thing we do every night, Pinky. Try to take over the world!
+
+=back
+
+EOPOD
+
+is($results, <<'EOHTML', "numbered list");
+
+
+
1. P: Gee, Brain, what do you want to do tonight?
+
+
2. B: The same thing we do every night, Pinky. Try to take over the world!
+
+
+
+EOHTML
+
+
+initialize($parser, $results);
+$parser->parse_string_document(<<'EOPOD');
+=over
+
+=item Pinky
+
+Gee, Brain, what do you want to do tonight?
+
+=item Brain
+
+The same thing we do every night, Pinky. Try to take over the world!
+
+=back
+
+EOPOD
+
+is($results, <<'EOHTML', "list with text headings");
+
+
+
Pinky
+
+
Gee, Brain, what do you want to do tonight?
+
+
Brain
+
+
The same thing we do every night, Pinky. Try to take over the world!
+
+EOHTML
+
+
+initialize($parser, $results);
+$parser->parse_string_document(<<'EOPOD');
+=pod
+
+A plain paragraph with a C.
+EOPOD
+is($results, <<"EOHTML", "code entity in a paragraph");
+
A plain paragraph with a functionname.
+
+EOHTML
+
+
+initialize($parser, $results);
+$parser->html_header("\n");
+$parser->html_footer("\n");
+$parser->parse_string_document(<<'EOPOD');
+=pod
+
+A plain paragraph with body tags turned on.
+EOPOD
+is($results, <<"EOHTML", "adding html body tags");
+
+
+
+
A plain paragraph with body tags turned on.
+
+
+
+
+EOHTML
+
+
+initialize($parser, $results);
+$parser->html_css('style.css');
+$parser->html_header(undef);
+$parser->html_footer(undef);
+$parser->parse_string_document(<<'EOPOD');
+=pod
+
+A plain paragraph with body tags and css tags turned on.
+EOPOD
+like($results, qr//,
+"adding html body tags and css tags");
+
+
+initialize($parser, $results);
+$parser->parse_string_document(<<'EOPOD');
+=pod
+
+A plain paragraph with S.
+EOPOD
+is($results, <<"EOHTML", "Non breaking text in a paragraph");
+
A plain paragraph with non breaking text.
+
+EOHTML
+
+initialize($parser, $results);
+$parser->parse_string_document(<<'EOPOD');
+=pod
+
+A plain paragraph with a L.
+EOPOD
+is($results, <<"EOHTML", "Link entity in a paragraph");
+
+
+EOHTML
+
+initialize($parser, $results);
+$parser->parse_string_document(<<'EOPOD');
+=pod
+
+A plain paragraph with a L.
+EOPOD
+is($results, <<"EOHTML", "Link entity in a paragraph");
+
+
+EOHTML
+
+initialize($parser, $results);
+$parser->parse_string_document(<<'EOPOD');
+=pod
+
+A plain paragraph with a L.
+EOPOD
+is($results, <<"EOHTML", "A link in a paragraph");
+
+
+EOHTML
+
+initialize($parser, $results);
+$parser->parse_string_document(<<'EOPOD');
+=pod
+
+A plain paragraph with a L.
+EOPOD
+is($results, <<"EOHTML", "A link in a paragraph");
+
+
+EOHTML
+
+initialize($parser, $results);
+$parser->parse_string_document(<<'EOPOD');
+=pod
+
+A plain paragraph with B.
+EOPOD
+is($results, <<"EOHTML", "Bold text in a paragraph");
+
A plain paragraph with bold text.
+
+EOHTML
+
+initialize($parser, $results);
+$parser->parse_string_document(<<'EOPOD');
+=pod
+
+A plain paragraph with I.
+EOPOD
+is($results, <<"EOHTML", "Italic text in a paragraph");
+
A plain paragraph with italic text.
+
+EOHTML
+
+initialize($parser, $results);
+$parser->parse_string_document(<<'EOPOD');
+=pod
+
+A plain paragraph with a F.
+EOPOD
+is($results, <<"EOHTML", "File name in a paragraph");
+
A plain paragraph with a filename.
+
+EOHTML
+
+
+initialize($parser, $results);
+$parser->parse_string_document(<<'EOPOD');
+=pod
+
+ # this header is very important & don't you forget it
+ my $text = "File is: " . ;
+EOPOD
+is($results, <<"EOHTML", "Verbatim text with encodable entities");
+
# this header is very important & don't you forget it
+ my \$text = "File is: " . <FILE>;
+
+EOHTML
+
+SKIP: for my $use_html_entities (0, 1) {
+ if ($use_html_entities and not $Pod::Simple::XHTML::HAS_HTML_ENTITIES) {
+ skip("HTML::Entities not installed", 1);
+ }
+ local $Pod::Simple::XHTML::HAS_HTML_ENTITIES = $use_html_entities;
+ initialize($parser, $results);
+ $parser->parse_string_document(<<'EOPOD');
+=pod
+
+ # this header is very important & don't you forget it
+ B || 'Blank!';>
+ my $text = "File is: " . ;
+EOPOD
+is($results, <<"EOHTML", "Verbatim text with markup and embedded formatting");
+
# this header is very important & don't you forget it
+ my \$file = <FILE> || 'Blank!';
+ my \$text = "File is: " . <FILE>;
+
+EOHTML
+
+foreach my $target qw(note tip warning) {
+ initialize($parser, $results);
+ $parser->accept_targets_as_text( $target );
+ $parser->parse_string_document(<<"EOPOD");
+=begin $target
+
+This is a $target.
+
+=end $target
+EOPOD
+
+ is($results, <<"EOHTML", "allow $target blocks");
+
+
+
This is a $target.
+
+
+
+EOHTML
+
+}
+
+######################################
+
+sub initialize {
+ $_[0] = Pod::Simple::XHTML->new ();
+ $_[0]->html_header("");
+ $_[0]->html_footer("");
+ $_[0]->output_string( \$results ); # Send the resulting output to a string
+ $_[1] = '';
+ return;
+}
diff -up perl-5.10.0/lib/Pod/Simple/t/begin.t.old perl-5.10.0/lib/Pod/Simple/t/begin.t
--- perl-5.10.0/lib/Pod/Simple/t/begin.t.old 2007-12-18 11:47:07.000000000 +0100
+++ perl-5.10.0/lib/Pod/Simple/t/begin.t 2008-06-03 17:06:00.000000000 +0200
@@ -7,7 +7,7 @@ BEGIN {
use strict;
use Test;
-BEGIN { plan tests => 61 };
+BEGIN { plan tests => 62 };
my $d;
#use Pod::Simple::Debug (\$d, 0);
@@ -114,7 +114,6 @@ ok( $x->_out( "=pod\n\nI like pie.\n\n=b
'I like pie.Yup.'
);
-
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
print "# Testing matching because of negated non-acceptance...\n";
@@ -448,8 +447,14 @@ ok( $x->_out( \&mojprok, join "\n\n" =>
qq{Yup.}
);
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+print "# Testing matching of begin block titles\n";
+ok( $x->_out( \&moj, "=pod\n\nI like pie.\n\n=begin mojojojo Title\n\nstuff\n\n=end mojojojo \n\nYup.\n"),
+ 'I like pie.stuffYup.'
+);
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
print "# Wrapping up... one for the road...\n";
ok 1;
diff -up perl-5.10.0/lib/Pod/Simple/t/reinit.t.ooo perl-5.10.0/lib/Pod/Simple/t/reinit.t
--- perl-5.10.0/lib/Pod/Simple/t/reinit.t.ooo 2007-12-18 11:47:07.000000000 +0100
+++ perl-5.10.0/lib/Pod/Simple/t/reinit.t 2008-10-06 17:31:38.000000000 +0200
@@ -13,14 +13,14 @@ BEGIN { plan tests => 5 };
sub source_path {
my $file = shift;
- if ($ENV{PERL_CORE}) {
+# if ($ENV{PERL_CORE}) {
require File::Spec;
my $updir = File::Spec->updir;
my $dir = File::Spec->catdir ($updir, 'lib', 'Pod', 'Simple', 't');
return File::Spec->catfile ($dir, $file);
- } else {
- return $file;
- }
+# } else {
+# return $file;
+# }
}
use Pod::Simple::Text;
diff -up perl-5.10.0/lib/Pod/t/text.t.old perl-5.10.0/lib/Pod/t/text.t
--- perl-5.10.0/lib/Pod/t/text.t.old 2008-10-07 15:21:33.000000000 +0200
+++ perl-5.10.0/lib/Pod/t/text.t 2008-10-07 15:20:10.000000000 +0200
@@ -58,7 +58,7 @@ while () {
}
if ($output eq $expected) {
print "ok $n\n";
- } elsif ($n == 4 && $Pod::Simple::VERSION < 3.06) {
+ } elsif ($n == 4 && $Pod::Simple::VERSION < 3.08) {
print "ok $n # skip Pod::Simple S<> parsing bug\n";
} else {
print "not ok $n\n";
diff -up perl-5.10.0/lib/Pod/Simple/XHTML.pm.miss perl-5.10.0/lib/Pod/Simple/XHTML.pm
--- perl-5.10.0/lib/Pod/Simple/XHTML.pm.miss 2008-12-22 10:42:49.000000000 +0100
+++ perl-5.10.0/lib/Pod/Simple/XHTML.pm 2008-06-04 23:54:58.000000000 +0200
@@ -0,0 +1,400 @@
+=pod
+
+=head1 NAME
+
+Pod::Simple::XHTML -- format Pod as validating XHTML
+
+=head1 SYNOPSIS
+
+ use Pod::Simple::XHTML;
+
+ my $parser = Pod::Simple::XHTML->new();
+
+ ...
+
+ $parser->parse_file('path/to/file.pod');
+
+=head1 DESCRIPTION
+
+This class is a formatter that takes Pod and renders it as XHTML
+validating HTML.
+
+This is a subclass of L and inherits all its
+methods. The implementation is entirely different than
+L, but it largely preserves the same interface.
+
+=cut
+
+package Pod::Simple::XHTML;
+use strict;
+use vars qw( $VERSION @ISA $HAS_HTML_ENTITIES );
+$VERSION = '3.04';
+use Carp ();
+use Pod::Simple::Methody ();
+@ISA = ('Pod::Simple::Methody');
+
+BEGIN {
+ $HAS_HTML_ENTITIES = eval "require HTML::Entities; 1";
+}
+
+my %entities = (
+ q{>} => 'gt',
+ q{<} => 'lt',
+ q{'} => '#39',
+ q{"} => 'quot',
+ q{&} => 'amp',
+);
+
+sub encode_entities {
+ return HTML::Entities::encode_entities( $_[0] ) if $HAS_HTML_ENTITIES;
+ my $str = $_[0];
+ my $ents = join '', keys %entities;
+ $str =~ s/([$ents])/'&' . $entities{$1} . ';'/ge;
+ return $str;
+}
+
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+=head1 METHODS
+
+Pod::Simple::XHTML offers a number of methods that modify the format of
+the HTML output. Call these after creating the parser object, but before
+the call to C:
+
+ my $parser = Pod::PseudoPod::HTML->new();
+ $parser->set_optional_param("value");
+ $parser->parse_file($file);
+
+=head2 perldoc_url_prefix
+
+In turning L into http://whatever/Foo%3a%3aBar, what
+to put before the "Foo%3a%3aBar". The default value is
+"http://search.cpan.org/perldoc?".
+
+=head2 perldoc_url_postfix
+
+What to put after "Foo%3a%3aBar" in the URL. This option is not set by
+default.
+
+=head2 title_prefix, title_postfix
+
+What to put before and after the title in the head. The values should
+already be &-escaped.
+
+=head2 html_css
+
+ $parser->html_css('path/to/style.css');
+
+The URL or relative path of a CSS file to include. This option is not
+set by default.
+
+=head2 html_javascript
+
+The URL or relative path of a JavaScript file to pull in. This option is
+not set by default.
+
+=head2 html_doctype
+
+A document type tag for the file. This option is not set by default.
+
+=head2 html_header_tags
+
+Additional arbitrary HTML tags for the header of the document. The
+default value is just a content type header tag:
+
+
+
+Add additional meta tags here, or blocks of inline CSS or JavaScript
+(wrapped in the appropriate tags).
+
+=head2 default_title
+
+Set a default title for the page if no title can be determined from the
+content. The value of this string should already be &-escaped.
+
+=head2 force_title
+
+Force a title for the page (don't try to determine it from the content).
+The value of this string should already be &-escaped.
+
+=head2 html_header, html_footer
+
+Set the HTML output at the beginning and end of each file. The default
+header includes a title, a doctype tag (if C is set), a
+content tag (customized by C), a tag for a CSS file
+(if C is set), and a tag for a Javascript file (if
+C is set). The default footer simply closes the C
+and C tags.
+
+The options listed above customize parts of the default header, but
+setting C or C completely overrides the
+built-in header or footer. These may be useful if you want to use
+template tags instead of literal HTML headers and footers or are
+integrating converted POD pages in a larger website.
+
+If you want no headers or footers output in the HTML, set these options
+to the empty string.
+
+=head2 index
+
+TODO -- Not implemented.
+
+Whether to add a table-of-contents at the top of each page (called an
+index for the sake of tradition).
+
+
+=cut
+
+__PACKAGE__->_accessorize(
+ 'perldoc_url_prefix',
+ 'perldoc_url_postfix',
+ 'title_prefix', 'title_postfix',
+ 'html_css',
+ 'html_javascript',
+ 'html_doctype',
+ 'html_header_tags',
+ 'title', # Used internally for the title extracted from the content
+ 'default_title',
+ 'force_title',
+ 'html_header',
+ 'html_footer',
+ 'index',
+ 'batch_mode', # whether we're in batch mode
+ 'batch_mode_current_level',
+ # When in batch mode, how deep the current module is: 1 for "LWP",
+ # 2 for "LWP::Procotol", 3 for "LWP::Protocol::GHTTP", etc
+);
+
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+=head1 SUBCLASSING
+
+If the standard options aren't enough, you may want to subclass
+Pod::Simple::XHMTL. These are the most likely candidates for methods
+you'll want to override when subclassing.
+
+=cut
+
+sub new {
+ my $self = shift;
+ my $new = $self->SUPER::new(@_);
+ $new->{'output_fh'} ||= *STDOUT{IO};
+ $new->accept_targets( 'html', 'HTML' );
+ $new->perldoc_url_prefix('http://search.cpan.org/perldoc?');
+ $new->html_header_tags('');
+ $new->nix_X_codes(1);
+ $new->codes_in_verbatim(1);
+ $new->{'scratch'} = '';
+ return $new;
+}
+
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+=head2 handle_text
+
+This method handles the body of text within any element: it's the body
+of a paragraph, or everything between a "=begin" tag and the
+corresponding "=end" tag, or the text within an L entity, etc. You would
+want to override this if you are adding a custom element type that does
+more than just display formatted text. Perhaps adding a way to generate
+HTML tables from an extended version of POD.
+
+So, let's say you want add a custom element called 'foo'. In your
+subclass's C method, after calling C you'd call:
+
+ $new->accept_targets_as_text( 'foo' );
+
+Then override the C method in the subclass to check for when
+"$flags->{'target'}" is equal to 'foo' and set a flag that marks that
+you're in a foo block (maybe "$self->{'in_foo'} = 1"). Then override the
+C method to check for the flag, and pass $text to your
+custom subroutine to construct the HTML output for 'foo' elements,
+something like:
+
+ sub handle_text {
+ my ($self, $text) = @_;
+ if ($self->{'in_foo'}) {
+ $self->{'scratch'} .= build_foo_html($text);
+ } else {
+ $self->{'scratch'} .= $text;
+ }
+ }
+
+=cut
+
+sub handle_text {
+ # escape special characters in HTML (<, >, &, etc)
+ $_[0]{'scratch'} .= $_[0]{'in_verbatim'} ? encode_entities( $_[1] ) : $_[1]
+}
+
+sub start_Para { $_[0]{'scratch'} = '
This is an ordinary for block.
+ +