]> sipb.mit.edu Git - ikiwiki.git/blob - IkiWiki/Plugin/mdwn.pm
Merge branch 'master' of ssh://git.ikiwiki.info/srv/git/ikiwiki.info
[ikiwiki.git] / IkiWiki / Plugin / mdwn.pm
1 #!/usr/bin/perl
2 # Markdown markup language
3 package IkiWiki::Plugin::mdwn;
4
5 use warnings;
6 use strict;
7 use IkiWiki 2.00;
8
9 sub import { #{{{
10         hook(type => "htmlize", id => "mdwn", call => \&htmlize);
11 } # }}}
12
13 my $markdown_sub;
14 sub htmlize (@) { #{{{
15         my %params=@_;
16         my $content = $params{content};
17
18         if (! defined $markdown_sub) {
19                 # Markdown is forked and splintered upstream and can be
20                 # available in a variety of incompatible forms. Support
21                 # them all.
22                 no warnings 'once';
23                 $blosxom::version="is a proper perl module too much to ask?";
24                 use warnings 'all';
25
26                 eval q{use Markdown};
27                 if (! $@) {
28                         $markdown_sub=\&Markdown::Markdown;
29                 }
30                 else {
31                         eval q{use Text::Markdown};
32                         if (! $@) {
33                                 if (Text::Markdown->can('markdown')) {
34                                         $markdown_sub=\&Text::Markdown::markdown;
35                                 }
36                                 else {
37                                         $markdown_sub=\&Text::Markdown::Markdown;
38                                 }
39                         }
40                         else {
41                                 do "/usr/bin/markdown" ||
42                                         error(sprintf(gettext("failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"), $@, $!));
43                                 $markdown_sub=\&Markdown::Markdown;
44                         }
45                 }
46                 require Encode;
47         }
48         
49         # Workaround for perl bug (#376329)
50         $content=Encode::encode_utf8($content);
51         eval {$content=&$markdown_sub($content)};
52         if ($@) {
53                 eval {$content=&$markdown_sub($content)};
54                 print STDERR $@ if $@;
55         }
56         $content=Encode::decode_utf8($content);
57
58         return $content;
59 } # }}}
60
61 1