X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/64a8c828b8cfa342118dd6e28b9dff43d83c6311..9c87cc0d13424fc182097a82db47ea41e27cb328:/IkiWiki.pm
diff --git a/IkiWiki.pm b/IkiWiki.pm
index 016c664b5..cdc0ab74e 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
@@ -37,21 +37,6 @@ sub defaultconfig () { #{{{
qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//,
qr/(^|\/)_MTN\//,
qr/\.dpkg-tmp$/],
- wiki_link_regexp => qr{
- \[\[ # beginning of link
- (?:
- ([^\]\|\n\s]+) # 1: link text
- \| # followed by '|'
- )? # optional
-
- ([^\s\]#]+) # 2: page to link to
- (?:
- \# # '#', beginning of anchor
- ([^\s\]]+) # 3: anchor text
- )? # optional
-
- \]\] # end of link
- }x,
wiki_file_regexp => qr/(^[-[:alnum:]_.:\/+]+$)/,
web_commit_regexp => qr/^web commit (by (.*?(?=: |$))|from (\d+\.\d+\.\d+\.\d+)):?(.*)/,
verbose => 0,
@@ -68,6 +53,8 @@ sub defaultconfig () { #{{{
diffurl => '',
rss => 0,
atom => 0,
+ allowrss => 0,
+ allowatom => 0,
discussion => 1,
rebuild => 0,
refresh => 0,
@@ -87,8 +74,8 @@ sub defaultconfig () { #{{{
setup => undef,
adminuser => undef,
adminemail => undef,
- plugin => [qw{mdwn inline htmlscrubber passwordauth openid signinedit
- lockedit conditional recentchanges}],
+ plugin => [qw{mdwn link inline htmlscrubber passwordauth openid
+ signinedit lockedit conditional recentchanges}],
libdir => undef,
timeformat => '%c',
locale => undef,
@@ -98,6 +85,7 @@ sub defaultconfig () { #{{{
usedirs => 1,
numbacklinks => 10,
account_creation_password => "",
+ prefix_directives => 0,
} #}}}
sub checkconfig () { #{{{
@@ -613,33 +601,10 @@ sub htmllink ($$$;@) { #{{{
return "$linktext";
} #}}}
-sub openiduser ($) { #{{{
- my $user=shift;
-
- if ($user =~ m!^https?://! &&
- eval q{use Net::OpenID::VerifiedIdentity; 1} && !$@) {
- 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
- eval q{use CGI 'escapeHTML'};
- error($@) if $@;
- return escapeHTML($display);
- }
- return;
-}
-
sub userlink ($) { #{{{
my $user=shift;
- my $oiduser=openiduser($user);
+ my $oiduser=eval { openiduser($user) };
if (defined $oiduser) {
return "$oiduser";
}
@@ -686,21 +651,17 @@ sub htmlize ($$$) { #{{{
} #}}}
sub linkify ($$$) { #{{{
- my $lpage=shift; # the page containing the links
- my $page=shift; # the page the link will end up on (different for inline)
+ my $page=shift;
+ my $destpage=shift;
my $content=shift;
- $content =~ s{(\\?)$config{wiki_link_regexp}}{
- defined $2
- ? ( $1
- ? "[[$2|$3".($4 ? "#$4" : "")."]]"
- : htmllink($lpage, $page, linkpage($3),
- anchor => $4, linktext => pagetitle($2)))
- : ( $1
- ? "[[$3".($4 ? "#$4" : "")."]]"
- : htmllink($lpage, $page, linkpage($3),
- anchor => $4))
- }eg;
+ run_hooks(linkify => sub {
+ $content=shift->(
+ page => $page,
+ destpage => $page,
+ content => $content,
+ );
+ });
return $content;
} #}}}
@@ -720,10 +681,11 @@ sub preprocess ($$$;$$) { #{{{
my $handle=sub {
my $escape=shift;
+ my $prefix=shift;
my $command=shift;
my $params=shift;
if (length $escape) {
- return "[[$command $params]]";
+ return "[[$prefix$command $params]]";
}
elsif (exists $hooks{preprocess}{$command}) {
return "" if $scan && ! $hooks{preprocess}{$command}{scan};
@@ -797,31 +759,58 @@ sub preprocess ($$$;$$) { #{{{
return $ret;
}
else {
- return "[[$command $params]]";
+ return "[[$prefix$command $params]]";
}
};
- $content =~ s{
- (\\?) # 1: escape?
- \[\[ # directive open
- ([-\w]+) # 2: command
- \s+
- ( # 3: the parameters..
- (?:
- (?:[-\w]+=)? # named parameter key?
+ my $regex;
+ if ($config{prefix_directives}) {
+ $regex = qr{
+ (\\?) # 1: escape?
+ \[\[(!) # directive open; 2: prefix
+ ([-\w]+) # 3: command
+ ( # 4: the parameters..
+ \s+ # Must have space if parameters present
(?:
- """.*?""" # triple-quoted value
- |
- "[^"]+" # single-quoted value
- |
- [^\s\]]+ # unquoted value
+ (?:[-\w]+=)? # named parameter key?
+ (?:
+ """.*?""" # triple-quoted value
+ |
+ "[^"]+" # single-quoted value
+ |
+ [^\s\]]+ # unquoted value
+ )
+ \s* # whitespace or end
+ # of directive
)
- \s* # whitespace or end
- # of directive
- )
- *) # 0 or more parameters
- \]\] # directive closed
- }{$handle->($1, $2, $3)}sexg;
+ *)? # 0 or more parameters
+ \]\] # directive closed
+ }sx;
+ } else {
+ $regex = qr{
+ (\\?) # 1: escape?
+ \[\[(!?) # directive open; 2: optional prefix
+ ([-\w]+) # 3: command
+ \s+
+ ( # 4: the parameters..
+ (?:
+ (?:[-\w]+=)? # named parameter key?
+ (?:
+ """.*?""" # triple-quoted value
+ |
+ "[^"]+" # single-quoted value
+ |
+ [^\s\]]+ # unquoted value
+ )
+ \s* # whitespace or end
+ # of directive
+ )
+ *) # 0 or more parameters
+ \]\] # directive closed
+ }sx;
+ }
+
+ $content =~ s{$regex}{$handle->($1, $2, $3, $4)}eg;
return $content;
} #}}}
@@ -907,7 +896,7 @@ sub loadindex () { #{{{
%oldrenderedfiles=%pagectime=();
if (! $config{rebuild}) {
%pagesources=%pagemtime=%oldlinks=%links=%depends=
- %destsources=%renderedfiles=%pagecase=();
+ %destsources=%renderedfiles=%pagecase=%pagestate=();
}
open (my $in, "<", "$config{wikistatedir}/index") || return;
while (<$in>) {