qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//,
qr/(^|\/)_MTN\//,
qr/\.dpkg-tmp$/],
- wiki_link_regexp => qr{
- \[\[(?=[^!]) # beginning of link
- (?:
- ([^\]\|]+) # 1: link text
- \| # followed by '|'
- )? # optional
-
- ([^\n\r\]#]+) # 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,
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,
umask(possibly_foolish_untaint($config{umask}));
}
- if (!$config{prefix_directives}) {
- $config{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,
- }
-
run_hooks(checkconfig => sub { shift->() });
return 1;
} #}}}
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 => $destpage,
+ content => $content,
+ );
+ });
return $content;
} #}}}
if (exists $pagestate{$page}) {
foreach my $id (@hookids) {
foreach my $key (keys %{$pagestate{$page}{$id}}) {
- $line.=' '.$id.'_'.encode_entities($key)."=".encode_entities($pagestate{$page}{$id}{$key}, " \t\n");
+ $line.=' '.$id.'_'.encode_entities($key, " \t\n")."=".encode_entities($pagestate{$page}{$id}{$key}, " \t\n");
}
}
}
my $page=shift;
my $pagespec=shift;
+ return unless pagespec_valid($pagespec);
+
if (! exists $depends{$page}) {
$depends{$page}=$pagespec;
}
} #}}}
sub pagespec_translate ($) { #{{{
- # This assumes that $page is in scope in the function
- # that evalulates the translated pagespec code.
my $spec=shift;
# Support for old-style GlobLists.
}
elsif ($word =~ /^(\w+)\((.*)\)$/) {
if (exists $IkiWiki::PageSpec::{"match_$1"}) {
- $code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \@params)";
+ $code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \@_)";
}
else {
$code.=' 0';
}
}
else {
- $code.=" IkiWiki::PageSpec::match_glob(\$page, ".safequote($word).", \@params)";
+ $code.=" IkiWiki::PageSpec::match_glob(\$page, ".safequote($word).", \@_)";
}
}
- return $code;
+ return eval 'sub { my $page=shift; '.$code.' }';
} #}}}
sub pagespec_match ($$;@) { #{{{
unshift @params, 'location';
}
- my $ret=eval pagespec_translate($spec);
+ my $sub=pagespec_translate($spec);
return IkiWiki::FailReason->new('syntax error') if $@;
- return $ret;
+ return $sub->($page, @params);
+} #}}}
+
+sub pagespec_valid ($) { #{{{
+ my $spec=shift;
+
+ my $sub=pagespec_translate($spec);
+ return ! $@;
} #}}}
package IkiWiki::FailReason;