X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/54d5308cd83c67e7e9c32450c776ef0dac63549f..bcc6cd8f73f27d8327b6646ff0e03b674b66e7a6:/IkiWiki/Render.pm diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index f9730193b..a4efa0b74 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -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; @@ -184,9 +206,7 @@ sub genpage ($$$) { #{{{ $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, @@ -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", - "\n\n\n\n\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; @@ -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(); } } #}}}