Pod-SAX
view release on metacpan or search on metacpan
lib/Pod/SAX.pm view on Meta::CPAN
}
}
sub textblock {
my ($self, $paragraph, $line_num) = @_;
$self->{line_number} = $line_num;
if ($self->{open_lists}) {
# non =item command while in =over section - must be indented
my $list_type = 'indent';
$self->{list_type}[$self->{in_list}] = $list_type;
$self->parent->characters({Data => (" " x $self->{in_list})});
my $el = _element($list_type);
_add_attrib($el, indent_width => $self->{indent});
$self->parent->start_element($el);
$self->parent->characters({Data => "\n"});
$self->{open_lists}--;
}
if ($self->{in_verbatim}) {
$self->parent->end_element(_element('verbatim', 1));
$self->parent->characters({Data => "\n"});
$self->{in_verbatim} = 0;
}
$paragraph =~ s/^\s*//;
$paragraph =~ s/\s*$//;
$self->parent->start_element(_element('para'));
$self->parse_text({ -expand_ptree => 'expand_ptree' }, $paragraph, $line_num);
$self->parent->end_element(_element('para', 1));
$self->parent->characters({Data => "\n"});
}
sub expand_ptree {
my ($self, $ptree) = @_;
foreach my $node ($ptree->children) {
# warn("Expand_ptree($node)\n");
if (ref($node)) {
$self->expand_seq($node);
}
else {
$self->parent->characters({Data => $node});
}
}
}
# Copied from Pod::Tree::Node
sub SplitTarget
{
my $text = shift;
my($page, $section);
if ($text =~ /^"(.*)"$/s) # L<"sec">;
{
$page = '';
$section = $1;
}
else # all other cases
{
($page, $section) = split m(/), $text, 2;
# to quiet -w
defined $page or $page = '';
defined $section or $section = '';
$page =~ s/\s*\(\d\)$//; # ls (1) -> ls
$section =~ s( ^" | "$ )()xg; # lose the quotes
# L<section in this man page> (without quotes)
if ($page !~ /^[\w.-]+(::[\w.-]+)*$/ and $section eq '')
{
$section = $page;
$page = '';
}
}
$section =~ s( \s*\n\s* )( )xg; # close line breaks
$section =~ s( ^\s+ | \s+$ )()xg; # clip leading and trailing WS
($page, $section)
}
sub expand_seq {
my ($self, $sequence) = @_;
my $name = $sequence->cmd_name;
my ($filename, $line_number) = $sequence->file_line();
$self->{line_number} = $line_number;
# warn("seq $name\n");
if ($name eq 'L') {
# link
my $link = $sequence->raw_text;
$link =~ s/^L<(.*)>$/$1/;
$link =~ s/^<+\s(.*)\s>+$/$1/;
my ($text, $inferred, $name, $section, $type) = $self->parselink($link);
$text = '' unless defined $text;
$inferred = '' unless defined $inferred;
$name = '' unless defined $name;
$section = '' unless defined $section;
$type = '' unless defined $type;
# warn("Link L<$link> parsed into: '$text', '$inferred', '$name', '$section', '$type'\n");
if ($type eq 'url') {
my $start = _element("xlink");
_add_attrib($start, href => $name);
$self->parent->start_element($start);
$self->parse_text({ -expand_ptree => 'expand_ptree' }, $inferred, $line_number);
$self->parent->end_element(_element('xlink', 1));
}
else {
my $start = _element("link");
_add_attrib($start, page => $name);
_add_attrib($start, section => $section);
_add_attrib($start, type => $type);
( run in 4.876 seconds using v1.01-cache-2.11-cpan-71847e10f99 )