use Memoize;
memoize("abs2rel");
memoize("pagespec_translate");
+memoize("file_pruned");
my $installdir=''; # INSTALLDIR_AUTOREPLACE done by Makefile, DNE
our $version='unknown'; # VERSION_AUTOREPLACE done by Makefile, DNE
sub defaultconfig () { #{{{
- wiki_file_prune_regexp => qr{((^|/).svn/|\.\.|^\.|\/\.|\.x?html?$|\.rss$|\.atom$|.arch-ids/|{arch}/)},
+ wiki_file_prune_regexps => [qr/\.\./, qr/^\./, qr/\/\./, qr/\.x?html?$/,
+ qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//],
wiki_link_regexp => qr/\[\[(?:([^\]\|]+)\|)?([^\s\]]+)\]\]/,
wiki_file_regexp => qr/(^[-[:alnum:]_.:\/+]+$)/,
web_commit_regexp => qr/^web commit (by (.*?(?=: |$))|from (\d+\.\d+\.\d+\.\d+)):?(.*)/,
wikiname => "wiki",
default_pageext => "mdwn",
cgi => 0,
- rcs => 'svn',
+ rcs => '',
notify => 0,
url => '',
cgiurl => '',
locale => undef,
sslcookie => 0,
httpauth => 0,
+ userdir => "",
} #}}}
sub checkconfig () { #{{{
if ($config{cgi} && ! length $config{url}) {
error("Must specify url to wiki with --url when using --cgi\n");
}
- if (($config{rss} || $config{atom}) && ! length $config{url}) {
- error("Must specify url to wiki with --url when using --rss or --atom\n");
- }
$config{wikistatedir}="$config{srcdir}/.ikiwiki"
unless exists $config{wikistatedir};
my $link=shift;
my $cwd=$page;
+ if ($link=~s/^\/+//) {
+ # absolute links
+ $cwd="";
+ }
+
do {
my $l=$cwd;
$l.="/" if length $l;
$file=~/\.(png|gif|jpg|jpeg)$/i;
} #}}}
-sub pagetitle ($) { #{{{
+sub pagetitle ($;$) { #{{{
my $page=shift;
- $page=~s/__(\d+)__/&#$1;/g;
+ my $unescaped=shift;
+
+ if ($unescaped) {
+ $page=~s/__(\d+)__/chr($1)/eg;
+ }
+ else {
+ $page=~s/__(\d+)__/&#$1;/g;
+ }
$page=~y/_/ /;
+
return $page;
} #}}}
$bestlink=htmlpage($bestlink);
}
if (! grep { $_ eq $bestlink } map { @{$_} } values %renderedfiles) {
+ return $linktext unless length $config{cgiurl};
return "<span><a href=\"".
cgiurl(do => "create", page => lc($link), from => $page).
"\">?</a>$linktext</span>"
}
} # }}}
+sub file_pruned ($$) { #{{{
+ require File::Spec;
+ my $file=File::Spec->canonpath(shift);
+ my $base=File::Spec->canonpath(shift);
+ $file=~s#^\Q$base\E/*##;
+
+ my $regexp='('.join('|', @{$config{wiki_file_prune_regexps}}).')';
+ $file =~ m/$regexp/;
+} #}}}
+
sub pagespec_match ($$) { #{{{
my $page=shift;
my $spec=shift;