Prima
view release on metacpan or search on metacpan
Prima/PodView.pm view on Meta::CPAN
$self-> add_formatted( $1, $2) if defined $2;
next;
} elsif (/^=begin\s+(\S+)\s*(.*)/s) {
$r-> {begun} = $1;
$self-> add_formatted( $1, $2) if defined $2;
next;
}
if (s/^=//) {
my ($Cmd, $args) = split(' ', $_, 2);
$args = '' unless defined $args;
if ($Cmd eq 'cut') {
$r-> {cutting} = 1;
}
elsif ($Cmd eq 'pod') {
$r-> {cutting} = 0;
}
elsif ($Cmd eq 'head1') {
$self-> add( $args, STYLE_HEAD_1, DEF_FIRST_INDENT);
}
elsif ($Cmd eq 'head2') {
$self-> add( $args, STYLE_HEAD_2, DEF_FIRST_INDENT);
}
elsif ($Cmd eq 'head3') {
$self-> add( $args, STYLE_HEAD_3, DEF_FIRST_INDENT);
}
elsif ($Cmd eq 'head4') {
$self-> add( $args, STYLE_HEAD_4, DEF_FIRST_INDENT);
}
elsif ($Cmd eq 'over') {
push(@{$r-> {indentStack}}, $r-> {indent});
$r-> {indent} += ( $args =~ m/^(\d+)$/ ) ? $1 : DEF_INDENT;
}
elsif ($Cmd eq 'back') {
$self-> _close_topic( STYLE_ITEM);
$r-> {indent} = pop(@{$r-> {indentStack}}) || 0;
}
elsif ($Cmd eq 'item') {
$self-> add( $args, STYLE_ITEM, $r-> {indentStack}-> [-1] || DEF_INDENT);
}
elsif ($Cmd eq 'encoding') {
$r->{encoding} = Encode::find_encoding($args); # or undef
}
}
else {
s/\n/ /g;
$self-> add($_, STYLE_TEXT, $r-> {indent});
}
$self-> add_new_line unless $r->{bulletMode};
}
}
sub read
{
my ( $self, $pod) = @_;
my $r = $self-> {readState};
return unless $r;
unless ( defined $r->{bom} ) {
if ( $pod =~ s/^(\x{ef}\x{bb}\x{bf})// ) { # don't care about other BOMs so far
$r-> {bom} = $1;
$r-> {encoding} = Encode::find_encoding('utf-8');
}
}
my $odd = 0;
for ( split ( "(\n)", $pod)) {
next unless $odd = !$odd;
$_ = $r->{encoding}->decode($_, Encode::FB_HTMLCREF) if $r->{encoding};
if (defined $r-> {paragraph_buffer}) {
if ( /^\s*$/) {
my $pb = $r-> {paragraph_buffer};
undef $r-> {paragraph_buffer};
$self-> read_paragraph($pb);
} else {
$r-> {paragraph_buffer} .= "\n$_";
next;
}
} elsif ( !/^$/) {
$r->{paragraph_buffer} = $_;
next;
}
}
}
sub close_read
{
my ( $self, $topicView) = @_;
return unless $self-> {readState};
my $r = $self-> {readState};
if ( defined $r->{paragraph_buffer}) {
my $pb = $r-> {paragraph_buffer};
undef $r-> {paragraph_buffer};
$self-> read_paragraph("$pb\n");
}
$topicView = $self-> {topicView} unless defined $topicView;
$self-> add_new_line; # end
$self-> add_verbatim_mark(0);
$self-> {contents}-> [0]-> references( $self-> {links});
unless ($self-> {readState}-> {createIndex}) {
$self-> _close_topic( STYLE_HEAD_1);
goto NO_INDEX;
}
my $secid = 0;
my $msecid = scalar(@{$self-> {topics}});
delete $self->{index_ends_at};
unless ( $msecid) {
push @{$self-> {topics}}, [
0, scalar @{$self-> {model}} - 1,
"Document", STYLE_HEAD_1, 0, 0
] if scalar @{$self-> {model}} > 2; # no =head's, but some info
$self-> _close_topic( STYLE_HEAD_1);
goto NO_INDEX;
}
( run in 1.026 second using v1.01-cache-2.11-cpan-df04353d9ac )