X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/c588845a051da89505db9e55158783e1650ff0e2..e4b096ac411494416d73e344e0aaeaacabf2f266:/IkiWiki.pm?ds=inline
diff --git a/IkiWiki.pm b/IkiWiki.pm
index d4e19c388..3f8a4bca3 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
@@ -77,7 +77,8 @@ sub defaultconfig () { #{{{
adminuser => undef,
adminemail => undef,
plugin => [qw{mdwn link inline htmlscrubber passwordauth openid
- signinedit lockedit conditional recentchanges}],
+ signinedit lockedit conditional recentchanges
+ parentlinks}],
libdir => undef,
timeformat => '%c',
locale => undef,
@@ -537,17 +538,18 @@ sub beautify_urlpath ($) { #{{{
# Ensure url is not an empty link, and
# if it's relative, make that explicit to avoid colon confusion.
- if ($url !~ /\//) {
+ if ($url !~ /^\//) {
$url="./$url";
}
return $url;
} #}}}
-sub urlto ($$) { #{{{
+sub urlto ($$;$) { #{{{
my $to=shift;
my $from=shift;
-
+ my $absolute=shift;
+
if (! length $to) {
return beautify_urlpath(baseurl($from)."index.$config{htmlext}");
}
@@ -556,6 +558,10 @@ sub urlto ($$) { #{{{
$to=htmlpage($to);
}
+ if ($absolute) {
+ return $config{url}.beautify_urlpath("/".$to);
+ }
+
my $link = abs2rel($to, dirname(htmlpage($from)));
return beautify_urlpath($link);
@@ -758,31 +764,37 @@ sub preprocess ($$$;$$) { #{{{
if ($preprocessing{$page}++ > 3) {
# Avoid loops of preprocessed pages preprocessing
# other pages that preprocess them, etc.
- #translators: The first parameter is a
- #translators: preprocessor directive name,
- #translators: the second a page name, the
- #translators: third a number.
- return "[[".sprintf(gettext("%s preprocessing loop detected on %s at depth %i"),
- $command, $page, $preprocessing{$page}).
- "]]";
+ return "[[!$command ".
+ sprintf(gettext("preprocessing loop detected on %s at depth %i"),
+ $page, $preprocessing{$page}).
+ "]]";
}
my $ret;
if (! $scan) {
- $ret=$hooks{preprocess}{$command}{call}->(
- @params,
- page => $page,
- destpage => $destpage,
- preview => $preprocess_preview,
- );
+ $ret=eval {
+ $hooks{preprocess}{$command}{call}->(
+ @params,
+ page => $page,
+ destpage => $destpage,
+ preview => $preprocess_preview,
+ );
+ };
+ if ($@) {
+ chomp $@;
+ $ret="[[!$command ".
+ gettext("Error").": $@"."]]";
+ }
}
else {
# use void context during scan pass
- $hooks{preprocess}{$command}{call}->(
- @params,
- page => $page,
- destpage => $destpage,
- preview => $preprocess_preview,
- );
+ eval {
+ $hooks{preprocess}{$command}{call}->(
+ @params,
+ page => $page,
+ destpage => $destpage,
+ preview => $preprocess_preview,
+ );
+ };
$ret="";
}
$preprocessing{$page}--;
@@ -816,7 +828,8 @@ sub preprocess ($$$;$$) { #{{{
*)? # 0 or more parameters
\]\] # directive closed
}sx;
- } else {
+ }
+ else {
$regex = qr{
(\\?) # 1: escape?
\[\[(!?) # directive open; 2: optional prefix