X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/83618add817c1b405d67801d49b6937f0101bace..f7f1cb80503a775f3b20ea1df67f0c72575b53c4:/IkiWiki.pm diff --git a/IkiWiki.pm b/IkiWiki.pm index 8f9bd990a..331300db0 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -6,11 +6,12 @@ use strict; 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 @@ -83,8 +84,6 @@ sub checkconfig () { #{{{ 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; @@ -152,7 +151,7 @@ sub error ($;$) { #{{{ print misctemplate(gettext("Error"), "

".gettext("Error").": $message

"); } - log_message(debug => $message) if $config{syslog}; + log_message('err' => $message) if $config{syslog}; if (defined $cleaner) { $cleaner->(); } @@ -177,7 +176,7 @@ sub log_message ($$) { #{{{ } eval { Sys::Syslog::syslog($type, "%s", join(" ", @_)); - } + }; } elsif (! $config{cgi}) { print "@_\n"; @@ -328,9 +327,13 @@ sub will_render ($$;$) { #{{{ $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 ($$) { #{{{ @@ -430,8 +433,6 @@ sub abs2rel ($$) { #{{{ 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( @@ -455,7 +456,7 @@ sub urlto ($$) { #{{{ return beautify_url(baseurl($from)); } - if (! grep { $_ eq $to } map { @{$_} } values %renderedfiles) { + if (! $destsources{$to}) { $to=htmlpage($to); } @@ -489,18 +490,19 @@ sub htmllink ($$$;@) { #{{{ return "$linktext" 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 " "create", - page => pagetitle(lc($link), 1), - from => $lpage - ). - "\">?$linktext" + + if (! $destsources{$bestlink}) { + return $linktext unless length $config{cgiurl}; + return " "create", + page => pagetitle(lc($link), 1), + from => $lpage + ). + "\">?$linktext" + } } $bestlink=abs2rel($bestlink, dirname(htmlpage($page))); @@ -549,8 +551,14 @@ sub linkify ($$$) { #{{{ $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; @@ -717,6 +725,7 @@ sub loadindex () { #{{{ $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;