]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/Render.pm
web commit by joey
[git.ikiwiki.info.git] / IkiWiki / Render.pm
index f9730193b42c26ef3cacfd1eac51cddc73d794be..a4efa0b74511a1b88faefd4e0519242e04736fe4 100644 (file)
@@ -5,6 +5,7 @@ package IkiWiki;
 use warnings;
 use strict;
 use File::Spec;
 use warnings;
 use strict;
 use File::Spec;
+use IkiWiki;
 
 sub linkify ($$) { #{{{
        my $content=shift;
 
 sub linkify ($$) { #{{{
        my $content=shift;
@@ -133,15 +134,15 @@ sub preprocess ($$) { #{{{
                if (length $escape) {
                        return "[[$command $params]]";
                }
                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;
                        }
                        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 {
                }
                else {
-                       return "[[bad directive $command]]";
+                       return "[[$command not processed]]";
                }
        };
        
                }
        };
        
@@ -157,10 +158,31 @@ sub add_depends ($$) { #{{{
                $depends{$page}=$globlist;
        }
        else {
                $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;
 sub genpage ($$$) { #{{{
        my $content=shift;
        my $page=shift;
@@ -184,9 +206,7 @@ sub genpage ($$$) { #{{{
                $u=~s/\[\[file\]\]/$pagesources{$page}/g;
                $template->param(historyurl => $u);
        }
                $u=~s/\[\[file\]\]/$pagesources{$page}/g;
                $template->param(historyurl => $u);
        }
-       if ($config{hyperestraier}) {
-               $template->param(hyperestraierurl => cgiurl());
-       }
+       $template->param(headercontent => $config{headercontent});
 
        $template->param(
                title => $title,
 
        $template->param(
                title => $title,
@@ -278,57 +298,6 @@ sub prune ($) { #{{{
        }
 } #}}}
 
        }
 } #}}}
 
-sub estcfg () { #{{{
-       my $estdir="$config{wikistatedir}/hyperestraier";
-       my $cgi=basename($config{cgiurl});
-       $cgi=~s/\..*$//;
-       open(TEMPLATE, ">$estdir/$cgi.tmpl") ||
-               error("write $estdir/$cgi.tmpl: $!");
-       print TEMPLATE misctemplate("search", 
-               "<!--ESTFORM-->\n\n<!--ESTRESULT-->\n\n<!--ESTINFO-->\n\n");
-       close TEMPLATE;
-       open(TEMPLATE, ">$estdir/$cgi.conf") ||
-               error("write $estdir/$cgi.conf: $!");
-       my $template=HTML::Template->new(
-               filename => "$config{templatedir}/estseek.conf"
-       );
-       eval q{use Cwd 'abs_path'};
-       $template->param(
-               index => $estdir,
-               tmplfile => "$estdir/$cgi.tmpl",
-               destdir => abs_path($config{destdir}),
-               url => $config{url},
-       );
-       print TEMPLATE $template->output;
-       close TEMPLATE;
-       $cgi="$estdir/".basename($config{cgiurl});
-       unlink($cgi);
-       symlink("/usr/lib/estraier/estseek.cgi", $cgi) ||
-               error("symlink $cgi: $!");
-} # }}}
-
-sub estcmd ($;@) { #{{{
-       my @params=split(' ', shift);
-       push @params, "-cl", "$config{wikistatedir}/hyperestraier";
-       if (@_) {
-               push @params, "-";
-       }
-       
-       my $pid=open(CHILD, "|-");
-       if ($pid) {
-               # parent
-               foreach (@_) {
-                       print CHILD "$_\n";
-               }
-               close(CHILD) || error("estcmd @params exited nonzero: $?");
-       }
-       else {
-               # child
-               open(STDOUT, "/dev/null"); # shut it up (closing won't work)
-               exec("estcmd", @params) || error("can't run estcmd");
-       }
-} #}}}
-
 sub refresh () { #{{{
        # find existing pages
        my %exists;
 sub refresh () { #{{{
        # find existing pages
        my %exists;
@@ -494,19 +463,15 @@ FILE:             foreach my $file (@files) {
                }
        }
 
                }
        }
 
-       if ($config{hyperestraier} && (%rendered || @del)) {
-               debug("updating hyperestraier search index");
-               if (%rendered) {
-                       estcmd("gather -cm -bc -cl -sd", 
-                               map { $config{destdir}."/".$renderedfiles{pagename($_)} }
-                               keys %rendered);
+       if (@del && exists $hooks{delete}) {
+               foreach my $id (keys %{$hooks{delete}}) {
+                       $hooks{delete}{$id}{call}->(@del);
                }
                }
-               if (@del) {
-                       estcmd("purge -cl");
+       }
+       if (%rendered && exists $hooks{render}) {
+               foreach my $id (keys %{$hooks{render}}) {
+                       $hooks{render}{$id}{call}->(keys %rendered);
                }
                }
-               
-               debug("generating hyperestraier cgi config");
-               estcfg();
        }
 } #}}}
 
        }
 } #}}}