Pod::Simple::XHTML -- format Pod as validating XHTML
use Pod::Simple::XHTML; my $parser = Pod::Simple::XHTML->new(); ... $parser->parse_file('path/to/file.pod');
This class is a formatter that takes Pod and renders it as XHTML validating HTML.
This is a subclass of Pod::Simple::Methody and inherits all its methods. The implementation is entirely different than Pod::Simple::HTML, but it largely preserves the same interface.
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 parse_file:
parse_file
my $parser = Pod::PseudoPod::HTML->new(); $parser->set_optional_param("value"); $parser->parse_file($file);
In turning Foo::Bar into http://whatever/Foo%3a%3aBar, what to put before the "Foo%3a%3aBar". The default value is "http://search.cpan.org/perldoc?".
What to put after "Foo%3a%3aBar" in the URL. This option is not set by default.
What to put before and after the title in the head. The values should already be &-escaped.
$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.
The URL or relative path of a JavaScript file to pull in. This option is not set by default.
A document type tag for the file. This option is not set by default.
Additional arbitrary HTML tags for the header of the document. The default value is just a content type header tag:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
Add additional meta tags here, or blocks of inline CSS or JavaScript (wrapped in the appropriate tags).
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.
Force a title for the page (don't try to determine it from the content). The value of this string should already be &-escaped.
Set the HTML output at the beginning and end of each file. The default header includes a title, a doctype tag (if html_doctype is set), a content tag (customized by html_header_tags), a tag for a CSS file (if html_css is set), and a tag for a Javascript file (if html_javascript is set). The default footer simply closes the html and body tags.
html_doctype
html_header_tags
html_css
html_javascript
html
body
The options listed above customize parts of the default header, but setting html_header or html_footer 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.
html_header
html_footer
If you want no headers or footers output in the HTML, set these options to the empty string.
Whether to add a table-of-contents at the top of each page (called an index for the sake of tradition).
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.
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 new method, after calling SUPER::new you'd call:
new
SUPER::new
$new->accept_targets_as_text( 'foo' );
Then override the start_for 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 handle_text method to check for the flag, and pass $text to your custom subroutine to construct the HTML output for 'foo' elements, something like:
start_for
handle_text
sub handle_text { my ($self, $text) = @_; if ($self->{'in_foo'}) { $self->{'scratch'} .= build_foo_html($text); } else { $self->{'scratch'} .= $text; } }
my $id = $pod->idify($text); my $hash = $pod->idify($text, 1);
This method turns an arbitrary string into a valid XHTML ID attribute value. The rules enforced, following http://webdesign.about.com/od/htmltags/a/aa031707.htm, are:
The id must start with a letter (a-z or A-Z)
All subsequent characters can be letters, numbers (0-9), hyphens (-), underscores (_), colons (:), and periods (.).
Each id must be unique within the document.
In addition, the returned value will be unique within the context of the Pod::Simple::XHTML object unless a second argument is passed a true value. ID attributes should always be unique within a single XHTML document, but pass the true value if you are creating not an ID but a URL hash to point to an ID (i.e., if you need to put the "#foo" in <a href="#foo">foo</a>.
<a href="#foo">foo</a>
Pod::Simple, Pod::Simple::Methody
Copyright (c) 2003-2005 Allison Randal.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
This library is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose.
Allison Randal <allison@perl.org>
To install Pod::Simple, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Pod::Simple
CPAN shell
perl -MCPAN -e shell install Pod::Simple
For more information on module installation, please visit the detailed CPAN module installation guide.