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+)):?(.*)/,
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;
} #}}}
}
} # }}}
+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;