|
|
|
@ -118,6 +118,40 @@ sub _parse_link {
|
|
|
|
|
return [a => {href => $href}, @text]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
sub _parse_include { |
|
|
|
|
my ($self, $content) = @_; |
|
|
|
|
|
|
|
|
|
if ($content =~ m|{{([a-z]+)>(.*)}}|oi) { |
|
|
|
|
... |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
my ($lpad, $rpad, $src, %attrs) = ('', '', ''); |
|
|
|
|
if ($content =~ m!^{{(\s*)([^\s\|]+)(\s*)\|(.*)}}!oi) { |
|
|
|
|
($lpad, $src, $rpad) = ($1, $2, $3); |
|
|
|
|
$attrs{title} = $4; |
|
|
|
|
} elsif ($content =~ m!^{{(\s*)(\S+)(\s*)}}!) { |
|
|
|
|
($lpad, $src, $rpad) = ($1, $2, $3); |
|
|
|
|
} else { |
|
|
|
|
($src) = ($content =~ s/{{(.+)}}/$1/or); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$attrs{align} = ($lpad ne '') |
|
|
|
|
? (($rpad ne '') ? 'center' : 'right') |
|
|
|
|
: 'left'; |
|
|
|
|
|
|
|
|
|
$src =~ s<\?(\d+)(?:x(\d+))?> |
|
|
|
|
< |
|
|
|
|
$attrs{width} = $1 if $1; |
|
|
|
|
$attrs{height} = $2 if $2; |
|
|
|
|
'' |
|
|
|
|
>ioe; |
|
|
|
|
|
|
|
|
|
$src =~ s|:|/|o; |
|
|
|
|
$attrs{src} = $src; |
|
|
|
|
|
|
|
|
|
return [img => \%attrs]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
my $inlines = { |
|
|
|
|
"__" => "__", # underline |
|
|
|
|
"//" => "//", # italic |
|
|
|
@ -171,9 +205,9 @@ sub _parse_text {
|
|
|
|
|
when ("**") { %attrs = ('font-weight' => 'bold'); } |
|
|
|
|
when ("''") { %attrs = ('font-family' => 'monospace'); } |
|
|
|
|
when ("__") { %attrs = ('text-decoration' => 'underline'); } |
|
|
|
|
when ("{{") { push @parts, $self->_parse_include($content); next; } |
|
|
|
|
when ("[[") { push @parts, $self->_parse_link($content); next; } |
|
|
|
|
when ("((") { ...; next; } |
|
|
|
|
when ("{{") { ...; next; } |
|
|
|
|
default { |
|
|
|
|
die("unrecognized inline: $match\n"); |
|
|
|
|
next; |
|
|
|
|