]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki.pm
* --getctime had bitrotted (well I only ever used it the once so far..),
[git.ikiwiki.info.git] / IkiWiki.pm
index 31228883f3cdd83945b34b611902f17fb0c7de02..81a72d43d2e25a55984c39362eb87671db75b0e4 100644 (file)
@@ -7,8 +7,43 @@ use File::Spec;
 use HTML::Template;
 
 use vars qw{%config %links %oldlinks %oldpagemtime %pagectime
-            %renderedfiles %pagesources %depends %plugins};
-
+            %renderedfiles %pagesources %depends %hooks};
+
+sub defaultconfig () { #{{{
+       wiki_file_prune_regexp => qr{((^|/).svn/|\.\.|^\.|\/\.|\.html?$|\.rss$)},
+       wiki_link_regexp => qr/\[\[(?:([^\]\|]+)\|)?([^\s\]]+)\]\]/,
+       wiki_processor_regexp => qr/\[\[(\w+)\s+([^\]]*)\]\]/,
+       wiki_file_regexp => qr/(^[-[:alnum:]_.:\/+]+$)/,
+       verbose => 0,
+       wikiname => "wiki",
+       default_pageext => ".mdwn",
+       cgi => 0,
+       rcs => 'svn',
+       notify => 0,
+       url => '',
+       cgiurl => '',
+       historyurl => '',
+       diffurl => '',
+       anonok => 0,
+       rss => 0,
+       discussion => 1,
+       rebuild => 0,
+       refresh => 0,
+       getctime => 0,
+       wrapper => undef,
+       wrappermode => undef,
+       svnrepo => undef,
+       svnpath => "trunk",
+       srcdir => undef,
+       destdir => undef,
+       templatedir => "/usr/share/ikiwiki/templates",
+       underlaydir => "/usr/share/ikiwiki/basewiki",
+       setup => undef,
+       adminuser => undef,
+       adminemail => undef,
+       plugin => [qw{inline htmlscrubber}],
+} #}}}
+           
 sub checkconfig () { #{{{
        if ($config{cgi} && ! length $config{url}) {
                error("Must specify url to wiki with --url when using --cgi\n");
@@ -16,20 +51,18 @@ sub checkconfig () { #{{{
        if ($config{rss} && ! length $config{url}) {
                error("Must specify url to wiki with --url when using --rss\n");
        }
-       if ($config{hyperestraier} && ! length $config{url}) {
-               error("Must specify --url when using --hyperestraier\n");
-       }
        
        $config{wikistatedir}="$config{srcdir}/.ikiwiki"
                unless exists $config{wikistatedir};
        
-       if ($config{svn}) {
-               require IkiWiki::Rcs::SVN;
-               $config{rcs}=1;
+       if ($config{rcs}) {
+               eval qq{require IkiWiki::Rcs::$config{rcs}};
+               if ($@) {
+                       error("Failed to load RCS module IkiWiki::Rcs::$config{rcs}: $@");
+               }
        }
        else {
                require IkiWiki::Rcs::Stub;
-               $config{rcs}=0;
        }
 
        foreach my $plugin (@{$config{plugin}}) {
@@ -39,6 +72,12 @@ sub checkconfig () { #{{{
                        error("Failed to load plugin $mod: $@");
                }
        }
+
+       if (exists $hooks{checkconfig}) {
+                foreach my $id (keys %{$hooks{checkconfig}}) {
+                        $hooks{checkconfig}{$id}{call}->();
+                }
+        }
 } #}}}
 
 sub error ($) { #{{{
@@ -386,12 +425,14 @@ sub globlist_match ($$) { #{{{
        return 0;
 } #}}}
 
-sub register_plugin ($$$) { # {{{
-       my $type=shift;
-       my $command=shift;
-       my $function=shift;
+sub hook (@) { # {{{
+       my %param=@_;
+       
+       if (! exists $param{type} || ! ref $param{call} || ! exists $param{id}) {
+               error "hook requires type, call, and id parameters";
+       }
        
-       $plugins{$type}{$command}=$function;
+       $hooks{$param{type}}{$param{id}}=\%param;
 } # }}}
 
 1