]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki.pm
the perl critic reminded me that the library shouldn't be using IN and OUT
[ikiwiki.git] / IkiWiki.pm
index 88dcdcb5b89993857cd61ffc64ce8d41f0957459..6b74bf08acbcba30d3c1c12c303e42d702ecc5fd 100644 (file)
@@ -160,11 +160,20 @@ sub loadplugin ($) { #{{{
 
        return if grep { $_ eq $plugin} @{$config{disable_plugins}};
 
+       foreach my $dir ($config{libdir}, "$installdir/lib/ikiwiki") {
+               if (defined $dir && -x "$dir/plugins/$plugin") {
+                       require IkiWiki::Plugin::external;
+                       import IkiWiki::Plugin::external "$dir/plugins/$plugin";
+                       return 1;
+               }
+       }
+
        my $mod="IkiWiki::Plugin::".possibly_foolish_untaint($plugin);
        eval qq{use $mod};
        if ($@) {
                error("Failed to load plugin $mod: $@");
        }
+       return 1;
 } #}}}
 
 sub error ($;$) { #{{{
@@ -283,11 +292,11 @@ sub readfile ($;$$) { #{{{
        }
        
        local $/=undef;
-       open (IN, $file) || error("failed to read $file: $!");
-       binmode(IN) if ($binary);
-       return \*IN if $wantfd;
-       my $ret=<IN>;
-       close IN || error("failed to read $file: $!");
+       open (my $in, $file) || error("failed to read $file: $!");
+       binmode($in) if ($binary);
+       return \*$in if $wantfd;
+       my $ret=<$in>;
+       close $in || error("failed to read $file: $!");
        return $ret;
 } #}}}
 
@@ -322,15 +331,15 @@ sub writefile ($$$;$$) { #{{{
        }
 
        my $cleanup = sub { unlink($newfile) };
-       open (OUT, ">$newfile") || error("failed to write $newfile: $!", $cleanup);
-       binmode(OUT) if ($binary);
+       open (my $out, '>', $newfile) || error("failed to write $newfile: $!", $cleanup);
+       binmode($out) if ($binary);
        if ($writer) {
-               $writer->(\*OUT, $cleanup);
+               $writer->(\*$out, $cleanup);
        }
        else {
-               print OUT $content or error("failed writing to $newfile: $!", $cleanup);
+               print $out $content or error("failed writing to $newfile: $!", $cleanup);
        }
-       close OUT || error("failed saving $newfile: $!", $cleanup);
+       close $out || error("failed saving $newfile: $!", $cleanup);
        rename($newfile, "$destdir/$file") || 
                error("failed renaming $newfile to $destdir/$file: $!", $cleanup);
 } #}}}
@@ -546,7 +555,12 @@ sub htmllink ($$$;@) { #{{{
                $bestlink.="#".$opts{anchor};
        }
 
-       return "<a href=\"$bestlink\">$linktext</a>";
+       my @attrs;
+       if (defined $opts{rel}) {
+               push @attrs, ' rel="'.$opts{rel}.'"';
+       }
+
+       return "<a href=\"$bestlink\"@attrs>$linktext</a>";
 } #}}}
 
 sub htmlize ($$$) { #{{{
@@ -612,7 +626,7 @@ sub preprocess ($$$;$$) { #{{{
                my $command=shift;
                my $params=shift;
                if (length $escape) {
-                       return "\\[[$command $params]]";
+                       return "[[$command $params]]";
                }
                elsif (exists $hooks{preprocess}{$command}) {
                        return "" if $scan && ! $hooks{preprocess}{$command}{scan};
@@ -673,7 +687,7 @@ sub preprocess ($$$;$$) { #{{{
                        return $ret;
                }
                else {
-                       return "\\[[$command $params]]";
+                       return "[[$command $params]]";
                }
        };
        
@@ -773,8 +787,8 @@ sub enable_commit_hook () { #{{{
 } #}}}
 
 sub loadindex () { #{{{
-       open (IN, "$config{wikistatedir}/index") || return;
-       while (<IN>) {
+       open (my $in, "$config{wikistatedir}/index") || return;
+       while (<$in>) {
                $_=possibly_foolish_untaint($_);
                chomp;
                my %items;
@@ -801,7 +815,7 @@ sub loadindex () { #{{{
                $oldrenderedfiles{$page}=[@{$items{dest}}];
                $pagectime{$page}=$items{ctime}[0];
        }
-       close IN;
+       close $in;
 } #}}}
 
 sub saveindex () { #{{{
@@ -812,7 +826,7 @@ sub saveindex () { #{{{
        }
        my $newfile="$config{wikistatedir}/index.new";
        my $cleanup = sub { unlink($newfile) };
-       open (OUT, ">$newfile") || error("cannot write to $newfile: $!", $cleanup);
+       open (my $out, '>', $newfile) || error("cannot write to $newfile: $!", $cleanup);
        foreach my $page (keys %pagemtime) {
                next unless $pagemtime{$page};
                my $line="mtime=$pagemtime{$page} ".
@@ -824,9 +838,9 @@ sub saveindex () { #{{{
                if (exists $depends{$page}) {
                        $line.=" depends=".encode_entities($depends{$page}, " \t\n");
                }
-               print OUT $line."\n" || error("failed writing to $newfile: $!", $cleanup);
+               print $out $line."\n" || error("failed writing to $newfile: $!", $cleanup);
        }
-       close OUT || error("failed saving to $newfile: $!", $cleanup);
+       close $out || error("failed saving to $newfile: $!", $cleanup);
        rename($newfile, "$config{wikistatedir}/index") ||
                error("failed renaming $newfile to $config{wikistatedir}/index", $cleanup);
 } #}}}
@@ -1036,7 +1050,7 @@ sub pagespec_translate ($) { #{{{
                |
                        \)              # )
                |
-                       \w+\([^\)]+\)   # command(params)
+                       \w+\([^\)]*\)   # command(params)
                |
                        [^\s()]+        # any other text
                )