X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/73ae87a4d475e4702e7135adef0a5be4b0c54279..1be07eae46e4993ecfea3da750727e1ec2d4b07d:/IkiWiki/Render.pm diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 59cec3646..578142d2e 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -8,29 +8,40 @@ use IkiWiki; use Encode; my %backlinks; -my $backlinks_calculated=0; +our %brokenlinks; +my $links_calculated=0; -sub calculate_backlinks () { - return if $backlinks_calculated; - %backlinks=(); +sub calculate_links () { + return if $links_calculated; + %backlinks=%brokenlinks=(); foreach my $page (keys %links) { foreach my $link (@{$links{$page}}) { my $bestlink=bestlink($page, $link); - if (length $bestlink && $bestlink ne $page) { - $backlinks{$bestlink}{$page}=1; + if (length $bestlink) { + $backlinks{$bestlink}{$page}=1 + if $bestlink ne $page; + } + else { + push @{$brokenlinks{$link}}, $page; } } } - $backlinks_calculated=1; + $links_calculated=1; } -sub backlinks ($) { +sub backlink_pages ($) { my $page=shift; - calculate_backlinks(); + calculate_links(); + + return keys %{$backlinks{$page}}; +} + +sub backlinks ($) { + my $page=shift; my @links; - foreach my $p (keys %{$backlinks{$page}}) { + foreach my $p (backlink_pages($page)) { my $href=urlto($p, $page); # Trim common dir prefixes from both pages. @@ -77,11 +88,10 @@ sub genpage ($$) { $actions++; } if ($config{discussion}) { - my $discussionlink=lc(gettext("Discussion")); - if ($page !~ /.*\/\Q$discussionlink\E$/ && + if ($page !~ /.*\/\Q$config{discussionpage}\E$/ && (length $config{cgiurl} || - exists $links{$page."/".$discussionlink})) { - $template->param(discussionlink => htmllink($page, $page, gettext("Discussion"), noimageinline => 1, forcesubpage => 1)); + exists $links{$page."/".$config{discussionpage}})) { + $template->param(discussionlink => htmllink($page, $page, $config{discussionpage}, noimageinline => 1, forcesubpage => 1)); $actions++; } } @@ -147,7 +157,7 @@ sub scan ($) { if ($config{discussion}) { # Discussion links are a special case since they're # not in the text of the page, but on its template. - $links{$page}=[ $page."/".lc(gettext("Discussion")) ]; + $links{$page}=[ $page."/".lc($config{discussionpage}) ]; } else { $links{$page}=[]; @@ -373,12 +383,13 @@ sub refresh () { $links{$page}=[]; $renderedfiles{$page}=[]; $pagemtime{$page}=0; - prune($config{destdir}."/".$_) - foreach @{$oldrenderedfiles{$page}}; + foreach my $old (@{$oldrenderedfiles{$page}}) { + prune($config{destdir}."/".$old); + } delete $pagesources{$page}; - foreach (keys %destsources) { - if ($destsources{$_} eq $page) { - delete $destsources{$_}; + foreach my $source (keys %destsources) { + if ($destsources{$source} eq $page) { + delete $destsources{$source}; } } } @@ -410,9 +421,9 @@ sub refresh () { debug(sprintf(gettext("scanning %s"), $file)); scan($file); } - calculate_backlinks(); + calculate_links(); foreach my $file (@needsbuild) { - debug(sprintf(gettext("rendering %s"), $file)); + debug(sprintf(gettext("building %s"), $file)); render($file); $rendered{$file}=1; } @@ -433,7 +444,7 @@ sub refresh () { foreach my $page (keys %{$backlinks{$p}}) { my $file=$pagesources{$page}; next if $rendered{$file}; - debug(sprintf(gettext("rendering %s, which links to %s"), $file, $p)); + debug(sprintf(gettext("building %s, which links to %s"), $file, $p)); render($file); $rendered{$file}=1; } @@ -454,7 +465,7 @@ sub refresh () { next if $f eq $file; my $page=pagename($file); if (pagespec_match($page, $depends{$p}, location => $p)) { - debug(sprintf(gettext("rendering %s, which depends on %s"), $f, $page)); + debug(sprintf(gettext("building %s, which depends on %s"), $f, $page)); render($f); $rendered{$f}=1; last; @@ -493,7 +504,7 @@ sub refresh () { my $linkfile=$pagesources{$link}; if (defined $linkfile) { next if $rendered{$linkfile}; - debug(sprintf(gettext("rendering %s, to update its backlinks"), $linkfile)); + debug(sprintf(gettext("building %s, to update its backlinks"), $linkfile)); render($linkfile); $rendered{$linkfile}=1; } @@ -505,7 +516,7 @@ sub refresh () { my $page=pagename($src); foreach my $file (@{$oldrenderedfiles{$page}}) { if (! grep { $_ eq $file } @{$renderedfiles{$page}}) { - debug(sprintf(gettext("removing %s, no longer rendered by %s"), $file, $page)); + debug(sprintf(gettext("removing %s, no longer built by %s"), $file, $page)); prune($config{destdir}."/".$file); } } @@ -529,7 +540,7 @@ sub commandline_render () { $file=~s/\Q$config{srcdir}\E\/?//; my $type=pagetype($file); - die sprintf(gettext("ikiwiki: cannot render %s"), $srcfile)."\n" unless defined $type; + die sprintf(gettext("ikiwiki: cannot build %s"), $srcfile)."\n" unless defined $type; my $content=readfile($srcfile); my $page=pagename($file); $pagesources{$page}=$file;