App-sdview
view release on metacpan or search on metacpan
lib/App/sdview/Output/Markdown.pm view on Meta::CPAN
method output_verbatim ( $para )
{
$self->maybe_blank;
# TODO: Offer a choice of ``` vs indented
$self->say( "```" . ( $para->language // "" ) );
$self->say( $para->text );
$self->say( "```" );
}
method output_list_bullet ( $para ) { $self->_output_list( $para ); }
method output_list_number ( $para ) { $self->_output_list( $para ); }
method _output_list ( $para )
{
$self->maybe_blank;
my $n = $para->initial;
foreach my $item ( $para->items ) {
my $leader;
if( $para->listtype eq "bullet" ) {
$leader = "*";
}
elsif( $para->listtype eq "number" ) {
$leader = sprintf "%d.", $n++;
}
$self->say( $leader, " ", $self->_convert_str( $item->text ) );
}
}
method output_table ( $para )
{
$self->maybe_blank;
my @rows = $para->rows;
my $first = 1;
foreach my $row ( @rows ) {
my @cells = @$row;
$self->say( join "|", "", ( map { " " . $self->_convert_str( $_->text ) . " " } @cells ), "" );
next unless $first;
my @aligns = map {
my $n = length $_->text;
$_->align eq "centre" ? ":".("-"x($n-2)).":" :
$_->align eq "right" ? ("-"x($n-1)).":" :
("-"x $n );
} @cells;
$self->say( join "|", "", ( map { " $_ " } @aligns ), "" );
undef $first;
}
}
method _convert_str ( $s )
{
return String::Tagged::Markdown->clone( $s,
only_tags => [qw( bold italic monospace strikethrough file link )],
convert_tags => {
# bold, italic remain as they are
monospace => "fixed",
strikethrough => "strike",
file => "italic", # There isn't a "filename" format in Markdown
link => sub ($t, $v) { return link => $v->{uri} },
}
)->build_markdown;
}
=head1 AUTHOR
Paul Evans <leonerd@leonerd.org.uk>
=cut
0x55AA;
( run in 0.598 second using v1.01-cache-2.11-cpan-39bf76dae61 )