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 )