use Encode;
use HTML::Entities;
use URI::Escape q{uri_escape_utf8};
+use POSIX;
use open qw{:utf8 :std};
use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase
- %renderedfiles %oldrenderedfiles %pagesources %depends %hooks
- %forcerebuild $gettext_obj};
+ %renderedfiles %oldrenderedfiles %pagesources %destsources
+ %depends %hooks %forcerebuild $gettext_obj};
use Exporter q{import};
our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
bestlink htmllink readfile writefile pagetype srcfile pagename
displaytime will_render gettext urlto targetpage
- %config %links %renderedfiles %pagesources);
+ %config %links %renderedfiles %pagesources %destsources);
our $VERSION = 1.02; # plugin interface version, next is ikiwiki version
-our $version="1.45";my $installdir="/usr";
+our $version='unknown'; # VERSION_AUTOREPLACE done by Makefile, DNE
+my $installdir=''; # INSTALLDIR_AUTOREPLACE done by Makefile, DNE
+
# Optimisation.
use Memoize;
memoize("abs2rel");
sub defaultconfig () { #{{{
wiki_file_prune_regexps => [qr/\.\./, qr/^\./, qr/\/\./,
qr/\.x?html?$/, qr/\.ikiwiki-new$/,
- qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//],
+ qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//,
+ qr/\.dpkg-tmp$/],
wiki_link_regexp => qr/\[\[(?:([^\]\|]+)\|)?([^\s\]#]+)(?:#([^\s\]]+))?\]\]/,
wiki_file_regexp => qr/(^[-[:alnum:]_.:\/+]+$)/,
web_commit_regexp => qr/^web commit (by (.*?(?=: |$))|from (\d+\.\d+\.\d+\.\d+)):?(.*)/,
delete $ENV{LC_ALL};
}
if (defined $config{locale}) {
- eval q{use POSIX};
- error($@) if $@;
if (POSIX::setlocale(&POSIX::LC_ALL, $config{locale})) {
$ENV{LANG}=$config{locale};
$gettext_obj=undef;
print misctemplate(gettext("Error"),
"<p>".gettext("Error").": $message</p>");
}
- log_message(debug => $message) if $config{syslog};
+ log_message('err' => $message) if $config{syslog};
if (defined $cleaner) {
$cleaner->();
}
}
eval {
Sys::Syslog::syslog($type, "%s", join(" ", @_));
- }
+ };
}
elsif (! $config{cgi}) {
print "@_\n";
return "$config{srcdir}/$file" if -e "$config{srcdir}/$file";
return "$config{underlaydir}/$file" if -e "$config{underlaydir}/$file";
- error("internal error: $file cannot be found");
+ error("internal error: $file cannot be found in $config{srcdir} or $config{underlaydir}");
} #}}}
sub readfile ($;$$) { #{{{
$renderedfiles{$page}=[$dest, grep { $_ ne $dest } @{$renderedfiles{$page}}];
}
else {
+ foreach my $old (@{$renderedfiles{$page}}) {
+ delete $destsources{$old};
+ }
$renderedfiles{$page}=[$dest];
$cleared{$page}=1;
}
+ $destsources{$dest}=$page;
} #}}}
sub bestlink ($$) { #{{{
sub displaytime ($) { #{{{
my $time=shift;
- eval q{use POSIX};
- error($@) if $@;
# strftime doesn't know about encodings, so make sure
# its output is properly treated as utf8
return decode_utf8(POSIX::strftime(
return beautify_url(baseurl($from));
}
- if (! grep { $_ eq $to } map { @{$_} } values %renderedfiles) {
+ if (! $destsources{$to}) {
$to=htmlpage($to);
}
return "<span class=\"selflink\">$linktext</span>"
if length $bestlink && $page eq $bestlink;
- if (! grep { $_ eq $bestlink } map { @{$_} } values %renderedfiles) {
+ if (! $destsources{$bestlink}) {
$bestlink=htmlpage($bestlink);
- }
- if (! grep { $_ eq $bestlink } map { @{$_} } values %renderedfiles) {
- return $linktext unless length $config{cgiurl};
- return "<span><a href=\"".
- cgiurl(
- do => "create",
- page => pagetitle(lc($link), 1),
- from => $lpage
- ).
- "\">?</a>$linktext</span>"
+
+ if (! $destsources{$bestlink}) {
+ return $linktext unless length $config{cgiurl};
+ return "<span><a href=\"".
+ cgiurl(
+ do => "create",
+ page => pagetitle(lc($link), 1),
+ from => $lpage
+ ).
+ "\">?</a>$linktext</span>"
+ }
}
$bestlink=abs2rel($bestlink, dirname(htmlpage($page)));
$content =~ s{(\\?)$config{wiki_link_regexp}}{
defined $2
- ? ( $1 ? "[[$2|$3]]" : htmllink($lpage, $page, linkpage($3), anchor => $4, linktext => pagetitle($2)))
- : ( $1 ? "[[$3]]" : htmllink($lpage, $page, linkpage($3), anchor => $4))
+ ? ( $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;
return $content;
$oldlinks{$page}=[@{$items{link}}];
$links{$page}=[@{$items{link}}];
$depends{$page}=$items{depends}[0] if exists $items{depends};
+ $destsources{$_}=$page foreach @{$items{dest}};
$renderedfiles{$page}=[@{$items{dest}}];
$oldrenderedfiles{$page}=[@{$items{dest}}];
$pagecase{lc $page}=$page;
my $links = $IkiWiki::links{$page} or return undef;
return 0 unless @$links;
my $bestlink = IkiWiki::bestlink($from, $link);
+ return 0 unless length $bestlink;
foreach my $p (@$links) {
return 1 if $bestlink eq IkiWiki::bestlink($page, $p);
}