sub defaultconfig () { #{{{
return
- wiki_file_prune_regexps => [qr/\.\./, qr/^\./, qr/\/\./,
+ wiki_file_prune_regexps => [qr/(^|\/)\.\.(\/|$)/, qr/^\./, qr/\/\./,
qr/\.x?html?$/, qr/\.ikiwiki-new$/,
qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//,
qr/(^|\/)_MTN\//,
adminuser => undef,
adminemail => undef,
plugin => [qw{mdwn inline htmlscrubber passwordauth openid signinedit
- lockedit conditional}],
+ lockedit conditional recentchanges}],
libdir => undef,
timeformat => '%c',
locale => undef,
return "<a href=\"$bestlink\"@attrs>$linktext</a>";
} #}}}
+sub userlink ($) { #{{{
+ my $user=shift;
+
+ eval q{use CGI 'escapeHTML'};
+ error($@) if $@;
+ if ($user =~ m!^https?://! &&
+ eval q{use Net::OpenID::VerifiedIdentity; 1} && !$@) {
+ # Munge user-urls, as used by eg, OpenID.
+ my $oid=Net::OpenID::VerifiedIdentity->new(identity => $user);
+ my $display=$oid->display;
+ # Convert "user.somehost.com" to "user [somehost.com]".
+ if ($display !~ /\[/) {
+ $display=~s/^(.*?)\.([^.]+\.[a-z]+)$/$1 [$2]/;
+ }
+ # Convert "http://somehost.com/user" to "user [somehost.com]".
+ if ($display !~ /\[/) {
+ $display=~s/^https?:\/\/(.+)\/([^\/]+)$/$2 [$1]/;
+ }
+ $display=~s!^https?://!!; # make sure this is removed
+ return "<a href=\"$user\">".escapeHTML($display)."</a>";
+ }
+ else {
+ return $user;
+ }
+} #}}}
+
sub htmlize ($$$) { #{{{
my $page=shift;
my $type=shift;
my $content=shift;
+
+ my $oneline = $content !~ /\n/;
if (exists $hooks{htmlize}{$type}) {
$content=$hooks{htmlize}{$type}{call}->(
content => $content,
);
});
+
+ if ($oneline) {
+ # hack to get rid of enclosing junk added by markdown
+ # and other htmlizers
+ $content=~s/^<p>//i;
+ $content=~s/<\/p>$//i;
+ chomp $content;
+ }
return $content;
} #}}}
# consider it significant.
my @params;
while ($params =~ m{
- (?:(\w+)=)? # 1: named parameter key?
+ (?:([-\w]+)=)? # 1: named parameter key?
(?:
"""(.*?)""" # 2: triple-quoted value
|
$command, $page, $preprocessing{$page}).
"]]";
}
- my $ret=$hooks{preprocess}{$command}{call}->(
- @params,
- page => $page,
- destpage => $destpage,
- preview => $preprocess_preview,
- );
+ my $ret;
+ if (! $scan) {
+ $ret=$hooks{preprocess}{$command}{call}->(
+ @params,
+ page => $page,
+ destpage => $destpage,
+ preview => $preprocess_preview,
+ );
+ }
+ else {
+ # use void context during scan pass
+ $hooks{preprocess}{$command}{call}->(
+ @params,
+ page => $page,
+ destpage => $destpage,
+ preview => $preprocess_preview,
+ );
+ $ret="";
+ }
$preprocessing{$page}--;
return $ret;
}
$content =~ s{
(\\?) # 1: escape?
\[\[ # directive open
- (\w+) # 2: command
+ ([-\w]+) # 2: command
\s+
( # 3: the parameters..
(?:
- (?:\w+=)? # named parameter key?
+ (?:[-\w]+=)? # named parameter key?
(?:
""".*?""" # triple-quoted value
|
$pagecase{lc $page}=$page;
foreach my $k (grep /_/, keys %items) {
my ($id, $key)=split(/_/, $k, 2);
- $pagestate{$page}{decode_entities($id)}{decode_entities($key)}=$items{$k};
+ $pagestate{$page}{decode_entities($id)}{decode_entities($key)}=$items{$k}[0];
}
}
$oldrenderedfiles{$page}=[@{$items{dest}}];
require File::Spec;
my $file=File::Spec->canonpath(shift);
my $base=File::Spec->canonpath(shift);
- $file =~ s#^\Q$base\E/*##;
+ $file =~ s#^\Q$base\E/+##;
my $regexp='('.join('|', @{$config{wiki_file_prune_regexps}}).')';
- return $file =~ m/$regexp/;
+ return $file =~ m/$regexp/ && $file ne $base;
} #}}}
sub gettext { #{{{