]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/Render.pm
My fix to support encoded underscores in page titles broke links to pages
[ikiwiki.git] / IkiWiki / Render.pm
index 7ca9a38208aef4d141f629943ce32d10f388ee20..80c99e4300bd85022fbe8a9b7cdb26d2e7f0b3b1 100644 (file)
@@ -93,10 +93,14 @@ sub genpage ($$$) { #{{{
                $template->param(historyurl => $u);
                $actions++;
        }
-       if ($config{discussion} && $page !~ /.*\/discussion$/ &&
-           (length $config{cgiurl} || exists $links{$page."/".gettext("discussion")})) {
-               $template->param(discussionlink => htmllink($page, $page, gettext("Discussion"), 1, 1));
-               $actions++;
+       if ($config{discussion}) {
+               my $discussionlink=gettext("discussion");
+               if ($page !~ /.*\/\Q$discussionlink\E$/ &&
+                  (length $config{cgiurl} ||
+                   exists $links{$page."/".$discussionlink})) {
+                       $template->param(discussionlink => htmllink($page, $page, gettext("Discussion"), noimageinline => 1, forcesubpage => 1));
+                       $actions++;
+               }
        }
 
        if ($actions) {
@@ -153,7 +157,7 @@ sub scan ($) { #{{{
 
                my @links;
                while ($content =~ /(?<!\\)$config{wiki_link_regexp}/g) {
-                       push @links, titlepage($2);
+                       push @links, linkpage($2);
                }
                if ($config{discussion}) {
                        # Discussion links are a special case since they're
@@ -191,10 +195,29 @@ sub render ($) { #{{{
                $oldpagemtime{$page}=time;
        }
        else {
-               my $content=readfile($srcfile, 1);
+               my $srcfd=readfile($srcfile, 1, 1);
                delete $depends{$file};
                will_render($file, $file, 1);
-               writefile($file, $config{destdir}, $content, 1);
+               writefile($file, $config{destdir}, undef, 1, sub {
+                       my $destfd=shift;
+                       my $cleanup=shift;
+
+                       my $blksize = 16384;
+                       my ($len, $buf, $written);
+                       while ($len = sysread $srcfd, $buf, $blksize) {
+                               if (! defined $len) {
+                                       next if $! =~ /^Interrupted/;
+                                       error("failed to read $srcfile: $!", $cleanup);
+                               }
+                               my $offset = 0;
+                               while ($len) {
+                                       defined($written = syswrite $destfd, $buf, $len, $offset)
+                                               or error("failed to write $file: $!", $cleanup);
+                                       $len -= $written;
+                                       $offset += $written;
+                               }
+                       }
+               });
                $oldpagemtime{$file}=time;
        }
 } #}}}
@@ -341,7 +364,7 @@ sub refresh () { #{{{
                                foreach my $file (keys %rendered, @del) {
                                        next if $f eq $file;
                                        my $page=pagename($file);
-                                       if (pagespec_match($page, $depends{$p})) {
+                                       if (pagespec_match($page, $depends{$p}, $p)) {
                                                debug(sprintf(gettext("rendering %s, which depends on %s"), $f, $page));
                                                render($f);
                                                $rendered{$f}=1;