CPAN-Source
view release on metacpan or search on metacpan
inc/Pod/Markdown.pm view on Meta::CPAN
$paragraph = join "\n", map { /^\t/ ? $_ : $indent . $_ } @lines;
}
$parser->_save($paragraph);
}
sub _escape_non_code {
my ($parser, $text, $ptree) = @_;
$text = $parser->_escape($text)
unless $ptree->isa('Pod::InteriorSequence') && $ptree->cmd_name eq 'C';
return $text;
}
sub textblock {
my ($parser, $paragraph, $line_num) = @_;
my $data = $parser->_private;
# escape markdown characters in text sequences except for inline code
$paragraph = join '', $parser->parse_text(
{ -expand_text => '_escape_non_code' },
$paragraph, $line_num
)->raw_text;
# interpolate the paragraph for embedded sequences
$paragraph = $parser->interpolate($paragraph, $line_num);
# clean the empty lines
$paragraph = $parser->_clean_text($paragraph);
# searching ?
if ($data->{searching} =~ m{title|author}xms) {
$data->{ ucfirst $data->{searching} } = $paragraph;
$data->{searching} = '';
} elsif ($data->{searching} =~ m{listhead(huddled)?$}xms) {
my $is_huddled = $1;
$paragraph = sprintf '%s %s', $data->{ListType}, $paragraph;
if ($is_huddled) {
# FIXME: what does this do?
# does this have something to do with preserving an indent?
$paragraph = $parser->_unsave() . "\n" . $paragraph;
}
$data->{searching} = 'listpara';
} elsif ($data->{searching} eq 'listpara') {
$data->{searching} = '';
}
# save the text
$parser->_save($paragraph);
}
sub interior_sequence {
my ($self, $seq_command, $seq_argument, $pod_seq) = @_;
# nested links are not allowed
return sprintf '%s<%s>', $seq_command, $seq_argument
if $seq_command eq 'L' && $self->_private->{InsideLink};
my $i = 2;
my %interiors = (
'I' => sub { return '_' . $_[$i] . '_' }, # italic
'B' => sub { return '__' . $_[$i] . '__' }, # bold
'C' => sub { return '`' . $_[$i] . '`' }, # monospace
'F' => sub { return '`' . $_[$i] . '`' }, # system path
# non-breaking space
'S' => sub {
(my $s = $_[$i]) =~ s/ / /g;
return $s;
},
'E' => sub {
my $charname = $_[$i];
return '<' if $charname eq 'lt';
return '>' if $charname eq 'gt';
return '|' if $charname eq 'verbar';
return '/' if $charname eq 'sol';
# convert legacy charnames to more modern ones (see perlpodspec)
$charname =~ s/\A([lr])chevron\z/${1}aquo/;
return "&#$1;" if $charname =~ /^0(x[0-9a-fA-Z]+)$/;
$charname = oct($charname) if $charname =~ /^0\d+$/;
return "&#$charname;" if $charname =~ /^\d+$/;
return "&$charname;";
},
'L' => \&_resolv_link,
'X' => sub { '' },
'Z' => sub { '' },
);
if (exists $interiors{$seq_command}) {
my $code = $interiors{$seq_command};
return $code->($self, $seq_command, $seq_argument, $pod_seq);
} else {
return sprintf '%s<%s>', $seq_command, $seq_argument;
}
}
sub _resolv_link {
my ($self, $cmd, $arg) = @_;
local $self->_private->{InsideLink} = 1;
my ($text, $inferred, $name, $section, $type) =
# perlpodspec says formatting codes can occur in all parts of an L<>
map { $_ && $self->interpolate($_, 1) }
Pod::ParseLink::parselink($arg);
my $url = '';
# TODO: make url prefixes configurable
if ($type eq 'url') {
$url = $name;
} elsif ($type eq 'man') {
# stolen from Pod::Simple::(X)HTML
my ($page, $part) = $name =~ /\A([^(]+)(?:[(](\S*)[)])?/;
$url = 'http://man.he.net/man' . ($part || 1) . '/' . ($page || $name);
} else {
if ($name) {
$url = 'http://search.cpan.org/perldoc?' . $name;
}
( run in 3.756 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )