]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/Render.pm
change plugin interface to use named parameters for flexability
[ikiwiki.git] / IkiWiki / Render.pm
index f9730193b42c26ef3cacfd1eac51cddc73d794be..f90f16335ead61cf034b4f78da8872b775fd6dd2 100644 (file)
@@ -5,6 +5,7 @@ package IkiWiki;
 use warnings;
 use strict;
 use File::Spec;
+use IkiWiki;
 
 sub linkify ($$) { #{{{
        my $content=shift;
@@ -133,15 +134,15 @@ sub preprocess ($$) { #{{{
                if (length $escape) {
                        return "[[$command $params]]";
                }
-               elsif (exists $plugins{preprocess}{$command}) {
+               elsif (exists $hooks{preprocess}{$command}) {
                        my %params;
                        while ($params =~ /(\w+)=\"([^"]+)"(\s+|$)/g) {
                                $params{$1}=$2;
                        }
-                       return $plugins{preprocess}{$command}->(page => $page, %params);
+                       return $hooks{preprocess}{$command}{call}->(page => $page, %params);
                }
                else {
-                       return "[[bad directive $command]]";
+                       return "[[$command not processed]]";
                }
        };
        
@@ -157,10 +158,31 @@ sub add_depends ($$) { #{{{
                $depends{$page}=$globlist;
        }
        else {
-               $depends{$page}.=" ".$globlist;
+               $depends{$page}=globlist_merge($depends{$page}, $globlist);
        }
 } # }}}
 
+sub globlist_merge ($$) { #{{{
+       my $a=shift;
+       my $b=shift;
+
+       my $ret="";
+       # Only add negated globs if they are not matched by the other globlist.
+       foreach my $i ((map { [ $a, $_ ] } split(" ", $b)), 
+                      (map { [ $b, $_ ] } split(" ", $a))) {
+               if ($i->[1]=~/^!(.*)/) {
+                       if (! globlist_match($1, $i->[0])) {
+                               $ret.=" ".$i->[1];
+                       }
+               }
+               else {
+                       $ret.=" ".$i->[1];
+               }
+       }
+       
+       return $ret;
+} #}}}
+
 sub genpage ($$$) { #{{{
        my $content=shift;
        my $page=shift;