X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/aadb21422065dc225cfbf487c56382e2b0ae8bcd..30f7aef67902cbb04d35854e01be21c29ba2de0d:/IkiWiki.pm diff --git a/IkiWiki.pm b/IkiWiki.pm index fdb62f7da..7c35ce2b5 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -54,6 +54,7 @@ sub defaultconfig () { #{{{ syslog => 0, wikiname => "wiki", default_pageext => "mdwn", + htmlext => "html", cgi => 0, post_commit => 0, rcs => '', @@ -85,6 +86,7 @@ sub defaultconfig () { #{{{ adminemail => undef, plugin => [qw{mdwn inline htmlscrubber passwordauth openid signinedit lockedit conditional}], + libdir => undef, timeformat => '%c', locale => undef, sslcookie => 0, @@ -126,7 +128,7 @@ sub checkconfig () { #{{{ unless exists $config{wikistatedir}; if ($config{rcs}) { - eval qq{require IkiWiki::Rcs::$config{rcs}}; + eval qq{use IkiWiki::Rcs::$config{rcs}}; if ($@) { error("Failed to load RCS module IkiWiki::Rcs::$config{rcs}: $@"); } @@ -139,8 +141,12 @@ sub checkconfig () { #{{{ } #}}} sub loadplugins () { #{{{ + if (defined $config{libdir}) { + unshift @INC, $config{libdir}; + } + loadplugin($_) foreach @{$config{plugin}}; - + run_hooks(getopt => sub { shift->() }); if (grep /^-/, @ARGV) { print STDERR "Unknown option: $_\n" @@ -154,11 +160,20 @@ sub loadplugin ($) { #{{{ return if grep { $_ eq $plugin} @{$config{disable_plugins}}; + foreach my $dir ($config{libdir}, "$installdir/lib/ikiwiki") { + if (defined $dir && -x "$dir/plugins/$plugin") { + require IkiWiki::Plugin::external; + import IkiWiki::Plugin::external "$dir/plugins/$plugin"; + return 1; + } + } + my $mod="IkiWiki::Plugin::".possibly_foolish_untaint($plugin); eval qq{use $mod}; if ($@) { error("Failed to load plugin $mod: $@"); } + return 1; } #}}} sub error ($;$) { #{{{ @@ -256,7 +271,7 @@ sub targetpage ($$) { #{{{ sub htmlpage ($) { #{{{ my $page=shift; - return targetpage($page, "html"); + return targetpage($page, $config{htmlext}); } #}}} sub srcfile ($) { #{{{ @@ -466,7 +481,7 @@ sub displaytime ($) { #{{{ sub beautify_url ($) { #{{{ my $url=shift; - $url =~ s!/index.html$!/!; + $url =~ s!/index.$config{htmlext}$!/!; $url =~ s!^$!./!; # Browsers don't like empty links... return $url; @@ -540,7 +555,12 @@ sub htmllink ($$$;@) { #{{{ $bestlink.="#".$opts{anchor}; } - return "$linktext"; + my @attrs; + if (defined $opts{rel}) { + push @attrs, ' rel="'.$opts{rel}.'"'; + } + + return "$linktext"; } #}}} sub htmlize ($$$) { #{{{ @@ -606,7 +626,7 @@ sub preprocess ($$$;$$) { #{{{ my $command=shift; my $params=shift; if (length $escape) { - return "[[$command $params]]"; + return "\\[[$command $params]]"; } elsif (exists $hooks{preprocess}{$command}) { return "" if $scan && ! $hooks{preprocess}{$command}{scan}; @@ -842,7 +862,6 @@ sub template_params (@) { #{{{ return ""; } - require HTML::Template; my @ret=( filter => sub { my $text_ref = shift; @@ -857,6 +876,7 @@ sub template_params (@) { #{{{ } #}}} sub template ($;@) { #{{{ + require HTML::Template; HTML::Template->new(template_params(@_)); } #}}} @@ -1030,7 +1050,7 @@ sub pagespec_translate ($) { #{{{ | \) # ) | - \w+\([^\)]+\) # command(params) + \w+\([^\)]*\) # command(params) | [^\s()]+ # any other text )