App-sdview-Output-HTML

 view release on metacpan or  search on metacpan

lib/App/sdview/Output/HTML.pm  view on Meta::CPAN

{
   $self->_output_para( $tag, $para, $prefix );
}

method output_list_bullet ( $para, $prefix = "" ) { $self->_output_list( "ul", $para, $prefix ); }
method output_list_number ( $para, $prefix = "" ) { $self->_output_list( "ol", $para, $prefix ); }
method output_list_text   ( $para, $prefix = "" ) { $self->_output_list( "dl", $para, $prefix ); }

method _output_list ( $tag, $para, $prefix )
{
   $self->say( "$prefix<$tag>" );

   foreach my $item ( $para->items ) {
      if( $item->type eq "item" and $para->listtype eq "text" ) {
         $self->say( "$prefix  ", $self->_convert_str( $item->term, "dt" ) );
         $self->output_item( $item, "$prefix  ", "dd" );
      }
      else {
         my $code = $self->can( "output_" . ( $item->type =~ s/-/_/gr ) ) or
            die "TODO: Unhandled item type " . $item->type;
         $self->$code( $item, "$prefix  " );
      }
   }

   $self->say( "$prefix</$tag>" );
}

method output_table ( $para, $prefix = "" )
{
   my @rows = $para->rows;

   $self->say( "$prefix<table>" );

   my $first = 1;
   foreach my $row ( @rows ) {
      my $celltag = $first ? "th" : "td";
      undef $first;

      $self->say( "$prefix  <tr>" );

      foreach my $cell ( @$row ) {
         my $align =
            $cell->align eq "centre" ? "center" :
            $cell->align eq "right"  ? "right"  :
                                       undef;

         my $openelem = defined $align ? "<$celltag style=\"text-align: $align;\">" :
                                         "<$celltag>";
         $self->say( "$prefix    $openelem", $self->_convert_str( $cell->text ), "</$celltag>" );
      }
      $self->say( "$prefix  </tr>" );
   }

   $self->say( "$prefix</table>" );
}

method _convert_str ( $s, $tag = undef )
{
   return String::Tagged::HTML->clone(
      $s,
      only_tags => [qw( bold italic monospace underline strikethrough link )],
      convert_tags => {
         bold => "strong",
         italic => "em",
         monospace => "tt",
         underline => "u",
         strikethrough => "s",
         # TODO: F
         link => sub ($t, $v) {
            ( defined $v->{uri} ) ? ( a => { href => $v->{uri} } ) : ()
         },
      },
   )->as_html( $tag );
}

=head1 TODO

=over 4

=item *

Customisable page header, CSS, general page template?

=back

=cut

=head1 AUTHOR

Paul Evans <leonerd@leonerd.org.uk>

=cut

0x55AA;



( run in 0.554 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )