numbacklinks => 10,
account_creation_password => "",
prefix_directives => 0,
+ hardlink => 0,
} #}}}
sub checkconfig () { #{{{
}
}
+ if (ref $config{ENV} eq 'HASH') {
+ foreach my $val (keys %{$config{ENV}}) {
+ $ENV{$val}=$config{ENV}{$val};
+ }
+ }
+
if ($config{w3mmode}) {
eval q{use Cwd q{abs_path}};
error($@) if $@;
return targetpage($page, $config{htmlext});
} #}}}
-sub srcfile ($) { #{{{
+sub srcfile_stat { #{{{
my $file=shift;
+ my $nothrow=shift;
- return "$config{srcdir}/$file" if -e "$config{srcdir}/$file";
+ return "$config{srcdir}/$file", stat(_) if -e "$config{srcdir}/$file";
foreach my $dir (@{$config{underlaydirs}}, $config{underlaydir}) {
- return "$dir/$file" if -e "$dir/$file";
+ return "$dir/$file", stat(_) if -e "$dir/$file";
}
- error("internal error: $file cannot be found in $config{srcdir} or underlay");
+ error("internal error: $file cannot be found in $config{srcdir} or underlay") unless $nothrow;
return;
} #}}}
+sub srcfile ($;$) { #{{{
+ return (srcfile_stat(@_))[0];
+} #}}}
+
sub add_underlay ($) { #{{{
my $dir=shift;
return $ret;
} #}}}
-sub writefile ($$$;$$) { #{{{
- my $file=shift; # can include subdirs
- my $destdir=shift; # directory to put file in
- my $content=shift;
- my $binary=shift;
- my $writer=shift;
+sub prep_writefile ($$) {
+ my $file=shift;
+ my $destdir=shift;
my $test=$file;
while (length $test) {
}
$test=dirname($test);
}
- my $newfile="$destdir/$file.ikiwiki-new";
- if (-l $newfile) {
- error("cannot write to a symlink ($newfile)");
- }
- my $dir=dirname($newfile);
+ my $dir=dirname("$destdir/$file");
if (! -d $dir) {
my $d="";
foreach my $s (split(m!/+!, $dir)) {
}
}
+ return 1;
+}
+
+sub writefile ($$$;$$) { #{{{
+ my $file=shift; # can include subdirs
+ my $destdir=shift; # directory to put file in
+ my $content=shift;
+ my $binary=shift;
+ my $writer=shift;
+
+ prep_writefile($file, $destdir);
+
+ my $newfile="$destdir/$file.ikiwiki-new";
+ if (-l $newfile) {
+ error("cannot write to a symlink ($newfile)");
+ }
+
my $cleanup = sub { unlink($newfile) };
open (my $out, '>', $newfile) || error("failed to write $newfile: $!", $cleanup);
binmode($out) if ($binary);
page => pagetitle(lc($link), 1),
from => $lpage
).
- "\">?</a>$linktext</span>"
+ "\" rel=\"nofollow\">?</a>$linktext</span>"
}
}
return "<a href=\"$user\">$oiduser</a>";
}
else {
+ eval q{use CGI 'escapeHTML'};
+ error($@) if $@;
+
return htmllink("", "", escapeHTML(
length $config{userdir} ? $config{userdir}."/".$user : $user
), noimageinline => 1);
}
} #}}}
-sub htmlize ($$$) { #{{{
+sub htmlize ($$$$) { #{{{
my $page=shift;
+ my $destpage=shift;
my $type=shift;
my $content=shift;
run_hooks(sanitize => sub {
$content=shift->(
page => $page,
+ destpage => $destpage,
content => $content,
);
});
return $content;
} #}}}
-my %preprocessing;
+our %preprocessing;
our $preprocess_preview=0;
sub preprocess ($$$;$$) { #{{{
my $page=shift; # the page the data comes from
return 0;
}
my %index=%$ret;
- foreach my $page (keys %index) {
- my %d=%{$index{$page}};
+ foreach my $src (keys %index) {
+ my %d=%{$index{$src}};
+ my $page=pagename($src);
$pagectime{$page}=$d{ctime};
if (! $config{rebuild}) {
+ $pagesources{$page}=$src;
$pagemtime{$page}=$d{mtime};
- $pagesources{$page}=$d{src};
$renderedfiles{$page}=$d{dest};
if (exists $d{links} && ref $d{links}) {
$links{$page}=$d{links};
my %index;
foreach my $page (keys %pagemtime) {
next unless $pagemtime{$page};
+ my $src=$pagesources{$page};
- $index{$page}={
+ $index{$src}={
ctime => $pagectime{$page},
mtime => $pagemtime{$page},
- src => $pagesources{$page},
dest => $renderedfiles{$page},
links => $links{$page},
};
if (exists $depends{$page}) {
- $index{$page}{depends} = $depends{$page};
+ $index{$src}{depends} = $depends{$page};
}
if (exists $pagestate{$page}) {
foreach my $id (@hookids) {
foreach my $key (keys %{$pagestate{$page}{$id}}) {
- $index{$page}{state}{$id}{$key}=$pagestate{$page}{$id}{$key};
+ $index{$src}{state}{$id}{$key}=$pagestate{$page}{$id}{$key};
}
}
}
}
}
+ if (! length $code) {
+ $code=0;
+ }
+
+ no warnings;
return eval 'sub { my $page=shift; '.$code.' }';
} #}}}
}
my $sub=pagespec_translate($spec);
- return IkiWiki::FailReason->new('syntax error') if $@;
+ return IkiWiki::FailReason->new("syntax error in pagespec \"$spec\"") if $@;
return $sub->($page, @params);
} #}}}
); #}}}
sub new { #{{{
- return bless \$_[1], $_[0];
+ my $class = shift;
+ my $value = shift;
+ return bless \$value, $class;
} #}}}
package IkiWiki::SuccessReason;
); #}}}
sub new { #{{{
- return bless \$_[1], $_[0];
+ my $class = shift;
+ my $value = shift;
+ return bless \$value, $class;
}; #}}}
package IkiWiki::PageSpec;