X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/98994a4719078d5a52597fccd43bd02163a76746..8b1aeb359661f235a1284252f74d878d090b2eb0:/IkiWiki.pm diff --git a/IkiWiki.pm b/IkiWiki.pm index b56c62801..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; @@ -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))); @@ -723,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;