package Text::Dokuwiki::Render::Markdown; use strict; use warnings; use utf8; use base 'Text::Dokuwiki::Render'; use Data::Dumper; sub _header { my ($self, $tag, $attrs, $content) = @_; my $title = $content; utf8::decode($title); my $text = $content . "\n"; $text .= (($tag eq 'h1') ? "=" : "-") x length($title); $text .= "\n\n"; return $text; } sub h1 { my $self = shift; $self->_header('h1', @_); }; sub h2 { my $self = shift; $self->_header('h2', @_); }; sub h3 { my $self = shift; $self->_header('h3', @_); }; sub h4 { my $self = shift; $self->_header('h4', @_); }; sub h5 { my $self = shift; $self->_header('h5', @_); }; sub h6 { my $self = shift; $self->_header('h6', @_); }; sub div { my ($self, $attrs, $content) = @_; return $content; } sub br { return "\n"; }; sub ul { my ($self, $attrs, $content) = @_; $self->{list_depth} += 1; my $text = $self->treewalk($content); $self->{list_depth} -= 1; return $text; } sub li { my ($self, $attrs, $content) = @_; my $text = " " x $self->{list_depth}; $text .= "* "; $text .= $self->treewalk($content); $text .= "\n"; return $text; } sub a { my ($self, $attrs, $content) = @_; return sprintf("[%s](%s)", $self->treewalk($content), $attrs->{href}); } sub p { my ($self, $attrs, $content) = @_; return $self->treewalk($content) . "\n"; } sub img { my ($self, $attrs, $content) = @_; my $title = ($attrs->{title}) ? qq( "$attrs->{title}") : ""; my $alt = $attrs->{alt} || $attrs->{title} || ''; return sprintf("![%s](%s%s)", $alt, $attrs->{src}, $title); } use Data::Dumper; sub span { my ($self, $attrs, $content) = @_; return sprintf "``%s``", $content if ($attrs->{'font-family'} and $attrs->{'font-family'} eq 'monospace'); $content = $self->treewalk($content); return sprintf "__%s__", $content if ($attrs->{'text-decoration'} and $attrs->{'text-decoration'} eq 'underline'); return sprintf "**%s**", $content if ($attrs->{'font-weight'} and $attrs->{'font-weight'} eq 'bold'); return sprintf "//%s//", $content if ($attrs->{'font-family'} and $attrs->{'font-family'} eq 'italic'); return $content; } 1;