App-sdview
view release on metacpan or search on metacpan
lib/App/sdview/Parser/Pod.pm view on Meta::CPAN
method start_item_number { $self->_start_item( number => ); }
method start_item_bullet { $self->_start_item( bullet => ); }
method _start_item ( $type )
{
push $_parastack[-1]->@*, $_curpara = App::sdview::Para::ListItem->new(
listtype => $type,
text => String::Tagged->new,
);
}
method start_item_text
{
push $_parastack[-1]->@*, $_curpara = App::sdview::Para::ListItem->new(
listtype => "text",
term => String::Tagged->new,
text => String::Tagged->new,
);
}
method end_item_text { $_parastack[-1][-1]->term_done; }
method start_Para ( $attrs )
{
if( $_curpara and $_curpara->type eq "item" and $_curpara->listtype eq "text"
and !length $_curpara->text ) {
# just extend the existing para
}
else {
push $_parastack[-1]->@*, $_curpara = App::sdview::Para::Plain->new(
text => String::Tagged->new,
indent => $_indentstack[-1],
);
}
$self->reset_tags;
}
method start_Verbatim
{
push $_parastack[-1]->@*, $_curpara = App::sdview::Para::Verbatim->new(
text => String::Tagged->new,
indent => $_indentstack[-1],
( %_verbatim_options, %_next_verbatim_options ),
);
$self->reset_tags;
%_next_verbatim_options = ();
}
method end_Verbatim
{
my $para = $_parastack[-1][-1];
my @lines = $para->text->split( qr/\n/ );
my $trimlen = min map { m/^(\s*)/; $+[1] } grep { length } @lines;
length and $_ = $_->substr( $trimlen, length $_ ) for @lines;
my $text = shift @lines;
$text .= "\n" . $_ for @lines;
my $language = $para->language;
if( ( $language // "" ) eq "__AUTO__" ) {
# Try to detect the language. It doesn't have to be perfect, just a good
# guess is enough.
undef $language;
if( $text =~ m/^use [A-Za-z_]|^package [A-Za-z_]/ ) {
$language = "perl";
}
elsif( $text =~ m/^(my )?[\$\@%][A-Za-z_]/m ) {
$language = "perl";
}
elsif( $text =~ m/^#!.*\bperl\b/ ) {
$language = "perl";
}
}
$_parastack[-1][-1] = (ref $para)->new(
text => $text,
language => $language,
);
}
method handle_text ( $text )
{
if( $_redirect_text ) {
return $self->$_redirect_text( $text );
}
$text =~ s/ /\xA0/g if $_conv_nbsp;
$_curpara->append_text( $text, $self->curtags );
}
method _handle_text_table_md ( $text )
{
my @lines = split m/\n/, $text
or return;
my @rows;
push @rows, _split_table_row( shift @lines );
my $heading = !!0;
my @align;
my $alignspec = _split_table_row( shift @lines );
if( all { $_ =~ m/^(:?)-{3,}(:?)$/ } @$alignspec ) {
$heading = !!1;
@align = map {
m/^(:?)-{3,}(:?)$/;
( $1 and $2 ) ? "centre" :
( $2 ) ? "right" :
"left";
} @$alignspec;
}
else {
push @rows, $alignspec;
@align = ( "left" ) x scalar @$alignspec;
}
push @rows, map { _split_table_row( $_ ) } @lines;
foreach my $row ( @rows ) {
@$row = map {
my $colidx = $_;
( run in 3.308 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )