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 )