You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
968 B
61 lines
968 B
package Text::Dokuwiki::Render::HTML; |
|
|
|
use strict; |
|
use warnings; |
|
use utf8; |
|
|
|
use base 'Text::Dokuwiki::Render'; |
|
|
|
my $noclose = { |
|
br => 1, |
|
hr => 1, |
|
}; |
|
|
|
my $display = { |
|
div => 'block', |
|
ul => 'block', |
|
h1 => 'line', |
|
h2 => 'line', |
|
h3 => 'line', |
|
p => 'line', |
|
br => 'block', |
|
}; |
|
|
|
sub _escape { |
|
my ($text) = @_; |
|
|
|
$text =~ s{\\}{\\\\}go; |
|
$text =~ s{"} {\\"}go; |
|
return $text; |
|
} |
|
|
|
sub _attrs { |
|
my ($attrs) = @_; |
|
my $text = ""; |
|
|
|
while (my ($key, $value) = each($attrs)) { |
|
$text .= sprintf ' %s="%s"', $key, _escape($value); |
|
} |
|
|
|
return $text; |
|
} |
|
|
|
sub default { |
|
my ($self, $tag, $attrs, $content) = @_; |
|
my $c = $noclose->{$tag} // 0; |
|
my $d = $display->{$tag} // 'inline'; |
|
|
|
my $text = "<$tag" . _attrs($attrs) . ">"; |
|
$text .= "\n" if ($d eq 'block'); |
|
return $text if ($c); |
|
|
|
$text .= $content; |
|
$text .= "\n" if ($d eq 'block'); |
|
|
|
$text .= "</$tag>"; |
|
$text .= "\n" if ($d eq 'block' or $d eq 'line'); |
|
|
|
return $text; |
|
} |
|
|
|
1;
|
|
|