App-DocKnot
view release on metacpan or search on metacpan
lib/App/DocKnot/Spin/Thread.pm view on Meta::CPAN
}
# Simple block commands.
sub _cmd_div {
my ($self, $format, $text) = @_;
return $self->_block('div', q{}, $format, $text);
}
sub _cmd_block {
my ($self, $format, $text) = @_;
return $self->_block('blockquote', q{}, $format, $text);
}
sub _cmd_bullet {
my ($self, $format, $text) = @_;
my $border = $self->_border_start('bullet', "<ul>\n", "</ul>\n\n");
return $self->_block('li', $border, $format, $text);
}
sub _cmd_number {
my ($self, $format, $text) = @_;
my $border = $self->_border_start('number', "<ol>\n", "</ol>\n\n");
return $self->_block('li', $border, $format, $text);
}
# A description list entry.
#
# $format - Format string
# $heading - Initial heading
# $text - Body text
sub _cmd_desc {
my ($self, $format, $heading, $text) = @_;
$heading = $self->_parse($heading);
my $format_attr = $self->_format_attr($format);
my $border = $self->_border_start('desc', "<dl>\n", "</dl>\n\n");
my $initial = $border . "<dt$format_attr>" . $heading . "</dt>\n";
return $self->_block('dd', $initial, $format, $text);
}
# An HTML entity. Check for and handle numeric entities properly, including
# special-casing [ and ] since the user may have needed to use \entity to
# express text that contains literal brackets.
#
# $entity - Entity specification, an HTML name or a Unicode number
sub _cmd_entity {
my ($self, $char) = @_;
$char = $self->_parse($char);
if ($char eq '91') {
return (0, '[');
} elsif ($char eq '93') {
return (0, ']');
} elsif ($char =~ m{ \A \d+ \z }xms) {
return (0, "&#$char;");
} else {
return (0, "&$char;");
}
}
# Generates the page heading at the top of the document. This is where the
# XHTML declarations come from.
#
# $title - Page title
# $style - Page style
sub _cmd_heading {
my ($self, $title, $style) = @_;
$title = $self->_parse($title);
$style = $self->_parse($style);
# Get the relative URL of the output page, used for sitemap information.
my $page;
if (defined($self->{out_path}) && defined($self->{output})) {
$page = $self->{out_path}->relative($self->{output});
}
# Build the page header.
my $output = qq{<?xml version="1.0" encoding="utf-8"?>\n};
$output .= qq{<!DOCTYPE html\n};
$output .= qq{ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"\n};
$output .= qq{ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n};
$output .= qq{\n<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"};
$output .= qq{ lang="en">\n};
$output .= qq{<head>\n <title>$title</title>\n};
$output .= q{ <meta http-equiv="Content-Type"};
$output .= qq{ content="text/html; charset=utf-8" />\n};
# Add style sheet.
if ($style) {
$style .= '.css';
if ($self->{style_url}) {
$style = $self->{style_url} . $style;
}
$output .= qq{ <link rel="stylesheet" href="$style"};
$output .= qq{ type="text/css" />\n};
}
# Add RSS links if any.
for my $rss ($self->{rss}->@*) {
my ($url, $rss_title) = $rss->@*;
$output .= q{ <link rel="alternate" type="application/rss+xml"};
$output .= qq{ href="$url"\n};
$output .= qq{ title="$rss_title" />\n};
}
# Add <link> tags based on the sitemap.
if ($self->{sitemap} && defined($page)) {
my @links = $self->{sitemap}->links($page);
if (@links) {
$output .= join(q{}, @links);
}
}
# End of the header.
$output .= "</head>\n\n";
# Add some generator comments.
my $date = strftime('%Y-%m-%d %T -0000', gmtime());
my $input_path = $self->{input}[-1][1];
my $from = defined($input_path) ? ' from ' . $input_path->basename() : q{};
my $version = $App::DocKnot::VERSION;
$output .= "<!-- Spun$from by DocKnot $version on $date -->\n";
# Add the <body> tag and the navbar (if we have a sitemap).
$output .= "\n<body>\n";
if ($self->{sitemap} && defined($page)) {
my @navbar = $self->{sitemap}->navbar($page);
if (@navbar) {
$output .= join(q{}, @navbar);
}
}
return (1, $output);
}
# Include an image. The size is added to the HTML tag automatically.
#
# $format - Format string
# $image - Path to the image (may be relative or an absolute URL)
# $alt - Alt text of image
( run in 1.219 second using v1.01-cache-2.11-cpan-2ed5026b665 )